@artblocks/contracts 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/README.md +22 -38
  2. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  3. package/artifacts/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2.sol/BytecodeStorageReaderContractV2.json +201 -0
  4. package/artifacts/contracts/BytecodeStorageReaders/UniversalBytecodeStorageReader.sol/UniversalBytecodeStorageReader.json +154 -0
  5. package/artifacts/contracts/BytecodeStorageV2Writer.sol/BytecodeStorageV2Writer.json +87 -0
  6. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +144 -14
  7. package/artifacts/contracts/GenArt721CoreV3_Curated.sol/GenArt721CoreV3_Curated.json +2493 -0
  8. package/artifacts/contracts/OwnedCreate2FactoryV0.sol/OwnedCreate2FactoryV0.json +311 -0
  9. package/artifacts/contracts/archive/GenArt721CoreV3.sol/GenArt721CoreV3.json +15 -2
  10. package/artifacts/contracts/archive/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +15 -2
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  14. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  16. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -2
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  20. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  25. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  26. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  27. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  28. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  29. package/artifacts/contracts/archive/minter-suite/Minters/MinterPolyptych/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +37 -0
  30. package/artifacts/contracts/archive/minter-suite/Minters/MinterPolyptych/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  31. package/artifacts/contracts/archive/minter-suite/Minters/MinterSEA/MinterSEAV0.sol/MinterSEAV0.json +2 -2
  32. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  33. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  34. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  35. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  36. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  37. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  38. package/artifacts/contracts/engine/V3/EngineFactoryV0.sol/EngineFactoryV0.json +20 -2
  39. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +48 -12
  40. package/artifacts/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +76 -40
  41. package/artifacts/contracts/engine/V3/forks/GenArt721CoreV3_Engine_Flex_PROOF.sol/GenArt721CoreV3_Engine_Flex_PROOF.json +15 -2
  42. package/artifacts/contracts/engine/V3/forks/PROHIBITION/AdminACLV0_PROHIBITION.sol/AdminACLV0_PROHIBITION.json +2 -2
  43. package/artifacts/contracts/engine/V3/forks/PROHIBITION/GenArt721CoreV3_Engine_Flex_PROHIBITION.sol/GenArt721CoreV3_Engine_Flex_PROHIBITION.json +15 -2
  44. package/artifacts/contracts/engine/V3/forks/PROHIBITION/interfaces/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.sol/IGenArt721CoreContractV3_Engine_Flex_PROHIBITION.json +37 -0
  45. package/artifacts/contracts/engine-registry/CoreRegistryV1.sol/CoreRegistryV1.json +2 -2
  46. package/artifacts/contracts/generator/AddressChunks.sol/AddressChunks.json +10 -0
  47. package/artifacts/contracts/generator/GenArt721GeneratorV0.sol/GenArt721GeneratorV0.json +333 -0
  48. package/artifacts/contracts/generator/GenArt721GeneratorV0.sol/ILegacyGenArt721CoreV2_PBAB_Flex.json +47 -0
  49. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReader.sol/IBytecodeStorageReader.json +7 -7
  50. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol/IBytecodeStorageReaderV2.json +7 -7
  51. package/artifacts/contracts/interfaces/v0.8.x/IBytecodeStorageReader_Base.sol/IBytecodeStorageReader_Base.json +30 -0
  52. package/artifacts/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol/ICoreRegistryV1.json +13 -0
  53. package/artifacts/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol/IDependencyRegistryV0.json +170 -0
  54. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +37 -0
  55. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +37 -0
  56. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +42 -0
  57. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +42 -0
  58. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.sol/IGenArt721CoreContractV3_Engine_Flex_PreV3p2.json +37 -0
  59. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine_PreV3p2.sol/IGenArt721CoreContractV3_Engine_PreV3p2.json +37 -0
  60. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreProjectScriptV0.sol/IGenArt721CoreProjectScriptV0.json +59 -0
  61. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreProjectScriptV1.sol/IGenArt721CoreProjectScriptV1.json +64 -0
  62. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreTokenHashProviderV0.sol/IGenArt721CoreTokenHashProviderV0.json +30 -0
  63. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721CoreTokenHashProviderV1.sol/IGenArt721CoreTokenHashProviderV1.json +30 -0
  64. package/artifacts/contracts/interfaces/v0.8.x/IGenArt721GeneratorV0.sol/IGenArt721GeneratorV0.json +63 -0
  65. package/artifacts/contracts/interfaces/v0.8.x/IOwnedCreate2FactoryV0.sol/IOwnedCreate2FactoryV0.json +74 -0
  66. package/artifacts/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol/ISeaDropShimForContract.json +37 -0
  67. package/artifacts/contracts/interfaces/v0.8.x/ISharedMinterMinPriceV0.sol/ISharedMinterMinPriceV0.json +37 -0
  68. package/artifacts/contracts/interfaces/v0.8.x/IUniversalBytecodeStorageReader.sol/IUniversalBytecodeStorageReader.json +56 -0
  69. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ERC721SeaDropStructsErrorsAndEvents.sol/ERC721SeaDropStructsErrorsAndEvents.json +43 -0
  70. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/INonFungibleSeaDropToken.sol/INonFungibleSeaDropToken.json +715 -0
  71. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ISeaDrop.sol/ISeaDrop.json +1571 -0
  72. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ISeaDropTokenContractMetadata.sol/ISeaDropTokenContractMetadata.json +345 -0
  73. package/artifacts/contracts/interfaces/v0.8.x/integration-refs/OpenSea/SeaDropErrorsAndEvents.sol/SeaDropErrorsAndEvents.json +717 -0
  74. package/artifacts/contracts/libs/v0.8.x/AuthLib.sol/AuthLib.json +2 -2
  75. package/artifacts/contracts/libs/v0.8.x/Bytes32Strings.sol/Bytes32Strings.json +2 -2
  76. package/artifacts/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol/DependencyRegistryStorageLib.json +2 -2
  77. package/artifacts/contracts/libs/v0.8.x/JsonStatic.sol/JsonStatic.json +10 -0
  78. package/artifacts/contracts/libs/v0.8.x/V3FlexLib.sol/V3FlexLib.json +9 -22
  79. package/artifacts/contracts/libs/v0.8.x/minter-libs/MaxInvocationsLib.sol/MaxInvocationsLib.json +2 -2
  80. package/artifacts/contracts/libs/v0.8.x/minter-libs/MinPriceLib.sol/MinPriceLib.json +24 -0
  81. package/artifacts/contracts/libs/v0.8.x/minter-libs/PolyptychLib.sol/PolyptychLib.json +2 -2
  82. package/artifacts/contracts/libs/v0.8.x/minter-libs/RAMLib.sol/RAMLib.json +2 -2
  83. package/artifacts/contracts/libs/v0.8.x/minter-libs/SEALib.sol/SEALib.json +2 -2
  84. package/artifacts/contracts/libs/v0.8.x/minter-libs/SettlementExpLib.sol/SettlementExpLib.json +2 -2
  85. package/artifacts/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol/SplitFundsLib.json +2 -2
  86. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  87. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV2.sol/MinterFilterV2.json +2 -2
  88. package/artifacts/contracts/minter-suite/Minters/MinterDAExpHolderV5.sol/MinterDAExpHolderV5.json +2 -2
  89. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV3.sol/MinterDAExpSettlementV3.json +2 -2
  90. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV5.sol/MinterDAExpV5.json +2 -2
  91. package/artifacts/contracts/minter-suite/Minters/MinterDALinHolderV5.sol/MinterDALinHolderV5.json +2 -2
  92. package/artifacts/contracts/minter-suite/Minters/MinterDALinV5.sol/MinterDALinV5.json +2 -2
  93. package/artifacts/contracts/minter-suite/Minters/MinterMinPriceMerkleV0.sol/MinterMinPriceMerkleV0.json +664 -0
  94. package/artifacts/contracts/minter-suite/Minters/MinterMinPriceV0.sol/MinterMinPriceV0.json +387 -0
  95. package/artifacts/contracts/minter-suite/Minters/MinterRAMV0.sol/MinterRAMV0.json +2 -2
  96. package/artifacts/contracts/minter-suite/Minters/MinterSEAV1.sol/MinterSEAV1.json +2 -2
  97. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V5.sol/MinterSetPriceERC20V5.json +2 -2
  98. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceHolderV5.sol/MinterSetPriceHolderV5.json +2 -2
  99. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceMerkleV5.sol/MinterSetPriceMerkleV5.json +2 -2
  100. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychERC20V5.sol/MinterSetPricePolyptychERC20V5.json +2 -2
  101. package/artifacts/contracts/minter-suite/Minters/MinterSetPricePolyptychV5.sol/MinterSetPricePolyptychV5.json +2 -2
  102. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV5.sol/MinterSetPriceV5.json +2 -2
  103. package/artifacts/contracts/minter-suite/Minters/one-off/MinterSetPriceV5_SingleCore.sol/MinterSetPriceV5_SingleCore.json +2 -2
  104. package/artifacts/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol/SeaDropXArtBlocksShim.json +1206 -0
  105. package/artifacts/contracts/mock/BytecodeV1LibCallsMock.sol/BytecodeV1LibCallsMock.json +2 -2
  106. package/artifacts/contracts/mock/BytecodeV2LibCallsMock.sol/BytecodeV2LibCallsMock.json +2 -2
  107. package/artifacts/contracts/mock/DummySharedMinter.sol/DummySharedMinter.json +2 -2
  108. package/artifacts/contracts/mock/ERC20MockAltDecimals.sol/ERC20MockAltDecimals.json +318 -0
  109. package/artifacts/contracts/mock/ForceSendMock.sol/ForceSendMock.json +2 -2
  110. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +2 -2
  111. package/artifacts/contracts/mock/MockAdminACLV0_PROHIBITION.sol/MockAdminACLV0Events_PROHIBITION.json +2 -2
  112. package/artifacts/contracts/mock/MockFileStore.sol/MockFileStore.json +35 -0
  113. package/artifacts/contracts/mock/OriginRegisterMock.sol/OriginRegisterMock.json +2 -2
  114. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  115. package/artifacts/contracts/randomizer/deprecated/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +2 -2
  116. package/artifacts/contracts/randomizer/deprecated/RandomizerV2.sol/BasicRandomizerV2.json +2 -2
  117. package/artifacts/contracts/randomizer/shared/SharedRandomizerV0.sol/SharedRandomizerV0.json +2 -2
  118. package/contracts/BytecodeStorageReaders/BytecodeStorageReaderContractV2.sol +103 -0
  119. package/contracts/BytecodeStorageReaders/UniversalBytecodeStorageReader.sol +70 -0
  120. package/contracts/BytecodeStorageV2Writer.sol +69 -0
  121. package/contracts/DependencyRegistryV0.sol +229 -60
  122. package/contracts/GenArt721CoreV3_Curated.sol +133 -0
  123. package/contracts/OwnedCreate2FactoryV0.sol +173 -0
  124. package/contracts/engine/V3/EngineFactoryV0.sol +10 -2
  125. package/contracts/engine/V3/GenArt721CoreV3_Engine.sol +139 -70
  126. package/contracts/engine/V3/GenArt721CoreV3_Engine_Flex.sol +141 -71
  127. package/contracts/generator/AddressChunks.sol +106 -0
  128. package/contracts/generator/GenArt721GeneratorV0.sol +1094 -0
  129. package/contracts/generator/scripty-support/Scripty.sol +5 -0
  130. package/contracts/interfaces/v0.8.x/IBytecodeStorageReader.sol +34 -36
  131. package/contracts/interfaces/v0.8.x/IBytecodeStorageReaderV2.sol +5 -3
  132. package/contracts/interfaces/v0.8.x/IBytecodeStorageReader_Base.sol +20 -0
  133. package/contracts/interfaces/v0.8.x/ICoreRegistryV1.sol +5 -0
  134. package/contracts/interfaces/v0.8.x/IDependencyRegistryV0.sol +94 -0
  135. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Base.sol +13 -2
  136. package/contracts/interfaces/v0.8.x/IGenArt721CoreContractV3_Engine.sol +3 -1
  137. package/contracts/interfaces/v0.8.x/IGenArt721CoreProjectScriptV0.sol +22 -0
  138. package/contracts/interfaces/v0.8.x/IGenArt721CoreProjectScriptV1.sol +23 -0
  139. package/contracts/interfaces/v0.8.x/IGenArt721CoreTokenHashProviderV0.sol +11 -0
  140. package/contracts/interfaces/v0.8.x/IGenArt721CoreTokenHashProviderV1.sol +9 -0
  141. package/contracts/interfaces/v0.8.x/IGenArt721GeneratorV0.sol +14 -0
  142. package/contracts/interfaces/v0.8.x/IOwnedCreate2FactoryV0.sol +40 -0
  143. package/contracts/interfaces/v0.8.x/ISeaDropShimForContract.sol +19 -0
  144. package/contracts/interfaces/v0.8.x/ISharedMinterMinPriceV0.sol +22 -0
  145. package/contracts/interfaces/v0.8.x/ISharedMinterRequired.sol +10 -4
  146. package/contracts/interfaces/v0.8.x/IUniversalBytecodeStorageReader.sol +28 -0
  147. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ERC721SeaDropStructsErrorsAndEvents.sol +58 -0
  148. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/INonFungibleSeaDropToken.sol +186 -0
  149. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ISeaDrop.sol +337 -0
  150. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/ISeaDropTokenContractMetadata.sol +152 -0
  151. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/SeaDropErrorsAndEvents.sol +320 -0
  152. package/contracts/interfaces/v0.8.x/integration-refs/OpenSea/SeaDropStructs.sol +146 -0
  153. package/contracts/libs/v0.8.x/Bytes32Strings.sol +20 -0
  154. package/contracts/libs/v0.8.x/DependencyRegistryStorageLib.sol +11 -3
  155. package/contracts/libs/v0.8.x/JsonStatic.sol +373 -0
  156. package/contracts/libs/v0.8.x/V3FlexLib.sol +9 -3
  157. package/contracts/libs/v0.8.x/minter-libs/MinPriceLib.sol +64 -0
  158. package/contracts/libs/v0.8.x/minter-libs/SplitFundsLib.sol +107 -0
  159. package/contracts/minter-suite/Minters/MinterMinPriceMerkleV0.sol +765 -0
  160. package/contracts/minter-suite/Minters/MinterMinPriceV0.sol +462 -0
  161. package/contracts/minter-suite/Minters/one-off/SeaDropXArtBlocksShim.sol +869 -0
  162. package/contracts/mock/ERC20MockAltDecimals.sol +31 -0
  163. package/contracts/mock/MockFileStore.sol +22 -0
  164. package/package.json +20 -18
