@arbitrum/nitro-contracts 2.0.0 → 3.0.0-alpha.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (503) hide show
  1. package/build/contracts/@openzeppelin/contracts/access/Ownable.sol/Ownable.dbg.json +1 -1
  2. package/build/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.dbg.json +1 -1
  3. package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.dbg.json +1 -1
  4. package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.json +2 -2
  5. package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.dbg.json +1 -1
  6. package/build/contracts/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.dbg.json +1 -1
  7. package/build/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.dbg.json +1 -1
  8. package/build/contracts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.dbg.json +1 -1
  9. package/build/contracts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.json +2 -2
  10. package/build/contracts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.dbg.json +1 -1
  11. package/build/contracts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.json +2 -2
  12. package/build/contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.dbg.json +1 -1
  13. package/build/contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.json +2 -2
  14. package/build/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol/UUPSUpgradeable.dbg.json +1 -1
  15. package/build/contracts/@openzeppelin/contracts/security/ReentrancyGuard.sol/ReentrancyGuard.dbg.json +1 -1
  16. package/build/contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json +1 -1
  17. package/build/contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.json +2 -2
  18. package/build/contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json +1 -1
  19. package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json +1 -1
  20. package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.dbg.json +4 -0
  21. package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.json +86 -0
  22. package/build/contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.dbg.json +1 -1
  23. package/build/contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.json +2 -2
  24. package/build/contracts/@openzeppelin/contracts/utils/Address.sol/Address.dbg.json +1 -1
  25. package/build/contracts/@openzeppelin/contracts/utils/Address.sol/Address.json +2 -2
  26. package/build/contracts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +1 -1
  27. package/build/contracts/@openzeppelin/contracts/utils/Create2.sol/Create2.dbg.json +4 -0
  28. package/build/contracts/@openzeppelin/contracts/utils/Create2.sol/Create2.json +10 -0
  29. package/build/contracts/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.dbg.json +1 -1
  30. package/build/contracts/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.json +2 -2
  31. package/build/contracts/@openzeppelin/contracts/utils/Strings.sol/Strings.dbg.json +1 -1
  32. package/build/contracts/@openzeppelin/contracts/utils/Strings.sol/Strings.json +2 -2
  33. package/build/contracts/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol/AccessControlUpgradeable.dbg.json +1 -1
  34. package/build/contracts/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol/AccessControlUpgradeable.json +13 -0
  35. package/build/contracts/@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol/IAccessControlUpgradeable.dbg.json +1 -1
  36. package/build/contracts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.dbg.json +1 -1
  37. package/build/contracts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.json +13 -0
  38. package/build/contracts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.dbg.json +1 -1
  39. package/build/contracts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.json +15 -1
  40. package/build/contracts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.dbg.json +1 -1
  41. package/build/contracts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.json +13 -0
  42. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.dbg.json +1 -1
  43. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.json +2 -2
  44. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.dbg.json +1 -1
  45. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.json +15 -1
  46. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/Create2Upgradeable.sol/Create2Upgradeable.dbg.json +4 -0
  47. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/Create2Upgradeable.sol/Create2Upgradeable.json +10 -0
  48. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol/StorageSlotUpgradeable.dbg.json +1 -1
  49. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol/StorageSlotUpgradeable.json +2 -2
  50. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol/StringsUpgradeable.dbg.json +1 -1
  51. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol/StringsUpgradeable.json +2 -2
  52. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol/ERC165Upgradeable.dbg.json +1 -1
  53. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol/ERC165Upgradeable.json +13 -0
  54. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol/IERC165Upgradeable.dbg.json +1 -1
  55. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/structs/EnumerableSetUpgradeable.sol/EnumerableSetUpgradeable.dbg.json +4 -0
  56. package/build/contracts/@openzeppelin/contracts-upgradeable/utils/structs/EnumerableSetUpgradeable.sol/EnumerableSetUpgradeable.json +10 -0
  57. package/build/contracts/src/assertionStakingPool/AbsBoldStakingPool.sol/AbsBoldStakingPool.dbg.json +4 -0
  58. package/build/contracts/{@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol/IERC20Upgradeable.json → src/assertionStakingPool/AbsBoldStakingPool.sol/AbsBoldStakingPool.json} +41 -95
  59. package/build/contracts/src/assertionStakingPool/AssertionStakingPool.sol/AssertionStakingPool.dbg.json +4 -0
  60. package/build/contracts/src/assertionStakingPool/AssertionStakingPool.sol/AssertionStakingPool.json +340 -0
  61. package/build/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol/AssertionStakingPoolCreator.dbg.json +4 -0
  62. package/build/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol/AssertionStakingPoolCreator.json +89 -0
  63. package/build/contracts/src/assertionStakingPool/EdgeStakingPool.sol/EdgeStakingPool.dbg.json +4 -0
  64. package/build/contracts/src/assertionStakingPool/EdgeStakingPool.sol/EdgeStakingPool.json +248 -0
  65. package/build/contracts/src/assertionStakingPool/EdgeStakingPoolCreator.sol/EdgeStakingPoolCreator.dbg.json +4 -0
  66. package/build/contracts/src/assertionStakingPool/EdgeStakingPoolCreator.sol/EdgeStakingPoolCreator.json +83 -0
  67. package/build/contracts/src/assertionStakingPool/StakingPoolCreatorUtils.sol/StakingPoolCreatorUtils.dbg.json +4 -0
  68. package/build/contracts/src/assertionStakingPool/StakingPoolCreatorUtils.sol/StakingPoolCreatorUtils.json +16 -0
  69. package/build/contracts/src/assertionStakingPool/interfaces/IAbsBoldStakingPool.sol/IAbsBoldStakingPool.dbg.json +4 -0
  70. package/build/contracts/src/assertionStakingPool/interfaces/IAbsBoldStakingPool.sol/IAbsBoldStakingPool.json +140 -0
  71. package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPool.sol/IAssertionStakingPool.dbg.json +4 -0
  72. package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPool.sol/IAssertionStakingPool.json +324 -0
  73. package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPoolCreator.sol/IAssertionStakingPoolCreator.dbg.json +4 -0
  74. package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPoolCreator.sol/IAssertionStakingPoolCreator.json +84 -0
  75. package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPool.sol/IEdgeStakingPool.dbg.json +4 -0
  76. package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPool.sol/IEdgeStakingPool.json +232 -0
  77. package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPoolCreator.sol/IEdgeStakingPoolCreator.dbg.json +4 -0
  78. package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPoolCreator.sol/IEdgeStakingPoolCreator.json +78 -0
  79. package/build/contracts/src/bridge/AbsBridge.sol/AbsBridge.dbg.json +1 -1
  80. package/build/contracts/src/bridge/AbsBridge.sol/AbsBridge.json +13 -0
  81. package/build/contracts/src/bridge/AbsInbox.sol/AbsInbox.dbg.json +1 -1
  82. package/build/contracts/src/bridge/AbsInbox.sol/AbsInbox.json +20 -7
  83. package/build/contracts/src/bridge/AbsOutbox.sol/AbsOutbox.dbg.json +1 -1
  84. package/build/contracts/src/bridge/Bridge.sol/Bridge.dbg.json +1 -1
  85. package/build/contracts/src/bridge/Bridge.sol/Bridge.json +15 -2
  86. package/build/contracts/src/bridge/DelayBuffer.sol/DelayBuffer.dbg.json +4 -0
  87. package/build/contracts/src/bridge/DelayBuffer.sol/DelayBuffer.json +24 -0
  88. package/build/contracts/src/bridge/ERC20Bridge.sol/ERC20Bridge.dbg.json +1 -1
  89. package/build/contracts/src/bridge/ERC20Bridge.sol/ERC20Bridge.json +15 -2
  90. package/build/contracts/src/bridge/ERC20Inbox.sol/ERC20Inbox.dbg.json +1 -1
  91. package/build/contracts/src/bridge/ERC20Inbox.sol/ERC20Inbox.json +22 -9
  92. package/build/contracts/src/bridge/ERC20Outbox.sol/ERC20Outbox.dbg.json +1 -1
  93. package/build/contracts/src/bridge/ERC20Outbox.sol/ERC20Outbox.json +2 -2
  94. package/build/contracts/src/bridge/GasRefunder.sol/GasRefunder.dbg.json +1 -1
  95. package/build/contracts/src/bridge/GasRefunder.sol/GasRefunder.json +2 -2
  96. package/build/contracts/src/bridge/IBridge.sol/IBridge.dbg.json +1 -1
  97. package/build/contracts/src/bridge/IDelayedMessageProvider.sol/IDelayedMessageProvider.dbg.json +1 -1
  98. package/build/contracts/src/bridge/IERC20Bridge.sol/IERC20Bridge.dbg.json +1 -1
  99. package/build/contracts/src/bridge/IERC20Inbox.sol/IERC20Inbox.dbg.json +1 -1
  100. package/build/contracts/src/bridge/IERC20Inbox.sol/IERC20Inbox.json +1 -1
  101. package/build/contracts/src/bridge/IEthBridge.sol/IEthBridge.dbg.json +1 -1
  102. package/build/contracts/src/bridge/IInbox.sol/IInbox.dbg.json +1 -1
  103. package/build/contracts/src/bridge/IInbox.sol/IInbox.json +1 -1
  104. package/build/contracts/src/bridge/IInboxBase.sol/IInboxBase.dbg.json +1 -1
  105. package/build/contracts/src/bridge/IInboxBase.sol/IInboxBase.json +1 -1
  106. package/build/contracts/src/bridge/IOutbox.sol/IOutbox.dbg.json +1 -1
  107. package/build/contracts/src/bridge/IOwnable.sol/IOwnable.dbg.json +1 -1
  108. package/build/contracts/src/bridge/ISequencerInbox.sol/ISequencerInbox.dbg.json +1 -1
  109. package/build/contracts/src/bridge/ISequencerInbox.sol/ISequencerInbox.json +441 -0
  110. package/build/contracts/src/bridge/Inbox.sol/Inbox.dbg.json +1 -1
  111. package/build/contracts/src/bridge/Inbox.sol/Inbox.json +22 -4
  112. package/build/contracts/src/bridge/Messages.sol/Messages.dbg.json +1 -1
  113. package/build/contracts/src/bridge/Messages.sol/Messages.json +2 -2
  114. package/build/contracts/src/bridge/Outbox.sol/Outbox.dbg.json +1 -1
  115. package/build/contracts/src/bridge/Outbox.sol/Outbox.json +2 -2
  116. package/build/contracts/src/bridge/SequencerInbox.sol/SequencerInbox.dbg.json +1 -1
  117. package/build/contracts/src/bridge/SequencerInbox.sol/SequencerInbox.json +564 -7
  118. package/build/contracts/src/chain/CacheManager.sol/CacheManager.dbg.json +1 -1
  119. package/build/contracts/src/chain/CacheManager.sol/CacheManager.json +15 -2
  120. package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/EdgeChallengeManager.dbg.json +4 -0
  121. package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/EdgeChallengeManager.json +1631 -0
  122. package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/IEdgeChallengeManager.dbg.json +4 -0
  123. package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/IEdgeChallengeManager.json +762 -0
  124. package/build/contracts/src/challengeV2/IAssertionChain.sol/IAssertionChain.dbg.json +4 -0
  125. package/build/contracts/src/challengeV2/IAssertionChain.sol/IAssertionChain.json +247 -0
  126. package/build/contracts/src/challengeV2/libraries/ArrayUtilsLib.sol/ArrayUtilsLib.dbg.json +4 -0
  127. package/build/contracts/src/challengeV2/libraries/ArrayUtilsLib.sol/ArrayUtilsLib.json +10 -0
  128. package/build/contracts/src/challengeV2/libraries/ChallengeEdgeLib.sol/ChallengeEdgeLib.dbg.json +4 -0
  129. package/build/contracts/src/challengeV2/libraries/ChallengeEdgeLib.sol/ChallengeEdgeLib.json +10 -0
  130. package/build/contracts/src/challengeV2/libraries/EdgeChallengeManagerLib.sol/EdgeChallengeManagerLib.dbg.json +4 -0
  131. package/build/contracts/src/challengeV2/libraries/EdgeChallengeManagerLib.sol/EdgeChallengeManagerLib.json +24 -0
  132. package/build/contracts/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol/MerkleTreeAccumulatorLib.dbg.json +4 -0
  133. package/build/contracts/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol/MerkleTreeAccumulatorLib.json +24 -0
  134. package/build/contracts/src/challengeV2/libraries/UintUtilsLib.sol/UintUtilsLib.dbg.json +4 -0
  135. package/build/contracts/src/challengeV2/libraries/UintUtilsLib.sol/UintUtilsLib.json +10 -0
  136. package/build/contracts/src/libraries/AddressAliasHelper.sol/AddressAliasHelper.dbg.json +1 -1
  137. package/build/contracts/src/libraries/AddressAliasHelper.sol/AddressAliasHelper.json +2 -2
  138. package/build/contracts/src/libraries/AdminFallbackProxy.sol/AdminFallbackProxy.dbg.json +1 -1
  139. package/build/contracts/src/libraries/AdminFallbackProxy.sol/AdminFallbackProxy.json +2 -2
  140. package/build/contracts/src/libraries/AdminFallbackProxy.sol/DoubleLogicERC1967Upgrade.dbg.json +1 -1
  141. package/build/contracts/src/libraries/ArbitrumChecker.sol/ArbitrumChecker.dbg.json +1 -1
  142. package/build/contracts/src/libraries/ArbitrumChecker.sol/ArbitrumChecker.json +2 -2
  143. package/build/contracts/src/libraries/CryptographyPrimitives.sol/CryptographyPrimitives.dbg.json +1 -1
  144. package/build/contracts/src/libraries/CryptographyPrimitives.sol/CryptographyPrimitives.json +2 -2
  145. package/build/contracts/src/libraries/DecimalsConverterHelper.sol/DecimalsConverterHelper.dbg.json +1 -1
  146. package/build/contracts/src/libraries/DecimalsConverterHelper.sol/DecimalsConverterHelper.json +2 -2
  147. package/build/contracts/src/libraries/DelegateCallAware.sol/DelegateCallAware.dbg.json +1 -1
  148. package/build/contracts/src/libraries/DoubleLogicUUPSUpgradeable.sol/DoubleLogicUUPSUpgradeable.dbg.json +1 -1
  149. package/build/contracts/src/libraries/GasRefundEnabled.sol/GasRefundEnabled.dbg.json +1 -1
  150. package/build/contracts/src/libraries/IGasRefunder.sol/IGasRefunder.dbg.json +1 -1
  151. package/build/contracts/src/libraries/IReader4844.sol/IReader4844.dbg.json +1 -1
  152. package/build/contracts/src/libraries/MerkleLib.sol/MerkleLib.dbg.json +1 -1
  153. package/build/contracts/src/libraries/MerkleLib.sol/MerkleLib.json +2 -2
  154. package/build/contracts/src/libraries/UUPSNotUpgradeable.sol/UUPSNotUpgradeable.dbg.json +1 -1
  155. package/build/contracts/src/mocks/Benchmarks.sol/Benchmarks.dbg.json +1 -1
  156. package/build/contracts/src/mocks/Benchmarks.sol/Benchmarks.json +2 -2
  157. package/build/contracts/src/mocks/BridgeStub.sol/BridgeStub.dbg.json +1 -1
  158. package/build/contracts/src/mocks/BridgeStub.sol/BridgeStub.json +8 -8
  159. package/build/contracts/src/mocks/BridgeUnproxied.sol/BridgeUnproxied.dbg.json +1 -1
  160. package/build/contracts/src/mocks/BridgeUnproxied.sol/BridgeUnproxied.json +28 -2
  161. package/build/contracts/src/mocks/InboxStub.sol/InboxStub.dbg.json +1 -1
  162. package/build/contracts/src/mocks/InboxStub.sol/InboxStub.json +2 -2
  163. package/build/contracts/src/mocks/MerkleTreeAccess.sol/MerkleTreeAccess.dbg.json +4 -0
  164. package/build/contracts/src/mocks/MerkleTreeAccess.sol/MerkleTreeAccess.json +227 -0
  165. package/build/contracts/src/mocks/MockRollupEventInbox.sol/MockRollupEventInbox.dbg.json +4 -0
  166. package/build/contracts/src/mocks/MockRollupEventInbox.sol/MockRollupEventInbox.json +133 -0
  167. package/build/contracts/src/mocks/MultiCallTest.sol/MultiCallTest.dbg.json +1 -1
  168. package/build/contracts/src/mocks/MultiCallTest.sol/MultiCallTest.json +2 -2
  169. package/build/contracts/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol/PendingBlkTimeAndNrAdvanceCheck.dbg.json +1 -1
  170. package/build/contracts/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol/PendingBlkTimeAndNrAdvanceCheck.json +2 -2
  171. package/build/contracts/src/mocks/Program.sol/ProgramTest.dbg.json +1 -1
  172. package/build/contracts/src/mocks/Program.sol/ProgramTest.json +2 -2
  173. package/build/contracts/src/mocks/ProxyAdminForBinding.sol/ProxyAdminForBinding.dbg.json +1 -1
  174. package/build/contracts/src/mocks/ProxyAdminForBinding.sol/ProxyAdminForBinding.json +2 -2
  175. package/build/contracts/src/mocks/SdkStorage.sol/SdkStorage.dbg.json +1 -1
  176. package/build/contracts/src/mocks/SdkStorage.sol/SdkStorage.json +2 -2
  177. package/build/contracts/src/mocks/SequencerInboxBlobMock.sol/SequencerInboxBlobMock.dbg.json +4 -0
  178. package/build/contracts/src/mocks/SequencerInboxBlobMock.sol/SequencerInboxBlobMock.json +1632 -0
  179. package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.dbg.json +1 -1
  180. package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.json +564 -7
  181. package/build/contracts/src/mocks/Simple.sol/Simple.dbg.json +1 -1
  182. package/build/contracts/src/mocks/Simple.sol/Simple.json +2 -2
  183. package/build/contracts/src/mocks/SimpleCacheManager.sol/SimpleCacheManager.dbg.json +1 -1
  184. package/build/contracts/src/mocks/SimpleCacheManager.sol/SimpleCacheManager.json +2 -2
  185. package/build/contracts/src/mocks/SimpleOneStepProofEntry.sol/SimpleOneStepProofEntry.dbg.json +4 -0
  186. package/build/contracts/src/mocks/SimpleOneStepProofEntry.sol/SimpleOneStepProofEntry.json +142 -0
  187. package/build/contracts/src/mocks/SimpleProxy.sol/SimpleProxy.dbg.json +1 -1
  188. package/build/contracts/src/mocks/SimpleProxy.sol/SimpleProxy.json +2 -2
  189. package/build/contracts/src/mocks/TestWETH9.sol/IWETH9.dbg.json +4 -0
  190. package/build/contracts/src/mocks/TestWETH9.sol/IWETH9.json +31 -0
  191. package/build/contracts/src/mocks/TestWETH9.sol/TestWETH9.dbg.json +4 -0
  192. package/build/contracts/src/mocks/TestWETH9.sol/TestWETH9.json +317 -0
  193. package/build/contracts/src/mocks/UpgradeExecutorMock.sol/UpgradeExecutorMock.dbg.json +1 -1
  194. package/build/contracts/src/mocks/UpgradeExecutorMock.sol/UpgradeExecutorMock.json +15 -2
  195. package/build/contracts/src/node-interface/NodeInterface.sol/NodeInterface.dbg.json +1 -1
  196. package/build/contracts/src/node-interface/NodeInterfaceDebug.sol/NodeInterfaceDebug.dbg.json +1 -1
  197. package/build/contracts/src/osp/HashProofHelper.sol/HashProofHelper.dbg.json +1 -1
  198. package/build/contracts/src/osp/HashProofHelper.sol/HashProofHelper.json +2 -2
  199. package/build/contracts/src/osp/IOneStepProofEntry.sol/IOneStepProofEntry.dbg.json +1 -1
  200. package/build/contracts/src/osp/IOneStepProofEntry.sol/IOneStepProofEntry.json +33 -9
  201. package/build/contracts/src/osp/IOneStepProofEntry.sol/OneStepProofEntryLib.dbg.json +1 -1
  202. package/build/contracts/src/osp/IOneStepProofEntry.sol/OneStepProofEntryLib.json +2 -2
  203. package/build/contracts/src/osp/IOneStepProver.sol/IOneStepProver.dbg.json +1 -1
  204. package/build/contracts/src/osp/IOneStepProver.sol/IOneStepProver.json +5 -0
  205. package/build/contracts/src/osp/OneStepProofEntry.sol/OneStepProofEntry.dbg.json +1 -1
  206. package/build/contracts/src/osp/OneStepProofEntry.sol/OneStepProofEntry.json +35 -11
  207. package/build/contracts/src/osp/OneStepProver0.sol/OneStepProver0.dbg.json +1 -1
  208. package/build/contracts/src/osp/OneStepProver0.sol/OneStepProver0.json +7 -2
  209. package/build/contracts/src/osp/OneStepProverHostIo.sol/OneStepProverHostIo.dbg.json +1 -1
  210. package/build/contracts/src/osp/OneStepProverHostIo.sol/OneStepProverHostIo.json +7 -2
  211. package/build/contracts/src/osp/OneStepProverMath.sol/OneStepProverMath.dbg.json +1 -1
  212. package/build/contracts/src/osp/OneStepProverMath.sol/OneStepProverMath.json +7 -2
  213. package/build/contracts/src/osp/OneStepProverMemory.sol/OneStepProverMemory.dbg.json +1 -1
  214. package/build/contracts/src/osp/OneStepProverMemory.sol/OneStepProverMemory.json +7 -2
  215. package/build/contracts/src/precompiles/ArbAddressTable.sol/ArbAddressTable.dbg.json +1 -1
  216. package/build/contracts/src/precompiles/ArbAggregator.sol/ArbAggregator.dbg.json +1 -1
  217. package/build/contracts/src/precompiles/ArbBLS.sol/ArbBLS.dbg.json +1 -1
  218. package/build/contracts/src/precompiles/ArbDebug.sol/ArbDebug.dbg.json +1 -1
  219. package/build/contracts/src/precompiles/ArbFunctionTable.sol/ArbFunctionTable.dbg.json +1 -1
  220. package/build/contracts/src/precompiles/ArbGasInfo.sol/ArbGasInfo.dbg.json +1 -1
  221. package/build/contracts/src/precompiles/ArbInfo.sol/ArbInfo.dbg.json +1 -1
  222. package/build/contracts/src/precompiles/ArbOwner.sol/ArbOwner.dbg.json +1 -1
  223. package/build/contracts/src/precompiles/ArbOwnerPublic.sol/ArbOwnerPublic.dbg.json +1 -1
  224. package/build/contracts/src/precompiles/ArbRetryableTx.sol/ArbRetryableTx.dbg.json +1 -1
  225. package/build/contracts/src/precompiles/ArbStatistics.sol/ArbStatistics.dbg.json +1 -1
  226. package/build/contracts/src/precompiles/ArbSys.sol/ArbSys.dbg.json +1 -1
  227. package/build/contracts/src/precompiles/ArbWasm.sol/ArbWasm.dbg.json +1 -1
  228. package/build/contracts/src/precompiles/ArbWasmCache.sol/ArbWasmCache.dbg.json +1 -1
  229. package/build/contracts/src/precompiles/ArbosActs.sol/ArbosActs.dbg.json +1 -1
  230. package/build/contracts/src/precompiles/ArbosTest.sol/ArbosTest.dbg.json +1 -1
  231. package/build/contracts/src/rollup/AbsRollupEventInbox.sol/AbsRollupEventInbox.dbg.json +1 -1
  232. package/build/contracts/src/rollup/Assertion.sol/AssertionNodeLib.dbg.json +4 -0
  233. package/build/contracts/src/rollup/{Node.sol/NodeLib.json → Assertion.sol/AssertionNodeLib.json} +4 -4
  234. package/build/contracts/src/rollup/AssertionState.sol/AssertionStateLib.dbg.json +4 -0
  235. package/build/contracts/src/{challenge/ChallengeLib.sol/ChallengeLib.json → rollup/AssertionState.sol/AssertionStateLib.json} +4 -4
  236. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction.dbg.json +4 -0
  237. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction.json +807 -0
  238. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ConstantArrayStorage.dbg.json +4 -0
  239. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ConstantArrayStorage.json +35 -0
  240. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollup.dbg.json +4 -0
  241. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollup.json +361 -0
  242. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollupAdmin.dbg.json +4 -0
  243. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollupAdmin.json +38 -0
  244. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ISeqInboxPostUpgradeInit.dbg.json +4 -0
  245. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ISeqInboxPostUpgradeInit.json +41 -0
  246. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/RollupReader.dbg.json +4 -0
  247. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/RollupReader.json +385 -0
  248. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/StateHashPreImageLookup.dbg.json +4 -0
  249. package/build/contracts/src/rollup/BOLDUpgradeAction.sol/StateHashPreImageLookup.json +203 -0
  250. package/build/contracts/src/rollup/BridgeCreator.sol/BridgeCreator.dbg.json +1 -1
  251. package/build/contracts/src/rollup/BridgeCreator.sol/BridgeCreator.json +62 -10
  252. package/build/contracts/src/rollup/DeployHelper.sol/DeployHelper.dbg.json +1 -1
  253. package/build/contracts/src/rollup/DeployHelper.sol/DeployHelper.json +2 -2
  254. package/build/contracts/src/rollup/ERC20RollupEventInbox.sol/ERC20RollupEventInbox.dbg.json +1 -1
  255. package/build/contracts/src/rollup/ERC20RollupEventInbox.sol/ERC20RollupEventInbox.json +2 -2
  256. package/build/contracts/src/rollup/FactoryDeployerHelper.sol/FactoryDeployerHelper.dbg.json +1 -1
  257. package/build/contracts/src/rollup/FactoryDeployerHelper.sol/FactoryDeployerHelper.json +2 -2
  258. package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IDeployHelper.dbg.json +1 -1
  259. package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IERC20.dbg.json +1 -1
  260. package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IERC20Bridge.dbg.json +1 -1
  261. package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IInboxBase.dbg.json +1 -1
  262. package/build/contracts/src/rollup/IRollupAdmin.sol/IRollupAdmin.dbg.json +1 -1
  263. package/build/contracts/src/rollup/IRollupAdmin.sol/IRollupAdmin.json +473 -99
  264. package/build/contracts/src/rollup/IRollupCore.sol/IRollupCore.dbg.json +1 -1
  265. package/build/contracts/src/rollup/IRollupCore.sol/IRollupCore.json +315 -221
  266. package/build/contracts/src/rollup/IRollupEventInbox.sol/IRollupEventInbox.dbg.json +1 -1
  267. package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUser.dbg.json +1 -1
  268. package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUser.json +678 -494
  269. package/build/contracts/src/rollup/RollupAdminLogic.sol/RollupAdminLogic.dbg.json +1 -1
  270. package/build/contracts/src/rollup/RollupAdminLogic.sol/RollupAdminLogic.json +806 -435
  271. package/build/contracts/src/rollup/RollupCore.sol/RollupCore.dbg.json +1 -1
  272. package/build/contracts/src/rollup/RollupCore.sol/RollupCore.json +323 -235
  273. package/build/contracts/src/rollup/RollupCreator.sol/RollupCreator.dbg.json +1 -1
  274. package/build/contracts/src/rollup/RollupCreator.sol/RollupCreator.json +98 -36
  275. package/build/contracts/src/rollup/RollupEventInbox.sol/RollupEventInbox.dbg.json +1 -1
  276. package/build/contracts/src/rollup/RollupEventInbox.sol/RollupEventInbox.json +2 -2
  277. package/build/contracts/src/rollup/RollupLib.sol/RollupLib.dbg.json +1 -1
  278. package/build/contracts/src/rollup/RollupLib.sol/RollupLib.json +2 -2
  279. package/build/contracts/src/rollup/RollupProxy.sol/RollupProxy.dbg.json +1 -1
  280. package/build/contracts/src/rollup/RollupProxy.sol/RollupProxy.json +97 -16
  281. package/build/contracts/src/rollup/RollupUserLogic.sol/RollupUserLogic.dbg.json +1 -1
  282. package/build/contracts/src/rollup/RollupUserLogic.sol/RollupUserLogic.json +924 -530
  283. package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.dbg.json +1 -1
  284. package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.json +15 -43
  285. package/build/contracts/src/rollup/ValidatorWalletCreator.sol/ValidatorWalletCreator.dbg.json +1 -1
  286. package/build/contracts/src/rollup/ValidatorWalletCreator.sol/ValidatorWalletCreator.json +2 -2
  287. package/build/contracts/src/state/Deserialize.sol/Deserialize.dbg.json +1 -1
  288. package/build/contracts/src/state/Deserialize.sol/Deserialize.json +2 -2
  289. package/build/contracts/src/state/GlobalState.sol/GlobalStateLib.dbg.json +1 -1
  290. package/build/contracts/src/state/GlobalState.sol/GlobalStateLib.json +2 -2
  291. package/build/contracts/src/state/Instructions.sol/Instructions.dbg.json +1 -1
  292. package/build/contracts/src/state/Instructions.sol/Instructions.json +2 -2
  293. package/build/contracts/src/state/Machine.sol/MachineLib.dbg.json +1 -1
  294. package/build/contracts/src/state/Machine.sol/MachineLib.json +2 -2
  295. package/build/contracts/src/state/MerkleProof.sol/MerkleProofLib.dbg.json +1 -1
  296. package/build/contracts/src/state/MerkleProof.sol/MerkleProofLib.json +2 -2
  297. package/build/contracts/src/state/Module.sol/ModuleLib.dbg.json +1 -1
  298. package/build/contracts/src/state/Module.sol/ModuleLib.json +2 -2
  299. package/build/contracts/src/state/ModuleMemory.sol/ModuleMemoryLib.dbg.json +1 -1
  300. package/build/contracts/src/state/ModuleMemory.sol/ModuleMemoryLib.json +2 -2
  301. package/build/contracts/src/state/ModuleMemoryCompact.sol/ModuleMemoryCompactLib.dbg.json +1 -1
  302. package/build/contracts/src/state/ModuleMemoryCompact.sol/ModuleMemoryCompactLib.json +2 -2
  303. package/build/contracts/src/state/MultiStack.sol/MultiStackLib.dbg.json +1 -1
  304. package/build/contracts/src/state/MultiStack.sol/MultiStackLib.json +2 -2
  305. package/build/contracts/src/state/PcArray.sol/PcArrayLib.dbg.json +1 -1
  306. package/build/contracts/src/state/PcArray.sol/PcArrayLib.json +2 -2
  307. package/build/contracts/src/state/StackFrame.sol/StackFrameLib.dbg.json +1 -1
  308. package/build/contracts/src/state/StackFrame.sol/StackFrameLib.json +2 -2
  309. package/build/contracts/src/state/Value.sol/ValueLib.dbg.json +1 -1
  310. package/build/contracts/src/state/Value.sol/ValueLib.json +2 -2
  311. package/build/contracts/src/state/ValueArray.sol/ValueArrayLib.dbg.json +1 -1
  312. package/build/contracts/src/state/ValueArray.sol/ValueArrayLib.json +2 -2
  313. package/build/contracts/src/state/ValueStack.sol/ValueStackLib.dbg.json +1 -1
  314. package/build/contracts/src/state/ValueStack.sol/ValueStackLib.json +2 -2
  315. package/build/contracts/src/test-helpers/BridgeTester.sol/BridgeTester.dbg.json +1 -1
  316. package/build/contracts/src/test-helpers/BridgeTester.sol/BridgeTester.json +15 -2
  317. package/build/contracts/src/test-helpers/CryptographyPrimitivesTester.sol/CryptographyPrimitivesTester.dbg.json +1 -1
  318. package/build/contracts/src/test-helpers/CryptographyPrimitivesTester.sol/CryptographyPrimitivesTester.json +2 -2
  319. package/build/contracts/src/test-helpers/EthVault.sol/EthVault.dbg.json +1 -1
  320. package/build/contracts/src/test-helpers/EthVault.sol/EthVault.json +2 -2
  321. package/build/contracts/src/test-helpers/MessageTester.sol/MessageTester.dbg.json +1 -1
  322. package/build/contracts/src/test-helpers/MessageTester.sol/MessageTester.json +2 -2
  323. package/build/contracts/src/test-helpers/OutboxWithoutOptTester.sol/OutboxWithoutOptTester.dbg.json +1 -1
  324. package/build/contracts/src/test-helpers/OutboxWithoutOptTester.sol/OutboxWithoutOptTester.json +2 -2
  325. package/build/contracts/src/test-helpers/RollupMock.sol/RollupMock.dbg.json +1 -1
  326. package/build/contracts/src/test-helpers/RollupMock.sol/RollupMock.json +2 -15
  327. package/build/contracts/src/test-helpers/TestToken.sol/TestToken.dbg.json +1 -1
  328. package/build/contracts/src/test-helpers/TestToken.sol/TestToken.json +2 -2
  329. package/build/contracts/src/test-helpers/ValueArrayTester.sol/ValueArrayTester.dbg.json +1 -1
  330. package/build/contracts/src/test-helpers/ValueArrayTester.sol/ValueArrayTester.json +2 -2
  331. package/out/yul/Reader4844.yul/Reader4844.json +1 -1
  332. package/package.json +16 -6
  333. package/src/assertionStakingPool/AbsBoldStakingPool.sol +66 -0
  334. package/src/assertionStakingPool/AssertionStakingPool.sol +70 -0
  335. package/src/assertionStakingPool/AssertionStakingPoolCreator.sol +35 -0
  336. package/src/assertionStakingPool/EdgeStakingPool.sol +57 -0
  337. package/src/assertionStakingPool/EdgeStakingPoolCreator.sol +34 -0
  338. package/src/assertionStakingPool/StakingPoolCreatorUtils.sol +25 -0
  339. package/src/assertionStakingPool/interfaces/IAbsBoldStakingPool.sol +41 -0
  340. package/src/assertionStakingPool/interfaces/IAssertionStakingPool.sol +36 -0
  341. package/src/assertionStakingPool/interfaces/IAssertionStakingPoolCreator.sol +31 -0
  342. package/src/assertionStakingPool/interfaces/IEdgeStakingPool.sol +27 -0
  343. package/src/assertionStakingPool/interfaces/IEdgeStakingPoolCreator.sol +28 -0
  344. package/src/bridge/AbsBridge.sol +38 -48
  345. package/src/bridge/AbsInbox.sol +88 -97
  346. package/src/bridge/AbsOutbox.sol +23 -37
  347. package/src/bridge/Bridge.sol +6 -4
  348. package/src/bridge/DelayBuffer.sol +123 -0
  349. package/src/bridge/DelayBufferTypes.sol +38 -0
  350. package/src/bridge/ERC20Bridge.sol +8 -4
  351. package/src/bridge/ERC20Inbox.sol +46 -53
  352. package/src/bridge/ERC20Outbox.sol +7 -3
  353. package/src/bridge/GasRefunder.sol +38 -24
  354. package/src/bridge/IBridge.sol +30 -21
  355. package/src/bridge/IERC20Bridge.sol +1 -1
  356. package/src/bridge/IERC20Inbox.sol +4 -2
  357. package/src/bridge/IEthBridge.sol +4 -2
  358. package/src/bridge/IInbox.sol +4 -2
  359. package/src/bridge/IInboxBase.sol +17 -13
  360. package/src/bridge/IOutbox.sol +13 -8
  361. package/src/bridge/ISequencerInbox.sol +118 -13
  362. package/src/bridge/Inbox.sol +131 -151
  363. package/src/bridge/Messages.sol +48 -18
  364. package/src/bridge/Outbox.sol +6 -2
  365. package/src/bridge/SequencerInbox.sol +339 -274
  366. package/src/chain/CacheManager.sol +49 -18
  367. package/src/challengeV2/EdgeChallengeManager.sol +783 -0
  368. package/src/challengeV2/IAssertionChain.sol +39 -0
  369. package/src/challengeV2/libraries/ArrayUtilsLib.sol +61 -0
  370. package/src/challengeV2/libraries/ChallengeEdgeLib.sol +333 -0
  371. package/src/challengeV2/libraries/ChallengeErrors.sol +108 -0
  372. package/src/challengeV2/libraries/EdgeChallengeManagerLib.sol +930 -0
  373. package/src/challengeV2/libraries/Enums.sol +26 -0
  374. package/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol +390 -0
  375. package/src/challengeV2/libraries/UintUtilsLib.sol +74 -0
  376. package/src/libraries/AddressAliasHelper.sol +6 -2
  377. package/src/libraries/AdminFallbackProxy.sol +8 -4
  378. package/src/libraries/ArbitrumChecker.sol +3 -4
  379. package/src/libraries/CryptographyPrimitives.sol +39 -46
  380. package/src/libraries/DecimalsConverterHelper.sol +2 -4
  381. package/src/libraries/DoubleLogicUUPSUpgradeable.sol +10 -7
  382. package/src/libraries/Error.sol +18 -12
  383. package/src/libraries/GasRefundEnabled.sol +3 -4
  384. package/src/libraries/MerkleLib.sol +6 -5
  385. package/src/libraries/UUPSNotUpgradeable.sol +2 -4
  386. package/src/mocks/BridgeStub.sol +50 -48
  387. package/src/mocks/BridgeUnproxied.sol +2 -0
  388. package/src/mocks/InboxStub.sol +22 -17
  389. package/src/mocks/MerkleTreeAccess.sol +72 -0
  390. package/src/mocks/MockRollupEventInbox.sol +59 -0
  391. package/src/mocks/MultiCallTest.sol +3 -1
  392. package/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol +3 -1
  393. package/src/mocks/Program.sol +9 -7
  394. package/src/mocks/SequencerInboxBlobMock.sol +38 -0
  395. package/src/mocks/SequencerInboxStub.sol +9 -12
  396. package/src/mocks/Simple.sol +13 -25
  397. package/src/mocks/SimpleCacheManager.sol +10 -3
  398. package/src/mocks/SimpleOneStepProofEntry.sol +60 -0
  399. package/src/mocks/SimpleProxy.sol +3 -1
  400. package/src/mocks/TestWETH9.sol +30 -0
  401. package/src/mocks/UpgradeExecutorMock.sol +10 -17
  402. package/src/node-interface/NodeInterface.sol +23 -22
  403. package/src/node-interface/NodeInterfaceDebug.sol +5 -3
  404. package/src/osp/HashProofHelper.sol +9 -10
  405. package/src/osp/IOneStepProofEntry.sol +14 -9
  406. package/src/osp/IOneStepProver.sol +1 -0
  407. package/src/osp/OneStepProofEntry.sol +63 -54
  408. package/src/osp/OneStepProver0.sol +14 -27
  409. package/src/osp/OneStepProverHostIo.sol +31 -58
  410. package/src/osp/OneStepProverMath.sol +15 -23
  411. package/src/osp/OneStepProverMemory.sol +9 -23
  412. package/src/precompiles/ArbAddressTable.sol +19 -9
  413. package/src/precompiles/ArbAggregator.sol +12 -4
  414. package/src/precompiles/ArbBLS.sol +1 -3
  415. package/src/precompiles/ArbDebug.sol +5 -11
  416. package/src/precompiles/ArbFunctionTable.sol +7 -10
  417. package/src/precompiles/ArbGasInfo.sol +9 -43
  418. package/src/precompiles/ArbInfo.sol +6 -2
  419. package/src/precompiles/ArbOwner.sol +101 -34
  420. package/src/precompiles/ArbOwnerPublic.sol +6 -2
  421. package/src/precompiles/ArbRetryableTx.sol +15 -5
  422. package/src/precompiles/ArbStatistics.sol +1 -8
  423. package/src/precompiles/ArbSys.sol +16 -18
  424. package/src/precompiles/ArbWasm.sol +24 -14
  425. package/src/precompiles/ArbWasmCache.sol +15 -5
  426. package/src/precompiles/ArbosTest.sol +3 -1
  427. package/src/rollup/AbsRollupEventInbox.sol +15 -16
  428. package/src/rollup/Assertion.sol +100 -0
  429. package/src/rollup/AssertionState.sol +29 -0
  430. package/src/rollup/BOLDUpgradeAction.sol +631 -0
  431. package/src/rollup/BridgeCreator.sol +42 -15
  432. package/src/rollup/Config.sol +15 -7
  433. package/src/rollup/DeployHelper.sol +12 -31
  434. package/src/rollup/ERC20RollupEventInbox.sol +8 -9
  435. package/src/rollup/FactoryDeployerHelper.sol +8 -10
  436. package/src/rollup/IRollupAdmin.sol +127 -45
  437. package/src/rollup/IRollupCore.sol +64 -84
  438. package/src/rollup/IRollupEventInbox.sol +3 -1
  439. package/src/rollup/IRollupLogic.sol +36 -69
  440. package/src/rollup/RollupAdminLogic.sol +224 -203
  441. package/src/rollup/RollupCore.sol +407 -428
  442. package/src/rollup/RollupCreator.sol +88 -75
  443. package/src/rollup/RollupEventInbox.sol +7 -7
  444. package/src/rollup/RollupLib.sol +50 -86
  445. package/src/rollup/RollupProxy.sol +8 -12
  446. package/src/rollup/RollupUserLogic.sol +279 -642
  447. package/src/rollup/ValidatorUtils.sol +0 -242
  448. package/src/rollup/ValidatorWallet.sol +22 -38
  449. package/src/rollup/ValidatorWalletCreator.sol +8 -8
  450. package/src/state/Deserialize.sol +74 -96
  451. package/src/state/GlobalState.sol +74 -20
  452. package/src/state/Instructions.sol +4 -3
  453. package/src/state/Machine.sol +18 -19
  454. package/src/state/Module.sol +14 -13
  455. package/src/state/ModuleMemory.sol +6 -25
  456. package/src/state/ModuleMemoryCompact.sol +3 -1
  457. package/src/state/MultiStack.sol +16 -20
  458. package/src/state/PcArray.sol +7 -7
  459. package/src/state/StackFrame.sol +21 -14
  460. package/src/state/Value.sol +18 -6
  461. package/src/state/ValueArray.sol +7 -7
  462. package/src/state/ValueStack.sol +9 -3
  463. package/src/test-helpers/BridgeTester.sol +32 -42
  464. package/src/test-helpers/CryptographyPrimitivesTester.sol +12 -13
  465. package/src/test-helpers/EthVault.sol +4 -2
  466. package/src/test-helpers/InterfaceCompatibilityTester.sol +1 -1
  467. package/src/test-helpers/MessageTester.sol +3 -10
  468. package/src/test-helpers/OutboxWithoutOptTester.sol +12 -19
  469. package/src/test-helpers/RollupMock.sol +3 -7
  470. package/src/test-helpers/TestToken.sol +4 -2
  471. package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol/IERC20Upgradeable.dbg.json +0 -4
  472. package/build/contracts/src/challenge/ChallengeLib.sol/ChallengeLib.dbg.json +0 -4
  473. package/build/contracts/src/challenge/ChallengeManager.sol/ChallengeManager.dbg.json +0 -4
  474. package/build/contracts/src/challenge/ChallengeManager.sol/ChallengeManager.json +0 -746
  475. package/build/contracts/src/challenge/IChallengeManager.sol/IChallengeManager.dbg.json +0 -4
  476. package/build/contracts/src/challenge/IChallengeManager.sol/IChallengeManager.json +0 -441
  477. package/build/contracts/src/challenge/IChallengeResultReceiver.sol/IChallengeResultReceiver.dbg.json +0 -4
  478. package/build/contracts/src/challenge/IChallengeResultReceiver.sol/IChallengeResultReceiver.json +0 -34
  479. package/build/contracts/src/mocks/MockResultReceiver.sol/MockResultReceiver.dbg.json +0 -4
  480. package/build/contracts/src/mocks/MockResultReceiver.sol/MockResultReceiver.json +0 -188
  481. package/build/contracts/src/mocks/SingleExecutionChallenge.sol/SingleExecutionChallenge.dbg.json +0 -4
  482. package/build/contracts/src/mocks/SingleExecutionChallenge.sol/SingleExecutionChallenge.json +0 -797
  483. package/build/contracts/src/mocks/TimedOutChallengeManager.sol/TimedOutChallengeManager.dbg.json +0 -4
  484. package/build/contracts/src/mocks/TimedOutChallengeManager.sol/TimedOutChallengeManager.json +0 -746
  485. package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserAbs.dbg.json +0 -4
  486. package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserAbs.json +0 -1327
  487. package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserERC20.dbg.json +0 -4
  488. package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUserERC20.json +0 -1461
  489. package/build/contracts/src/rollup/Node.sol/NodeLib.dbg.json +0 -4
  490. package/build/contracts/src/rollup/RollupUserLogic.sol/AbsRollupUserLogic.dbg.json +0 -4
  491. package/build/contracts/src/rollup/RollupUserLogic.sol/AbsRollupUserLogic.json +0 -1609
  492. package/build/contracts/src/rollup/RollupUserLogic.sol/ERC20RollupUserLogic.dbg.json +0 -4
  493. package/build/contracts/src/rollup/RollupUserLogic.sol/ERC20RollupUserLogic.json +0 -1743
  494. package/build/contracts/src/rollup/ValidatorUtils.sol/ValidatorUtils.dbg.json +0 -4
  495. package/build/contracts/src/rollup/ValidatorUtils.sol/ValidatorUtils.json +0 -379
  496. package/src/challenge/ChallengeLib.sol +0 -88
  497. package/src/challenge/ChallengeManager.sol +0 -375
  498. package/src/challenge/IChallengeManager.sol +0 -86
  499. package/src/challenge/IChallengeResultReceiver.sol +0 -13
  500. package/src/mocks/MockResultReceiver.sol +0 -59
  501. package/src/mocks/SingleExecutionChallenge.sol +0 -41
  502. package/src/mocks/TimedOutChallengeManager.sol +0 -13
  503. package/src/rollup/Node.sol +0 -113
