@artblocks/contracts 1.0.1 → 1.0.2

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 (87) hide show
  1. package/.env.example +8 -1
  2. package/README.md +42 -157
  3. package/artifacts/contracts/AdminACLV1.sol/AdminACLV1.json +2 -2
  4. package/artifacts/contracts/DependencyRegistryV0.sol/DependencyRegistryV0.json +2 -2
  5. package/artifacts/contracts/GenArt721CoreV3.sol/GenArt721CoreV3.json +2 -2
  6. package/artifacts/contracts/GenArt721CoreV3_Engine.sol/GenArt721CoreV3_Engine.json +2 -2
  7. package/artifacts/contracts/GenArt721CoreV3_Engine_Flex.sol/GenArt721CoreV3_Engine_Flex.json +2229 -0
  8. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV2.sol/MinterDAExpV2.json +2 -2
  9. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExp/MinterDAExpV3.sol/MinterDAExpV3.json +2 -2
  10. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV0.sol/MinterDAExpSettlementV0.json +2 -2
  11. package/artifacts/contracts/archive/minter-suite/Minters/MinterDAExpSettlement/MinterDAExpSettlementV1.sol/MinterDAExpSettlementV1.json +2 -2
  12. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV2.sol/MinterDALinV2.json +2 -2
  13. package/artifacts/contracts/archive/minter-suite/Minters/MinterDALin/MinterDALinV3.sol/MinterDALinV3.json +2 -2
  14. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV1.sol/MinterHolderV1.json +2 -2
  15. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV2.sol/MinterHolderV2.json +2 -2
  16. package/artifacts/contracts/archive/minter-suite/Minters/MinterHolder/MinterHolderV3.sol/MinterHolderV3.json +2 -2
  17. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV1.sol/MinterMerkleV1.json +2 -2
  18. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV2.sol/MinterMerkleV2.json +2 -2
  19. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV3.sol/MinterMerkleV3.json +2 -2
  20. package/artifacts/contracts/archive/minter-suite/Minters/MinterMerkle/MinterMerkleV4.sol/MinterMerkleV4.json +2 -2
  21. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV2.sol/MinterSetPriceV2.json +2 -2
  22. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPrice/MinterSetPriceV3.sol/MinterSetPriceV3.json +2 -2
  23. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V2.sol/MinterSetPriceERC20V2.json +2 -2
  24. package/artifacts/contracts/archive/minter-suite/Minters/MinterSetPriceERC20/MinterSetPriceERC20V3.sol/MinterSetPriceERC20V3.json +2 -2
  25. package/artifacts/contracts/explorations/GenArt721CoreV3_Explorations.sol/GenArt721CoreV3_Explorations.json +2 -2
  26. package/artifacts/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol/IFilteredMinterSEAV0.json +1032 -0
  27. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3.sol/IGenArt721CoreContractV3.json +149 -0
  28. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol/IGenArt721CoreContractV3_Base.json +149 -0
  29. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol/IGenArt721CoreContractV3_Engine.json +130 -0
  30. package/artifacts/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol/IGenArt721CoreContractV3_Engine_Flex.json +1066 -0
  31. package/artifacts/contracts/interfaces/0.8.x/IWETH.sol/IWETH.json +55 -0
  32. package/artifacts/contracts/libs/integration-refs/weth9/weth9.sol/WETH9_.json +295 -0
  33. package/artifacts/contracts/minter-suite/MinterFilter/MinterFilterV1.sol/MinterFilterV1.json +2 -2
  34. package/artifacts/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol/MinterDAExpSettlementV2.json +2 -2
  35. package/artifacts/contracts/minter-suite/Minters/MinterDAExpV4.sol/MinterDAExpV4.json +2 -2
  36. package/artifacts/contracts/minter-suite/Minters/MinterDALinV4.sol/MinterDALinV4.json +2 -2
  37. package/artifacts/contracts/minter-suite/Minters/MinterHolderV4.sol/MinterHolderV4.json +2 -2
  38. package/artifacts/contracts/minter-suite/Minters/MinterMerkleV5.sol/MinterMerkleV5.json +2 -2
  39. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/IGenArt721CoreContractV3WithRandomizer.json +130 -0
  40. package/artifacts/contracts/minter-suite/Minters/MinterPolyptychV0.sol/MinterPolyptychV0.json +2 -2
  41. package/artifacts/contracts/minter-suite/Minters/MinterSEAV0.sol/MinterSEAV0.json +1310 -0
  42. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol/MinterSetPriceERC20V4.json +2 -2
  43. package/artifacts/contracts/minter-suite/Minters/MinterSetPriceV4.sol/MinterSetPriceV4.json +2 -2
  44. package/artifacts/contracts/mock/DeadReceiverBidderMock.sol/DeadReceiverBidderMock.json +33 -0
  45. package/artifacts/contracts/mock/GasLimitReceiverBidderMock.sol/GasLimitReceiverBidderMock.json +46 -0
  46. package/artifacts/contracts/mock/GasLimitReceiverMock.sol/GasLimitReceiverMock.json +28 -0
  47. package/artifacts/contracts/mock/GenArt721CoreV3_Engine_IncorrectCoreType.sol/GenArt721CoreV3_Engine_IncorrectCoreType.json +2 -2
  48. package/artifacts/contracts/mock/RandomizerV2_NoAssignMock.sol/RandomizerV2_NoAssignMock.json +2 -2
  49. package/artifacts/contracts/mock/ReentrancySEAMock.sol/ReentrancySEAAutoBidderMock.json +51 -0
  50. package/artifacts/contracts/{BasicRandomizer.sol → randomizer/BasicRandomizer.sol}/BasicRandomizer.json +3 -3
  51. package/artifacts/contracts/randomizer/BasicRandomizerBase_v0_0_0.sol/RandomizerBase.json +10 -0
  52. package/artifacts/contracts/randomizer/PolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +229 -0
  53. package/artifacts/contracts/randomizer/RandomizerV2.sol/BasicRandomizerV2.json +102 -0
  54. package/artifacts/contracts/royalty-registry/GenArt721RoyaltyOverride.sol/GenArt721RoyaltyOverride.json +2 -2
  55. package/contracts/DependencyRegistryV0.sol +74 -113
  56. package/contracts/GenArt721CoreV3.sol +124 -171
  57. package/contracts/GenArt721CoreV3_Engine.sol +136 -198
  58. package/contracts/GenArt721CoreV3_Engine_Flex.sol +2274 -0
  59. package/contracts/explorations/GenArt721CoreV3_Explorations.sol +147 -176
  60. package/contracts/interfaces/0.8.x/IFilteredMinterSEAV0.sol +145 -0
  61. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Base.sol +39 -0
  62. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine.sol +0 -3
  63. package/contracts/interfaces/0.8.x/IGenArt721CoreContractV3_Engine_Flex.sol +132 -0
  64. package/contracts/interfaces/0.8.x/IWETH.sol +11 -0
  65. package/contracts/libs/integration-refs/weth9/weth9.sol +763 -0
  66. package/contracts/minter-suite/MinterFilter/MinterFilterV1.sol +35 -47
  67. package/contracts/minter-suite/Minters/MinterDAExpSettlementV2.sol +26 -34
  68. package/contracts/minter-suite/Minters/MinterDAExpV4.sol +16 -21
  69. package/contracts/minter-suite/Minters/MinterDALinV4.sol +15 -17
  70. package/contracts/minter-suite/Minters/MinterHolderV4.sol +19 -19
  71. package/contracts/minter-suite/Minters/MinterMerkleV5.sol +13 -15
  72. package/contracts/minter-suite/Minters/MinterPolyptychV0.sol +23 -23
  73. package/contracts/minter-suite/Minters/MinterSEAV0.sol +1224 -0
  74. package/contracts/minter-suite/Minters/MinterSetPriceERC20V4.sol +11 -11
  75. package/contracts/minter-suite/Minters/MinterSetPriceV4.sol +9 -10
  76. package/contracts/mock/DeadReceiverBidderMock.sol +23 -0
  77. package/contracts/mock/GasLimitReceiverBidderMock.sol +23 -0
  78. package/contracts/mock/GasLimitReceiverMock.sol +19 -0
  79. package/contracts/mock/RandomizerV2_NoAssignMock.sol +2 -11
  80. package/contracts/mock/ReentrancySEAMock.sol +36 -0
  81. package/contracts/{BasicRandomizer.sol → randomizer/BasicRandomizer.sol} +1 -1
  82. package/contracts/randomizer/BasicRandomizerBase_v0_0_0.sol +23 -0
  83. package/contracts/{BasicPolyptychRandomizerV0.sol → randomizer/PolyptychRandomizerV0.sol} +19 -28
  84. package/contracts/{BasicRandomizerV2.sol → randomizer/RandomizerV2.sol} +5 -13
  85. package/package.json +27 -14
  86. package/artifacts/contracts/BasicPolyptychRandomizerV0.sol/BasicPolyptychRandomizerV0.json +0 -229
  87. package/artifacts/contracts/BasicRandomizerV2.sol/BasicRandomizerV2.json +0 -102
package/.env.example CHANGED
@@ -7,4 +7,11 @@ TESTNET_PRIVATE_KEY=
7
7
  ETHERSCAN_API_KEY=
8
8
  AWS_ACCESS_KEY_ID=
9
9
  AWS_SECRET_ACCESS_KEY=