@@ -0,0 +1,35 @@
1
+ {
2
+ "_format": "hh-sol-artifact-1",
3
+ "contractName": "MockFileStore",
4
+ "sourceName": "contracts/mock/MockFileStore.sol",
5
+ "abi": [
6
+ {
7
+ "inputs": [
8
+ {
9
+ "internalType": "string",
10
+ "name": "name",
11
+ "type": "string"
12
+ },
13
+ {
14
+ "internalType": "bytes",
15
+ "name": "",
16
+ "type": "bytes"
17
+ }
18
+ ],
19
+ "name": "getContent",
20
+ "outputs": [
21
+ {
22
+ "internalType": "bytes",
23
+ "name": "script",
24
+ "type": "bytes"
25
+ }
26
+ ],
27
+ "stateMutability": "pure",
28
+ "type": "function"
29
+ }
30
+ ],
31
+ "bytecode": "0x608060405234801561001057600080fd5b50611ac5806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c80632647c23d14610030575b600080fd5b61004361003e366004610143565b610059565b604051610050919061026c565b60405180910390f35b60606040518060400160405280601681526020017567756e7a6970536372697074732d302e302e312e6a7360501b81525060405160200161009a919061029f565b6040516020818303038152906040528051906020012084846040516020016100c39291906102bb565b6040516020818303038152906040528051906020012003610101576040518061180001604052806117c481526020016102cc6117c491399050610126565b83836040516020016101149291906102bb565b60405160208183030381529060405290505b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060006040848603121561015857600080fd5b83356001600160401b038082111561016f57600080fd5b818601915086601f83011261018357600080fd5b81358181111561019257600080fd5b602088818386010111156101a557600080fd5b8084019650819550808801359350828411156101c057600080fd5b838801935088601f8501126101d457600080fd5b83359150828211156101e8576101e861012d565b604051601f8301601f19908116603f011681019084821181831017156102105761021061012d565b816040528381528a8385880101111561022857600080fd5b838387018483013760008385830101528096505050505050509250925092565b60005b8381101561026357818101518382015260200161024b565b50506000910152565b602081526000825180602084015261028b816040850160208701610248565b601f01601f19169190910160400192915050565b600082516102b1818460208701610248565b9190910192915050565b818382376000910190815291905056fe496e567a5a53427a64484a70593351694f79676f4b54302b65335a686369423250565670626e513451584a7959586b7351543156615735304d545a42636e4a686553786650565670626e517a4d6b4679636d46354c484a795057356c647942324b4673774c4441734d4377774c4441734d4377774c4441734d5377784c4445734d5377794c4449734d6977794c444d734d79777a4c444d734e4377304c4451734e4377314c4455734e5377314c4441734d4377774c4442644b537875636a31755a586367646968624d4377774c4441734d4377784c4445734d6977794c444d734d7977304c4451734e5377314c4459734e6977334c4463734f4377344c446b734f5377784d4377784d4377784d5377784d5377784d6977784d6977784d7977784d7977774c4442644b537873636a31755a586367646968624d5459734d5463734d5467734d4377344c4463734f5377324c4445774c4455734d5445734e4377784d69777a4c44457a4c4449734d5451734d5377784e5630704c48527950575a31626d4e30615739754b48497362696c375a6d39794b485a68636942305057356c647942424b444d784b53786c505441375a54777a4d5473724b3255706446746c585431754b7a307850447879573255744d5630375a6d39794b485a68636942685057356c647942664b4852624d7a42644b53786c505445375a54777a4d4473724b3255705a6d39794b485a6863694231505852625a56303764547830573255724d5630374b7974314b5746626456303964533130573256645044773166475537636d563064584a7557335173595631394c475679505852794b484a794c4449704c476c7950575679577a42644c474e7950575679577a46644f326c79577a4934585430794e54677359334a624d6a5534585430794f44743259584967595849396448496f626e49734d436b736348493959584a624d4630735658493959584a624d563073635431755a5863675153677a4d6a63324f436b375a6d39794b4738394d44747650444d794e7a59344f79737262796c74505368764a6a517a4e6a6b774b54342b506a46384b47386d4d6a45344e445570504477784c4730394b47306d4e5449304d6a6770506a342b4d6e776f625359784d7a45774e796b38504449736254306f625359324d5459344d436b2b506a3430664368744a6a4d344e545570504477304c484662623130394b4368744a6a59314d6a67774b54342b506a68384b47306d4d6a55314b5477384f436b2b506a34784f335a68636942744c4738735244316d6457356a64476c76626968794c47347364436c375a6d39794b485a686369426c50584975624756755a33526f4c4745394d4378315057356c647942424b4734704f3245385a5473724b324570636c74685853596d4b79743157334a62595630744d563037646d467949476339626d56334945456f62696b375a6d39794b4745394d447468504734374b7974684b576462595630395a3174684c5446644b33566259533078585477384d54743259584967637a74705a6968304b58747a5057356c647942424b444538504734704f335a6863694270505445314c5734375a6d39794b4745394d447468504755374b7974684b576c6d4b484a62595630705a6d39794b485a686369426d5057453850445238636c74685853786f50573474636c74685853787350576462636c746858533078585373725044786f4c4863396248776f4d54773861436b744d547473504431334f79737262436c7a573346626246302b506a35705854316d66575673633255675a6d39794b484d39626d56334945456f5a536b73595430774f3245385a5473724b324570636c74685853596d4b484e62595630396356746e57334a62595630744d5630724b31302b506a34784e533179573246644b5474795a585231636d346763333073525431755a586367646967794f4467704f325a766369687650544137627a77784e4451374b7974764b555662623130394f44743259584967627a746d6233496f627a30784e445137627a77794e5459374b7974764b555662623130394f54743259584967627a746d6233496f627a30794e545937627a77794f4441374b7974764b555662623130394e7a743259584967627a746d6233496f627a30794f444137627a77794f4467374b7974764b555662623130394f4474325958496762797876636a31755a5863676469677a4d696b375a6d39794b4738394d44747650444d794f79737262796c76636c7476585430314f335a68636942764f335a686369426e636a31454b4555734f5377784b547432595849676558493952436876636977314c4445704c4649395a6e5675593352706232346f63696c375a6d39794b485a686369427550584a624d463073644430784f335138636935735a57356e644767374b7974304b584a626446302b6269596d4b473439636c743058536b37636d563064584a75494735394c4841395a6e5675593352706232346f636978754c48517065335a686369426c505734764f4877774f334a6c64485679626968795732566466484a625a537378585477384f436b2b506968754a6a63704a6e52394c4351395a6e5675593352706232346f636978754b58743259584967644431754c7a68384d4474795a585231636d346f636c743058587879573351724d56303850446838636c74304b7a4a64504477784e696b2b506968754a6a637066537833636a316d6457356a64476c76626968794b5874795a585231636d346f636973334b533834664442394c47317950575a31626d4e30615739754b484973626978304b58736f626a3039626e567362487838626a77774b53596d4b4734394d436b734b48513950573531624778386648512b636935735a57356e644767704a69596f644431794c6d786c626d643061436b37646d467949475539626d56334b484975516c6c5552564e66554556535830564d52553146546c51395054492f515470794c6b4a5a5645565458314246556c39465445564e52553555505430305031383664696b6f644331754b5474795a585231636d34675a53357a5a58516f6369357a64574a68636e4a68655368754c4851704b53786c66547432595849676548493957794a31626d56346347566a6447566b4945565052694973496d6c75646d467361575167596d78765932736764486c775a534973496d6c75646d467361575167624756755a33526f4c32787064475679595777694c434a70626e5a6862476c6b4947527063335268626d4e6c49697769633352795a57467449475a70626d6c7a6147566b49697769626d3867633352795a57467449476868626d52735a5849694c437769626d38675932467362474a68593273694c434a70626e5a6862476c6b494656555269303449475268644745694c434a6c654852795953426d615756735a43423062323867624739755a794973496d526864475567626d393049476c7549484a68626d646c494445354f4441744d6a41354f534973496d5a70624756755957316c49485276627942736232356e49697769633352795a57467449475a70626d6c7a61476c755a794973496d6c75646d467361575167656d6c7749475268644745695853783450575a31626d4e30615739754b484973626978304b587432595849675a5431755a58636752584a796233496f626e783865484a62636c30704f326c6d4b4755755932396b5a5431794c455679636d39794c6d4e6863485231636d56546447466a6131527959574e6c4a695a46636e4a766369356a5958423064584a6c5533526859327455636d466a5a53686c4c4867704c4346304b58526f636d393349475537636d563064584a75494756394c48707950575a31626d4e30615739754b484973626978304b587432595849675a5431794c6d786c626d6430614474705a6967685a5878386443596d6443356d4a695968644335734b584a6c6448567962694275664878755a586367646967774b5474325958496759543068626e78386443783150534630664878304c6d6b37644878384b485139653330704c473538664368755057356c647942324b4755714d796b704f335a686369426e50575a31626d4e30615739754b46597065335a686369425950573475624756755a33526f4f326c6d4b46592b57436c37646d467949474939626d56334948596f54574630614335745958676f57436f794c4659704b5474694c6e4e6c644368754b53787550574a396653787a505851755a6e78384d43787050585175634878384d43786d50585175596e78384d43786f5058517562437873505851755a4378335058517562537855505851756269784a505755714f44746b623374705a69676861436c37637a31774b484973615377784b54743259584967516a31774b484973615373784c444d704f326c6d4b476b7250544d7351696c705a696843505430784b5767395a334973624431356369783350546b73564430314f325673633255676157596f516a30394d696c37646d467949456339634368794c476b734d7a45704b7a49314e79785a5058416f636978704b7a45774c4445314b5373304c466339527974774b484973615373314c444d784b5373784f326b72505445304f325a766369683259584967517a31755a586367646968584b5378505057356c647942324b4445354b53786a50544137597a785a4f79737259796c505732787957324e64585431774b4849736153746a4b6a4d734e796b376153733957536f7a4f325a766369683259584967616a31534b4538704c484e7950536778504478714b5330784c4856795055516f547978714c4445704c474d394d44746a504663374b587432595849675a443131636c74774b4849736153787a63696c644f326b725057516d4d545537646d467949486b395a44342b506a51376157596f655477784e696c4457324d724b3130396554746c62484e6c65335a686369425450544173526a30774f325a7663696835505430784e6a386f526a307a4b33416f636978704c444d704c476b7250544973557a314457324d744d5630704f6e6b39505445335079684750544d72634368794c476b734e796b73615373394d796b36655430394d54676d4a696847505445784b33416f636978704c4445794e796b73615373394e796b37526930744f796c4457324d724b31303955333139646d467949456f395179357a64574a68636e4a68655367774c4563704c486f395179357a64574a68636e4a68655368484b5474335056496f53696b73564431534b486f704c4767395243684b4c4863734d536b73624431454b486f73564377784b58316c62484e6c4948676f4d536b375a57787a5a5874325958496765543133636968704b5373304c466f39636c74354c54526466484a626553307a585477384f43787250586b72576a74705a696872506d55706533556d4a6e676f4d436b37596e4a6c595774395953596d5a79686d4b316f704c473475633256304b4849756333566959584a7959586b6f655378724b53786d4b5378304c6d49395a697339576978304c6e4139615431724b6a67736443356d50584d375932397564476c75645756396157596f6154354a4b5874314a695a344b4441704f324a795a574672665831684a695a6e4b4759724d544d784d4463794b54746d6233496f646d467949485a7950536778504478334b5330784c47687950536778504478554b5330784c45773961547337544431704b58743259584967557a316f5779516f636978704b535a32636c307354543154506a342b4e4474705a6968704b7a31544a6a45314c476b2b53536c376453596d654367774b547469636d5668613331705a696854664878344b4449704c4530384d6a55324b5735625a6973725854314e4f325673633255676157596f545430394d6a55324b58744d50576b7361443175645778734f324a795a5746726657567363325637646d467949457339545330794e5451376157596f545434794e6a517065335a686369426a505530744d6a55334c465539636e4a6259313037537a31774b4849736153776f4d54773856536b744d536b7261584a6259313073615373395658313259584967554431735779516f636978704b535a6f636c3073546a3151506a342b4e447451664878344b444d704c476b725056416d4d545537646d467949486f3963484a62546c30376157596f546a347a4b5874325958496756543175636c744f585474364b7a306b4b48497361536b6d4b444538504655704c54457361537339565831705a696870506b6b706533556d4a6e676f4d436b37596e4a6c595774395953596d5a79686d4b7a457a4d5441334d696b375a6d39794b485a686369425250575972537a746d504645375a6973394e436c7557325a64505735625a69313658537875573259724d563039626c746d4b7a4574656c3073626c746d4b7a4a64505735625a6973794c5870644c4735625a69737a58543175573259724d7931365854746d50564639665851756244316f4c4851756344314d4c485175596a316d4c4851755a6a317a4c47676d4a69687a5054457364433574505863736443356b5057777364433575505651706658646f6157786c4b43467a4b5474795a585231636d34675a6a3039626935735a57356e6447672f626a7074636968754c4441735a696c394f335a6863694242636a31755a586367646967774b54743259584967553349395a6e5675593352706232346f63696c374b484a624d46306850544d7866487879577a4664495430784d7a6c3866484a624d6c3068505467704a695a344b445973496d6c75646d4673615751675a3370706343426b5958526849696b37646d467949473439636c737a58537830505445774f32346d4e43596d4b48517250584a624d54426466436879577a4578585477384f436b724d696b375a6d39794b485a686369426c50536875506a347a4a6a45704b796875506a34304a6a45704f32552b4d44746c4c543068636c74304b7974644b5474795a585231636d34676443736f626959794b583073545849395a6e5675593352706232346f63696c37646d467949473439636935735a57356e64476737636d563064584a754b484a626269303058587879573234744d31303850446838636c74754c544a64504477784e6e7879573234744d563038504449304b54342b506a42394f325a31626d4e30615739754945676f636978754b5874795a585231636d3467656e496f6369357a64574a68636e4a6865536854636968794b5377744f436b73626e7838626d56334948596f5458496f63696b704b583132595849675648493964486c775a57396d4946526c654852455a574e765a47567950434a314969596d626d56334946526c654852455a574e765a4756794c454e795054413764484a35653152794c6d526c5932396b5a53684263697837633352795a5746744f69457766536b73513349394d58316a5958526a61487439646d467949475a795053677050543537646d46794947343762475630494849395a47396a6457316c626e51756358566c636e6c545a57786c59335276636b46736243676e63324e79615842305733523563475539496e526c65485176616d463259584e6a636d6c776443746e656d6c77496c316263334a6a585363704f325a76636968735a585167644342765a6942794b585279655874735a5851675a5431304c6e4e79597935745958526a61436776586d5268644745364b43347150796b6f507a6f374b474a68633255324e436b705079776f4c696f704a4338704f326c6d4b43466c4b574e76626e5270626e566c4f32786c644674684c4855735a79787a5854316c4c476b3956576c7564446842636e4a686553356d636d39744b47632f595852765969687a4b54706b5a574e765a475656556b6c44623231776232356c626e516f63796b73647a302b6479356a614746795132396b5a5546304b4441704b53786f5057356c647942555a5868305247566a6232526c636967704c6d526c5932396b5a5368494b476b704b53787350575276593356745a5735304c6d4e795a5746305a5556735a57316c626e516f496e4e6a636d6c77644349704f3277756447563464454e76626e526c626e51396143776f626a31304c6e4268636d5675644535765a4755705054317564577873664878754c6e4a6c634778685932564461476c735a4368734c48517066574e6864474e6f4b47557065324e76626e4e76624755755a584a796233496f496b4e766457786b494735766443426e645735366158416763324e7961584230496978304c475570665830375a6e496f4b5474336157356b623363755a335675656d6c7755336c75597a31494f336470626d52766479356e645735366158425459334a706348527a50575a794f3330704b436b37a2646970667358221220a3efdeeed8de842eaf710fe472cc6dc0df6dbc55597ec2560e75de8b3267a1c464736f6c63430008160033",
32
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c80632647c23d14610030575b600080fd5b61004361003e366004610143565b610059565b604051610050919061026c565b60405180910390f35b60606040518060400160405280601681526020017567756e7a6970536372697074732d302e302e312e6a7360501b81525060405160200161009a919061029f565b6040516020818303038152906040528051906020012084846040516020016100c39291906102bb565b6040516020818303038152906040528051906020012003610101576040518061180001604052806117c481526020016102cc6117c491399050610126565b83836040516020016101149291906102bb565b60405160208183030381529060405290505b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060006040848603121561015857600080fd5b83356001600160401b038082111561016f57600080fd5b818601915086601f83011261018357600080fd5b81358181111561019257600080fd5b602088818386010111156101a557600080fd5b8084019650819550808801359350828411156101c057600080fd5b838801935088601f8501126101d457600080fd5b83359150828211156101e8576101e861012d565b604051601f8301601f19908116603f011681019084821181831017156102105761021061012d565b816040528381528a8385880101111561022857600080fd5b838387018483013760008385830101528096505050505050509250925092565b60005b8381101561026357818101518382015260200161024b565b50506000910152565b602081526000825180602084015261028b816040850160208701610248565b601f01601f19169190910160400192915050565b600082516102b1818460208701610248565b9190910192915050565b818382376000910190815291905056fe496e567a5a53427a64484a70593351694f79676f4b54302b65335a686369423250565670626e513451584a7959586b7351543156615735304d545a42636e4a686553786650565670626e517a4d6b4679636d46354c484a795057356c647942324b4673774c4441734d4377774c4441734d4377774c4441734d5377784c4445734d5377794c4449734d6977794c444d734d79777a4c444d734e4377304c4451734e4377314c4455734e5377314c4441734d4377774c4442644b537875636a31755a586367646968624d4377774c4441734d4377784c4445734d6977794c444d734d7977304c4451734e5377314c4459734e6977334c4463734f4377344c446b734f5377784d4377784d4377784d5377784d5377784d6977784d6977784d7977784d7977774c4442644b537873636a31755a586367646968624d5459734d5463734d5467734d4377344c4463734f5377324c4445774c4455734d5445734e4377784d69777a4c44457a4c4449734d5451734d5377784e5630704c48527950575a31626d4e30615739754b48497362696c375a6d39794b485a68636942305057356c647942424b444d784b53786c505441375a54777a4d5473724b3255706446746c585431754b7a307850447879573255744d5630375a6d39794b485a68636942685057356c647942664b4852624d7a42644b53786c505445375a54777a4d4473724b3255705a6d39794b485a6863694231505852625a56303764547830573255724d5630374b7974314b5746626456303964533130573256645044773166475537636d563064584a7557335173595631394c475679505852794b484a794c4449704c476c7950575679577a42644c474e7950575679577a46644f326c79577a4934585430794e54677359334a624d6a5534585430794f44743259584967595849396448496f626e49734d436b736348493959584a624d4630735658493959584a624d563073635431755a5863675153677a4d6a63324f436b375a6d39794b4738394d44747650444d794e7a59344f79737262796c74505368764a6a517a4e6a6b774b54342b506a46384b47386d4d6a45344e445570504477784c4730394b47306d4e5449304d6a6770506a342b4d6e776f625359784d7a45774e796b38504449736254306f625359324d5459344d436b2b506a3430664368744a6a4d344e545570504477304c484662623130394b4368744a6a59314d6a67774b54342b506a68384b47306d4d6a55314b5477384f436b2b506a34784f335a68636942744c4738735244316d6457356a64476c76626968794c47347364436c375a6d39794b485a686369426c50584975624756755a33526f4c4745394d4378315057356c647942424b4734704f3245385a5473724b324570636c74685853596d4b79743157334a62595630744d563037646d467949476339626d56334945456f62696b375a6d39794b4745394d447468504734374b7974684b576462595630395a3174684c5446644b33566259533078585477384d54743259584967637a74705a6968304b58747a5057356c647942424b444538504734704f335a6863694270505445314c5734375a6d39794b4745394d447468504755374b7974684b576c6d4b484a62595630705a6d39794b485a686369426d5057453850445238636c74685853786f50573474636c74685853787350576462636c746858533078585373725044786f4c4863396248776f4d54773861436b744d547473504431334f79737262436c7a573346626246302b506a35705854316d66575673633255675a6d39794b484d39626d56334945456f5a536b73595430774f3245385a5473724b324570636c74685853596d4b484e62595630396356746e57334a62595630744d5630724b31302b506a34784e533179573246644b5474795a585231636d346763333073525431755a586367646967794f4467704f325a766369687650544137627a77784e4451374b7974764b555662623130394f44743259584967627a746d6233496f627a30784e445137627a77794e5459374b7974764b555662623130394f54743259584967627a746d6233496f627a30794e545937627a77794f4441374b7974764b555662623130394e7a743259584967627a746d6233496f627a30794f444137627a77794f4467374b7974764b555662623130394f4474325958496762797876636a31755a5863676469677a4d696b375a6d39794b4738394d44747650444d794f79737262796c76636c7476585430314f335a68636942764f335a686369426e636a31454b4555734f5377784b547432595849676558493952436876636977314c4445704c4649395a6e5675593352706232346f63696c375a6d39794b485a686369427550584a624d463073644430784f335138636935735a57356e644767374b7974304b584a626446302b6269596d4b473439636c743058536b37636d563064584a75494735394c4841395a6e5675593352706232346f636978754c48517065335a686369426c505734764f4877774f334a6c64485679626968795732566466484a625a537378585477384f436b2b506968754a6a63704a6e52394c4351395a6e5675593352706232346f636978754b58743259584967644431754c7a68384d4474795a585231636d346f636c743058587879573351724d56303850446838636c74304b7a4a64504477784e696b2b506968754a6a637066537833636a316d6457356a64476c76626968794b5874795a585231636d346f636973334b533834664442394c47317950575a31626d4e30615739754b484973626978304b58736f626a3039626e567362487838626a77774b53596d4b4734394d436b734b48513950573531624778386648512b636935735a57356e644767704a69596f644431794c6d786c626d643061436b37646d467949475539626d56334b484975516c6c5552564e66554556535830564d52553146546c51395054492f515470794c6b4a5a5645565458314246556c39465445564e52553555505430305031383664696b6f644331754b5474795a585231636d34675a53357a5a58516f6369357a64574a68636e4a68655368754c4851704b53786c66547432595849676548493957794a31626d56346347566a6447566b4945565052694973496d6c75646d467361575167596d78765932736764486c775a534973496d6c75646d467361575167624756755a33526f4c32787064475679595777694c434a70626e5a6862476c6b4947527063335268626d4e6c49697769633352795a57467449475a70626d6c7a6147566b49697769626d3867633352795a57467449476868626d52735a5849694c437769626d38675932467362474a68593273694c434a70626e5a6862476c6b494656555269303449475268644745694c434a6c654852795953426d615756735a43423062323867624739755a794973496d526864475567626d393049476c7549484a68626d646c494445354f4441744d6a41354f534973496d5a70624756755957316c49485276627942736232356e49697769633352795a57467449475a70626d6c7a61476c755a794973496d6c75646d467361575167656d6c7749475268644745695853783450575a31626d4e30615739754b484973626978304b587432595849675a5431755a58636752584a796233496f626e783865484a62636c30704f326c6d4b4755755932396b5a5431794c455679636d39794c6d4e6863485231636d56546447466a6131527959574e6c4a695a46636e4a766369356a5958423064584a6c5533526859327455636d466a5a53686c4c4867704c4346304b58526f636d393349475537636d563064584a75494756394c48707950575a31626d4e30615739754b484973626978304b587432595849675a5431794c6d786c626d6430614474705a6967685a5878386443596d6443356d4a695968644335734b584a6c6448567962694275664878755a586367646967774b5474325958496759543068626e78386443783150534630664878304c6d6b37644878384b485139653330704c473538664368755057356c647942324b4755714d796b704f335a686369426e50575a31626d4e30615739754b46597065335a686369425950573475624756755a33526f4f326c6d4b46592b57436c37646d467949474939626d56334948596f54574630614335745958676f57436f794c4659704b5474694c6e4e6c644368754b53787550574a396653787a505851755a6e78384d43787050585175634878384d43786d50585175596e78384d43786f5058517562437873505851755a4378335058517562537855505851756269784a505755714f44746b623374705a69676861436c37637a31774b484973615377784b54743259584967516a31774b484973615373784c444d704f326c6d4b476b7250544d7351696c705a696843505430784b5767395a334973624431356369783350546b73564430314f325673633255676157596f516a30394d696c37646d467949456339634368794c476b734d7a45704b7a49314e79785a5058416f636978704b7a45774c4445314b5373304c466339527974774b484973615373314c444d784b5373784f326b72505445304f325a766369683259584967517a31755a586367646968584b5378505057356c647942324b4445354b53786a50544137597a785a4f79737259796c505732787957324e64585431774b4849736153746a4b6a4d734e796b376153733957536f7a4f325a766369683259584967616a31534b4538704c484e7950536778504478714b5330784c4856795055516f547978714c4445704c474d394d44746a504663374b587432595849675a443131636c74774b4849736153787a63696c644f326b725057516d4d545537646d467949486b395a44342b506a51376157596f655477784e696c4457324d724b3130396554746c62484e6c65335a686369425450544173526a30774f325a7663696835505430784e6a386f526a307a4b33416f636978704c444d704c476b7250544973557a314457324d744d5630704f6e6b39505445335079684750544d72634368794c476b734e796b73615373394d796b36655430394d54676d4a696847505445784b33416f636978704c4445794e796b73615373394e796b37526930744f796c4457324d724b31303955333139646d467949456f395179357a64574a68636e4a68655367774c4563704c486f395179357a64574a68636e4a68655368484b5474335056496f53696b73564431534b486f704c4767395243684b4c4863734d536b73624431454b486f73564377784b58316c62484e6c4948676f4d536b375a57787a5a5874325958496765543133636968704b5373304c466f39636c74354c54526466484a626553307a585477384f43787250586b72576a74705a696872506d55706533556d4a6e676f4d436b37596e4a6c595774395953596d5a79686d4b316f704c473475633256304b4849756333566959584a7959586b6f655378724b53786d4b5378304c6d49395a697339576978304c6e4139615431724b6a67736443356d50584d375932397564476c75645756396157596f6154354a4b5874314a695a344b4441704f324a795a574672665831684a695a6e4b4759724d544d784d4463794b54746d6233496f646d467949485a7950536778504478334b5330784c47687950536778504478554b5330784c45773961547337544431704b58743259584967557a316f5779516f636978704b535a32636c307354543154506a342b4e4474705a6968704b7a31544a6a45314c476b2b53536c376453596d654367774b547469636d5668613331705a696854664878344b4449704c4530384d6a55324b5735625a6973725854314e4f325673633255676157596f545430394d6a55324b58744d50576b7361443175645778734f324a795a5746726657567363325637646d467949457339545330794e5451376157596f545434794e6a517065335a686369426a505530744d6a55334c465539636e4a6259313037537a31774b4849736153776f4d54773856536b744d536b7261584a6259313073615373395658313259584967554431735779516f636978704b535a6f636c3073546a3151506a342b4e447451664878344b444d704c476b725056416d4d545537646d467949486f3963484a62546c30376157596f546a347a4b5874325958496756543175636c744f585474364b7a306b4b48497361536b6d4b444538504655704c54457361537339565831705a696870506b6b706533556d4a6e676f4d436b37596e4a6c595774395953596d5a79686d4b7a457a4d5441334d696b375a6d39794b485a686369425250575972537a746d504645375a6973394e436c7557325a64505735625a69313658537875573259724d563039626c746d4b7a4574656c3073626c746d4b7a4a64505735625a6973794c5870644c4735625a69737a58543175573259724d7931365854746d50564639665851756244316f4c4851756344314d4c485175596a316d4c4851755a6a317a4c47676d4a69687a5054457364433574505863736443356b5057777364433575505651706658646f6157786c4b43467a4b5474795a585231636d34675a6a3039626935735a57356e6447672f626a7074636968754c4441735a696c394f335a6863694242636a31755a586367646967774b54743259584967553349395a6e5675593352706232346f63696c374b484a624d46306850544d7866487879577a4664495430784d7a6c3866484a624d6c3068505467704a695a344b445973496d6c75646d4673615751675a3370706343426b5958526849696b37646d467949473439636c737a58537830505445774f32346d4e43596d4b48517250584a624d54426466436879577a4578585477384f436b724d696b375a6d39794b485a686369426c50536875506a347a4a6a45704b796875506a34304a6a45704f32552b4d44746c4c543068636c74304b7974644b5474795a585231636d34676443736f626959794b583073545849395a6e5675593352706232346f63696c37646d467949473439636935735a57356e64476737636d563064584a754b484a626269303058587879573234744d31303850446838636c74754c544a64504477784e6e7879573234744d563038504449304b54342b506a42394f325a31626d4e30615739754945676f636978754b5874795a585231636d3467656e496f6369357a64574a68636e4a6865536854636968794b5377744f436b73626e7838626d56334948596f5458496f63696b704b583132595849675648493964486c775a57396d4946526c654852455a574e765a47567950434a314969596d626d56334946526c654852455a574e765a4756794c454e795054413764484a35653152794c6d526c5932396b5a53684263697837633352795a5746744f69457766536b73513349394d58316a5958526a61487439646d467949475a795053677050543537646d46794947343762475630494849395a47396a6457316c626e51756358566c636e6c545a57786c59335276636b46736243676e63324e79615842305733523563475539496e526c65485176616d463259584e6a636d6c776443746e656d6c77496c316263334a6a585363704f325a76636968735a585167644342765a6942794b585279655874735a5851675a5431304c6e4e79597935745958526a61436776586d5268644745364b43347150796b6f507a6f374b474a68633255324e436b705079776f4c696f704a4338704f326c6d4b43466c4b574e76626e5270626e566c4f32786c644674684c4855735a79787a5854316c4c476b3956576c7564446842636e4a686553356d636d39744b47632f595852765969687a4b54706b5a574e765a475656556b6c44623231776232356c626e516f63796b73647a302b6479356a614746795132396b5a5546304b4441704b53786f5057356c647942555a5868305247566a6232526c636967704c6d526c5932396b5a5368494b476b704b53787350575276593356745a5735304c6d4e795a5746305a5556735a57316c626e516f496e4e6a636d6c77644349704f3277756447563464454e76626e526c626e51396143776f626a31304c6e4268636d5675644535765a4755705054317564577873664878754c6e4a6c634778685932564461476c735a4368734c48517066574e6864474e6f4b47557065324e76626e4e76624755755a584a796233496f496b4e766457786b494735766443426e645735366158416763324e7961584230496978304c475570665830375a6e496f4b5474336157356b623363755a335675656d6c7755336c75597a31494f336470626d52766479356e645735366158425459334a706348527a50575a794f3330704b436b37a2646970667358221220a3efdeeed8de842eaf710fe472cc6dc0df6dbc55597ec2560e75de8b3267a1c464736f6c63430008160033",
33
+ "linkReferences": {},
34
+ "deployedLinkReferences": {}
35
+ }
@@ -32,8 +32,8 @@
32
32
  "type": "function"