@@ -26,13 +26,13 @@
26
26
  "anonymous": false,
27
27
  "inputs": [
28
28
  {
29
- "indexed": true,
29
+ "indexed": false,
30
30
  "internalType": "address",
31
- "name": "beacon",
31
+ "name": "anyTrustFastConfirmer",
32
32
  "type": "address"
33
33
  }
34
34
  ],
35
- "name": "BeaconUpgraded",
35
+ "name": "AnyTrustFastConfirmerSet",
36
36
  "type": "event"
37
37
  },
38
38
  {
@@ -40,9 +40,9 @@
40
40
  "inputs": [
41
41
  {
42
42
  "indexed": true,
43
- "internalType": "uint64",
44
- "name": "nodeNum",
45
- "type": "uint64"
43
+ "internalType": "bytes32",
44
+ "name": "assertionHash",
45
+ "type": "bytes32"
46
46
  },
47
47
  {
48
48
  "indexed": false,
@@ -57,38 +57,75 @@
57
57
  "type": "bytes32"
58
58
  }
59
59
  ],
60
- "name": "NodeConfirmed",
60
+ "name": "AssertionConfirmed",
61
61
  "type": "event"
62
62
  },
63
63
  {
64
64
  "anonymous": false,
65
65
  "inputs": [
66
- {
67
- "indexed": true,
68
- "internalType": "uint64",
69
- "name": "nodeNum",
70
- "type": "uint64"
71
- },
72
66
  {
73
67
  "indexed": true,
74
68
  "internalType": "bytes32",
75
- "name": "parentNodeHash",
69
+ "name": "assertionHash",
76
70
  "type": "bytes32"
77
71
  },
78
72
  {
79
73
  "indexed": true,
80
74
  "internalType": "bytes32",
81
- "name": "nodeHash",
82
- "type": "bytes32"
83
- },
84
- {
85
- "indexed": false,
86
- "internalType": "bytes32",
87
- "name": "executionHash",
75
+ "name": "parentAssertionHash",
88
76
  "type": "bytes32"
89
77
  },
90
78
  {
91
79
  "components": [
80
+ {
81
+ "components": [
82
+ {
83
+ "internalType": "bytes32",
84
+ "name": "prevPrevAssertionHash",
85
+ "type": "bytes32"
86
+ },
87
+ {
88
+ "internalType": "bytes32",
89
+ "name": "sequencerBatchAcc",
90
+ "type": "bytes32"
91
+ },
92
+ {
93
+ "components": [
94
+ {
95
+ "internalType": "bytes32",
96
+ "name": "wasmModuleRoot",
97
+ "type": "bytes32"
98
+ },
99
+ {
100
+ "internalType": "uint256",
101
+ "name": "requiredStake",
102
+ "type": "uint256"
103
+ },
104
+ {
105
+ "internalType": "address",
106
+ "name": "challengeManager",
107
+ "type": "address"
108
+ },
109
+ {
110
+ "internalType": "uint64",
111
+ "name": "confirmPeriodBlocks",
112
+ "type": "uint64"
113
+ },
114
+ {
115
+ "internalType": "uint64",
116
+ "name": "nextInboxPosition",
117
+ "type": "uint64"
118
+ }
119
+ ],
120
+ "internalType": "struct ConfigData",
121
+ "name": "configData",
122
+ "type": "tuple"
123
+ }
124
+ ],
125
+ "internalType": "struct BeforeStateData",
126
+ "name": "beforeStateData",
127
+ "type": "tuple"
128
+ },
92
129
  {
93
130
  "components": [
94
131
  {
@@ -112,9 +149,14 @@
112
149
  "internalType": "enum MachineStatus",
113
150
  "name": "machineStatus",
114
151
  "type": "uint8"
152
+ },
153
+ {
154
+ "internalType": "bytes32",
155
+ "name": "endHistoryRoot",
156
+ "type": "bytes32"
115
157
  }
116
158
  ],
117
- "internalType": "struct ExecutionState",
159
+ "internalType": "struct AssertionState",
118
160
  "name": "beforeState",
119
161
  "type": "tuple"
120
162
  },
@@ -141,20 +183,20 @@
141
183
  "internalType": "enum MachineStatus",
142
184
  "name": "machineStatus",
143
185
  "type": "uint8"
186
+ },
187
+ {
188
+ "internalType": "bytes32",
189
+ "name": "endHistoryRoot",
190
+ "type": "bytes32"
144
191
  }
145
192
  ],
146
- "internalType": "struct ExecutionState",
193
+ "internalType": "struct AssertionState",
147
194
  "name": "afterState",
148
195
  "type": "tuple"
149
- },
150
- {
151
- "internalType": "uint64",
152
- "name": "numBlocks",
153
- "type": "uint64"
154
196
  }
155
197
  ],
156
198
  "indexed": false,
157
- "internalType": "struct Assertion",
199
+ "internalType": "struct AssertionInputs",
158
200
  "name": "assertion",
159
201
  "type": "tuple"
160
202
  },
@@ -164,6 +206,12 @@
164
206
  "name": "afterInboxBatchAcc",
165
207
  "type": "bytes32"
166
208
  },
209
+ {
210
+ "indexed": false,
211
+ "internalType": "uint256",
212
+ "name": "inboxMaxCount",
213
+ "type": "uint256"
214
+ },
167
215
  {
168
216
  "indexed": false,
169
217
  "internalType": "bytes32",
@@ -173,11 +221,62 @@
173
221
  {
174
222
  "indexed": false,
175
223
  "internalType": "uint256",
176
- "name": "inboxMaxCount",
224
+ "name": "requiredStake",
225
+ "type": "uint256"
226
+ },
227
+ {
228
+ "indexed": false,
229
+ "internalType": "address",
230
+ "name": "challengeManager",
231
+ "type": "address"
232
+ },
233
+ {
234
+ "indexed": false,
235
+ "internalType": "uint64",
236
+ "name": "confirmPeriodBlocks",
237
+ "type": "uint64"
238
+ }
239
+ ],
240
+ "name": "AssertionCreated",
241
+ "type": "event"
242
+ },
243
+ {
244
+ "anonymous": false,
245
+ "inputs": [
246
+ {
247
+ "indexed": true,
248
+ "internalType": "bytes32",
249
+ "name": "assertionHash",
250
+ "type": "bytes32"
251
+ }
252
+ ],
253
+ "name": "AssertionForceConfirmed",
254
+ "type": "event"
255
+ },
256
+ {
257
+ "anonymous": false,
258
+ "inputs": [
259
+ {
260
+ "indexed": true,
261
+ "internalType": "bytes32",
262
+ "name": "assertionHash",
263
+ "type": "bytes32"
264
+ }
265
+ ],
266
+ "name": "AssertionForceCreated",
267
+ "type": "event"
268
+ },
269
+ {
270
+ "anonymous": false,
271
+ "inputs": [
272
+ {
273
+ "indexed": false,
274
+ "internalType": "uint256",
275
+ "name": "newBaseStake",
177
276
  "type": "uint256"
178
277
  }
179
278
  ],
180
- "name": "NodeCreated",
279
+ "name": "BaseStakeSet",
181
280
  "type": "event"
182
281
  },
183
282
  {
@@ -185,25 +284,135 @@
185
284
  "inputs": [
186
285
  {
187
286
  "indexed": true,
287
+ "internalType": "address",
288
+ "name": "beacon",
289
+ "type": "address"
290
+ }
291
+ ],
292
+ "name": "BeaconUpgraded",
293
+ "type": "event"
294
+ },
295
+ {
296
+ "anonymous": false,
297
+ "inputs": [
298
+ {
299
+ "indexed": false,
300
+ "internalType": "address",
301
+ "name": "challengeManager",
302
+ "type": "address"
303
+ }
304
+ ],
305
+ "name": "ChallengeManagerSet",
306
+ "type": "event"
307
+ },
308
+ {
309
+ "anonymous": false,
310
+ "inputs": [
311
+ {
312
+ "indexed": false,
188
313
  "internalType": "uint64",
189
- "name": "nodeNum",
314
+ "name": "newConfirmPeriod",
190
315
  "type": "uint64"
191
316
  }
192
317
  ],
193
- "name": "NodeRejected",
318
+ "name": "ConfirmPeriodBlocksSet",
194
319
  "type": "event"
195
320
  },
196
321
  {
197
322
  "anonymous": false,
198
323
  "inputs": [
199
324
  {
200
- "indexed": true,
325
+ "indexed": false,
326
+ "internalType": "address",
327
+ "name": "inbox",
328
+ "type": "address"
329
+ },
330
+ {
331
+ "indexed": false,
332
+ "internalType": "bool",
333
+ "name": "enabled",
334
+ "type": "bool"
335
+ }
336
+ ],
337
+ "name": "DelayedInboxSet",
338
+ "type": "event"
339
+ },
340
+ {
341
+ "anonymous": false,
342
+ "inputs": [
343
+ {
344
+ "indexed": false,
345
+ "internalType": "address",
346
+ "name": "inbox",
347
+ "type": "address"
348
+ }
349
+ ],
350
+ "name": "InboxSet",
351
+ "type": "event"
352
+ },
353
+ {
354
+ "anonymous": false,
355
+ "inputs": [
356
+ {
357
+ "indexed": false,
358
+ "internalType": "uint8",
359
+ "name": "version",
360
+ "type": "uint8"
361
+ }
362
+ ],
363
+ "name": "Initialized",
364
+ "type": "event"
365
+ },
366
+ {
367
+ "anonymous": false,
368
+ "inputs": [
369
+ {
370
+ "indexed": false,
371
+ "internalType": "address",
372
+ "name": "newLoserStakerEscrow",
373
+ "type": "address"
374
+ }
375
+ ],
376
+ "name": "LoserStakeEscrowSet",
377
+ "type": "event"
378
+ },
379
+ {
380
+ "anonymous": false,
381
+ "inputs": [
382
+ {
383
+ "indexed": false,
201
384
  "internalType": "uint256",
202
- "name": "id",
385
+ "name": "newPeriod",
203
386
  "type": "uint256"
204
387
  }
205
388
  ],
206
- "name": "OwnerFunctionCalled",
389
+ "name": "MinimumAssertionPeriodSet",
390
+ "type": "event"
391
+ },
392
+ {
393
+ "anonymous": false,
394
+ "inputs": [
395
+ {
396
+ "indexed": false,
397
+ "internalType": "address",
398
+ "name": "outbox",
399
+ "type": "address"
400
+ }
401
+ ],
402
+ "name": "OldOutboxRemoved",
403
+ "type": "event"
404
+ },
405
+ {
406
+ "anonymous": false,
407
+ "inputs": [
408
+ {
409
+ "indexed": false,
410
+ "internalType": "address",
411
+ "name": "outbox",
412
+ "type": "address"
413
+ }
414
+ ],
415
+ "name": "OutboxSet",
207
416
  "type": "event"
208
417
  },
209
418
  {
@@ -243,7 +452,7 @@
243
452
  {
244
453
  "indexed": false,
245
454
  "internalType": "uint64",
246
- "name": "challengedNode",
455
+ "name": "challengedAssertion",
247
456
  "type": "uint64"
248
457
  }
249
458
  ],
@@ -269,6 +478,32 @@
269
478
  "name": "RollupInitialized",
270
479
  "type": "event"
271
480
  },
481
+ {
482
+ "anonymous": false,
483
+ "inputs": [
484
+ {
485
+ "indexed": false,
486
+ "internalType": "address",
487
+ "name": "newSequencerInbox",
488
+ "type": "address"
489
+ }
490
+ ],
491
+ "name": "SequencerInboxSet",
492
+ "type": "event"
493
+ },
494
+ {
495
+ "anonymous": false,
496
+ "inputs": [
497
+ {
498
+ "indexed": false,
499
+ "internalType": "address[]",
500
+ "name": "staker",
501
+ "type": "address[]"
502
+ }
503
+ ],
504
+ "name": "StakersForceRefunded",
505
+ "type": "event"
506
+ },
272
507
  {
273
508
  "anonymous": false,
274
509
  "inputs": [
@@ -317,6 +552,12 @@
317
552
  "name": "user",
318
553
  "type": "address"
319
554
  },
555
+ {
556
+ "indexed": true,
557
+ "internalType": "address",
558
+ "name": "withdrawalAddress",
559
+ "type": "address"
560
+ },
320
561
  {
321
562
  "indexed": false,
322
563
  "internalType": "uint256",
@@ -359,39 +600,97 @@
359
600
  "type": "event"
360
601
  },
361
602
  {
603
+ "anonymous": false,
362
604
  "inputs": [
363
605
  {
364
- "internalType": "address",
365
- "name": "",
366
- "type": "address"
367
- }
368
- ],
369
- "name": "_stakerMap",
370
- "outputs": [
371
- {
606
+ "indexed": false,
372
607
  "internalType": "uint256",
373
- "name": "amountStaked",
608
+ "name": "newPeriod",
374
609
  "type": "uint256"
375
- },
376
- {
377
- "internalType": "uint64",
378
- "name": "index",
379
- "type": "uint64"
380
- },
381
- {
382
- "internalType": "uint64",
383
- "name": "latestStakedNode",
384
- "type": "uint64"
385
- },
610
+ }
611
+ ],
612
+ "name": "ValidatorAfkBlocksSet",
613
+ "type": "event"
614
+ },
615
+ {
616
+ "anonymous": false,
617
+ "inputs": [
618
+ {
619
+ "indexed": false,
620
+ "internalType": "bool",
621
+ "name": "_validatorWhitelistDisabled",
622
+ "type": "bool"
623
+ }
624
+ ],
625
+ "name": "ValidatorWhitelistDisabledSet",
626
+ "type": "event"
627
+ },
628
+ {
629
+ "anonymous": false,
630
+ "inputs": [
631
+ {
632
+ "indexed": false,
633
+ "internalType": "address[]",
634
+ "name": "validators",
635
+ "type": "address[]"
636
+ },
637
+ {
638
+ "indexed": false,
639
+ "internalType": "bool[]",
640
+ "name": "enabled",
641
+ "type": "bool[]"
642
+ }
643
+ ],
644
+ "name": "ValidatorsSet",
645
+ "type": "event"
646
+ },
647
+ {
648
+ "anonymous": false,
649
+ "inputs": [
650
+ {
651
+ "indexed": false,
652
+ "internalType": "bytes32",
653
+ "name": "newWasmModuleRoot",
654
+ "type": "bytes32"
655
+ }
656
+ ],
657
+ "name": "WasmModuleRootSet",
658
+ "type": "event"
659
+ },
660
+ {
661
+ "inputs": [
662
+ {
663
+ "internalType": "address",
664
+ "name": "",
665
+ "type": "address"
666
+ }
667
+ ],
668
+ "name": "_stakerMap",
669
+ "outputs": [
670
+ {
671
+ "internalType": "uint256",
672
+ "name": "amountStaked",
673
+ "type": "uint256"
674
+ },
675
+ {
676
+ "internalType": "bytes32",
677
+ "name": "latestStakedAssertion",
678
+ "type": "bytes32"
679
+ },
386
680
  {
387
681
  "internalType": "uint64",
388
- "name": "currentChallenge",
682
+ "name": "index",
389
683
  "type": "uint64"
390
684
  },
391
685
  {
392
686
  "internalType": "bool",
393
687
  "name": "isStaked",
394
688
  "type": "bool"
689
+ },
690
+ {
691
+ "internalType": "address",
692
+ "name": "withdrawalAddress",
693
+ "type": "address"
395
694
  }
396
695
  ],
397
696
  "stateMutability": "view",
@@ -468,12 +767,25 @@
468
767
  "stateMutability": "view",
469
768
  "type": "function"
470
769
  },