10
- COINMARKETCAP_API_KEY=
10
+ COINMARKETCAP_API_KEY=
11
+ # The following are only required if using Art Blocks Deployment Scripts
12
+ GRAPHQL_API_ENDPOINT_DEV=
13
+ HASURA_ADMIN_SECRET_DEV=
14
+ GRAPHQL_API_ENDPOINT_STAGING=
15
+ HASURA_ADMIN_SECRET_STAGING=
16
+ GRAPHQL_API_ENDPOINT_MAINNET=
17
+ HASURA_ADMIN_SECRET_MAINNET=
package/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  [![CircleCI](https://circleci.com/gh/ArtBlocks/artblocks-contracts/tree/main.svg?style=svg&circle-token=757a2689792bc9c126834396d6fa47e8f023bc2d)](https://circleci.com/gh/ArtBlocks/artblocks-contracts/tree/main)
4
4
 
5
+ [![GitPOAPs](https://public-api.gitpoap.io/v1/repo/ArtBlocks/artblocks-contracts/badge)](https://www.gitpoap.io/gh/ArtBlocks/artblocks-contracts)
5
6
  [![Coverage Status](https://coveralls.io/repos/github/ArtBlocks/artblocks-contracts/badge.svg?branch=main)](https://coveralls.io/github/ArtBlocks/artblocks-contracts?branch=main)
6
7
 
7
8
  A collection of smart contracts used by [Art Blocks](https://artblocks.io) for our flagship product, as well as Artblocks Engine products.
@@ -54,23 +55,38 @@ In addition to meeting our style guidelines, all code must pass all tests and be
54
55
 
55
56
  # Documentation
56
57
 
57
- Documentation for contracts us deployed via GitHub pages at: https://artblocks.github.io/artblocks-contracts/
58
+ ## auto-generated contract docs (via NatSpec)
59
+
60
+ Documentation for contracts is deployed via GitHub pages at: https://artblocks.github.io/artblocks-contracts/
58
61
 
59
62
  Documentation for contracts may also be generated via `yarn docgen`. Most Art Blocks contracts use [NatSpec](https://docs.soliditylang.org/en/v0.8.9/natspec-format.html#documentation-example) comments to automatically enrich generated documentation. Some contracts use [dynamic expressions](https://docs.soliditylang.org/en/v0.8.9/natspec-format.html#dynamic-expressions) to improve user experience.
60
63
 
64
+ ## Art Blocks V3 Contract Architecture
65
+
66
+ For a high-level overview of the Art Blocks V3 contract architecture, see the [V3 Contract Architecture page](./V3_ARCHITECTURE.md).
67
+
61
68
  # Deployments
62
69
 
63
70
  ## Deploying New Contracts
64
71
 
65
- Deployment script templates are located in the `./scripts` directory. To run a deployment script `deploy.ts`:
66
-
67
72
  > IMPORTANT - many scripts rely on typechain-generated factories, so ensure you have run `yarn generate:typechain` before running any deployment scripts.
68
73
 
74
+ We have two types of deployment scripts: Generic and Specific.
75
+
76
+ Generic deployment scripts are located in the `./scripts` directory. These scripts are used to deploy contracts that are not specific to a particular deployment. Generic deployment scripts are used to deploy contracts that are used by multiple partners or core contracts, such as the `Art Blocks Engine` contracts, or minters. Generic scripts take an input json file, located in the `/deployents/` directory, and execute the deployment as defined in the input file. In general, there are scripts prepared to run generic deployments for all networks and environments. For example, the following can be used to deploy the `Art Blocks Engine` contracts to the `goerli` test network (note that an input configuration is also required for all generic deployments.):
77
+
78
+ ```bash
79
+ yarn deploy:dev:v3-engine
69
80
  ```
81
+
82
+ Specific deployments are used less frequently, and are located in the `/scripts` directory as well. These scripts are used to deploy contracts that are specific to a particular deployment. They are not easily reusable, and are generally only used once. An example to run a specific deployment is:
83
+
84
+ ```bash
70
85
  yarn hardhat run --network <your-network> scripts/deploy.ts
71
86
  ```
72
87
 
73
88
  where `<your network>` is any network configured in `hardhat.config.js`.
89
+
74
90
  For additional deployment details, see hardhat docs: [https://hardhat.org/guides/deploying.html](https://hardhat.org/guides/deploying.html)
75
91
 
76
92
  ## Deployed Contract Details
@@ -81,104 +97,15 @@ This is the Smart contract that controls the artwork created by the artist. No f
81
97
 
82
98
  Core contracts use the versioning schema below:
83
99
 
84
- | Description | Version | Project Range | Mainnet Address |
85
- | :------------------: | :------: | :-----------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
86
- | AB Core V0 | V0 | 0-2 | `0x059EDD72Cd353dF5106D2B9cC5ab83a52287aC3a` |
87
- | AB Core V1 | V1 | 3-373 | `0xa7d8d9ef8D8Ce8992Df33D8b8CF4Aebabd5bD270` |
88
- | PBAB Cores | V2_PBAB | All PBAB | Various - see PBAB+Collabs directory [DEPLOYMENTS.md files](https://github.com/search?q=repo%3AArtBlocks%2Fartblocks-contracts+extension%3Amd+filename%3ADEPLOYMENTS&type=Code&ref=advsearch&l=&l=) |
89
- | PRTNR Cores | V2_PRTNR | All PRTNR | Various - see PBAB+Collabs directory [DEPLOYMENTS.md files](https://github.com/search?q=repo%3AArtBlocks%2Fartblocks-contracts+extension%3Amd+filename%3ADEPLOYMENTS&type=Code&ref=advsearch&l=&l=) |
90
- | AB Core V3 (current) | V3 | 374+ | `0x99a9B7c1116f9ceEB1652de04d5969CcE509B069` |
91
-
92
- > AB Core V3 [changelog here](./contracts/V3_CHANGELOG.md), and [performance metrics here](./contracts/V3_Performance.md).
93
-
94
- ### MinterFilter Suite Compatibility Chart
95
-
96
- The following table shows which Minters and MinterFilters are compatible with which Core contracts.
97
-
98
- - **Note:** while the whole end-to-end MinterFilter+FilteredMinter architecture is likely not the ideal fit for PBAB partners due to the infrastructure complexity required for partners integrating with it, any of the individual minters from within the minter suite can readily be adapted to work with PBAB core contracts–if you are a PBAB partner and there is a minter in the suite that this would be appealing for, please contact your account manager!
99
-
100
- | Core Contract Version(s) | Minter Filter | Recommended Minters | Deprecated Minters |
101
- | ------------------------ | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
102
- | V0 | - | (legacy minter) | - |
103
- | V1, V1_PRTNR | MinterFilterV0 | MinterSetPriceV1<br>MinterSetPriceERC20V1<br>MinterDAExpV1<br>MinterDALinV1<br>MinterMerkleV0<br>MinterHolderV0 | MinterSetPriceV0<br>MinterSetPriceERC20V0<br>MinterDAExpV0<br>MinterDALinV0 |
104
- | V2 (PBAB) | - | (various PBAB minters) | - |
105
- | V3, V3_Explorations | MinterFilterV1 | MinterSetPriceV2<br>MinterSetPriceERC20V2<br>MinterDAExpV2<br>MinterDALinV2<br>MinterMerkleV2<br>MinterMerkleV3<br>MinterHolderV1<br>MinterHolderV2 | - |
106
-
107
- ### Active Minting Contract(s)
108
-
109
- These are the smart contracts that receive funds, and split them between the artist(s) and the platform. Artists receive funds directly from these contracts.
110
-
111
- #### MinterSetPrice (Set Price)
112
-
113
- - V0 (deprecated): [0x1DEC9E52f1320F7Deb29cBCd7B7d67f3dF785142](https://etherscan.io/address/0x1DEC9E52f1320F7Deb29cBCd7B7d67f3dF785142#code)
114
- - V1: [0x934cdc04C434b8dBf3E1265F4f198D70566f7355](https://etherscan.io/address/0x934cdc04C434b8dBf3E1265F4f198D70566f7355#code)
115
- - V2: [0x7B7917e083CeA6d9f6a3060a7330c1072fcb4e40](https://etherscan.io/address/0x7B7917e083CeA6d9f6a3060a7330c1072fcb4e40#code)
116
- - V3: N/A, never used in prod.
117
- - V4: [0x234B25288011081817B5cC199C3754269cCb76D2](https://etherscan.io/address/0x234B25288011081817B5cC199C3754269cCb76D2#code)
118
-
119
- #### MinterSetPriceERC20 (Set Price with ERC20)
120
-
121
- - V0 (deprecated): [0x48742D38a0809135EFd643c1150BfC13768C3907](https://etherscan.io/address/0x48742D38a0809135EFd643c1150BfC13768C3907#code)
122
- - V1: [0x0BbB93c5d118D1dee49e96BCAdc161403f4F8612](https://etherscan.io/address/0x0BbB93c5d118D1dee49e96BCAdc161403f4F8612#code)
123
- - V2: [0xe4c6EeF13649e9C4Ad8ae8A9C7fA9A7F26B4287a](https://etherscan.io/address/0xe4c6EeF13649e9C4Ad8ae8A9C7fA9A7F26B4287a#code)
124
- - V3: N/A, never used in prod.
125
- - V4: [0x9fEcd2FbC6D890fB93632DcE9b1a01c4090A7E2d](https://etherscan.io/address/0x9fEcd2FbC6D890fB93632DcE9b1a01c4090A7E2d#code)
126
-
127
- #### MinterDALin (Linear Dutch Auction)
128
-
129
- - V0 (deprecated): [0xd219f61Bb5A3ffDeCB4362610977F1dAB3930eE2](https://etherscan.io/address/0xd219f61Bb5A3ffDeCB4362610977F1dAB3930eE2#code)
130
- - V1: [0x32710950B014c2D29EA24f480Dd02c7e4610663b](https://etherscan.io/address/0x32710950B014c2D29EA24f480Dd02c7e4610663b#code)
131
- - V2: [0xdaa6D1e224f4B9f7c4f1368C362C4333A8e385A6](https://etherscan.io/address/0xdaa6D1e224f4B9f7c4f1368C362C4333A8e385A6#code)
132
- - V3: N/A, never used in prod.
133
- - V4: [0x419501DD208BFf237e3E32C40D074065e12DfF4d](https://etherscan.io/address/0x419501DD208BFf237e3E32C40D074065e12DfF4d#code)
134
-
135
- #### MinterDAExp (Exponential Decay Dutch Auction)
136
-
137
- - V0 (deprecated): [0xFc74fD0f2c7EaD04f1E5E9fd82Aef55620710D7C](https://etherscan.io/address/0xFc74fD0f2c7EaD04f1E5E9fd82Aef55620710D7C#code)
138
- - V1: [0xD94C7060808f3c876824E57e685702f3834D2e13](https://etherscan.io/address/0xD94C7060808f3c876824E57e685702f3834D2e13#code)
139
- - V2: [0x706d6C6ef700a3c1C3a727f0c46492492E0A72b5](https://etherscan.io/address/0x706d6C6ef700a3c1C3a727f0c46492492E0A72b5#code)
140
- - V3: N/A, never used in prod.
141
- - V4: [0x47e2df2723238f913741Cc6b1963e76fdfD19B94](https://etherscan.io/address/0x47e2df2723238f913741Cc6b1963e76fdfD19B94#code)
142
-
143
- #### MinterDAExpSettlement (Expotential Decay Last Price Dutch Auction)
144
-
145
- - V0: N/A, never used in prod.
146
- - V1: [0xfdE58c821D1c226b4a45c22904de20b114EDe7E7](https://etherscan.io/address/0xfdE58c821D1c226b4a45c22904de20b114EDe7E7#code)
147
-
148
- #### MinterMerkle (Address Allowlist)
149
-
150
- - V0: N/A, never used in prod.
151
- - V1: [0xae5A48D22Cd069c4d72dDe204A7fB4B302e614af](https://etherscan.io/address/0xae5A48D22Cd069c4d72dDe204A7fB4B302e614af)
152
- - V2: [0x6Ff3c104Ca9b4860D27079aFfF18701c4A532A4d](https://etherscan.io/address/0x6Ff3c104Ca9b4860D27079aFfF18701c4A532A4d)
153
- - V3: N/A, never used in prod.
154
- - V4: N/A, never used in prod.
155
- - V5: [0xB8Bd1D2836C466DB149f665F777928bEE267304d](https://etherscan.io/address/0xB8Bd1D2836C466DB149f665F777928bEE267304d#code)
156
-
157
- #### Minter Holder (Token Holder)
158
-
159
- - V0: N/A, never used in prod.
160
- - V1: [0xa198E22C32879f4214a37eB3051525bD9aff9145](https://etherscan.io/address/0xa198E22C32879f4214a37eB3051525bD9aff9145)
161
- - V2: N/A, never used in prod.
162
- - V3: N/A, never used in prod.
163
- - V4: [0xCCFF562017bdAAa064184b3Eb9bd892d8Acce7d6](https://etherscan.io/address/0xCCFF562017bdAAa064184b3Eb9bd892d8Acce7d6#code)
164
-
165
- ### Other Minter Contracts
100
+ | Description | Version | Project Range | Mainnet Address |
101
+ | :-----------------------: | :------: | :-----------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
102
+ | AB Core V0 | V0 | 0-2 | `0x059EDD72Cd353dF5106D2B9cC5ab83a52287aC3a` |
103
+ | AB Core V1 | V1 | 3-373 | `0xa7d8d9ef8D8Ce8992Df33D8b8CF4Aebabd5bD270` |
104
+ | Engine Cores (V2) | V2_PBAB | All PBAB | Various - see `deployments/engine/` directory [DEPLOYMENTS.md files](https://github.com/search?q=repo%3AArtBlocks%2Fartblocks-contracts+extension%3Amd+filename%3ADEPLOYMENTS&type=Code&ref=advsearch&l=&l=) |
105
+ | Engine Partner Cores (V2) | V2_PRTNR | All PRTNR | Various - see `deployments/engine/` directory [DEPLOYMENTS.md files](https://github.com/search?q=repo%3AArtBlocks%2Fartblocks-contracts+extension%3Amd+filename%3ADEPLOYMENTS&type=Code&ref=advsearch&l=&l=) |
106
+ | AB Core V3 (current) | V3 | 374+ | `0x99a9B7c1116f9ceEB1652de04d5969CcE509B069` |
166
107
 
167
- MinterFilterV0 for flagship V1 core: [0x4aafCE293b9B0faD169c78049A81e400f518E199](https://etherscan.io/address/0x4aafCE293b9B0faD169c78049A81e400f518E199#code).
168
-
169
- MinterFilterV1 for flagship V3 core: [0x092B8F64e713d66b38522978BCf4649db14b931E](https://etherscan.io/address/0x092B8F64e713d66b38522978BCf4649db14b931E).
170
-
171
- Legacy minting contract for flagship V0 core: [0x47e312d99c09ce61a866c83cbbbbed5a4b9d33e7](https://etherscan.io/address/0x47e312d99c09ce61a866c83cbbbbed5a4b9d33e7).
172
-
173
- For deployed Engine/Partner/Explorations minting contracts that integrate with V2 core contracts, see the archived source code in the `/posterity/engine/<engine-partner>/` directory and the deployment logs in `/deployments/engine/[V2|V3]/<engine-partner>/` directories. For V3 deployments, deployment script inputs are also available in the `/deployments/engine/[V2|V3]/<engine-partner>/` directories.
174
-
175
- ### Shared Randomizers
176
-
177
- - Goerli: https://goerli.etherscan.io/address/0xec5dae4b11213290b2dbe5295093f75920bd2982#code
178
- - Ropsten: https://ropsten.etherscan.io/address/0x7ba972189ED3C527847170453fC108707F62755a#code
179
- - Rinkeby: https://rinkeby.etherscan.io/address/0x3b30d421a6dA95694EaaE09971424F15Eb375269#code
180
- - Kovan: https://kovan.etherscan.io/address/0x3b30d421a6dA95694EaaE09971424F15Eb375269#code
181
- - Mainnet: https://etherscan.io/address/0x088098f7438773182b703625c4128aff85fcffc4#code
108
+ > AB Core V3 [changelog here](./contracts/V3_CHANGELOG.md), and [performance metrics here](./contracts/V3_PERFORMANCE.md).
182
109
 
183
110
  ### Testnet Contracts
184
111
 
@@ -193,73 +120,31 @@ The following represents the current set of flagship core contracts deployed on
193
120
  - V1 Core (deprecated): https://goerli.etherscan.io/address/0x1Bf03F29c4FEFFFe4eE26704aaA31d85c026aCE6
194
121
  - V3 Core: https://goerli.etherscan.io/address/0xF396C180bb2f92EE28535D23F5224A5b9425ceca
195
122
 
196
- ## Art Blocks Engine core contracts
197
-
198
- > Formerly known as PBAB or PRTNR core contracts
199
-
200
- For deployed core contracts, see the archived source code in the `/posterity/engine/` directory and the deployment logs in `/deployments/engine/[V2|V3]/<engine-partner>/` directories.
201
-
202
- ## Contract Source Code Verification
203
-
204
- In an effort to ensure source code verification is easily completed by anyone, After 10, January 2023, all mainnet deployments should also have a corresponding tag+release in this GitHub repository. For deployments prior to this date, PR history may be used to determine the commit hash used for a given deployment. Currently, all mainnet deployments of contracts developed in this repositiory are verified on Etherscan.
123
+ ## Art Blocks Engine Core Contracts
205
124
 
206
- # Royalty Registry
125
+ For deployed core contracts, see the deployment details in the `/deployments/engine/[V2|V3]/<engine-partner>/` directories. For V2 core contracts, archived source code is available in the `/posterity/engine/` directory.
207
126
 
208
- Art Blocks supports lookups of all mainnet flagship, partnership, and PBAB tokens on Manifold's [Royalty Registry](https://royaltyregistry.xyz/lookup). This enables on-chain royalty lookups for all Art Blocks NFTs, and allows for the creation of royalty streams for artists and other creators.
127
+ ## Minter Suite
209
128
 
210
- For core contracts V3+, Art Blocks core contracts are designed to integrate directly with Manifold's [Royalty Registry](https://royaltyregistry.xyz/lookup). Aside from an artist and the platform defining royalty percentages/basis-points and addresses on the V3+ core contracts, no additional steps are required to register a token with the Royalty Registry.
129
+ For details on the Flagship and Engine Minter Suite, see the [minter suite documenation](./MINTER_SUITE.md).
211
130
 
212
- Prior to the V3 core contract, royalty registry override contracts are needed to properly integrate with the Royalty Registry. These contracts delegate all permissions to the core contracts. The following Royalty Registry override contracts are deployed at:
131
+ ## Shared Randomizers
213
132
 
214
- - **mainnet (AB deployed):**
215
-
216
- - AB Flagship + Partner (PRTNR) royalty override: https://etherscan.io/address/0x7b5369c24a47a72ecf932bf6974f506dde4d5eb1#code
217
- - PBAB royalty override: https://etherscan.io/address/0x31e1cc72e6f9e27c2ecbb500d978de1691173f5f#code
218
-
219
- - **mainnet (RR deployed):**
220
- - RoyaltyRegistry: https://etherscan.io/address/0xad2184fb5dbcfc05d8f056542fb25b04fa32a95d#code
221
- - RoyaltyEngineV1: https://etherscan.io/address/0x0385603ab55642cb4dd5de3ae9e306809991804f#code
222
-
223
- ### Configuring PBAB Royalty Override (REQUIRED)
224
-
225
- Upon deploying a PBAB contract, the following steps must be taken:
226
-
227
- > Tasks denoted by (scripted) are included in `scripts/1_reference_pbab_suite_deployer.ts`, and scripted for newly deployed PBAB projects as of 03/2022.
228
-
229
- - **(scripted), REQUIRED** Set the royalty lookup address on the royalty registry for the newly deployed contract
230
- - Go to the [Royalty Registry](https://royaltyregistry.xyz/lookup) and call the following function on the Royalty Registry smart contract:
231
- - `setRoyaltyLookupAddress(<new_PBAB_coreAddr>, <PBAB_royaltyOverrideContract>)`
232
- - **(scripted), REQUIRED** Set Platform royalty payment address for the new core contract in PBAB royalty override contract
233
- > note: This step is optional in the PBAB deployer script in case platform royalty payment address is not known at time of deployment, but must be completed before royalty lookups will work
234
- - `admin` of the PBAB core contract must call the following function on the PBAB royalty override contract:
235
- - `updatePlatformRoyaltyAddressForContract(<new_PBAB_coreAddr>, <platformRoyaltyPaymentAddress>)`
236
-
237
- Additionally, the following settings may be configured/changed by a PBAB core contract's `admin` at any time:
238
-
239
- - **Change Royalty Percentages**
240
- - `renderProvider` or `platform` Royalty [BPS](https://www.investopedia.com/terms/b/basispoint.asp) may be changed from default values of 2.5% to any value. This can be configured by a PBAB core contract's `admin` via the PBAB override contract's functions `updateRenderProviderBpsForContract` and `updatePlatformBpsForContract`.
241
- - **Change Platform Royalty Payment Address**
242
- - The address to receive platform royalty payments may be updated by a PBAB core contract's admin via the PBAB override contract's function `updatePlatformRoyaltyAddressForContract`.
243
- - **Change Render Provider Royalty Payment Address**
244
- - The address to receive render provider royalty payments is delegated to the token core contract, and defined as the public variable `renderProviderAddress`.
133
+ - Goerli: https://goerli.etherscan.io/address/0xec5dae4b11213290b2dbe5295093f75920bd2982#code
134
+ - Ropsten: https://ropsten.etherscan.io/address/0x7ba972189ED3C527847170453fC108707F62755a#code
135
+ - Rinkeby: https://rinkeby.etherscan.io/address/0x3b30d421a6dA95694EaaE09971424F15Eb375269#code
136
+ - Kovan: https://kovan.etherscan.io/address/0x3b30d421a6dA95694EaaE09971424F15Eb375269#code
137
+ - Mainnet: https://etherscan.io/address/0x088098f7438773182b703625c4128aff85fcffc4#code
245
138
 
246
- ### Configuring Art Blocks Flagship **OR** Partner (PRTNR) Royalty Override (REQUIRED)
139
+ ## Contract Source Code Verification
247
140
 
248
- Upon deploying a new Art Blocks flagship core contract or Partner (PRTNR) core contract, the following steps must be taken (NOT scripted):
141
+ In an effort to ensure source code verification is easily completed by anyone, After 10, January 2023, all mainnet deployments should also have a corresponding tag+release in this GitHub repository. For deployments prior to this date, PR history may be used to determine the commit hash used for a given deployment. Currently, all mainnet deployments of contracts developed in this repositiory are verified on Etherscan.
249
142
 
250
- - **REQUIRED** Set the royalty lookup address on the royalty registry for the newly deployed contract
251
- - Go to the [Royalty Registry](https://royaltyregistry.xyz/lookup) to call the following function on the Royalty Registry smart contract:
252
- - `setRoyaltyLookupAddress(<new_coreAddr>, <ArtBlocks_royaltyOverrideContract>)`
253
- - **REQUIRED** Set Art Blocks royalty payment address for the new core contract in the royalty override contract
254
- - `admin` of core contract must call:
255
- - `updateArtblocksRoyaltyAddressForContract(<new_coreAddr>, <ArtBlocksRoyaltyPaymentAddress>)`
143
+ # Royalties
256
144
 
257
- Additionally, the following settings may be configured/changed by a core contract's `admin` at any time:
145
+ Art Blocks supports on-chain royalty lookups for all Flagship and Engine tokens on Manifold's [Royalty Registry](https://royaltyregistry.xyz/lookup). This enables royalty revenue streams for artists and other creators.
258
146
 
259
- - **Change Art Blocks Royalty Percentage**
260
- - Royalty [BPS](https://www.investopedia.com/terms/b/basispoint.asp) may be changed from default values of 2.5% to any value less than or equal to the default (cannot be increased above default). This can be configured by a core contract's `admin` via the override contract's function `updateArtblocksBpsForContract`.
261
- - **Change Art Blocks Royalty Payment Address**
262
- - The address to receive Art Blocks royalty payments may be updated by a core contract's admin via the royalty override contract's function `updateArtblocksRoyaltyAddressForContract`.
147
+ For information about on-chain royalties, please see the [royalties documentation](./ROYALTIES.md).
263
148
 
264
149
  # Source Code Archival
265
150
 
@@ -241,8 +241,8 @@
241
241
  "type": "function"
242
242
  }
243
243
  ],
244
- "bytecode": "0x60c0604052600a60809081526941646d696e41434c563160b01b60a0526000906200002b9082620000f7565b503480156200003957600080fd5b50600180546001600160a01b03191633179055620001c3565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200007d57607f821691505b6020821081036200009e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620000f257600081815260208120601f850160051c81016020861015620000cd5750805b601f850160051c820191505b81811015620000ee57828155600101620000d9565b5050505b505050565b81516001600160401b0381111562000113576200011362000052565b6200012b8162000124845462000068565b84620000a4565b602080601f8311600181146200016357600084156200014a5750858301515b600019600386901b1c1916600185901b178555620000ee565b600085815260208120601f198616915b82811015620001945788860151825594840194600190910190840162000173565b5085821015620001b35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610bac80620001d36000396000f3fe608060405234801561001057600080fd5b50600436106100995760003560e01c806301ffc9a71461009e57806305de62c0146100c657806329575f6a146100d9578063377a7d1a146100f9578063625e1b7d1461010e578063940ef80014610121578063985d196814610137578063ad35d2de1461014a578063bcc91a101461015d578063c81a396e14610170578063c94dca9a14610185575b600080fd5b6100b16100ac366004610894565b610198565b60405190151581526020015b60405180910390f35b6100b16100d43660046108c6565b6101cf565b6001546100ec906001600160a01b031681565b6040516100bd9190610909565b61010c61010736600461091d565b610234565b005b6100ec61011c3660046109a3565b6102cc565b6101296102d9565b6040519081526020016100bd565b61010c6101453660046109bc565b6102ea565b61010c6101583660046109bc565b61036a565b61010c61016b3660046109d7565b610422565b610178610588565b6040516100bd9190610a0a565b61010c6101933660046109bc565b610616565b60006001600160e01b03198216633001c1ef60e21b14806101c957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546000906001600160a01b03908116908516036101f05750600161022d565b638911905560e01b6001600160e01b031983160161022957506001600160a01b038316600090815260036020526040902054151561022d565b5060005b9392505050565b6001546001600160a01b031633146102675760405162461bcd60e51b815260040161025e90610a58565b60405180910390fd5b600180546001600160a01b038581166001600160a01b0319831681179093556040519116919082907f3f6845104f9728af7979eed8814320daba008953c8db93b9fe32602d1f34b475906102be9087908790610a81565b60405180910390a350505050565b60006101c96002836106cb565b60006102e560026106d7565b905090565b6001546001600160a01b031633146103145760405162461bcd60e51b815260040161025e90610a58565b806001600160a01b031663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561034f57600080fd5b505af1158015610363573d6000803e3d6000fd5b5050505050565b6001546001600160a01b031633146103945760405162461bcd60e51b815260040161025e90610a58565b61039f6002826106e1565b6103eb5760405162461bcd60e51b815260206004820152601e60248201527f41646d696e41434c56313a20416c726561647920726567697374657265640000604482015260640161025e565b6040516001600160a01b038216907fcfa45e813a030b8a5edb7a194db400758a7838280a892097169e8bc310a6bc9390600090a250565b6001546001600160a01b0316331461044c5760405162461bcd60e51b815260040161025e90610a58565b6040516301ffc9a760e01b8152633001c1ef60e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015610497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bb9190610acd565b6105265760405162461bcd60e51b815260206004820152603660248201527f41646d696e41434c56313a206e65772061646d696e2041434c20646f6573206e60448201527506f7420737570706f7274204941646d696e41434c56360541b606482015260840161025e565b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b90610552908490600401610909565b600060405180830381600087803b15801561056c57600080fd5b505af1158015610580573d6000803e3d6000fd5b505050505050565b6000805461059590610aef565b80601f01602080910402602001604051908101604052809291908181526020018280546105c190610aef565b801561060e5780601f106105e35761010080835404028352916020019161060e565b820191906000526020600020905b8154815290600101906020018083116105f157829003601f168201915b505050505081565b6001546001600160a01b031633146106405760405162461bcd60e51b815260040161025e90610a58565b61064b6002826106f6565b6106945760405162461bcd60e51b815260206004820152601a60248201527910591b5a5b9050d3158c4e88139bdd081c9959da5cdd195c995960321b604482015260640161025e565b6040516001600160a01b038216907ff1de73f684ba2cffe486a26456673d031647e0c7964095865ed8e159873edde290600090a250565b600061022d838361070b565b60006101c9825490565b600061022d836001600160a01b038416610735565b600061022d836001600160a01b038416610784565b600082600001828154811061072257610722610b29565b9060005260206000200154905092915050565b600081815260018301602052604081205461077c575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556101c9565b5060006101c9565b6000818152600183016020526040812054801561086d5760006107a8600183610b3f565b85549091506000906107bc90600190610b3f565b90508181146108215760008660000182815481106107dc576107dc610b29565b90600052602060002001549050808760000184815481106107ff576107ff610b29565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061083257610832610b60565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506101c9565b60009150506101c9565b80356001600160e01b03198116811461088f57600080fd5b919050565b6000602082840312156108a657600080fd5b61022d82610877565b80356001600160a01b038116811461088f57600080fd5b6000806000606084860312156108db57600080fd5b6108e4846108af565b92506108f2602085016108af565b915061090060408501610877565b90509250925092565b6001600160a01b0391909116815260200190565b60008060006040848603121561093257600080fd5b61093b846108af565b9250602084013567ffffffffffffffff8082111561095857600080fd5b818601915086601f83011261096c57600080fd5b81358181111561097b57600080fd5b8760208260051b850101111561099057600080fd5b6020830194508093505050509250925092565b6000602082840312156109b557600080fd5b5035919050565b6000602082840312156109ce57600080fd5b61022d826108af565b600080604083850312156109ea57600080fd5b6109f3836108af565b9150610a01602084016108af565b90509250929050565b600060208083528351808285015260005b81811015610a3757858101830151858201604001528201610a1b565b506000604082860101526040601f19601f8301168501019250505092915050565b6020808252600f908201526e27b7363c9039bab832b920b236b4b760891b604082015260600190565b60208082528181018390526000908460408401835b86811015610ac2576001600160a01b03610aaf846108af565b1682529183019190830190600101610a96565b509695505050505050565b600060208284031215610adf57600080fd5b8151801515811461022d57600080fd5b600181811c90821680610b0357607f821691505b602082108103610b2357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b818103818111156101c957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212203fb62a5817293aff376dcb3c493eeb88761b57a13426455593b068f7346c7daf64736f6c63430008110033",
245
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100995760003560e01c806301ffc9a71461009e57806305de62c0146100c657806329575f6a146100d9578063377a7d1a146100f9578063625e1b7d1461010e578063940ef80014610121578063985d196814610137578063ad35d2de1461014a578063bcc91a101461015d578063c81a396e14610170578063c94dca9a14610185575b600080fd5b6100b16100ac366004610894565b610198565b60405190151581526020015b60405180910390f35b6100b16100d43660046108c6565b6101cf565b6001546100ec906001600160a01b031681565b6040516100bd9190610909565b61010c61010736600461091d565b610234565b005b6100ec61011c3660046109a3565b6102cc565b6101296102d9565b6040519081526020016100bd565b61010c6101453660046109bc565b6102ea565b61010c6101583660046109bc565b61036a565b61010c61016b3660046109d7565b610422565b610178610588565b6040516100bd9190610a0a565b61010c6101933660046109bc565b610616565b60006001600160e01b03198216633001c1ef60e21b14806101c957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546000906001600160a01b03908116908516036101f05750600161022d565b638911905560e01b6001600160e01b031983160161022957506001600160a01b038316600090815260036020526040902054151561022d565b5060005b9392505050565b6001546001600160a01b031633146102675760405162461bcd60e51b815260040161025e90610a58565b60405180910390fd5b600180546001600160a01b038581166001600160a01b0319831681179093556040519116919082907f3f6845104f9728af7979eed8814320daba008953c8db93b9fe32602d1f34b475906102be9087908790610a81565b60405180910390a350505050565b60006101c96002836106cb565b60006102e560026106d7565b905090565b6001546001600160a01b031633146103145760405162461bcd60e51b815260040161025e90610a58565b806001600160a01b031663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561034f57600080fd5b505af1158015610363573d6000803e3d6000fd5b5050505050565b6001546001600160a01b031633146103945760405162461bcd60e51b815260040161025e90610a58565b61039f6002826106e1565b6103eb5760405162461bcd60e51b815260206004820152601e60248201527f41646d696e41434c56313a20416c726561647920726567697374657265640000604482015260640161025e565b6040516001600160a01b038216907fcfa45e813a030b8a5edb7a194db400758a7838280a892097169e8bc310a6bc9390600090a250565b6001546001600160a01b0316331461044c5760405162461bcd60e51b815260040161025e90610a58565b6040516301ffc9a760e01b8152633001c1ef60e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015610497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bb9190610acd565b6105265760405162461bcd60e51b815260206004820152603660248201527f41646d696e41434c56313a206e65772061646d696e2041434c20646f6573206e60448201527506f7420737570706f7274204941646d696e41434c56360541b606482015260840161025e565b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b90610552908490600401610909565b600060405180830381600087803b15801561056c57600080fd5b505af1158015610580573d6000803e3d6000fd5b505050505050565b6000805461059590610aef565b80601f01602080910402602001604051908101604052809291908181526020018280546105c190610aef565b801561060e5780601f106105e35761010080835404028352916020019161060e565b820191906000526020600020905b8154815290600101906020018083116105f157829003601f168201915b505050505081565b6001546001600160a01b031633146106405760405162461bcd60e51b815260040161025e90610a58565b61064b6002826106f6565b6106945760405162461bcd60e51b815260206004820152601a60248201527910591b5a5b9050d3158c4e88139bdd081c9959da5cdd195c995960321b604482015260640161025e565b6040516001600160a01b038216907ff1de73f684ba2cffe486a26456673d031647e0c7964095865ed8e159873edde290600090a250565b600061022d838361070b565b60006101c9825490565b600061022d836001600160a01b038416610735565b600061022d836001600160a01b038416610784565b600082600001828154811061072257610722610b29565b9060005260206000200154905092915050565b600081815260018301602052604081205461077c575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556101c9565b5060006101c9565b6000818152600183016020526040812054801561086d5760006107a8600183610b3f565b85549091506000906107bc90600190610b3f565b90508181146108215760008660000182815481106107dc576107dc610b29565b90600052602060002001549050808760000184815481106107ff576107ff610b29565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061083257610832610b60565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506101c9565b60009150506101c9565b80356001600160e01b03198116811461088f57600080fd5b919050565b6000602082840312156108a657600080fd5b61022d82610877565b80356001600160a01b038116811461088f57600080fd5b6000806000606084860312156108db57600080fd5b6108e4846108af565b92506108f2602085016108af565b915061090060408501610877565b90509250925092565b6001600160a01b0391909116815260200190565b60008060006040848603121561093257600080fd5b61093b846108af565b9250602084013567ffffffffffffffff8082111561095857600080fd5b818601915086601f83011261096c57600080fd5b81358181111561097b57600080fd5b8760208260051b850101111561099057600080fd5b6020830194508093505050509250925092565b6000602082840312156109b557600080fd5b5035919050565b6000602082840312156109ce57600080fd5b61022d826108af565b600080604083850312156109ea57600080fd5b6109f3836108af565b9150610a01602084016108af565b90509250929050565b600060208083528351808285015260005b81811015610a3757858101830151858201604001528201610a1b565b506000604082860101526040601f19601f8301168501019250505092915050565b6020808252600f908201526e27b7363c9039bab832b920b236b4b760891b604082015260600190565b60208082528181018390526000908460408401835b86811015610ac2576001600160a01b03610aaf846108af565b1682529183019190830190600101610a96565b509695505050505050565b600060208284031215610adf57600080fd5b8151801515811461022d57600080fd5b600181811c90821680610b0357607f821691505b602082108103610b2357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b818103818111156101c957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212203fb62a5817293aff376dcb3c493eeb88761b57a13426455593b068f7346c7daf64736f6c63430008110033",
244
+ "bytecode": "0x60c0604052600a60809081526941646d696e41434c563160b01b60a0526000906200002b9082620000f7565b503480156200003957600080fd5b50600180546001600160a01b03191633179055620001c3565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200007d57607f821691505b6020821081036200009e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620000f257600081815260208120601f850160051c81016020861015620000cd5750805b601f850160051c820191505b81811015620000ee57828155600101620000d9565b5050505b505050565b81516001600160401b0381111562000113576200011362000052565b6200012b8162000124845462000068565b84620000a4565b602080601f8311600181146200016357600084156200014a5750858301515b600019600386901b1c1916600185901b178555620000ee565b600085815260208120601f198616915b82811015620001945788860151825594840194600190910190840162000173565b5085821015620001b35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b610bac80620001d36000396000f3fe608060405234801561001057600080fd5b50600436106100995760003560e01c806301ffc9a71461009e57806305de62c0146100c657806329575f6a146100d9578063377a7d1a146100f9578063625e1b7d1461010e578063940ef80014610121578063985d196814610137578063ad35d2de1461014a578063bcc91a101461015d578063c81a396e14610170578063c94dca9a14610185575b600080fd5b6100b16100ac366004610894565b610198565b60405190151581526020015b60405180910390f35b6100b16100d43660046108c6565b6101cf565b6001546100ec906001600160a01b031681565b6040516100bd9190610909565b61010c61010736600461091d565b610234565b005b6100ec61011c3660046109a3565b6102cc565b6101296102d9565b6040519081526020016100bd565b61010c6101453660046109bc565b6102ea565b61010c6101583660046109bc565b61036a565b61010c61016b3660046109d7565b610422565b610178610588565b6040516100bd9190610a0a565b61010c6101933660046109bc565b610616565b60006001600160e01b03198216633001c1ef60e21b14806101c957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546000906001600160a01b03908116908516036101f05750600161022d565b638911905560e01b6001600160e01b031983160161022957506001600160a01b038316600090815260036020526040902054151561022d565b5060005b9392505050565b6001546001600160a01b031633146102675760405162461bcd60e51b815260040161025e90610a58565b60405180910390fd5b600180546001600160a01b038581166001600160a01b0319831681179093556040519116919082907f3f6845104f9728af7979eed8814320daba008953c8db93b9fe32602d1f34b475906102be9087908790610a81565b60405180910390a350505050565b60006101c96002836106cb565b60006102e560026106d7565b905090565b6001546001600160a01b031633146103145760405162461bcd60e51b815260040161025e90610a58565b806001600160a01b031663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561034f57600080fd5b505af1158015610363573d6000803e3d6000fd5b5050505050565b6001546001600160a01b031633146103945760405162461bcd60e51b815260040161025e90610a58565b61039f6002826106e1565b6103eb5760405162461bcd60e51b815260206004820152601e60248201527f41646d696e41434c56313a20416c726561647920726567697374657265640000604482015260640161025e565b6040516001600160a01b038216907fcfa45e813a030b8a5edb7a194db400758a7838280a892097169e8bc310a6bc9390600090a250565b6001546001600160a01b0316331461044c5760405162461bcd60e51b815260040161025e90610a58565b6040516301ffc9a760e01b8152633001c1ef60e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015610497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bb9190610acd565b6105265760405162461bcd60e51b815260206004820152603660248201527f41646d696e41434c56313a206e65772061646d696e2041434c20646f6573206e60448201527506f7420737570706f7274204941646d696e41434c56360541b606482015260840161025e565b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b90610552908490600401610909565b600060405180830381600087803b15801561056c57600080fd5b505af1158015610580573d6000803e3d6000fd5b505050505050565b6000805461059590610aef565b80601f01602080910402602001604051908101604052809291908181526020018280546105c190610aef565b801561060e5780601f106105e35761010080835404028352916020019161060e565b820191906000526020600020905b8154815290600101906020018083116105f157829003601f168201915b505050505081565b6001546001600160a01b031633146106405760405162461bcd60e51b815260040161025e90610a58565b61064b6002826106f6565b6106945760405162461bcd60e51b815260206004820152601a60248201527910591b5a5b9050d3158c4e88139bdd081c9959da5cdd195c995960321b604482015260640161025e565b6040516001600160a01b038216907ff1de73f684ba2cffe486a26456673d031647e0c7964095865ed8e159873edde290600090a250565b600061022d838361070b565b60006101c9825490565b600061022d836001600160a01b038416610735565b600061022d836001600160a01b038416610784565b600082600001828154811061072257610722610b29565b9060005260206000200154905092915050565b600081815260018301602052604081205461077c575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556101c9565b5060006101c9565b6000818152600183016020526040812054801561086d5760006107a8600183610b3f565b85549091506000906107bc90600190610b3f565b90508181146108215760008660000182815481106107dc576107dc610b29565b90600052602060002001549050808760000184815481106107ff576107ff610b29565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061083257610832610b60565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506101c9565b60009150506101c9565b80356001600160e01b03198116811461088f57600080fd5b919050565b6000602082840312156108a657600080fd5b61022d82610877565b80356001600160a01b038116811461088f57600080fd5b6000806000606084860312156108db57600080fd5b6108e4846108af565b92506108f2602085016108af565b915061090060408501610877565b90509250925092565b6001600160a01b0391909116815260200190565b60008060006040848603121561093257600080fd5b61093b846108af565b9250602084013567ffffffffffffffff8082111561095857600080fd5b818601915086601f83011261096c57600080fd5b81358181111561097b57600080fd5b8760208260051b850101111561099057600080fd5b6020830194508093505050509250925092565b6000602082840312156109b557600080fd5b5035919050565b6000602082840312156109ce57600080fd5b61022d826108af565b600080604083850312156109ea57600080fd5b6109f3836108af565b9150610a01602084016108af565b90509250929050565b600060208083528351808285015260005b81811015610a3757858101830151858201604001528201610a1b565b506000604082860101526040601f19601f8301168501019250505092915050565b6020808252600f908201526e27b7363c9039bab832b920b236b4b760891b604082015260600190565b60208082528181018390526000908460408401835b86811015610ac2576001600160a01b03610aaf846108af565b1682529183019190830190600101610a96565b509695505050505050565b600060208284031215610adf57600080fd5b8151801515811461022d57600080fd5b600181811c90821680610b0357607f821691505b602082108103610b2357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b818103818111156101c957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea2646970667358221220395ed8593e98518a0f7448092544c049d575d4ad12ed748ecee8ec182e89d61b64736f6c63430008110033",
245
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100995760003560e01c806301ffc9a71461009e57806305de62c0146100c657806329575f6a146100d9578063377a7d1a146100f9578063625e1b7d1461010e578063940ef80014610121578063985d196814610137578063ad35d2de1461014a578063bcc91a101461015d578063c81a396e14610170578063c94dca9a14610185575b600080fd5b6100b16100ac366004610894565b610198565b60405190151581526020015b60405180910390f35b6100b16100d43660046108c6565b6101cf565b6001546100ec906001600160a01b031681565b6040516100bd9190610909565b61010c61010736600461091d565b610234565b005b6100ec61011c3660046109a3565b6102cc565b6101296102d9565b6040519081526020016100bd565b61010c6101453660046109bc565b6102ea565b61010c6101583660046109bc565b61036a565b61010c61016b3660046109d7565b610422565b610178610588565b6040516100bd9190610a0a565b61010c6101933660046109bc565b610616565b60006001600160e01b03198216633001c1ef60e21b14806101c957506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001546000906001600160a01b03908116908516036101f05750600161022d565b638911905560e01b6001600160e01b031983160161022957506001600160a01b038316600090815260036020526040902054151561022d565b5060005b9392505050565b6001546001600160a01b031633146102675760405162461bcd60e51b815260040161025e90610a58565b60405180910390fd5b600180546001600160a01b038581166001600160a01b0319831681179093556040519116919082907f3f6845104f9728af7979eed8814320daba008953c8db93b9fe32602d1f34b475906102be9087908790610a81565b60405180910390a350505050565b60006101c96002836106cb565b60006102e560026106d7565b905090565b6001546001600160a01b031633146103145760405162461bcd60e51b815260040161025e90610a58565b806001600160a01b031663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561034f57600080fd5b505af1158015610363573d6000803e3d6000fd5b5050505050565b6001546001600160a01b031633146103945760405162461bcd60e51b815260040161025e90610a58565b61039f6002826106e1565b6103eb5760405162461bcd60e51b815260206004820152601e60248201527f41646d696e41434c56313a20416c726561647920726567697374657265640000604482015260640161025e565b6040516001600160a01b038216907fcfa45e813a030b8a5edb7a194db400758a7838280a892097169e8bc310a6bc9390600090a250565b6001546001600160a01b0316331461044c5760405162461bcd60e51b815260040161025e90610a58565b6040516301ffc9a760e01b8152633001c1ef60e21b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015610497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bb9190610acd565b6105265760405162461bcd60e51b815260206004820152603660248201527f41646d696e41434c56313a206e65772061646d696e2041434c20646f6573206e60448201527506f7420737570706f7274204941646d696e41434c56360541b606482015260840161025e565b60405163f2fde38b60e01b81526001600160a01b0383169063f2fde38b90610552908490600401610909565b600060405180830381600087803b15801561056c57600080fd5b505af1158015610580573d6000803e3d6000fd5b505050505050565b6000805461059590610aef565b80601f01602080910402602001604051908101604052809291908181526020018280546105c190610aef565b801561060e5780601f106105e35761010080835404028352916020019161060e565b820191906000526020600020905b8154815290600101906020018083116105f157829003601f168201915b505050505081565b6001546001600160a01b031633146106405760405162461bcd60e51b815260040161025e90610a58565b61064b6002826106f6565b6106945760405162461bcd60e51b815260206004820152601a60248201527910591b5a5b9050d3158c4e88139bdd081c9959da5cdd195c995960321b604482015260640161025e565b6040516001600160a01b038216907ff1de73f684ba2cffe486a26456673d031647e0c7964095865ed8e159873edde290600090a250565b600061022d838361070b565b60006101c9825490565b600061022d836001600160a01b038416610735565b600061022d836001600160a01b038416610784565b600082600001828154811061072257610722610b29565b9060005260206000200154905092915050565b600081815260018301602052604081205461077c575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556101c9565b5060006101c9565b6000818152600183016020526040812054801561086d5760006107a8600183610b3f565b85549091506000906107bc90600190610b3f565b90508181146108215760008660000182815481106107dc576107dc610b29565b90600052602060002001549050808760000184815481106107ff576107ff610b29565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061083257610832610b60565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506101c9565b60009150506101c9565b80356001600160e01b03198116811461088f57600080fd5b919050565b6000602082840312156108a657600080fd5b61022d82610877565b80356001600160a01b038116811461088f57600080fd5b6000806000606084860312156108db57600080fd5b6108e4846108af565b92506108f2602085016108af565b915061090060408501610877565b90509250925092565b6001600160a01b0391909116815260200190565b60008060006040848603121561093257600080fd5b61093b846108af565b9250602084013567ffffffffffffffff8082111561095857600080fd5b818601915086601f83011261096c57600080fd5b81358181111561097b57600080fd5b8760208260051b850101111561099057600080fd5b6020830194508093505050509250925092565b6000602082840312156109b557600080fd5b5035919050565b6000602082840312156109ce57600080fd5b61022d826108af565b600080604083850312156109ea57600080fd5b6109f3836108af565b9150610a01602084016108af565b90509250929050565b600060208083528351808285015260005b81811015610a3757858101830151858201604001528201610a1b565b506000604082860101526040601f19601f8301168501019250505092915050565b6020808252600f908201526e27b7363c9039bab832b920b236b4b760891b604082015260600190565b60208082528181018390526000908460408401835b86811015610ac2576001600160a01b03610aaf846108af565b1682529183019190830190600101610a96565b509695505050505050565b600060208284031215610adf57600080fd5b8151801515811461022d57600080fd5b600181811c90821680610b0357607f821691505b602082108103610b2357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b818103818111156101c957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fdfea2646970667358221220395ed8593e98518a0f7448092544c049d575d4ad12ed748ecee8ec182e89d61b64736f6c63430008110033",
246
246
  "linkReferences": {},
247
247
  "deployedLinkReferences": {}
248
248
  }
@@ -1013,8 +1013,8 @@
1013
1013
  "type": "function"
1014
1014
  }
1015
1015
  ],
1016
- "bytecode": "0x608060405234801561001057600080fd5b50613355806100206000396000f3fe608060405234801561001057600080fd5b50600436106101c75760003560e01c80637cbb45c8116101005780637cbb45c81461039957806389f8ba4f146103a15780638da5cb5b146103b457806392f4f506146103bc5780639d5c4b78146103f4578063a809c1fc14610407578063b491702c1461041a578063b86b69f11461042d578063bbf2aefb14610435578063be3d3ee614610448578063c4d66de81461045b578063da7810fe1461046e578063dbc71ccb14610481578063dc33f4ae14610494578063f146f17f146104a7578063f2fde38b146104ba578063f73f4991146104cd578063f8ac18be146104e0578063f9c0fae6146104f357600080fd5b806304e3c7f6146101cc57806307f9f786146101e1578063199eb8e0146101ff5780631a051d49146102125780631e9bef4614610225578063230448b11461025057806325ffb37614610273578063336af8101461029a5780633bd7cfa2146102ba578063474bbdc2146102cd57806351eda999146102e057806352ccc021146102f55780635668bc5e146103085780635710f83d14610345578063596224dc1461035857806359d8a7331461036b5780636c4056a81461037e578063715018a614610391575b600080fd5b6101df6101da3660046127f8565b610506565b005b6101e9610656565b6040516101f6919061281a565b60405180910390f35b6101df61020d366004612877565b610705565b6101df610220366004612955565b6107a0565b606554610238906001600160a01b031681565b6040516001600160a01b0390911681526020016101f6565b61026361025e3660046129a4565b6108f8565b60405190151581526020016101f6565b6102866102813660046129f8565b6109a4565b6040516101f6989796959493929190612a61565b6102ad6102a83660046127f8565b610bbb565b6040516101f69190612ae6565b6101df6102c8366004612af9565b610c6d565b6102ad6102db366004612b3f565b610d1e565b6102e8610e79565b6040516101f69190612b69565b6101df6103033660046129f8565b610f38565b6103376103163660046129f8565b600090815260686020526040902060060154600160301b900462ffffff1690565b6040519081526020016101f6565b6101df610353366004612af9565b6110d9565b6101df610366366004612955565b6111f9565b6102386103793660046129f8565b61130f565b6102ad61038c3660046129f8565b61136a565b6101df6113c7565b6103376113db565b6101df6103af3660046127f8565b6113ec565b61023861150f565b6102386103ca3660046127f8565b6000918252606860209081526040808420928452600590920190529020546001600160a01b031690565b6102ad6104023660046127f8565b611523565b6101df610415366004612bcb565b61154e565b6102ad6104283660046127f8565b6116b3565b610337611715565b6101df610443366004612c5c565b611721565b6101df610456366004612af9565b611802565b6101df610469366004612877565b6118a2565b6101df61047c366004612955565b6119bd565b6101df61048f366004612877565b611aba565b6101df6104a2366004612af9565b611bd8565b6101df6104b5366004612af9565b611d04565b6101df6104c8366004612877565b611e0c565b6101df6104db366004612b3f565b611e85565b6101df6104ee3660046129f8565b611f75565b6101df610501366004612af9565b61211f565b630271e3fb60e11b6105193330836108f8565b61053e5760405162461bcd60e51b815260040161053590612c8f565b60405180910390fd5b8261054a6066826121c2565b6105665760405162461bcd60e51b815260040161053590612cbf565b600084815260686020526040902060068101546301000000900462ffffff168085106105a45760405162461bcd60e51b815260040161053590612cf6565b60006105b1600183612d3e565b6000888152606860209081526040808320848452600390810183528184208b85529088019092529091209192506105e89082612de9565b5060008181526003840160205260408120610602916127aa565b60068301805465ffffff0000001916630100000062ffffff841602179055604051869088907fc02725dfc9639e3399432cdae3db1c062229f4cc41bcc18631517617c020b71c90600090a350505050505050565b6060600061066460696121d5565b90506000816001600160401b0381111561068057610680612892565b6040519080825280602002602001820160405280156106a9578160200160208202803683370190505b50905060005b828110156106fe576106c26069826121df565b8282815181106106d4576106d4612ec3565b6001600160a01b0390921660209283029190910190910152806106f681612ed9565b9150506106af565b5092915050565b62ccf5c760e51b6107173330836108f8565b6107335760405162461bcd60e51b815260040161053590612c8f565b8161073f6069826121eb565b61075b5760405162461bcd60e51b815260040161053590612ef2565b610766606984612200565b506040516001600160a01b038416907f2453d2f77bae1012d39e2257356d2566625ebe0ffd6094198aa051689dc65ba090600090a2505050565b631a051d4960e01b6107b33330836108f8565b6107cf5760405162461bcd60e51b815260040161053590612c8f565b8180516000036107f15760405162461bcd60e51b815260040161053590612f27565b846107fd6066826121c2565b6108195760405162461bcd60e51b815260040161053590612cbf565b60008681526068602052604090206006810154600160301b900462ffffff16861061087e5760405162461bcd60e51b81526020600482015260156024820152747363726970744964206f7574206f662072616e676560581b6044820152606401610535565b60008681526005820160205260409020546108a1906001600160a01b0316612215565b6108aa856122cc565b600087815260058301602052604080822080546001600160a01b0319166001600160a01b0394909416939093179092559051889160008051602061330083398151915291a250505050505050565b60008061090361150f565b6001600160a01b03161415801561099c57506065546040516217798b60e61b81526001600160a01b03868116600483015285811660248301526001600160e01b031985166044830152909116906305de62c0906064016020604051808303816000875af1158015610978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099c9190612f5c565b949350505050565b60008181526068602052604081206060918291829082908290829081906109ca8a61235a565b60068201548254839162ffffff808216926002850192630100000081048316926004870192600160301b90920416801515918790610a0790612d51565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3390612d51565b8015610a805780601f10610a5557610100808354040283529160200191610a80565b820191906000526020600020905b815481529060010190602001808311610a6357829003601f168201915b50505050509650848054610a9390612d51565b80601f0160208091040260200160405190810160405280929190818152602001828054610abf90612d51565b8015610b0c5780601f10610ae157610100808354040283529160200191610b0c565b820191906000526020600020905b815481529060010190602001808311610aef57829003601f168201915b50505050509450828054610b1f90612d51565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4b90612d51565b8015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b505050505092509850985098509850985098509850985050919395975091939597565b60008281526068602090815260408083208484526003019091529020805460609190610be690612d51565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1290612d51565b8015610c5f5780601f10610c3457610100808354040283529160200191610c5f565b820191906000526020600020905b815481529060010190602001808311610c4257829003601f168201915b505050505090505b92915050565b631debe7d160e11b610c803330836108f8565b610c9c5760405162461bcd60e51b815260040161053590612c8f565b82610ca86066826121c2565b610cc45760405162461bcd60e51b815260040161053590612cbf565b6000848152606860205260409020600401610cdf8482612f7e565b50837f9959f3af1c0191277b92c192984b5ca38adaf82d8465332b4da850e0e6a199f484604051610d109190612ae6565b60405180910390a250505050565b606082610d2c6069826121eb565b610d485760405162461bcd60e51b815260040161053590612ef2565b6001600160a01b0384166000908152606b602090815260408083208684529091529020548015610d8357610d7b8161235a565b9250506106fe565b604051633ae7357560e21b8152600481018590526001600160a01b0386169063eb9cd5d490602401600060405180830381865afa925050508015610de957506040513d6000823e601f3d908101601f19168201604052610de69190810190613076565b60015b610e6d5760405162461bcd60e51b815260206004820152604960248201527f436f6e747261637420646f6573206e6f7420696d706c656d656e742070726f6a60448201527f65637453637269707444657461696c7320616e6420686173206e6f206f7665726064820152683934b2329039b2ba1760b91b608482015260a401610535565b50909695505050505050565b60606000610e8760666121d5565b6001600160401b03811115610e9e57610e9e612892565b604051908082528060200260200182016040528015610ed157816020015b6060815260200190600190039081610ebc5790505b5090506000610ee060666121d5565b905060005b81811015610f3057610f00610efb6066836121df565b61235a565b838281518110610f1257610f12612ec3565b60200260200101819052508080610f2890612ed9565b915050610ee5565b509092915050565b6352ccc02160e01b610f4b3330836108f8565b610f675760405162461bcd60e51b815260040161053590612c8f565b81610f736066826121c2565b610f8f5760405162461bcd60e51b815260040161053590612cbf565b60008381526068602052604090206006810154600160301b900462ffffff16610ffa5760405162461bcd60e51b815260206004820152601e60248201527f746865726520617265206e6f207363726970747320746f2072656d6f766500006044820152606401610535565b61104781600501600060018460060160069054906101000a900462ffffff1661102391906130e2565b62ffffff1681526020810191909152604001600020546001600160a01b0316612215565b6006810154600582019060009061106c90600190600160301b900462ffffff166130e2565b62ffffff908116825260208201929092526040908101600090812080546001600160a01b031916905560068401805462ffffff60301b198116600160301b91829004861660001901909516029390931790925551859160008051602061330083398151915291a250505050565b635710f83d60e01b6110ec3330836108f8565b6111085760405162461bcd60e51b815260040161053590612c8f565b81805160000361112a5760405162461bcd60e51b815260040161053590612f27565b836111366066826121c2565b6111525760405162461bcd60e51b815260040161053590612cbf565b600085815260686020908152604080832060068101546301000000900462ffffff1680855260038201909352922061118a8782612f7e565b506111968160016130fe565b8260060160036101000a81548162ffffff021916908362ffffff160217905550867ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde87836040516111e8929190613111565b60405180910390a250505050505050565b631658893760e21b61120c3330836108f8565b6112285760405162461bcd60e51b815260040161053590612c8f565b81805160000361124a5760405162461bcd60e51b815260040161053590612f27565b846112566066826121c2565b6112725760405162461bcd60e51b815260040161053590612cbf565b600086815260686020526040902060068101546301000000900462ffffff168087106112b05760405162461bcd60e51b815260040161053590612cf6565b600087815260038301602052604090206112ca8782612f7e565b50877ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde87896040516112fd929190613111565b60405180910390a25050505050505050565b60008161131c60696121d5565b1161135f5760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606401610535565b610c676069836121df565b60608161137760666121d5565b116113b95760405162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b6044820152606401610535565b610c67610efb6066846121df565b6113cf6123c5565b6113d96000612424565b565b60006113e760666121d5565b905090565b6389f8ba4f60e01b6113ff3330836108f8565b61141b5760405162461bcd60e51b815260040161053590612c8f565b826114276066826121c2565b6114435760405162461bcd60e51b815260040161053590612cbf565b6000848152606860205260409020600681015462ffffff1680851061147a5760405162461bcd60e51b815260040161053590612cf6565b6000611487600183612d3e565b600081815260018501602052604080822089835291209192506114aa9082612de9565b50600081815260018401602052604081206114c4916127aa565b60068301805462ffffff191662ffffff8316179055604051869088907f225454b600cf489553fde6e3b7f5e458b1093c035390b678067ea799b3b016cd90600090a350505050505050565b60006113e76033546001600160a01b031690565b60008281526068602090815260408083208484526001019091529020805460609190610be690612d51565b632a02707f60e21b6115613330836108f8565b61157d5760405162461bcd60e51b815260040161053590612c8f565b6115886066866121c2565b156115d55760405162461bcd60e51b815260206004820152601e60248201527f446570656e64656e6379207479706520616c72656164792065786973747300006044820152606401610535565b6115e2856040600161244f565b61162b5760405162461bcd60e51b815260206004820152601a60248201527901b5d5cdd0818dbdb9d185a5b88195e1858dd1b1e481bdb9948160361b6044820152606401610535565b6116366066866124c2565b506000858152606860205260409020806116508682612f7e565b506002810161165f8582612f7e565b506004810161166e8482612f7e565b50857f39626dd6a5a74e9944752116c5e878fbb4c1ac0cab72cd316f6f25ee19cff7658686866040516116a393929190613133565b60405180910390a2505050505050565b6000828152606860205260409020600681015460609190600160301b900462ffffff1683106116f2575050604080516020810190915260008152610c67565b600083815260058201602052604090205461099c906001600160a01b03166124ce565b60006113e760696121d5565b63bbf2aefb60e01b6117343330836108f8565b6117505760405162461bcd60e51b815260040161053590612c8f565b8161175c6066826121c2565b6117785760405162461bcd60e51b815260040161053590612cbf565b846117846069826121eb565b6117a05760405162461bcd60e51b815260040161053590612ef2565b6001600160a01b0386166000818152606b6020908152604080832089845282529182902087905590518681528792917f27d39273f3676c181ec3de60b583da776123d9f9517761fb91f370a83c798918910160405180910390a3505050505050565b635f1e9f7360e11b6118153330836108f8565b6118315760405162461bcd60e51b815260040161053590612c8f565b8261183d6066826121c2565b6118595760405162461bcd60e51b815260040161053590612cbf565b60008481526068602052604090206118718482612f7e565b50837fc9890a31ec780bb5a8a017d683d3913f97260548d71c2cee78194ed2833f023584604051610d109190612ae6565b600054610100900460ff16158080156118c25750600054600160ff909116105b806118dc5750303b1580156118dc575060005460ff166001145b61193f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610535565b6000805460ff191660011790558015611962576000805461ff0019166101001790555b61196a612559565b61197382612424565b80156119b9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b636d3c087f60e11b6119d03330836108f8565b6119ec5760405162461bcd60e51b815260040161053590612c8f565b818051600003611a0e5760405162461bcd60e51b815260040161053590612f27565b84611a1a6066826121c2565b611a365760405162461bcd60e51b815260040161053590612cbf565b6000868152606860205260409020600681015462ffffff16808710611a6d5760405162461bcd60e51b815260040161053590612cf6565b60008781526001830160205260409020611a878782612f7e565b50877f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d87896040516112fd929190613111565b63dbc71ccb60e01b611acd3330836108f8565b611ae95760405162461bcd60e51b815260040161053590612c8f565b816001600160a01b038116611b3e5760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d7a65726f206164647265737360281b6044820152606401610535565b611b496069846121eb565b15611b935760405162461bcd60e51b815260206004820152601a60248201527910dbdb9d1c9858dd08185b1c9958591e481cdd5c1c1bdc9d195960321b6044820152606401610535565b611b9e606984612588565b506040516001600160a01b038416907f59e1b889b92ad05213b7934a67c5d824348c868455d1c741a2cfe16e46d832dc90600090a2505050565b636e19fa5760e11b611beb3330836108f8565b611c075760405162461bcd60e51b815260040161053590612c8f565b818051600003611c295760405162461bcd60e51b815260040161053590612f27565b83611c356066826121c2565b611c515760405162461bcd60e51b815260040161053590612cbf565b6000858152606860205260409020611c68856122cc565b600682018054600160301b9081900462ffffff9081166000908152600586016020526040902080546001600160a01b0319166001600160a01b0395909516949094179093559054611cbe92919004166001613176565b60068201805462ffffff92909216600160301b0262ffffff60301b19909216919091179055604051869060008051602061330083398151915290600090a2505050505050565b63f146f17f60e01b611d173330836108f8565b611d335760405162461bcd60e51b815260040161053590612c8f565b818051600003611d555760405162461bcd60e51b815260040161053590612f27565b83611d616066826121c2565b611d7d5760405162461bcd60e51b815260040161053590612cbf565b6000858152606860209081526040808320600681015462ffffff16808552600182019093529220611dae8782612f7e565b50611dba8160016130fe565b8260060160006101000a81548162ffffff021916908362ffffff160217905550867f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d87836040516111e8929190613111565b611e146123c5565b6001600160a01b038116611e795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610535565b611e8281612424565b50565b63f73f499160e01b611e983330836108f8565b611eb45760405162461bcd60e51b815260040161053590612c8f565b6001600160a01b0383166000908152606b60209081526040808320858452909152902054611f225760405162461bcd60e51b815260206004820152601b60248201527a139bc81bdd995c9c9a5919481cd95d08199bdc881c1c9bda9958dd602a1b6044820152606401610535565b6001600160a01b0383166000818152606b60209081526040808320868452909152808220829055518492917f0732620824c0200808d04ab037f3abc3c31853170b90f5a855d32f44486048ed91a3505050565b637c560c5f60e11b611f883330836108f8565b611fa45760405162461bcd60e51b815260040161053590612c8f565b81611fb06066826121c2565b611fcc5760405162461bcd60e51b815260040161053590612cbf565b6000838152606860205260409020600681015462ffffff16158015611fff575060068101546301000000900462ffffff16155b801561201957506006810154600160301b900462ffffff16155b61209b5760405162461bcd60e51b815260206004820152604760248201527f43616e6e6f742072656d6f766520646570656e64656e6379207769746820616460448201527f646974696f6e616c2043444e732c207265706f7369746f726965732c206f72206064820152667363726970747360c81b608482015260a401610535565b6120a660668561259d565b506000848152606860205260408120906120c082826127aa565b6120ce6002830160006127aa565b6120dc6004830160006127aa565b5060060180546001600160481b031916905560405184907f60e2aa021c4f5303dd65e2173f0180636e4d42eaefc6187278e92bee9d06aa7290600090a250505050565b637ce07d7360e11b6121323330836108f8565b61214e5760405162461bcd60e51b815260040161053590612c8f565b8261215a6066826121c2565b6121765760405162461bcd60e51b815260040161053590612cbf565b60008481526068602052604090206002016121918482612f7e565b50837f774918414e4887efe5349a305fe253ee8b1e3fe0c2117012f0c215645693cbfd84604051610d109190612ae6565b60006121ce83836125a9565b9392505050565b6000610c67825490565b60006121ce83836125c1565b60006121ce836001600160a01b0384166125a9565b60006121ce836001600160a01b0384166125eb565b6000816001600160a01b0316604051612239906001600160f81b0319815260010190565b6000604051808303816000865af19150503d8060008114612276576040519150601f19603f3d011682016040523d82523d6000602084013e61227b565b606091505b50509050806119b95760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374417353746f726167653a2044656c657465204572726f72006044820152606401610535565b60008030836040516020016122e29291906131ae565b60405160208183030381529060405290508051602082016000f091506001600160a01b0382166123545760405162461bcd60e51b815260206004820152601e60248201527f436f6e7472616374417353746f726167653a205772697465204572726f7200006044820152606401610535565b50919050565b606060005b828160ff166020811061237457612374612ec3565b1a60f81b6001600160f81b03191615801590612393575060208160ff16105b156123aa57806123a28161327f565b91505061235f565b60405191506040820160405280825282602083015250919050565b336123ce61150f565b6001600160a01b0316146113d95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610535565b61242d816126de565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600080805b60208160ff1610156124ae576000868260ff166020811061247757612477612ec3565b1a9050801580159061248c575060808160ff16105b156124a5578560ff168160ff16036124a5578260010192505b50600101612454565b8360ff168260ff1614925050509392505050565b60006121ce8383612730565b6060813b60688110806124df575080155b1561252c5760405162461bcd60e51b815260206004820152601d60248201527f436f6e7472616374417353746f726167653a2052656164204572726f720000006044820152606401610535565b604080516028198301601f19168101909152606719820180825290925080606860208501863c5050919050565b600054610100900460ff166125805760405162461bcd60e51b81526004016105359061329e565b6113d961277a565b60006121ce836001600160a01b038416612730565b60006121ce83836125eb565b60009081526001919091016020526040902054151590565b60008260000182815481106125d8576125d8612ec3565b9060005260206000200154905092915050565b600081815260018301602052604081205480156126d457600061260f600183612d3e565b855490915060009061262390600190612d3e565b905081811461268857600086600001828154811061264357612643612ec3565b906000526020600020015490508087600001848154811061266657612666612ec3565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612699576126996132e9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610c67565b6000915050610c67565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061273c83836125a9565b61277257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c67565b506000610c67565b600054610100900460ff166127a15760405162461bcd60e51b81526004016105359061329e565b6113d933612424565b5080546127b690612d51565b6000825580601f106127c6575050565b601f016020900490600052602060002090810190611e8291905b808211156127f457600081556001016127e0565b5090565b6000806040838503121561280b57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015610e6d5783516001600160a01b031683529284019291840191600101612836565b80356001600160a01b038116811461287257600080fd5b919050565b60006020828403121561288957600080fd5b6121ce8261285b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156128d0576128d0612892565b604052919050565b60006001600160401b038211156128f1576128f1612892565b50601f01601f191660200190565b600082601f83011261291057600080fd5b813561292361291e826128d8565b6128a8565b81815284602083860101111561293857600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561296a57600080fd5b833592506020840135915060408401356001600160401b0381111561298e57600080fd5b61299a868287016128ff565b9150509250925092565b6000806000606084860312156129b957600080fd5b6129c28461285b565b92506129d06020850161285b565b915060408401356001600160e01b0319811681146129ed57600080fd5b809150509250925092565b600060208284031215612a0a57600080fd5b5035919050565b60005b83811015612a2c578181015183820152602001612a14565b50506000910152565b60008151808452612a4d816020860160208601612a11565b601f01601f19169290920160200192915050565b6000610100808352612a758184018c612a35565b90508281036020840152612a89818b612a35565b905062ffffff808a1660408501528382036060850152612aa9828a612a35565b9150808816608085015283820360a0850152612ac58288612a35565b925085151560c085015280851660e085015250509998505050505050505050565b6020815260006121ce6020830184612a35565b60008060408385031215612b0c57600080fd5b8235915060208301356001600160401b03811115612b2957600080fd5b612b35858286016128ff565b9150509250929050565b60008060408385031215612b5257600080fd5b612b5b8361285b565b946020939093013593505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612bbe57603f19888603018452612bac858351612a35565b94509285019290850190600101612b90565b5092979650505050505050565b60008060008060808587031215612be157600080fd5b8435935060208501356001600160401b0380821115612bff57600080fd5b612c0b888389016128ff565b94506040870135915080821115612c2157600080fd5b612c2d888389016128ff565b93506060870135915080821115612c4357600080fd5b50612c50878288016128ff565b91505092959194509250565b600080600060608486031215612c7157600080fd5b612c7a8461285b565b95602085013595506040909401359392505050565b60208082526016908201527513db9b1e4810591b5a5b881050d308185b1b1bddd95960521b604082015260600190565b6020808252601e908201527f446570656e64656e6379207479706520646f6573206e6f742065786973740000604082015260600190565b602080825260189082015277417373657420696e646578206f7574206f662072616e676560401b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c6757610c67612d28565b600181811c90821680612d6557607f821691505b60208210810361235457634e487b7160e01b600052602260045260246000fd5b601f821115612dcf57600081815260208120601f850160051c81016020861015612dac5750805b601f850160051c820191505b81811015612dcb57828155600101612db8565b5050505b505050565b600019600383901b1c191660019190911b1790565b818103612df4575050565b612dfe8254612d51565b6001600160401b03811115612e1557612e15612892565b612e2981612e238454612d51565b84612d85565b6000601f821160018114612e575760008315612e455750848201545b612e4f8482612dd4565b855550612ebc565b600085815260209020601f19841690600086815260209020845b83811015612e915782860154825560019586019590910190602001612e71565b5085831015612eaf5781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201612eeb57612eeb612d28565b5060010190565b6020808252601b908201527a10dbdc994818dbdb9d1c9858dd081b9bdd081cdd5c1c1bdc9d1959602a1b604082015260600190565b6020808252601b908201527a4d75737420696e707574206e6f6e2d656d70747920737472696e6760281b604082015260600190565b600060208284031215612f6e57600080fd5b815180151581146121ce57600080fd5b81516001600160401b03811115612f9757612f97612892565b612fa581612e238454612d51565b602080601f831160018114612fd45760008415612fc25750858301515b612fcc8582612dd4565b865550612dcb565b600085815260208120601f198616915b8281101561300357888601518255948401946001909101908401612fe4565b50858210156130215787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f83011261304257600080fd5b815161305061291e826128d8565b81815284602083860101111561306557600080fd5b61099c826020830160208701612a11565b60008060006060848603121561308b57600080fd5b83516001600160401b03808211156130a257600080fd5b6130ae87838801613031565b945060208601519150808211156130c457600080fd5b506130d186828701613031565b925050604084015190509250925092565b62ffffff8281168282160390808211156106fe576106fe612d28565b80820180821115610c6757610c67612d28565b6040815260006131246040830185612a35565b90508260208301529392505050565b6060815260006131466060830186612a35565b82810360208401526131588186612a35565b9050828103604084015261316c8185612a35565b9695505050505050565b62ffffff8181168382160190808211156106fe576106fe612d28565b600081516131a4818560208601612a11565b9290920192915050565b6a600b5981380380925939f360a81b81526b1808181218000e5800144cc560a21b600b8201526330082bff60e11b60178201526416d8004d8560da1b601b82015263300cabff60e11b6020820152635b60003560e01b6024820152617fff60f01b6028820152600060488201819052600560fa1b6049830152633021abff60e11b604a830152645b600051ff60d81b604e8301526132536053830160008152600c0190565b613269818660601b6001600160601b0319169052565b6132766014820185613192565b95945050505050565b600060ff821660ff810361329557613295612d28565b60010192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fdfef79e11fc86b9bf37d5dfd4359c053136f7c046da6a08f9cf7ca56d80d5aab839a26469706673582212205170476bd4d182243244c474e45e3454216e332cef6ffe03aa01ea1726a893a364736f6c63430008110033",
1017
- "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101c75760003560e01c80637cbb45c8116101005780637cbb45c81461039957806389f8ba4f146103a15780638da5cb5b146103b457806392f4f506146103bc5780639d5c4b78146103f4578063a809c1fc14610407578063b491702c1461041a578063b86b69f11461042d578063bbf2aefb14610435578063be3d3ee614610448578063c4d66de81461045b578063da7810fe1461046e578063dbc71ccb14610481578063dc33f4ae14610494578063f146f17f146104a7578063f2fde38b146104ba578063f73f4991146104cd578063f8ac18be146104e0578063f9c0fae6146104f357600080fd5b806304e3c7f6146101cc57806307f9f786146101e1578063199eb8e0146101ff5780631a051d49146102125780631e9bef4614610225578063230448b11461025057806325ffb37614610273578063336af8101461029a5780633bd7cfa2146102ba578063474bbdc2146102cd57806351eda999146102e057806352ccc021146102f55780635668bc5e146103085780635710f83d14610345578063596224dc1461035857806359d8a7331461036b5780636c4056a81461037e578063715018a614610391575b600080fd5b6101df6101da3660046127f8565b610506565b005b6101e9610656565b6040516101f6919061281a565b60405180910390f35b6101df61020d366004612877565b610705565b6101df610220366004612955565b6107a0565b606554610238906001600160a01b031681565b6040516001600160a01b0390911681526020016101f6565b61026361025e3660046129a4565b6108f8565b60405190151581526020016101f6565b6102866102813660046129f8565b6109a4565b6040516101f6989796959493929190612a61565b6102ad6102a83660046127f8565b610bbb565b6040516101f69190612ae6565b6101df6102c8366004612af9565b610c6d565b6102ad6102db366004612b3f565b610d1e565b6102e8610e79565b6040516101f69190612b69565b6101df6103033660046129f8565b610f38565b6103376103163660046129f8565b600090815260686020526040902060060154600160301b900462ffffff1690565b6040519081526020016101f6565b6101df610353366004612af9565b6110d9565b6101df610366366004612955565b6111f9565b6102386103793660046129f8565b61130f565b6102ad61038c3660046129f8565b61136a565b6101df6113c7565b6103376113db565b6101df6103af3660046127f8565b6113ec565b61023861150f565b6102386103ca3660046127f8565b6000918252606860209081526040808420928452600590920190529020546001600160a01b031690565b6102ad6104023660046127f8565b611523565b6101df610415366004612bcb565b61154e565b6102ad6104283660046127f8565b6116b3565b610337611715565b6101df610443366004612c5c565b611721565b6101df610456366004612af9565b611802565b6101df610469366004612877565b6118a2565b6101df61047c366004612955565b6119bd565b6101df61048f366004612877565b611aba565b6101df6104a2366004612af9565b611bd8565b6101df6104b5366004612af9565b611d04565b6101df6104c8366004612877565b611e0c565b6101df6104db366004612b3f565b611e85565b6101df6104ee3660046129f8565b611f75565b6101df610501366004612af9565b61211f565b630271e3fb60e11b6105193330836108f8565b61053e5760405162461bcd60e51b815260040161053590612c8f565b60405180910390fd5b8261054a6066826121c2565b6105665760405162461bcd60e51b815260040161053590612cbf565b600084815260686020526040902060068101546301000000900462ffffff168085106105a45760405162461bcd60e51b815260040161053590612cf6565b60006105b1600183612d3e565b6000888152606860209081526040808320848452600390810183528184208b85529088019092529091209192506105e89082612de9565b5060008181526003840160205260408120610602916127aa565b60068301805465ffffff0000001916630100000062ffffff841602179055604051869088907fc02725dfc9639e3399432cdae3db1c062229f4cc41bcc18631517617c020b71c90600090a350505050505050565b6060600061066460696121d5565b90506000816001600160401b0381111561068057610680612892565b6040519080825280602002602001820160405280156106a9578160200160208202803683370190505b50905060005b828110156106fe576106c26069826121df565b8282815181106106d4576106d4612ec3565b6001600160a01b0390921660209283029190910190910152806106f681612ed9565b9150506106af565b5092915050565b62ccf5c760e51b6107173330836108f8565b6107335760405162461bcd60e51b815260040161053590612c8f565b8161073f6069826121eb565b61075b5760405162461bcd60e51b815260040161053590612ef2565b610766606984612200565b506040516001600160a01b038416907f2453d2f77bae1012d39e2257356d2566625ebe0ffd6094198aa051689dc65ba090600090a2505050565b631a051d4960e01b6107b33330836108f8565b6107cf5760405162461bcd60e51b815260040161053590612c8f565b8180516000036107f15760405162461bcd60e51b815260040161053590612f27565b846107fd6066826121c2565b6108195760405162461bcd60e51b815260040161053590612cbf565b60008681526068602052604090206006810154600160301b900462ffffff16861061087e5760405162461bcd60e51b81526020600482015260156024820152747363726970744964206f7574206f662072616e676560581b6044820152606401610535565b60008681526005820160205260409020546108a1906001600160a01b0316612215565b6108aa856122cc565b600087815260058301602052604080822080546001600160a01b0319166001600160a01b0394909416939093179092559051889160008051602061330083398151915291a250505050505050565b60008061090361150f565b6001600160a01b03161415801561099c57506065546040516217798b60e61b81526001600160a01b03868116600483015285811660248301526001600160e01b031985166044830152909116906305de62c0906064016020604051808303816000875af1158015610978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099c9190612f5c565b949350505050565b60008181526068602052604081206060918291829082908290829081906109ca8a61235a565b60068201548254839162ffffff808216926002850192630100000081048316926004870192600160301b90920416801515918790610a0790612d51565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3390612d51565b8015610a805780601f10610a5557610100808354040283529160200191610a80565b820191906000526020600020905b815481529060010190602001808311610a6357829003601f168201915b50505050509650848054610a9390612d51565b80601f0160208091040260200160405190810160405280929190818152602001828054610abf90612d51565b8015610b0c5780601f10610ae157610100808354040283529160200191610b0c565b820191906000526020600020905b815481529060010190602001808311610aef57829003601f168201915b50505050509450828054610b1f90612d51565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4b90612d51565b8015610b985780601f10610b6d57610100808354040283529160200191610b98565b820191906000526020600020905b815481529060010190602001808311610b7b57829003601f168201915b505050505092509850985098509850985098509850985050919395975091939597565b60008281526068602090815260408083208484526003019091529020805460609190610be690612d51565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1290612d51565b8015610c5f5780601f10610c3457610100808354040283529160200191610c5f565b820191906000526020600020905b815481529060010190602001808311610c4257829003601f168201915b505050505090505b92915050565b631debe7d160e11b610c803330836108f8565b610c9c5760405162461bcd60e51b815260040161053590612c8f565b82610ca86066826121c2565b610cc45760405162461bcd60e51b815260040161053590612cbf565b6000848152606860205260409020600401610cdf8482612f7e565b50837f9959f3af1c0191277b92c192984b5ca38adaf82d8465332b4da850e0e6a199f484604051610d109190612ae6565b60405180910390a250505050565b606082610d2c6069826121eb565b610d485760405162461bcd60e51b815260040161053590612ef2565b6001600160a01b0384166000908152606b602090815260408083208684529091529020548015610d8357610d7b8161235a565b9250506106fe565b604051633ae7357560e21b8152600481018590526001600160a01b0386169063eb9cd5d490602401600060405180830381865afa925050508015610de957506040513d6000823e601f3d908101601f19168201604052610de69190810190613076565b60015b610e6d5760405162461bcd60e51b815260206004820152604960248201527f436f6e747261637420646f6573206e6f7420696d706c656d656e742070726f6a60448201527f65637453637269707444657461696c7320616e6420686173206e6f206f7665726064820152683934b2329039b2ba1760b91b608482015260a401610535565b50909695505050505050565b60606000610e8760666121d5565b6001600160401b03811115610e9e57610e9e612892565b604051908082528060200260200182016040528015610ed157816020015b6060815260200190600190039081610ebc5790505b5090506000610ee060666121d5565b905060005b81811015610f3057610f00610efb6066836121df565b61235a565b838281518110610f1257610f12612ec3565b60200260200101819052508080610f2890612ed9565b915050610ee5565b509092915050565b6352ccc02160e01b610f4b3330836108f8565b610f675760405162461bcd60e51b815260040161053590612c8f565b81610f736066826121c2565b610f8f5760405162461bcd60e51b815260040161053590612cbf565b60008381526068602052604090206006810154600160301b900462ffffff16610ffa5760405162461bcd60e51b815260206004820152601e60248201527f746865726520617265206e6f207363726970747320746f2072656d6f766500006044820152606401610535565b61104781600501600060018460060160069054906101000a900462ffffff1661102391906130e2565b62ffffff1681526020810191909152604001600020546001600160a01b0316612215565b6006810154600582019060009061106c90600190600160301b900462ffffff166130e2565b62ffffff908116825260208201929092526040908101600090812080546001600160a01b031916905560068401805462ffffff60301b198116600160301b91829004861660001901909516029390931790925551859160008051602061330083398151915291a250505050565b635710f83d60e01b6110ec3330836108f8565b6111085760405162461bcd60e51b815260040161053590612c8f565b81805160000361112a5760405162461bcd60e51b815260040161053590612f27565b836111366066826121c2565b6111525760405162461bcd60e51b815260040161053590612cbf565b600085815260686020908152604080832060068101546301000000900462ffffff1680855260038201909352922061118a8782612f7e565b506111968160016130fe565b8260060160036101000a81548162ffffff021916908362ffffff160217905550867ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde87836040516111e8929190613111565b60405180910390a250505050505050565b631658893760e21b61120c3330836108f8565b6112285760405162461bcd60e51b815260040161053590612c8f565b81805160000361124a5760405162461bcd60e51b815260040161053590612f27565b846112566066826121c2565b6112725760405162461bcd60e51b815260040161053590612cbf565b600086815260686020526040902060068101546301000000900462ffffff168087106112b05760405162461bcd60e51b815260040161053590612cf6565b600087815260038301602052604090206112ca8782612f7e565b50877ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde87896040516112fd929190613111565b60405180910390a25050505050505050565b60008161131c60696121d5565b1161135f5760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606401610535565b610c676069836121df565b60608161137760666121d5565b116113b95760405162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b6044820152606401610535565b610c67610efb6066846121df565b6113cf6123c5565b6113d96000612424565b565b60006113e760666121d5565b905090565b6389f8ba4f60e01b6113ff3330836108f8565b61141b5760405162461bcd60e51b815260040161053590612c8f565b826114276066826121c2565b6114435760405162461bcd60e51b815260040161053590612cbf565b6000848152606860205260409020600681015462ffffff1680851061147a5760405162461bcd60e51b815260040161053590612cf6565b6000611487600183612d3e565b600081815260018501602052604080822089835291209192506114aa9082612de9565b50600081815260018401602052604081206114c4916127aa565b60068301805462ffffff191662ffffff8316179055604051869088907f225454b600cf489553fde6e3b7f5e458b1093c035390b678067ea799b3b016cd90600090a350505050505050565b60006113e76033546001600160a01b031690565b60008281526068602090815260408083208484526001019091529020805460609190610be690612d51565b632a02707f60e21b6115613330836108f8565b61157d5760405162461bcd60e51b815260040161053590612c8f565b6115886066866121c2565b156115d55760405162461bcd60e51b815260206004820152601e60248201527f446570656e64656e6379207479706520616c72656164792065786973747300006044820152606401610535565b6115e2856040600161244f565b61162b5760405162461bcd60e51b815260206004820152601a60248201527901b5d5cdd0818dbdb9d185a5b88195e1858dd1b1e481bdb9948160361b6044820152606401610535565b6116366066866124c2565b506000858152606860205260409020806116508682612f7e565b506002810161165f8582612f7e565b506004810161166e8482612f7e565b50857f39626dd6a5a74e9944752116c5e878fbb4c1ac0cab72cd316f6f25ee19cff7658686866040516116a393929190613133565b60405180910390a2505050505050565b6000828152606860205260409020600681015460609190600160301b900462ffffff1683106116f2575050604080516020810190915260008152610c67565b600083815260058201602052604090205461099c906001600160a01b03166124ce565b60006113e760696121d5565b63bbf2aefb60e01b6117343330836108f8565b6117505760405162461bcd60e51b815260040161053590612c8f565b8161175c6066826121c2565b6117785760405162461bcd60e51b815260040161053590612cbf565b846117846069826121eb565b6117a05760405162461bcd60e51b815260040161053590612ef2565b6001600160a01b0386166000818152606b6020908152604080832089845282529182902087905590518681528792917f27d39273f3676c181ec3de60b583da776123d9f9517761fb91f370a83c798918910160405180910390a3505050505050565b635f1e9f7360e11b6118153330836108f8565b6118315760405162461bcd60e51b815260040161053590612c8f565b8261183d6066826121c2565b6118595760405162461bcd60e51b815260040161053590612cbf565b60008481526068602052604090206118718482612f7e565b50837fc9890a31ec780bb5a8a017d683d3913f97260548d71c2cee78194ed2833f023584604051610d109190612ae6565b600054610100900460ff16158080156118c25750600054600160ff909116105b806118dc5750303b1580156118dc575060005460ff166001145b61193f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610535565b6000805460ff191660011790558015611962576000805461ff0019166101001790555b61196a612559565b61197382612424565b80156119b9576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b636d3c087f60e11b6119d03330836108f8565b6119ec5760405162461bcd60e51b815260040161053590612c8f565b818051600003611a0e5760405162461bcd60e51b815260040161053590612f27565b84611a1a6066826121c2565b611a365760405162461bcd60e51b815260040161053590612cbf565b6000868152606860205260409020600681015462ffffff16808710611a6d5760405162461bcd60e51b815260040161053590612cf6565b60008781526001830160205260409020611a878782612f7e565b50877f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d87896040516112fd929190613111565b63dbc71ccb60e01b611acd3330836108f8565b611ae95760405162461bcd60e51b815260040161053590612c8f565b816001600160a01b038116611b3e5760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d7a65726f206164647265737360281b6044820152606401610535565b611b496069846121eb565b15611b935760405162461bcd60e51b815260206004820152601a60248201527910dbdb9d1c9858dd08185b1c9958591e481cdd5c1c1bdc9d195960321b6044820152606401610535565b611b9e606984612588565b506040516001600160a01b038416907f59e1b889b92ad05213b7934a67c5d824348c868455d1c741a2cfe16e46d832dc90600090a2505050565b636e19fa5760e11b611beb3330836108f8565b611c075760405162461bcd60e51b815260040161053590612c8f565b818051600003611c295760405162461bcd60e51b815260040161053590612f27565b83611c356066826121c2565b611c515760405162461bcd60e51b815260040161053590612cbf565b6000858152606860205260409020611c68856122cc565b600682018054600160301b9081900462ffffff9081166000908152600586016020526040902080546001600160a01b0319166001600160a01b0395909516949094179093559054611cbe92919004166001613176565b60068201805462ffffff92909216600160301b0262ffffff60301b19909216919091179055604051869060008051602061330083398151915290600090a2505050505050565b63f146f17f60e01b611d173330836108f8565b611d335760405162461bcd60e51b815260040161053590612c8f565b818051600003611d555760405162461bcd60e51b815260040161053590612f27565b83611d616066826121c2565b611d7d5760405162461bcd60e51b815260040161053590612cbf565b6000858152606860209081526040808320600681015462ffffff16808552600182019093529220611dae8782612f7e565b50611dba8160016130fe565b8260060160006101000a81548162ffffff021916908362ffffff160217905550867f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d87836040516111e8929190613111565b611e146123c5565b6001600160a01b038116611e795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610535565b611e8281612424565b50565b63f73f499160e01b611e983330836108f8565b611eb45760405162461bcd60e51b815260040161053590612c8f565b6001600160a01b0383166000908152606b60209081526040808320858452909152902054611f225760405162461bcd60e51b815260206004820152601b60248201527a139bc81bdd995c9c9a5919481cd95d08199bdc881c1c9bda9958dd602a1b6044820152606401610535565b6001600160a01b0383166000818152606b60209081526040808320868452909152808220829055518492917f0732620824c0200808d04ab037f3abc3c31853170b90f5a855d32f44486048ed91a3505050565b637c560c5f60e11b611f883330836108f8565b611fa45760405162461bcd60e51b815260040161053590612c8f565b81611fb06066826121c2565b611fcc5760405162461bcd60e51b815260040161053590612cbf565b6000838152606860205260409020600681015462ffffff16158015611fff575060068101546301000000900462ffffff16155b801561201957506006810154600160301b900462ffffff16155b61209b5760405162461bcd60e51b815260206004820152604760248201527f43616e6e6f742072656d6f766520646570656e64656e6379207769746820616460448201527f646974696f6e616c2043444e732c207265706f7369746f726965732c206f72206064820152667363726970747360c81b608482015260a401610535565b6120a660668561259d565b506000848152606860205260408120906120c082826127aa565b6120ce6002830160006127aa565b6120dc6004830160006127aa565b5060060180546001600160481b031916905560405184907f60e2aa021c4f5303dd65e2173f0180636e4d42eaefc6187278e92bee9d06aa7290600090a250505050565b637ce07d7360e11b6121323330836108f8565b61214e5760405162461bcd60e51b815260040161053590612c8f565b8261215a6066826121c2565b6121765760405162461bcd60e51b815260040161053590612cbf565b60008481526068602052604090206002016121918482612f7e565b50837f774918414e4887efe5349a305fe253ee8b1e3fe0c2117012f0c215645693cbfd84604051610d109190612ae6565b60006121ce83836125a9565b9392505050565b6000610c67825490565b60006121ce83836125c1565b60006121ce836001600160a01b0384166125a9565b60006121ce836001600160a01b0384166125eb565b6000816001600160a01b0316604051612239906001600160f81b0319815260010190565b6000604051808303816000865af19150503d8060008114612276576040519150601f19603f3d011682016040523d82523d6000602084013e61227b565b606091505b50509050806119b95760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374417353746f726167653a2044656c657465204572726f72006044820152606401610535565b60008030836040516020016122e29291906131ae565b60405160208183030381529060405290508051602082016000f091506001600160a01b0382166123545760405162461bcd60e51b815260206004820152601e60248201527f436f6e7472616374417353746f726167653a205772697465204572726f7200006044820152606401610535565b50919050565b606060005b828160ff166020811061237457612374612ec3565b1a60f81b6001600160f81b03191615801590612393575060208160ff16105b156123aa57806123a28161327f565b91505061235f565b60405191506040820160405280825282602083015250919050565b336123ce61150f565b6001600160a01b0316146113d95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610535565b61242d816126de565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600080805b60208160ff1610156124ae576000868260ff166020811061247757612477612ec3565b1a9050801580159061248c575060808160ff16105b156124a5578560ff168160ff16036124a5578260010192505b50600101612454565b8360ff168260ff1614925050509392505050565b60006121ce8383612730565b6060813b60688110806124df575080155b1561252c5760405162461bcd60e51b815260206004820152601d60248201527f436f6e7472616374417353746f726167653a2052656164204572726f720000006044820152606401610535565b604080516028198301601f19168101909152606719820180825290925080606860208501863c5050919050565b600054610100900460ff166125805760405162461bcd60e51b81526004016105359061329e565b6113d961277a565b60006121ce836001600160a01b038416612730565b60006121ce83836125eb565b60009081526001919091016020526040902054151590565b60008260000182815481106125d8576125d8612ec3565b9060005260206000200154905092915050565b600081815260018301602052604081205480156126d457600061260f600183612d3e565b855490915060009061262390600190612d3e565b905081811461268857600086600001828154811061264357612643612ec3565b906000526020600020015490508087600001848154811061266657612666612ec3565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612699576126996132e9565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610c67565b6000915050610c67565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061273c83836125a9565b61277257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c67565b506000610c67565b600054610100900460ff166127a15760405162461bcd60e51b81526004016105359061329e565b6113d933612424565b5080546127b690612d51565b6000825580601f106127c6575050565b601f016020900490600052602060002090810190611e8291905b808211156127f457600081556001016127e0565b5090565b6000806040838503121561280b57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015610e6d5783516001600160a01b031683529284019291840191600101612836565b80356001600160a01b038116811461287257600080fd5b919050565b60006020828403121561288957600080fd5b6121ce8261285b565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156128d0576128d0612892565b604052919050565b60006001600160401b038211156128f1576128f1612892565b50601f01601f191660200190565b600082601f83011261291057600080fd5b813561292361291e826128d8565b6128a8565b81815284602083860101111561293857600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561296a57600080fd5b833592506020840135915060408401356001600160401b0381111561298e57600080fd5b61299a868287016128ff565b9150509250925092565b6000806000606084860312156129b957600080fd5b6129c28461285b565b92506129d06020850161285b565b915060408401356001600160e01b0319811681146129ed57600080fd5b809150509250925092565b600060208284031215612a0a57600080fd5b5035919050565b60005b83811015612a2c578181015183820152602001612a14565b50506000910152565b60008151808452612a4d816020860160208601612a11565b601f01601f19169290920160200192915050565b6000610100808352612a758184018c612a35565b90508281036020840152612a89818b612a35565b905062ffffff808a1660408501528382036060850152612aa9828a612a35565b9150808816608085015283820360a0850152612ac58288612a35565b925085151560c085015280851660e085015250509998505050505050505050565b6020815260006121ce6020830184612a35565b60008060408385031215612b0c57600080fd5b8235915060208301356001600160401b03811115612b2957600080fd5b612b35858286016128ff565b9150509250929050565b60008060408385031215612b5257600080fd5b612b5b8361285b565b946020939093013593505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612bbe57603f19888603018452612bac858351612a35565b94509285019290850190600101612b90565b5092979650505050505050565b60008060008060808587031215612be157600080fd5b8435935060208501356001600160401b0380821115612bff57600080fd5b612c0b888389016128ff565b94506040870135915080821115612c2157600080fd5b612c2d888389016128ff565b93506060870135915080821115612c4357600080fd5b50612c50878288016128ff565b91505092959194509250565b600080600060608486031215612c7157600080fd5b612c7a8461285b565b95602085013595506040909401359392505050565b60208082526016908201527513db9b1e4810591b5a5b881050d308185b1b1bddd95960521b604082015260600190565b6020808252601e908201527f446570656e64656e6379207479706520646f6573206e6f742065786973740000604082015260600190565b602080825260189082015277417373657420696e646578206f7574206f662072616e676560401b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610c6757610c67612d28565b600181811c90821680612d6557607f821691505b60208210810361235457634e487b7160e01b600052602260045260246000fd5b601f821115612dcf57600081815260208120601f850160051c81016020861015612dac5750805b601f850160051c820191505b81811015612dcb57828155600101612db8565b5050505b505050565b600019600383901b1c191660019190911b1790565b818103612df4575050565b612dfe8254612d51565b6001600160401b03811115612e1557612e15612892565b612e2981612e238454612d51565b84612d85565b6000601f821160018114612e575760008315612e455750848201545b612e4f8482612dd4565b855550612ebc565b600085815260209020601f19841690600086815260209020845b83811015612e915782860154825560019586019590910190602001612e71565b5085831015612eaf5781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201612eeb57612eeb612d28565b5060010190565b6020808252601b908201527a10dbdc994818dbdb9d1c9858dd081b9bdd081cdd5c1c1bdc9d1959602a1b604082015260600190565b6020808252601b908201527a4d75737420696e707574206e6f6e2d656d70747920737472696e6760281b604082015260600190565b600060208284031215612f6e57600080fd5b815180151581146121ce57600080fd5b81516001600160401b03811115612f9757612f97612892565b612fa581612e238454612d51565b602080601f831160018114612fd45760008415612fc25750858301515b612fcc8582612dd4565b865550612dcb565b600085815260208120601f198616915b8281101561300357888601518255948401946001909101908401612fe4565b50858210156130215787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f83011261304257600080fd5b815161305061291e826128d8565b81815284602083860101111561306557600080fd5b61099c826020830160208701612a11565b60008060006060848603121561308b57600080fd5b83516001600160401b03808211156130a257600080fd5b6130ae87838801613031565b945060208601519150808211156130c457600080fd5b506130d186828701613031565b925050604084015190509250925092565b62ffffff8281168282160390808211156106fe576106fe612d28565b80820180821115610c6757610c67612d28565b6040815260006131246040830185612a35565b90508260208301529392505050565b6060815260006131466060830186612a35565b82810360208401526131588186612a35565b9050828103604084015261316c8185612a35565b9695505050505050565b62ffffff8181168382160190808211156106fe576106fe612d28565b600081516131a4818560208601612a11565b9290920192915050565b6a600b5981380380925939f360a81b81526b1808181218000e5800144cc560a21b600b8201526330082bff60e11b60178201526416d8004d8560da1b601b82015263300cabff60e11b6020820152635b60003560e01b6024820152617fff60f01b6028820152600060488201819052600560fa1b6049830152633021abff60e11b604a830152645b600051ff60d81b604e8301526132536053830160008152600c0190565b613269818660601b6001600160601b0319169052565b6132766014820185613192565b95945050505050565b600060ff821660ff810361329557613295612d28565b60010192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fdfef79e11fc86b9bf37d5dfd4359c053136f7c046da6a08f9cf7ca56d80d5aab839a26469706673582212205170476bd4d182243244c474e45e3454216e332cef6ffe03aa01ea1726a893a364736f6c63430008110033",
1016
+ "bytecode": "0x608060405234801561001057600080fd5b50612ee2806100206000396000f3fe608060405234801561001057600080fd5b50600436106101c75760003560e01c80637cbb45c8116101005780637cbb45c81461039957806389f8ba4f146103a15780638da5cb5b146103b457806392f4f506146103bc5780639d5c4b78146103f4578063a809c1fc14610407578063b491702c1461041a578063b86b69f11461042d578063bbf2aefb14610435578063be3d3ee614610448578063c4d66de81461045b578063da7810fe1461046e578063dbc71ccb14610481578063dc33f4ae14610494578063f146f17f146104a7578063f2fde38b146104ba578063f73f4991146104cd578063f8ac18be146104e0578063f9c0fae6146104f357600080fd5b806304e3c7f6146101cc57806307f9f786146101e1578063199eb8e0146101ff5780631a051d49146102125780631e9bef4614610225578063230448b11461025057806325ffb37614610273578063336af8101461029a5780633bd7cfa2146102ba578063474bbdc2146102cd57806351eda999146102e057806352ccc021146102f55780635668bc5e146103085780635710f83d14610345578063596224dc1461035857806359d8a7331461036b5780636c4056a81461037e578063715018a614610391575b600080fd5b6101df6101da36600461244a565b610506565b005b6101e9610616565b6040516101f6919061246c565b60405180910390f35b6101df61020d3660046124d5565b6106c5565b6101df6102203660046125b3565b610720565b606554610238906001600160a01b031681565b6040516001600160a01b0390911681526020016101f6565b61026361025e366004612602565b61081e565b60405190151581526020016101f6565b610286610281366004612656565b6108ca565b6040516101f69897969594939291906126bf565b6102ad6102a836600461244a565b610ae1565b6040516101f69190612744565b6101df6102c8366004612757565b610b93565b6102ad6102db36600461279d565b610c04565b6102e8610d40565b6040516101f691906127c7565b6101df610303366004612656565b610dff565b610337610316366004612656565b600090815260686020526040902060060154600160301b900462ffffff1690565b6040519081526020016101f6565b6101df610353366004612757565b610f60565b6101df6103663660046125b3565b611026565b610238610379366004612656565b6110e2565b6102ad61038c366004612656565b61113d565b6101df61119a565b6103376111ae565b6101df6103af36600461244a565b6111bf565b6102386112a2565b6102386103ca36600461244a565b6000918252606860209081526040808420928452600590920190529020546001600160a01b031690565b6102ad61040236600461244a565b6112b6565b6101df610415366004612829565b6112e1565b6102ad61042836600461244a565b611417565b610337611479565b6101df6104433660046128ba565b611485565b6101df610456366004612757565b611506565b6101df6104693660046124d5565b611568565b6101df61047c3660046125b3565b611683565b6101df61048f3660046124d5565b611729565b6101df6104a2366004612757565b6117da565b6101df6104b5366004612757565b6118ac565b6101df6104c83660046124d5565b61195d565b6101df6104db36600461279d565b6119d6565b6101df6104ee366004612656565b611aa6565b6101df610501366004612757565b611c10565b610516630271e3fb60e11b611c75565b61051f82611cc5565b600082815260686020526040902060068101546301000000900462ffffff168083106105665760405162461bcd60e51b815260040161055d906128ed565b60405180910390fd5b6000610573600183612935565b6000868152606860209081526040808320848452600390810183528184208985529088019092529091209192506105aa90826129e0565b50600081815260038401602052604081206105c4916123fc565b60068301805465ffffff0000001916630100000062ffffff841602179055604051849086907fc02725dfc9639e3399432cdae3db1c062229f4cc41bcc18631517617c020b71c90600090a35050505050565b606060006106246069611d1c565b90506000816001600160401b03811115610640576106406124f0565b604051908082528060200260200182016040528015610669578160200160208202803683370190505b50905060005b828110156106be57610682606982611d26565b82828151811061069457610694612aba565b6001600160a01b0390921660209283029190910190910152806106b681612ad0565b91505061066f565b5092915050565b6106d462ccf5c760e51b611c75565b6106dd81611d39565b6106e8606982611d8e565b506040516001600160a01b038216907f2453d2f77bae1012d39e2257356d2566625ebe0ffd6094198aa051689dc65ba090600090a250565b610730631a051d4960e01b611c75565b61073981611da3565b61074283611cc5565b60008381526068602052604090206006810154600160301b900462ffffff1683106107a75760405162461bcd60e51b81526020600482015260156024820152747363726970744964206f7574206f662072616e676560581b604482015260640161055d565b60008381526005820160205260409020546107ca906001600160a01b0316611df2565b6107d382611ea9565b600084815260058301602052604080822080546001600160a01b0319166001600160a01b03949094169390931790925590518591600080516020612e8d83398151915291a250505050565b6000806108296112a2565b6001600160a01b0316141580156108c257506065546040516217798b60e61b81526001600160a01b03868116600483015285811660248301526001600160e01b031985166044830152909116906305de62c0906064016020604051808303816000875af115801561089e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c29190612ae9565b949350505050565b60008181526068602052604081206060918291829082908290829081906108f08a611f37565b60068201548254839162ffffff808216926002850192630100000081048316926004870192600160301b9092041680151591879061092d90612948565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612948565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505096508480546109b990612948565b80601f01602080910402602001604051908101604052809291908181526020018280546109e590612948565b8015610a325780601f10610a0757610100808354040283529160200191610a32565b820191906000526020600020905b815481529060010190602001808311610a1557829003601f168201915b50505050509450828054610a4590612948565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7190612948565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b505050505092509850985098509850985098509850985050919395975091939597565b60008281526068602090815260408083208484526003019091529020805460609190610b0c90612948565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3890612948565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b505050505090505b92915050565b610ba3631debe7d160e11b611c75565b610bac82611cc5565b6000828152606860205260409020600401610bc78282612b0b565b50817f9959f3af1c0191277b92c192984b5ca38adaf82d8465332b4da850e0e6a199f482604051610bf89190612744565b60405180910390a25050565b6060610c0f83611d39565b6001600160a01b0383166000908152606b602090815260408083208584529091529020548015610c4a57610c4281611f37565b915050610b8d565b604051633ae7357560e21b8152600481018490526001600160a01b0385169063eb9cd5d490602401600060405180830381865afa925050508015610cb057506040513d6000823e601f3d908101601f19168201604052610cad9190810190612c03565b60015b610d345760405162461bcd60e51b815260206004820152604960248201527f436f6e747261637420646f6573206e6f7420696d706c656d656e742070726f6a60448201527f65637453637269707444657461696c7320616e6420686173206e6f206f7665726064820152683934b2329039b2ba1760b91b608482015260a40161055d565b82945050505050610b8d565b60606000610d4e6066611d1c565b6001600160401b03811115610d6557610d656124f0565b604051908082528060200260200182016040528015610d9857816020015b6060815260200190600190039081610d835790505b5090506000610da76066611d1c565b905060005b81811015610df757610dc7610dc2606683611d26565b611f37565b838281518110610dd957610dd9612aba565b60200260200101819052508080610def90612ad0565b915050610dac565b509092915050565b610e0f6352ccc02160e01b611c75565b610e1881611cc5565b60008181526068602052604090206006810154600160301b900462ffffff16610e835760405162461bcd60e51b815260206004820152601e60248201527f746865726520617265206e6f207363726970747320746f2072656d6f76650000604482015260640161055d565b610ed081600501600060018460060160069054906101000a900462ffffff16610eac9190612c6f565b62ffffff1681526020810191909152604001600020546001600160a01b0316611df2565b60068101546005820190600090610ef590600190600160301b900462ffffff16612c6f565b62ffffff908116825260208201929092526040908101600090812080546001600160a01b031916905560068401805462ffffff60301b198116600160301b918290048616600019019095160293909317909255518391600080516020612e8d83398151915291a25050565b610f70635710f83d60e01b611c75565b610f7981611da3565b610f8282611cc5565b600082815260686020908152604080832060068101546301000000900462ffffff16808552600382019093529220610fba8482612b0b565b50610fc6816001612c8b565b8260060160036101000a81548162ffffff021916908362ffffff160217905550837ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde8483604051611018929190612c9e565b60405180910390a250505050565b611036631658893760e21b611c75565b61103f81611da3565b61104883611cc5565b600083815260686020526040902060068101546301000000900462ffffff168084106110865760405162461bcd60e51b815260040161055d906128ed565b600084815260038301602052604090206110a08482612b0b565b50847ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde84866040516110d3929190612c9e565b60405180910390a25050505050565b6000816110ef6069611d1c565b116111325760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b604482015260640161055d565b610b8d606983611d26565b60608161114a6066611d1c565b1161118c5760405162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b604482015260640161055d565b610b8d610dc2606684611d26565b6111a2611fa2565b6111ac6000612001565b565b60006111ba6066611d1c565b905090565b6111cf6389f8ba4f60e01b611c75565b6111d882611cc5565b6000828152606860205260409020600681015462ffffff1680831061120f5760405162461bcd60e51b815260040161055d906128ed565b600061121c600183612935565b6000818152600185016020526040808220878352912091925061123f90826129e0565b5060008181526001840160205260408120611259916123fc565b60068301805462ffffff191662ffffff8316179055604051849086907f225454b600cf489553fde6e3b7f5e458b1093c035390b678067ea799b3b016cd90600090a35050505050565b60006111ba6033546001600160a01b031690565b60008281526068602090815260408083208484526001019091529020805460609190610b0c90612948565b6112f1632a02707f60e21b611c75565b6112fc60668561202c565b156113495760405162461bcd60e51b815260206004820152601e60248201527f446570656e64656e6379207479706520616c7265616479206578697374730000604482015260640161055d565b6113568460406001612038565b61139f5760405162461bcd60e51b815260206004820152601a60248201527901b5d5cdd0818dbdb9d185a5b88195e1858dd1b1e481bdb9948160361b604482015260640161055d565b6113aa6066856120ab565b506000848152606860205260409020806113c48582612b0b565b50600281016113d38482612b0b565b50600481016113e28382612b0b565b50847f39626dd6a5a74e9944752116c5e878fbb4c1ac0cab72cd316f6f25ee19cff7658585856040516110d393929190612cc0565b6000828152606860205260409020600681015460609190600160301b900462ffffff168310611456575050604080516020810190915260008152610b8d565b60008381526005820160205260409020546108c2906001600160a01b03166120b7565b60006111ba6069611d1c565b61149563bbf2aefb60e01b611c75565b61149e81611cc5565b6114a783611d39565b6001600160a01b0383166000818152606b6020908152604080832086845282529182902084905590518381528492917f27d39273f3676c181ec3de60b583da776123d9f9517761fb91f370a83c798918910160405180910390a3505050565b611516635f1e9f7360e11b611c75565b61151f82611cc5565b60008281526068602052604090206115378282612b0b565b50817fc9890a31ec780bb5a8a017d683d3913f97260548d71c2cee78194ed2833f023582604051610bf89190612744565b600054610100900460ff16158080156115885750600054600160ff909116105b806115a25750303b1580156115a2575060005460ff166001145b6116055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161055d565b6000805460ff191660011790558015611628576000805461ff0019166101001790555b611630612142565b61163982612001565b801561167f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b611693636d3c087f60e11b611c75565b61169c81611da3565b6116a583611cc5565b6000838152606860205260409020600681015462ffffff168084106116dc5760405162461bcd60e51b815260040161055d906128ed565b600084815260018301602052604090206116f68482612b0b565b50847f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d84866040516110d3929190612c9e565b61173963dbc71ccb60e01b611c75565b61174281612171565b61174d6069826121c5565b156117975760405162461bcd60e51b815260206004820152601a60248201527910dbdb9d1c9858dd08185b1c9958591e481cdd5c1c1bdc9d195960321b604482015260640161055d565b6117a26069826121da565b506040516001600160a01b038216907f59e1b889b92ad05213b7934a67c5d824348c868455d1c741a2cfe16e46d832dc90600090a250565b6117ea636e19fa5760e11b611c75565b6117f381611da3565b6117fc82611cc5565b600082815260686020526040902061181382611ea9565b600682018054600160301b9081900462ffffff9081166000908152600586016020526040902080546001600160a01b0319166001600160a01b039590951694909417909355905461186992919004166001612d03565b60068201805462ffffff92909216600160301b0262ffffff60301b199092169190911790556040518390600080516020612e8d83398151915290600090a2505050565b6118bc63f146f17f60e01b611c75565b6118c581611da3565b6118ce82611cc5565b6000828152606860209081526040808320600681015462ffffff168085526001820190935292206118ff8482612b0b565b5061190b816001612c8b565b8260060160006101000a81548162ffffff021916908362ffffff160217905550837f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d8483604051611018929190612c9e565b611965611fa2565b6001600160a01b0381166119ca5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161055d565b6119d381612001565b50565b6119e663f73f499160e01b611c75565b6001600160a01b0382166000908152606b60209081526040808320848452909152902054611a545760405162461bcd60e51b815260206004820152601b60248201527a139bc81bdd995c9c9a5919481cd95d08199bdc881c1c9bda9958dd602a1b604482015260640161055d565b6001600160a01b0382166000818152606b60209081526040808320858452909152808220829055518392917f0732620824c0200808d04ab037f3abc3c31853170b90f5a855d32f44486048ed91a35050565b611ab6637c560c5f60e11b611c75565b611abf81611cc5565b6000818152606860205260409020600681015462ffffff16158015611af2575060068101546301000000900462ffffff16155b8015611b0c57506006810154600160301b900462ffffff16155b611b8e5760405162461bcd60e51b815260206004820152604760248201527f43616e6e6f742072656d6f766520646570656e64656e6379207769746820616460448201527f646974696f6e616c2043444e732c207265706f7369746f726965732c206f72206064820152667363726970747360c81b608482015260a40161055d565b611b996066836121ef565b50600082815260686020526040812090611bb382826123fc565b611bc16002830160006123fc565b611bcf6004830160006123fc565b5060060180546001600160481b031916905560405182907f60e2aa021c4f5303dd65e2173f0180636e4d42eaefc6187278e92bee9d06aa7290600090a25050565b611c20637ce07d7360e11b611c75565b611c2982611cc5565b6000828152606860205260409020600201611c448282612b0b565b50817f774918414e4887efe5349a305fe253ee8b1e3fe0c2117012f0c215645693cbfd82604051610bf89190612744565b611c8033308361081e565b6119d35760405162461bcd60e51b815260206004820152601660248201527513db9b1e4810591b5a5b881050d308185b1b1bddd95960521b604482015260640161055d565b611cd060668261202c565b6119d35760405162461bcd60e51b815260206004820152601e60248201527f446570656e64656e6379207479706520646f6573206e6f742065786973740000604482015260640161055d565b6000610b8d825490565b6000611d3283836121fb565b9392505050565b611d446069826121c5565b6119d35760405162461bcd60e51b815260206004820152601b60248201527a10dbdc994818dbdb9d1c9858dd081b9bdd081cdd5c1c1bdc9d1959602a1b604482015260640161055d565b6000611d32836001600160a01b038416612225565b80516000036119d35760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d656d70747920737472696e6760281b604482015260640161055d565b6000816001600160a01b0316604051611e16906001600160f81b0319815260010190565b6000604051808303816000865af19150503d8060008114611e53576040519150601f19603f3d011682016040523d82523d6000602084013e611e58565b606091505b505090508061167f5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374417353746f726167653a2044656c657465204572726f7200604482015260640161055d565b6000803083604051602001611ebf929190612d3b565b60405160208183030381529060405290508051602082016000f091506001600160a01b038216611f315760405162461bcd60e51b815260206004820152601e60248201527f436f6e7472616374417353746f726167653a205772697465204572726f720000604482015260640161055d565b50919050565b606060005b828160ff1660208110611f5157611f51612aba565b1a60f81b6001600160f81b03191615801590611f70575060208160ff16105b15611f875780611f7f81612e0c565b915050611f3c565b60405191506040820160405280825282602083015250919050565b33611fab6112a2565b6001600160a01b0316146111ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055d565b61200a81612318565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611d32838361236a565b600080805b60208160ff161015612097576000868260ff166020811061206057612060612aba565b1a90508015801590612075575060808160ff16105b1561208e578560ff168160ff160361208e578260010192505b5060010161203d565b8360ff168260ff1614925050509392505050565b6000611d328383612382565b6060813b60688110806120c8575080155b156121155760405162461bcd60e51b815260206004820152601d60248201527f436f6e7472616374417353746f726167653a2052656164204572726f72000000604482015260640161055d565b604080516028198301601f19168101909152606719820180825290925080606860208501863c5050919050565b600054610100900460ff166121695760405162461bcd60e51b815260040161055d90612e2b565b6111ac6123cc565b6001600160a01b0381166119d35760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d7a65726f206164647265737360281b604482015260640161055d565b6000611d32836001600160a01b03841661236a565b6000611d32836001600160a01b038416612382565b6000611d328383612225565b600082600001828154811061221257612212612aba565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561230e576000612249600183612935565b855490915060009061225d90600190612935565b90508181146122c257600086600001828154811061227d5761227d612aba565b90600052602060002001549050808760000184815481106122a0576122a0612aba565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806122d3576122d3612e76565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b8d565b6000915050610b8d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60009081526001919091016020526040902054151590565b600061238e838361236a565b6123c457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b8d565b506000610b8d565b600054610100900460ff166123f35760405162461bcd60e51b815260040161055d90612e2b565b6111ac33612001565b50805461240890612948565b6000825580601f10612418575050565b601f0160209004906000526020600020908101906119d391905b808211156124465760008155600101612432565b5090565b6000806040838503121561245d57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156124ad5783516001600160a01b031683529284019291840191600101612488565b50909695505050505050565b80356001600160a01b03811681146124d057600080fd5b919050565b6000602082840312156124e757600080fd5b611d32826124b9565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561252e5761252e6124f0565b604052919050565b60006001600160401b0382111561254f5761254f6124f0565b50601f01601f191660200190565b600082601f83011261256e57600080fd5b813561258161257c82612536565b612506565b81815284602083860101111561259657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156125c857600080fd5b833592506020840135915060408401356001600160401b038111156125ec57600080fd5b6125f88682870161255d565b9150509250925092565b60008060006060848603121561261757600080fd5b612620846124b9565b925061262e602085016124b9565b915060408401356001600160e01b03198116811461264b57600080fd5b809150509250925092565b60006020828403121561266857600080fd5b5035919050565b60005b8381101561268a578181015183820152602001612672565b50506000910152565b600081518084526126ab81602086016020860161266f565b601f01601f19169290920160200192915050565b60006101008083526126d38184018c612693565b905082810360208401526126e7818b612693565b905062ffffff808a1660408501528382036060850152612707828a612693565b9150808816608085015283820360a08501526127238288612693565b925085151560c085015280851660e085015250509998505050505050505050565b602081526000611d326020830184612693565b6000806040838503121561276a57600080fd5b8235915060208301356001600160401b0381111561278757600080fd5b6127938582860161255d565b9150509250929050565b600080604083850312156127b057600080fd5b6127b9836124b9565b946020939093013593505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561281c57603f1988860301845261280a858351612693565b945092850192908501906001016127ee565b5092979650505050505050565b6000806000806080858703121561283f57600080fd5b8435935060208501356001600160401b038082111561285d57600080fd5b6128698883890161255d565b9450604087013591508082111561287f57600080fd5b61288b8883890161255d565b935060608701359150808211156128a157600080fd5b506128ae8782880161255d565b91505092959194509250565b6000806000606084860312156128cf57600080fd5b6128d8846124b9565b95602085013595506040909401359392505050565b602080825260189082015277417373657420696e646578206f7574206f662072616e676560401b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b8d57610b8d61291f565b600181811c9082168061295c57607f821691505b602082108103611f3157634e487b7160e01b600052602260045260246000fd5b601f8211156129c657600081815260208120601f850160051c810160208610156129a35750805b601f850160051c820191505b818110156129c2578281556001016129af565b5050505b505050565b600019600383901b1c191660019190911b1790565b8181036129eb575050565b6129f58254612948565b6001600160401b03811115612a0c57612a0c6124f0565b612a2081612a1a8454612948565b8461297c565b6000601f821160018114612a4e5760008315612a3c5750848201545b612a4684826129cb565b855550612ab3565b600085815260209020601f19841690600086815260209020845b83811015612a885782860154825560019586019590910190602001612a68565b5085831015612aa65781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201612ae257612ae261291f565b5060010190565b600060208284031215612afb57600080fd5b81518015158114611d3257600080fd5b81516001600160401b03811115612b2457612b246124f0565b612b3281612a1a8454612948565b602080601f831160018114612b615760008415612b4f5750858301515b612b5985826129cb565b8655506129c2565b600085815260208120601f198616915b82811015612b9057888601518255948401946001909101908401612b71565b5085821015612bae5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f830112612bcf57600080fd5b8151612bdd61257c82612536565b818152846020838601011115612bf257600080fd5b6108c282602083016020870161266f565b600080600060608486031215612c1857600080fd5b83516001600160401b0380821115612c2f57600080fd5b612c3b87838801612bbe565b94506020860151915080821115612c5157600080fd5b50612c5e86828701612bbe565b925050604084015190509250925092565b62ffffff8281168282160390808211156106be576106be61291f565b80820180821115610b8d57610b8d61291f565b604081526000612cb16040830185612693565b90508260208301529392505050565b606081526000612cd36060830186612693565b8281036020840152612ce58186612693565b90508281036040840152612cf98185612693565b9695505050505050565b62ffffff8181168382160190808211156106be576106be61291f565b60008151612d3181856020860161266f565b9290920192915050565b6a600b5981380380925939f360a81b81526b1808181218000e5800144cc560a21b600b8201526330082bff60e11b60178201526416d8004d8560da1b601b82015263300cabff60e11b6020820152635b60003560e01b6024820152617fff60f01b6028820152600060488201819052600560fa1b6049830152633021abff60e11b604a830152645b600051ff60d81b604e830152612de06053830160008152600c0190565b612df6818660601b6001600160601b0319169052565b612e036014820185612d1f565b95945050505050565b600060ff821660ff8103612e2257612e2261291f565b60010192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fdfef79e11fc86b9bf37d5dfd4359c053136f7c046da6a08f9cf7ca56d80d5aab839a2646970667358221220a150f65dee1acc9cd356a2b7e314fe808b0139b43622b2180e0075309f47869f64736f6c63430008110033",
1017
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101c75760003560e01c80637cbb45c8116101005780637cbb45c81461039957806389f8ba4f146103a15780638da5cb5b146103b457806392f4f506146103bc5780639d5c4b78146103f4578063a809c1fc14610407578063b491702c1461041a578063b86b69f11461042d578063bbf2aefb14610435578063be3d3ee614610448578063c4d66de81461045b578063da7810fe1461046e578063dbc71ccb14610481578063dc33f4ae14610494578063f146f17f146104a7578063f2fde38b146104ba578063f73f4991146104cd578063f8ac18be146104e0578063f9c0fae6146104f357600080fd5b806304e3c7f6146101cc57806307f9f786146101e1578063199eb8e0146101ff5780631a051d49146102125780631e9bef4614610225578063230448b11461025057806325ffb37614610273578063336af8101461029a5780633bd7cfa2146102ba578063474bbdc2146102cd57806351eda999146102e057806352ccc021146102f55780635668bc5e146103085780635710f83d14610345578063596224dc1461035857806359d8a7331461036b5780636c4056a81461037e578063715018a614610391575b600080fd5b6101df6101da36600461244a565b610506565b005b6101e9610616565b6040516101f6919061246c565b60405180910390f35b6101df61020d3660046124d5565b6106c5565b6101df6102203660046125b3565b610720565b606554610238906001600160a01b031681565b6040516001600160a01b0390911681526020016101f6565b61026361025e366004612602565b61081e565b60405190151581526020016101f6565b610286610281366004612656565b6108ca565b6040516101f69897969594939291906126bf565b6102ad6102a836600461244a565b610ae1565b6040516101f69190612744565b6101df6102c8366004612757565b610b93565b6102ad6102db36600461279d565b610c04565b6102e8610d40565b6040516101f691906127c7565b6101df610303366004612656565b610dff565b610337610316366004612656565b600090815260686020526040902060060154600160301b900462ffffff1690565b6040519081526020016101f6565b6101df610353366004612757565b610f60565b6101df6103663660046125b3565b611026565b610238610379366004612656565b6110e2565b6102ad61038c366004612656565b61113d565b6101df61119a565b6103376111ae565b6101df6103af36600461244a565b6111bf565b6102386112a2565b6102386103ca36600461244a565b6000918252606860209081526040808420928452600590920190529020546001600160a01b031690565b6102ad61040236600461244a565b6112b6565b6101df610415366004612829565b6112e1565b6102ad61042836600461244a565b611417565b610337611479565b6101df6104433660046128ba565b611485565b6101df610456366004612757565b611506565b6101df6104693660046124d5565b611568565b6101df61047c3660046125b3565b611683565b6101df61048f3660046124d5565b611729565b6101df6104a2366004612757565b6117da565b6101df6104b5366004612757565b6118ac565b6101df6104c83660046124d5565b61195d565b6101df6104db36600461279d565b6119d6565b6101df6104ee366004612656565b611aa6565b6101df610501366004612757565b611c10565b610516630271e3fb60e11b611c75565b61051f82611cc5565b600082815260686020526040902060068101546301000000900462ffffff168083106105665760405162461bcd60e51b815260040161055d906128ed565b60405180910390fd5b6000610573600183612935565b6000868152606860209081526040808320848452600390810183528184208985529088019092529091209192506105aa90826129e0565b50600081815260038401602052604081206105c4916123fc565b60068301805465ffffff0000001916630100000062ffffff841602179055604051849086907fc02725dfc9639e3399432cdae3db1c062229f4cc41bcc18631517617c020b71c90600090a35050505050565b606060006106246069611d1c565b90506000816001600160401b03811115610640576106406124f0565b604051908082528060200260200182016040528015610669578160200160208202803683370190505b50905060005b828110156106be57610682606982611d26565b82828151811061069457610694612aba565b6001600160a01b0390921660209283029190910190910152806106b681612ad0565b91505061066f565b5092915050565b6106d462ccf5c760e51b611c75565b6106dd81611d39565b6106e8606982611d8e565b506040516001600160a01b038216907f2453d2f77bae1012d39e2257356d2566625ebe0ffd6094198aa051689dc65ba090600090a250565b610730631a051d4960e01b611c75565b61073981611da3565b61074283611cc5565b60008381526068602052604090206006810154600160301b900462ffffff1683106107a75760405162461bcd60e51b81526020600482015260156024820152747363726970744964206f7574206f662072616e676560581b604482015260640161055d565b60008381526005820160205260409020546107ca906001600160a01b0316611df2565b6107d382611ea9565b600084815260058301602052604080822080546001600160a01b0319166001600160a01b03949094169390931790925590518591600080516020612e8d83398151915291a250505050565b6000806108296112a2565b6001600160a01b0316141580156108c257506065546040516217798b60e61b81526001600160a01b03868116600483015285811660248301526001600160e01b031985166044830152909116906305de62c0906064016020604051808303816000875af115801561089e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c29190612ae9565b949350505050565b60008181526068602052604081206060918291829082908290829081906108f08a611f37565b60068201548254839162ffffff808216926002850192630100000081048316926004870192600160301b9092041680151591879061092d90612948565b80601f016020809104026020016040519081016040528092919081815260200182805461095990612948565b80156109a65780601f1061097b576101008083540402835291602001916109a6565b820191906000526020600020905b81548152906001019060200180831161098957829003601f168201915b505050505096508480546109b990612948565b80601f01602080910402602001604051908101604052809291908181526020018280546109e590612948565b8015610a325780601f10610a0757610100808354040283529160200191610a32565b820191906000526020600020905b815481529060010190602001808311610a1557829003601f168201915b50505050509450828054610a4590612948565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7190612948565b8015610abe5780601f10610a9357610100808354040283529160200191610abe565b820191906000526020600020905b815481529060010190602001808311610aa157829003601f168201915b505050505092509850985098509850985098509850985050919395975091939597565b60008281526068602090815260408083208484526003019091529020805460609190610b0c90612948565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3890612948565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b505050505090505b92915050565b610ba3631debe7d160e11b611c75565b610bac82611cc5565b6000828152606860205260409020600401610bc78282612b0b565b50817f9959f3af1c0191277b92c192984b5ca38adaf82d8465332b4da850e0e6a199f482604051610bf89190612744565b60405180910390a25050565b6060610c0f83611d39565b6001600160a01b0383166000908152606b602090815260408083208584529091529020548015610c4a57610c4281611f37565b915050610b8d565b604051633ae7357560e21b8152600481018490526001600160a01b0385169063eb9cd5d490602401600060405180830381865afa925050508015610cb057506040513d6000823e601f3d908101601f19168201604052610cad9190810190612c03565b60015b610d345760405162461bcd60e51b815260206004820152604960248201527f436f6e747261637420646f6573206e6f7420696d706c656d656e742070726f6a60448201527f65637453637269707444657461696c7320616e6420686173206e6f206f7665726064820152683934b2329039b2ba1760b91b608482015260a40161055d565b82945050505050610b8d565b60606000610d4e6066611d1c565b6001600160401b03811115610d6557610d656124f0565b604051908082528060200260200182016040528015610d9857816020015b6060815260200190600190039081610d835790505b5090506000610da76066611d1c565b905060005b81811015610df757610dc7610dc2606683611d26565b611f37565b838281518110610dd957610dd9612aba565b60200260200101819052508080610def90612ad0565b915050610dac565b509092915050565b610e0f6352ccc02160e01b611c75565b610e1881611cc5565b60008181526068602052604090206006810154600160301b900462ffffff16610e835760405162461bcd60e51b815260206004820152601e60248201527f746865726520617265206e6f207363726970747320746f2072656d6f76650000604482015260640161055d565b610ed081600501600060018460060160069054906101000a900462ffffff16610eac9190612c6f565b62ffffff1681526020810191909152604001600020546001600160a01b0316611df2565b60068101546005820190600090610ef590600190600160301b900462ffffff16612c6f565b62ffffff908116825260208201929092526040908101600090812080546001600160a01b031916905560068401805462ffffff60301b198116600160301b918290048616600019019095160293909317909255518391600080516020612e8d83398151915291a25050565b610f70635710f83d60e01b611c75565b610f7981611da3565b610f8282611cc5565b600082815260686020908152604080832060068101546301000000900462ffffff16808552600382019093529220610fba8482612b0b565b50610fc6816001612c8b565b8260060160036101000a81548162ffffff021916908362ffffff160217905550837ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde8483604051611018929190612c9e565b60405180910390a250505050565b611036631658893760e21b611c75565b61103f81611da3565b61104883611cc5565b600083815260686020526040902060068101546301000000900462ffffff168084106110865760405162461bcd60e51b815260040161055d906128ed565b600084815260038301602052604090206110a08482612b0b565b50847ffe07adc986f904acd19c0f4f5d0716973976f0450de010a753a52d119ddadbde84866040516110d3929190612c9e565b60405180910390a25050505050565b6000816110ef6069611d1c565b116111325760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b604482015260640161055d565b610b8d606983611d26565b60608161114a6066611d1c565b1161118c5760405162461bcd60e51b8152602060048201526012602482015271496e646578206f7574206f662072616e676560701b604482015260640161055d565b610b8d610dc2606684611d26565b6111a2611fa2565b6111ac6000612001565b565b60006111ba6066611d1c565b905090565b6111cf6389f8ba4f60e01b611c75565b6111d882611cc5565b6000828152606860205260409020600681015462ffffff1680831061120f5760405162461bcd60e51b815260040161055d906128ed565b600061121c600183612935565b6000818152600185016020526040808220878352912091925061123f90826129e0565b5060008181526001840160205260408120611259916123fc565b60068301805462ffffff191662ffffff8316179055604051849086907f225454b600cf489553fde6e3b7f5e458b1093c035390b678067ea799b3b016cd90600090a35050505050565b60006111ba6033546001600160a01b031690565b60008281526068602090815260408083208484526001019091529020805460609190610b0c90612948565b6112f1632a02707f60e21b611c75565b6112fc60668561202c565b156113495760405162461bcd60e51b815260206004820152601e60248201527f446570656e64656e6379207479706520616c7265616479206578697374730000604482015260640161055d565b6113568460406001612038565b61139f5760405162461bcd60e51b815260206004820152601a60248201527901b5d5cdd0818dbdb9d185a5b88195e1858dd1b1e481bdb9948160361b604482015260640161055d565b6113aa6066856120ab565b506000848152606860205260409020806113c48582612b0b565b50600281016113d38482612b0b565b50600481016113e28382612b0b565b50847f39626dd6a5a74e9944752116c5e878fbb4c1ac0cab72cd316f6f25ee19cff7658585856040516110d393929190612cc0565b6000828152606860205260409020600681015460609190600160301b900462ffffff168310611456575050604080516020810190915260008152610b8d565b60008381526005820160205260409020546108c2906001600160a01b03166120b7565b60006111ba6069611d1c565b61149563bbf2aefb60e01b611c75565b61149e81611cc5565b6114a783611d39565b6001600160a01b0383166000818152606b6020908152604080832086845282529182902084905590518381528492917f27d39273f3676c181ec3de60b583da776123d9f9517761fb91f370a83c798918910160405180910390a3505050565b611516635f1e9f7360e11b611c75565b61151f82611cc5565b60008281526068602052604090206115378282612b0b565b50817fc9890a31ec780bb5a8a017d683d3913f97260548d71c2cee78194ed2833f023582604051610bf89190612744565b600054610100900460ff16158080156115885750600054600160ff909116105b806115a25750303b1580156115a2575060005460ff166001145b6116055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161055d565b6000805460ff191660011790558015611628576000805461ff0019166101001790555b611630612142565b61163982612001565b801561167f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b611693636d3c087f60e11b611c75565b61169c81611da3565b6116a583611cc5565b6000838152606860205260409020600681015462ffffff168084106116dc5760405162461bcd60e51b815260040161055d906128ed565b600084815260018301602052604090206116f68482612b0b565b50847f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d84866040516110d3929190612c9e565b61173963dbc71ccb60e01b611c75565b61174281612171565b61174d6069826121c5565b156117975760405162461bcd60e51b815260206004820152601a60248201527910dbdb9d1c9858dd08185b1c9958591e481cdd5c1c1bdc9d195960321b604482015260640161055d565b6117a26069826121da565b506040516001600160a01b038216907f59e1b889b92ad05213b7934a67c5d824348c868455d1c741a2cfe16e46d832dc90600090a250565b6117ea636e19fa5760e11b611c75565b6117f381611da3565b6117fc82611cc5565b600082815260686020526040902061181382611ea9565b600682018054600160301b9081900462ffffff9081166000908152600586016020526040902080546001600160a01b0319166001600160a01b039590951694909417909355905461186992919004166001612d03565b60068201805462ffffff92909216600160301b0262ffffff60301b199092169190911790556040518390600080516020612e8d83398151915290600090a2505050565b6118bc63f146f17f60e01b611c75565b6118c581611da3565b6118ce82611cc5565b6000828152606860209081526040808320600681015462ffffff168085526001820190935292206118ff8482612b0b565b5061190b816001612c8b565b8260060160006101000a81548162ffffff021916908362ffffff160217905550837f5f667fb1eaf23e0fee1a9dcc154d842202b184eb9ad83502c00c784808a8d00d8483604051611018929190612c9e565b611965611fa2565b6001600160a01b0381166119ca5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161055d565b6119d381612001565b50565b6119e663f73f499160e01b611c75565b6001600160a01b0382166000908152606b60209081526040808320848452909152902054611a545760405162461bcd60e51b815260206004820152601b60248201527a139bc81bdd995c9c9a5919481cd95d08199bdc881c1c9bda9958dd602a1b604482015260640161055d565b6001600160a01b0382166000818152606b60209081526040808320858452909152808220829055518392917f0732620824c0200808d04ab037f3abc3c31853170b90f5a855d32f44486048ed91a35050565b611ab6637c560c5f60e11b611c75565b611abf81611cc5565b6000818152606860205260409020600681015462ffffff16158015611af2575060068101546301000000900462ffffff16155b8015611b0c57506006810154600160301b900462ffffff16155b611b8e5760405162461bcd60e51b815260206004820152604760248201527f43616e6e6f742072656d6f766520646570656e64656e6379207769746820616460448201527f646974696f6e616c2043444e732c207265706f7369746f726965732c206f72206064820152667363726970747360c81b608482015260a40161055d565b611b996066836121ef565b50600082815260686020526040812090611bb382826123fc565b611bc16002830160006123fc565b611bcf6004830160006123fc565b5060060180546001600160481b031916905560405182907f60e2aa021c4f5303dd65e2173f0180636e4d42eaefc6187278e92bee9d06aa7290600090a25050565b611c20637ce07d7360e11b611c75565b611c2982611cc5565b6000828152606860205260409020600201611c448282612b0b565b50817f774918414e4887efe5349a305fe253ee8b1e3fe0c2117012f0c215645693cbfd82604051610bf89190612744565b611c8033308361081e565b6119d35760405162461bcd60e51b815260206004820152601660248201527513db9b1e4810591b5a5b881050d308185b1b1bddd95960521b604482015260640161055d565b611cd060668261202c565b6119d35760405162461bcd60e51b815260206004820152601e60248201527f446570656e64656e6379207479706520646f6573206e6f742065786973740000604482015260640161055d565b6000610b8d825490565b6000611d3283836121fb565b9392505050565b611d446069826121c5565b6119d35760405162461bcd60e51b815260206004820152601b60248201527a10dbdc994818dbdb9d1c9858dd081b9bdd081cdd5c1c1bdc9d1959602a1b604482015260640161055d565b6000611d32836001600160a01b038416612225565b80516000036119d35760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d656d70747920737472696e6760281b604482015260640161055d565b6000816001600160a01b0316604051611e16906001600160f81b0319815260010190565b6000604051808303816000865af19150503d8060008114611e53576040519150601f19603f3d011682016040523d82523d6000602084013e611e58565b606091505b505090508061167f5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374417353746f726167653a2044656c657465204572726f7200604482015260640161055d565b6000803083604051602001611ebf929190612d3b565b60405160208183030381529060405290508051602082016000f091506001600160a01b038216611f315760405162461bcd60e51b815260206004820152601e60248201527f436f6e7472616374417353746f726167653a205772697465204572726f720000604482015260640161055d565b50919050565b606060005b828160ff1660208110611f5157611f51612aba565b1a60f81b6001600160f81b03191615801590611f70575060208160ff16105b15611f875780611f7f81612e0c565b915050611f3c565b60405191506040820160405280825282602083015250919050565b33611fab6112a2565b6001600160a01b0316146111ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161055d565b61200a81612318565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b6000611d32838361236a565b600080805b60208160ff161015612097576000868260ff166020811061206057612060612aba565b1a90508015801590612075575060808160ff16105b1561208e578560ff168160ff160361208e578260010192505b5060010161203d565b8360ff168260ff1614925050509392505050565b6000611d328383612382565b6060813b60688110806120c8575080155b156121155760405162461bcd60e51b815260206004820152601d60248201527f436f6e7472616374417353746f726167653a2052656164204572726f72000000604482015260640161055d565b604080516028198301601f19168101909152606719820180825290925080606860208501863c5050919050565b600054610100900460ff166121695760405162461bcd60e51b815260040161055d90612e2b565b6111ac6123cc565b6001600160a01b0381166119d35760405162461bcd60e51b815260206004820152601b60248201527a4d75737420696e707574206e6f6e2d7a65726f206164647265737360281b604482015260640161055d565b6000611d32836001600160a01b03841661236a565b6000611d32836001600160a01b038416612382565b6000611d328383612225565b600082600001828154811061221257612212612aba565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561230e576000612249600183612935565b855490915060009061225d90600190612935565b90508181146122c257600086600001828154811061227d5761227d612aba565b90600052602060002001549050808760000184815481106122a0576122a0612aba565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806122d3576122d3612e76565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610b8d565b6000915050610b8d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60009081526001919091016020526040902054151590565b600061238e838361236a565b6123c457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610b8d565b506000610b8d565b600054610100900460ff166123f35760405162461bcd60e51b815260040161055d90612e2b565b6111ac33612001565b50805461240890612948565b6000825580601f10612418575050565b601f0160209004906000526020600020908101906119d391905b808211156124465760008155600101612432565b5090565b6000806040838503121561245d57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b818110156124ad5783516001600160a01b031683529284019291840191600101612488565b50909695505050505050565b80356001600160a01b03811681146124d057600080fd5b919050565b6000602082840312156124e757600080fd5b611d32826124b9565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561252e5761252e6124f0565b604052919050565b60006001600160401b0382111561254f5761254f6124f0565b50601f01601f191660200190565b600082601f83011261256e57600080fd5b813561258161257c82612536565b612506565b81815284602083860101111561259657600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000606084860312156125c857600080fd5b833592506020840135915060408401356001600160401b038111156125ec57600080fd5b6125f88682870161255d565b9150509250925092565b60008060006060848603121561261757600080fd5b612620846124b9565b925061262e602085016124b9565b915060408401356001600160e01b03198116811461264b57600080fd5b809150509250925092565b60006020828403121561266857600080fd5b5035919050565b60005b8381101561268a578181015183820152602001612672565b50506000910152565b600081518084526126ab81602086016020860161266f565b601f01601f19169290920160200192915050565b60006101008083526126d38184018c612693565b905082810360208401526126e7818b612693565b905062ffffff808a1660408501528382036060850152612707828a612693565b9150808816608085015283820360a08501526127238288612693565b925085151560c085015280851660e085015250509998505050505050505050565b602081526000611d326020830184612693565b6000806040838503121561276a57600080fd5b8235915060208301356001600160401b0381111561278757600080fd5b6127938582860161255d565b9150509250929050565b600080604083850312156127b057600080fd5b6127b9836124b9565b946020939093013593505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561281c57603f1988860301845261280a858351612693565b945092850192908501906001016127ee565b5092979650505050505050565b6000806000806080858703121561283f57600080fd5b8435935060208501356001600160401b038082111561285d57600080fd5b6128698883890161255d565b9450604087013591508082111561287f57600080fd5b61288b8883890161255d565b935060608701359150808211156128a157600080fd5b506128ae8782880161255d565b91505092959194509250565b6000806000606084860312156128cf57600080fd5b6128d8846124b9565b95602085013595506040909401359392505050565b602080825260189082015277417373657420696e646578206f7574206f662072616e676560401b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b8d57610b8d61291f565b600181811c9082168061295c57607f821691505b602082108103611f3157634e487b7160e01b600052602260045260246000fd5b601f8211156129c657600081815260208120601f850160051c810160208610156129a35750805b601f850160051c820191505b818110156129c2578281556001016129af565b5050505b505050565b600019600383901b1c191660019190911b1790565b8181036129eb575050565b6129f58254612948565b6001600160401b03811115612a0c57612a0c6124f0565b612a2081612a1a8454612948565b8461297c565b6000601f821160018114612a4e5760008315612a3c5750848201545b612a4684826129cb565b855550612ab3565b600085815260209020601f19841690600086815260209020845b83811015612a885782860154825560019586019590910190602001612a68565b5085831015612aa65781850154600019600388901b60f8161c191681555b50505060018360011b0184555b5050505050565b634e487b7160e01b600052603260045260246000fd5b600060018201612ae257612ae261291f565b5060010190565b600060208284031215612afb57600080fd5b81518015158114611d3257600080fd5b81516001600160401b03811115612b2457612b246124f0565b612b3281612a1a8454612948565b602080601f831160018114612b615760008415612b4f5750858301515b612b5985826129cb565b8655506129c2565b600085815260208120601f198616915b82811015612b9057888601518255948401946001909101908401612b71565b5085821015612bae5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082601f830112612bcf57600080fd5b8151612bdd61257c82612536565b818152846020838601011115612bf257600080fd5b6108c282602083016020870161266f565b600080600060608486031215612c1857600080fd5b83516001600160401b0380821115612c2f57600080fd5b612c3b87838801612bbe565b94506020860151915080821115612c5157600080fd5b50612c5e86828701612bbe565b925050604084015190509250925092565b62ffffff8281168282160390808211156106be576106be61291f565b80820180821115610b8d57610b8d61291f565b604081526000612cb16040830185612693565b90508260208301529392505050565b606081526000612cd36060830186612693565b8281036020840152612ce58186612693565b90508281036040840152612cf98185612693565b9695505050505050565b62ffffff8181168382160190808211156106be576106be61291f565b60008151612d3181856020860161266f565b9290920192915050565b6a600b5981380380925939f360a81b81526b1808181218000e5800144cc560a21b600b8201526330082bff60e11b60178201526416d8004d8560da1b601b82015263300cabff60e11b6020820152635b60003560e01b6024820152617fff60f01b6028820152600060488201819052600560fa1b6049830152633021abff60e11b604a830152645b600051ff60d81b604e830152612de06053830160008152600c0190565b612df6818660601b6001600160601b0319169052565b612e036014820185612d1f565b95945050505050565b600060ff821660ff8103612e2257612e2261291f565b60010192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fdfef79e11fc86b9bf37d5dfd4359c053136f7c046da6a08f9cf7ca56d80d5aab839a2646970667358221220a150f65dee1acc9cd356a2b7e314fe808b0139b43622b2180e0075309f47869f64736f6c63430008110033",
1018
1018
  "linkReferences": {},
1019
1019
  "deployedLinkReferences": {}
1020
1020
  }