33
33
  }
34
34
  ],
35
- "bytecode": "0x608060405234801561001057600080fd5b50610148806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c95bb9c814610030575b600080fd5b61004361003e3660046100d0565b610045565b005b60405163f889b3ed60e01b81526001600160a01b038481166004830152602482018490526044820183905285169063f889b3ed90606401600060405180830381600087803b15801561009657600080fd5b505af11580156100aa573d6000803e3d6000fd5b5050505050505050565b80356001600160a01b03811681146100cb57600080fd5b919050565b600080600080608085870312156100e657600080fd5b6100ef856100b4565b93506100fd602086016100b4565b9396939550505050604082013591606001359056fea26469706673582212202f34001118610dd8a60a5557a04268d0523eeed85727b5caf336faafdaeae8a764736f6c63430008130033",
36
- "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c95bb9c814610030575b600080fd5b61004361003e3660046100d0565b610045565b005b60405163f889b3ed60e01b81526001600160a01b038481166004830152602482018490526044820183905285169063f889b3ed90606401600060405180830381600087803b15801561009657600080fd5b505af11580156100aa573d6000803e3d6000fd5b5050505050505050565b80356001600160a01b03811681146100cb57600080fd5b919050565b600080600080608085870312156100e657600080fd5b6100ef856100b4565b93506100fd602086016100b4565b9396939550505050604082013591606001359056fea26469706673582212202f34001118610dd8a60a5557a04268d0523eeed85727b5caf336faafdaeae8a764736f6c63430008130033",
35
+ "bytecode": "0x608060405234801561001057600080fd5b50610148806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c95bb9c814610030575b600080fd5b61004361003e3660046100d0565b610045565b005b60405163f889b3ed60e01b81526001600160a01b038481166004830152602482018490526044820183905285169063f889b3ed90606401600060405180830381600087803b15801561009657600080fd5b505af11580156100aa573d6000803e3d6000fd5b5050505050505050565b80356001600160a01b03811681146100cb57600080fd5b919050565b600080600080608085870312156100e657600080fd5b6100ef856100b4565b93506100fd602086016100b4565b9396939550505050604082013591606001359056fea26469706673582212202b13862ac3f6da97d308a9d1df150b40baf4a97c029ad0c9721177200340af4964736f6c63430008130033",
36
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c95bb9c814610030575b600080fd5b61004361003e3660046100d0565b610045565b005b60405163f889b3ed60e01b81526001600160a01b038481166004830152602482018490526044820183905285169063f889b3ed90606401600060405180830381600087803b15801561009657600080fd5b505af11580156100aa573d6000803e3d6000fd5b5050505050505050565b80356001600160a01b03811681146100cb57600080fd5b919050565b600080600080608085870312156100e657600080fd5b6100ef856100b4565b93506100fd602086016100b4565b9396939550505050604082013591606001359056fea26469706673582212202b13862ac3f6da97d308a9d1df150b40baf4a97c029ad0c9721177200340af4964736f6c63430008130033",
37
37
  "linkReferences": {},