770
+ {
771
+ "inputs": [],
772
+ "name": "challengeGracePeriodBlocks",
773
+ "outputs": [
774
+ {
775
+ "internalType": "uint64",
776
+ "name": "",
777
+ "type": "uint64"
778
+ }
779
+ ],
780
+ "stateMutability": "view",
781
+ "type": "function"
782
+ },
471
783
  {
472
784
  "inputs": [],
473
785
  "name": "challengeManager",
474
786
  "outputs": [
475
787
  {
476
- "internalType": "contract IChallengeManager",
788
+ "internalType": "contract IEdgeChallengeManager",
477
789
  "name": "",
478
790
  "type": "address"
479
791
  }
@@ -496,146 +808,57 @@
496
808
  },
497
809
  {
498
810
  "inputs": [
811
+ {
812
+ "internalType": "bytes32",
813
+ "name": "assertionHash",
814
+ "type": "bytes32"
815
+ },
816
+ {
817
+ "internalType": "bytes32",
818
+ "name": "parentAssertionHash",
819
+ "type": "bytes32"
820
+ },
499
821
  {
500
822
  "components": [
501
823
  {
502
824
  "components": [
503
825
  {
504
- "components": [
505
- {
506
- "internalType": "bytes32[2]",
507
- "name": "bytes32Vals",
508
- "type": "bytes32[2]"
509
- },
510
- {
511
- "internalType": "uint64[2]",
512
- "name": "u64Vals",
513
- "type": "uint64[2]"
514
- }
515
- ],
516
- "internalType": "struct GlobalState",
517
- "name": "globalState",
518
- "type": "tuple"
826
+ "internalType": "bytes32[2]",
827
+ "name": "bytes32Vals",
828
+ "type": "bytes32[2]"
519
829
  },
520
830
  {
521
- "internalType": "enum MachineStatus",
522
- "name": "machineStatus",
523
- "type": "uint8"
831
+ "internalType": "uint64[2]",
832
+ "name": "u64Vals",
833
+ "type": "uint64[2]"
524
834
  }
525
835
  ],
526
- "internalType": "struct ExecutionState",
527
- "name": "beforeState",
836
+ "internalType": "struct GlobalState",
837
+ "name": "globalState",
528
838
  "type": "tuple"
529
839
  },
530
840
  {
531
- "components": [
532
- {
533
- "components": [
534
- {
535
- "internalType": "bytes32[2]",
536
- "name": "bytes32Vals",
537
- "type": "bytes32[2]"
538
- },
539
- {
540
- "internalType": "uint64[2]",
541
- "name": "u64Vals",
542
- "type": "uint64[2]"
543
- }
544
- ],
545
- "internalType": "struct GlobalState",
546
- "name": "globalState",
547
- "type": "tuple"
548
- },
549
- {
550
- "internalType": "enum MachineStatus",
551
- "name": "machineStatus",
552
- "type": "uint8"
553
- }
554
- ],
555
- "internalType": "struct ExecutionState",
556
- "name": "afterState",
557
- "type": "tuple"
841
+ "internalType": "enum MachineStatus",
842
+ "name": "machineStatus",
843
+ "type": "uint8"
558
844
  },
559
845
  {
560
- "internalType": "uint64",
561
- "name": "numBlocks",
562
- "type": "uint64"
846
+ "internalType": "bytes32",
847
+ "name": "endHistoryRoot",
848
+ "type": "bytes32"
563
849
  }
564
850
  ],
565
- "internalType": "struct Assertion",
566
- "name": "assertion",
851
+ "internalType": "struct AssertionState",
852
+ "name": "confirmState",
567
853
  "type": "tuple"
568
- }
569
- ],
570
- "name": "createNitroMigrationGenesis",
571
- "outputs": [],
572
- "stateMutability": "nonpayable",
573
- "type": "function"
574
- },
575
- {
576
- "inputs": [
577
- {
578
- "internalType": "address",
579
- "name": "staker",
580
- "type": "address"
581
- }
582
- ],
583
- "name": "currentChallenge",
584
- "outputs": [
585
- {
586
- "internalType": "uint64",
587
- "name": "",
588
- "type": "uint64"
589
- }
590
- ],
591
- "stateMutability": "view",
592
- "type": "function"
593
- },
594
- {
595
- "inputs": [],
596
- "name": "extraChallengeTimeBlocks",
597
- "outputs": [
598
- {
599
- "internalType": "uint64",
600
- "name": "",
601
- "type": "uint64"
602
- }
603
- ],
604
- "stateMutability": "view",
605
- "type": "function"
606
- },
607
- {
608
- "inputs": [],
609
- "name": "firstUnresolvedNode",
610
- "outputs": [
611
- {
612
- "internalType": "uint64",
613
- "name": "",
614
- "type": "uint64"
615
- }
616
- ],
617
- "stateMutability": "view",
618
- "type": "function"
619
- },
620
- {
621
- "inputs": [
622
- {
623
- "internalType": "uint64",
624
- "name": "nodeNum",
625
- "type": "uint64"
626
854
  },
627
855
  {
628
856
  "internalType": "bytes32",
629
- "name": "blockHash",
630
- "type": "bytes32"
631
- },
632
- {
633
- "internalType": "bytes32",
634
- "name": "sendRoot",
857
+ "name": "inboxAcc",
635
858
  "type": "bytes32"
636
859
  }
637
860
  ],
638
- "name": "forceConfirmNode",
861
+ "name": "forceConfirmAssertion",
639
862
  "outputs": [],
640
863
  "stateMutability": "nonpayable",
641
864
  "type": "function"
@@ -643,17 +866,61 @@
643
866
  {
644
867
  "inputs": [
645
868
  {
646
- "internalType": "uint64",
647
- "name": "prevNode",
648
- "type": "uint64"
649
- },
650
- {
651
- "internalType": "uint256",
652
- "name": "prevNodeInboxMaxCount",
653
- "type": "uint256"
869
+ "internalType": "bytes32",
870
+ "name": "prevAssertionHash",
871
+ "type": "bytes32"
654
872
  },
655
873
  {
656
874
  "components": [
875
+ {
876
+ "components": [
877
+ {
878
+ "internalType": "bytes32",
879
+ "name": "prevPrevAssertionHash",
880
+ "type": "bytes32"
881
+ },
882
+ {
883
+ "internalType": "bytes32",
884
+ "name": "sequencerBatchAcc",
885
+ "type": "bytes32"
886
+ },
887
+ {
888
+ "components": [
889
+ {
890
+ "internalType": "bytes32",
891
+ "name": "wasmModuleRoot",
892
+ "type": "bytes32"
893
+ },
894
+ {
895
+ "internalType": "uint256",
896
+ "name": "requiredStake",
897
+ "type": "uint256"
898
+ },
899
+ {
900
+ "internalType": "address",
901
+ "name": "challengeManager",
902
+ "type": "address"
903
+ },
904
+ {
905
+ "internalType": "uint64",
906
+ "name": "confirmPeriodBlocks",
907
+ "type": "uint64"
908
+ },
909
+ {
910
+ "internalType": "uint64",
911
+ "name": "nextInboxPosition",
912
+ "type": "uint64"
913
+ }
914
+ ],
915
+ "internalType": "struct ConfigData",
916
+ "name": "configData",
917
+ "type": "tuple"
918
+ }
919
+ ],
920
+ "internalType": "struct BeforeStateData",
921
+ "name": "beforeStateData",
922
+ "type": "tuple"
923
+ },
657
924
  {
658
925
  "components": [
659
926
  {
@@ -677,9 +944,14 @@
677
944
  "internalType": "enum MachineStatus",
678
945
  "name": "machineStatus",
679
946
  "type": "uint8"
947
+ },
948
+ {
949
+ "internalType": "bytes32",
950
+ "name": "endHistoryRoot",
951
+ "type": "bytes32"
680
952
  }
681
953
  ],
682
- "internalType": "struct ExecutionState",
954
+ "internalType": "struct AssertionState",
683
955
  "name": "beforeState",
684
956
  "type": "tuple"
685
957
  },
@@ -706,29 +978,29 @@
706
978
  "internalType": "enum MachineStatus",
707
979
  "name": "machineStatus",
708
980
  "type": "uint8"
981
+ },
982
+ {
983
+ "internalType": "bytes32",
984
+ "name": "endHistoryRoot",
985
+ "type": "bytes32"
709
986
  }
710
987
  ],
711
- "internalType": "struct ExecutionState",
988
+ "internalType": "struct AssertionState",
712
989
  "name": "afterState",
713
990
  "type": "tuple"
714
- },
715
- {
716
- "internalType": "uint64",
717
- "name": "numBlocks",
718
- "type": "uint64"
719
991
  }
720
992
  ],
721
- "internalType": "struct Assertion",
993
+ "internalType": "struct AssertionInputs",
722
994
  "name": "assertion",
723
995
  "type": "tuple"
724
996
  },
725
997
  {
726
998
  "internalType": "bytes32",
727
- "name": "expectedNodeHash",
999
+ "name": "expectedAssertionHash",
728
1000
  "type": "bytes32"
729
1001
  }
730
1002
  ],
731
- "name": "forceCreateNode",
1003
+ "name": "forceCreateAssertion",
732
1004
  "outputs": [],
733
1005
  "stateMutability": "nonpayable",
734
1006
  "type": "function"
@@ -747,97 +1019,62 @@
747
1019
  "type": "function"
748
1020
  },