38
38
  "deployedLinkReferences": {}
39
39
  }
@@ -121,8 +121,8 @@
121
121
  "type": "function"
122
122
  }
123
123
  ],
124
- "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6104918061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c8063471f23d11461007d578063715018a6146100925780638da5cb5b1461009a578063b628171a146100be578063b7bc7356146100cf578063e19133e2146100e2578063eaa76157146100f5578063f2fde38b14610108575b600080fd5b61009061008b3660046103ae565b61011b565b005b61009061018d565b6100a26101a1565b6040516001600160a01b03909116815260200160405180910390f35b6100906100cc3660046103ae565b50565b6100906100dd3660046103ae565b6101b0565b6001546100a2906001600160a01b031681565b6100906101033660046103c7565b6101e5565b6100906101163660046103c7565b610217565b600061012682610292565b60015460405161078f60e21b815260048101859052602481018390529192506001600160a01b031690611e3c906044015b600060405180830381600087803b15801561017157600080fd5b505af1158015610185573d6000803e3d6000fd5b505050505050565b6101956102ff565b61019f600061035e565b565b6000546001600160a01b031690565b60015460405161078f60e21b815260048101839052600060248201819052916001600160a01b031690611e3c90604401610157565b6101ed6102ff565b6101f561018d565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61021f6102ff565b6001600160a01b0381166102895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6100cc8161035e565b60004282436102a260018261040d565b40836102af60c882610426565b6102ba906001610448565b6040805160208101969096528501939093526060840191909152608083015260a082015260c00160405160208183030381529060405280519060200120915050919050565b336103086101a1565b6001600160a01b03161461019f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610280565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156103c057600080fd5b5035919050565b6000602082840312156103d957600080fd5b81356001600160a01b03811681146103f057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610420576104206103f7565b92915050565b60008261044357634e487b7160e01b600052601260045260246000fd5b500690565b80820180821115610420576104206103f756fea2646970667358221220eaed064c3e2f55bc7c582fd186775798889b2e697bac9231ed761e6898d711bb64736f6c63430008130033",
125
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c8063471f23d11461007d578063715018a6146100925780638da5cb5b1461009a578063b628171a146100be578063b7bc7356146100cf578063e19133e2146100e2578063eaa76157146100f5578063f2fde38b14610108575b600080fd5b61009061008b3660046103ae565b61011b565b005b61009061018d565b6100a26101a1565b6040516001600160a01b03909116815260200160405180910390f35b6100906100cc3660046103ae565b50565b6100906100dd3660046103ae565b6101b0565b6001546100a2906001600160a01b031681565b6100906101033660046103c7565b6101e5565b6100906101163660046103c7565b610217565b600061012682610292565b60015460405161078f60e21b815260048101859052602481018390529192506001600160a01b031690611e3c906044015b600060405180830381600087803b15801561017157600080fd5b505af1158015610185573d6000803e3d6000fd5b505050505050565b6101956102ff565b61019f600061035e565b565b6000546001600160a01b031690565b60015460405161078f60e21b815260048101839052600060248201819052916001600160a01b031690611e3c90604401610157565b6101ed6102ff565b6101f561018d565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61021f6102ff565b6001600160a01b0381166102895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6100cc8161035e565b60004282436102a260018261040d565b40836102af60c882610426565b6102ba906001610448565b6040805160208101969096528501939093526060840191909152608083015260a082015260c00160405160208183030381529060405280519060200120915050919050565b336103086101a1565b6001600160a01b03161461019f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610280565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156103c057600080fd5b5035919050565b6000602082840312156103d957600080fd5b81356001600160a01b03811681146103f057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610420576104206103f7565b92915050565b60008261044357634e487b7160e01b600052601260045260246000fd5b500690565b80820180821115610420576104206103f756fea2646970667358221220eaed064c3e2f55bc7c582fd186775798889b2e697bac9231ed761e6898d711bb64736f6c63430008130033",
124
+ "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6104918061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c8063471f23d11461007d578063715018a6146100925780638da5cb5b1461009a578063b628171a146100be578063b7bc7356146100cf578063e19133e2146100e2578063eaa76157146100f5578063f2fde38b14610108575b600080fd5b61009061008b3660046103ae565b61011b565b005b61009061018d565b6100a26101a1565b6040516001600160a01b03909116815260200160405180910390f35b6100906100cc3660046103ae565b50565b6100906100dd3660046103ae565b6101b0565b6001546100a2906001600160a01b031681565b6100906101033660046103c7565b6101e5565b6100906101163660046103c7565b610217565b600061012682610292565b60015460405161078f60e21b815260048101859052602481018390529192506001600160a01b031690611e3c906044015b600060405180830381600087803b15801561017157600080fd5b505af1158015610185573d6000803e3d6000fd5b505050505050565b6101956102ff565b61019f600061035e565b565b6000546001600160a01b031690565b60015460405161078f60e21b815260048101839052600060248201819052916001600160a01b031690611e3c90604401610157565b6101ed6102ff565b6101f561018d565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61021f6102ff565b6001600160a01b0381166102895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6100cc8161035e565b60004282436102a260018261040d565b40836102af60c882610426565b6102ba906001610448565b6040805160208101969096528501939093526060840191909152608083015260a082015260c00160405160208183030381529060405280519060200120915050919050565b336103086101a1565b6001600160a01b03161461019f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610280565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156103c057600080fd5b5035919050565b6000602082840312156103d957600080fd5b81356001600160a01b03811681146103f057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610420576104206103f7565b92915050565b60008261044357634e487b7160e01b600052601260045260246000fd5b500690565b80820180821115610420576104206103f756fea264697066735822122084896d3a2e48acb7afdbbd076c4a9e76624cdbc7d0e9549aa65c62fe7a38f9e664736f6c63430008130033",
125
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c8063471f23d11461007d578063715018a6146100925780638da5cb5b1461009a578063b628171a146100be578063b7bc7356146100cf578063e19133e2146100e2578063eaa76157146100f5578063f2fde38b14610108575b600080fd5b61009061008b3660046103ae565b61011b565b005b61009061018d565b6100a26101a1565b6040516001600160a01b03909116815260200160405180910390f35b6100906100cc3660046103ae565b50565b6100906100dd3660046103ae565b6101b0565b6001546100a2906001600160a01b031681565b6100906101033660046103c7565b6101e5565b6100906101163660046103c7565b610217565b600061012682610292565b60015460405161078f60e21b815260048101859052602481018390529192506001600160a01b031690611e3c906044015b600060405180830381600087803b15801561017157600080fd5b505af1158015610185573d6000803e3d6000fd5b505050505050565b6101956102ff565b61019f600061035e565b565b6000546001600160a01b031690565b60015460405161078f60e21b815260048101839052600060248201819052916001600160a01b031690611e3c90604401610157565b6101ed6102ff565b6101f561018d565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b61021f6102ff565b6001600160a01b0381166102895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6100cc8161035e565b60004282436102a260018261040d565b40836102af60c882610426565b6102ba906001610448565b6040805160208101969096528501939093526060840191909152608083015260a082015260c00160405160208183030381529060405280519060200120915050919050565b336103086101a1565b6001600160a01b03161461019f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610280565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156103c057600080fd5b5035919050565b6000602082840312156103d957600080fd5b81356001600160a01b03811681146103f057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610420576104206103f7565b92915050565b60008261044357634e487b7160e01b600052601260045260246000fd5b500690565b80820180821115610420576104206103f756fea264697066735822122084896d3a2e48acb7afdbbd076c4a9e76624cdbc7d0e9549aa65c62fe7a38f9e664736f6c63430008130033",
126
126
  "linkReferences": {},
127
127
  "deployedLinkReferences": {}
128
128
  }
@@ -222,8 +222,8 @@
222
222
  "type": "function"
223
223
  }
224
224
  ],
225
- "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6109798061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100a45760003560e01c806308aacdf1146100a95780633897bb42146100e1578063447aa1c51461011d57806359e4a2ad1461013257806366b92a0e14610145578063715018a6146101705780638da5cb5b14610178578063b628171a14610180578063e19133e214610193578063eaa76157146101a6578063eb037309146101b9578063f2fde38b146101cc575b600080fd5b6100cc6100b73660046107f5565b60036020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6101046100ef3660046107f5565b60026020526000908152604090205460a01b81565b6040516001600160a01b031990911681526020016100d8565b61013061012b366004610823565b6101df565b005b610130610140366004610847565b610239565b600454610158906001600160a01b031681565b6040516001600160a01b0390911681526020016100d8565b6101306102bf565b6101586102d3565b61013061018e3660046107f5565b6102e2565b600154610158906001600160a01b031681565b6101306101b4366004610823565b61043a565b6101306101c73660046107f5565b61046c565b6101306101da366004610823565b6104d8565b6101ef63447aa1c560e01b610551565b600480546001600160a01b0319166001600160a01b0383169081179091556040517f8efe01ac3eede6840252c9e2462d05448dc65a012877da2bcf1e32c06a161a3d90600090a250565b6004546001600160a01b031633146102965760405162461bcd60e51b815260206004820152601b60248201527a13db9b1e481a185cda14d9595914d95d1d195c90dbdb9d1c9858dd602a1b60448201526064015b60405180910390fd5b60009182526002602052604090912080546001600160601b03191660a09290921c919091179055565b6102c761061e565b6102d1600061067d565b565b6000546001600160a01b031690565b6001546001600160a01b031633146103315760405162461bcd60e51b815260206004820152601260248201527113db9b1e4818dbdc99481b585e4818d85b1b60721b604482015260640161028d565b6000600381610343620f4240856108b0565b815260208101919091526040016000205460ff161561037e575060008181526002602052604090205460a01b6001600160a01b03191661038a565b610387826106cd565b90505b60008190036103d55760405162461bcd60e51b815260206004820152601760248201527613db9b1e481b9bdb8b5e995c9bc81a185cda081cd95959604a1b604482015260640161028d565b60015460405161078f60e21b815260048101849052602481018390526001600160a01b0390911690611e3c90604401600060405180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b505050505050565b61044261061e565b61044a6102bf565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6104758161073a565b600081815260036020908152604091829020805460ff8082161560ff199092168217909255835185815291161515918101919091527fede330a7b41e8a7cd3e273fa4093f4fb1ab8d9b0dd270a9931dc4e5035cf1d28910160405180910390a150565b6104e061061e565b6001600160a01b0381166105455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161028d565b61054e8161067d565b50565b60015460405163230448b160e01b81523360048201523060248201526001600160e01b0319831660448201526001600160a01b039091169063230448b1906064016020604051808303816000875af11580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d591906108c4565b61054e5760405162461bcd60e51b815260206004820152601a60248201527913db9b1e4810dbdc994810591b5a5b9050d308185b1b1bddd95960321b604482015260640161028d565b336106276102d3565b6001600160a01b0316146102d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60004282436106dd6001826108e6565b40836106ea60c8826108ff565b6106f5906001610913565b6040805160208101969096528501939093526060840191909152608083015260a082015260c00160405160208183030381529060405280519060200120915050919050565b60015460405163a47d29cb60e01b8152600481018390526001600160a01b039091169063a47d29cb90602401602060405180830381865afa158015610783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a79190610926565b6001600160a01b0316336001600160a01b03161461054e5760405162461bcd60e51b815260206004820152600b60248201526a13db9b1e48105c9d1a5cdd60aa1b604482015260640161028d565b60006020828403121561080757600080fd5b5035919050565b6001600160a01b038116811461054e57600080fd5b60006020828403121561083557600080fd5b81356108408161080e565b9392505050565b6000806040838503121561085a57600080fd5b8235915060208301356001600160a01b03198116811461087957600080fd5b809150509250929050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826108bf576108bf610884565b500490565b6000602082840312156108d657600080fd5b8151801515811461084057600080fd5b818103818111156108f9576108f961089a565b92915050565b60008261090e5761090e610884565b500690565b808201808211156108f9576108f961089a565b60006020828403121561093857600080fd5b81516108408161080e56fea26469706673582212208fbf96a70aacc08f3b4b76031d66a6a19dcb335e1f2b4653be1ebc446fe5965864736f6c63430008130033",
226
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a45760003560e01c806308aacdf1146100a95780633897bb42146100e1578063447aa1c51461011d57806359e4a2ad1461013257806366b92a0e14610145578063715018a6146101705780638da5cb5b14610178578063b628171a14610180578063e19133e214610193578063eaa76157146101a6578063eb037309146101b9578063f2fde38b146101cc575b600080fd5b6100cc6100b73660046107f5565b60036020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6101046100ef3660046107f5565b60026020526000908152604090205460a01b81565b6040516001600160a01b031990911681526020016100d8565b61013061012b366004610823565b6101df565b005b610130610140366004610847565b610239565b600454610158906001600160a01b031681565b6040516001600160a01b0390911681526020016100d8565b6101306102bf565b6101586102d3565b61013061018e3660046107f5565b6102e2565b600154610158906001600160a01b031681565b6101306101b4366004610823565b61043a565b6101306101c73660046107f5565b61046c565b6101306101da366004610823565b6104d8565b6101ef63447aa1c560e01b610551565b600480546001600160a01b0319166001600160a01b0383169081179091556040517f8efe01ac3eede6840252c9e2462d05448dc65a012877da2bcf1e32c06a161a3d90600090a250565b6004546001600160a01b031633146102965760405162461bcd60e51b815260206004820152601b60248201527a13db9b1e481a185cda14d9595914d95d1d195c90dbdb9d1c9858dd602a1b60448201526064015b60405180910390fd5b60009182526002602052604090912080546001600160601b03191660a09290921c919091179055565b6102c761061e565b6102d1600061067d565b565b6000546001600160a01b031690565b6001546001600160a01b031633146103315760405162461bcd60e51b815260206004820152601260248201527113db9b1e4818dbdc99481b585e4818d85b1b60721b604482015260640161028d565b6000600381610343620f4240856108b0565b815260208101919091526040016000205460ff161561037e575060008181526002602052604090205460a01b6001600160a01b03191661038a565b610387826106cd565b90505b60008190036103d55760405162461bcd60e51b815260206004820152601760248201527613db9b1e481b9bdb8b5e995c9bc81a185cda081cd95959604a1b604482015260640161028d565b60015460405161078f60e21b815260048101849052602481018390526001600160a01b0390911690611e3c90604401600060405180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b505050505050565b61044261061e565b61044a6102bf565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6104758161073a565b600081815260036020908152604091829020805460ff8082161560ff199092168217909255835185815291161515918101919091527fede330a7b41e8a7cd3e273fa4093f4fb1ab8d9b0dd270a9931dc4e5035cf1d28910160405180910390a150565b6104e061061e565b6001600160a01b0381166105455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161028d565b61054e8161067d565b50565b60015460405163230448b160e01b81523360048201523060248201526001600160e01b0319831660448201526001600160a01b039091169063230448b1906064016020604051808303816000875af11580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d591906108c4565b61054e5760405162461bcd60e51b815260206004820152601a60248201527913db9b1e4810dbdc994810591b5a5b9050d308185b1b1bddd95960321b604482015260640161028d565b336106276102d3565b6001600160a01b0316146102d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60004282436106dd6001826108e6565b40836106ea60c8826108ff565b6106f5906001610913565b6040805160208101969096528501939093526060840191909152608083015260a082015260c00160405160208183030381529060405280519060200120915050919050565b60015460405163a47d29cb60e01b8152600481018390526001600160a01b039091169063a47d29cb90602401602060405180830381865afa158015610783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a79190610926565b6001600160a01b0316336001600160a01b03161461054e5760405162461bcd60e51b815260206004820152600b60248201526a13db9b1e48105c9d1a5cdd60aa1b604482015260640161028d565b60006020828403121561080757600080fd5b5035919050565b6001600160a01b038116811461054e57600080fd5b60006020828403121561083557600080fd5b81356108408161080e565b9392505050565b6000806040838503121561085a57600080fd5b8235915060208301356001600160a01b03198116811461087957600080fd5b809150509250929050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826108bf576108bf610884565b500490565b6000602082840312156108d657600080fd5b8151801515811461084057600080fd5b818103818111156108f9576108f961089a565b92915050565b60008261090e5761090e610884565b500690565b808201808211156108f9576108f961089a565b60006020828403121561093857600080fd5b81516108408161080e56fea26469706673582212208fbf96a70aacc08f3b4b76031d66a6a19dcb335e1f2b4653be1ebc446fe5965864736f6c63430008130033",
225
+ "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6109798061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100a45760003560e01c806308aacdf1146100a95780633897bb42146100e1578063447aa1c51461011d57806359e4a2ad1461013257806366b92a0e14610145578063715018a6146101705780638da5cb5b14610178578063b628171a14610180578063e19133e214610193578063eaa76157146101a6578063eb037309146101b9578063f2fde38b146101cc575b600080fd5b6100cc6100b73660046107f5565b60036020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6101046100ef3660046107f5565b60026020526000908152604090205460a01b81565b6040516001600160a01b031990911681526020016100d8565b61013061012b366004610823565b6101df565b005b610130610140366004610847565b610239565b600454610158906001600160a01b031681565b6040516001600160a01b0390911681526020016100d8565b6101306102bf565b6101586102d3565b61013061018e3660046107f5565b6102e2565b600154610158906001600160a01b031681565b6101306101b4366004610823565b61043a565b6101306101c73660046107f5565b61046c565b6101306101da366004610823565b6104d8565b6101ef63447aa1c560e01b610551565b600480546001600160a01b0319166001600160a01b0383169081179091556040517f8efe01ac3eede6840252c9e2462d05448dc65a012877da2bcf1e32c06a161a3d90600090a250565b6004546001600160a01b031633146102965760405162461bcd60e51b815260206004820152601b60248201527a13db9b1e481a185cda14d9595914d95d1d195c90dbdb9d1c9858dd602a1b60448201526064015b60405180910390fd5b60009182526002602052604090912080546001600160601b03191660a09290921c919091179055565b6102c761061e565b6102d1600061067d565b565b6000546001600160a01b031690565b6001546001600160a01b031633146103315760405162461bcd60e51b815260206004820152601260248201527113db9b1e4818dbdc99481b585e4818d85b1b60721b604482015260640161028d565b6000600381610343620f4240856108b0565b815260208101919091526040016000205460ff161561037e575060008181526002602052604090205460a01b6001600160a01b03191661038a565b610387826106cd565b90505b60008190036103d55760405162461bcd60e51b815260206004820152601760248201527613db9b1e481b9bdb8b5e995c9bc81a185cda081cd95959604a1b604482015260640161028d565b60015460405161078f60e21b815260048101849052602481018390526001600160a01b0390911690611e3c90604401600060405180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b505050505050565b61044261061e565b61044a6102bf565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6104758161073a565b600081815260036020908152604091829020805460ff8082161560ff199092168217909255835185815291161515918101919091527fede330a7b41e8a7cd3e273fa4093f4fb1ab8d9b0dd270a9931dc4e5035cf1d28910160405180910390a150565b6104e061061e565b6001600160a01b0381166105455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161028d565b61054e8161067d565b50565b60015460405163230448b160e01b81523360048201523060248201526001600160e01b0319831660448201526001600160a01b039091169063230448b1906064016020604051808303816000875af11580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d591906108c4565b61054e5760405162461bcd60e51b815260206004820152601a60248201527913db9b1e4810dbdc994810591b5a5b9050d308185b1b1bddd95960321b604482015260640161028d565b336106276102d3565b6001600160a01b0316146102d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60004282436106dd6001826108e6565b40836106ea60c8826108ff565b6106f5906001610913565b6040805160208101969096528501939093526060840191909152608083015260a082015260c00160405160208183030381529060405280519060200120915050919050565b60015460405163a47d29cb60e01b8152600481018390526001600160a01b039091169063a47d29cb90602401602060405180830381865afa158015610783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a79190610926565b6001600160a01b0316336001600160a01b03161461054e5760405162461bcd60e51b815260206004820152600b60248201526a13db9b1e48105c9d1a5cdd60aa1b604482015260640161028d565b60006020828403121561080757600080fd5b5035919050565b6001600160a01b038116811461054e57600080fd5b60006020828403121561083557600080fd5b81356108408161080e565b9392505050565b6000806040838503121561085a57600080fd5b8235915060208301356001600160a01b03198116811461087957600080fd5b809150509250929050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826108bf576108bf610884565b500490565b6000602082840312156108d657600080fd5b8151801515811461084057600080fd5b818103818111156108f9576108f961089a565b92915050565b60008261090e5761090e610884565b500690565b808201808211156108f9576108f961089a565b60006020828403121561093857600080fd5b81516108408161080e56fea2646970667358221220681a4e1625f6b753977654ee3f9be8f851c0baff1213d2d60e085f6a2e97a6d564736f6c63430008130033",
226
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100a45760003560e01c806308aacdf1146100a95780633897bb42146100e1578063447aa1c51461011d57806359e4a2ad1461013257806366b92a0e14610145578063715018a6146101705780638da5cb5b14610178578063b628171a14610180578063e19133e214610193578063eaa76157146101a6578063eb037309146101b9578063f2fde38b146101cc575b600080fd5b6100cc6100b73660046107f5565b60036020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6101046100ef3660046107f5565b60026020526000908152604090205460a01b81565b6040516001600160a01b031990911681526020016100d8565b61013061012b366004610823565b6101df565b005b610130610140366004610847565b610239565b600454610158906001600160a01b031681565b6040516001600160a01b0390911681526020016100d8565b6101306102bf565b6101586102d3565b61013061018e3660046107f5565b6102e2565b600154610158906001600160a01b031681565b6101306101b4366004610823565b61043a565b6101306101c73660046107f5565b61046c565b6101306101da366004610823565b6104d8565b6101ef63447aa1c560e01b610551565b600480546001600160a01b0319166001600160a01b0383169081179091556040517f8efe01ac3eede6840252c9e2462d05448dc65a012877da2bcf1e32c06a161a3d90600090a250565b6004546001600160a01b031633146102965760405162461bcd60e51b815260206004820152601b60248201527a13db9b1e481a185cda14d9595914d95d1d195c90dbdb9d1c9858dd602a1b60448201526064015b60405180910390fd5b60009182526002602052604090912080546001600160601b03191660a09290921c919091179055565b6102c761061e565b6102d1600061067d565b565b6000546001600160a01b031690565b6001546001600160a01b031633146103315760405162461bcd60e51b815260206004820152601260248201527113db9b1e4818dbdc99481b585e4818d85b1b60721b604482015260640161028d565b6000600381610343620f4240856108b0565b815260208101919091526040016000205460ff161561037e575060008181526002602052604090205460a01b6001600160a01b03191661038a565b610387826106cd565b90505b60008190036103d55760405162461bcd60e51b815260206004820152601760248201527613db9b1e481b9bdb8b5e995c9bc81a185cda081cd95959604a1b604482015260640161028d565b60015460405161078f60e21b815260048101849052602481018390526001600160a01b0390911690611e3c90604401600060405180830381600087803b15801561041e57600080fd5b505af1158015610432573d6000803e3d6000fd5b505050505050565b61044261061e565b61044a6102bf565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6104758161073a565b600081815260036020908152604091829020805460ff8082161560ff199092168217909255835185815291161515918101919091527fede330a7b41e8a7cd3e273fa4093f4fb1ab8d9b0dd270a9931dc4e5035cf1d28910160405180910390a150565b6104e061061e565b6001600160a01b0381166105455760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161028d565b61054e8161067d565b50565b60015460405163230448b160e01b81523360048201523060248201526001600160e01b0319831660448201526001600160a01b039091169063230448b1906064016020604051808303816000875af11580156105b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105d591906108c4565b61054e5760405162461bcd60e51b815260206004820152601a60248201527913db9b1e4810dbdc994810591b5a5b9050d308185b1b1bddd95960321b604482015260640161028d565b336106276102d3565b6001600160a01b0316146102d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60004282436106dd6001826108e6565b40836106ea60c8826108ff565b6106f5906001610913565b6040805160208101969096528501939093526060840191909152608083015260a082015260c00160405160208183030381529060405280519060200120915050919050565b60015460405163a47d29cb60e01b8152600481018390526001600160a01b039091169063a47d29cb90602401602060405180830381865afa158015610783573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a79190610926565b6001600160a01b0316336001600160a01b03161461054e5760405162461bcd60e51b815260206004820152600b60248201526a13db9b1e48105c9d1a5cdd60aa1b604482015260640161028d565b60006020828403121561080757600080fd5b5035919050565b6001600160a01b038116811461054e57600080fd5b60006020828403121561083557600080fd5b81356108408161080e565b9392505050565b6000806040838503121561085a57600080fd5b8235915060208301356001600160a01b03198116811461087957600080fd5b809150509250929050565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000826108bf576108bf610884565b500490565b6000602082840312156108d657600080fd5b8151801515811461084057600080fd5b818103818111156108f9576108f961089a565b92915050565b60008261090e5761090e610884565b500690565b808201808211156108f9576108f961089a565b60006020828403121561093857600080fd5b81516108408161080e56fea2646970667358221220681a4e1625f6b753977654ee3f9be8f851c0baff1213d2d60e085f6a2e97a6d564736f6c63430008130033",
227
227
  "linkReferences": {},