749
1021
  {
750
- "inputs": [
751
- {
752
- "internalType": "address[]",
753
- "name": "stakerA",
754
- "type": "address[]"
755
- },
1022
+ "inputs": [],
1023
+ "name": "genesisAssertionHash",
1024
+ "outputs": [
756
1025
  {
757
- "internalType": "address[]",
758
- "name": "stakerB",
759
- "type": "address[]"
1026
+ "internalType": "bytes32",
1027
+ "name": "",
1028
+ "type": "bytes32"
760
1029
  }
761
1030
  ],
762
- "name": "forceResolveChallenge",
763
- "outputs": [],
764
- "stateMutability": "nonpayable",
1031
+ "stateMutability": "pure",
765
1032
  "type": "function"
766
1033
  },
767
1034
  {
768
1035
  "inputs": [
769
1036
  {
770
- "internalType": "uint64",
771
- "name": "nodeNum",
772
- "type": "uint64"
1037
+ "internalType": "bytes32",
1038
+ "name": "assertionHash",
1039
+ "type": "bytes32"
773
1040
  }
774
1041
  ],
775
- "name": "getNode",
1042
+ "name": "getAssertion",
776
1043
  "outputs": [
777
1044
  {
778
1045
  "components": [
779
- {
780
- "internalType": "bytes32",
781
- "name": "stateHash",
782
- "type": "bytes32"
783
- },
784
- {
785
- "internalType": "bytes32",
786
- "name": "challengeHash",
787
- "type": "bytes32"
788
- },
789
- {
790
- "internalType": "bytes32",
791
- "name": "confirmData",
792
- "type": "bytes32"
793
- },
794
- {
795
- "internalType": "uint64",
796
- "name": "prevNum",
797
- "type": "uint64"
798
- },
799
- {
800
- "internalType": "uint64",
801
- "name": "deadlineBlock",
802
- "type": "uint64"
803
- },
804
1046
  {
805
1047
  "internalType": "uint64",
806
- "name": "noChildConfirmedBeforeBlock",
1048
+ "name": "firstChildBlock",
807
1049
  "type": "uint64"
808
1050
  },
809
1051
  {
810
1052
  "internalType": "uint64",
811
- "name": "stakerCount",
1053
+ "name": "secondChildBlock",
812
1054
  "type": "uint64"
813
1055
  },
814
1056
  {
815
1057
  "internalType": "uint64",
816
- "name": "childStakerCount",
1058
+ "name": "createdAtBlock",
817
1059
  "type": "uint64"
818
1060
  },
819
1061
  {
820
- "internalType": "uint64",
821
- "name": "firstChildBlock",
822
- "type": "uint64"
1062
+ "internalType": "bool",
1063
+ "name": "isFirstChild",
1064
+ "type": "bool"
823
1065
  },
824
1066
  {
825
- "internalType": "uint64",
826
- "name": "latestChildNumber",
827
- "type": "uint64"
828
- },
829
- {
830
- "internalType": "uint64",
831
- "name": "createdAtBlock",
832
- "type": "uint64"
1067
+ "internalType": "enum AssertionStatus",
1068
+ "name": "status",
1069
+ "type": "uint8"
833
1070
  },
834
1071
  {
835
1072
  "internalType": "bytes32",
836
- "name": "nodeHash",
1073
+ "name": "configHash",
837
1074
  "type": "bytes32"
838
1075
  }
839
1076
  ],
840
- "internalType": "struct Node",
1077
+ "internalType": "struct AssertionNode",
841
1078
  "name": "",
842
1079
  "type": "tuple"
843
1080
  }
@@ -848,12 +1085,12 @@
848
1085
  {
849
1086
  "inputs": [
850
1087
  {
851
- "internalType": "uint64",
852
- "name": "nodeNum",
853
- "type": "uint64"
1088
+ "internalType": "bytes32",
1089
+ "name": "assertionHash",
1090
+ "type": "bytes32"
854
1091
  }
855
1092
  ],
856
- "name": "getNodeCreationBlockForLogLookup",
1093
+ "name": "getAssertionCreationBlockForLogLookup",
857
1094
  "outputs": [
858
1095
  {
859
1096
  "internalType": "uint256",
@@ -864,6 +1101,44 @@
864
1101
  "stateMutability": "view",
865
1102
  "type": "function"
866
1103
  },
1104
+ {
1105
+ "inputs": [
1106
+ {
1107
+ "internalType": "bytes32",
1108
+ "name": "assertionHash",
1109
+ "type": "bytes32"
1110
+ }
1111
+ ],
1112
+ "name": "getFirstChildCreationBlock",
1113
+ "outputs": [
1114
+ {
1115
+ "internalType": "uint64",
1116
+ "name": "",
1117
+ "type": "uint64"
1118
+ }
1119
+ ],
1120
+ "stateMutability": "view",
1121
+ "type": "function"
1122
+ },
1123
+ {
1124
+ "inputs": [
1125
+ {
1126
+ "internalType": "bytes32",
1127
+ "name": "assertionHash",
1128
+ "type": "bytes32"
1129
+ }
1130
+ ],
1131
+ "name": "getSecondChildCreationBlock",
1132
+ "outputs": [
1133
+ {
1134
+ "internalType": "uint64",
1135
+ "name": "",
1136
+ "type": "uint64"
1137
+ }
1138
+ ],
1139
+ "stateMutability": "view",
1140
+ "type": "function"
1141
+ },
867
1142
  {
868
1143
  "inputs": [
869
1144
  {
@@ -882,24 +1157,24 @@
882
1157
  "type": "uint256"
883
1158
  },
884
1159
  {
885
- "internalType": "uint64",
886
- "name": "index",
887
- "type": "uint64"
888
- },
889
- {
890
- "internalType": "uint64",
891
- "name": "latestStakedNode",
892
- "type": "uint64"
1160
+ "internalType": "bytes32",
1161
+ "name": "latestStakedAssertion",
1162
+ "type": "bytes32"
893
1163
  },
894
1164
  {
895
1165
  "internalType": "uint64",
896
- "name": "currentChallenge",
1166
+ "name": "index",
897
1167
  "type": "uint64"
898
1168
  },
899
1169
  {
900
1170
  "internalType": "bool",
901
1171
  "name": "isStaked",
902
1172
  "type": "bool"
1173
+ },
1174
+ {
1175
+ "internalType": "address",
1176
+ "name": "withdrawalAddress",
1177
+ "type": "address"
903
1178
  }
904
1179
  ],
905
1180
  "internalType": "struct IRollupCore.Staker",
@@ -929,6 +1204,19 @@
929
1204
  "stateMutability": "view",
930
1205
  "type": "function"
931
1206
  },
1207
+ {
1208
+ "inputs": [],
1209
+ "name": "getValidators",
1210
+ "outputs": [
1211
+ {
1212
+ "internalType": "address[]",
1213
+ "name": "",
1214
+ "type": "address[]"
1215
+ }
1216
+ ],
1217
+ "stateMutability": "view",
1218
+ "type": "function"
1219
+ },
932
1220
  {
933
1221
  "inputs": [],
934
1222
  "name": "inbox",
@@ -951,11 +1239,6 @@
951
1239
  "name": "confirmPeriodBlocks",
952
1240
  "type": "uint64"
953
1241
  },
954
- {
955
- "internalType": "uint64",
956
- "name": "extraChallengeTimeBlocks",
957
- "type": "uint64"
958
- },
959
1242
  {
960
1243
  "internalType": "address",
961
1244
  "name": "stakeToken",
@@ -992,9 +1275,9 @@
992
1275
  "type": "string"
993
1276
  },
994
1277
  {
995
- "internalType": "uint64",
996
- "name": "genesisBlockNum",
997
- "type": "uint64"
1278
+ "internalType": "uint256[]",
1279
+ "name": "miniStakeValues",
1280
+ "type": "uint256[]"
998
1281
  },
999
1282
  {
1000
1283
  "components": [
@@ -1014,13 +1297,104 @@
1014
1297
  "type": "uint256"
1015
1298
  },
1016
1299
  {
1017
- "internalType": "uint256",
1018
- "name": "futureSeconds",
1019
- "type": "uint256"
1300
+ "internalType": "uint256",
1301
+ "name": "futureSeconds",
1302
+ "type": "uint256"
1303
+ }
1304
+ ],
1305
+ "internalType": "struct ISequencerInbox.MaxTimeVariation",
1306
+ "name": "sequencerInboxMaxTimeVariation",
1307
+ "type": "tuple"
1308
+ },
1309
+ {
1310
+ "internalType": "uint256",
1311
+ "name": "layerZeroBlockEdgeHeight",
1312
+ "type": "uint256"
1313
+ },
1314
+ {
1315
+ "internalType": "uint256",
1316
+ "name": "layerZeroBigStepEdgeHeight",
1317
+ "type": "uint256"
1318
+ },
1319
+ {
1320
+ "internalType": "uint256",
1321
+ "name": "layerZeroSmallStepEdgeHeight",
1322
+ "type": "uint256"
1323
+ },
1324
+ {
1325
+ "components": [
1326
+ {
1327
+ "components": [
1328
+ {
1329
+ "internalType": "bytes32[2]",
1330
+ "name": "bytes32Vals",
1331
+ "type": "bytes32[2]"
1332
+ },
1333
+ {
1334
+ "internalType": "uint64[2]",
1335
+ "name": "u64Vals",
1336
+ "type": "uint64[2]"
1337
+ }
1338
+ ],
1339
+ "internalType": "struct GlobalState",
1340
+ "name": "globalState",
1341
+ "type": "tuple"
1342
+ },
1343
+ {
1344
+ "internalType": "enum MachineStatus",
1345
+ "name": "machineStatus",
1346
+ "type": "uint8"
1347
+ },
1348
+ {
1349
+ "internalType": "bytes32",
1350
+ "name": "endHistoryRoot",
1351
+ "type": "bytes32"
1352
+ }
1353
+ ],
1354
+ "internalType": "struct AssertionState",
1355
+ "name": "genesisAssertionState",
1356
+ "type": "tuple"
1357
+ },
1358
+ {
1359
+ "internalType": "uint256",
1360
+ "name": "genesisInboxCount",
1361
+ "type": "uint256"
1362
+ },
1363
+ {
1364
+ "internalType": "address",
1365
+ "name": "anyTrustFastConfirmer",
1366
+ "type": "address"
1367
+ },
1368
+ {
1369
+ "internalType": "uint8",
1370
+ "name": "numBigStepLevel",
1371
+ "type": "uint8"
1372
+ },
1373
+ {
1374
+ "internalType": "uint64",
1375
+ "name": "challengeGracePeriodBlocks",
1376
+ "type": "uint64"
1377
+ },
1378
+ {
1379
+ "components": [
1380
+ {
1381
+ "internalType": "uint64",
1382
+ "name": "threshold",
1383
+ "type": "uint64"
1384
+ },
1385
+ {
1386
+ "internalType": "uint64",
1387
+ "name": "max",
1388
+ "type": "uint64"
1389
+ },
1390
+ {
1391
+ "internalType": "uint64",
1392
+ "name": "replenishRateInBasis",
1393
+ "type": "uint64"
1020
1394
  }
1021
1395
  ],
1022
- "internalType": "struct ISequencerInbox.MaxTimeVariation",
1023
- "name": "sequencerInboxMaxTimeVariation",
1396
+ "internalType": "struct BufferConfig",
1397
+ "name": "bufferConfig",
1024
1398
  "type": "tuple"
1025
1399
  }
1026
1400
  ],
@@ -1056,7 +1430,7 @@
1056
1430
  "type": "address"
1057
1431
  },
1058
1432
  {
1059
- "internalType": "contract IChallengeManager",
1433
+ "internalType": "contract IEdgeChallengeManager",
1060
1434
  "name": "challengeManager",
1061
1435
  "type": "address"
1062
1436
  },
@@ -1070,11 +1444,6 @@
1070
1444
  "name": "rollupUserLogic",
1071
1445
  "type": "address"
1072
1446
  },
1073
- {
1074
- "internalType": "address",
1075
- "name": "validatorUtils",
1076
- "type": "address"
1077
- },
1078
1447
  {
1079
1448
  "internalType": "address",
1080
1449
  "name": "validatorWalletCreator",
@@ -1094,12 +1463,12 @@
1094
1463
  {
1095
1464
  "inputs": [
1096
1465
  {
1097
- "internalType": "address",
1098
- "name": "staker",
1099
- "type": "address"
1466
+ "internalType": "bytes32",
1467
+ "name": "assertionHash",
1468
+ "type": "bytes32"
1100
1469
  }
1101
1470
  ],
1102
- "name": "isStaked",
1471
+ "name": "isFirstChild",
1103
1472
  "outputs": [
1104
1473
  {
1105
1474
  "internalType": "bool",
@@ -1113,12 +1482,12 @@
1113
1482
  {
1114
1483
  "inputs": [
1115
1484
  {
1116
- "internalType": "address",
1117
- "name": "staker",
1118
- "type": "address"
1485
+ "internalType": "bytes32",
1486
+ "name": "assertionHash",
1487
+ "type": "bytes32"
1119
1488
  }
1120
1489
  ],
1121
- "name": "isStakedOnLatestConfirmed",
1490
+ "name": "isPending",
1122
1491
  "outputs": [
1123
1492
  {
1124
1493
  "internalType": "bool",
@@ -1133,11 +1502,11 @@
1133
1502
  "inputs": [
1134
1503
  {
1135
1504
  "internalType": "address",
1136
- "name": "",
1505
+ "name": "staker",
1137
1506
  "type": "address"
1138
1507
  }
1139
1508
  ],
1140
- "name": "isValidator",
1509
+ "name": "isStaked",
1141
1510
  "outputs": [
1142
1511
  {
1143
1512
  "internalType": "bool",
@@ -1152,11 +1521,11 @@
1152
1521
  "inputs": [
1153
1522
  {
1154
1523
  "internalType": "address",
1155
- "name": "staker",
1524
+ "name": "validator",
1156
1525
  "type": "address"
1157
1526
  }
1158
1527
  ],
1159
- "name": "isZombie",
1528
+ "name": "isValidator",
1160
1529
  "outputs": [
1161
1530
  {
1162
1531
  "internalType": "bool",
@@ -1167,40 +1536,14 @@
1167
1536
  "stateMutability": "view",
1168
1537
  "type": "function"
1169
1538
  },
1170
- {
1171
- "inputs": [],
1172
- "name": "lastStakeBlock",
1173
- "outputs": [
1174
- {
1175
- "internalType": "uint64",
1176
- "name": "",
1177
- "type": "uint64"
1178
- }
1179
- ],
1180
- "stateMutability": "view",
1181
- "type": "function"
1182
- },
1183
1539
  {
1184
1540
  "inputs": [],
1185
1541
  "name": "latestConfirmed",
1186
1542
  "outputs": [
1187
1543
  {
1188
- "internalType": "uint64",
1189
- "name": "",
1190
- "type": "uint64"
1191
- }
1192
- ],
1193
- "stateMutability": "view",
1194
- "type": "function"
1195
- },
1196
- {
1197
- "inputs": [],
1198
- "name": "latestNodeCreated",
1199
- "outputs": [
1200
- {
1201
- "internalType": "uint64",
1544
+ "internalType": "bytes32",
1202
1545
  "name": "",
1203
- "type": "uint64"
1546
+ "type": "bytes32"
1204
1547
  }
1205
1548
  ],
1206
1549
  "stateMutability": "view",
@@ -1214,12 +1557,12 @@
1214
1557
  "type": "address"
1215
1558
  }
1216
1559
  ],
1217
- "name": "latestStakedNode",
1560
+ "name": "latestStakedAssertion",
1218
1561
  "outputs": [
1219
1562
  {
1220
- "internalType": "uint64",
1563
+ "internalType": "bytes32",
1221
1564
  "name": "",
1222
- "type": "uint64"
1565
+ "type": "bytes32"
1223
1566
  }
1224
1567
  ],
1225
1568
  "stateMutability": "view",
@@ -1251,30 +1594,6 @@
1251
1594
  "stateMutability": "view",
1252
1595
  "type": "function"
1253
1596
  },
1254
- {
1255
- "inputs": [
1256
- {
1257
- "internalType": "uint64",
1258
- "name": "nodeNum",
1259
- "type": "uint64"
1260
- },
1261
- {
1262
- "internalType": "address",
1263
- "name": "staker",
1264
- "type": "address"
1265
- }
1266
- ],
1267
- "name": "nodeHasStaker",
1268
- "outputs": [
1269
- {
1270
- "internalType": "bool",
1271
- "name": "",
1272
- "type": "bool"
1273
- }
1274
- ],
1275
- "stateMutability": "view",
1276
- "type": "function"
1277
- },
1278
1597
  {
1279
1598
  "inputs": [],
1280
1599
  "name": "outbox",
@@ -1406,6 +1725,19 @@
1406
1725
  "stateMutability": "nonpayable",
1407
1726
  "type": "function"
1408
1727
  },
1728
+ {
1729
+ "inputs": [
1730
+ {
1731
+ "internalType": "address",
1732
+ "name": "_challengeManager",
1733
+ "type": "address"
1734
+ }
1735
+ ],
1736
+ "name": "setChallengeManager",
1737
+ "outputs": [],
1738
+ "stateMutability": "nonpayable",
1739
+ "type": "function"
1740
+ },
1409
1741
  {
1410
1742
  "inputs": [
1411
1743
  {
@@ -1437,19 +1769,6 @@
1437
1769
  "stateMutability": "nonpayable",
1438
1770
  "type": "function"
1439
1771
  },
1440
- {
1441
- "inputs": [
1442
- {
1443
- "internalType": "uint64",
1444
- "name": "newExtraTimeBlocks",
1445
- "type": "uint64"
1446
- }
1447
- ],
1448
- "name": "setExtraChallengeTimeBlocks",
1449
- "outputs": [],
1450
- "stateMutability": "nonpayable",
1451
- "type": "function"
1452
- },
1453
1772
  {
1454
1773
  "inputs": [
1455
1774
  {
@@ -1528,19 +1847,6 @@
1528
1847
  "stateMutability": "nonpayable",
1529
1848
  "type": "function"
1530
1849
  },
1531
- {
1532
- "inputs": [
1533
- {
1534
- "internalType": "address",
1535
- "name": "newStakeToken",
1536
- "type": "address"
1537
- }
1538
- ],
1539
- "name": "setStakeToken",
1540
- "outputs": [],
1541
- "stateMutability": "nonpayable",
1542
- "type": "function"
1543
- },
1544
1850
  {
1545
1851
  "inputs": [
1546
1852
  {
@@ -1559,6 +1865,19 @@
1559
1865
  "stateMutability": "nonpayable",
1560
1866
  "type": "function"
1561
1867
  },
1868
+ {
1869
+ "inputs": [
1870
+ {
1871
+ "internalType": "uint64",
1872
+ "name": "newAfkBlocks",
1873
+ "type": "uint64"
1874
+ }
1875
+ ],
1876
+ "name": "setValidatorAfkBlocks",
1877
+ "outputs": [],
1878
+ "stateMutability": "nonpayable",
1879
+ "type": "function"
1880
+ },
1562
1881
  {
1563
1882
  "inputs": [
1564
1883
  {
@@ -1624,24 +1943,6 @@
1624
1943
  "stateMutability": "view",
1625
1944
  "type": "function"
1626
1945
  },
1627
- {
1628
- "inputs": [
1629
- {
1630
- "internalType": "address",
1631
- "name": "beacon",
1632
- "type": "address"
1633
- },
1634
- {
1635
- "internalType": "address",
1636
- "name": "newImplementation",
1637
- "type": "address"
1638
- }
1639
- ],
1640
- "name": "upgradeBeacon",
1641
- "outputs": [],
1642
- "stateMutability": "nonpayable",
1643
- "type": "function"
1644
- },
1645
1946
  {
1646
1947
  "inputs": [
1647
1948
  {
@@ -1704,14 +2005,116 @@
1704
2005
  "stateMutability": "payable",
1705
2006
  "type": "function"
1706
2007
  },
2008
+ {
2009
+ "inputs": [
2010
+ {
2011
+ "internalType": "bytes32",
2012
+ "name": "assertionHash",
2013
+ "type": "bytes32"
2014
+ },
2015
+ {
2016
+ "components": [
2017
+ {
2018
+ "components": [
2019
+ {
2020
+ "internalType": "bytes32[2]",
2021
+ "name": "bytes32Vals",
2022
+ "type": "bytes32[2]"
2023
+ },
2024
+ {
2025
+ "internalType": "uint64[2]",
2026
+ "name": "u64Vals",
2027
+ "type": "uint64[2]"
2028
+ }
2029
+ ],
2030
+ "internalType": "struct GlobalState",
2031
+ "name": "globalState",
2032
+ "type": "tuple"
2033
+ },
2034
+ {
2035
+ "internalType": "enum MachineStatus",
2036
+ "name": "machineStatus",
2037
+ "type": "uint8"
2038
+ },
2039
+ {
2040
+ "internalType": "bytes32",
2041
+ "name": "endHistoryRoot",
2042
+ "type": "bytes32"
2043
+ }
2044
+ ],
2045
+ "internalType": "struct AssertionState",
2046
+ "name": "state",
2047
+ "type": "tuple"
2048
+ },
2049
+ {
2050
+ "internalType": "bytes32",
2051
+ "name": "prevAssertionHash",
2052
+ "type": "bytes32"
2053
+ },
2054
+ {
2055
+ "internalType": "bytes32",
2056
+ "name": "inboxAcc",
2057
+ "type": "bytes32"
2058
+ }
2059
+ ],
2060
+ "name": "validateAssertionHash",
2061
+ "outputs": [],
2062
+ "stateMutability": "pure",
2063
+ "type": "function"
2064
+ },
2065
+ {
2066
+ "inputs": [
2067
+ {
2068
+ "internalType": "bytes32",
2069
+ "name": "assertionHash",
2070
+ "type": "bytes32"
2071
+ },
2072
+ {
2073
+ "components": [
2074
+ {
2075
+ "internalType": "bytes32",
2076
+ "name": "wasmModuleRoot",
2077
+ "type": "bytes32"
2078
+ },
2079
+ {
2080
+ "internalType": "uint256",
2081
+ "name": "requiredStake",
2082
+ "type": "uint256"
2083
+ },
2084
+ {
2085
+ "internalType": "address",
2086
+ "name": "challengeManager",
2087
+ "type": "address"
2088
+ },
2089
+ {
2090
+ "internalType": "uint64",
2091
+ "name": "confirmPeriodBlocks",
2092
+ "type": "uint64"
2093
+ },
2094
+ {
2095
+ "internalType": "uint64",
2096
+ "name": "nextInboxPosition",
2097
+ "type": "uint64"
2098
+ }
2099
+ ],
2100
+ "internalType": "struct ConfigData",
2101
+ "name": "configData",
2102
+ "type": "tuple"
2103
+ }
2104
+ ],
2105
+ "name": "validateConfig",
2106
+ "outputs": [],
2107
+ "stateMutability": "view",
2108
+ "type": "function"
2109
+ },
1707
2110
  {
1708
2111
  "inputs": [],
1709
- "name": "validatorUtils",
2112
+ "name": "validatorAfkBlocks",
1710
2113
  "outputs": [
1711
2114
  {
1712
- "internalType": "address",
2115
+ "internalType": "uint64",
1713
2116
  "name": "",
1714
- "type": "address"
2117
+ "type": "uint64"
1715
2118
  }
1716
2119
  ],
1717
2120
  "stateMutability": "view",
@@ -1777,58 +2180,26 @@
1777
2180
  },
1778
2181
  {
1779
2182
  "inputs": [
1780
- {
1781
- "internalType": "uint256",
1782
- "name": "zombieNum",
1783
- "type": "uint256"
1784
- }
1785
- ],
1786
- "name": "zombieAddress",
1787
- "outputs": [
1788
2183
  {
1789
2184
  "internalType": "address",
1790
- "name": "",
2185
+ "name": "staker",
1791
2186
  "type": "address"
1792
2187
  }
1793
2188
  ],
1794
- "stateMutability": "view",
1795
- "type": "function"
1796
- },
1797
- {
1798
- "inputs": [],
1799
- "name": "zombieCount",
1800
- "outputs": [
1801
- {
1802
- "internalType": "uint256",
1803
- "name": "",
1804
- "type": "uint256"
1805
- }
1806
- ],
1807
- "stateMutability": "view",
1808
- "type": "function"
1809
- },
1810
- {
1811
- "inputs": [
1812
- {
1813
- "internalType": "uint256",
1814
- "name": "zombieNum",
1815
- "type": "uint256"
1816
- }
1817
- ],
1818
- "name": "zombieLatestStakedNode",
2189
+ "name": "withdrawalAddress",
1819
2190
  "outputs": [
1820
2191
  {
1821
- "internalType": "uint64",
2192
+ "internalType": "address",
1822
2193
  "name": "",
1823
- "type": "uint64"
2194
+ "type": "address"
1824
2195
  }
1825
2196
  ],
1826
2197
  "stateMutability": "view",
1827
2198
  "type": "function"
1828
2199
  }
1829
2200
  ],
1830
- "bytecode": "0x60c0604052620000196200003660201b62002d4e1760201c565b15156080523060a0523480156200002f57600080fd5b5062000111565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b179052905160009182918291606491620000769190620000d3565b600060405180830381855afa9150503d8060008114620000b3576040519150601f19603f3d011682016040523d82523d6000602084013e620000b8565b606091505b5091509150818015620000cc575080516020145b9250505090565b6000825160005b81811015620000f65760208186018101518583015201620000da565b8181111562000106576000828501525b509190910192915050565b60805160a051615b4c6200018b600039600081816110dc0152818161111c015281816111ff0152818161123f01528181611a5c01528181611a9c01528181611c3f01528181611c7f01528181611d71015281816126390152612679015260008181612b5f0152818161328801526145c80152615b4c6000f3fe6080604052600436106103b65760003560e01c80637b83a3fe116101f9578063bc45e0ae1161011e578063ee35f327116100b6578063f63a434a1161007a578063f63a434a14610e09578063facd743b14610e29578063fb0e722b14610e59578063fc8ffa0314610e79578063ff204f3b14610e9957600080fd5b8063ee35f32714610d53578063ef40a67014610d73578063f065de3f14610da9578063f33e1fac14610dc9578063f38c937914610de957600080fd5b8063bc45e0ae14610bc4578063ce11e6ab14610be4578063ce66d05c14610c04578063d01e660214610c24578063d735e21d14610c44578063dcd030aa14610c69578063dff6978714610c89578063e78cea9214610c9e578063e8bd492214610cbe57600080fd5b806392c8134c1161019157806392c8134c146109bf578063948d6588146109ec5780639846129a14610a0c5780639a8a059214610a1f578063a23c44b114610a35578063a2b4f1d814610b44578063a3ffb77214610b64578063aa38a6e714610b84578063aa65af4814610ba457600080fd5b80637b83a3fe146108ba5780637ba9534a146108da5780637c75c298146108ef5780638456cb591461090f578063848bf918146109245780638640ce5f1461094457806389384960146109695780638ee1a1261461098957806391c657e81461099f57600080fd5b806347fb24c5116102df5780636136fe2e116102775780636136fe2e146107685780636177fd181461078857806363721d6b146107cb57806365f7f80d146107e057806369fd251c146107fe5780636ddd37441461084757806371ef232c1461086757806376e7e23b1461087d578063771b2f971461089357600080fd5b806347fb24c5146106635780634f1ef286146106835780634f61f8501461069657806351ed6a30146106b657806352d1902d146106d657806353b60c4a146106eb57806355840a581461070b578063567ca41b146107305780635c975abb1461075057600080fd5b80631b1689e9116103525780631b1689e9146104f257806328ff127a146105165780632e7acfa6146105365780632f30cabd1461056e5780632f7968e8146105a45780633659cfe6146105c45780633e96576e146105e457806345e38b641461062d578063470dce4e1461064357600080fd5b8063014cc92c146103bb578063023a96fe146103f15780630397d45814610411578063046f7da21461043357806306ae5851146104485780630d40a0fd146104685780630d561b371461048857806312ab3d3b146104a857806313af4035146104d2575b600080fd5b3480156103c757600080fd5b50606f546103db906001600160a01b031681565b6040516103e89190614e65565b60405180910390f35b3480156103fd57600080fd5b50606e546103db906001600160a01b031681565b34801561041d57600080fd5b5061043161042c366004614e8e565b610eb9565b005b34801561043f57600080fd5b5061043161108b565b34801561045457600080fd5b50610431610463366004614eab565b6110af565b34801561047457600080fd5b50610431610483366004614e8e565b6110d1565b34801561049457600080fd5b506104316104a3366004614e8e565b611191565b3480156104b457600080fd5b50607e546104c29060ff1681565b60405190151581526020016103e8565b3480156104de57600080fd5b506104316104ed366004614e8e565b6111ce565b3480156104fe57600080fd5b50610508607d5481565b6040519081526020016103e8565b34801561052257600080fd5b50610431610531366004614ec4565b6111f4565b34801561054257600080fd5b50606554610556906001600160401b031681565b6040516001600160401b0390911681526020016103e8565b34801561057a57600080fd5b50610508610589366004614e8e565b6001600160a01b03166000908152607b602052604090205490565b3480156105b057600080fd5b506104316105bf366004614f3c565b611a05565b3480156105d057600080fd5b506104316105df366004614e8e565b611a51565b3480156105f057600080fd5b506105566105ff366004614e8e565b6001600160a01b0316600090815260796020526040902060010154600160401b90046001600160401b031690565b34801561063957600080fd5b5061050860735481565b34801561064f57600080fd5b5061043161065e366004614f88565b611b0e565b34801561066f57600080fd5b5061043161067e366004614fdd565b611bb2565b610431610691366004615084565b611c34565b3480156106a257600080fd5b506104316106b1366004614e8e565b611ce5565b3480156106c257600080fd5b506072546103db906001600160a01b031681565b3480156106e257600080fd5b50610508611d64565b3480156106f757600080fd5b50610431610706366004614e8e565b611e12565b34801561071757600080fd5b50607e546103db9061010090046001600160a01b031681565b34801561073c57600080fd5b5061043161074b366004614e8e565b611e4a565b34801561075c57600080fd5b5060335460ff166104c2565b34801561077457600080fd5b5061043161078336600461512b565b611f17565b34801561079457600080fd5b506104c26107a3366004614e8e565b6001600160a01b0316600090815260796020526040902060010154600160c01b900460ff1690565b3480156107d757600080fd5b50607a54610508565b3480156107ec57600080fd5b506075546001600160401b0316610556565b34801561080a57600080fd5b50610556610819366004614e8e565b6001600160a01b0316600090815260796020526040902060010154600160801b90046001600160401b031690565b34801561085357600080fd5b506103db61086236600461512b565b611f59565b34801561087357600080fd5b50610508607c5481565b34801561088957600080fd5b5061050860675481565b34801561089f57600080fd5b5060655461055690600160401b90046001600160401b031681565b3480156108c657600080fd5b506104316108d5366004615146565b611f92565b3480156108e657600080fd5b50610556612295565b3480156108fb57600080fd5b5061043161090a3660046151ae565b6122ab565b34801561091b57600080fd5b5061043161241f565b34801561093057600080fd5b5061043161093f3660046151ef565b612443565b34801561095057600080fd5b50607554600160c01b90046001600160401b0316610556565b34801561097557600080fd5b50610431610984366004614eab565b6124bf565b34801561099557600080fd5b5061050860685481565b3480156109ab57600080fd5b506104c26109ba366004614e8e565b6124e1565b3480156109cb57600080fd5b506109df6109da36600461512b565b612545565b6040516103e8919061521d565b3480156109f857600080fd5b50610431610a07366004614eab565b61260c565b610431610a1a366004615084565b61262e565b348015610a2b57600080fd5b5061050860665481565b348015610a4157600080fd5b50610aef610a50366004614e8e565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b0316600090815260796020908152604091829020825160a081018452815481526001909101546001600160401b0380821693830193909352600160401b8104831693820193909352600160801b83049091166060820152600160c01b90910460ff161515608082015290565b6040516103e89190600060a0820190508251825260208301516001600160401b038082166020850152806040860151166040850152806060860151166060850152505060808301511515608083015292915050565b348015610b5057600080fd5b50610431610b5f366004615319565b6126db565b348015610b7057600080fd5b50610431610b7f366004615336565b612706565b348015610b9057600080fd5b50606d546103db906001600160a01b031681565b348015610bb057600080fd5b506104c2610bbf3660046153a1565b6127fa565b348015610bd057600080fd5b506070546103db906001600160a01b031681565b348015610bf057600080fd5b50606b546103db906001600160a01b031681565b348015610c1057600080fd5b50610431610c1f36600461512b565b612831565b348015610c3057600080fd5b506103db610c3f366004614eab565b6128bc565b348015610c5057600080fd5b50607554600160401b90046001600160401b0316610556565b348015610c7557600080fd5b506104c2610c84366004614e8e565b6128d1565b348015610c9557600080fd5b50607854610556565b348015610caa57600080fd5b50606a546103db906001600160a01b031681565b348015610cca57600080fd5b50610d1b610cd9366004614e8e565b607960205260009081526040902080546001909101546001600160401b0380821691600160401b8104821691600160801b82041690600160c01b900460ff1685565b604080519586526001600160401b0394851660208701529284169285019290925290911660608301521515608082015260a0016103e8565b348015610d5f57600080fd5b50606c546103db906001600160a01b031681565b348015610d7f57600080fd5b50610508610d8e366004614e8e565b6001600160a01b031660009081526079602052604090205490565b348015610db557600080fd5b506071546103db906001600160a01b031681565b348015610dd557600080fd5b50610556610de4366004614eab565b612914565b348015610df557600080fd5b50610431610e04366004615336565b61294b565b348015610e1557600080fd5b50610508610e2436600461512b565b612b5b565b348015610e3557600080fd5b506104c2610e44366004614e8e565b60746020526000908152604090205460ff1681565b348015610e6557600080fd5b506069546103db906001600160a01b031681565b348015610e8557600080fd5b50610431610e94366004614e8e565b612c24565b348015610ea557600080fd5b50610431610eb4366004614e8e565b612cb6565b60335460ff16610ee45760405162461bcd60e51b8152600401610edb906153bd565b60405180910390fd5b6000806001600160a01b0316826001600160a01b0316141590506000306001600160a01b031663cd205fda6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3957600080fd5b505afa158015610f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7191906153eb565b905081151581151514610fbe5760405162461bcd60e51b81526020600482015260156024820152741393d7d554d15497d313d1d250d7d4d5541413d495605a1b6044820152606401610edb565b6078546001600160401b03161561100b5760405162461bcd60e51b81526020600482015260116024820152704e4f5f4143544956455f5354414b45525360781b6044820152606401610edb565b607c54156110515760405162461bcd60e51b81526020600482015260136024820152724e4f5f50454e44494e475f574954484452415760681b6044820152606401610edb565b607280546001600160a01b0319166001600160a01b038516179055604051600d90600080516020615ad083398151915290600090a2505050565b611093612de6565b604051600490600080516020615ad083398151915290600090a2565b6067819055604051600c90600080516020615ad083398151915290600090a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561111a5760405162461bcd60e51b8152600401610edb90615408565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661114c612e4c565b6001600160a01b0316146111725760405162461bcd60e51b8152600401610edb90615454565b6040805160008082526020820190925261118e91839190612e6d565b50565b607e8054610100600160a81b0319166101006001600160a01b03841602179055604051601f90600080516020615ad083398151915290600090a250565b6111d78161300d565b604051600790600080516020615ad083398151915290600090a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561123d5760405162461bcd60e51b8152600401610edb90615408565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661126f612e4c565b6001600160a01b0316146112955760405162461bcd60e51b8152600401610edb90615454565b600054610100900460ff166112b05760005460ff16156112b4565b303b155b6113175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610edb565b600054610100900460ff16158015611339576000805461ffff19166101011790555b43607d5561134a6020830183614e8e565b606a80546001600160a01b0319166001600160a01b039290921691909117905561137a6040830160208401614e8e565b606c80546001600160a01b0319166001600160a01b03929092169190911790556113a76020830183614e8e565b6001600160a01b03166347fb24c56113c56060850160408601614e8e565b60016040518363ffffffff1660e01b81526004016113e49291906154a0565b600060405180830381600087803b1580156113fe57600080fd5b505af1158015611412573d6000803e3d6000fd5b50611424925050506020830183614e8e565b6001600160a01b0316634f61f8506114426040850160208601614e8e565b6040518263ffffffff1660e01b815260040161145e9190614e65565b600060405180830381600087803b15801561147857600080fd5b505af115801561148c573d6000803e3d6000fd5b506114a1925050506060830160408401614e8e565b606980546001600160a01b0319166001600160a01b03929092169190911790556114d16080830160608401614e8e565b606b80546001600160a01b0319166001600160a01b03929092169190911790556114fe6020830183614e8e565b6001600160a01b031663cee3d72861151c6080850160608601614e8e565b60016040518363ffffffff1660e01b815260040161153b9291906154a0565b600060405180830381600087803b15801561155557600080fd5b505af1158015611569573d6000803e3d6000fd5b5061157e9250505060a0830160808401614e8e565b606d80546001600160a01b0319166001600160a01b03929092169190911790556115ab6020830183614e8e565b6001600160a01b03166347fb24c56115c960a0850160808601614e8e565b60016040518363ffffffff1660e01b81526004016115e89291906154a0565b600060405180830381600087803b15801561160257600080fd5b505af1158015611616573d6000803e3d6000fd5b5061162b9250505060a0830160808401614e8e565b6001600160a01b031663cf8d56d660e085013561164c6101008701876154bb565b6040518463ffffffff1660e01b815260040161166a93929190615501565b600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b506116ad925050506040830160208401614e8e565b60405163e0bc972960e01b815260006004820181905260c0602483015260c4820181905260016044830181905260648301829052608483019190915260a48201526001600160a01b03919091169063e0bc97299060e401600060405180830381600087803b15801561171e57600080fd5b505af1158015611732573d6000803e3d6000fd5b506117499250505061012083016101008401614e8e565b606f80546001600160a01b0319166001600160a01b039290921691909117905561177b61014083016101208401614e8e565b607080546001600160a01b0319166001600160a01b03929092169190911790556117ab60c0830160a08401614e8e565b606e80546001600160a01b0319166001600160a01b039290921691909117905560006117d5613061565b90506117e0816130b4565b6117ed602085018561512b565b6065805467ffffffffffffffff19166001600160401b039290921691909117905561181e604085016020860161512b565b606580546001600160401b0392909216600160401b0267ffffffffffffffff60401b1990921691909117905560e084013560665560608401356067556080840135606855604b60735561186f61334c565b6001600160a01b031661188860e0860160c08701614e8e565b6001600160a01b031614156118d65760405162461bcd60e51b815260206004820152601460248201527324a72b20a624a22fa2a9a1a927abafa0a226a4a760611b6044820152606401610edb565b6118e660c0850160a08601614e8e565b6001600160a01b03166118ff60e0860160c08701614e8e565b6001600160a01b0316141561194d5760405162461bcd60e51b815260206004820152601460248201527324a72b20a624a22fa2a9a1a927abafa7aba722a960611b6044820152606401610edb565b61195d60e0850160c08601614e8e565b607180546001600160a01b0319166001600160a01b039290921691909117905561198d6060850160408601614e8e565b607280546001600160a01b0319166001600160a01b0392909216919091179055604080516080860135815260e086013560208201527ffc1b83c11d99d08a938e0b82a0bd45f822f71ff5abf23f999c93c4533d752464910160405180910390a1508015611a00576000805461ff00191690555b505050565b60335460ff16611a275760405162461bcd60e51b8152600401610edb906153bd565b611a32838383613374565b604051601890600080516020615ad083398151915290600090a2505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611a9a5760405162461bcd60e51b8152600401610edb90615408565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611acc612e4c565b6001600160a01b031614611af25760405162461bcd60e51b8152600401610edb90615454565b6040805160008082526020820190925261118e918391906134ce565b60335460ff16611b305760405162461bcd60e51b8152600401610edb906153bd565b6075546001600160401b03858116911614611b855760405162461bcd60e51b815260206004820152601560248201527413d3931657d310551154d517d0d3d3919254935151605a1b6044820152606401610edb565b611b9182858584613648565b50604051601790600080516020615ad083398151915290600090a250505050565b606a546040516347fb24c560e01b81526001600160a01b03909116906347fb24c590611be490859085906004016154a0565b600060405180830381600087803b158015611bfe57600080fd5b505af1158015611c12573d6000803e3d6000fd5b505060405160029250600080516020615ad08339815191529150600090a25050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611c7d5760405162461bcd60e51b8152600401610edb90615408565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611caf612e4c565b6001600160a01b031614611cd55760405162461bcd60e51b8152600401610edb90615454565b611ce1828260016134ce565b5050565b606a546040516304f61f8560e41b81526001600160a01b0390911690634f61f85090611d15908490600401614e65565b600060405180830381600087803b158015611d2f57600080fd5b505af1158015611d43573d6000803e3d6000fd5b5050604051601b9250600080516020615ad08339815191529150600090a250565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611dff5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610edb565b50600080516020615ab083398151915290565b606980546001600160a01b0319166001600160a01b038316179055604051601c90600080516020615ad083398151915290600090a250565b606b546001600160a01b0382811691161415611e955760405162461bcd60e51b815260206004820152600a602482015269086aaa4be9eaaa8849eb60b31b6044820152606401610edb565b606a546040516319dc7ae560e31b81526001600160a01b039091169063cee3d72890611ec89084906000906004016154a0565b600060405180830381600087803b158015611ee257600080fd5b505af1158015611ef6573d6000803e3d6000fd5b505060405160019250600080516020615ad08339815191529150600090a250565b6065805467ffffffffffffffff60401b1916600160401b6001600160401b03841602179055604051600a90600080516020615ad083398151915290600090a250565b60006078826001600160401b031681548110611f7757611f77615537565b6000918252602090912001546001600160a01b031692915050565b60335460ff16611fb45760405162461bcd60e51b8152600401610edb906153bd565b60006001611fc0612295565b6001600160401b0316156120105760405162461bcd60e51b81526020600482015260176024820152761393d397d1d1539154d254d7d393d11154d7d1561254d5604a1b6044820152606401610edb565b61201983613c5c565b6120585760405162461bcd60e51b815260206004820152601060248201526f4e4f545f454d5054595f4245464f524560801b6044820152606401610edb565b600161206a60a0850160808601615572565b600381111561207b5761207b61554d565b146120c85760405162461bcd60e51b815260206004820152601b60248201527f4245464f52455f4d414348494e455f4e4f545f46494e495348454400000000006044820152606401610edb565b60c0830135821461210f5760405162461bcd60e51b81526020600482015260116024820152701393d517d6915493d7d4d153911493d3d5607a1b6044820152606401610edb565b6001600160401b03811661212a610100850160e0860161512b565b6001600160401b0316146121735760405162461bcd60e51b815260206004820152601060248201526f494e424f585f4e4f545f41545f4f4e4560801b6044820152606401610edb565b6121856101208401610100850161512b565b6001600160401b0316156121db5760405162461bcd60e51b815260206004820152601c60248201527f504f534954494f4e5f494e5f4d4553534147455f4e4f545f5a45524f000000006044820152606401610edb565b60016121ef61014085016101208601615572565b60038111156122005761220061554d565b1461224d5760405162461bcd60e51b815260206004820152601a60248201527f41465445525f4d414348494e455f4e4f545f46494e49534845440000000000006044820152606401610edb565b60a08301356122688460006001600160401b03851681613648565b5061227560018285613374565b604051601d90600080516020615ad083398151915290600090a250505050565b607554600160801b90046001600160401b031690565b60335460ff166122cd5760405162461bcd60e51b8152600401610edb906153bd565b806122ea5760405162461bcd60e51b8152600401610edb9061558d565b60005b8181101561240057600060798185858581811061230c5761230c615537565b90506020020160208101906123219190614e8e565b6001600160a01b03168152602081019190915260400160002060010154600160801b90046001600160401b03161461238d5760405162461bcd60e51b815260206004820152600f60248201526e14d51052d15497d25397d0d2105313608a1b6044820152606401610edb565b6123be8383838181106123a2576123a2615537565b90506020020160208101906123b79190614e8e565b6000613cb8565b506123ee8383838181106123d4576123d4615537565b90506020020160208101906123e99190614e8e565b613d7d565b806123f8816155c8565b9150506122ed565b50604051601690600080516020615ad083398151915290600090a25050565b612427613e23565b604051600390600080516020615ad083398151915290600090a2565b604051631b2ce7f360e11b81526001600160a01b03831690633659cfe69061246f908490600401614e65565b600060405180830381600087803b15801561248957600080fd5b505af115801561249d573d6000803e3d6000fd5b505060405160149250600080516020615ad08339815191529150600090a25050565b6068819055604051601a90600080516020615ad083398151915290600090a250565b6000805b607a5481101561253c57607a818154811061250257612502615537565b6000918252602090912001546001600160a01b038481169116141561252a5750600192915050565b80612534816155c8565b9150506124e5565b50600092915050565b61254d614d40565b6001600160401b03821660009081526076602052604090206040805161018081018252825481526001830154602082015260028301549181019190915260038201546001600160401b038082166060840152600160401b80830482166080850152600160801b808404831660a0860152600160c01b93849004831660c0860152600486015480841660e0870152918204831661010086015281048216610120850152919091041661014082015260059091015461016082015292915050565b6073819055604051600890600080516020615ad083398151915290600090a250565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156126775760405162461bcd60e51b8152600401610edb90615408565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126a9612e4c565b6001600160a01b0316146126cf5760405162461bcd60e51b8152600401610edb90615454565b611ce182826001612e6d565b607e805460ff1916821515179055604051601e90600080516020615ad083398151915290600090a250565b826127235760405162461bcd60e51b8152600401610edb9061558d565b8281146127425760405162461bcd60e51b8152600401610edb906155e3565b60005b838110156127d95782828281811061275f5761275f615537565b90506020020160208101906127749190615319565b6074600087878581811061278a5761278a615537565b905060200201602081019061279f9190614e8e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806127d1816155c8565b915050612745565b50604051600690600080516020615ad083398151915290600090a250505050565b6001600160401b03821660009081526077602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b6000816001600160401b0316116128835760405162461bcd60e51b81526020600482015260166024820152751253959053125117d0d3d39192549357d411549253d160521b6044820152606401610edb565b6065805467ffffffffffffffff19166001600160401b038316179055604051600990600080516020615ad083398151915290600090a250565b6000607a8281548110611f7757611f77615537565b6001600160a01b038116600090815260796020526040812060010154600160c01b900460ff16801561282b575060755461282b906001600160401b0316836127fa565b6000607a828154811061292957612929615537565b600091825260209091200154600160a01b90046001600160401b031692915050565b60335460ff1661296d5760405162461bcd60e51b8152600401610edb906153bd565b8261298a5760405162461bcd60e51b8152600401610edb9061558d565b8281146129a95760405162461bcd60e51b8152600401610edb906155e3565b60005b83811015612b3a576000612a0c8686848181106129cb576129cb615537565b90506020020160208101906129e09190614e8e565b8585858181106129f2576129f2615537565b9050602002016020810190612a079190614e8e565b613e9e565b90506001600160401b038116612a535760405162461bcd60e51b815260206004820152600c60248201526b1393d517d25397d0d210531360a21b6044820152606401610edb565b612aab868684818110612a6857612a68615537565b9050602002016020810190612a7d9190614e8e565b6001600160a01b03166000908152607960205260409020600101805467ffffffffffffffff60801b19169055565b612ac0848484818110612a6857612a68615537565b606e546040516356e9df9760e01b81526001600160401b03831660048201526001600160a01b03909116906356e9df9790602401600060405180830381600087803b158015612b0e57600080fd5b505af1158015612b22573d6000803e3d6000fd5b50505050508080612b32906155c8565b9150506129ac565b50604051601590600080516020615ad083398151915290600090a250505050565b60007f000000000000000000000000000000000000000000000000000000000000000015612bb9576001600160401b0382166000908152607f60205260409020548061282b5760405162461bcd60e51b8152600401610edb90615609565b6001600160401b03821660009081526076602052604081206003810154909150600160401b90046001600160401b0316612c055760405162461bcd60e51b8152600401610edb90615609565b60040154600160c01b90046001600160401b031692915050565b919050565b612c2c61334c565b6001600160a01b0316816001600160a01b03161415612c7e5760405162461bcd60e51b815260206004820152600e60248201526d494e56414c49445f455343524f5760901b6044820152606401610edb565b607180546001600160a01b0319166001600160a01b038316179055604051601990600080516020615ad083398151915290600090a250565b606b80546001600160a01b0319166001600160a01b0383811691909117909155606a546040516319dc7ae560e31b815291169063cee3d72890612d009084906001906004016154a0565b600060405180830381600087803b158015612d1a57600080fd5b505af1158015612d2e573d6000803e3d6000fd5b505060405160009250600080516020615ad083398151915291508290a250565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b179052905160009182918291606491612d8c9190615656565b600060405180830381855afa9150503d8060008114612dc7576040519150601f19603f3d011682016040523d82523d6000602084013e612dcc565b606091505b5091509150818015612ddf575080516020145b9250505090565b60335460ff16612e085760405162461bcd60e51b8152600401610edb906153bd565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051612e429190614e65565b60405180910390a1565b6000600080516020615ab08339815191525b546001600160a01b0316919050565b7f49bd798cd84788856140a4cd5030756b4d08a9e4d55db725ec195f232d262a895460ff1615612ea057611a0083613f6c565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ed957600080fd5b505afa925050508015612f09575060408051601f3d908101601f19168201909252612f0691810190615672565b60015b612f765760405162461bcd60e51b815260206004820152603860248201527f45524331393637557067726164653a206e6577207365636f6e6461727920696d604482015277706c656d656e746174696f6e206973206e6f74205555505360401b6064820152608401610edb565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d81146130015760405162461bcd60e51b815260206004820152603360248201527f45524331393637557067726164653a20756e737570706f72746564207365636f6044820152721b99185c9e481c1c9bde1a58589b1955555251606a1b6064820152608401610edb565b50611a00838383614027565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61303661334c565b604080516001600160a01b03928316815291841660208301520160405180910390a161118e81614052565b613069614d40565b613071614da4565b60006130a360405180604001604052808481526020016001600381111561309a5761309a61554d565b905260016140de565b9050612ddf81600080804381614123565b6130bc614177565b60008080526076602090815282517fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a181958558201517fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a1819595560408201517fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a18195a5560608201517fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a18195b8054608085015160a086015160c08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b03908116600160801b93881684026001600160c01b0390811691909117600160c01b93891684021790965560e08901517fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a18195c80546101008c01516101208d01516101408e0151948c169290991691909117908a169096029590951790911694871690920290941692909217919093169091021790556101608201517fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a18195d5561326090600161568b565b607560086101000a8154816001600160401b0302191690836001600160401b031602179055507f00000000000000000000000000000000000000000000000000000000000000001561118e5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132e657600080fd5b505afa1580156132fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331e9190615672565b60008052607f6020527f18b3a2798575d3a428c1f52e616a74b071539854e037e7d7c535365d474f40335550565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103612e5e565b6001600160401b038316600090815260766020526040902061339683836141a8565b8160020154146133d75760405162461bcd60e51b815260206004820152600c60248201526b434f4e4649524d5f4441544160a01b6044820152606401610edb565b606b54604051630502677360e51b815260048101849052602481018590526001600160a01b039091169063a04cee6090604401600060405180830381600087803b15801561342457600080fd5b505af1158015613438573d6000803e3d6000fd5b50506075805467ffffffffffffffff19166001600160401b03881617905550613464905084600161568b565b6075805467ffffffffffffffff60401b1916600160401b6001600160401b03938416021790556040805185815260208101859052918616917f22ef0479a7ff660660d1c2fe35f1b632cf31675c2d9378db8cec95b00d8ffa3c91015b60405180910390a250505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561350157611a00836141c4565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561353a57600080fd5b505afa92505050801561356a575060408051601f3d908101601f1916820190925261356791810190615672565b60015b6135cd5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610edb565b600080516020615ab0833981519152811461363c5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610edb565b50611a00838383614246565b6000600161365e61014087016101208801615572565b600381111561366f5761366f61554d565b148061369d5750600261368a61014087016101208801615572565b600381111561369b5761369b61554d565b145b6136dc5760405162461bcd60e51b815260206004820152601060248201526f4241445f41465445525f53544154555360801b6044820152606401610edb565b6136e4614dc9565b6136ed85612545565b6060820152606a54604080516221048360e21b815290516001600160a01b03909216916284120c91600480820192602092909190829003018186803b15801561373557600080fd5b505afa158015613749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376d9190615672565b815260608101515161377f878661424f565b146137be5760405162461bcd60e51b815260206004820152600f60248201526e0a0a48aacbea6a882a88abe9082a69608b1b6044820152606401610edb565b60006137da6137d536899003890160a08a01615778565b61428b565b905060006137f06137d5368a90038a018a615778565b9050806001600160401b0316826001600160401b031610156138465760405162461bcd60e51b815260206004820152600f60248201526e494e424f585f4241434b574152445360881b6044820152606401610edb565b806001600160401b0316826001600160401b031614156138ec57613877613872368a90038a018a615778565b6142a0565b6001600160401b0316613895613872368b90038b0160a08c01615778565b6001600160401b031610156138ec5760405162461bcd60e51b815260206004820152601a60248201527f494e424f585f504f535f494e5f4d53475f4241434b57415244530000000000006044820152606401610edb565b60026139006101408a016101208b01615572565b60038111156139115761391161554d565b148061393a5750600061392f613872368b90038b0160a08c01615778565b6001600160401b0316115b1561394d578161394981615794565b9250505b82516001600160401b03831611156139985760405162461bcd60e51b815260206004820152600e60248201526d12539093d617d41054d517d1539160921b6044820152606401610edb565b6001600160401b03821615613a4057606a546001600160a01b03166316bf55796139c36001856157bb565b6040516001600160e01b031960e084901b1681526001600160401b03909116600482015260240160206040518083038186803b158015613a0257600080fd5b505afa158015613a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3a9190615672565b60e08401525b50613a5a9050613a5536889003880188615822565b6142af565b6040820152606554613a75906001600160401b03164361568b565b6001600160401b0390811660c0830152606082015161012001511615801560a0830152613acb57606081015161012001516001600160401b03166000908152607660205260409020600501546080820152613adb565b6060810151610160015160808201525b613afa8160a00151826080015183604001518460e0015160685461434e565b915082821480613b08575082155b613b4b5760405162461bcd60e51b81526020600482015260146024820152730aa9c8ab0a08a86a88a88be9c9e888abe9082a6960631b6044820152606401610edb565b613b93613b5f8760a001836000015161424f565b613b708360400151436068546143bb565b613b87613b82368b90038b018b615822565b6143fa565b888560c0015187614123565b60208201526000613ba2612295565b613bad90600161568b565b90506000613bcf876001600160401b0316600090815260766020526040902090565b9050613bdb8183614424565b613be88360200151614495565b50508181606001516101600151613bfd612295565b6001600160401b03167f4f4caa9e67fb994e349dd35d1ad0ce23053d4323f83ce11dc817b5435031d09684604001518a8660e001516068548860000151604051613c4b95949392919061590c565b60405180910390a450949350505050565b60008135158015613c6f57506020820135155b8015613c915750613c86606083016040840161512b565b6001600160401b0316155b801561282b5750613ca8608083016060840161512b565b6001600160401b03161592915050565b6001600160a01b0382166000908152607960205260408120805480841115613d155760405162461bcd60e51b815260206004820152601060248201526f544f4f5f4c4954544c455f5354414b4560801b6044820152606401610edb565b6000613d21858361596c565b8584559050613d308682614683565b60408051838152602081018790526001600160a01b038816917febd093d389ab57f3566918d2c379a2b4d9539e8eb95efad9d5e465457833fde6910160405180910390a295945050505050565b6001600160a01b03808216600081815260796020908152604080832081518083019092529381526001808501546001600160401b03600160401b9091048116938301938452607a8054928301815590945290517ff0440771a29e57e18c66727944770b82cc77924aef333c927ce6bdd2cdb3ae0390910180549251909316600160a01b026001600160e01b031990921694169390931792909217909155611ce18261471f565b60335460ff1615613e695760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610edb565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612e353390565b6001600160a01b03828116600090815260796020526040808220928416825281206001830154919291600160801b90046001600160401b031680613f0e5760405162461bcd60e51b81526020600482015260076024820152661393d7d0d2105360ca1b6044820152606401610edb565b60018201546001600160401b03828116600160801b9092041614613f635760405162461bcd60e51b815260206004820152600c60248201526b1112519197d25397d0d2105360a21b6044820152606401610edb565b95945050505050565b6001600160a01b0381163b613fe35760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e74604482015276185d1a5bdb881a5cc81b9bdd08184818dbdb9d1c9858dd604a1b6064820152608401610edb565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d5b80546001600160a01b0319166001600160a01b039290921691909117905550565b614030836148e2565b60008251118061403d5750805b15611a005761404c8383614922565b50505050565b6001600160a01b0381166140b75760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610edb565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103614006565b60006140ed8360000151614947565b82846020015160405160200161410593929190615983565b60405160208183030381529060405280519060200120905092915050565b61412b614d40565b614133614d40565b96875250602086019490945260408501929092526001600160401b0390811660608501529081166080840181905260a0840152431661014083015261016082015290565b600054610100900460ff1661419e5760405162461bcd60e51b8152600401610edb906159c1565b6141a66149bb565b565b6040805160208101849052908101829052600090606001614105565b6001600160a01b0381163b6142315760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610edb565b80600080516020615ab0833981519152614006565b614030836149ee565b600061426861426336859003850185615778565b614947565b8261427960a0860160808701615572565b60405160200161410593929190615983565b6020810151600090815b602002015192915050565b60208101516000906001614295565b60006142b9614e1a565b825160200151819060038111156142d2576142d261554d565b908160038111156142e5576142e561554d565b9052506020838101518101519082019060038111156143065761430661554d565b908160038111156143195761431961554d565b905250614324614e38565b8351518152602080850151519082015260408401516143469083908390614a2e565b949350505050565b6000808661435d576000614360565b60015b6040516001600160f81b031960f883901b1660208201526021810188905260418101879052606181018690526081810185905290915060a1016040516020818303038152906040528051906020012091505095945050505050565b6040805160208101859052908101839052606081018290526000906080015b6040516020818303038152906040528051906020012090505b9392505050565b600061282b614410836020015160000151614ad8565b60208401515161441f90614ae3565b6141a8565b6004820154600160401b90046001600160401b03166144655760048201805467ffffffffffffffff60401b1916600160401b436001600160401b0316021790555b600490910180546001600160401b03909216600160801b0267ffffffffffffffff60801b19909216919091179055565b60758054600160801b90046001600160401b03169060106144b583615794565b825461010092830a6001600160401b03818102199092169282160291909117909255607554600160801b908190048316600090815260766020908152604091829020875181559087015160018201559086015160028201556060860151600382018054608089015160a08a015160c08b01519489166001600160801b031993841617600160401b928a168302176001600160801b03908116918a1688026001600160c01b0390811692909217600160c01b968b1687021790945560e08b0151600487018054998d01516101208e01516101408f0151938d169b9096169a909a17998b16909302989098179093169188169095029091161793909416909302919091179055610160830151600590910155507f00000000000000000000000000000000000000000000000000000000000000001561118e5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561462657600080fd5b505afa15801561463a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061465e9190615672565b607554600160801b90046001600160401b03166000908152607f602052604090205550565b6001600160a01b0382166000908152607b6020526040812054906146a78383615a0c565b6001600160a01b0385166000908152607b60205260408120829055607c805492935085929091906146d9908490615a0c565b909155505060408051838152602081018390526001600160a01b038616917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae291016134c0565b6001600160a01b03811660009081526079602052604090206001810154600160c01b900460ff1661477f5760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610edb565b600180820154607880546001600160401b039092169290916147a1919061596c565b815481106147b1576147b1615537565b600091825260209091200154607880546001600160a01b03909216916001600160401b0384169081106147e6576147e6615537565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080607960006078846001600160401b03168154811061483557614835615537565b6000918252602080832091909101546001600160a01b031683528201929092526040019020600101805467ffffffffffffffff19166001600160401b0392909216919091179055607880548061488d5761488d615a24565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03949094168152607990935250506040812090815560010180546001600160c81b0319169055565b6148eb81613f6c565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b60606143f38383604051806060016040528060278152602001615af060279139614aef565b8051805160209182015192820151805190830151604080516c23b637b130b61039ba30ba329d60991b81870152602d810194909452604d8401959095526001600160c01b031960c092831b8116606d850152911b1660758201528251808203605d018152607d909101909252815191012090565b600054610100900460ff166149e25760405162461bcd60e51b8152600401610edb906159c1565b6033805460ff19169055565b6149f7816141c4565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60408051600280825260608201835260009283929190602083019080368337019050508551909150614a7090614a6b8660005b6020020151614947565b614bcc565b81600081518110614a8357614a83615537565b6020908102919091010152614aa48560016020020151614a6b866001614a61565b81600181518110614ab757614ab7615537565b602002602001018181525050613f636000846001600160401b031683614cf0565b805160009081614295565b80516000906001614295565b60606001600160a01b0384163b614b575760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610edb565b600080856001600160a01b031685604051614b729190615656565b600060405180830381855af49150503d8060008114614bad576040519150601f19603f3d011682016040523d82523d6000602084013e614bb2565b606091505b5091509150614bc2828286614d07565b9695505050505050565b60006001836003811115614be257614be261554d565b1415614c28576040516b213637b1b59039ba30ba329d60a11b6020820152602c8101839052604c015b60405160208183030381529060405280519060200120905061282b565b6002836003811115614c3c57614c3c61554d565b1415614c725760405174213637b1b59039ba30ba32961032b93937b932b21d60591b602082015260358101839052605501614c0b565b6003836003811115614c8657614c8661554d565b1415614cb55760405174213637b1b59039ba30ba3296103a37b7903330b91d60591b6020820152603501614c0b565b60405162461bcd60e51b815260206004820152601060248201526f4241445f424c4f434b5f53544154555360801b6044820152606401610edb565b60008383836040516020016143da93929190615a3a565b60608315614d165750816143f3565b825115614d265782518084602001fd5b8160405162461bcd60e51b8152600401610edb9190615a7c565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915290565b6040518060400160405280614db7614e1a565b8152602001614dc4614e1a565b905290565b60405180610100016040528060008152602001614de4614d40565b815260006020820152604001614df8614d40565b8152600060208201819052604082018190526060820181905260809091015290565b60405180604001604052806002906020820280368337509192915050565b60405180604001604052806002905b614e4f614da4565b815260200190600190039081614e475790505090565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461118e57600080fd5b600060208284031215614ea057600080fd5b81356143f381614e79565b600060208284031215614ebd57600080fd5b5035919050565b600080828403610160811215614ed957600080fd5b83356001600160401b03811115614eef57600080fd5b84016101c08187031215614f0257600080fd5b9250610140601f1982011215614f1757600080fd5b506020830190509250929050565b80356001600160401b0381168114612c1f57600080fd5b600080600060608486031215614f5157600080fd5b614f5a84614f25565b95602085013595506040909401359392505050565b60006101608284031215614f8257600080fd5b50919050565b6000806000806101c08587031215614f9f57600080fd5b614fa885614f25565b935060208501359250614fbe8660408701614f6f565b939692955092936101a00135925050565b801515811461118e57600080fd5b60008060408385031215614ff057600080fd5b8235614ffb81614e79565b9150602083013561500b81614fcf565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561504e5761504e615016565b60405290565b604051601f8201601f191681016001600160401b038111828210171561507c5761507c615016565b604052919050565b6000806040838503121561509757600080fd5b82356150a281614e79565b91506020838101356001600160401b03808211156150bf57600080fd5b818601915086601f8301126150d357600080fd5b8135818111156150e5576150e5615016565b6150f7601f8201601f19168501615054565b9150808252878482850101111561510d57600080fd5b80848401858401376000848284010152508093505050509250929050565b60006020828403121561513d57600080fd5b6143f382614f25565b6000610160828403121561515957600080fd5b6143f38383614f6f565b60008083601f84011261517557600080fd5b5081356001600160401b0381111561518c57600080fd5b6020830191508360208260051b85010111156151a757600080fd5b9250929050565b600080602083850312156151c157600080fd5b82356001600160401b038111156151d757600080fd5b6151e385828601615163565b90969095509350505050565b6000806040838503121561520257600080fd5b823561520d81614e79565b9150602083013561500b81614e79565b600061018082019050825182526020830151602083015260408301516040830152606083015161525860608401826001600160401b03169052565b50608083015161527360808401826001600160401b03169052565b5060a083015161528e60a08401826001600160401b03169052565b5060c08301516152a960c08401826001600160401b03169052565b5060e08301516152c460e08401826001600160401b03169052565b50610100838101516001600160401b038116848301525050610120838101516001600160401b038116848301525050610140838101516001600160401b03811684830152505061016092830151919092015290565b60006020828403121561532b57600080fd5b81356143f381614fcf565b6000806000806040858703121561534c57600080fd5b84356001600160401b038082111561536357600080fd5b61536f88838901615163565b9096509450602087013591508082111561538857600080fd5b5061539587828801615163565b95989497509550505050565b600080604083850312156153b457600080fd5b61520d83614f25565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6000602082840312156153fd57600080fd5b81516143f381614fcf565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6001600160a01b039290921682521515602082015260400190565b6000808335601e198436030181126154d257600080fd5b8301803591506001600160401b038211156154ec57600080fd5b6020019150368190038213156151a757600080fd5b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b803560048110612c1f57600080fd5b60006020828403121561558457600080fd5b6143f382615563565b6020808252600b908201526a454d5054595f415252415960a81b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006000198214156155dc576155dc6155b2565b5060010190565b6020808252600c908201526b0aea49e9c8ebe988a9c8ea8960a31b604082015260600190565b6020808252600790820152664e4f5f4e4f444560c81b604082015260600190565b60005b8381101561564557818101518382015260200161562d565b8381111561404c5750506000910152565b6000825161566881846020870161562a565b9190910192915050565b60006020828403121561568457600080fd5b5051919050565b60006001600160401b038083168185168083038211156156ad576156ad6155b2565b01949350505050565b6000608082840312156156c857600080fd5b6156d061502c565b905082601f8301126156e157600080fd5b6156e961502c565b8060408401858111156156fb57600080fd5b845b818110156157155780358452602093840193016156fd565b5081845285605f86011261572857600080fd5b61573061502c565b9250829150608085018681111561574657600080fd5b8082101561576a5761575782614f25565b8452602084019350602082019150615746565b505060208301525092915050565b60006080828403121561578a57600080fd5b6143f383836156b6565b60006001600160401b03808316818114156157b1576157b16155b2565b6001019392505050565b60006001600160401b03838116908316818110156157db576157db6155b2565b039392505050565b600060a082840312156157f557600080fd5b6157fd61502c565b905061580983836156b6565b815261581760808301615563565b602082015292915050565b6000610160828403121561583557600080fd5b604051606081018181106001600160401b038211171561585757615857615016565b60405261586484846157e3565b81526158738460a085016157e3565b60208201526158856101408401614f25565b60408201529392505050565b604081833760006040838101828152908301915b60028110156158d4576001600160401b036158bf84614f25565b168252602092830192909101906001016158a5565b5050506158e360808201615563565b6004811061590157634e487b7160e01b600052602160045260246000fd5b806080840152505050565b8581526101e081016159216020830187615891565b61593160c0830160a08801615891565b6001600160401b036159466101408801614f25565b1661016083015284610180830152836101a0830152826101c08301529695505050505050565b60008282101561597e5761597e6155b2565b500390565b8381528260208201526000600483106159ac57634e487b7160e01b600052602160045260246000fd5b5060f89190911b604082015260410192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008219821115615a1f57615a1f6155b2565b500190565b634e487b7160e01b600052603160045260246000fd5b83815260006020848184015260408301845182860160005b82811015615a6e57815184529284019290840190600101615a52565b509198975050505050505050565b6020815260008251806020840152615a9b81604085016020870161562a565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122002cdec807b81ea3123ef953761f44c4c47f8b0a656c18a9227449c42242e234c64736f6c63430008090033",
1831
- "deployedBytecode": "0x6080604052600436106103b65760003560e01c80637b83a3fe116101f9578063bc45e0ae1161011e578063ee35f327116100b6578063f63a434a1161007a578063f63a434a14610e09578063facd743b14610e29578063fb0e722b14610e59578063fc8ffa0314610e79578063ff204f3b14610e9957600080fd5b8063ee35f32714610d53578063ef40a67014610d73578063f065de3f14610da9578063f33e1fac14610dc9578063f38c937914610de957600080fd5b8063bc45e0ae14610bc4578063ce11e6ab14610be4578063ce66d05c14610c04578063d01e660214610c24578063d735e21d14610c44578063dcd030aa14610c69578063dff6978714610c89578063e78cea9214610c9e578063e8bd492214610cbe57600080fd5b806392c8134c1161019157806392c8134c146109bf578063948d6588146109ec5780639846129a14610a0c5780639a8a059214610a1f578063a23c44b114610a35578063a2b4f1d814610b44578063a3ffb77214610b64578063aa38a6e714610b84578063aa65af4814610ba457600080fd5b80637b83a3fe146108ba5780637ba9534a146108da5780637c75c298146108ef5780638456cb591461090f578063848bf918146109245780638640ce5f1461094457806389384960146109695780638ee1a1261461098957806391c657e81461099f57600080fd5b806347fb24c5116102df5780636136fe2e116102775780636136fe2e146107685780636177fd181461078857806363721d6b146107cb57806365f7f80d146107e057806369fd251c146107fe5780636ddd37441461084757806371ef232c1461086757806376e7e23b1461087d578063771b2f971461089357600080fd5b806347fb24c5146106635780634f1ef286146106835780634f61f8501461069657806351ed6a30146106b657806352d1902d146106d657806353b60c4a146106eb57806355840a581461070b578063567ca41b146107305780635c975abb1461075057600080fd5b80631b1689e9116103525780631b1689e9146104f257806328ff127a146105165780632e7acfa6146105365780632f30cabd1461056e5780632f7968e8146105a45780633659cfe6146105c45780633e96576e146105e457806345e38b641461062d578063470dce4e1461064357600080fd5b8063014cc92c146103bb578063023a96fe146103f15780630397d45814610411578063046f7da21461043357806306ae5851146104485780630d40a0fd146104685780630d561b371461048857806312ab3d3b146104a857806313af4035146104d2575b600080fd5b3480156103c757600080fd5b50606f546103db906001600160a01b031681565b6040516103e89190614e65565b60405180910390f35b3480156103fd57600080fd5b50606e546103db906001600160a01b031681565b34801561041d57600080fd5b5061043161042c366004614e8e565b610eb9565b005b34801561043f57600080fd5b5061043161108b565b34801561045457600080fd5b50610431610463366004614eab565b6110af565b34801561047457600080fd5b50610431610483366004614e8e565b6110d1565b34801561049457600080fd5b506104316104a3366004614e8e565b611191565b3480156104b457600080fd5b50607e546104c29060ff1681565b60405190151581526020016103e8565b3480156104de57600080fd5b506104316104ed366004614e8e565b6111ce565b3480156104fe57600080fd5b50610508607d5481565b6040519081526020016103e8565b34801561052257600080fd5b50610431610531366004614ec4565b6111f4565b34801561054257600080fd5b50606554610556906001600160401b031681565b6040516001600160401b0390911681526020016103e8565b34801561057a57600080fd5b50610508610589366004614e8e565b6001600160a01b03166000908152607b602052604090205490565b3480156105b057600080fd5b506104316105bf366004614f3c565b611a05565b3480156105d057600080fd5b506104316105df366004614e8e565b611a51565b3480156105f057600080fd5b506105566105ff366004614e8e565b6001600160a01b0316600090815260796020526040902060010154600160401b90046001600160401b031690565b34801561063957600080fd5b5061050860735481565b34801561064f57600080fd5b5061043161065e366004614f88565b611b0e565b34801561066f57600080fd5b5061043161067e366004614fdd565b611bb2565b610431610691366004615084565b611c34565b3480156106a257600080fd5b506104316106b1366004614e8e565b611ce5565b3480156106c257600080fd5b506072546103db906001600160a01b031681565b3480156106e257600080fd5b50610508611d64565b3480156106f757600080fd5b50610431610706366004614e8e565b611e12565b34801561071757600080fd5b50607e546103db9061010090046001600160a01b031681565b34801561073c57600080fd5b5061043161074b366004614e8e565b611e4a565b34801561075c57600080fd5b5060335460ff166104c2565b34801561077457600080fd5b5061043161078336600461512b565b611f17565b34801561079457600080fd5b506104c26107a3366004614e8e565b6001600160a01b0316600090815260796020526040902060010154600160c01b900460ff1690565b3480156107d757600080fd5b50607a54610508565b3480156107ec57600080fd5b506075546001600160401b0316610556565b34801561080a57600080fd5b50610556610819366004614e8e565b6001600160a01b0316600090815260796020526040902060010154600160801b90046001600160401b031690565b34801561085357600080fd5b506103db61086236600461512b565b611f59565b34801561087357600080fd5b50610508607c5481565b34801561088957600080fd5b5061050860675481565b34801561089f57600080fd5b5060655461055690600160401b90046001600160401b031681565b3480156108c657600080fd5b506104316108d5366004615146565b611f92565b3480156108e657600080fd5b50610556612295565b3480156108fb57600080fd5b5061043161090a3660046151ae565b6122ab565b34801561091b57600080fd5b5061043161241f565b34801561093057600080fd5b5061043161093f3660046151ef565b612443565b34801561095057600080fd5b50607554600160c01b90046001600160401b0316610556565b34801561097557600080fd5b50610431610984366004614eab565b6124bf565b34801561099557600080fd5b5061050860685481565b3480156109ab57600080fd5b506104c26109ba366004614e8e565b6124e1565b3480156109cb57600080fd5b506109df6109da36600461512b565b612545565b6040516103e8919061521d565b3480156109f857600080fd5b50610431610a07366004614eab565b61260c565b610431610a1a366004615084565b61262e565b348015610a2b57600080fd5b5061050860665481565b348015610a4157600080fd5b50610aef610a50366004614e8e565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b0316600090815260796020908152604091829020825160a081018452815481526001909101546001600160401b0380821693830193909352600160401b8104831693820193909352600160801b83049091166060820152600160c01b90910460ff161515608082015290565b6040516103e89190600060a0820190508251825260208301516001600160401b038082166020850152806040860151166040850152806060860151166060850152505060808301511515608083015292915050565b348015610b5057600080fd5b50610431610b5f366004615319565b6126db565b348015610b7057600080fd5b50610431610b7f366004615336565b612706565b348015610b9057600080fd5b50606d546103db906001600160a01b031681565b348015610bb057600080fd5b506104c2610bbf3660046153a1565b6127fa565b348015610bd057600080fd5b506070546103db906001600160a01b031681565b348015610bf057600080fd5b50606b546103db906001600160a01b031681565b348015610c1057600080fd5b50610431610c1f36600461512b565b612831565b348015610c3057600080fd5b506103db610c3f366004614eab565b6128bc565b348015610c5057600080fd5b50607554600160401b90046001600160401b0316610556565b348015610c7557600080fd5b506104c2610c84366004614e8e565b6128d1565b348015610c9557600080fd5b50607854610556565b348015610caa57600080fd5b50606a546103db906001600160a01b031681565b348015610cca57600080fd5b50610d1b610cd9366004614e8e565b607960205260009081526040902080546001909101546001600160401b0380821691600160401b8104821691600160801b82041690600160c01b900460ff1685565b604080519586526001600160401b0394851660208701529284169285019290925290911660608301521515608082015260a0016103e8565b348015610d5f57600080fd5b50606c546103db906001600160a01b031681565b348015610d7f57600080fd5b50610508610d8e366004614e8e565b6001600160a01b031660009081526079602052604090205490565b348015610db557600080fd5b506071546103db906001600160a01b031681565b348015610dd557600080fd5b50610556610de4366004614eab565b612914565b348015610df557600080fd5b50610431610e04366004615336565b61294b565b348015610e1557600080fd5b50610508610e2436600461512b565b612b5b565b348015610e3557600080fd5b506104c2610e44366004614e8e565b60746020526000908152604090205460ff1681565b348015610e6557600080fd5b506069546103db906001600160a01b031681565b348015610e8557600080fd5b50610431610e94366004614e8e565b612c24565b348015610ea557600080fd5b50610431610eb4366004614e8e565b612cb6565b60335460ff16610ee45760405162461bcd60e51b8152600401610edb906153bd565b60405180910390fd5b6000806001600160a01b0316826001600160a01b0316141590506000306001600160a01b031663cd205fda6040518163ffffffff1660e01b815260040160206040518083038186803b158015610f3957600080fd5b505afa158015610f4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7191906153eb565b905081151581151514610fbe5760405162461bcd60e51b81526020600482015260156024820152741393d7d554d15497d313d1d250d7d4d5541413d495605a1b6044820152606401610edb565b6078546001600160401b03161561100b5760405162461bcd60e51b81526020600482015260116024820152704e4f5f4143544956455f5354414b45525360781b6044820152606401610edb565b607c54156110515760405162461bcd60e51b81526020600482015260136024820152724e4f5f50454e44494e475f574954484452415760681b6044820152606401610edb565b607280546001600160a01b0319166001600160a01b038516179055604051600d90600080516020615ad083398151915290600090a2505050565b611093612de6565b604051600490600080516020615ad083398151915290600090a2565b6067819055604051600c90600080516020615ad083398151915290600090a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561111a5760405162461bcd60e51b8152600401610edb90615408565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661114c612e4c565b6001600160a01b0316146111725760405162461bcd60e51b8152600401610edb90615454565b6040805160008082526020820190925261118e91839190612e6d565b50565b607e8054610100600160a81b0319166101006001600160a01b03841602179055604051601f90600080516020615ad083398151915290600090a250565b6111d78161300d565b604051600790600080516020615ad083398151915290600090a250565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016141561123d5760405162461bcd60e51b8152600401610edb90615408565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661126f612e4c565b6001600160a01b0316146112955760405162461bcd60e51b8152600401610edb90615454565b600054610100900460ff166112b05760005460ff16156112b4565b303b155b6113175760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610edb565b600054610100900460ff16158015611339576000805461ffff19166101011790555b43607d5561134a6020830183614e8e565b606a80546001600160a01b0319166001600160a01b039290921691909117905561137a6040830160208401614e8e565b606c80546001600160a01b0319166001600160a01b03929092169190911790556113a76020830183614e8e565b6001600160a01b03166347fb24c56113c56060850160408601614e8e565b60016040518363ffffffff1660e01b81526004016113e49291906154a0565b600060405180830381600087803b1580156113fe57600080fd5b505af1158015611412573d6000803e3d6000fd5b50611424925050506020830183614e8e565b6001600160a01b0316634f61f8506114426040850160208601614e8e565b6040518263ffffffff1660e01b815260040161145e9190614e65565b600060405180830381600087803b15801561147857600080fd5b505af115801561148c573d6000803e3d6000fd5b506114a1925050506060830160408401614e8e565b606980546001600160a01b0319166001600160a01b03929092169190911790556114d16080830160608401614e8e565b606b80546001600160a01b0319166001600160a01b03929092169190911790556114fe6020830183614e8e565b6001600160a01b031663cee3d72861151c6080850160608601614e8e565b60016040518363ffffffff1660e01b815260040161153b9291906154a0565b600060405180830381600087803b15801561155557600080fd5b505af1158015611569573d6000803e3d6000fd5b5061157e9250505060a0830160808401614e8e565b606d80546001600160a01b0319166001600160a01b03929092169190911790556115ab6020830183614e8e565b6001600160a01b03166347fb24c56115c960a0850160808601614e8e565b60016040518363ffffffff1660e01b81526004016115e89291906154a0565b600060405180830381600087803b15801561160257600080fd5b505af1158015611616573d6000803e3d6000fd5b5061162b9250505060a0830160808401614e8e565b6001600160a01b031663cf8d56d660e085013561164c6101008701876154bb565b6040518463ffffffff1660e01b815260040161166a93929190615501565b600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b506116ad925050506040830160208401614e8e565b60405163e0bc972960e01b815260006004820181905260c0602483015260c4820181905260016044830181905260648301829052608483019190915260a48201526001600160a01b03919091169063e0bc97299060e401600060405180830381600087803b15801561171e57600080fd5b505af1158015611732573d6000803e3d6000fd5b506117499250505061012083016101008401614e8e565b606f80546001600160a01b0319166001600160a01b039290921691909117905561177b61014083016101208401614e8e565b607080546001600160a01b0319166001600160a01b03929092169190911790556117ab60c0830160a08401614e8e565b606e80546001600160a01b0319166001600160a01b039290921691909117905560006117d5613061565b90506117e0816130b4565b6117ed602085018561512b565b6065805467ffffffffffffffff19166001600160401b039290921691909117905561181e604085016020860161512b565b606580546001600160401b0392909216600160401b0267ffffffffffffffff60401b1990921691909117905560e084013560665560608401356067556080840135606855604b60735561186f61334c565b6001600160a01b031661188860e0860160c08701614e8e565b6001600160a01b031614156118d65760405162461bcd60e51b815260206004820152601460248201527324a72b20a624a22fa2a9a1a927abafa0a226a4a760611b6044820152606401610edb565b6118e660c0850160a08601614e8e565b6001600160a01b03166118ff60e0860160c08701614e8e565b6001600160a01b0316141561194d5760405162461bcd60e51b815260206004820152601460248201527324a72b20a624a22fa2a9a1a927abafa7aba722a960611b6044820152606401610edb565b61195d60e0850160c08601614e8e565b607180546001600160a01b0319166001600160a01b039290921691909117905561198d6060850160408601614e8e565b607280546001600160a01b0319166001600160a01b0392909216919091179055604080516080860135815260e086013560208201527ffc1b83c11d99d08a938e0b82a0bd45f822f71ff5abf23f999c93c4533d752464910160405180910390a1508015611a00576000805461ff00191690555b505050565b60335460ff16611a275760405162461bcd60e51b8152600401610edb906153bd565b611a32838383613374565b604051601890600080516020615ad083398151915290600090a2505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611a9a5760405162461bcd60e51b8152600401610edb90615408565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611acc612e4c565b6001600160a01b031614611af25760405162461bcd60e51b8152600401610edb90615454565b6040805160008082526020820190925261118e918391906134ce565b60335460ff16611b305760405162461bcd60e51b8152600401610edb906153bd565b6075546001600160401b03858116911614611b855760405162461bcd60e51b815260206004820152601560248201527413d3931657d310551154d517d0d3d3919254935151605a1b6044820152606401610edb565b611b9182858584613648565b50604051601790600080516020615ad083398151915290600090a250505050565b606a546040516347fb24c560e01b81526001600160a01b03909116906347fb24c590611be490859085906004016154a0565b600060405180830381600087803b158015611bfe57600080fd5b505af1158015611c12573d6000803e3d6000fd5b505060405160029250600080516020615ad08339815191529150600090a25050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611c7d5760405162461bcd60e51b8152600401610edb90615408565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611caf612e4c565b6001600160a01b031614611cd55760405162461bcd60e51b8152600401610edb90615454565b611ce1828260016134ce565b5050565b606a546040516304f61f8560e41b81526001600160a01b0390911690634f61f85090611d15908490600401614e65565b600060405180830381600087803b158015611d2f57600080fd5b505af1158015611d43573d6000803e3d6000fd5b5050604051601b9250600080516020615ad08339815191529150600090a250565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611dff5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610edb565b50600080516020615ab083398151915290565b606980546001600160a01b0319166001600160a01b038316179055604051601c90600080516020615ad083398151915290600090a250565b606b546001600160a01b0382811691161415611e955760405162461bcd60e51b815260206004820152600a602482015269086aaa4be9eaaa8849eb60b31b6044820152606401610edb565b606a546040516319dc7ae560e31b81526001600160a01b039091169063cee3d72890611ec89084906000906004016154a0565b600060405180830381600087803b158015611ee257600080fd5b505af1158015611ef6573d6000803e3d6000fd5b505060405160019250600080516020615ad08339815191529150600090a250565b6065805467ffffffffffffffff60401b1916600160401b6001600160401b03841602179055604051600a90600080516020615ad083398151915290600090a250565b60006078826001600160401b031681548110611f7757611f77615537565b6000918252602090912001546001600160a01b031692915050565b60335460ff16611fb45760405162461bcd60e51b8152600401610edb906153bd565b60006001611fc0612295565b6001600160401b0316156120105760405162461bcd60e51b81526020600482015260176024820152761393d397d1d1539154d254d7d393d11154d7d1561254d5604a1b6044820152606401610edb565b61201983613c5c565b6120585760405162461bcd60e51b815260206004820152601060248201526f4e4f545f454d5054595f4245464f524560801b6044820152606401610edb565b600161206a60a0850160808601615572565b600381111561207b5761207b61554d565b146120c85760405162461bcd60e51b815260206004820152601b60248201527f4245464f52455f4d414348494e455f4e4f545f46494e495348454400000000006044820152606401610edb565b60c0830135821461210f5760405162461bcd60e51b81526020600482015260116024820152701393d517d6915493d7d4d153911493d3d5607a1b6044820152606401610edb565b6001600160401b03811661212a610100850160e0860161512b565b6001600160401b0316146121735760405162461bcd60e51b815260206004820152601060248201526f494e424f585f4e4f545f41545f4f4e4560801b6044820152606401610edb565b6121856101208401610100850161512b565b6001600160401b0316156121db5760405162461bcd60e51b815260206004820152601c60248201527f504f534954494f4e5f494e5f4d4553534147455f4e4f545f5a45524f000000006044820152606401610edb565b60016121ef61014085016101208601615572565b60038111156122005761220061554d565b1461224d5760405162461bcd60e51b815260206004820152601a60248201527f41465445525f4d414348494e455f4e4f545f46494e49534845440000000000006044820152606401610edb565b60a08301356122688460006001600160401b03851681613648565b5061227560018285613374565b604051601d90600080516020615ad083398151915290600090a250505050565b607554600160801b90046001600160401b031690565b60335460ff166122cd5760405162461bcd60e51b8152600401610edb906153bd565b806122ea5760405162461bcd60e51b8152600401610edb9061558d565b60005b8181101561240057600060798185858581811061230c5761230c615537565b90506020020160208101906123219190614e8e565b6001600160a01b03168152602081019190915260400160002060010154600160801b90046001600160401b03161461238d5760405162461bcd60e51b815260206004820152600f60248201526e14d51052d15497d25397d0d2105313608a1b6044820152606401610edb565b6123be8383838181106123a2576123a2615537565b90506020020160208101906123b79190614e8e565b6000613cb8565b506123ee8383838181106123d4576123d4615537565b90506020020160208101906123e99190614e8e565b613d7d565b806123f8816155c8565b9150506122ed565b50604051601690600080516020615ad083398151915290600090a25050565b612427613e23565b604051600390600080516020615ad083398151915290600090a2565b604051631b2ce7f360e11b81526001600160a01b03831690633659cfe69061246f908490600401614e65565b600060405180830381600087803b15801561248957600080fd5b505af115801561249d573d6000803e3d6000fd5b505060405160149250600080516020615ad08339815191529150600090a25050565b6068819055604051601a90600080516020615ad083398151915290600090a250565b6000805b607a5481101561253c57607a818154811061250257612502615537565b6000918252602090912001546001600160a01b038481169116141561252a5750600192915050565b80612534816155c8565b9150506124e5565b50600092915050565b61254d614d40565b6001600160401b03821660009081526076602052604090206040805161018081018252825481526001830154602082015260028301549181019190915260038201546001600160401b038082166060840152600160401b80830482166080850152600160801b808404831660a0860152600160c01b93849004831660c0860152600486015480841660e0870152918204831661010086015281048216610120850152919091041661014082015260059091015461016082015292915050565b6073819055604051600890600080516020615ad083398151915290600090a250565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156126775760405162461bcd60e51b8152600401610edb90615408565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126a9612e4c565b6001600160a01b0316146126cf5760405162461bcd60e51b8152600401610edb90615454565b611ce182826001612e6d565b607e805460ff1916821515179055604051601e90600080516020615ad083398151915290600090a250565b826127235760405162461bcd60e51b8152600401610edb9061558d565b8281146127425760405162461bcd60e51b8152600401610edb906155e3565b60005b838110156127d95782828281811061275f5761275f615537565b90506020020160208101906127749190615319565b6074600087878581811061278a5761278a615537565b905060200201602081019061279f9190614e8e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806127d1816155c8565b915050612745565b50604051600690600080516020615ad083398151915290600090a250505050565b6001600160401b03821660009081526077602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b6000816001600160401b0316116128835760405162461bcd60e51b81526020600482015260166024820152751253959053125117d0d3d39192549357d411549253d160521b6044820152606401610edb565b6065805467ffffffffffffffff19166001600160401b038316179055604051600990600080516020615ad083398151915290600090a250565b6000607a8281548110611f7757611f77615537565b6001600160a01b038116600090815260796020526040812060010154600160c01b900460ff16801561282b575060755461282b906001600160401b0316836127fa565b6000607a828154811061292957612929615537565b600091825260209091200154600160a01b90046001600160401b031692915050565b60335460ff1661296d5760405162461bcd60e51b8152600401610edb906153bd565b8261298a5760405162461bcd60e51b8152600401610edb9061558d565b8281146129a95760405162461bcd60e51b8152600401610edb906155e3565b60005b83811015612b3a576000612a0c8686848181106129cb576129cb615537565b90506020020160208101906129e09190614e8e565b8585858181106129f2576129f2615537565b9050602002016020810190612a079190614e8e565b613e9e565b90506001600160401b038116612a535760405162461bcd60e51b815260206004820152600c60248201526b1393d517d25397d0d210531360a21b6044820152606401610edb565b612aab868684818110612a6857612a68615537565b9050602002016020810190612a7d9190614e8e565b6001600160a01b03166000908152607960205260409020600101805467ffffffffffffffff60801b19169055565b612ac0848484818110612a6857612a68615537565b606e546040516356e9df9760e01b81526001600160401b03831660048201526001600160a01b03909116906356e9df9790602401600060405180830381600087803b158015612b0e57600080fd5b505af1158015612b22573d6000803e3d6000fd5b50505050508080612b32906155c8565b9150506129ac565b50604051601590600080516020615ad083398151915290600090a250505050565b60007f000000000000000000000000000000000000000000000000000000000000000015612bb9576001600160401b0382166000908152607f60205260409020548061282b5760405162461bcd60e51b8152600401610edb90615609565b6001600160401b03821660009081526076602052604081206003810154909150600160401b90046001600160401b0316612c055760405162461bcd60e51b8152600401610edb90615609565b60040154600160c01b90046001600160401b031692915050565b919050565b612c2c61334c565b6001600160a01b0316816001600160a01b03161415612c7e5760405162461bcd60e51b815260206004820152600e60248201526d494e56414c49445f455343524f5760901b6044820152606401610edb565b607180546001600160a01b0319166001600160a01b038316179055604051601990600080516020615ad083398151915290600090a250565b606b80546001600160a01b0319166001600160a01b0383811691909117909155606a546040516319dc7ae560e31b815291169063cee3d72890612d009084906001906004016154a0565b600060405180830381600087803b158015612d1a57600080fd5b505af1158015612d2e573d6000803e3d6000fd5b505060405160009250600080516020615ad083398151915291508290a250565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b179052905160009182918291606491612d8c9190615656565b600060405180830381855afa9150503d8060008114612dc7576040519150601f19603f3d011682016040523d82523d6000602084013e612dcc565b606091505b5091509150818015612ddf575080516020145b9250505090565b60335460ff16612e085760405162461bcd60e51b8152600401610edb906153bd565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051612e429190614e65565b60405180910390a1565b6000600080516020615ab08339815191525b546001600160a01b0316919050565b7f49bd798cd84788856140a4cd5030756b4d08a9e4d55db725ec195f232d262a895460ff1615612ea057611a0083613f6c565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ed957600080fd5b505afa925050508015612f09575060408051601f3d908101601f19168201909252612f0691810190615672565b60015b612f765760405162461bcd60e51b815260206004820152603860248201527f45524331393637557067726164653a206e6577207365636f6e6461727920696d604482015277706c656d656e746174696f6e206973206e6f74205555505360401b6064820152608401610edb565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d81146130015760405162461bcd60e51b815260206004820152603360248201527f45524331393637557067726164653a20756e737570706f72746564207365636f6044820152721b99185c9e481c1c9bde1a58589b1955555251606a1b6064820152608401610edb565b50611a00838383614027565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61303661334c565b604080516001600160a01b03928316815291841660208301520160405180910390a161118e81614052565b613069614d40565b613071614da4565b60006130a360405180604001604052808481526020016001600381111561309a5761309a61554d565b905260016140de565b9050612ddf81600080804381614123565b6130bc614177565b60008080526076602090815282517fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a181958558201517fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a1819595560408201517fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a18195a5560608201517fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a18195b8054608085015160a086015160c08701516001600160401b039586166001600160801b031994851617600160401b9387168402176001600160801b03908116600160801b93881684026001600160c01b0390811691909117600160c01b93891684021790965560e08901517fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a18195c80546101008c01516101208d01516101408e0151948c169290991691909117908a169096029590951790911694871690920290941692909217919093169091021790556101608201517fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a18195d5561326090600161568b565b607560086101000a8154816001600160401b0302191690836001600160401b031602179055507f00000000000000000000000000000000000000000000000000000000000000001561118e5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132e657600080fd5b505afa1580156132fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331e9190615672565b60008052607f6020527f18b3a2798575d3a428c1f52e616a74b071539854e037e7d7c535365d474f40335550565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103612e5e565b6001600160401b038316600090815260766020526040902061339683836141a8565b8160020154146133d75760405162461bcd60e51b815260206004820152600c60248201526b434f4e4649524d5f4441544160a01b6044820152606401610edb565b606b54604051630502677360e51b815260048101849052602481018590526001600160a01b039091169063a04cee6090604401600060405180830381600087803b15801561342457600080fd5b505af1158015613438573d6000803e3d6000fd5b50506075805467ffffffffffffffff19166001600160401b03881617905550613464905084600161568b565b6075805467ffffffffffffffff60401b1916600160401b6001600160401b03938416021790556040805185815260208101859052918616917f22ef0479a7ff660660d1c2fe35f1b632cf31675c2d9378db8cec95b00d8ffa3c91015b60405180910390a250505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561350157611a00836141c4565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561353a57600080fd5b505afa92505050801561356a575060408051601f3d908101601f1916820190925261356791810190615672565b60015b6135cd5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610edb565b600080516020615ab0833981519152811461363c5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610edb565b50611a00838383614246565b6000600161365e61014087016101208801615572565b600381111561366f5761366f61554d565b148061369d5750600261368a61014087016101208801615572565b600381111561369b5761369b61554d565b145b6136dc5760405162461bcd60e51b815260206004820152601060248201526f4241445f41465445525f53544154555360801b6044820152606401610edb565b6136e4614dc9565b6136ed85612545565b6060820152606a54604080516221048360e21b815290516001600160a01b03909216916284120c91600480820192602092909190829003018186803b15801561373557600080fd5b505afa158015613749573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376d9190615672565b815260608101515161377f878661424f565b146137be5760405162461bcd60e51b815260206004820152600f60248201526e0a0a48aacbea6a882a88abe9082a69608b1b6044820152606401610edb565b60006137da6137d536899003890160a08a01615778565b61428b565b905060006137f06137d5368a90038a018a615778565b9050806001600160401b0316826001600160401b031610156138465760405162461bcd60e51b815260206004820152600f60248201526e494e424f585f4241434b574152445360881b6044820152606401610edb565b806001600160401b0316826001600160401b031614156138ec57613877613872368a90038a018a615778565b6142a0565b6001600160401b0316613895613872368b90038b0160a08c01615778565b6001600160401b031610156138ec5760405162461bcd60e51b815260206004820152601a60248201527f494e424f585f504f535f494e5f4d53475f4241434b57415244530000000000006044820152606401610edb565b60026139006101408a016101208b01615572565b60038111156139115761391161554d565b148061393a5750600061392f613872368b90038b0160a08c01615778565b6001600160401b0316115b1561394d578161394981615794565b9250505b82516001600160401b03831611156139985760405162461bcd60e51b815260206004820152600e60248201526d12539093d617d41054d517d1539160921b6044820152606401610edb565b6001600160401b03821615613a4057606a546001600160a01b03166316bf55796139c36001856157bb565b6040516001600160e01b031960e084901b1681526001600160401b03909116600482015260240160206040518083038186803b158015613a0257600080fd5b505afa158015613a16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3a9190615672565b60e08401525b50613a5a9050613a5536889003880188615822565b6142af565b6040820152606554613a75906001600160401b03164361568b565b6001600160401b0390811660c0830152606082015161012001511615801560a0830152613acb57606081015161012001516001600160401b03166000908152607660205260409020600501546080820152613adb565b6060810151610160015160808201525b613afa8160a00151826080015183604001518460e0015160685461434e565b915082821480613b08575082155b613b4b5760405162461bcd60e51b81526020600482015260146024820152730aa9c8ab0a08a86a88a88be9c9e888abe9082a6960631b6044820152606401610edb565b613b93613b5f8760a001836000015161424f565b613b708360400151436068546143bb565b613b87613b82368b90038b018b615822565b6143fa565b888560c0015187614123565b60208201526000613ba2612295565b613bad90600161568b565b90506000613bcf876001600160401b0316600090815260766020526040902090565b9050613bdb8183614424565b613be88360200151614495565b50508181606001516101600151613bfd612295565b6001600160401b03167f4f4caa9e67fb994e349dd35d1ad0ce23053d4323f83ce11dc817b5435031d09684604001518a8660e001516068548860000151604051613c4b95949392919061590c565b60405180910390a450949350505050565b60008135158015613c6f57506020820135155b8015613c915750613c86606083016040840161512b565b6001600160401b0316155b801561282b5750613ca8608083016060840161512b565b6001600160401b03161592915050565b6001600160a01b0382166000908152607960205260408120805480841115613d155760405162461bcd60e51b815260206004820152601060248201526f544f4f5f4c4954544c455f5354414b4560801b6044820152606401610edb565b6000613d21858361596c565b8584559050613d308682614683565b60408051838152602081018790526001600160a01b038816917febd093d389ab57f3566918d2c379a2b4d9539e8eb95efad9d5e465457833fde6910160405180910390a295945050505050565b6001600160a01b03808216600081815260796020908152604080832081518083019092529381526001808501546001600160401b03600160401b9091048116938301938452607a8054928301815590945290517ff0440771a29e57e18c66727944770b82cc77924aef333c927ce6bdd2cdb3ae0390910180549251909316600160a01b026001600160e01b031990921694169390931792909217909155611ce18261471f565b60335460ff1615613e695760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610edb565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612e353390565b6001600160a01b03828116600090815260796020526040808220928416825281206001830154919291600160801b90046001600160401b031680613f0e5760405162461bcd60e51b81526020600482015260076024820152661393d7d0d2105360ca1b6044820152606401610edb565b60018201546001600160401b03828116600160801b9092041614613f635760405162461bcd60e51b815260206004820152600c60248201526b1112519197d25397d0d2105360a21b6044820152606401610edb565b95945050505050565b6001600160a01b0381163b613fe35760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e74604482015276185d1a5bdb881a5cc81b9bdd08184818dbdb9d1c9858dd604a1b6064820152608401610edb565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d5b80546001600160a01b0319166001600160a01b039290921691909117905550565b614030836148e2565b60008251118061403d5750805b15611a005761404c8383614922565b50505050565b6001600160a01b0381166140b75760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610edb565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103614006565b60006140ed8360000151614947565b82846020015160405160200161410593929190615983565b60405160208183030381529060405280519060200120905092915050565b61412b614d40565b614133614d40565b96875250602086019490945260408501929092526001600160401b0390811660608501529081166080840181905260a0840152431661014083015261016082015290565b600054610100900460ff1661419e5760405162461bcd60e51b8152600401610edb906159c1565b6141a66149bb565b565b6040805160208101849052908101829052600090606001614105565b6001600160a01b0381163b6142315760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610edb565b80600080516020615ab0833981519152614006565b614030836149ee565b600061426861426336859003850185615778565b614947565b8261427960a0860160808701615572565b60405160200161410593929190615983565b6020810151600090815b602002015192915050565b60208101516000906001614295565b60006142b9614e1a565b825160200151819060038111156142d2576142d261554d565b908160038111156142e5576142e561554d565b9052506020838101518101519082019060038111156143065761430661554d565b908160038111156143195761431961554d565b905250614324614e38565b8351518152602080850151519082015260408401516143469083908390614a2e565b949350505050565b6000808661435d576000614360565b60015b6040516001600160f81b031960f883901b1660208201526021810188905260418101879052606181018690526081810185905290915060a1016040516020818303038152906040528051906020012091505095945050505050565b6040805160208101859052908101839052606081018290526000906080015b6040516020818303038152906040528051906020012090505b9392505050565b600061282b614410836020015160000151614ad8565b60208401515161441f90614ae3565b6141a8565b6004820154600160401b90046001600160401b03166144655760048201805467ffffffffffffffff60401b1916600160401b436001600160401b0316021790555b600490910180546001600160401b03909216600160801b0267ffffffffffffffff60801b19909216919091179055565b60758054600160801b90046001600160401b03169060106144b583615794565b825461010092830a6001600160401b03818102199092169282160291909117909255607554600160801b908190048316600090815260766020908152604091829020875181559087015160018201559086015160028201556060860151600382018054608089015160a08a015160c08b01519489166001600160801b031993841617600160401b928a168302176001600160801b03908116918a1688026001600160c01b0390811692909217600160c01b968b1687021790945560e08b0151600487018054998d01516101208e01516101408f0151938d169b9096169a909a17998b16909302989098179093169188169095029091161793909416909302919091179055610160830151600590910155507f00000000000000000000000000000000000000000000000000000000000000001561118e5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561462657600080fd5b505afa15801561463a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061465e9190615672565b607554600160801b90046001600160401b03166000908152607f602052604090205550565b6001600160a01b0382166000908152607b6020526040812054906146a78383615a0c565b6001600160a01b0385166000908152607b60205260408120829055607c805492935085929091906146d9908490615a0c565b909155505060408051838152602081018390526001600160a01b038616917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae291016134c0565b6001600160a01b03811660009081526079602052604090206001810154600160c01b900460ff1661477f5760405162461bcd60e51b815260206004820152600a6024820152691393d517d4d51052d15160b21b6044820152606401610edb565b600180820154607880546001600160401b039092169290916147a1919061596c565b815481106147b1576147b1615537565b600091825260209091200154607880546001600160a01b03909216916001600160401b0384169081106147e6576147e6615537565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080607960006078846001600160401b03168154811061483557614835615537565b6000918252602080832091909101546001600160a01b031683528201929092526040019020600101805467ffffffffffffffff19166001600160401b0392909216919091179055607880548061488d5761488d615a24565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03949094168152607990935250506040812090815560010180546001600160c81b0319169055565b6148eb81613f6c565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b60606143f38383604051806060016040528060278152602001615af060279139614aef565b8051805160209182015192820151805190830151604080516c23b637b130b61039ba30ba329d60991b81870152602d810194909452604d8401959095526001600160c01b031960c092831b8116606d850152911b1660758201528251808203605d018152607d909101909252815191012090565b600054610100900460ff166149e25760405162461bcd60e51b8152600401610edb906159c1565b6033805460ff19169055565b6149f7816141c4565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60408051600280825260608201835260009283929190602083019080368337019050508551909150614a7090614a6b8660005b6020020151614947565b614bcc565b81600081518110614a8357614a83615537565b6020908102919091010152614aa48560016020020151614a6b866001614a61565b81600181518110614ab757614ab7615537565b602002602001018181525050613f636000846001600160401b031683614cf0565b805160009081614295565b80516000906001614295565b60606001600160a01b0384163b614b575760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610edb565b600080856001600160a01b031685604051614b729190615656565b600060405180830381855af49150503d8060008114614bad576040519150601f19603f3d011682016040523d82523d6000602084013e614bb2565b606091505b5091509150614bc2828286614d07565b9695505050505050565b60006001836003811115614be257614be261554d565b1415614c28576040516b213637b1b59039ba30ba329d60a11b6020820152602c8101839052604c015b60405160208183030381529060405280519060200120905061282b565b6002836003811115614c3c57614c3c61554d565b1415614c725760405174213637b1b59039ba30ba32961032b93937b932b21d60591b602082015260358101839052605501614c0b565b6003836003811115614c8657614c8661554d565b1415614cb55760405174213637b1b59039ba30ba3296103a37b7903330b91d60591b6020820152603501614c0b565b60405162461bcd60e51b815260206004820152601060248201526f4241445f424c4f434b5f53544154555360801b6044820152606401610edb565b60008383836040516020016143da93929190615a3a565b60608315614d165750816143f3565b825115614d265782518084602001fd5b8160405162461bcd60e51b8152600401610edb9190615a7c565b6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915290565b6040518060400160405280614db7614e1a565b8152602001614dc4614e1a565b905290565b60405180610100016040528060008152602001614de4614d40565b815260006020820152604001614df8614d40565b8152600060208201819052604082018190526060820181905260809091015290565b60405180604001604052806002906020820280368337509192915050565b60405180604001604052806002905b614e4f614da4565b815260200190600190039081614e475790505090565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461118e57600080fd5b600060208284031215614ea057600080fd5b81356143f381614e79565b600060208284031215614ebd57600080fd5b5035919050565b600080828403610160811215614ed957600080fd5b83356001600160401b03811115614eef57600080fd5b84016101c08187031215614f0257600080fd5b9250610140601f1982011215614f1757600080fd5b506020830190509250929050565b80356001600160401b0381168114612c1f57600080fd5b600080600060608486031215614f5157600080fd5b614f5a84614f25565b95602085013595506040909401359392505050565b60006101608284031215614f8257600080fd5b50919050565b6000806000806101c08587031215614f9f57600080fd5b614fa885614f25565b935060208501359250614fbe8660408701614f6f565b939692955092936101a00135925050565b801515811461118e57600080fd5b60008060408385031215614ff057600080fd5b8235614ffb81614e79565b9150602083013561500b81614fcf565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561504e5761504e615016565b60405290565b604051601f8201601f191681016001600160401b038111828210171561507c5761507c615016565b604052919050565b6000806040838503121561509757600080fd5b82356150a281614e79565b91506020838101356001600160401b03808211156150bf57600080fd5b818601915086601f8301126150d357600080fd5b8135818111156150e5576150e5615016565b6150f7601f8201601f19168501615054565b9150808252878482850101111561510d57600080fd5b80848401858401376000848284010152508093505050509250929050565b60006020828403121561513d57600080fd5b6143f382614f25565b6000610160828403121561515957600080fd5b6143f38383614f6f565b60008083601f84011261517557600080fd5b5081356001600160401b0381111561518c57600080fd5b6020830191508360208260051b85010111156151a757600080fd5b9250929050565b600080602083850312156151c157600080fd5b82356001600160401b038111156151d757600080fd5b6151e385828601615163565b90969095509350505050565b6000806040838503121561520257600080fd5b823561520d81614e79565b9150602083013561500b81614e79565b600061018082019050825182526020830151602083015260408301516040830152606083015161525860608401826001600160401b03169052565b50608083015161527360808401826001600160401b03169052565b5060a083015161528e60a08401826001600160401b03169052565b5060c08301516152a960c08401826001600160401b03169052565b5060e08301516152c460e08401826001600160401b03169052565b50610100838101516001600160401b038116848301525050610120838101516001600160401b038116848301525050610140838101516001600160401b03811684830152505061016092830151919092015290565b60006020828403121561532b57600080fd5b81356143f381614fcf565b6000806000806040858703121561534c57600080fd5b84356001600160401b038082111561536357600080fd5b61536f88838901615163565b9096509450602087013591508082111561538857600080fd5b5061539587828801615163565b95989497509550505050565b600080604083850312156153b457600080fd5b61520d83614f25565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6000602082840312156153fd57600080fd5b81516143f381614fcf565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6001600160a01b039290921682521515602082015260400190565b6000808335601e198436030181126154d257600080fd5b8301803591506001600160401b038211156154ec57600080fd5b6020019150368190038213156151a757600080fd5b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b803560048110612c1f57600080fd5b60006020828403121561558457600080fd5b6143f382615563565b6020808252600b908201526a454d5054595f415252415960a81b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60006000198214156155dc576155dc6155b2565b5060010190565b6020808252600c908201526b0aea49e9c8ebe988a9c8ea8960a31b604082015260600190565b6020808252600790820152664e4f5f4e4f444560c81b604082015260600190565b60005b8381101561564557818101518382015260200161562d565b8381111561404c5750506000910152565b6000825161566881846020870161562a565b9190910192915050565b60006020828403121561568457600080fd5b5051919050565b60006001600160401b038083168185168083038211156156ad576156ad6155b2565b01949350505050565b6000608082840312156156c857600080fd5b6156d061502c565b905082601f8301126156e157600080fd5b6156e961502c565b8060408401858111156156fb57600080fd5b845b818110156157155780358452602093840193016156fd565b5081845285605f86011261572857600080fd5b61573061502c565b9250829150608085018681111561574657600080fd5b8082101561576a5761575782614f25565b8452602084019350602082019150615746565b505060208301525092915050565b60006080828403121561578a57600080fd5b6143f383836156b6565b60006001600160401b03808316818114156157b1576157b16155b2565b6001019392505050565b60006001600160401b03838116908316818110156157db576157db6155b2565b039392505050565b600060a082840312156157f557600080fd5b6157fd61502c565b905061580983836156b6565b815261581760808301615563565b602082015292915050565b6000610160828403121561583557600080fd5b604051606081018181106001600160401b038211171561585757615857615016565b60405261586484846157e3565b81526158738460a085016157e3565b60208201526158856101408401614f25565b60408201529392505050565b604081833760006040838101828152908301915b60028110156158d4576001600160401b036158bf84614f25565b168252602092830192909101906001016158a5565b5050506158e360808201615563565b6004811061590157634e487b7160e01b600052602160045260246000fd5b806080840152505050565b8581526101e081016159216020830187615891565b61593160c0830160a08801615891565b6001600160401b036159466101408801614f25565b1661016083015284610180830152836101a0830152826101c08301529695505050505050565b60008282101561597e5761597e6155b2565b500390565b8381528260208201526000600483106159ac57634e487b7160e01b600052602160045260246000fd5b5060f89190911b604082015260410192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008219821115615a1f57615a1f6155b2565b500190565b634e487b7160e01b600052603160045260246000fd5b83815260006020848184015260408301845182860160005b82811015615a6e57815184529284019290840190600101615a52565b509198975050505050505050565b6020815260008251806020840152615a9b81604085016020870161562a565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcea8787f128d10b2cc0317b0c3960f9ad447f7f6c1ed189db1083ccffd20f456e416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122002cdec807b81ea3123ef953761f44c4c47f8b0a656c18a9227449c42242e234c64736f6c63430008090033",
2201
+ "bytecode": "0x60c0604052620000196200003660201b6200305f1760201c565b15156080523060a0523480156200002f57600080fd5b5062000104565b60408051600481526024810182526020810180516001600160e01b03166302881c7960e11b179052905160009182918291606491620000769190620000d3565b600060405180830381855afa9150503d8060008114620000b3576040519150601f19603f3d011682016040523d82523d6000602084013e620000b8565b606091505b5091509150818015620000cc575080516020145b9250505090565b6000825160005b81811015620000f65760208186018101518583015201620000da565b506000920191825250919050565b60805160a051615e776200017e60003960008181610f970152818161101c015281816113120152818161139701528181611521015281816115a60152818161170c01528181611bee01528181611c7301528181611d690152611dee01526000818161116c01528181612943015261445b0152615e776000f3fe60806040526004361061044a5760003560e01c806376e7e23b11610243578063b7ab4db511610143578063e8bd4922116100bb578063f112cea31161008a578063fb0e722b1161006f578063fb0e722b14610e77578063fc8ffa0314610e97578063ff204f3b14610eb757600080fd5b8063f112cea314610e37578063facd743b14610e5757600080fd5b8063e8bd492214610d23578063ee35f32714610dcc578063ef40a67014610de1578063f065de3f14610e1757600080fd5b8063dff6978711610112578063e531d8c7116100f7578063e531d8c714610cbb578063e6b3082c14610cdb578063e78cea9214610d0357600080fd5b8063dff6978714610c86578063e51019a614610c9b57600080fd5b8063b7ab4db514610c04578063bc45e0ae14610c26578063ce11e6ab14610c46578063ce66d05c14610c6657600080fd5b80639846129a116101d6578063a23c44b1116101a5578063a3ffb7721161018a578063a3ffb77214610ba4578063aa38a6e714610bc4578063b7626e7314610be457600080fd5b8063a23c44b114610a71578063a2b4f1d814610b8457600080fd5b80639846129a14610a085780639a7b455614610a1b5780639a8a059214610a3b5780639e7e6aa714610a5157600080fd5b80638830288411610212578063883028841461098557806389384960146109b25780638ee1a126146109d2578063948d6588146109e857600080fd5b806376e7e23b146108f15780637c75c298146109075780638456cb591461092757806384728cd01461093c57600080fd5b80633be680ea1161034e57806355840a58116102e15780635c975abb116102b057806365f7f80d1161029557806365f7f80d146108a65780636ddd3744146108bb57806371ef232c146108db57600080fd5b80635c975abb1461084b5780636177fd181461086357600080fd5b806355840a58146107c6578063567ca41b146107eb57806356bbc9e61461080b5780635bf038331461082b57600080fd5b80634f61f8501161031d5780634f61f8501461075157806351ed6a301461077157806352d1902d1461079157806353b60c4a146107a657600080fd5b80633be680ea146106cf57806345e38b641461070857806347fb24c51461071e5780634f1ef2861461073e57600080fd5b806313af4035116103e15780632e7acfa6116103b05780633083622811610395578063308362281461067a578063353325e01461069a5780633659cfe6146106af57600080fd5b80632e7acfa6146106235780632f30cabd1461064457600080fd5b806313af40351461058657806313c56ca7146105a65780631b1689e9146105d45780632abdd230146105ea57600080fd5b80630d40a0fd1161041d5780630d40a0fd146104e35780630d561b3714610503578063117155851461052357806312ab3d3b1461055c57600080fd5b8063023a96fe1461044f578063046f7da21461048c57806304972af9146104a357806306ae5851146104c3575b600080fd5b34801561045b57600080fd5b5060695461046f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561049857600080fd5b506104a1610ed7565b005b3480156104af57600080fd5b506104a16104be366004615203565b610ee1565b3480156104cf57600080fd5b506104a16104de36600461523b565b610efb565b3480156104ef57600080fd5b506104a16104fe366004615269565b610f8d565b34801561050f57600080fd5b506104a161051e366004615269565b6110d6565b34801561052f57600080fd5b5061054361053e36600461523b565b611143565b60405167ffffffffffffffff9091168152602001610483565b34801561056857600080fd5b50607b546105769060ff1681565b6040519015158152602001610483565b34801561059257600080fd5b506104a16105a1366004615269565b61115f565b3480156105b257600080fd5b506105c66105c136600461523b565b611168565b604051908152602001610483565b3480156105e057600080fd5b506105c6607a5481565b3480156105f657600080fd5b506105c6610605366004615269565b6001600160a01b031660009081526077602052604090206001015490565b34801561062f57600080fd5b506066546105439067ffffffffffffffff1681565b34801561065057600080fd5b506105c661065f366004615269565b6001600160a01b031660009081526078602052604090205490565b34801561068657600080fd5b5061057661069536600461523b565b6112b0565b3480156106a657600080fd5b506105c66112cc565b3480156106bb57600080fd5b506104a16106ca366004615269565b611308565b3480156106db57600080fd5b506069546105439074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b34801561071457600080fd5b506105c660715481565b34801561072a57600080fd5b506104a1610739366004615294565b61144e565b6104a161074c36600461533d565b611517565b34801561075d57600080fd5b506104a161076c366004615269565b61164d565b34801561077d57600080fd5b5060705461046f906001600160a01b031681565b34801561079d57600080fd5b506105c66116ff565b3480156107b257600080fd5b506104a16107c1366004615269565b6117c4565b3480156107d257600080fd5b50607b5461046f9061010090046001600160a01b031681565b3480156107f757600080fd5b506104a1610806366004615269565b611812565b34801561081757600080fd5b5061054361082636600461523b565b611929565b34801561083757600080fd5b506104a16108463660046153fd565b61194c565b34801561085757600080fd5b5060335460ff16610576565b34801561086f57600080fd5b5061057661087e366004615269565b6001600160a01b0316600090815260776020526040902060020154600160401b900460ff1690565b3480156108b257600080fd5b506074546105c6565b3480156108c757600080fd5b5061046f6108d6366004615455565b611991565b3480156108e757600080fd5b506105c660795481565b3480156108fd57600080fd5b506105c660675481565b34801561091357600080fd5b506104a16109223660046154bc565b6119cb565b34801561093357600080fd5b506104a1611ad0565b34801561094857600080fd5b5061046f610957366004615269565b6001600160a01b03908116600090815260776020526040902060020154690100000000000000000090041690565b34801561099157600080fd5b506109a56109a036600461523b565b611ad8565b6040516104839190615532565b3480156109be57600080fd5b506104a16109cd36600461523b565b611b7a565b3480156109de57600080fd5b506105c660685481565b3480156109f457600080fd5b506104a1610a0336600461523b565b611baf565b6104a1610a1636600461533d565b611be4565b348015610a2757600080fd5b506104a1610a36366004615593565b611d1a565b348015610a4757600080fd5b506105c660655481565b348015610a5d57600080fd5b506104a1610a6c3660046155d7565b611d5f565b348015610a7d57600080fd5b50610b2d610a8c366004615269565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b03908116600090815260776020908152604091829020825160a081018452815481526001820154928101929092526002015467ffffffffffffffff81169282019290925260ff600160401b830416151560608201526901000000000000000000909104909116608082015290565b6040516104839190600060a082019050825182526020830151602083015267ffffffffffffffff60408401511660408301526060830151151560608301526001600160a01b03608084015116608083015292915050565b348015610b9057600080fd5b506104a1610b9f36600461562b565b612a6b565b348015610bb057600080fd5b506104a1610bbf366004615648565b612aac565b348015610bd057600080fd5b50606d5461046f906001600160a01b031681565b348015610bf057600080fd5b506104a1610bff366004615269565b612c41565b348015610c1057600080fd5b50610c19612c8f565b60405161048391906156b4565b348015610c3257600080fd5b50606e5461046f906001600160a01b031681565b348015610c5257600080fd5b50606c5461046f906001600160a01b031681565b348015610c7257600080fd5b506104a1610c81366004615455565b612ca0565b348015610c9257600080fd5b50607654610543565b348015610ca757600080fd5b506104a1610cb6366004615701565b612d4a565b348015610cc757600080fd5b50610576610cd636600461523b565b612db7565b348015610ce757600080fd5b5060665461054390600160401b900467ffffffffffffffff1681565b348015610d0f57600080fd5b50606b5461046f906001600160a01b031681565b348015610d2f57600080fd5b50610d8c610d3e366004615269565b60776020526000908152604090208054600182015460029092015490919067ffffffffffffffff811690600160401b810460ff1690690100000000000000000090046001600160a01b031685565b60408051958652602086019490945267ffffffffffffffff9092169284019290925290151560608301526001600160a01b0316608082015260a001610483565b348015610dd857600080fd5b5061046f612de7565b348015610ded57600080fd5b506105c6610dfc366004615269565b6001600160a01b031660009081526077602052604090205490565b348015610e2357600080fd5b50606f5461046f906001600160a01b031681565b348015610e4357600080fd5b506104a1610e52366004615455565b612e6e565b348015610e6357600080fd5b50610576610e72366004615269565b612ede565b348015610e8357600080fd5b50606a5461046f906001600160a01b031681565b348015610ea357600080fd5b506104a1610eb2366004615269565b612eeb565b348015610ec357600080fd5b506104a1610ed2366004615269565b612f8f565b610edf613125565b565b610ef781610eee84613177565b600101546131d8565b5050565b6067548111610f515760405162461bcd60e51b815260206004820152601c60248201527f424153455f5354414b455f4d5553545f42455f494e435245415345440000000060448201526064015b60405180910390fd5b60678190556040518181527f54404e5f5326112dad416747228f2fcd704e702c56bf0673ce7e531108e07c1b906020015b60405180910390a150565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361101a5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661104c6132dd565b6001600160a01b0316146110b75760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b604080516000808252602082019092526110d391839190613310565b50565b607b80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038416908102919091179091556040519081527fd3ab4cbe1b6f519eb43f09ded17a12e81b811e297063ada2d65dddef5b612c7c90602001610f82565b600061114e82613177565b5467ffffffffffffffff1692915050565b6110d3816134b0565b60007f0000000000000000000000000000000000000000000000000000000000000000156111f2576000828152607c6020526040902054806111ec5760405162461bcd60e51b815260206004820152600c60248201527f4e4f5f415353455254494f4e00000000000000000000000000000000000000006044820152606401610f48565b92915050565b60006111fd83613177565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b830481161515606083015292935061129392909184916080840191600160c81b900416600281111561126f5761126f6154fe565b6002811115611280576112806154fe565b8152602001600182015481525050613504565b54600160801b900467ffffffffffffffff1692915050565b919050565b60006112bb82613177565b54600160c01b900460ff1692915050565b60006112d6615100565b6040805160608101825282815260016020820152600091810182905290806112ff818481613569565b94505050505090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036113955760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113c76132dd565b6001600160a01b0316146114325760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b604080516000808252602082019092526110d391839190613582565b606b546040517f47fb24c50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152909116906347fb24c590604401600060405180830381600087803b1580156114b657600080fd5b505af11580156114ca573d6000803e3d6000fd5b5050604080516001600160a01b038616815284151560208201527fce7e7eac3fe4e3d77ad155523b4ddb4446965e38cbc7c8a484bb82dc817637ef93500190505b60405180910390a15050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115a45760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115d66132dd565b6001600160a01b0316146116415760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b610ef782826001613582565b606b546040517f4f61f8500000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015290911690634f61f85090602401600060405180830381600087803b1580156116ad57600080fd5b505af11580156116c1573d6000803e3d6000fd5b50506040516001600160a01b03841681527f82740fc8dc15b355f3eb60cd600d43cd104e6906458cccd4cb51bcd1384c0c3492506020019050610f82565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461179f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610f48565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f9cf43f86b7edba7593cadbd304522caa8a94db8ec03e204762b19c6955f2c34590602001610f82565b606c546001600160a01b03908116908216036118705760405162461bcd60e51b815260206004820152600a60248201527f4355525f4f5554424f58000000000000000000000000000000000000000000006044820152606401610f48565b606b546040517fcee3d7280000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600060248301529091169063cee3d72890604401600060405180830381600087803b1580156118d757600080fd5b505af11580156118eb573d6000803e3d6000fd5b50506040516001600160a01b03841681527ffe29ae11ccc2c860bf49dbf67ca96fa1db99cb935b0a7c02e3fad38ea80d6c2592506020019050610f82565b600061193482613177565b54600160401b900467ffffffffffffffff1692915050565b611954613722565b61196084848484613774565b60405184907f0ef6ac64bd6b0fa95ed37aa19a1b16613fb89e2269c92639a9d516a64fea493890600090a250505050565b600060768267ffffffffffffffff16815481106119b0576119b061573f565b6000918252602090912001546001600160a01b031692915050565b6119d3613722565b80611a205760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f41525241590000000000000000000000000000000000000000006044820152606401610f48565b60005b81811015611a9e57611a5a838383818110611a4057611a4061573f565b9050602002016020810190611a559190615269565b613991565b611a8b838383818110611a6f57611a6f61573f565b9050602002016020810190611a849190615269565b6000613a95565b5080611a968161576b565b915050611a23565b507f53e7f63f13f0c1bf266cf49783f9c98757c2adbe729a1358bc92635b2b4d7352828260405161150b9291906157ce565b610edf613b96565b611ae0615125565b611ae982613177565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b909104166002811115611b5457611b546154fe565b6002811115611b6557611b656154fe565b81526020016001820154815250509050919050565b60688190556040518181527f7c4db9e8738aa15b72d17ae77a824047a59f8657e14b5a5a75cb6d08213a1db790602001610f82565b60718190556040518181527f238dc443e1da4236615831e66e5dd5ed97848f0eec72bcb57efa87438fca687390602001610f82565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611c715760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ca36132dd565b6001600160a01b031614611d0e5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b610ef782826001613310565b611d22613722565b611d2d828483613bd3565b505060405181907fe5256bb4fdac498ff91fac1e162648b613c54eae8e784a5e73ca9ffcb0a08a6e90600090a2505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611dec5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611e1e6132dd565b6001600160a01b031614611e895760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b600054610100900460ff1615808015611ea95750600054600160ff909116105b80611ec35750303b158015611ec3575060005460ff166001145b611f355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610f48565b6000805460ff191660011790558015611f58576000805461ff0019166101001790555b43607a55611f696020830183615269565b606b80546001600160a01b0319166001600160a01b0392909216919091179055611f966020830183615269565b6001600160a01b03166347fb24c5611fb46060850160408601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b15801561201457600080fd5b505af1158015612028573d6000803e3d6000fd5b5061203a925050506020830183615269565b6001600160a01b0316634f61f8506120586040850160208601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156120b157600080fd5b505af11580156120c5573d6000803e3d6000fd5b506120da925050506060830160408401615269565b606a80546001600160a01b0319166001600160a01b039290921691909117905561210a6080830160608401615269565b606c80546001600160a01b0319166001600160a01b03929092169190911790556121376020830183615269565b6001600160a01b031663cee3d7286121556080850160608601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b1580156121b557600080fd5b505af11580156121c9573d6000803e3d6000fd5b506121de9250505060a0830160808401615269565b606d80546001600160a01b0319166001600160a01b03928316179055606b541663ae60bd1361221360a0850160808601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561226f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229391906157e2565b6123bc576122a46020830183615269565b6001600160a01b03166347fb24c56122c260a0850160808601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b15801561232257600080fd5b505af1158015612336573d6000803e3d6000fd5b5061234b9250505060a0830160808401615269565b6001600160a01b031663cf8d56d660c085013561236b60e08701876157ff565b6040518463ffffffff1660e01b815260040161238993929190615864565b600060405180830381600087803b1580156123a357600080fd5b505af11580156123b7573d6000803e3d6000fd5b505050505b6123cc6040830160208401615269565b6001600160a01b0316637fa3a40e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242d919061589a565b6000036124e7576124446040830160208401615269565b6040517fe0bc972900000000000000000000000000000000000000000000000000000000815260006004820181905260c0602483015260c4820181905260016044830181905260648301829052608483019190915260a48201526001600160a01b03919091169063e0bc97299060e401600060405180830381600087803b1580156124ce57600080fd5b505af11580156124e2573d6000803e3d6000fd5b505050505b6124f961012083016101008401615269565b606e80546001600160a01b0319166001600160a01b039290921691909117905561252960c0830160a08401615269565b606980546001600160a01b0319166001600160a01b03929092169190911790556125566020840184615455565b6066805460c086013560655560408601356067556060860135606855604b60715567ffffffffffffffff929092166fffffffffffffffffffffffffffffffff19909216919091176a03138000000000000000001790556125be61034084016103208501615455565b6069805467ffffffffffffffff9290921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055600061262260c0850160a08601615269565b6001600160a01b0316036126785760405162461bcd60e51b815260206004820152601060248201527f494e56414c49445f455343524f575f30000000000000000000000000000000006044820152606401610f48565b61268860c0840160a08501615269565b606f80546001600160a01b0319166001600160a01b03929092169190911790556126b86040840160208501615269565b607080546001600160a01b0319166001600160a01b03929092169190911790556126ea61030084016102e08501615269565b607b80546001600160a01b0392909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055600080806127808161274b612746368a90038a016102008b016159d4565b6144fe565b604080516020808201949094528082019290925260608083018790528151808403909101815260809092019052805191012090565b90506000606b60009054906101000a90046001600160a01b03166001600160a01b03166284120c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fa919061589a565b9050866102c00135810361281657612813600182615a3b565b90505b60685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16928401929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b811660748501529085901b16607c830152805160648184030181526084909201905280519101206000906128ad9060019061452e565b90506128b98184614566565b6128c161515c565b6128d4368a90038a016102008b016159d4565b60408083019190915260685460675460695460665493518a9489947f901c3aee23cf4478825462caaab375c606ab83516060388344f0650340753630946129399489948e948d9493926001600160a01b03169167ffffffffffffffff90911690615adc565b60405180910390a37f0000000000000000000000000000000000000000000000000000000000000000156129da5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ca919061589a565b6000858152607c60205260409020555b6040805160608b0135815260c08b013560208201527ffc1b83c11d99d08a938e0b82a0bd45f822f71ff5abf23f999c93c4533d752464910160405180910390a15050505050508015612a66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b607b805460ff19168215159081179091556040519081527f016436ae56a1958a8efa3965e4839a8a90009e0a225fd19fe89b701c99f3e6e990602001610f82565b82612af95760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f41525241590000000000000000000000000000000000000000006044820152606401610f48565b828114612b485760405162461bcd60e51b815260206004820152600c60248201527f57524f4e475f4c454e47544800000000000000000000000000000000000000006044820152606401610f48565b60005b83811015612bfd57828282818110612b6557612b6561573f565b9050602002016020810190612b7a919061562b565b15612bb757612bb1858583818110612b9457612b9461573f565b9050602002016020810190612ba99190615269565b607290614689565b50612beb565b612be9858583818110612bcc57612bcc61573f565b9050602002016020810190612be19190615269565b60729061469e565b505b80612bf58161576b565b915050612b4b565b507f0d9690f97165f35991ae60d2a97e04aff472c08729722a9236ff1bc8b9ba90c084848484604051612c339493929190615bbb565b60405180910390a150505050565b606980546001600160a01b0319166001600160a01b0383169081179091556040519081527fe86d63ef871123954e3c79261a2ad29d42552412045093f9e7f3ba09a459874290602001610f82565b6060612c9b60726146b3565b905090565b60008167ffffffffffffffff1611612cfa5760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f434f4e4649524d5f504552494f44000000000000000000006044820152606401610f48565b6066805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527fa65727a75a71361b541984b5db16e2bd4a6a013f072fe8bb097eafd3844b769790602001610f82565b612d6382612d5d368690038601866159d4565b83613569565b8414612db15760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f415353455254494f4e5f48415348000000000000000000006044820152606401610f48565b50505050565b60006001612dc483613177565b54600160c81b900460ff166002811115612de057612de06154fe565b1492915050565b606b54604080517fee35f32700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ee35f3279160048083019260209291908290030181865afa158015612e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9b9190615c19565b606680547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b67ffffffffffffffff8416908102919091179091556040519081527f43f7dc42145cd896e425c1ba47e44ad7fac3214c8993455b88ea382f68a5ed3390602001610f82565b60006111ec6072836146c0565b6001600160a01b038116612f415760405162461bcd60e51b815260206004820152601060248201527f494e56414c49445f455343524f575f30000000000000000000000000000000006044820152606401610f48565b606f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f0b0f78bec1daf434a03f0d26fd75936a5391ef694a7ce32a964a316f40b530dd90602001610f82565b606c80546001600160a01b0319166001600160a01b03838116918217909255606b546040517fcee3d7280000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063cee3d72890604401600060405180830381600087803b15801561300d57600080fd5b505af1158015613021573d6000803e3d6000fd5b50506040516001600160a01b03841681527f0bff4fc5e4cd8fc762bca2b6ff29e3b73a463474097b3f1e972ed2a167b534a792506020019050610f82565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f2000000000000000000000000000000000000000000000000000000001790529051600091829182916064916130cb9190615c5a565b600060405180830381855afa9150503d8060008114613106576040519150601f19603f3d011682016040523d82523d6000602084013e61310b565b606091505b509150915081801561311e575080516020145b9250505090565b61312d613722565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000816131c65760405162461bcd60e51b815260206004820152601b60248201527f415353455254494f4e5f49445f43414e4e4f545f42455f5a45524f00000000006044820152606401610f48565b50600090815260756020526040902090565b61328f823560208401356131f26060860160408701615269565b6132026080870160608801615455565b61321260a0880160808901615455565b60408051602080820197909752808201959095526bffffffffffffffffffffffff19606094851b16938501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b81166074860152911b16607c8301528051606481840301815260849092019052805191012090565b8114610ef75760405162461bcd60e51b815260206004820152601460248201527f434f4e4649475f484153485f4d49534d415443480000000000000000000000006044820152606401610f48565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b546001600160a01b0316919050565b7f49bd798cd84788856140a4cd5030756b4d08a9e4d55db725ec195f232d262a895460ff161561334357612a66836146e2565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561339d575060408051601f3d908101601f1916820190925261339a9181019061589a565b60015b61340f5760405162461bcd60e51b815260206004820152603860248201527f45524331393637557067726164653a206e6577207365636f6e6461727920696d60448201527f706c656d656e746174696f6e206973206e6f74205555505300000000000000006064820152608401610f48565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d81146134a45760405162461bcd60e51b815260206004820152603360248201527f45524331393637557067726164653a20756e737570706f72746564207365636f60448201527f6e646172792070726f786961626c6555554944000000000000000000000000006064820152608401610f48565b50612a668383836147a3565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6134d96147c8565b604080516001600160a01b03928316815291841660208301520160405180910390a16110d3816147f0565b60008160800151600281111561351c5761351c6154fe565b036110d35760405162461bcd60e51b815260206004820152601360248201527f415353455254494f4e5f4e4f545f4558495354000000000000000000000000006044820152606401610f48565b60006135788461274b856144fe565b90505b9392505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156135b557612a6683614893565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561360f575060408051601f3d908101601f1916820190925261360c9181019061589a565b60015b6136815760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610f48565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146137165760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610f48565b50612a66838383614937565b60335460ff16610edf5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610f48565b600061377f85613177565b905060018154600160c81b900460ff1660028111156137a0576137a06154fe565b146137ed5760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f50454e44494e470000000000000000000000000000000000000000006044820152606401610f48565b61380684613800368690038601866159d4565b84613569565b85146138545760405162461bcd60e51b815260206004820152600c60248201527f434f4e4649524d5f4441544100000000000000000000000000000000000000006044820152606401610f48565b600061386d61386836869003860186615c76565b614940565b9050600061388861388336879003870187615c76565b614952565b606c546040517fa04cee6000000000000000000000000000000000000000000000000000000000815260048101839052602481018590529192506001600160a01b03169063a04cee6090604401600060405180830381600087803b1580156138ef57600080fd5b505af1158015613903573d6000803e3d6000fd5b50505060748890555082547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff167902000000000000000000000000000000000000000000000000001783556040805183815260208101839052815189927ffc42829b29c259a7370ab56c8f69fce23b5f351a9ce151da453281993ec0090c928290030190a250505050505050565b6001600160a01b038116600090815260776020526040902060020154600160401b900460ff16613a035760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f5354414b4544000000000000000000000000000000000000000000006044820152606401610f48565b6001600160a01b03811660009081526077602052604081206001015460745490919082149080613a3284613177565b5467ffffffffffffffff161190508180613a495750805b612db15760405162461bcd60e51b815260206004820152600c60248201527f5354414b455f41435449564500000000000000000000000000000000000000006044820152606401610f48565b6001600160a01b038083166000908152607760205260408120600281015481549293919269010000000000000000009091049091169080851115613b1b5760405162461bcd60e51b815260206004820152601060248201527f544f4f5f4c4954544c455f5354414b45000000000000000000000000000000006044820152606401610f48565b6000613b278683615c92565b8685559050613b36838261495e565b826001600160a01b0316876001600160a01b03167fd957cf2340073335d256f72a9ef89cf1a43c31143341a6a53575ef33e987beb88489604051613b84929190918252602082015260400190565b60405180910390a39695505050505050565b613b9e614a03565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861315a3390565b600080613be660408601610eee86613177565b6001613bfa61024087016102208801615ca5565b6002811115613c0b57613c0b6154fe565b1480613c3957506002613c2661024087016102208801615ca5565b6002811115613c3757613c376154fe565b145b613c855760405162461bcd60e51b815260206004820152601060248201527f4241445f41465445525f535441545553000000000000000000000000000000006044820152606401610f48565b83613ca78635613c9d36899003890160e08a016159d4565b6020890135613569565b14613cf45760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f4245464f52455f53544154450000000000000000000000006044820152606401610f48565b6001613d0861018087016101608801615ca5565b6002811115613d1957613d196154fe565b14613d665760405162461bcd60e51b815260206004820152600f60248201527f4241445f505245565f53544154555300000000000000000000000000000000006044820152606401610f48565b6000613d7185613177565b90506000806101a0880160e0890182613d8a8383614a56565b1215613dd85760405162461bcd60e51b815260206004820152600f60248201527f494e424f585f4241434b574152445300000000000000000000000000000000006044820152606401610f48565b6000613dfe613ded60e08d0160c08e01615455565b849067ffffffffffffffff16614b63565b90506000811315613e515760405162461bcd60e51b815260206004820152600d60248201527f494e424f585f544f4f5f464152000000000000000000000000000000000000006044820152606401610f48565b6002613e656102408d016102208e01615ca5565b6002811115613e7657613e766154fe565b14158015613e845750600081125b15613ee657600196506000613e998484614a56565b13613ee65760405162461bcd60e51b815260206004820152601360248201527f4f564552464c4f575f5354414e445354494c4c000000000000000000000000006044820152606401610f48565b606b54604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa158015613f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f6b919061589a565b90506000613f798583614b63565b1315613fc75760405162461bcd60e51b815260206004820152600e60248201527f494e424f585f504153545f454e440000000000000000000000000000000000006044820152606401610f48565b80613fd860e08e0160c08f01615455565b67ffffffffffffffff1611156140305760405162461bcd60e51b815260206004820152601360248201527f494e424f585f4e4f545f504f50554c41544544000000000000000000000000006044820152606401610f48565b600061404961404436879003870187615c76565b614beb565b67ffffffffffffffff16905081810361406e57614067826001615a3b565b9650614072565b8196505b806000036140c25760405162461bcd60e51b815260206004820152601160248201527f454d5054595f494e424f585f434f554e540000000000000000000000000000006044820152606401610f48565b606b546001600160a01b03166316bf55796140de600184615c92565b6040518263ffffffff1660e01b81526004016140fc91815260200190565b602060405180830381865afa158015614119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413d919061589a565b9550505050505061415d87896101a001803603810190612d5d91906159d4565b94508585148061416b575085155b6141b75760405162461bcd60e51b815260206004820152601960248201527f554e45585045435445445f415353455254494f4e5f48415348000000000000006044820152606401610f48565b60006141c286613177565b54600160c81b900460ff1660028111156141de576141de6154fe565b1461422b5760405162461bcd60e51b815260206004820152600e60248201527f415353455254494f4e5f5345454e0000000000000000000000000000000000006044820152606401610f48565b825460685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16928401929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b811660748501529087901b16607c830152805160648184030181526084909201905280519101206000916142cf9167ffffffffffffffff909116159061452e565b90506142da84614bf9565b60008681526075602090815260409182902083518154928501519385015160608601511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff968316600160401b026fffffffffffffffffffffffffffffffff19909616929093169190911793909317939093169290921717808255608083015183929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b8360028111156143d3576143d36154fe565b021790555060a0820151816001015590505087867f901c3aee23cf4478825462caaab375c606ab83516060388344f06503407536308b8587606854606754606960009054906101000a90046001600160a01b0316606660009054906101000a900467ffffffffffffffff166040516144519796959493929190615d29565b60405180910390a37f0000000000000000000000000000000000000000000000000000000000000000156144f25760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144e2919061589a565b6000878152607c60205260409020555b50505050935093915050565b6000816040516020016145119190615dc3565b604051602081830303815290604052805190602001209050919050565b614536615125565b61453e615125565b67ffffffffffffffff4316604082015292151560608401525060a08201526001608082015290565b61456e614c7d565b6002608083018190525060008181526075602090815260409182902084518154928601519386015160608701511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff968316600160401b026fffffffffffffffffffffffffffffffff19909616929093169190911793909317939093169290921717808255608084015184929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b836002811115614671576146716154fe565b021790555060a0919091015160019091015560745550565b600061357b836001600160a01b038416614d02565b600061357b836001600160a01b038416614d51565b6060600061357b83614e3a565b6001600160a01b0381166000908152600183016020526040812054151561357b565b6001600160a01b0381163b61475f5760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e74726163740000000000000000006064820152608401610f48565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6147ac83614e96565b6000825111806147b95750805b15612a6657612db18383614ed6565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103613301565b6001600160a01b03811661486c5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610f48565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103614782565b6001600160a01b0381163b6149105760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610f48565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc614782565b6147ac83614efb565b8051600090815b602002015192915050565b80516000906001614947565b6001600160a01b038216600090815260786020526040812054906149828383615a3b565b6001600160a01b03851660009081526078602052604081208290556079805492935085929091906149b4908490615a3b565b909155505060408051838152602081018390526001600160a01b038616917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a250505050565b60335460ff1615610edf5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610f48565b600080614a6b61404436869003860186615c76565b90506000614a8161404436869003860186615c76565b90508067ffffffffffffffff168267ffffffffffffffff161015614aab57600019925050506111ec565b8067ffffffffffffffff168267ffffffffffffffff161115614ad2576001925050506111ec565b6000614aeb614ae636889003880188615c76565b614f3b565b90506000614b01614ae636889003880188615c76565b90508067ffffffffffffffff168267ffffffffffffffff161015614b2d576000199450505050506111ec565b8067ffffffffffffffff168267ffffffffffffffff161115614b565760019450505050506111ec565b60009450505050506111ec565b600080614b7861404436869003860186615c76565b9050828167ffffffffffffffff161015614b97576000199150506111ec565b828167ffffffffffffffff161115614bb35760019150506111ec565b6000614bc7614ae636879003870187615c76565b67ffffffffffffffff161115614be15760019150506111ec565b60009150506111ec565b602081015160009081614947565b805467ffffffffffffffff16600003614c2957805467ffffffffffffffff19164367ffffffffffffffff16179055565b8054600160401b900467ffffffffffffffff166000036110d35780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b4367ffffffffffffffff1602179055565b600054610100900460ff16614cfa5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f48565b610edf614f4a565b6000818152600183016020526040812054614d49575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556111ec565b5060006111ec565b60008181526001830160205260408120548015614be1576000614d75600183615c92565b8554909150600090614d8990600190615c92565b9050818114614dee576000866000018281548110614da957614da961573f565b9060005260206000200154905080876000018481548110614dcc57614dcc61573f565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614dff57614dff615dd1565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506111ec565b606081600001805480602002602001604051908101604052809291908181526020018280548015614e8a57602002820191906000526020600020905b815481526020019060010190808311614e76575b50505050509050919050565b614e9f816146e2565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b606061357b8383604051806060016040528060278152602001615e1b60279139614fd3565b614f0481614893565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60208101516000906001614947565b600054610100900460ff16614fc75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f48565b6033805460ff19169055565b60606001600160a01b0384163b6150525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610f48565b600080856001600160a01b03168560405161506d9190615c5a565b600060405180830381855af49150503d80600081146150a8576040519150601f19603f3d011682016040523d82523d6000602084013e6150ad565b606091505b50915091506150bd8282866150c7565b9695505050505050565b606083156150d657508161357b565b8251156150e65782518084602001fd5b8160405162461bcd60e51b8152600401610f489190615de7565b60405180604001604052806151136151c6565b81526020016151206151c6565b905290565b6040805160c081018252600080825260208201819052918101829052606081018290529060808201905b8152600060209091015290565b60405180606001604052806151ac604080516060808201835260008083526020808401829052845160a0810186528281529081018290528085018290529182018190526080820152909182015290565b81526020016151b96151e4565b81526020016151206151e4565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806151f7615100565b8152602001600061514f565b60008082840360c081121561521757600080fd5b8335925060a0601f198201121561522d57600080fd5b506020830190509250929050565b60006020828403121561524d57600080fd5b5035919050565b6001600160a01b03811681146110d357600080fd5b60006020828403121561527b57600080fd5b813561357b81615254565b80151581146110d357600080fd5b600080604083850312156152a757600080fd5b82356152b281615254565b915060208301356152c281615286565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715615306576153066152cd565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615335576153356152cd565b604052919050565b6000806040838503121561535057600080fd5b823561535b81615254565b915060208381013567ffffffffffffffff8082111561537957600080fd5b818601915086601f83011261538d57600080fd5b81358181111561539f5761539f6152cd565b6153b184601f19601f8401160161530c565b915080825287848285010111156153c757600080fd5b80848401858401376000848284010152508093505050509250929050565b600060c082840312156153f757600080fd5b50919050565b600080600080610120858703121561541457600080fd5b843593506020850135925061542c86604087016153e5565b939692955092936101000135925050565b803567ffffffffffffffff811681146112ab57600080fd5b60006020828403121561546757600080fd5b61357b8261543d565b60008083601f84011261548257600080fd5b50813567ffffffffffffffff81111561549a57600080fd5b6020830191508360208260051b85010111156154b557600080fd5b9250929050565b600080602083850312156154cf57600080fd5b823567ffffffffffffffff8111156154e657600080fd5b6154f285828601615470565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b600381106110d357634e487b7160e01b600052602160045260246000fd5b600060c08201905067ffffffffffffffff80845116835280602085015116602084015280604085015116604084015250606083015115156060830152608083015161557c81615514565b8060808401525060a083015160a083015292915050565b60008060008385036102a08112156155aa57600080fd5b84359350610260601f19820112156155c157600080fd5b5060208401915061028084013590509250925092565b6000808284036101408112156155ec57600080fd5b833567ffffffffffffffff81111561560357600080fd5b84016103a0818703121561561657600080fd5b9250610120601f198201121561522d57600080fd5b60006020828403121561563d57600080fd5b813561357b81615286565b6000806000806040858703121561565e57600080fd5b843567ffffffffffffffff8082111561567657600080fd5b61568288838901615470565b9096509450602087013591508082111561569b57600080fd5b506156a887828801615470565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156156f55783516001600160a01b0316835292840192918401916001016156d0565b50909695505050505050565b600080600080610120858703121561571857600080fd5b8435935061572986602087016153e5565b939693955050505060e082013591610100013590565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019820361577e5761577e615755565b5060010190565b8183526000602080850194508260005b858110156157c35781356157a881615254565b6001600160a01b031687529582019590820190600101615795565b509495945050505050565b602081526000613578602083018486615785565b6000602082840312156157f457600080fd5b815161357b81615286565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261583457600080fd5b83018035915067ffffffffffffffff82111561584f57600080fd5b6020019150368190038213156154b557600080fd5b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156158ac57600080fd5b5051919050565b600082601f8301126158c457600080fd5b6040516040810181811067ffffffffffffffff821117156158e7576158e76152cd565b80604052508060408401858111156158fe57600080fd5b845b8181101561591f576159118161543d565b835260209283019201615900565b509195945050505050565b60006080828403121561593c57600080fd5b6040516040810181811067ffffffffffffffff8211171561595f5761595f6152cd565b604052905080601f8301841361597457600080fd5b61597c6152e3565b80604085018681111561598e57600080fd5b855b818110156159a8578035845260209384019301615990565b508184526159b687826158b3565b60208501525050505092915050565b8035600381106112ab57600080fd5b600060c082840312156159e657600080fd5b6040516060810181811067ffffffffffffffff82111715615a0957615a096152cd565b604052615a16848461592a565b8152615a24608084016159c5565b602082015260a09290920135604083015250919050565b808201808211156111ec576111ec615755565b615a5781615514565b9052565b805180518360005b6002811015615a82578251825260209283019290910190600101615a63565b505050602090810151906040840160005b6002811015615aba57835167ffffffffffffffff1682529282019290820190600101615a93565b50508201519050615ace6080840182615a4e565b506040015160a09190910152565b600061032082019050885180518352602081015160208401526040810151905080516040840152602081015160608401526001600160a01b036040820151166080840152606081015167ffffffffffffffff80821660a08601528060808401511660c08601525050506020890151615b5760e0840182615a5b565b506040890151615b6b6101a0840182615a5b565b508761026083015286610280830152856102a0830152846102c0830152615b9e6102e08301856001600160a01b03169052565b67ffffffffffffffff831661030083015298975050505050505050565b604081526000615bcf604083018688615785565b8281036020848101919091528482528591810160005b86811015615c0c578335615bf881615286565b151582529282019290820190600101615be5565b5098975050505050505050565b600060208284031215615c2b57600080fd5b815161357b81615254565b60005b83811015615c51578181015183820152602001615c39565b50506000910152565b60008251615c6c818460208701615c36565b9190910192915050565b600060808284031215615c8857600080fd5b61357b838361592a565b818103818111156111ec576111ec615755565b600060208284031215615cb757600080fd5b61357b826159c5565b6040818337604082016040820160005b6002811015615d015767ffffffffffffffff615ceb8361543d565b1683526020928301929190910190600101615cd0565b505050615d10608082016159c5565b615d1981615514565b608083015260a090810135910152565b600061032082019050883582526020890135602083015260408901356040830152606089013560608301526080890135615d6281615254565b6001600160a01b03166080830152615d7c60a08a0161543d565b67ffffffffffffffff80821660a085015280615d9a60c08d0161543d565b1660c08501525050615db260e0830160e08b01615cc0565b6101a0615b6b818401828c01615cc0565b60c081016111ec8284615a5b565b634e487b7160e01b600052603160045260246000fd5b6020815260008251806020840152615e06816040850160208701615c36565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220dd6d9989023bc385a9c6e6643518ea30bfc0354680f9af3468ae53d31cb2984c64736f6c63430008110033",
2202
+ "deployedBytecode": "0x60806040526004361061044a5760003560e01c806376e7e23b11610243578063b7ab4db511610143578063e8bd4922116100bb578063f112cea31161008a578063fb0e722b1161006f578063fb0e722b14610e77578063fc8ffa0314610e97578063ff204f3b14610eb757600080fd5b8063f112cea314610e37578063facd743b14610e5757600080fd5b8063e8bd492214610d23578063ee35f32714610dcc578063ef40a67014610de1578063f065de3f14610e1757600080fd5b8063dff6978711610112578063e531d8c7116100f7578063e531d8c714610cbb578063e6b3082c14610cdb578063e78cea9214610d0357600080fd5b8063dff6978714610c86578063e51019a614610c9b57600080fd5b8063b7ab4db514610c04578063bc45e0ae14610c26578063ce11e6ab14610c46578063ce66d05c14610c6657600080fd5b80639846129a116101d6578063a23c44b1116101a5578063a3ffb7721161018a578063a3ffb77214610ba4578063aa38a6e714610bc4578063b7626e7314610be457600080fd5b8063a23c44b114610a71578063a2b4f1d814610b8457600080fd5b80639846129a14610a085780639a7b455614610a1b5780639a8a059214610a3b5780639e7e6aa714610a5157600080fd5b80638830288411610212578063883028841461098557806389384960146109b25780638ee1a126146109d2578063948d6588146109e857600080fd5b806376e7e23b146108f15780637c75c298146109075780638456cb591461092757806384728cd01461093c57600080fd5b80633be680ea1161034e57806355840a58116102e15780635c975abb116102b057806365f7f80d1161029557806365f7f80d146108a65780636ddd3744146108bb57806371ef232c146108db57600080fd5b80635c975abb1461084b5780636177fd181461086357600080fd5b806355840a58146107c6578063567ca41b146107eb57806356bbc9e61461080b5780635bf038331461082b57600080fd5b80634f61f8501161031d5780634f61f8501461075157806351ed6a301461077157806352d1902d1461079157806353b60c4a146107a657600080fd5b80633be680ea146106cf57806345e38b641461070857806347fb24c51461071e5780634f1ef2861461073e57600080fd5b806313af4035116103e15780632e7acfa6116103b05780633083622811610395578063308362281461067a578063353325e01461069a5780633659cfe6146106af57600080fd5b80632e7acfa6146106235780632f30cabd1461064457600080fd5b806313af40351461058657806313c56ca7146105a65780631b1689e9146105d45780632abdd230146105ea57600080fd5b80630d40a0fd1161041d5780630d40a0fd146104e35780630d561b3714610503578063117155851461052357806312ab3d3b1461055c57600080fd5b8063023a96fe1461044f578063046f7da21461048c57806304972af9146104a357806306ae5851146104c3575b600080fd5b34801561045b57600080fd5b5060695461046f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561049857600080fd5b506104a1610ed7565b005b3480156104af57600080fd5b506104a16104be366004615203565b610ee1565b3480156104cf57600080fd5b506104a16104de36600461523b565b610efb565b3480156104ef57600080fd5b506104a16104fe366004615269565b610f8d565b34801561050f57600080fd5b506104a161051e366004615269565b6110d6565b34801561052f57600080fd5b5061054361053e36600461523b565b611143565b60405167ffffffffffffffff9091168152602001610483565b34801561056857600080fd5b50607b546105769060ff1681565b6040519015158152602001610483565b34801561059257600080fd5b506104a16105a1366004615269565b61115f565b3480156105b257600080fd5b506105c66105c136600461523b565b611168565b604051908152602001610483565b3480156105e057600080fd5b506105c6607a5481565b3480156105f657600080fd5b506105c6610605366004615269565b6001600160a01b031660009081526077602052604090206001015490565b34801561062f57600080fd5b506066546105439067ffffffffffffffff1681565b34801561065057600080fd5b506105c661065f366004615269565b6001600160a01b031660009081526078602052604090205490565b34801561068657600080fd5b5061057661069536600461523b565b6112b0565b3480156106a657600080fd5b506105c66112cc565b3480156106bb57600080fd5b506104a16106ca366004615269565b611308565b3480156106db57600080fd5b506069546105439074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b34801561071457600080fd5b506105c660715481565b34801561072a57600080fd5b506104a1610739366004615294565b61144e565b6104a161074c36600461533d565b611517565b34801561075d57600080fd5b506104a161076c366004615269565b61164d565b34801561077d57600080fd5b5060705461046f906001600160a01b031681565b34801561079d57600080fd5b506105c66116ff565b3480156107b257600080fd5b506104a16107c1366004615269565b6117c4565b3480156107d257600080fd5b50607b5461046f9061010090046001600160a01b031681565b3480156107f757600080fd5b506104a1610806366004615269565b611812565b34801561081757600080fd5b5061054361082636600461523b565b611929565b34801561083757600080fd5b506104a16108463660046153fd565b61194c565b34801561085757600080fd5b5060335460ff16610576565b34801561086f57600080fd5b5061057661087e366004615269565b6001600160a01b0316600090815260776020526040902060020154600160401b900460ff1690565b3480156108b257600080fd5b506074546105c6565b3480156108c757600080fd5b5061046f6108d6366004615455565b611991565b3480156108e757600080fd5b506105c660795481565b3480156108fd57600080fd5b506105c660675481565b34801561091357600080fd5b506104a16109223660046154bc565b6119cb565b34801561093357600080fd5b506104a1611ad0565b34801561094857600080fd5b5061046f610957366004615269565b6001600160a01b03908116600090815260776020526040902060020154690100000000000000000090041690565b34801561099157600080fd5b506109a56109a036600461523b565b611ad8565b6040516104839190615532565b3480156109be57600080fd5b506104a16109cd36600461523b565b611b7a565b3480156109de57600080fd5b506105c660685481565b3480156109f457600080fd5b506104a1610a0336600461523b565b611baf565b6104a1610a1636600461533d565b611be4565b348015610a2757600080fd5b506104a1610a36366004615593565b611d1a565b348015610a4757600080fd5b506105c660655481565b348015610a5d57600080fd5b506104a1610a6c3660046155d7565b611d5f565b348015610a7d57600080fd5b50610b2d610a8c366004615269565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b03908116600090815260776020908152604091829020825160a081018452815481526001820154928101929092526002015467ffffffffffffffff81169282019290925260ff600160401b830416151560608201526901000000000000000000909104909116608082015290565b6040516104839190600060a082019050825182526020830151602083015267ffffffffffffffff60408401511660408301526060830151151560608301526001600160a01b03608084015116608083015292915050565b348015610b9057600080fd5b506104a1610b9f36600461562b565b612a6b565b348015610bb057600080fd5b506104a1610bbf366004615648565b612aac565b348015610bd057600080fd5b50606d5461046f906001600160a01b031681565b348015610bf057600080fd5b506104a1610bff366004615269565b612c41565b348015610c1057600080fd5b50610c19612c8f565b60405161048391906156b4565b348015610c3257600080fd5b50606e5461046f906001600160a01b031681565b348015610c5257600080fd5b50606c5461046f906001600160a01b031681565b348015610c7257600080fd5b506104a1610c81366004615455565b612ca0565b348015610c9257600080fd5b50607654610543565b348015610ca757600080fd5b506104a1610cb6366004615701565b612d4a565b348015610cc757600080fd5b50610576610cd636600461523b565b612db7565b348015610ce757600080fd5b5060665461054390600160401b900467ffffffffffffffff1681565b348015610d0f57600080fd5b50606b5461046f906001600160a01b031681565b348015610d2f57600080fd5b50610d8c610d3e366004615269565b60776020526000908152604090208054600182015460029092015490919067ffffffffffffffff811690600160401b810460ff1690690100000000000000000090046001600160a01b031685565b60408051958652602086019490945267ffffffffffffffff9092169284019290925290151560608301526001600160a01b0316608082015260a001610483565b348015610dd857600080fd5b5061046f612de7565b348015610ded57600080fd5b506105c6610dfc366004615269565b6001600160a01b031660009081526077602052604090205490565b348015610e2357600080fd5b50606f5461046f906001600160a01b031681565b348015610e4357600080fd5b506104a1610e52366004615455565b612e6e565b348015610e6357600080fd5b50610576610e72366004615269565b612ede565b348015610e8357600080fd5b50606a5461046f906001600160a01b031681565b348015610ea357600080fd5b506104a1610eb2366004615269565b612eeb565b348015610ec357600080fd5b506104a1610ed2366004615269565b612f8f565b610edf613125565b565b610ef781610eee84613177565b600101546131d8565b5050565b6067548111610f515760405162461bcd60e51b815260206004820152601c60248201527f424153455f5354414b455f4d5553545f42455f494e435245415345440000000060448201526064015b60405180910390fd5b60678190556040518181527f54404e5f5326112dad416747228f2fcd704e702c56bf0673ce7e531108e07c1b906020015b60405180910390a150565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361101a5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661104c6132dd565b6001600160a01b0316146110b75760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b604080516000808252602082019092526110d391839190613310565b50565b607b80547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038416908102919091179091556040519081527fd3ab4cbe1b6f519eb43f09ded17a12e81b811e297063ada2d65dddef5b612c7c90602001610f82565b600061114e82613177565b5467ffffffffffffffff1692915050565b6110d3816134b0565b60007f0000000000000000000000000000000000000000000000000000000000000000156111f2576000828152607c6020526040902054806111ec5760405162461bcd60e51b815260206004820152600c60248201527f4e4f5f415353455254494f4e00000000000000000000000000000000000000006044820152606401610f48565b92915050565b60006111fd83613177565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b830481161515606083015292935061129392909184916080840191600160c81b900416600281111561126f5761126f6154fe565b6002811115611280576112806154fe565b8152602001600182015481525050613504565b54600160801b900467ffffffffffffffff1692915050565b919050565b60006112bb82613177565b54600160c01b900460ff1692915050565b60006112d6615100565b6040805160608101825282815260016020820152600091810182905290806112ff818481613569565b94505050505090565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036113955760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113c76132dd565b6001600160a01b0316146114325760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b604080516000808252602082019092526110d391839190613582565b606b546040517f47fb24c50000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152909116906347fb24c590604401600060405180830381600087803b1580156114b657600080fd5b505af11580156114ca573d6000803e3d6000fd5b5050604080516001600160a01b038616815284151560208201527fce7e7eac3fe4e3d77ad155523b4ddb4446965e38cbc7c8a484bb82dc817637ef93500190505b60405180910390a15050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036115a45760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115d66132dd565b6001600160a01b0316146116415760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b610ef782826001613582565b606b546040517f4f61f8500000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015290911690634f61f85090602401600060405180830381600087803b1580156116ad57600080fd5b505af11580156116c1573d6000803e3d6000fd5b50506040516001600160a01b03841681527f82740fc8dc15b355f3eb60cd600d43cd104e6906458cccd4cb51bcd1384c0c3492506020019050610f82565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461179f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610f48565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b606a80546001600160a01b0319166001600160a01b0383169081179091556040519081527f9cf43f86b7edba7593cadbd304522caa8a94db8ec03e204762b19c6955f2c34590602001610f82565b606c546001600160a01b03908116908216036118705760405162461bcd60e51b815260206004820152600a60248201527f4355525f4f5554424f58000000000000000000000000000000000000000000006044820152606401610f48565b606b546040517fcee3d7280000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600060248301529091169063cee3d72890604401600060405180830381600087803b1580156118d757600080fd5b505af11580156118eb573d6000803e3d6000fd5b50506040516001600160a01b03841681527ffe29ae11ccc2c860bf49dbf67ca96fa1db99cb935b0a7c02e3fad38ea80d6c2592506020019050610f82565b600061193482613177565b54600160401b900467ffffffffffffffff1692915050565b611954613722565b61196084848484613774565b60405184907f0ef6ac64bd6b0fa95ed37aa19a1b16613fb89e2269c92639a9d516a64fea493890600090a250505050565b600060768267ffffffffffffffff16815481106119b0576119b061573f565b6000918252602090912001546001600160a01b031692915050565b6119d3613722565b80611a205760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f41525241590000000000000000000000000000000000000000006044820152606401610f48565b60005b81811015611a9e57611a5a838383818110611a4057611a4061573f565b9050602002016020810190611a559190615269565b613991565b611a8b838383818110611a6f57611a6f61573f565b9050602002016020810190611a849190615269565b6000613a95565b5080611a968161576b565b915050611a23565b507f53e7f63f13f0c1bf266cf49783f9c98757c2adbe729a1358bc92635b2b4d7352828260405161150b9291906157ce565b610edf613b96565b611ae0615125565b611ae982613177565b6040805160c081018252825467ffffffffffffffff8082168352600160401b820481166020840152600160801b8204169282019290925260ff600160c01b83048116151560608301529092916080840191600160c81b909104166002811115611b5457611b546154fe565b6002811115611b6557611b656154fe565b81526020016001820154815250509050919050565b60688190556040518181527f7c4db9e8738aa15b72d17ae77a824047a59f8657e14b5a5a75cb6d08213a1db790602001610f82565b60718190556040518181527f238dc443e1da4236615831e66e5dd5ed97848f0eec72bcb57efa87438fca687390602001610f82565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611c715760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ca36132dd565b6001600160a01b031614611d0e5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b610ef782826001613310565b611d22613722565b611d2d828483613bd3565b505060405181907fe5256bb4fdac498ff91fac1e162648b613c54eae8e784a5e73ca9ffcb0a08a6e90600090a2505050565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003611dec5760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b6064820152608401610f48565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611e1e6132dd565b6001600160a01b031614611e895760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b6064820152608401610f48565b600054610100900460ff1615808015611ea95750600054600160ff909116105b80611ec35750303b158015611ec3575060005460ff166001145b611f355760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610f48565b6000805460ff191660011790558015611f58576000805461ff0019166101001790555b43607a55611f696020830183615269565b606b80546001600160a01b0319166001600160a01b0392909216919091179055611f966020830183615269565b6001600160a01b03166347fb24c5611fb46060850160408601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b15801561201457600080fd5b505af1158015612028573d6000803e3d6000fd5b5061203a925050506020830183615269565b6001600160a01b0316634f61f8506120586040850160208601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156120b157600080fd5b505af11580156120c5573d6000803e3d6000fd5b506120da925050506060830160408401615269565b606a80546001600160a01b0319166001600160a01b039290921691909117905561210a6080830160608401615269565b606c80546001600160a01b0319166001600160a01b03929092169190911790556121376020830183615269565b6001600160a01b031663cee3d7286121556080850160608601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b1580156121b557600080fd5b505af11580156121c9573d6000803e3d6000fd5b506121de9250505060a0830160808401615269565b606d80546001600160a01b0319166001600160a01b03928316179055606b541663ae60bd1361221360a0850160808601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561226f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229391906157e2565b6123bc576122a46020830183615269565b6001600160a01b03166347fb24c56122c260a0850160808601615269565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b03909116600482015260016024820152604401600060405180830381600087803b15801561232257600080fd5b505af1158015612336573d6000803e3d6000fd5b5061234b9250505060a0830160808401615269565b6001600160a01b031663cf8d56d660c085013561236b60e08701876157ff565b6040518463ffffffff1660e01b815260040161238993929190615864565b600060405180830381600087803b1580156123a357600080fd5b505af11580156123b7573d6000803e3d6000fd5b505050505b6123cc6040830160208401615269565b6001600160a01b0316637fa3a40e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612409573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242d919061589a565b6000036124e7576124446040830160208401615269565b6040517fe0bc972900000000000000000000000000000000000000000000000000000000815260006004820181905260c0602483015260c4820181905260016044830181905260648301829052608483019190915260a48201526001600160a01b03919091169063e0bc97299060e401600060405180830381600087803b1580156124ce57600080fd5b505af11580156124e2573d6000803e3d6000fd5b505050505b6124f961012083016101008401615269565b606e80546001600160a01b0319166001600160a01b039290921691909117905561252960c0830160a08401615269565b606980546001600160a01b0319166001600160a01b03929092169190911790556125566020840184615455565b6066805460c086013560655560408601356067556060860135606855604b60715567ffffffffffffffff929092166fffffffffffffffffffffffffffffffff19909216919091176a03138000000000000000001790556125be61034084016103208501615455565b6069805467ffffffffffffffff9290921674010000000000000000000000000000000000000000027fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff909216919091179055600061262260c0850160a08601615269565b6001600160a01b0316036126785760405162461bcd60e51b815260206004820152601060248201527f494e56414c49445f455343524f575f30000000000000000000000000000000006044820152606401610f48565b61268860c0840160a08501615269565b606f80546001600160a01b0319166001600160a01b03929092169190911790556126b86040840160208501615269565b607080546001600160a01b0319166001600160a01b03929092169190911790556126ea61030084016102e08501615269565b607b80546001600160a01b0392909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055600080806127808161274b612746368a90038a016102008b016159d4565b6144fe565b604080516020808201949094528082019290925260608083018790528151808403909101815260809092019052805191012090565b90506000606b60009054906101000a90046001600160a01b03166001600160a01b03166284120c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127fa919061589a565b9050866102c00135810361281657612813600182615a3b565b90505b60685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16928401929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b811660748501529085901b16607c830152805160648184030181526084909201905280519101206000906128ad9060019061452e565b90506128b98184614566565b6128c161515c565b6128d4368a90038a016102008b016159d4565b60408083019190915260685460675460695460665493518a9489947f901c3aee23cf4478825462caaab375c606ab83516060388344f0650340753630946129399489948e948d9493926001600160a01b03169167ffffffffffffffff90911690615adc565b60405180910390a37f0000000000000000000000000000000000000000000000000000000000000000156129da5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ca919061589a565b6000858152607c60205260409020555b6040805160608b0135815260c08b013560208201527ffc1b83c11d99d08a938e0b82a0bd45f822f71ff5abf23f999c93c4533d752464910160405180910390a15050505050508015612a66576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b607b805460ff19168215159081179091556040519081527f016436ae56a1958a8efa3965e4839a8a90009e0a225fd19fe89b701c99f3e6e990602001610f82565b82612af95760405162461bcd60e51b815260206004820152600b60248201527f454d5054595f41525241590000000000000000000000000000000000000000006044820152606401610f48565b828114612b485760405162461bcd60e51b815260206004820152600c60248201527f57524f4e475f4c454e47544800000000000000000000000000000000000000006044820152606401610f48565b60005b83811015612bfd57828282818110612b6557612b6561573f565b9050602002016020810190612b7a919061562b565b15612bb757612bb1858583818110612b9457612b9461573f565b9050602002016020810190612ba99190615269565b607290614689565b50612beb565b612be9858583818110612bcc57612bcc61573f565b9050602002016020810190612be19190615269565b60729061469e565b505b80612bf58161576b565b915050612b4b565b507f0d9690f97165f35991ae60d2a97e04aff472c08729722a9236ff1bc8b9ba90c084848484604051612c339493929190615bbb565b60405180910390a150505050565b606980546001600160a01b0319166001600160a01b0383169081179091556040519081527fe86d63ef871123954e3c79261a2ad29d42552412045093f9e7f3ba09a459874290602001610f82565b6060612c9b60726146b3565b905090565b60008167ffffffffffffffff1611612cfa5760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f434f4e4649524d5f504552494f44000000000000000000006044820152606401610f48565b6066805467ffffffffffffffff191667ffffffffffffffff83169081179091556040519081527fa65727a75a71361b541984b5db16e2bd4a6a013f072fe8bb097eafd3844b769790602001610f82565b612d6382612d5d368690038601866159d4565b83613569565b8414612db15760405162461bcd60e51b815260206004820152601660248201527f494e56414c49445f415353455254494f4e5f48415348000000000000000000006044820152606401610f48565b50505050565b60006001612dc483613177565b54600160c81b900460ff166002811115612de057612de06154fe565b1492915050565b606b54604080517fee35f32700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163ee35f3279160048083019260209291908290030181865afa158015612e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9b9190615c19565b606680547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b67ffffffffffffffff8416908102919091179091556040519081527f43f7dc42145cd896e425c1ba47e44ad7fac3214c8993455b88ea382f68a5ed3390602001610f82565b60006111ec6072836146c0565b6001600160a01b038116612f415760405162461bcd60e51b815260206004820152601060248201527f494e56414c49445f455343524f575f30000000000000000000000000000000006044820152606401610f48565b606f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f0b0f78bec1daf434a03f0d26fd75936a5391ef694a7ce32a964a316f40b530dd90602001610f82565b606c80546001600160a01b0319166001600160a01b03838116918217909255606b546040517fcee3d7280000000000000000000000000000000000000000000000000000000081526004810192909252600160248301529091169063cee3d72890604401600060405180830381600087803b15801561300d57600080fd5b505af1158015613021573d6000803e3d6000fd5b50506040516001600160a01b03841681527f0bff4fc5e4cd8fc762bca2b6ff29e3b73a463474097b3f1e972ed2a167b534a792506020019050610f82565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f051038f2000000000000000000000000000000000000000000000000000000001790529051600091829182916064916130cb9190615c5a565b600060405180830381855afa9150503d8060008114613106576040519150601f19603f3d011682016040523d82523d6000602084013e61310b565b606091505b509150915081801561311e575080516020145b9250505090565b61312d613722565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6000816131c65760405162461bcd60e51b815260206004820152601b60248201527f415353455254494f4e5f49445f43414e4e4f545f42455f5a45524f00000000006044820152606401610f48565b50600090815260756020526040902090565b61328f823560208401356131f26060860160408701615269565b6132026080870160608801615455565b61321260a0880160808901615455565b60408051602080820197909752808201959095526bffffffffffffffffffffffff19606094851b16938501939093527fffffffffffffffff00000000000000000000000000000000000000000000000060c092831b81166074860152911b16607c8301528051606481840301815260849092019052805191012090565b8114610ef75760405162461bcd60e51b815260206004820152601460248201527f434f4e4649475f484153485f4d49534d415443480000000000000000000000006044820152606401610f48565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b546001600160a01b0316919050565b7f49bd798cd84788856140a4cd5030756b4d08a9e4d55db725ec195f232d262a895460ff161561334357612a66836146e2565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561339d575060408051601f3d908101601f1916820190925261339a9181019061589a565b60015b61340f5760405162461bcd60e51b815260206004820152603860248201527f45524331393637557067726164653a206e6577207365636f6e6461727920696d60448201527f706c656d656e746174696f6e206973206e6f74205555505300000000000000006064820152608401610f48565b7f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d81146134a45760405162461bcd60e51b815260206004820152603360248201527f45524331393637557067726164653a20756e737570706f72746564207365636f60448201527f6e646172792070726f786961626c6555554944000000000000000000000000006064820152608401610f48565b50612a668383836147a3565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6134d96147c8565b604080516001600160a01b03928316815291841660208301520160405180910390a16110d3816147f0565b60008160800151600281111561351c5761351c6154fe565b036110d35760405162461bcd60e51b815260206004820152601360248201527f415353455254494f4e5f4e4f545f4558495354000000000000000000000000006044820152606401610f48565b60006135788461274b856144fe565b90505b9392505050565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156135b557612a6683614893565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561360f575060408051601f3d908101601f1916820190925261360c9181019061589a565b60015b6136815760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610f48565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146137165760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610f48565b50612a66838383614937565b60335460ff16610edf5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610f48565b600061377f85613177565b905060018154600160c81b900460ff1660028111156137a0576137a06154fe565b146137ed5760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f50454e44494e470000000000000000000000000000000000000000006044820152606401610f48565b61380684613800368690038601866159d4565b84613569565b85146138545760405162461bcd60e51b815260206004820152600c60248201527f434f4e4649524d5f4441544100000000000000000000000000000000000000006044820152606401610f48565b600061386d61386836869003860186615c76565b614940565b9050600061388861388336879003870187615c76565b614952565b606c546040517fa04cee6000000000000000000000000000000000000000000000000000000000815260048101839052602481018590529192506001600160a01b03169063a04cee6090604401600060405180830381600087803b1580156138ef57600080fd5b505af1158015613903573d6000803e3d6000fd5b50505060748890555082547fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff167902000000000000000000000000000000000000000000000000001783556040805183815260208101839052815189927ffc42829b29c259a7370ab56c8f69fce23b5f351a9ce151da453281993ec0090c928290030190a250505050505050565b6001600160a01b038116600090815260776020526040902060020154600160401b900460ff16613a035760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f5354414b4544000000000000000000000000000000000000000000006044820152606401610f48565b6001600160a01b03811660009081526077602052604081206001015460745490919082149080613a3284613177565b5467ffffffffffffffff161190508180613a495750805b612db15760405162461bcd60e51b815260206004820152600c60248201527f5354414b455f41435449564500000000000000000000000000000000000000006044820152606401610f48565b6001600160a01b038083166000908152607760205260408120600281015481549293919269010000000000000000009091049091169080851115613b1b5760405162461bcd60e51b815260206004820152601060248201527f544f4f5f4c4954544c455f5354414b45000000000000000000000000000000006044820152606401610f48565b6000613b278683615c92565b8685559050613b36838261495e565b826001600160a01b0316876001600160a01b03167fd957cf2340073335d256f72a9ef89cf1a43c31143341a6a53575ef33e987beb88489604051613b84929190918252602082015260400190565b60405180910390a39695505050505050565b613b9e614a03565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861315a3390565b600080613be660408601610eee86613177565b6001613bfa61024087016102208801615ca5565b6002811115613c0b57613c0b6154fe565b1480613c3957506002613c2661024087016102208801615ca5565b6002811115613c3757613c376154fe565b145b613c855760405162461bcd60e51b815260206004820152601060248201527f4241445f41465445525f535441545553000000000000000000000000000000006044820152606401610f48565b83613ca78635613c9d36899003890160e08a016159d4565b6020890135613569565b14613cf45760405162461bcd60e51b815260206004820152601460248201527f494e56414c49445f4245464f52455f53544154450000000000000000000000006044820152606401610f48565b6001613d0861018087016101608801615ca5565b6002811115613d1957613d196154fe565b14613d665760405162461bcd60e51b815260206004820152600f60248201527f4241445f505245565f53544154555300000000000000000000000000000000006044820152606401610f48565b6000613d7185613177565b90506000806101a0880160e0890182613d8a8383614a56565b1215613dd85760405162461bcd60e51b815260206004820152600f60248201527f494e424f585f4241434b574152445300000000000000000000000000000000006044820152606401610f48565b6000613dfe613ded60e08d0160c08e01615455565b849067ffffffffffffffff16614b63565b90506000811315613e515760405162461bcd60e51b815260206004820152600d60248201527f494e424f585f544f4f5f464152000000000000000000000000000000000000006044820152606401610f48565b6002613e656102408d016102208e01615ca5565b6002811115613e7657613e766154fe565b14158015613e845750600081125b15613ee657600196506000613e998484614a56565b13613ee65760405162461bcd60e51b815260206004820152601360248201527f4f564552464c4f575f5354414e445354494c4c000000000000000000000000006044820152606401610f48565b606b54604080517e84120c00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916284120c9160048083019260209291908290030181865afa158015613f47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f6b919061589a565b90506000613f798583614b63565b1315613fc75760405162461bcd60e51b815260206004820152600e60248201527f494e424f585f504153545f454e440000000000000000000000000000000000006044820152606401610f48565b80613fd860e08e0160c08f01615455565b67ffffffffffffffff1611156140305760405162461bcd60e51b815260206004820152601360248201527f494e424f585f4e4f545f504f50554c41544544000000000000000000000000006044820152606401610f48565b600061404961404436879003870187615c76565b614beb565b67ffffffffffffffff16905081810361406e57614067826001615a3b565b9650614072565b8196505b806000036140c25760405162461bcd60e51b815260206004820152601160248201527f454d5054595f494e424f585f434f554e540000000000000000000000000000006044820152606401610f48565b606b546001600160a01b03166316bf55796140de600184615c92565b6040518263ffffffff1660e01b81526004016140fc91815260200190565b602060405180830381865afa158015614119573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061413d919061589a565b9550505050505061415d87896101a001803603810190612d5d91906159d4565b94508585148061416b575085155b6141b75760405162461bcd60e51b815260206004820152601960248201527f554e45585045435445445f415353455254494f4e5f48415348000000000000006044820152606401610f48565b60006141c286613177565b54600160c81b900460ff1660028111156141de576141de6154fe565b1461422b5760405162461bcd60e51b815260206004820152600e60248201527f415353455254494f4e5f5345454e0000000000000000000000000000000000006044820152606401610f48565b825460685460675460695460665460408051602080820196909652808201949094526bffffffffffffffffffffffff19606093841b16928401929092527fffffffffffffffff00000000000000000000000000000000000000000000000060c091821b811660748501529087901b16607c830152805160648184030181526084909201905280519101206000916142cf9167ffffffffffffffff909116159061452e565b90506142da84614bf9565b60008681526075602090815260409182902083518154928501519385015160608601511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff968316600160401b026fffffffffffffffffffffffffffffffff19909616929093169190911793909317939093169290921717808255608083015183929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b8360028111156143d3576143d36154fe565b021790555060a0820151816001015590505087867f901c3aee23cf4478825462caaab375c606ab83516060388344f06503407536308b8587606854606754606960009054906101000a90046001600160a01b0316606660009054906101000a900467ffffffffffffffff166040516144519796959493929190615d29565b60405180910390a37f0000000000000000000000000000000000000000000000000000000000000000156144f25760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156144be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144e2919061589a565b6000878152607c60205260409020555b50505050935093915050565b6000816040516020016145119190615dc3565b604051602081830303815290604052805190602001209050919050565b614536615125565b61453e615125565b67ffffffffffffffff4316604082015292151560608401525060a08201526001608082015290565b61456e614c7d565b6002608083018190525060008181526075602090815260409182902084518154928601519386015160608701511515600160c01b027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff928316600160801b02167fffffffffffffff000000000000000000ffffffffffffffffffffffffffffffff968316600160401b026fffffffffffffffffffffffffffffffff19909616929093169190911793909317939093169290921717808255608084015184929182907fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff16600160c81b836002811115614671576146716154fe565b021790555060a0919091015160019091015560745550565b600061357b836001600160a01b038416614d02565b600061357b836001600160a01b038416614d51565b6060600061357b83614e3a565b6001600160a01b0381166000908152600183016020526040812054151561357b565b6001600160a01b0381163b61475f5760405162461bcd60e51b815260206004820152603760248201527f455243313936373a206e6577207365636f6e6461727920696d706c656d656e7460448201527f6174696f6e206973206e6f74206120636f6e74726163740000000000000000006064820152608401610f48565b807f2b1dbce74324248c222f0ec2d5ed7bd323cfc425b336f0253c5ccfda7265546d5b80546001600160a01b0319166001600160a01b039290921691909117905550565b6147ac83614e96565b6000825111806147b95750805b15612a6657612db18383614ed6565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103613301565b6001600160a01b03811661486c5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610f48565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103614782565b6001600160a01b0381163b6149105760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610f48565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc614782565b6147ac83614efb565b8051600090815b602002015192915050565b80516000906001614947565b6001600160a01b038216600090815260786020526040812054906149828383615a3b565b6001600160a01b03851660009081526078602052604081208290556079805492935085929091906149b4908490615a3b565b909155505060408051838152602081018390526001600160a01b038616917fa740af14c56e4e04a617b1de1eb20de73270decbaaead14f142aabf3038e5ae2910160405180910390a250505050565b60335460ff1615610edf5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610f48565b600080614a6b61404436869003860186615c76565b90506000614a8161404436869003860186615c76565b90508067ffffffffffffffff168267ffffffffffffffff161015614aab57600019925050506111ec565b8067ffffffffffffffff168267ffffffffffffffff161115614ad2576001925050506111ec565b6000614aeb614ae636889003880188615c76565b614f3b565b90506000614b01614ae636889003880188615c76565b90508067ffffffffffffffff168267ffffffffffffffff161015614b2d576000199450505050506111ec565b8067ffffffffffffffff168267ffffffffffffffff161115614b565760019450505050506111ec565b60009450505050506111ec565b600080614b7861404436869003860186615c76565b9050828167ffffffffffffffff161015614b97576000199150506111ec565b828167ffffffffffffffff161115614bb35760019150506111ec565b6000614bc7614ae636879003870187615c76565b67ffffffffffffffff161115614be15760019150506111ec565b60009150506111ec565b602081015160009081614947565b805467ffffffffffffffff16600003614c2957805467ffffffffffffffff19164367ffffffffffffffff16179055565b8054600160401b900467ffffffffffffffff166000036110d35780547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16600160401b4367ffffffffffffffff1602179055565b600054610100900460ff16614cfa5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f48565b610edf614f4a565b6000818152600183016020526040812054614d49575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556111ec565b5060006111ec565b60008181526001830160205260408120548015614be1576000614d75600183615c92565b8554909150600090614d8990600190615c92565b9050818114614dee576000866000018281548110614da957614da961573f565b9060005260206000200154905080876000018481548110614dcc57614dcc61573f565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080614dff57614dff615dd1565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506111ec565b606081600001805480602002602001604051908101604052809291908181526020018280548015614e8a57602002820191906000526020600020905b815481526020019060010190808311614e76575b50505050509050919050565b614e9f816146e2565b6040516001600160a01b038216907ff7eed2a7fabbf1bec8d55ed5e785cc76622376dde5df4ff15470551e030b813490600090a250565b606061357b8383604051806060016040528060278152602001615e1b60279139614fd3565b614f0481614893565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60208101516000906001614947565b600054610100900460ff16614fc75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f48565b6033805460ff19169055565b60606001600160a01b0384163b6150525760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610f48565b600080856001600160a01b03168560405161506d9190615c5a565b600060405180830381855af49150503d80600081146150a8576040519150601f19603f3d011682016040523d82523d6000602084013e6150ad565b606091505b50915091506150bd8282866150c7565b9695505050505050565b606083156150d657508161357b565b8251156150e65782518084602001fd5b8160405162461bcd60e51b8152600401610f489190615de7565b60405180604001604052806151136151c6565b81526020016151206151c6565b905290565b6040805160c081018252600080825260208201819052918101829052606081018290529060808201905b8152600060209091015290565b60405180606001604052806151ac604080516060808201835260008083526020808401829052845160a0810186528281529081018290528085018290529182018190526080820152909182015290565b81526020016151b96151e4565b81526020016151206151e4565b60405180604001604052806002906020820280368337509192915050565b60405180606001604052806151f7615100565b8152602001600061514f565b60008082840360c081121561521757600080fd5b8335925060a0601f198201121561522d57600080fd5b506020830190509250929050565b60006020828403121561524d57600080fd5b5035919050565b6001600160a01b03811681146110d357600080fd5b60006020828403121561527b57600080fd5b813561357b81615254565b80151581146110d357600080fd5b600080604083850312156152a757600080fd5b82356152b281615254565b915060208301356152c281615286565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715615306576153066152cd565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715615335576153356152cd565b604052919050565b6000806040838503121561535057600080fd5b823561535b81615254565b915060208381013567ffffffffffffffff8082111561537957600080fd5b818601915086601f83011261538d57600080fd5b81358181111561539f5761539f6152cd565b6153b184601f19601f8401160161530c565b915080825287848285010111156153c757600080fd5b80848401858401376000848284010152508093505050509250929050565b600060c082840312156153f757600080fd5b50919050565b600080600080610120858703121561541457600080fd5b843593506020850135925061542c86604087016153e5565b939692955092936101000135925050565b803567ffffffffffffffff811681146112ab57600080fd5b60006020828403121561546757600080fd5b61357b8261543d565b60008083601f84011261548257600080fd5b50813567ffffffffffffffff81111561549a57600080fd5b6020830191508360208260051b85010111156154b557600080fd5b9250929050565b600080602083850312156154cf57600080fd5b823567ffffffffffffffff8111156154e657600080fd5b6154f285828601615470565b90969095509350505050565b634e487b7160e01b600052602160045260246000fd5b600381106110d357634e487b7160e01b600052602160045260246000fd5b600060c08201905067ffffffffffffffff80845116835280602085015116602084015280604085015116604084015250606083015115156060830152608083015161557c81615514565b8060808401525060a083015160a083015292915050565b60008060008385036102a08112156155aa57600080fd5b84359350610260601f19820112156155c157600080fd5b5060208401915061028084013590509250925092565b6000808284036101408112156155ec57600080fd5b833567ffffffffffffffff81111561560357600080fd5b84016103a0818703121561561657600080fd5b9250610120601f198201121561522d57600080fd5b60006020828403121561563d57600080fd5b813561357b81615286565b6000806000806040858703121561565e57600080fd5b843567ffffffffffffffff8082111561567657600080fd5b61568288838901615470565b9096509450602087013591508082111561569b57600080fd5b506156a887828801615470565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156156f55783516001600160a01b0316835292840192918401916001016156d0565b50909695505050505050565b600080600080610120858703121561571857600080fd5b8435935061572986602087016153e5565b939693955050505060e082013591610100013590565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019820361577e5761577e615755565b5060010190565b8183526000602080850194508260005b858110156157c35781356157a881615254565b6001600160a01b031687529582019590820190600101615795565b509495945050505050565b602081526000613578602083018486615785565b6000602082840312156157f457600080fd5b815161357b81615286565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261583457600080fd5b83018035915067ffffffffffffffff82111561584f57600080fd5b6020019150368190038213156154b557600080fd5b83815260406020820152816040820152818360608301376000818301606090810191909152601f909201601f1916010192915050565b6000602082840312156158ac57600080fd5b5051919050565b600082601f8301126158c457600080fd5b6040516040810181811067ffffffffffffffff821117156158e7576158e76152cd565b80604052508060408401858111156158fe57600080fd5b845b8181101561591f576159118161543d565b835260209283019201615900565b509195945050505050565b60006080828403121561593c57600080fd5b6040516040810181811067ffffffffffffffff8211171561595f5761595f6152cd565b604052905080601f8301841361597457600080fd5b61597c6152e3565b80604085018681111561598e57600080fd5b855b818110156159a8578035845260209384019301615990565b508184526159b687826158b3565b60208501525050505092915050565b8035600381106112ab57600080fd5b600060c082840312156159e657600080fd5b6040516060810181811067ffffffffffffffff82111715615a0957615a096152cd565b604052615a16848461592a565b8152615a24608084016159c5565b602082015260a09290920135604083015250919050565b808201808211156111ec576111ec615755565b615a5781615514565b9052565b805180518360005b6002811015615a82578251825260209283019290910190600101615a63565b505050602090810151906040840160005b6002811015615aba57835167ffffffffffffffff1682529282019290820190600101615a93565b50508201519050615ace6080840182615a4e565b506040015160a09190910152565b600061032082019050885180518352602081015160208401526040810151905080516040840152602081015160608401526001600160a01b036040820151166080840152606081015167ffffffffffffffff80821660a08601528060808401511660c08601525050506020890151615b5760e0840182615a5b565b506040890151615b6b6101a0840182615a5b565b508761026083015286610280830152856102a0830152846102c0830152615b9e6102e08301856001600160a01b03169052565b67ffffffffffffffff831661030083015298975050505050505050565b604081526000615bcf604083018688615785565b8281036020848101919091528482528591810160005b86811015615c0c578335615bf881615286565b151582529282019290820190600101615be5565b5098975050505050505050565b600060208284031215615c2b57600080fd5b815161357b81615254565b60005b83811015615c51578181015183820152602001615c39565b50506000910152565b60008251615c6c818460208701615c36565b9190910192915050565b600060808284031215615c8857600080fd5b61357b838361592a565b818103818111156111ec576111ec615755565b600060208284031215615cb757600080fd5b61357b826159c5565b6040818337604082016040820160005b6002811015615d015767ffffffffffffffff615ceb8361543d565b1683526020928301929190910190600101615cd0565b505050615d10608082016159c5565b615d1981615514565b608083015260a090810135910152565b600061032082019050883582526020890135602083015260408901356040830152606089013560608301526080890135615d6281615254565b6001600160a01b03166080830152615d7c60a08a0161543d565b67ffffffffffffffff80821660a085015280615d9a60c08d0161543d565b1660c08501525050615db260e0830160e08b01615cc0565b6101a0615b6b818401828c01615cc0565b60c081016111ec8284615a5b565b634e487b7160e01b600052603160045260246000fd5b6020815260008251806020840152615e06816040850160208701615c36565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220dd6d9989023bc385a9c6e6643518ea30bfc0354680f9af3468ae53d31cb2984c64736f6c63430008110033",
1832
2203
  "linkReferences": {},
1833
2204
  "deployedLinkReferences": {}
1834
2205
  }