228
228
  "deployedLinkReferences": {}
229
229
  }
@@ -95,8 +95,8 @@
95
95
  "type": "function"
96
96
  }
97
97
  ],
98
- "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6104738061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063715018a6146100675780638da5cb5b14610071578063b628171a14610095578063e19133e2146100a8578063eaa76157146100bb578063f2fde38b146100ce575b600080fd5b61006f6100e1565b005b6100796100f5565b6040516001600160a01b03909116815260200160405180910390f35b61006f6100a3366004610390565b610104565b600154610079906001600160a01b031681565b61006f6100c93660046103a9565b6101c9565b61006f6100dc3660046103a9565b6101fb565b6100e9610274565b6100f360006102d3565b565b6000546001600160a01b031690565b6001546001600160a01b031633146101585760405162461bcd60e51b815260206004820152601260248201527113db9b1e4818dbdc99481b585e4818d85b1b60721b60448201526064015b60405180910390fd5b600061016382610323565b60015460405161078f60e21b815260048101859052602481018390529192506001600160a01b031690611e3c90604401600060405180830381600087803b1580156101ad57600080fd5b505af11580156101c1573d6000803e3d6000fd5b505050505050565b6101d1610274565b6101d96100e1565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610203610274565b6001600160a01b0381166102685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161014f565b610271816102d3565b50565b3361027d6100f5565b6001600160a01b0316146100f35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161014f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60004282436103336001826103ef565b408361034060c882610408565b61034b90600161042a565b6040805160208101969096528501939093526060840191909152608083015260a082015260c00160405160208183030381529060405280519060200120915050919050565b6000602082840312156103a257600080fd5b5035919050565b6000602082840312156103bb57600080fd5b81356001600160a01b03811681146103d257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610402576104026103d9565b92915050565b60008261042557634e487b7160e01b600052601260045260246000fd5b500690565b80820180821115610402576104026103d956fea26469706673582212209566213cfb35a9c19c34bfd4d3772b00ae32a311e1f643fb5a187cddcd4ad9ed64736f6c63430008130033",
99
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c8063715018a6146100675780638da5cb5b14610071578063b628171a14610095578063e19133e2146100a8578063eaa76157146100bb578063f2fde38b146100ce575b600080fd5b61006f6100e1565b005b6100796100f5565b6040516001600160a01b03909116815260200160405180910390f35b61006f6100a3366004610390565b610104565b600154610079906001600160a01b031681565b61006f6100c93660046103a9565b6101c9565b61006f6100dc3660046103a9565b6101fb565b6100e9610274565b6100f360006102d3565b565b6000546001600160a01b031690565b6001546001600160a01b031633146101585760405162461bcd60e51b815260206004820152601260248201527113db9b1e4818dbdc99481b585e4818d85b1b60721b60448201526064015b60405180910390fd5b600061016382610323565b60015460405161078f60e21b815260048101859052602481018390529192506001600160a01b031690611e3c90604401600060405180830381600087803b1580156101ad57600080fd5b505af11580156101c1573d6000803e3d6000fd5b505050505050565b6101d1610274565b6101d96100e1565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610203610274565b6001600160a01b0381166102685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161014f565b610271816102d3565b50565b3361027d6100f5565b6001600160a01b0316146100f35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161014f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60004282436103336001826103ef565b408361034060c882610408565b61034b90600161042a565b6040805160208101969096528501939093526060840191909152608083015260a082015260c00160405160208183030381529060405280519060200120915050919050565b6000602082840312156103a257600080fd5b5035919050565b6000602082840312156103bb57600080fd5b81356001600160a01b03811681146103d257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610402576104026103d9565b92915050565b60008261042557634e487b7160e01b600052601260045260246000fd5b500690565b80820180821115610402576104026103d956fea26469706673582212209566213cfb35a9c19c34bfd4d3772b00ae32a311e1f643fb5a187cddcd4ad9ed64736f6c63430008130033",
98
+ "bytecode": "0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6104738061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c8063715018a6146100675780638da5cb5b14610071578063b628171a14610095578063e19133e2146100a8578063eaa76157146100bb578063f2fde38b146100ce575b600080fd5b61006f6100e1565b005b6100796100f5565b6040516001600160a01b03909116815260200160405180910390f35b61006f6100a3366004610390565b610104565b600154610079906001600160a01b031681565b61006f6100c93660046103a9565b6101c9565b61006f6100dc3660046103a9565b6101fb565b6100e9610274565b6100f360006102d3565b565b6000546001600160a01b031690565b6001546001600160a01b031633146101585760405162461bcd60e51b815260206004820152601260248201527113db9b1e4818dbdc99481b585e4818d85b1b60721b60448201526064015b60405180910390fd5b600061016382610323565b60015460405161078f60e21b815260048101859052602481018390529192506001600160a01b031690611e3c90604401600060405180830381600087803b1580156101ad57600080fd5b505af11580156101c1573d6000803e3d6000fd5b505050505050565b6101d1610274565b6101d96100e1565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610203610274565b6001600160a01b0381166102685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161014f565b610271816102d3565b50565b3361027d6100f5565b6001600160a01b0316146100f35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161014f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60004282436103336001826103ef565b408361034060c882610408565b61034b90600161042a565b6040805160208101969096528501939093526060840191909152608083015260a082015260c00160405160208183030381529060405280519060200120915050919050565b6000602082840312156103a257600080fd5b5035919050565b6000602082840312156103bb57600080fd5b81356001600160a01b03811681146103d257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610402576104026103d9565b92915050565b60008261042557634e487b7160e01b600052601260045260246000fd5b500690565b80820180821115610402576104026103d956fea264697066735822122019ba206e0df91e7ff68994d026a3aa70936b620c436502dd9927fb40839e625464736f6c63430008130033",
99
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c8063715018a6146100675780638da5cb5b14610071578063b628171a14610095578063e19133e2146100a8578063eaa76157146100bb578063f2fde38b146100ce575b600080fd5b61006f6100e1565b005b6100796100f5565b6040516001600160a01b03909116815260200160405180910390f35b61006f6100a3366004610390565b610104565b600154610079906001600160a01b031681565b61006f6100c93660046103a9565b6101c9565b61006f6100dc3660046103a9565b6101fb565b6100e9610274565b6100f360006102d3565b565b6000546001600160a01b031690565b6001546001600160a01b031633146101585760405162461bcd60e51b815260206004820152601260248201527113db9b1e4818dbdc99481b585e4818d85b1b60721b60448201526064015b60405180910390fd5b600061016382610323565b60015460405161078f60e21b815260048101859052602481018390529192506001600160a01b031690611e3c90604401600060405180830381600087803b1580156101ad57600080fd5b505af11580156101c1573d6000803e3d6000fd5b505050505050565b6101d1610274565b6101d96100e1565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b610203610274565b6001600160a01b0381166102685760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161014f565b610271816102d3565b50565b3361027d6100f5565b6001600160a01b0316146100f35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161014f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60004282436103336001826103ef565b408361034060c882610408565b61034b90600161042a565b6040805160208101969096528501939093526060840191909152608083015260a082015260c00160405160208183030381529060405280519060200120915050919050565b6000602082840312156103a257600080fd5b5035919050565b6000602082840312156103bb57600080fd5b81356001600160a01b03811681146103d257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610402576104026103d9565b92915050565b60008261042557634e487b7160e01b600052601260045260246000fd5b500690565b80820180821115610402576104026103d956fea264697066735822122019ba206e0df91e7ff68994d026a3aa70936b620c436502dd9927fb40839e625464736f6c63430008130033",
100
100
  "linkReferences": {},
101
101
  "deployedLinkReferences": {}
102
102
  }
@@ -240,8 +240,8 @@
240
240
  "type": "function"
241
241
  }
242
242
  ],
243
- "bytecode": "0x60a060405234801561001057600080fd5b5060405161089b38038061089b83398101604081905261002f9161006d565b6001600160a01b03811660808190526040517f2ad63d43bf15d4fb27447dac9430a7e357192317067d6a79f145ae0893867d2890600090a25061009d565b60006020828403121561007f57600080fd5b81516001600160a01b038116811461009657600080fd5b9392505050565b6080516107dc6100bf60003960008181610146015261054f01526107dc6000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c80638f2a62c31461007d5780639f8ac23f146100cb578063a6db8cb614610119578063b1aea8c91461012e578063b310c79214610141578063b628171a14610168578063dddceed11461017b578063eaedc4231461018e575b600080fd5b6100b661008b366004610683565b6001600160a01b03919091166000908152600160209081526040808320938352929052205460ff1690565b60405190151581526020015b60405180910390f35b6101016100d9366004610683565b6001600160a01b03918216600090815260026020908152604080832093835292905220541690565b6040516001600160a01b0390911681526020016100c2565b61012c610127366004610683565b6101de565b005b61012c61013c3660046106af565b610260565b6101017f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101763660046106f1565b6102cf565b61012c61018936600461070a565b610400565b6101c561019c366004610683565b6001600160a01b0391909116600090815260208181526040808320938352929052205460a01b90565b6040516001600160a01b031990911681526020016100c2565b6101e88282610454565b6001600160a01b0382166000818152600160209081526040808320858452825291829020805460ff19811660ff91821615908117909255835194855291840185905216151582820152517f459a9692be7991c0a9003b1503f8bae163cd2c99f35c952bf5b7b8d47629f6069181900360600190a15050565b61026a8383610454565b6001600160a01b03838116600081815260026020908152604080832087845290915280822080546001600160a01b0319169486169485179055518592917f3a32d746deba4ebe76a81771454e46f19940f56a24b0594a42356bcea6ac841491a4505050565b3360006102db8361050f565b6001600160a01b03831660009081526001602090815260408083208484529091528120549192509060ff161561034057506001600160a01b03821660009081526020818152604080832086845290915290205460a01b6001600160a01b03191661034d565b61034a8385610524565b90505b600081900361039d5760405162461bcd60e51b815260206004820152601760248201527613db9b1e481b9bdb8b5e995c9bc81a185cda081cd95959604a1b60448201526064015b60405180910390fd5b60405161078f60e21b815260048101859052602481018290526001600160a01b03841690611e3c90604401600060405180830381600087803b1580156103e257600080fd5b505af11580156103f6573d6000803e3d6000fd5b5050505050505050565b600061040b8361050f565b905061041784826105f7565b506001600160a01b03929092166000908152602081815260408083209383529290522080546001600160601b03191660a09290921c919091179055565b60405163a47d29cb60e01b8152600481018290526001600160a01b0383169063a47d29cb90602401602060405180830381865afa158015610499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bd919061074e565b6001600160a01b0316336001600160a01b03161461050b5760405162461bcd60e51b815260206004820152600b60248201526a13db9b1e48105c9d1a5cdd60aa1b6044820152606401610394565b5050565b600061051e620f42408361076b565b92915050565b6040516001600160601b0319606084901b166020820152603481018290526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358fb597c90605401604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016105ad91815260200190565b6020604051808303816000875af11580156105cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f0919061078d565b9392505050565b6001600160a01b03828116600090815260026020908152604080832085845290915290205416331461050b5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79204861736820536565642053657474657220436f6e747261637400006044820152606401610394565b6001600160a01b038116811461068057600080fd5b50565b6000806040838503121561069657600080fd5b82356106a18161066b565b946020939093013593505050565b6000806000606084860312156106c457600080fd5b83356106cf8161066b565b92506020840135915060408401356106e68161066b565b809150509250925092565b60006020828403121561070357600080fd5b5035919050565b60008060006060848603121561071f57600080fd5b833561072a8161066b565b92506020840135915060408401356001600160a01b0319811681146106e657600080fd5b60006020828403121561076057600080fd5b81516105f08161066b565b60008261078857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561079f57600080fd5b505191905056fea264697066735822122037f36cd005b7a80cf4c45386888c9e5b325433ed813d054688341b923dd1ee0964736f6c63430008130033",
244
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c80638f2a62c31461007d5780639f8ac23f146100cb578063a6db8cb614610119578063b1aea8c91461012e578063b310c79214610141578063b628171a14610168578063dddceed11461017b578063eaedc4231461018e575b600080fd5b6100b661008b366004610683565b6001600160a01b03919091166000908152600160209081526040808320938352929052205460ff1690565b60405190151581526020015b60405180910390f35b6101016100d9366004610683565b6001600160a01b03918216600090815260026020908152604080832093835292905220541690565b6040516001600160a01b0390911681526020016100c2565b61012c610127366004610683565b6101de565b005b61012c61013c3660046106af565b610260565b6101017f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101763660046106f1565b6102cf565b61012c61018936600461070a565b610400565b6101c561019c366004610683565b6001600160a01b0391909116600090815260208181526040808320938352929052205460a01b90565b6040516001600160a01b031990911681526020016100c2565b6101e88282610454565b6001600160a01b0382166000818152600160209081526040808320858452825291829020805460ff19811660ff91821615908117909255835194855291840185905216151582820152517f459a9692be7991c0a9003b1503f8bae163cd2c99f35c952bf5b7b8d47629f6069181900360600190a15050565b61026a8383610454565b6001600160a01b03838116600081815260026020908152604080832087845290915280822080546001600160a01b0319169486169485179055518592917f3a32d746deba4ebe76a81771454e46f19940f56a24b0594a42356bcea6ac841491a4505050565b3360006102db8361050f565b6001600160a01b03831660009081526001602090815260408083208484529091528120549192509060ff161561034057506001600160a01b03821660009081526020818152604080832086845290915290205460a01b6001600160a01b03191661034d565b61034a8385610524565b90505b600081900361039d5760405162461bcd60e51b815260206004820152601760248201527613db9b1e481b9bdb8b5e995c9bc81a185cda081cd95959604a1b60448201526064015b60405180910390fd5b60405161078f60e21b815260048101859052602481018290526001600160a01b03841690611e3c90604401600060405180830381600087803b1580156103e257600080fd5b505af11580156103f6573d6000803e3d6000fd5b5050505050505050565b600061040b8361050f565b905061041784826105f7565b506001600160a01b03929092166000908152602081815260408083209383529290522080546001600160601b03191660a09290921c919091179055565b60405163a47d29cb60e01b8152600481018290526001600160a01b0383169063a47d29cb90602401602060405180830381865afa158015610499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bd919061074e565b6001600160a01b0316336001600160a01b03161461050b5760405162461bcd60e51b815260206004820152600b60248201526a13db9b1e48105c9d1a5cdd60aa1b6044820152606401610394565b5050565b600061051e620f42408361076b565b92915050565b6040516001600160601b0319606084901b166020820152603481018290526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358fb597c90605401604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016105ad91815260200190565b6020604051808303816000875af11580156105cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f0919061078d565b9392505050565b6001600160a01b03828116600090815260026020908152604080832085845290915290205416331461050b5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79204861736820536565642053657474657220436f6e747261637400006044820152606401610394565b6001600160a01b038116811461068057600080fd5b50565b6000806040838503121561069657600080fd5b82356106a18161066b565b946020939093013593505050565b6000806000606084860312156106c457600080fd5b83356106cf8161066b565b92506020840135915060408401356106e68161066b565b809150509250925092565b60006020828403121561070357600080fd5b5035919050565b60008060006060848603121561071f57600080fd5b833561072a8161066b565b92506020840135915060408401356001600160a01b0319811681146106e657600080fd5b60006020828403121561076057600080fd5b81516105f08161066b565b60008261078857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561079f57600080fd5b505191905056fea264697066735822122037f36cd005b7a80cf4c45386888c9e5b325433ed813d054688341b923dd1ee0964736f6c63430008130033",
243
+ "bytecode": "0x60a060405234801561001057600080fd5b5060405161089b38038061089b83398101604081905261002f9161006d565b6001600160a01b03811660808190526040517f2ad63d43bf15d4fb27447dac9430a7e357192317067d6a79f145ae0893867d2890600090a25061009d565b60006020828403121561007f57600080fd5b81516001600160a01b038116811461009657600080fd5b9392505050565b6080516107dc6100bf60003960008181610146015261054f01526107dc6000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c80638f2a62c31461007d5780639f8ac23f146100cb578063a6db8cb614610119578063b1aea8c91461012e578063b310c79214610141578063b628171a14610168578063dddceed11461017b578063eaedc4231461018e575b600080fd5b6100b661008b366004610683565b6001600160a01b03919091166000908152600160209081526040808320938352929052205460ff1690565b60405190151581526020015b60405180910390f35b6101016100d9366004610683565b6001600160a01b03918216600090815260026020908152604080832093835292905220541690565b6040516001600160a01b0390911681526020016100c2565b61012c610127366004610683565b6101de565b005b61012c61013c3660046106af565b610260565b6101017f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101763660046106f1565b6102cf565b61012c61018936600461070a565b610400565b6101c561019c366004610683565b6001600160a01b0391909116600090815260208181526040808320938352929052205460a01b90565b6040516001600160a01b031990911681526020016100c2565b6101e88282610454565b6001600160a01b0382166000818152600160209081526040808320858452825291829020805460ff19811660ff91821615908117909255835194855291840185905216151582820152517f459a9692be7991c0a9003b1503f8bae163cd2c99f35c952bf5b7b8d47629f6069181900360600190a15050565b61026a8383610454565b6001600160a01b03838116600081815260026020908152604080832087845290915280822080546001600160a01b0319169486169485179055518592917f3a32d746deba4ebe76a81771454e46f19940f56a24b0594a42356bcea6ac841491a4505050565b3360006102db8361050f565b6001600160a01b03831660009081526001602090815260408083208484529091528120549192509060ff161561034057506001600160a01b03821660009081526020818152604080832086845290915290205460a01b6001600160a01b03191661034d565b61034a8385610524565b90505b600081900361039d5760405162461bcd60e51b815260206004820152601760248201527613db9b1e481b9bdb8b5e995c9bc81a185cda081cd95959604a1b60448201526064015b60405180910390fd5b60405161078f60e21b815260048101859052602481018290526001600160a01b03841690611e3c90604401600060405180830381600087803b1580156103e257600080fd5b505af11580156103f6573d6000803e3d6000fd5b5050505050505050565b600061040b8361050f565b905061041784826105f7565b506001600160a01b03929092166000908152602081815260408083209383529290522080546001600160601b03191660a09290921c919091179055565b60405163a47d29cb60e01b8152600481018290526001600160a01b0383169063a47d29cb90602401602060405180830381865afa158015610499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bd919061074e565b6001600160a01b0316336001600160a01b03161461050b5760405162461bcd60e51b815260206004820152600b60248201526a13db9b1e48105c9d1a5cdd60aa1b6044820152606401610394565b5050565b600061051e620f42408361076b565b92915050565b6040516001600160601b0319606084901b166020820152603481018290526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358fb597c90605401604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016105ad91815260200190565b6020604051808303816000875af11580156105cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f0919061078d565b9392505050565b6001600160a01b03828116600090815260026020908152604080832085845290915290205416331461050b5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79204861736820536565642053657474657220436f6e747261637400006044820152606401610394565b6001600160a01b038116811461068057600080fd5b50565b6000806040838503121561069657600080fd5b82356106a18161066b565b946020939093013593505050565b6000806000606084860312156106c457600080fd5b83356106cf8161066b565b92506020840135915060408401356106e68161066b565b809150509250925092565b60006020828403121561070357600080fd5b5035919050565b60008060006060848603121561071f57600080fd5b833561072a8161066b565b92506020840135915060408401356001600160a01b0319811681146106e657600080fd5b60006020828403121561076057600080fd5b81516105f08161066b565b60008261078857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561079f57600080fd5b505191905056fea2646970667358221220ff7dcb586361ada8cbec0c58d78ec47205d64a2ff9ce40a5360c8c4d81d9624164736f6c63430008130033",
244
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100785760003560e01c80638f2a62c31461007d5780639f8ac23f146100cb578063a6db8cb614610119578063b1aea8c91461012e578063b310c79214610141578063b628171a14610168578063dddceed11461017b578063eaedc4231461018e575b600080fd5b6100b661008b366004610683565b6001600160a01b03919091166000908152600160209081526040808320938352929052205460ff1690565b60405190151581526020015b60405180910390f35b6101016100d9366004610683565b6001600160a01b03918216600090815260026020908152604080832093835292905220541690565b6040516001600160a01b0390911681526020016100c2565b61012c610127366004610683565b6101de565b005b61012c61013c3660046106af565b610260565b6101017f000000000000000000000000000000000000000000000000000000000000000081565b61012c6101763660046106f1565b6102cf565b61012c61018936600461070a565b610400565b6101c561019c366004610683565b6001600160a01b0391909116600090815260208181526040808320938352929052205460a01b90565b6040516001600160a01b031990911681526020016100c2565b6101e88282610454565b6001600160a01b0382166000818152600160209081526040808320858452825291829020805460ff19811660ff91821615908117909255835194855291840185905216151582820152517f459a9692be7991c0a9003b1503f8bae163cd2c99f35c952bf5b7b8d47629f6069181900360600190a15050565b61026a8383610454565b6001600160a01b03838116600081815260026020908152604080832087845290915280822080546001600160a01b0319169486169485179055518592917f3a32d746deba4ebe76a81771454e46f19940f56a24b0594a42356bcea6ac841491a4505050565b3360006102db8361050f565b6001600160a01b03831660009081526001602090815260408083208484529091528120549192509060ff161561034057506001600160a01b03821660009081526020818152604080832086845290915290205460a01b6001600160a01b03191661034d565b61034a8385610524565b90505b600081900361039d5760405162461bcd60e51b815260206004820152601760248201527613db9b1e481b9bdb8b5e995c9bc81a185cda081cd95959604a1b60448201526064015b60405180910390fd5b60405161078f60e21b815260048101859052602481018290526001600160a01b03841690611e3c90604401600060405180830381600087803b1580156103e257600080fd5b505af11580156103f6573d6000803e3d6000fd5b5050505050505050565b600061040b8361050f565b905061041784826105f7565b506001600160a01b03929092166000908152602081815260408083209383529290522080546001600160601b03191660a09290921c919091179055565b60405163a47d29cb60e01b8152600481018290526001600160a01b0383169063a47d29cb90602401602060405180830381865afa158015610499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bd919061074e565b6001600160a01b0316336001600160a01b03161461050b5760405162461bcd60e51b815260206004820152600b60248201526a13db9b1e48105c9d1a5cdd60aa1b6044820152606401610394565b5050565b600061051e620f42408361076b565b92915050565b6040516001600160601b0319606084901b166020820152603481018290526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906358fb597c90605401604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016105ad91815260200190565b6020604051808303816000875af11580156105cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f0919061078d565b9392505050565b6001600160a01b03828116600090815260026020908152604080832085845290915290205416331461050b5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c79204861736820536565642053657474657220436f6e747261637400006044820152606401610394565b6001600160a01b038116811461068057600080fd5b50565b6000806040838503121561069657600080fd5b82356106a18161066b565b946020939093013593505050565b6000806000606084860312156106c457600080fd5b83356106cf8161066b565b92506020840135915060408401356106e68161066b565b809150509250925092565b60006020828403121561070357600080fd5b5035919050565b60008060006060848603121561071f57600080fd5b833561072a8161066b565b92506020840135915060408401356001600160a01b0319811681146106e657600080fd5b60006020828403121561076057600080fd5b81516105f08161066b565b60008261078857634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561079f57600080fd5b505191905056fea2646970667358221220ff7dcb586361ada8cbec0c58d78ec47205d64a2ff9ce40a5360c8c4d81d9624164736f6c63430008130033",
245
245
  "linkReferences": {},
246
246
  "deployedLinkReferences": {}
247
247
  }
@@ -0,0 +1,103 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ pragma solidity 0.8.22;
3
+
4
+ // Created By: Art Blocks Inc.
5
+
6
+ import {IBytecodeStorageReaderV2} from "../interfaces/v0.8.x/IBytecodeStorageReaderV2.sol";
7
+
8
+ import {BytecodeStorageReader} from "../libs/v0.8.x/BytecodeStorageV2.sol";
9
+
10
+ /**
11
+ * @title Art Blocks Bytecode Storage Reader Contract V2
12
+ * @author Art Blocks Inc.
13
+ * @notice This contract is used to read the bytecode of a contract deployed by Art Blocks' BytecodeStorage library,
14
+ * for versions 0, 1, and 2 of the Art Blocks BytecodeStorage library.
15
+ * It is permissionless and can be used by anyone to read the bytecode of any contract deployed by Art Blocks.
16
+ * Future versions of BytecodeStorage will not be compatible with this reader.
17
+ * For a single location to read current and future versions of the Art Blocks BytecodeStorage library, see
18
+ * the UniversalBytecodeStorageReader contract, maintained by the Art Blocks team.
19
+ * Additional functionality is provided to read bytes data stored using the SSTORE2 library.
20
+ * This contract also provides an interface to read additional metadata stored by the Art Blocks BytecodeStorage
21
+ * library, such as the contract's version, deployer, and other metadata.
22
+ * @dev For simplicity and reduce code changes, this contract uses the BytecodeStorageReader external library to
23
+ * perform many operations. Future reader contract versions may choose to make the library internal to this contract to
24
+ * improve read operation performance.
25
+ */
26
+ contract BytecodeStorageReaderContractV2 is IBytecodeStorageReaderV2 {
27
+ using BytecodeStorageReader for address;
28
+
29
+ string public constant VERSION = "BytecodeStorageReaderContractV2";
30
+
31
+ /**
32
+ * @notice Read a string from a data contract deployed via BytecodeStorage V2 or earlier.
33
+ * @param address_ address of contract deployed via BytecodeStorage to be read
34
+ * @return The string data stored at the specific address.
35
+ */
36
+ function readFromBytecode(
37
+ address address_
38
+ ) external view returns (string memory) {
39
+ return address_.readFromBytecode();
40
+ }
41
+
42
+ /**
43
+ * @notice Read a bytes array from the SSTORE2-formatted bytecode of a contract.
44
+ * Note that this function is only compatible with contracts that have been deployed using the popular SSTORE2
45
+ * library.
46
+ * @param address_ address of contract with SSTORE2-formatted bytecode to be read
47
+ * @return data The bytes data stored at the specific address.
48
+ */
49
+ function readBytesFromSSTORE2Bytecode(
50
+ address address_
51
+ ) external view returns (bytes memory) {
52
+ return address_.readBytesFromSSTORE2Bytecode();
53
+ }
54
+
55
+ /**
56
+ * @notice Read a bytes array from the a contract deployed via BytecodeStorage V2 or earlier.
57
+ * @param address_ address of contract with valid bytecode to be read
58
+ * @param offset offset to read from in contract bytecode, explicitly provided (not calculated)
59
+ * @return The bytes data stored at the specific address.
60
+ */
61
+ function readBytesFromBytecode(
62
+ address address_,
63
+ uint256 offset
64
+ ) external view returns (bytes memory) {
65
+ return address_.readBytesFromBytecode(offset);
66
+ }
67
+
68
+ //------ Metadata Functions ------//
69
+
70
+ /**
71
+ * @notice Get address of deployer for given contract deployed via BytecodeStorage V2 or earlier.
72
+ * @param address_ address of deployed contract
73
+ * @return writerAddress address of deployer
74
+ */
75
+ function getWriterAddressForBytecode(
76
+ address address_
77
+ ) external view returns (address) {
78
+ return address_.getWriterAddressForBytecode();
79
+ }
80
+
81
+ /**
82
+ * @notice Get version for given contract deployed via BytecodeStorage V2 or earlier.
83
+ * @param address_ address of deployed contract
84
+ * @return version version of the contract
85
+ */
86
+ function getLibraryVersionForBytecode(
87
+ address address_
88
+ ) external view returns (bytes32) {
89
+ return address_.getLibraryVersionForBytecode();
90
+ }
91
+
92
+ /**
93
+ * @notice Get if data are stored in compressed format for given contract deployed via BytecodeStorage V2 or
94
+ * earlier.
95
+ * @param _address address of deployed contract
96
+ * @return isCompressed boolean indicating if the stored data are compressed
97
+ */
98
+ function getIsCompressedForBytecode(
99
+ address _address
100
+ ) external view returns (bool) {
101
+ return _address.getIsCompressedForBytecode();
102
+ }
103
+ }
@@ -0,0 +1,70 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ pragma solidity 0.8.22;
3
+
4
+ // Created By: Art Blocks Inc.
5
+
6
+ import {IUniversalBytecodeStorageReader} from "../interfaces/v0.8.x/IUniversalBytecodeStorageReader.sol";
7
+
8
+ import {IBytecodeStorageReader_Base} from "../interfaces/v0.8.x/IBytecodeStorageReader_Base.sol";
9
+
10
+ import "@openzeppelin-5.0/contracts/access/Ownable.sol";
11
+
12
+ /**
13
+ * @title Art Blocks Universal Bytecode Storage Reader
14
+ * @author Art Blocks Inc.
15
+ * @notice This contract is used to read the bytecode of a contract deployed by Art Blocks' BytecodeStorage library.
16
+ * It is designed to be owned and configurable by a Art Blocks secure multisig wallet, providing a single location
17
+ * to read on-chain data stored by the Art Blocks BytecodeStorage libarary. This contract is intended to be updated
18
+ * as new versions of the Art Blocks BytecodeStorage library are released, such that the Art Blocks community can
19
+ * continue to read the bytecode of all existing and future Art Blocks contracts in a single location.
20
+ * The exposed interface is simplified to only include the read string function.
21
+ * Additional functionality, such as alternate read methods or determining a contract's version, deployer, and other
22
+ * metadata, may be available on the active BytecodeStorageReader contract.
23
+ */
24
+ contract UniversalBytecodeStorageReader is
25
+ Ownable,
26
+ IUniversalBytecodeStorageReader
27
+ {
28
+ /**
29
+ * @notice The active bytecode storage reader contract being used by this universal reader.
30
+ * Updateable by the owner of this contract.
31
+ * This contract is intended to be updated as new versions of the Art Blocks BytecodeStorage library are released.
32
+ * @dev To prevent a single point of failure, contracts may point directly to BytecodeStorageReader contracts
33
+ * instead of this universal reader.
34
+ */
35
+ IBytecodeStorageReader_Base public activeBytecodeStorageReaderContract;
36
+
37
+ /**
38
+ * @notice Construct a new UniversalBytecodeStorageReader contract, owned by input owner address.
39
+ * @param owner_ The address that will be set as the owner of this contract.
40
+ */
41
+ constructor(address owner_) Ownable(owner_) {}
42
+
43
+ /**
44
+ * @notice Update the active bytecode storage reader contract being used by this universal reader.
45
+ * @param newBytecodeStorageReaderContract The address of the new active bytecode storage reader contract.
46
+ */
47
+ function updateBytecodeStorageReaderContract(
48
+ IBytecodeStorageReader_Base newBytecodeStorageReaderContract
49
+ ) external onlyOwner {
50
+ activeBytecodeStorageReaderContract = newBytecodeStorageReaderContract;
51
+ emit ReaderUpdated({
52
+ activeReader: address(newBytecodeStorageReaderContract)
53
+ });
54
+ }
55
+
56
+ /**
57
+ * @notice Read a string from a data contract deployed via BytecodeStorage.
58
+ * @dev may also support reading additional stored data formats in the future.
59
+ * @param address_ address of contract deployed via BytecodeStorage to be read
60
+ * @return The string data stored at the specific address.
61
+ */
62
+ function readFromBytecode(
63
+ address address_
64
+ ) external view returns (string memory) {
65
+ return
66
+ activeBytecodeStorageReaderContract.readFromBytecode({
67
+ address_: address_
68
+ });
69
+ }
70
+ }
@@ -0,0 +1,69 @@
1
+ // SPDX-License-Identifier: LGPL-3.0-only
2
+ pragma solidity 0.8.22;
3
+
4
+ // Created By: Art Blocks Inc.
5
+ import "./libs/v0.8.x/BytecodeStorageV2.sol";
6
+
7
+ /**
8
+ * @title Art Blocks Storage Writer
9
+ * @author Art Blocks Inc.
10
+ * @notice A simple contract that with a single function that uses
11
+ * the BytecodeStorageV1 library to write a string to bytecode storage.
12
+ */
13
+ contract BytecodeStorageV2Writer {
14
+ using BytecodeStorageWriter for bytes;
15
+ using BytecodeStorageReader for string;
16
+
17
+ event StorageContractCreated(address indexed storageContract);
18
+
19
+ function _onlyNonEmptyString(string memory _string) internal pure {
20
+ if (bytes(_string).length == 0) {
21
+ revert("String must be non-empty");
22
+ }
23
+ }
24
+
25
+ /**
26
+ * @notice Write a string to bytecode storage.
27
+ * @param _string The string to write to bytecode storage.
28
+ * @dev This function emits an event with the address of the newly created
29
+ * storage contract.
30
+ */
31
+ function writeStringToBytecodeStorage(string memory _string) public {
32
+ address storageContract = BytecodeStorageWriter.writeToBytecode(
33
+ _string
34
+ );
35
+ emit StorageContractCreated(storageContract);
36
+ }
37
+
38
+ /**
39
+ * @notice Write a pre-compressed string to bytecode storage. The string
40
+ * should be compressed using `getCompressed`. This function stores the string
41
+ * in a compressed format on-chain. For reads, the compressed string is
42
+ * decompressed on-chain, ensuring the original text is reconstructed without
43
+ * external dependencies.
44
+ * @param _compressedString Pre-compressed string to be stored.
45
+ * Required to be non-empty, but no further validation is performed.
46
+ * @dev This function emits an event with the address of the newly created
47
+ * storage contract.
48
+ */
49
+ function writeCompressedStringToBytecodeStorage(
50
+ bytes memory _compressedString
51
+ ) public {
52
+ address storageContract = BytecodeStorageWriter
53
+ .writeToBytecodeCompressed(_compressedString);
54
+ emit StorageContractCreated(storageContract);
55
+ }
56
+
57
+ /**
58
+ * @notice Returns the compressed form of a string in bytes using solady LibZip's flz compress algorithm.
59
+ * The bytes output from this function are intended to be used as input to `writeCompressedStringToBytecodeStorage`.
60
+ * @param _string String to be compressed. Required to be a non-empty string, but no further validaton is performed.
61
+ * @return bytes compressed bytes
62
+ */
63
+ function getCompressed(
64
+ string memory _string
65
+ ) external pure returns (bytes memory) {
66
+ _onlyNonEmptyString(_string);
67
+ return BytecodeStorageReader.getCompressed(_string);
68
+ }
69
+ }