diff --git a/.gas-snapshot b/.gas-snapshot index 3978bef..5cf5363 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,56 +1,103 @@ -BatchCreateHats:testBatchCreateHatsErrorArrayLength(uint256,uint256,uint256) (runs: 256, μ: 12559014, ~: 9695798) -BatchCreateHats:testBatchCreateHatsSameAdmin(uint256) (runs: 256, μ: 4560900, ~: 593589) -BatchCreateHats:testBatchCreateHatsSkinnyFullBranch() (gas: 8881460) -BatchCreateHats:testBatchCreateOneHat() (gas: 412963) -BatchCreateHats:testBatchCreateTwoHats() (gas: 593518) -BatchCreateHats:testTemp() (gas: 14430) -CreateHatsTest:testHatCreated() (gas: 249889) -CreateHatsTest:testHatsBranchCreated() (gas: 593366) -CreateTopHatTest:testTopHatCreated() (gas: 164948) -CreateTopHatTest:testTopHatMinted() (gas: 183773) -CreateTopHatTest:testTransferTopHat() (gas: 180085) -DeployTest:testDeployWithParams() (gas: 12334) -EligibilityGetHatsTests:testCannotGetHatWearerStandingNoFunctionInEligibilityContract() (gas: 26389) -EligibilityGetHatsTests:testCheckEligibilityAndDoNotRevokeHatFromEligibleWearer() (gas: 60919) -EligibilityGetHatsTests:testCheckEligibilityToRevokeHatFromEligibleWearerInBadStanding() (gas: 72627) -EligibilityGetHatsTests:testCheckEligibilityToRevokeHatFromIneligibleWearerInBadStanding() (gas: 72597) -EligibilityGetHatsTests:testCheckEligibilityToRevokeHatFromIneligibleWearerInGoodStanding() (gas: 52331) -EligibilitySetHatsTests:testCannotRevokeHatAsNonWearer() (gas: 25735) -EligibilitySetHatsTests:testDoNotRevokeHatFromEligibleWearerInGoodStanding() (gas: 54141) -EligibilitySetHatsTests:testRemintAfterRevokeHatFromWearerInGoodStanding() (gas: 88039) -EligibilitySetHatsTests:testRevokeHatFromEligibleWearerInBadStanding() (gas: 67745) -EligibilitySetHatsTests:testRevokeHatFromIneligibleWearerInBadStanding() (gas: 67711) -EligibilitySetHatsTests:testRevokeHatFromIneligibleWearerInGoodStanding() (gas: 50103) -ImageURITest:testEmptyHatBranchImageURI() (gas: 895843) -ImageURITest:testEmptyHatImageURI() (gas: 163187) -ImageURITest:testEmptyTopHatImageURI() (gas: 115566) -ImageURITest:testHatImageURI() (gas: 21901) -ImageURITest:testTopHatImageURI() (gas: 21751) -MintHatsTest:testBatchMintHats(uint256) (runs: 256, μ: 2240070, ~: 382866) -MintHatsTest:testBatchMintHatsErrorArrayLength(uint256,uint256) (runs: 256, μ: 10579308, ~: 12202061) -MintHatsTest:testCannotMint2HatsToSameWearer() (gas: 163631) -MintHatsTest:testCannotMintMoreThanMaxSupplyErrorAllHatsWorn() (gas: 210742) -MintHatsTest:testCannotMintNonExistentHat() (gas: 23240) -MintHatsTest:testMintAnotherHat() (gas: 185940) -MintHatsTest:testMintHat() (gas: 125481) -MintHatsTest:testMintHatErrorNotAdmin() (gas: 69875) -MintHatsTest:testMintInactiveHat() (gas: 110370) -OverridesHatTests:testCreateUri() (gas: 156002) -OverridesHatTests:testCreateUriForTopHat() (gas: 153936) -OverridesHatTests:testFailSafeTransferFrom() (gas: 12615) -OverridesHatTests:testFailSetApprovalForAll() (gas: 7773) -RenounceHatsTest:testCannotRenounceHatAsNonWearer() (gas: 34523) -RenounceHatsTest:testRenounceHat() (gas: 44068) -ToggleGetHatsTest:testCannotCheckHatStatusNoFunctionInToggleContract() (gas: 24012) -ToggleGetHatsTest:testCheckToggleToActivateDeactivatedHat() (gas: 50151) -ToggleGetHatsTest:testCheckToggleToDeactivateHat() (gas: 41533) -ToggleSetHatsTest:testActivateDeactivatedHat() (gas: 46029) -ToggleSetHatsTest:testCannotActivateDeactivatedHatAsNonWearer() (gas: 25986) -ToggleSetHatsTest:testCannotDeactivateHatAsNonWearer() (gas: 15614) -ToggleSetHatsTest:testDeactivateHat() (gas: 55730) -TransferHatTests:testCannotTransferHatFromNonAdmin() (gas: 37339) -TransferHatTests:testTransferHat() (gas: 103063) -ViewHatTests:testGetHatLevel() (gas: 11612) -ViewHatTests:testIsAdminOfHat() (gas: 29647) -ViewHatTests:testViewHat() (gas: 32363) -ViewHatTests:testViewHatOfTopHat() (gas: 28580) +BatchCreateHats:testBatchCreateHatsErrorArrayLength(uint256,uint256,uint256) (runs: 256, μ: 11849226, ~: 9193131) +BatchCreateHats:testBatchCreateHatsSameAdmin(uint256) (runs: 256, μ: 5039763, ~: 717488) +BatchCreateHats:testBatchCreateHatsSkinnyFullBranch() (gas: 3989145) +BatchCreateHats:testBatchCreateOneHat() (gas: 445344) +BatchCreateHats:testBatchCreateTwoHats() (gas: 626716) +CreateHatsTest:testHatsBranchCreated() (gas: 431155) +CreateHatsTest:testImmutableHatCreated() (gas: 183092) +CreateHatsTest:testMutableHatCreated() (gas: 188197) +CreateTopHatTest:testTopHatCreated() (gas: 186028) +CreateTopHatTest:testTopHatMinted() (gas: 202080) +CreateTopHatTest:testTransferTopHat() (gas: 201039) +DeployTest:testDeployWithParams() (gas: 12321) +EligibilityCheckHatsTests:testCannotGetHatWearerStandingNoFunctionInEligibilityContract() (gas: 26522) +EligibilityCheckHatsTests:testCheckEligibilityAndDoNotRevokeHatFromEligibleWearer() (gas: 53472) +EligibilityCheckHatsTests:testCheckEligibilityToRevokeHatFromEligibleWearerInBadStanding() (gas: 73263) +EligibilityCheckHatsTests:testCheckEligibilityToRevokeHatFromIneligibleWearerInBadStanding() (gas: 73208) +EligibilityCheckHatsTests:testCheckEligibilityToRevokeHatFromIneligibleWearerInGoodStanding() (gas: 49129) +EligibilityCheckHatsTests:testCheckWearerBackInGoodStanding() (gas: 56655) +EligibilitySetHatsTests:testCannotRevokeHatAsNonWearer() (gas: 25865) +EligibilitySetHatsTests:testDoNotRevokeHatFromEligibleWearerInGoodStanding() (gas: 48680) +EligibilitySetHatsTests:testRemintAfterRevokeHatFromWearerInGoodStanding() (gas: 87132) +EligibilitySetHatsTests:testRevokeHatFromEligibleWearerInBadStanding() (gas: 68367) +EligibilitySetHatsTests:testRevokeHatFromIneligibleWearerInBadStanding() (gas: 68352) +EligibilitySetHatsTests:testRevokeHatFromIneligibleWearerInGoodStanding() (gas: 46906) +EligibilitySetHatsTests:testSetWearerBackInGoodStanding() (gas: 52732) +ImageURITest:testEmptyHatBranchImageURI() (gas: 775078) +ImageURITest:testEmptyHatImageURI() (gas: 154977) +ImageURITest:testEmptyTopHatImageURI() (gas: 104987) +ImageURITest:testHatImageURI() (gas: 21949) +ImageURITest:testTopHatImageURI() (gas: 21971) +LinkHatsTests:testAdminCanApproveLinkRequest() (gas: 136110) +LinkHatsTests:testAdminCanApproveLinkToLastLevelHat() (gas: 412762) +LinkHatsTests:testAdminCanRelinkTopHatWithinTree() (gas: 154944) +LinkHatsTests:testAdminCanRequestNewLink() (gas: 155132) +LinkHatsTests:testCannotApproveCrossTreeLink() (gas: 269694) +LinkHatsTests:testCannotApproveUnrequestedLink() (gas: 64053) +LinkHatsTests:testCannotCrossTreeRelink() (gas: 249671) +LinkHatsTests:testLinkedTopHatWearerCannotRequestNewLink() (gas: 147814) +LinkHatsTests:testNewAdminAdminCanApproveNewLinkRequest() (gas: 150686) +LinkHatsTests:testNewAdminAdminCanRelinkToLastLevelWithinTree() (gas: 461680) +LinkHatsTests:testNewAdminNonAdminCannotRelinkToLastLevelWithinTree() (gas: 324799) +LinkHatsTests:testNewAdminNonAdminNonWearerCannotRelink() (gas: 155358) +LinkHatsTests:testNewAdminWearerCanRelinkTopHatWithinTree() (gas: 252381) +LinkHatsTests:testNonAdminNonWearerCannotApproveLinktoLastLevelHat() (gas: 421352) +LinkHatsTests:testPreventingCircularLinking() (gas: 184644) +LinkHatsTests:testRelinkingCannotCreateCircularLink() (gas: 378831) +LinkHatsTests:testRequestLinking() (gas: 63092) +LinkHatsTests:testTreeLinkingAndUnlinking() (gas: 172132) +LinkHatsTests:testTreeRootNonAdminCannotRelink() (gas: 222817) +LinkHatsTests:testWearerCanApproveLinkRequest() (gas: 113041) +LinkHatsTests:testWearerCanApproveLinkToLastLevelHat() (gas: 385939) +MintHatsTest:testBatchMintHats(uint256) (runs: 256, μ: 1838853, ~: 320023) +MintHatsTest:testBatchMintHatsErrorArrayLength(uint256,uint256) (runs: 256, μ: 10343041, ~: 11993023) +MintHatsTest:testCannotMint2HatsToSameWearer() (gas: 147875) +MintHatsTest:testCannotMintMoreThanMaxSupplyErrorAllHatsWorn() (gas: 197678) +MintHatsTest:testCannotMintNonExistentHat() (gas: 23375) +MintHatsTest:testMintAnotherHat() (gas: 169666) +MintHatsTest:testMintHat() (gas: 109611) +MintHatsTest:testMintHatErrorNotAdmin() (gas: 71430) +MintHatsTest:testMintInactiveHat() (gas: 96201) +MutabilityTests:testAdminCanChangeMutableHatDetails() (gas: 66403) +MutabilityTests:testAdminCanChangeMutableHatEligibility() (gas: 63145) +MutabilityTests:testAdminCanChangeMutableHatImageURI() (gas: 66457) +MutabilityTests:testAdminCanChangeMutableHatToggle() (gas: 60848) +MutabilityTests:testAdminCanDecreaseMutableHatMaxSupplyToAboveCurrentSupply() (gas: 120154) +MutabilityTests:testAdminCanDecreaseMutableHatMaxSupplyToEqualToCurrentSupply() (gas: 120143) +MutabilityTests:testAdminCanIncreaseMutableHatMaxSupply() (gas: 63303) +MutabilityTests:testAdminCanMakeMutableHatImmutable() (gas: 73888) +MutabilityTests:testAdminCannotChangeImutableHatProperties() (gas: 229106) +MutabilityTests:testAdminCannotDecreaseMutableHatMaxSupplyBelowCurrentSupply() (gas: 151744) +MutabilityTests:testAdminCannotTransferImmutableHat() (gas: 235513) +MutabilityTests:testCannotChangeImmutableHatMutability() (gas: 187790) +MutabilityTests:testNonAdminCannotMakeMutableHatImmutable() (gas: 33944) +MutabilityTests:testTopHatCanChangeOwnDetails() (gas: 52953) +MutabilityTests:testTopHatCanChangeOwnImageURI() (gas: 52943) +MutabilityTests:testTopHatCannotChangeOtherProperties() (gas: 78149) +OverridesHatTests:testCreateUri() (gas: 95376) +OverridesHatTests:testCreateUriForTopHat() (gas: 93902) +OverridesHatTests:testFailSafeTransferFrom() (gas: 12633) +OverridesHatTests:testFailSetApprovalForAll() (gas: 7687) +RenounceHatsTest:testCannotRenounceHatAsNonWearer() (gas: 34646) +RenounceHatsTest:testRenounceHat() (gas: 43499) +ToggleGetHatsTest:testCannotCheckHatStatusNoFunctionInToggleContract() (gas: 24155) +ToggleGetHatsTest:testCheckToggleToActivateDeactivatedHat() (gas: 81623) +ToggleGetHatsTest:testCheckToggleToDeactivateHat() (gas: 51003) +ToggleSetHatsTest:testActivateDeactivatedHat() (gas: 77491) +ToggleSetHatsTest:testCannotActivateDeactivatedHatAsNonWearer() (gas: 32110) +ToggleSetHatsTest:testCannotDeactivateHatAsNonWearer() (gas: 15664) +ToggleSetHatsTest:testDeactivateHat() (gas: 90499) +TransferHatTests:testCannotTransferHatFromNonAdmin() (gas: 40895) +TransferHatTests:testCannotTransferHatToExistingWearer() (gas: 102641) +TransferHatTests:testCannotTransferHatToRevokedWearer() (gas: 111874) +TransferHatTests:testTransferMutableHat() (gas: 103181) +ViewHatTests:testGetHatLevel() (gas: 14166) +ViewHatTests:testIsAdminOfHat() (gas: 32615) +ViewHatTests:testViewHat1() (gas: 97637) +ViewHatTests:testViewHat2() (gas: 72640) +ViewHatTests:testViewHatOfTopHat1() (gas: 73622) +ViewHatTests:testViewHatOfTopHat2() (gas: 72618) +HatIdUtilTests:testBuildHatId() (gas: 87934) +HatIdUtilTests:testTopHatDomain() (gas: 14345) +HatIdUtilTests:testgetHatLevel() (gas: 143322) +LinkedTreeHatIdUtilTests:testLinkedHats() (gas: 90621) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2c0074f..f80c191 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,5 +32,11 @@ jobs: with: version: nightly - - name: Run tests - run: forge test -vvv \ No newline at end of file + - name: Check formatting + run: forge fmt --check + + - name: Check contract sizes + run: forge build --sizes --skip script + + - name: Run tests w/ gas report + run: forge test -vvv --gas-report \ No newline at end of file diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..c4abdcc --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,48 @@ +name: Deploy +on: + push: + branches: + - main + +jobs: + + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - name: Setup Pages + uses: actions/configure-pages@v2 + + - name: Build mdBook + run: forge doc --build + + - name: Upload Artifact + uses: actions/upload-pages-artifact@v1 + with: + path: ./docs/book + name: github-pages + retention-days: 1 + + deploy: + # Grant GITHUB_TOKEN the permissions required to make a Pages deployment + permissions: + pages: write # to deploy to Pages + id-token: write # to verify the deployment originates from an appropriate source + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v1 diff --git a/.gitignore b/.gitignore index 059b0a7..cf33527 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ cache/ out/ .vscode/ -broadcast/*/31337 -broadcast/*/*/dry-run +broadcast/ .env -uri.json \ No newline at end of file +uri.json +docs/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..d366687 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,79 @@ +# Contributing to Hats Protocol + +Thank you for considering contributing to Hats Protocol. We welcome any contributions that can help improve the project, including bug reports, feature requests, and code changes. + +## Getting Started + +1. Fork the Project +2. Install [Foundry](https://book.getfoundry.sh/getting-started/installation) +3. Compile the contracts, run `forge build`, and to test, run `forge test` +4. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) +5. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) +6. Push to the Branch (`git push origin feature/AmazingFeature`) +7. Open a Pull Request — see the [checklist below](#pull-request-readiness-checklist) for what your PR should include + +Existing deployments of Hats Protocol can be found in [Releases](https://github.com/Hats-Protocol/hats-protocol/releases). To deploy Hats Protocol yourself (e.g., for testing): + +- Install [Foundry](https://book.getfoundry.sh/getting-started/installation) +- Compile the contracts, run `forge build`, and to test, run `forge test` +- Deploy using the [Hats.s.sol script](script/Hats.s.sol) and follow the [Foundry scripting instructions](https://book.getfoundry.sh/tutorials/solidity-scripting) + +## Code and Style Conventions + +Hats Protocol follows certain conventions, including: + +- Use custom errors (rather than in-line require statement strings), added to [HatsErrors.sol](src/Interfaces/HatsErrors.sol) +- New events should be added to [HatsEvents.sol](src/Interfaces/HatsEvents.sol) +- All new public or external functions should be added to the appropriate interface file, such as [IHats.sol](src/Interfaces/IHats.sol) or [IHatsIdUtilities.sol](src/Interfaces/IHatsIdUtilities.sol) +- We format all markdown according to the settings in [.markdownlintrc](./.markdownlintrc) +- All Solidity is formatted using Foundry's native formatter [forge fmt](https://github.com/foundry-rs/foundry/tree/master/fmt), currently using the following settings (also viewable in [foundry.toml](./foundry.toml)): + +| `forge fmt` setting | our value | +| -------------------------------- | ----------- | +| line_length | 120 | +| tab_width | 4 | +| bracket_spacing | true | +| int_types | long | +| multiline_func_header | attributes_first | +| quote_style | double | +| number_underscore | thousands | +| override_spacing | true | +| wrap_comments | true | + +## Documentation + +All code changes should be accompanied by updates to documentation: + +- Document all new functions (external and internal), data models, and state variables with [Solidity NatSpec](https://docs.soliditylang.org/en/v0.8.17/natspec-format.html) +- The above will be produced in an mdBook via Foundry's [forge doc](https://github.com/foundry-rs/foundry/tree/master/doc) module +- Update the [README](./README.md) and/or developer docs as needed + +We also welcome contributions to the project's documentation itself! + +## Testing + +We require that all new code changes are thoroughly tested to ensure that the project remains stable and reliable. When submitting a pull request, please make sure to: + +- Write thorough unit tests for all new code +- Ensure that all tests (existing and new) are passing +- Track test coverage with Foundry's `forge coverage` module +- Verify that contract sizes are under the [EIP-170 limit](https://eips.ethereum.org/EIPS/eip-170) when compiled with the optimizer set to at least `10_000` runs + +## Pull Request Readiness Checklist + +In summary, before submitting a PR, please complete each of the following items. Items that are explicitly checked in our [CI workflow](./.github/workflows/ci.yml) are flagged with "**(ci)**". + +1. Thorough unit tests are written for all new code +2. Update the [test coverage tracker](./lcov.info) — run `forge coverage --report lcov` +3. Update the [gas snapshot tracker](./.gas-snapshot) — run `forge snapshot` +4. Ensure contract sizes are small enough to deploy — run `forge build --sizes` **(ci)** +5. Ensure all existing and new tests are passing — run `forge test` **(ci)** +6. Document all new Solidity code with NatSpec, and generate updated docs — run `forge doc` +7. Update the [README](./README.md) with any new or changed functionality +8. Ensure all markdown is formatted correctly — run `forge fmt` **(ci)** + +## Contact Information + +If you have any questions or need assistance with contributing to the Hats Protocol, please feel free to reach out to the project maintainers. Contact information can be found in the [README](./README.md#contact) file. + +Thank you for your contributions! diff --git a/README.md b/README.md index 922e601..16f734e 100644 --- a/README.md +++ b/README.md @@ -62,9 +62,9 @@ ## About The Project -Hats Protocol is a protocol for DAO-native roles and credentials that support delegation of authorities. +Hats Protocol is a protocol for DAO-native roles and credentials that supports revocable delegation of authority and responsibility. -Hats are represented on-chain by ERC1155 tokens. An address with a balance of a given Hat token "wears" that hat, granting them the responsibilities and authorities that have been assigned to the Hat by the DAO. +Hats are represented on-chain by non-transferable ERC1155 tokens. An address with a balance of a given Hat token "wears" that hat, granting them the responsibilities and authorities that have been assigned to the Hat by the DAO. ### Deployments @@ -73,25 +73,7 @@ For information on Hats Protocol versions and deployments, see [Releases](https: ## Contributing -Contributions are what make web3 such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. - -If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again! - -To contribute: - -1. Fork the Project -2. Install [Forge](https://book.getfoundry.sh/getting-started/installation) -3. Compile the contracts, run `forge build`, and to test, run `forge test` -4. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) -5. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) -6. Push to the Branch (`git push origin feature/AmazingFeature`) -7. Open a Pull Request - -To deploy Hats yourself: - -- Install [Forge](https://book.getfoundry.sh/getting-started/installation) -- Compile the contracts, run `forge build`, and to test, run `forge test` -- Deploy using the [Hats.s.sol script](script/Hats.s.sol) and follow the [Foundry scripting instructions](https://book.getfoundry.sh/tutorials/solidity-scripting) +See [CONTRIBUTING.md](./CONTRIBUTING.md) for details on how to contribute.

(back to top)

@@ -182,7 +164,7 @@ Any address can wear a Hat, including: The admin of every Hat is another Hat. This means that the authority to perform admin functions for a given Hat is assigned to the wearer of its admin Hat. -The scope of authority for a Hat's admin is to determine who can wear it. This is reflected in the ability create the Hat and to mint or transfer the Hat's token. +The scope of authority for a Hat's admin is to determine who can wear it. This is reflected in the ability create the Hat and to mint or (for mutable Hats) transfer the Hat's token. #### Hatter Contracts @@ -216,30 +198,32 @@ Hat ids are uint256 bitmaps that create an "address" — more like an web or The 32 bytes of a hat's id are structured as follows: - The first 4 bytes are reserved for the top hat id. Since top hat ids are unique across a given deployment of Hats Protocol, we can also think of them as the top level "domain" for a hat tree. -- Each of the next 28 bytes refer to a single "Hat Level". +- Each of the next chunks of 16 bits refers to a single "Hat Level". -This means there are 29 hat levels, beginning with the top hat at level 0 and going up to level 28. A hat at level 6 will have 6 admins in its branch of the tree, and therefore its id will have non-zero values at levels 0-5 as well as its own level. Since these values correspond to its admins, all that is needed to know which hats have admin authorities over a given hat is to know that given hat's id. +This means there are 15 total hat levels, beginning with the top hat at level 0 and going up to level 14. A hat at level 6 will have 6 admins in its branch of the tree, and therefore its id will have non-zero values at levels 0-5 as well as its own level. Since these values correspond to its admins, all that is needed to know which hats have admin authorities over a given hat is to know that given hat's id. #### Hat Tree Space -A hat tree can have up to 28 levels, plus the top hat (tree root). Within those 28 levels are 224 bits of address space (remember, one level is one byte), so the maximum number of hats in a single hat tree is $2^{224} + 1 \approx ~2.696 * 10^{67}$, or well beyond the number of stars in the universe. +A hat tree can have up to 14 levels, plus the top hat (tree root). Within those 14 levels are 224 bits of address space (remember, one level contains 16 bits of space), so the maximum number of hats in a single hat tree is $2^{224} + 1 \approx ~2.696 * 10^{67}$, or well beyond the number of stars in the universe. #### Displaying Hat Ids -Unfortunately, the rich information embedded within a hat id is hard to see when the id is converted to base 10, which is how most applications and front ends display uint256 values originating from smart contracts. - It is recommended for front ends to instead convert hat ids to hexidecimal, revealing the values of the bytes — and therefore the hat levels — directly. -For example, instead of a hat id looking like this under base 10: `27065670334958527282875471856998940443582285201907529987323758379008` +For example, instead of a hat id looking like this under base 10: `26960769438260605603848134863118277618512635038780455604427388092416` -...under hexidecimal it would look like this: `0x0000000101010000000000000000000000000000000000000000000000000000` +...under hexidecimal it would look like this: `0x0000000100020003000000000000000000000000000000000000000000000000` -In this second version, you can clearly see that this hat is... +In this second version, you can see that this hat is... - a level 2 hat - is in the first hat tree (top hat id = 1) -- is the first hat created at level 2 within this tree -- admin'd by the first hat created at level 2 within this tree +- is the third hat created at level 2 within this tree +- admin'd by the second hat created at level 1 within this tree + +We can also prettify this even further by separating hat levels with periods, a la IP addresses: + +`0x00000001.0002.0003.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000.0000`

(back to contents)

@@ -267,7 +251,7 @@ Any address can serve as an eligibility module for a given Hat. Hats Protocol su 1. **Mechanistic eligibility** are logic contracts that implement the `IHatsEligibility` interface, which enables the Hats contract to _pull_ wearer standing by calling `checkWearerStanding` from within the `Hats.balanceOf` function. Mechanistic eligibility enables instantaneous revocation based on pre-defined triggers. 2. **Humanistic eligibility** are either EOAs or governance contracts. To revoke a Hat, humanistic eligibility must _push_ updates to the Hats contract by calling `Hats.ruleOHatWearerStanding`. -Unlike admins, an eligibility modules are explicitly set as addresses, not Hats. This is to avoid long, potentially illegible, chains of revocation authority that can affect wearer penalties (such as slashed stake). +Unlike admins, eligibility modules are explicitly set as addresses, not Hats. This is to avoid long, potentially illegible, chains of revocation authority that can affect wearer penalties (such as slashed stake).

(back to contents)

@@ -299,6 +283,14 @@ Changes are allowed to the following Hat properties: - `mutable` - this is a one-way change - `imageURI` +Additionally, mutable hats can be transferred by their admins to a different wearer. Immutable hats cannot be transferred. + +#### Tophat Exception + +The only exception to the above mutability rules is for tophats, which despite being immutable are allowed to change their own `details` and `imageURI` (but not other properties). + +Note that this only includes non-linked tophats; a tophat that has been linked (aka grafted) onto another hat tree is no longer considered a tophat, and therefore is subject to the same mutability rules as other hats. +

(back to contents)

### Hat Image URIs @@ -355,19 +347,20 @@ As a result, there is no need for safe transfers (transfers which check whether For these reasons, in Hats Protocol, the standard ERC1155 transfer functions — `safeTransferFrom` and `safeBatchTransferFrom` are disabled and will always revert. Similarly, token approvals are not required and `setApprovalForAll` will always revert. -As replacements, Hats can be transfered by admins via `Hats.transferHat`, which emits the ERC1155 standard event `TransferSingle`. +As a replacement, Hats can be transfered by admins via `Hats.transferHat`, which emits the ERC1155 standard event `TransferSingle`. - +1. The linked tophat loses its tophat status (i.e., `Hats.isTopHat` will return `false`) and turns into what we call a "tree root", and +2. The hat to which it is linked becomes its new admin; it is no longer its own admin + +Linked Hat trees can also be unlinked by the tree root from its linked admin, via `Hats.unlinkTopHatFromTree`. This causes the tree root to regain its status as a top hat and to once again become its own admin. ### Renouncing a Hat @@ -404,5 +397,5 @@ Project Link: [https://github.com/Hats-Protocol/hats-protocol/](https://github.c [stars-url]: https://github.com/Hats-Protocol/hats-protocol/stargazers [issues-shield]: https://img.shields.io/github/issues/Hats-Protocol/hats-protocol.svg?style=flat [issues-url]: https://github.com/Hats-Protocol/hats-protocol/issues -[twitter-shield]: https://img.shields.io/twitter/follow/hatsprotocol +[twitter-shield]: https://img.shields.io/twitter/url?label=%40HatsProtocol&style=social&url=https%3A%2F%2Ftwitter.com%2FHatsProtocol [twitter-url]: https://twitter.com/hatsprotocol diff --git a/book.toml b/book.toml new file mode 100644 index 0000000..e6d0048 --- /dev/null +++ b/book.toml @@ -0,0 +1,19 @@ +[book] +src = 'src' +title = '' +description = 'Documentation for Hats Protocol smart contracts' +language = 'en' + +[build] +build-dir = 'book' + +[output.html] +no-section-label = true +additional-js = ['solidity.min.js'] +additional-css = ['book.css'] +git-repository-url = 'https://github.com/Hats-Protocol/hats-protocol' +default-theme = "light" +preferred-dark-theme = "ayu" + +[output.html.fold] +enable = true diff --git a/broadcast/Hats.s.sol/100/run-1661561034.json b/broadcast/Hats.s.sol/100/run-1661561034.json deleted file mode 100644 index dbe81aa..0000000 --- a/broadcast/Hats.s.sol/100/run-1661561034.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xcfcb79a018a29c61f695483367fbe7dbf15d851ba14cea0bb5ce6405a6ada924", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0xb7019c3670f5d4dd99166727a7d29f8a16f4f20a", - "function": null, - "arguments": null, - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x5d2148", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b506040516200565738038062005657833981016040819052620000349162000127565b600262000042838262000220565b50600462000051828262000220565b505050620002ec565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b838211156200011d5760008385830101525b9695505050505050565b600080604083850312156200013b57600080fd5b82516001600160401b03808211156200015357600080fd5b620001618683870162000070565b935060208501519150808211156200017857600080fd5b50620001878582860162000070565b9150509250929050565b600181811c90821680620001a657607f821691505b602082108103620001c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021b57600081815260208120601f850160051c81016020861015620001f65750805b601f850160051c820191505b81811015620002175782815560010162000202565b5050505b505050565b81516001600160401b038111156200023c576200023c6200005a565b62000254816200024d845462000191565b84620001cd565b602080601f8311600181146200028c5760008415620002735750858301515b600019600386901b1c1916600185901b17855562000217565b600085815260208120601f198616915b82811015620002bd578886015182559484019460019091019084016200029c565b5085821015620002dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61535b80620002fc6000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c8063a10963561161010f578063d70343d8116100a2578063f242432a11610071578063f242432a146104b8578063fb2aaa4c146104c6578063fc3e05a4146104eb578063fd427358146104fb57600080fd5b8063d70343d814610451578063e33dd5c914610464578063e769138514610477578063e985e9c51461048a57600080fd5b8063afaae55a116100de578063afaae55a146103f1578063b56f756214610404578063c43dc17714610417578063d395acf81461042a57600080fd5b8063a109635614610375578063a22cb4651461039d578063a2be079b146103b0578063a4a1f06c146103de57600080fd5b806354a1826c116101875780637a9df89f116101565780637a9df89f1461032957806382afd23b1461033c578063854cc0491461034f5780639dd22c9f1461036257600080fd5b806354a1826c146102c0578063641f776e146102d35780637178fb51146102e657806374f82e301461032157600080fd5b80632eb2c2d6116101c35780632eb2c2d6146102655780634352409a1461027a57806345fffac81461028d5780634e1273f4146102a057600080fd5b8062fdd58e146101f457806301ffc9a71461021a57806306fdde031461023d5780630e89341c14610252575b600080fd5b610207610202366004614108565b61050e565b6040519081526020015b60405180910390f35b61022d610228366004614132565b61074f565b6040519015158152602001610211565b610245610834565b60405161021191906141ee565b610245610260366004614201565b6108c2565b6102786102733660046142a8565b6108cd565b005b61022d610288366004614108565b6108ff565b61022d61029b366004614201565b610916565b6102b36102ae366004614363565b610945565b60405161021191906143cf565b61022d6102ce366004614108565b610ac1565b61022d6102e1366004614413565b610cae565b61030c6102f4366004614201565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610211565b610245610f97565b610278610337366004614201565b610fa4565b61022d61034a366004614201565b61102b565b61020761035d36600461452d565b61121e565b6102076103703660046145cb565b61131c565b610388610383366004614619565b61139a565b60408051928352602083019190915201610211565b6102786103ab3660046146b3565b6113c4565b61022d6103be366004614413565b600760209081526000928352604080842090915290825290205460ff1681565b6102786103ec3660046146ea565b6113f6565b61022d6103ff366004614726565b61155a565b61022d610412366004614108565b6117be565b61022d610425366004614777565b611839565b61043d610438366004614201565b6118a4565b60405161021198979695949392919061479c565b61022d61045f366004614413565b611afb565b610245610472366004614201565b611e74565b61020761048536600461481c565b612331565b61022d610498366004614847565b600160209081526000928352604080842090915290825290205460ff1681565b610278610273366004614871565b6104d96104d4366004614201565b61237d565b60405160ff9091168152602001610211565b60035461030c9063ffffffff1681565b61022d610509366004614201565b6126dd565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916105da906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610606906148e9565b80156106535780601f1061062857610100808354040283529160200191610653565b820191906000526020600020905b81548152906001019060200180831161063657829003601f168201915b5050505050815260200160038201805461066c906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610698906148e9565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050815250509050600091506106fe8184612a36565b80156107105750610710848285612b77565b156107485773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806107e257507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061082e57507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60028054610841906148e9565b80601f016020809104026020016040519081016040528092919081815260200182805461086d906148e9565b80156108ba5780601f1061088f576101008083540402835291602001916108ba565b820191906000526020600020905b81548152906001019060200180831161089d57829003601f168201915b505050505081565b606061082e82612cff565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600161090d848461050e565b10159392505050565b6000808211801561082e5750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b60608382146109b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff8111156109ce576109ce61443f565b6040519080825280602002602001820160405280156109f7578160200160208202803683370190505b50905060005b84811015610ab857600080878784818110610a1a57610a1a61493c565b9050602002016020810190610a2f919061496b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610a7d57610a7d61493c565b90506020020135815260200190815260200160002054828281518110610aa557610aa561493c565b60209081029190910101526001016109fd565b50949350505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610b8d906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb9906148e9565b8015610c065780601f10610bdb57610100808354040283529160200191610c06565b820191906000526020600020905b815481529060010190602001808311610be957829003601f168201915b50505050508152602001600382018054610c1f906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4b906148e9565b8015610c985780601f10610c6d57610100808354040283529160200191610c98565b820191906000526020600020905b815481529060010190602001808311610c7b57829003601f168201915b5050505050815250509050610745848285612b77565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610d7a906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610da6906148e9565b8015610df35780601f10610dc857610100808354040283529160200191610df3565b820191906000526020600020905b815481529060010190602001808311610dd657829003601f168201915b50505050508152602001600382018054610e0c906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610e38906148e9565b8015610e855780601f10610e5a57610100808354040283529160200191610e85565b820191906000526020600020905b815481529060010190602001808311610e6857829003601f168201915b5050505050815250509050610e9a33856117be565b610ed9576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018590526044016109ac565b6020808201516000868152600690925260409091205463ffffffff918216911610610f30576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3a83856108ff565b15610f71576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f8d83856001604051806020016040528060008152506130c0565b5060019392505050565b60048054610841906148e9565b610fae33826108ff565b610fe4576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff0338260016131c3565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916110f7906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611123906148e9565b80156111705780601f1061114557610100808354040283529160200191611170565b820191906000526020600020905b81548152906001019060200180831161115357829003601f168201915b50505050508152602001600382018054611189906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546111b5906148e9565b80156112025780601f106111d757610100808354040283529160200191611202565b820191906000526020600020905b8154815290600101906020018083116111e557829003601f168201915b50505050508152505090506112178184612a36565b9392505050565b600061122a33886108ff565b611269576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018890526044016109ac565b60ff8716156112a4576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ad876132d3565b90506112bd8187878787876137a6565b50600087815260056020526040902080546019906112fa90790100000000000000000000000000000000000000000000000000900460ff166149b5565b91906101000a81548160ff021916908360ff1602179055509695505050505050565b6003805460009160e09183906113379063ffffffff166149d4565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b905061137d81604051806020016040528060008152506001600080876137a6565b5061082e83826001604051806020016040528060008152506130c0565b6000806113a7338561131c565b91506113b782898989898861121e565b9050965096945050505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61140033846117be565b611436576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001611443848361050e565b101561147b576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320848452909152812080549091906114b7906149f7565b9091555073ffffffffffffffffffffffffffffffffffffffff8216600090815260208181526040808320848452909152812080549091906114f790614a2c565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611626906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611652906148e9565b801561169f5780601f106116745761010080835404028352916020019161169f565b820191906000526020600020905b81548152906001019060200180831161168257829003601f168201915b505050505081526020016003820180546116b8906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546116e4906148e9565b80156117315780601f1061170657610100808354040283529160200191611731565b820191906000526020600020905b81548152906001019060200180831161171457829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117a5576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117b186868686613a0f565b5060019695505050505050565b60006117c982610916565b156117d65750600061082e565b600060016117e38461237d565b6117ed9190614a64565b90505b60018160ff161061182a57611809846102888584612331565b1561181857600191505061082e565b8061182281614a87565b9150506117f0565b61074584610288856000612331565b6000828152600560205260408120600181015473ffffffffffffffffffffffffffffffffffffffff16331461189a576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458484613b22565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949384938493849388938593849384939192909160a0840191611986906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546119b2906148e9565b80156119ff5780601f106119d4576101008083540402835291602001916119ff565b820191906000526020600020905b8154815290600101906020018083116119e257829003601f168201915b50505050508152602001600382018054611a18906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a44906148e9565b8015611a915780601f10611a6657610100808354040283529160200191611a91565b820191906000526020600020905b815481529060010190602001808311611a7457829003601f168201915b5050509190925250505060a081015160208083015160008e8152600690925260409091205483516080850151939d50919b5063ffffffff169950975095509050611ada8a611e74565b935080606001519250611aed818b612a36565b915050919395975091939597565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611bc7906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf3906148e9565b8015611c405780601f10611c1557610100808354040283529160200191611c40565b820191906000526020600020905b815481529060010190602001808311611c2357829003601f168201915b50505050508152602001600382018054611c59906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611c85906148e9565b8015611cd25780601f10611ca757610100808354040283529160200191611cd2565b820191906000526020600020905b815481529060010190602001808311611cb557829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611db3908590614ade565b600060405180830381855afa9150503d8060008114611dee576040519150601f19603f3d011682016040523d82523d6000602084013e611df3565b606091505b5091509150818015611e06575060008151115b15611e295780806020019051810190611e1f9190614afa565b9095509350611e5b565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e6789898787613a0f565b9998505050505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190611f45906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611f71906148e9565b8015611fbe5780601f10611f9357610100808354040283529160200191611fbe565b820191906000526020600020905b815481529060010190602001808311611fa157829003601f168201915b50505050508152602001600382018054611fd7906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612003906148e9565b80156120505780601f1061202557610100808354040283529160200191612050565b820191906000526020600020905b81548152906001019060200180831161203357829003601f168201915b5050509190925250505060c081015180519192509015612093578060405160200161207b9190614b29565b60405160208183030381529060405292505050919050565b600061209e8561237d565b60ff169050805b80156122fb5760006120bc87610485600185614b6a565b600081815260056020908152604091829020825160e081018452815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169483019490945260ff78010000000000000000000000000000000000000000000000008204811615159583019590955279010000000000000000000000000000000000000000000000000090049093166060840152600181015490911660808301526002810180549394509192909160a084019161218d906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546121b9906148e9565b80156122065780601f106121db57610100808354040283529160200191612206565b820191906000526020600020905b8154815290600101906020018083116121e957829003601f168201915b5050505050815260200160038201805461221f906148e9565b80601f016020809104026020016040519081016040528092919081815260200182805461224b906148e9565b80156122985780601f1061226d57610100808354040283529160200191612298565b820191906000526020600020905b81548152906001019060200180831161227b57829003601f168201915b50505050508152505094508460c0015193506000845111156122ea57836122be88613be9565b6040516020016122cf929190614b81565b60405160208183030381529060405295505050505050919050565b506122f4816149f7565b90506120a5565b50600461230786613be9565b604051602001612318929190614bb0565b6040516020818303038152906040529350505050919050565b60008061233f83601c614a64565b61234a906008614c4c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b600060ff8216156123905750601c919050565b61ffff8216156123a25750601b919050565b62ffffff8216156123b55750601a919050565b63ffffffff8216156123c957506019919050565b64ffffffffff8216156123de57506018919050565b65ffffffffffff8216156123f457506017919050565b66ffffffffffffff82161561240b57506016919050565b67ffffffffffffffff82161561242357506015919050565b68ffffffffffffffffff82161561243c57506014919050565b69ffffffffffffffffffff82161561245657506013919050565b6affffffffffffffffffffff82161561247157506012919050565b6bffffffffffffffffffffffff82161561248d57506011919050565b6cffffffffffffffffffffffffff8216156124aa57506010919050565b6dffffffffffffffffffffffffffff8216156124c85750600f919050565b6effffffffffffffffffffffffffffff8216156124e75750600e919050565b6fffffffffffffffffffffffffffffffff8216156125075750600d919050565b70ffffffffffffffffffffffffffffffffff8216156125285750600c919050565b71ffffffffffffffffffffffffffffffffffff82161561254a5750600b919050565b72ffffffffffffffffffffffffffffffffffffff82161561256d5750600a919050565b73ffffffffffffffffffffffffffffffffffffffff82161561259157506009919050565b74ffffffffffffffffffffffffffffffffffffffffff8216156125b657506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff8216156125dc57506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff82161561260357506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff82161561262b57506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff82161561265457506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff82161561267e57506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff8216156126a957506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216156126d557506001919050565b506000919050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916127a9906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546127d5906148e9565b80156128225780601f106127f757610100808354040283529160200191612822565b820191906000526020600020905b81548152906001019060200180831161280557829003601f168201915b5050505050815260200160038201805461283b906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612867906148e9565b80156128b45780601f10612889576101008083540402835291602001916128b4565b820191906000526020600020905b81548152906001019060200180831161289757829003601f168201915b5050505050815250509050600080846040516024016128d591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061297c908590614ade565b600060405180830381855afa9150503d80600081146129b7576040519150601f19603f3d011682016040523d82523d6000602084013e6129bc565b606091505b50915091508180156129cf575060008151115b156129ef57808060200190518101906129e89190614c75565b9350612a21565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a2b8785613b22565b979650505050505050565b60008082604051602401612a4c91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690612af3908590614ade565b600060405180830381855afa9150503d8060008114612b2e576040519150601f19603f3d011682016040523d82523d6000602084013e612b33565b606091505b5091509150818015612b46575060008151115b15612b665780806020019051810190612b5f9190614c75565b9350612b6e565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690612c49908590614ade565b600060405180830381855afa9150503d8060008114612c84576040519150601f19603f3d011682016040523d82523d6000602084013e612c89565b606091505b5091509150818015612c9c575060008151115b15612cbe5780806020019051810190612cb59190614afa565b9450612cf59050565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190612dd0906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612dfc906148e9565b8015612e495780601f10612e1e57610100808354040283529160200191612e49565b820191906000526020600020905b815481529060010190602001808311612e2c57829003601f168201915b50505050508152602001600382018054612e62906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612e8e906148e9565b8015612edb5780601f10612eb057610100808354040283529160200191612edb565b820191906000526020600020905b815481529060010190602001808311612ebe57829003601f168201915b50505050508152505090506000612ef184610916565b15612efd575082612f19565b612f16846001612f0c8761237d565b6104859190614a64565b90505b6000612f3260e0612f2b876000612331565b901c613be9565b60008681526006602052604081205491925090612f549063ffffffff16613be9565b612f67856020015163ffffffff16613be9565b612f7085613be9565b612f7b866020613d26565b8751612f8690613f69565b612f938960800151613f69565b604051602001612fa896959493929190614c92565b60405160208183030381529060405290506000612fc58588612a36565b613004576040518060400160405280600881526020017f696e61637469766500000000000000000000000000000000000000000000000081525061303b565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006130918660a00151856130518b613be9565b61305c8c6020613d26565b866130668e611e74565b8960405160200161307d9796959493929190614e36565b604051602081830303815290604052613f8c565b9050806040516020016130a49190614ff5565b6040516020818303038152906040529650505050505050919050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906130fe90849061503a565b9091555050600083815260066020526040812080549091906131259063ffffffff166149d4565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62868660405161154c929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290613201908490614b6a565b9091555050600082815260066020526040812080549091906132289063ffffffff16615052565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516132c6929190918252602082015260400190565b60405180910390a4505050565b600081815260056020526040812054819061330f90790100000000000000000000000000000000000000000000000000900460ff166001615068565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166000036133495760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff166000036133805760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff166000036133b65760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff166000036133eb5760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff1660000361341f5760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff166000036134525760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff166000036134845760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff166000036134b55760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff166000036134e55760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff166000036135145760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff166000036135425760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff1660000361356f5760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff1660000361359b5760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff166000036135c65760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff166000036135f05760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff166000036136195760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff166000036136415760588160ff16901b8317915050919050565b826affffffffffffffffffffff166000036136685760508160ff16901b8317915050919050565b8269ffffffffffffffffffff1660000361368e5760488160ff16901b8317915050919050565b8268ffffffffffffffffff166000036136b35760408160ff16901b8317915050919050565b8267ffffffffffffffff166000036136d75760388160ff16901b8317915050919050565b8266ffffffffffffff166000036136fa5760308160ff16901b8317915050919050565b8265ffffffffffff1660000361371c5760288160ff16901b8317915050919050565b8264ffffffffff1660000361373d5760208160ff16901b8317915050919050565b8263ffffffff1660000361375d5760188160ff16901b8317915050919050565b8262ffffff1660000361377c5760108160ff16901b8317915050919050565b8261ffff1660000361379a5760088160ff16901b8317915050919050565b60ff1691909117919050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c0810191909152858160a0018190525084816020019063ffffffff16908163ffffffff168152505083816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160c001819052506001816040019015159081151581525050806005600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548160ff02191690831515021790555060608201518160000160196101000a81548160ff021916908360ff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160020190816139ab91906150dc565b5060c082015160038201906139c090826150dc565b509050507fec3ffd1c8b2d500049d00ade82ead8a9f4aeeeab4b37fb8913380cce862a99ed8787878787876040516139fd969594939291906151f6565b60405180910390a19695505050505050565b60008215613a2357613a23848660016131c3565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503613abc5750600084815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260056020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146107485780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b606081600003613c2c57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115613c565780613c4081614a2c565b9150613c4f9050600a83615280565b9150613c30565b60008167ffffffffffffffff811115613c7157613c7161443f565b6040519080825280601f01601f191660200182016040528015613c9b576020820181803683370190505b5090505b8415613d1e57613cb0600183614b6a565b9150613cbd600a86615294565b613cc890603061503a565b60f81b818381518110613cdd57613cdd61493c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350613d17600a86615280565b9450613c9f565b949350505050565b60606000613d358360026152a8565b613d4090600261503a565b67ffffffffffffffff811115613d5857613d5861443f565b6040519080825280601f01601f191660200182016040528015613d82576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613db957613db961493c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613e1c57613e1c61493c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613e588460026152a8565b613e6390600161503a565b90505b6001811115613f00577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613ea457613ea461493c565b1a60f81b828281518110613eba57613eba61493c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613ef9816149f7565b9050613e66565b508315611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ac565b606061082e73ffffffffffffffffffffffffffffffffffffffff83166014613d26565b60608151600003613fab57505060408051602081019091526000815290565b60006040518060600160405280604081526020016152e66040913990506000600384516002613fda919061503a565b613fe49190615280565b613fef9060046152a8565b67ffffffffffffffff8111156140075761400761443f565b6040519080825280601f01601f191660200182016040528015614031576020820181803683370190505b509050600182016020820185865187015b8082101561409d576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250614042565b50506003865106600181146140b957600281146140cc576140d4565b603d6001830353603d60028303536140d4565b603d60018303535b509195945050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461410357600080fd5b919050565b6000806040838503121561411b57600080fd5b614124836140df565b946020939093013593505050565b60006020828403121561414457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461121757600080fd5b60005b8381101561418f578181015183820152602001614177565b8381111561419e576000848401525b50505050565b600081518084526141bc816020860160208601614174565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061121760208301846141a4565b60006020828403121561421357600080fd5b5035919050565b60008083601f84011261422c57600080fd5b50813567ffffffffffffffff81111561424457600080fd5b6020830191508360208260051b850101111561425f57600080fd5b9250929050565b60008083601f84011261427857600080fd5b50813567ffffffffffffffff81111561429057600080fd5b60208301915083602082850101111561425f57600080fd5b60008060008060008060008060a0898b0312156142c457600080fd5b6142cd896140df565b97506142db60208a016140df565b9650604089013567ffffffffffffffff808211156142f857600080fd5b6143048c838d0161421a565b909850965060608b013591508082111561431d57600080fd5b6143298c838d0161421a565b909650945060808b013591508082111561434257600080fd5b5061434f8b828c01614266565b999c989b5096995094979396929594505050565b6000806000806040858703121561437957600080fd5b843567ffffffffffffffff8082111561439157600080fd5b61439d8883890161421a565b909650945060208701359150808211156143b657600080fd5b506143c38782880161421a565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015614407578351835292840192918401916001016143eb565b50909695505050505050565b6000806040838503121561442657600080fd5b82359150614436602084016140df565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261447f57600080fd5b813567ffffffffffffffff8082111561449a5761449a61443f565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156144e0576144e061443f565b816040528381528660208588010111156144f957600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff8116811461410357600080fd5b60008060008060008060c0878903121561454657600080fd5b86359550602087013567ffffffffffffffff8082111561456557600080fd5b6145718a838b0161446e565b965061457f60408a01614519565b955061458d60608a016140df565b945061459b60808a016140df565b935060a08901359150808211156145b157600080fd5b506145be89828a0161446e565b9150509295509295509295565b600080604083850312156145de57600080fd5b6145e7836140df565b9150602083013567ffffffffffffffff81111561460357600080fd5b61460f8582860161446e565b9150509250929050565b60008060008060008060c0878903121561463257600080fd5b863567ffffffffffffffff8082111561464a57600080fd5b6146568a838b0161446e565b975061466460208a01614519565b965061467260408a016140df565b955061468060608a016140df565b9450608089013591508082111561469657600080fd5b61459b8a838b0161446e565b80151581146146b057600080fd5b50565b600080604083850312156146c657600080fd5b6146cf836140df565b915060208301356146df816146a2565b809150509250929050565b6000806000606084860312156146ff57600080fd5b8335925061470f602085016140df565b915061471d604085016140df565b90509250925092565b6000806000806080858703121561473c57600080fd5b8435935061474c602086016140df565b9250604085013561475c816146a2565b9150606085013561476c816146a2565b939692955090935050565b6000806040838503121561478a57600080fd5b8235915060208301356146df816146a2565b60006101008083526147b08184018c6141a4565b63ffffffff8b811660208601528a16604085015273ffffffffffffffffffffffffffffffffffffffff89811660608601528816608085015283810360a085015290506147fc81876141a4565b60ff9590951660c0840152505090151560e0909101529695505050505050565b6000806040838503121561482f57600080fd5b82359150602083013560ff811681146146df57600080fd5b6000806040838503121561485a57600080fd5b614863836140df565b9150614436602084016140df565b60008060008060008060a0878903121561488a57600080fd5b614893876140df565b95506148a1602088016140df565b94506040870135935060608701359250608087013567ffffffffffffffff8111156148cb57600080fd5b6148d789828a01614266565b979a9699509497509295939492505050565b600181811c908216806148fd57607f821691505b602082108103614936577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561497d57600080fd5b611217826140df565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff81036149cb576149cb614986565b60010192915050565b600063ffffffff8083168181036149ed576149ed614986565b6001019392505050565b600081614a0657614a06614986565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a5d57614a5d614986565b5060010190565b600060ff821660ff841680821015614a7e57614a7e614986565b90039392505050565b600060ff821680614a9a57614a9a614986565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b60008151614ad4818560208601614174565b9290920192915050565b60008251614af0818460208701614174565b9190910192915050565b60008060408385031215614b0d57600080fd5b8251614b18816146a2565b60208401519092506146df816146a2565b60008251614b3b818460208701614174565b7f3000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b600082821015614b7c57614b7c614986565b500390565b60008351614b93818460208801614174565b835190830190614ba7818360208801614174565b01949350505050565b6000808454614bbe816148e9565b60018281168015614bd65760018114614c0957614c38565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450614c38565b8860005260208060002060005b85811015614c2f5781548a820152908401908201614c16565b50505082870194505b505050508351614ba7818360208801614174565b600060ff821660ff84168160ff0481118215151615614c6d57614c6d614986565b029392505050565b600060208284031215614c8757600080fd5b8151611217816146a2565b7f7b2263757272656e7420737570706c79223a2022000000000000000000000000815260008751614cca816014850160208c01614174565b7f222c2022737570706c7920636170223a202200000000000000000000000000006014918401918201528751614d07816026840160208c01614174565b7f222c202261646d696e2028696429223a20220000000000000000000000000000602692909101918201528651614d45816038840160208b01614174565b7f222c202261646d696e202870726574747920696429223a202200000000000000603892909101918201528551614d83816051840160208a01614174565b7f222c20226f7261636c652061646472657373223a202200000000000000000000605192909101918201528451614dc1816067840160208901614174565b614e28614dff614df96067848601017f222c2022636f6e646974696f6e732061646472657373223a20220000000000008152601a0190565b87614ac2565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008851614e6e816018850160208d01614174565b7f222c2022646f6d61696e223a20220000000000000000000000000000000000006018918401918201528851614eab816026840160208d01614174565b7f222c20226964223a202200000000000000000000000000000000000000000000602692909101918201528751614ee9816030840160208c01614174565b7f222c2022707265747479206964223a2022000000000000000000000000000000603092909101918201528651614f27816041840160208b01614174565b7f222c2022737461747573223a202200000000000000000000000000000000000060419290910191820152614e28614fcc614fc6614f9d614f97614f6e604f87018c614ac2565b7f222c2022696d616765223a2022000000000000000000000000000000000000008152600d0190565b89614ac2565b7f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b86614ac2565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161502d81601d850160208701614174565b91909101601d0192915050565b6000821982111561504d5761504d614986565b500190565b600063ffffffff821680614a9a57614a9a614986565b600060ff821660ff84168060ff0382111561508557615085614986565b019392505050565b601f8211156150d757600081815260208120601f850160051c810160208610156150b45750805b601f850160051c820191505b818110156150d3578281556001016150c0565b5050505b505050565b815167ffffffffffffffff8111156150f6576150f661443f565b61510a8161510484546148e9565b8461508d565b602080601f83116001811461515d57600084156151275750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556150d3565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156151aa5788860151825594840194600190910190840161518b565b50858210156151e657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b86815260c06020820152600061520f60c08301886141a4565b63ffffffff8716604084015273ffffffffffffffffffffffffffffffffffffffff86811660608501528516608084015282810360a0840152611e6781856141a4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261528f5761528f615251565b500490565b6000826152a3576152a3615251565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152e0576152e0614986565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212200bc025db4f6a2b2dd40f1c72620e2150bb1d3e7427efccaaad018e45a2b7c1a764736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203100000000000000000000000000000000000000000000000000000000000000000000000000000000000b686174732d62657461313a000000000000000000000000000000000000000000", - "nonce": "0x2", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [], - "libraries": [], - "pending": [ - "0xcfcb79a018a29c61f695483367fbe7dbf15d851ba14cea0bb5ce6405a6ada924" - ], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/100/run-latest.json", - "returns": {}, - "timestamp": 1661561034, - "commit": "f8a22ee" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/100/run-1661561041.json b/broadcast/Hats.s.sol/100/run-1661561041.json deleted file mode 100644 index 92c2934..0000000 --- a/broadcast/Hats.s.sol/100/run-1661561041.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xcfcb79a018a29c61f695483367fbe7dbf15d851ba14cea0bb5ce6405a6ada924", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0xb7019c3670f5d4dd99166727a7d29f8a16f4f20a", - "function": null, - "arguments": null, - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x5d2148", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b506040516200565738038062005657833981016040819052620000349162000127565b600262000042838262000220565b50600462000051828262000220565b505050620002ec565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b838211156200011d5760008385830101525b9695505050505050565b600080604083850312156200013b57600080fd5b82516001600160401b03808211156200015357600080fd5b620001618683870162000070565b935060208501519150808211156200017857600080fd5b50620001878582860162000070565b9150509250929050565b600181811c90821680620001a657607f821691505b602082108103620001c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021b57600081815260208120601f850160051c81016020861015620001f65750805b601f850160051c820191505b81811015620002175782815560010162000202565b5050505b505050565b81516001600160401b038111156200023c576200023c6200005a565b62000254816200024d845462000191565b84620001cd565b602080601f8311600181146200028c5760008415620002735750858301515b600019600386901b1c1916600185901b17855562000217565b600085815260208120601f198616915b82811015620002bd578886015182559484019460019091019084016200029c565b5085821015620002dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61535b80620002fc6000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c8063a10963561161010f578063d70343d8116100a2578063f242432a11610071578063f242432a146104b8578063fb2aaa4c146104c6578063fc3e05a4146104eb578063fd427358146104fb57600080fd5b8063d70343d814610451578063e33dd5c914610464578063e769138514610477578063e985e9c51461048a57600080fd5b8063afaae55a116100de578063afaae55a146103f1578063b56f756214610404578063c43dc17714610417578063d395acf81461042a57600080fd5b8063a109635614610375578063a22cb4651461039d578063a2be079b146103b0578063a4a1f06c146103de57600080fd5b806354a1826c116101875780637a9df89f116101565780637a9df89f1461032957806382afd23b1461033c578063854cc0491461034f5780639dd22c9f1461036257600080fd5b806354a1826c146102c0578063641f776e146102d35780637178fb51146102e657806374f82e301461032157600080fd5b80632eb2c2d6116101c35780632eb2c2d6146102655780634352409a1461027a57806345fffac81461028d5780634e1273f4146102a057600080fd5b8062fdd58e146101f457806301ffc9a71461021a57806306fdde031461023d5780630e89341c14610252575b600080fd5b610207610202366004614108565b61050e565b6040519081526020015b60405180910390f35b61022d610228366004614132565b61074f565b6040519015158152602001610211565b610245610834565b60405161021191906141ee565b610245610260366004614201565b6108c2565b6102786102733660046142a8565b6108cd565b005b61022d610288366004614108565b6108ff565b61022d61029b366004614201565b610916565b6102b36102ae366004614363565b610945565b60405161021191906143cf565b61022d6102ce366004614108565b610ac1565b61022d6102e1366004614413565b610cae565b61030c6102f4366004614201565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610211565b610245610f97565b610278610337366004614201565b610fa4565b61022d61034a366004614201565b61102b565b61020761035d36600461452d565b61121e565b6102076103703660046145cb565b61131c565b610388610383366004614619565b61139a565b60408051928352602083019190915201610211565b6102786103ab3660046146b3565b6113c4565b61022d6103be366004614413565b600760209081526000928352604080842090915290825290205460ff1681565b6102786103ec3660046146ea565b6113f6565b61022d6103ff366004614726565b61155a565b61022d610412366004614108565b6117be565b61022d610425366004614777565b611839565b61043d610438366004614201565b6118a4565b60405161021198979695949392919061479c565b61022d61045f366004614413565b611afb565b610245610472366004614201565b611e74565b61020761048536600461481c565b612331565b61022d610498366004614847565b600160209081526000928352604080842090915290825290205460ff1681565b610278610273366004614871565b6104d96104d4366004614201565b61237d565b60405160ff9091168152602001610211565b60035461030c9063ffffffff1681565b61022d610509366004614201565b6126dd565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916105da906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610606906148e9565b80156106535780601f1061062857610100808354040283529160200191610653565b820191906000526020600020905b81548152906001019060200180831161063657829003601f168201915b5050505050815260200160038201805461066c906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610698906148e9565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050815250509050600091506106fe8184612a36565b80156107105750610710848285612b77565b156107485773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806107e257507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061082e57507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60028054610841906148e9565b80601f016020809104026020016040519081016040528092919081815260200182805461086d906148e9565b80156108ba5780601f1061088f576101008083540402835291602001916108ba565b820191906000526020600020905b81548152906001019060200180831161089d57829003601f168201915b505050505081565b606061082e82612cff565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600161090d848461050e565b10159392505050565b6000808211801561082e5750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b60608382146109b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff8111156109ce576109ce61443f565b6040519080825280602002602001820160405280156109f7578160200160208202803683370190505b50905060005b84811015610ab857600080878784818110610a1a57610a1a61493c565b9050602002016020810190610a2f919061496b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610a7d57610a7d61493c565b90506020020135815260200190815260200160002054828281518110610aa557610aa561493c565b60209081029190910101526001016109fd565b50949350505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610b8d906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb9906148e9565b8015610c065780601f10610bdb57610100808354040283529160200191610c06565b820191906000526020600020905b815481529060010190602001808311610be957829003601f168201915b50505050508152602001600382018054610c1f906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4b906148e9565b8015610c985780601f10610c6d57610100808354040283529160200191610c98565b820191906000526020600020905b815481529060010190602001808311610c7b57829003601f168201915b5050505050815250509050610745848285612b77565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610d7a906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610da6906148e9565b8015610df35780601f10610dc857610100808354040283529160200191610df3565b820191906000526020600020905b815481529060010190602001808311610dd657829003601f168201915b50505050508152602001600382018054610e0c906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610e38906148e9565b8015610e855780601f10610e5a57610100808354040283529160200191610e85565b820191906000526020600020905b815481529060010190602001808311610e6857829003601f168201915b5050505050815250509050610e9a33856117be565b610ed9576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018590526044016109ac565b6020808201516000868152600690925260409091205463ffffffff918216911610610f30576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3a83856108ff565b15610f71576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f8d83856001604051806020016040528060008152506130c0565b5060019392505050565b60048054610841906148e9565b610fae33826108ff565b610fe4576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff0338260016131c3565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916110f7906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611123906148e9565b80156111705780601f1061114557610100808354040283529160200191611170565b820191906000526020600020905b81548152906001019060200180831161115357829003601f168201915b50505050508152602001600382018054611189906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546111b5906148e9565b80156112025780601f106111d757610100808354040283529160200191611202565b820191906000526020600020905b8154815290600101906020018083116111e557829003601f168201915b50505050508152505090506112178184612a36565b9392505050565b600061122a33886108ff565b611269576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018890526044016109ac565b60ff8716156112a4576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ad876132d3565b90506112bd8187878787876137a6565b50600087815260056020526040902080546019906112fa90790100000000000000000000000000000000000000000000000000900460ff166149b5565b91906101000a81548160ff021916908360ff1602179055509695505050505050565b6003805460009160e09183906113379063ffffffff166149d4565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b905061137d81604051806020016040528060008152506001600080876137a6565b5061082e83826001604051806020016040528060008152506130c0565b6000806113a7338561131c565b91506113b782898989898861121e565b9050965096945050505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61140033846117be565b611436576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001611443848361050e565b101561147b576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320848452909152812080549091906114b7906149f7565b9091555073ffffffffffffffffffffffffffffffffffffffff8216600090815260208181526040808320848452909152812080549091906114f790614a2c565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611626906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611652906148e9565b801561169f5780601f106116745761010080835404028352916020019161169f565b820191906000526020600020905b81548152906001019060200180831161168257829003601f168201915b505050505081526020016003820180546116b8906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546116e4906148e9565b80156117315780601f1061170657610100808354040283529160200191611731565b820191906000526020600020905b81548152906001019060200180831161171457829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117a5576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117b186868686613a0f565b5060019695505050505050565b60006117c982610916565b156117d65750600061082e565b600060016117e38461237d565b6117ed9190614a64565b90505b60018160ff161061182a57611809846102888584612331565b1561181857600191505061082e565b8061182281614a87565b9150506117f0565b61074584610288856000612331565b6000828152600560205260408120600181015473ffffffffffffffffffffffffffffffffffffffff16331461189a576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458484613b22565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949384938493849388938593849384939192909160a0840191611986906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546119b2906148e9565b80156119ff5780601f106119d4576101008083540402835291602001916119ff565b820191906000526020600020905b8154815290600101906020018083116119e257829003601f168201915b50505050508152602001600382018054611a18906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a44906148e9565b8015611a915780601f10611a6657610100808354040283529160200191611a91565b820191906000526020600020905b815481529060010190602001808311611a7457829003601f168201915b5050509190925250505060a081015160208083015160008e8152600690925260409091205483516080850151939d50919b5063ffffffff169950975095509050611ada8a611e74565b935080606001519250611aed818b612a36565b915050919395975091939597565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611bc7906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf3906148e9565b8015611c405780601f10611c1557610100808354040283529160200191611c40565b820191906000526020600020905b815481529060010190602001808311611c2357829003601f168201915b50505050508152602001600382018054611c59906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611c85906148e9565b8015611cd25780601f10611ca757610100808354040283529160200191611cd2565b820191906000526020600020905b815481529060010190602001808311611cb557829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611db3908590614ade565b600060405180830381855afa9150503d8060008114611dee576040519150601f19603f3d011682016040523d82523d6000602084013e611df3565b606091505b5091509150818015611e06575060008151115b15611e295780806020019051810190611e1f9190614afa565b9095509350611e5b565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e6789898787613a0f565b9998505050505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190611f45906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611f71906148e9565b8015611fbe5780601f10611f9357610100808354040283529160200191611fbe565b820191906000526020600020905b815481529060010190602001808311611fa157829003601f168201915b50505050508152602001600382018054611fd7906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612003906148e9565b80156120505780601f1061202557610100808354040283529160200191612050565b820191906000526020600020905b81548152906001019060200180831161203357829003601f168201915b5050509190925250505060c081015180519192509015612093578060405160200161207b9190614b29565b60405160208183030381529060405292505050919050565b600061209e8561237d565b60ff169050805b80156122fb5760006120bc87610485600185614b6a565b600081815260056020908152604091829020825160e081018452815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169483019490945260ff78010000000000000000000000000000000000000000000000008204811615159583019590955279010000000000000000000000000000000000000000000000000090049093166060840152600181015490911660808301526002810180549394509192909160a084019161218d906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546121b9906148e9565b80156122065780601f106121db57610100808354040283529160200191612206565b820191906000526020600020905b8154815290600101906020018083116121e957829003601f168201915b5050505050815260200160038201805461221f906148e9565b80601f016020809104026020016040519081016040528092919081815260200182805461224b906148e9565b80156122985780601f1061226d57610100808354040283529160200191612298565b820191906000526020600020905b81548152906001019060200180831161227b57829003601f168201915b50505050508152505094508460c0015193506000845111156122ea57836122be88613be9565b6040516020016122cf929190614b81565b60405160208183030381529060405295505050505050919050565b506122f4816149f7565b90506120a5565b50600461230786613be9565b604051602001612318929190614bb0565b6040516020818303038152906040529350505050919050565b60008061233f83601c614a64565b61234a906008614c4c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b600060ff8216156123905750601c919050565b61ffff8216156123a25750601b919050565b62ffffff8216156123b55750601a919050565b63ffffffff8216156123c957506019919050565b64ffffffffff8216156123de57506018919050565b65ffffffffffff8216156123f457506017919050565b66ffffffffffffff82161561240b57506016919050565b67ffffffffffffffff82161561242357506015919050565b68ffffffffffffffffff82161561243c57506014919050565b69ffffffffffffffffffff82161561245657506013919050565b6affffffffffffffffffffff82161561247157506012919050565b6bffffffffffffffffffffffff82161561248d57506011919050565b6cffffffffffffffffffffffffff8216156124aa57506010919050565b6dffffffffffffffffffffffffffff8216156124c85750600f919050565b6effffffffffffffffffffffffffffff8216156124e75750600e919050565b6fffffffffffffffffffffffffffffffff8216156125075750600d919050565b70ffffffffffffffffffffffffffffffffff8216156125285750600c919050565b71ffffffffffffffffffffffffffffffffffff82161561254a5750600b919050565b72ffffffffffffffffffffffffffffffffffffff82161561256d5750600a919050565b73ffffffffffffffffffffffffffffffffffffffff82161561259157506009919050565b74ffffffffffffffffffffffffffffffffffffffffff8216156125b657506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff8216156125dc57506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff82161561260357506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff82161561262b57506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff82161561265457506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff82161561267e57506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff8216156126a957506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216156126d557506001919050565b506000919050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916127a9906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546127d5906148e9565b80156128225780601f106127f757610100808354040283529160200191612822565b820191906000526020600020905b81548152906001019060200180831161280557829003601f168201915b5050505050815260200160038201805461283b906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612867906148e9565b80156128b45780601f10612889576101008083540402835291602001916128b4565b820191906000526020600020905b81548152906001019060200180831161289757829003601f168201915b5050505050815250509050600080846040516024016128d591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061297c908590614ade565b600060405180830381855afa9150503d80600081146129b7576040519150601f19603f3d011682016040523d82523d6000602084013e6129bc565b606091505b50915091508180156129cf575060008151115b156129ef57808060200190518101906129e89190614c75565b9350612a21565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a2b8785613b22565b979650505050505050565b60008082604051602401612a4c91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690612af3908590614ade565b600060405180830381855afa9150503d8060008114612b2e576040519150601f19603f3d011682016040523d82523d6000602084013e612b33565b606091505b5091509150818015612b46575060008151115b15612b665780806020019051810190612b5f9190614c75565b9350612b6e565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690612c49908590614ade565b600060405180830381855afa9150503d8060008114612c84576040519150601f19603f3d011682016040523d82523d6000602084013e612c89565b606091505b5091509150818015612c9c575060008151115b15612cbe5780806020019051810190612cb59190614afa565b9450612cf59050565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190612dd0906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612dfc906148e9565b8015612e495780601f10612e1e57610100808354040283529160200191612e49565b820191906000526020600020905b815481529060010190602001808311612e2c57829003601f168201915b50505050508152602001600382018054612e62906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612e8e906148e9565b8015612edb5780601f10612eb057610100808354040283529160200191612edb565b820191906000526020600020905b815481529060010190602001808311612ebe57829003601f168201915b50505050508152505090506000612ef184610916565b15612efd575082612f19565b612f16846001612f0c8761237d565b6104859190614a64565b90505b6000612f3260e0612f2b876000612331565b901c613be9565b60008681526006602052604081205491925090612f549063ffffffff16613be9565b612f67856020015163ffffffff16613be9565b612f7085613be9565b612f7b866020613d26565b8751612f8690613f69565b612f938960800151613f69565b604051602001612fa896959493929190614c92565b60405160208183030381529060405290506000612fc58588612a36565b613004576040518060400160405280600881526020017f696e61637469766500000000000000000000000000000000000000000000000081525061303b565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006130918660a00151856130518b613be9565b61305c8c6020613d26565b866130668e611e74565b8960405160200161307d9796959493929190614e36565b604051602081830303815290604052613f8c565b9050806040516020016130a49190614ff5565b6040516020818303038152906040529650505050505050919050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906130fe90849061503a565b9091555050600083815260066020526040812080549091906131259063ffffffff166149d4565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62868660405161154c929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290613201908490614b6a565b9091555050600082815260066020526040812080549091906132289063ffffffff16615052565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516132c6929190918252602082015260400190565b60405180910390a4505050565b600081815260056020526040812054819061330f90790100000000000000000000000000000000000000000000000000900460ff166001615068565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166000036133495760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff166000036133805760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff166000036133b65760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff166000036133eb5760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff1660000361341f5760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff166000036134525760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff166000036134845760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff166000036134b55760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff166000036134e55760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff166000036135145760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff166000036135425760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff1660000361356f5760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff1660000361359b5760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff166000036135c65760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff166000036135f05760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff166000036136195760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff166000036136415760588160ff16901b8317915050919050565b826affffffffffffffffffffff166000036136685760508160ff16901b8317915050919050565b8269ffffffffffffffffffff1660000361368e5760488160ff16901b8317915050919050565b8268ffffffffffffffffff166000036136b35760408160ff16901b8317915050919050565b8267ffffffffffffffff166000036136d75760388160ff16901b8317915050919050565b8266ffffffffffffff166000036136fa5760308160ff16901b8317915050919050565b8265ffffffffffff1660000361371c5760288160ff16901b8317915050919050565b8264ffffffffff1660000361373d5760208160ff16901b8317915050919050565b8263ffffffff1660000361375d5760188160ff16901b8317915050919050565b8262ffffff1660000361377c5760108160ff16901b8317915050919050565b8261ffff1660000361379a5760088160ff16901b8317915050919050565b60ff1691909117919050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c0810191909152858160a0018190525084816020019063ffffffff16908163ffffffff168152505083816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160c001819052506001816040019015159081151581525050806005600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548160ff02191690831515021790555060608201518160000160196101000a81548160ff021916908360ff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160020190816139ab91906150dc565b5060c082015160038201906139c090826150dc565b509050507fec3ffd1c8b2d500049d00ade82ead8a9f4aeeeab4b37fb8913380cce862a99ed8787878787876040516139fd969594939291906151f6565b60405180910390a19695505050505050565b60008215613a2357613a23848660016131c3565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503613abc5750600084815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260056020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146107485780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b606081600003613c2c57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115613c565780613c4081614a2c565b9150613c4f9050600a83615280565b9150613c30565b60008167ffffffffffffffff811115613c7157613c7161443f565b6040519080825280601f01601f191660200182016040528015613c9b576020820181803683370190505b5090505b8415613d1e57613cb0600183614b6a565b9150613cbd600a86615294565b613cc890603061503a565b60f81b818381518110613cdd57613cdd61493c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350613d17600a86615280565b9450613c9f565b949350505050565b60606000613d358360026152a8565b613d4090600261503a565b67ffffffffffffffff811115613d5857613d5861443f565b6040519080825280601f01601f191660200182016040528015613d82576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613db957613db961493c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613e1c57613e1c61493c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613e588460026152a8565b613e6390600161503a565b90505b6001811115613f00577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613ea457613ea461493c565b1a60f81b828281518110613eba57613eba61493c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613ef9816149f7565b9050613e66565b508315611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ac565b606061082e73ffffffffffffffffffffffffffffffffffffffff83166014613d26565b60608151600003613fab57505060408051602081019091526000815290565b60006040518060600160405280604081526020016152e66040913990506000600384516002613fda919061503a565b613fe49190615280565b613fef9060046152a8565b67ffffffffffffffff8111156140075761400761443f565b6040519080825280601f01601f191660200182016040528015614031576020820181803683370190505b509050600182016020820185865187015b8082101561409d576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250614042565b50506003865106600181146140b957600281146140cc576140d4565b603d6001830353603d60028303536140d4565b603d60018303535b509195945050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461410357600080fd5b919050565b6000806040838503121561411b57600080fd5b614124836140df565b946020939093013593505050565b60006020828403121561414457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461121757600080fd5b60005b8381101561418f578181015183820152602001614177565b8381111561419e576000848401525b50505050565b600081518084526141bc816020860160208601614174565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061121760208301846141a4565b60006020828403121561421357600080fd5b5035919050565b60008083601f84011261422c57600080fd5b50813567ffffffffffffffff81111561424457600080fd5b6020830191508360208260051b850101111561425f57600080fd5b9250929050565b60008083601f84011261427857600080fd5b50813567ffffffffffffffff81111561429057600080fd5b60208301915083602082850101111561425f57600080fd5b60008060008060008060008060a0898b0312156142c457600080fd5b6142cd896140df565b97506142db60208a016140df565b9650604089013567ffffffffffffffff808211156142f857600080fd5b6143048c838d0161421a565b909850965060608b013591508082111561431d57600080fd5b6143298c838d0161421a565b909650945060808b013591508082111561434257600080fd5b5061434f8b828c01614266565b999c989b5096995094979396929594505050565b6000806000806040858703121561437957600080fd5b843567ffffffffffffffff8082111561439157600080fd5b61439d8883890161421a565b909650945060208701359150808211156143b657600080fd5b506143c38782880161421a565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015614407578351835292840192918401916001016143eb565b50909695505050505050565b6000806040838503121561442657600080fd5b82359150614436602084016140df565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261447f57600080fd5b813567ffffffffffffffff8082111561449a5761449a61443f565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156144e0576144e061443f565b816040528381528660208588010111156144f957600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff8116811461410357600080fd5b60008060008060008060c0878903121561454657600080fd5b86359550602087013567ffffffffffffffff8082111561456557600080fd5b6145718a838b0161446e565b965061457f60408a01614519565b955061458d60608a016140df565b945061459b60808a016140df565b935060a08901359150808211156145b157600080fd5b506145be89828a0161446e565b9150509295509295509295565b600080604083850312156145de57600080fd5b6145e7836140df565b9150602083013567ffffffffffffffff81111561460357600080fd5b61460f8582860161446e565b9150509250929050565b60008060008060008060c0878903121561463257600080fd5b863567ffffffffffffffff8082111561464a57600080fd5b6146568a838b0161446e565b975061466460208a01614519565b965061467260408a016140df565b955061468060608a016140df565b9450608089013591508082111561469657600080fd5b61459b8a838b0161446e565b80151581146146b057600080fd5b50565b600080604083850312156146c657600080fd5b6146cf836140df565b915060208301356146df816146a2565b809150509250929050565b6000806000606084860312156146ff57600080fd5b8335925061470f602085016140df565b915061471d604085016140df565b90509250925092565b6000806000806080858703121561473c57600080fd5b8435935061474c602086016140df565b9250604085013561475c816146a2565b9150606085013561476c816146a2565b939692955090935050565b6000806040838503121561478a57600080fd5b8235915060208301356146df816146a2565b60006101008083526147b08184018c6141a4565b63ffffffff8b811660208601528a16604085015273ffffffffffffffffffffffffffffffffffffffff89811660608601528816608085015283810360a085015290506147fc81876141a4565b60ff9590951660c0840152505090151560e0909101529695505050505050565b6000806040838503121561482f57600080fd5b82359150602083013560ff811681146146df57600080fd5b6000806040838503121561485a57600080fd5b614863836140df565b9150614436602084016140df565b60008060008060008060a0878903121561488a57600080fd5b614893876140df565b95506148a1602088016140df565b94506040870135935060608701359250608087013567ffffffffffffffff8111156148cb57600080fd5b6148d789828a01614266565b979a9699509497509295939492505050565b600181811c908216806148fd57607f821691505b602082108103614936577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561497d57600080fd5b611217826140df565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff81036149cb576149cb614986565b60010192915050565b600063ffffffff8083168181036149ed576149ed614986565b6001019392505050565b600081614a0657614a06614986565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a5d57614a5d614986565b5060010190565b600060ff821660ff841680821015614a7e57614a7e614986565b90039392505050565b600060ff821680614a9a57614a9a614986565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b60008151614ad4818560208601614174565b9290920192915050565b60008251614af0818460208701614174565b9190910192915050565b60008060408385031215614b0d57600080fd5b8251614b18816146a2565b60208401519092506146df816146a2565b60008251614b3b818460208701614174565b7f3000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b600082821015614b7c57614b7c614986565b500390565b60008351614b93818460208801614174565b835190830190614ba7818360208801614174565b01949350505050565b6000808454614bbe816148e9565b60018281168015614bd65760018114614c0957614c38565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450614c38565b8860005260208060002060005b85811015614c2f5781548a820152908401908201614c16565b50505082870194505b505050508351614ba7818360208801614174565b600060ff821660ff84168160ff0481118215151615614c6d57614c6d614986565b029392505050565b600060208284031215614c8757600080fd5b8151611217816146a2565b7f7b2263757272656e7420737570706c79223a2022000000000000000000000000815260008751614cca816014850160208c01614174565b7f222c2022737570706c7920636170223a202200000000000000000000000000006014918401918201528751614d07816026840160208c01614174565b7f222c202261646d696e2028696429223a20220000000000000000000000000000602692909101918201528651614d45816038840160208b01614174565b7f222c202261646d696e202870726574747920696429223a202200000000000000603892909101918201528551614d83816051840160208a01614174565b7f222c20226f7261636c652061646472657373223a202200000000000000000000605192909101918201528451614dc1816067840160208901614174565b614e28614dff614df96067848601017f222c2022636f6e646974696f6e732061646472657373223a20220000000000008152601a0190565b87614ac2565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008851614e6e816018850160208d01614174565b7f222c2022646f6d61696e223a20220000000000000000000000000000000000006018918401918201528851614eab816026840160208d01614174565b7f222c20226964223a202200000000000000000000000000000000000000000000602692909101918201528751614ee9816030840160208c01614174565b7f222c2022707265747479206964223a2022000000000000000000000000000000603092909101918201528651614f27816041840160208b01614174565b7f222c2022737461747573223a202200000000000000000000000000000000000060419290910191820152614e28614fcc614fc6614f9d614f97614f6e604f87018c614ac2565b7f222c2022696d616765223a2022000000000000000000000000000000000000008152600d0190565b89614ac2565b7f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b86614ac2565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161502d81601d850160208701614174565b91909101601d0192915050565b6000821982111561504d5761504d614986565b500190565b600063ffffffff821680614a9a57614a9a614986565b600060ff821660ff84168060ff0382111561508557615085614986565b019392505050565b601f8211156150d757600081815260208120601f850160051c810160208610156150b45750805b601f850160051c820191505b818110156150d3578281556001016150c0565b5050505b505050565b815167ffffffffffffffff8111156150f6576150f661443f565b61510a8161510484546148e9565b8461508d565b602080601f83116001811461515d57600084156151275750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556150d3565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156151aa5788860151825594840194600190910190840161518b565b50858210156151e657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b86815260c06020820152600061520f60c08301886141a4565b63ffffffff8716604084015273ffffffffffffffffffffffffffffffffffffffff86811660608501528516608084015282810360a0840152611e6781856141a4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261528f5761528f615251565b500490565b6000826152a3576152a3615251565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152e0576152e0614986565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212200bc025db4f6a2b2dd40f1c72620e2150bb1d3e7427efccaaad018e45a2b7c1a764736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203100000000000000000000000000000000000000000000000000000000000000000000000000000000000b686174732d62657461313a000000000000000000000000000000000000000000", - "nonce": "0x2", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0xcfcb79a018a29c61f695483367fbe7dbf15d851ba14cea0bb5ce6405a6ada924", - "transactionIndex": "0x1", - "blockHash": "0x5ff99d849192fff87915f11d94967db3d7d3ad8c09903e07b32695eb07b10e0e", - "blockNumber": "0x16cca17", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "to": null, - "cumulativeGasUsed": "0x48d39d", - "gasUsed": "0x47a373", - "contractAddress": "0xb7019c3670f5d4dd99166727a7d29f8a16f4f20a", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d05e07" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/100/run-latest.json", - "returns": {}, - "timestamp": 1661561041, - "commit": "f8a22ee" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/100/run-1661561044.json b/broadcast/Hats.s.sol/100/run-1661561044.json deleted file mode 100644 index 03ab03c..0000000 --- a/broadcast/Hats.s.sol/100/run-1661561044.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xcfcb79a018a29c61f695483367fbe7dbf15d851ba14cea0bb5ce6405a6ada924", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0xb7019c3670f5d4dd99166727a7d29f8a16f4f20a", - "function": null, - "arguments": null, - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x5d2148", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b506040516200565738038062005657833981016040819052620000349162000127565b600262000042838262000220565b50600462000051828262000220565b505050620002ec565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b838211156200011d5760008385830101525b9695505050505050565b600080604083850312156200013b57600080fd5b82516001600160401b03808211156200015357600080fd5b620001618683870162000070565b935060208501519150808211156200017857600080fd5b50620001878582860162000070565b9150509250929050565b600181811c90821680620001a657607f821691505b602082108103620001c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021b57600081815260208120601f850160051c81016020861015620001f65750805b601f850160051c820191505b81811015620002175782815560010162000202565b5050505b505050565b81516001600160401b038111156200023c576200023c6200005a565b62000254816200024d845462000191565b84620001cd565b602080601f8311600181146200028c5760008415620002735750858301515b600019600386901b1c1916600185901b17855562000217565b600085815260208120601f198616915b82811015620002bd578886015182559484019460019091019084016200029c565b5085821015620002dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61535b80620002fc6000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c8063a10963561161010f578063d70343d8116100a2578063f242432a11610071578063f242432a146104b8578063fb2aaa4c146104c6578063fc3e05a4146104eb578063fd427358146104fb57600080fd5b8063d70343d814610451578063e33dd5c914610464578063e769138514610477578063e985e9c51461048a57600080fd5b8063afaae55a116100de578063afaae55a146103f1578063b56f756214610404578063c43dc17714610417578063d395acf81461042a57600080fd5b8063a109635614610375578063a22cb4651461039d578063a2be079b146103b0578063a4a1f06c146103de57600080fd5b806354a1826c116101875780637a9df89f116101565780637a9df89f1461032957806382afd23b1461033c578063854cc0491461034f5780639dd22c9f1461036257600080fd5b806354a1826c146102c0578063641f776e146102d35780637178fb51146102e657806374f82e301461032157600080fd5b80632eb2c2d6116101c35780632eb2c2d6146102655780634352409a1461027a57806345fffac81461028d5780634e1273f4146102a057600080fd5b8062fdd58e146101f457806301ffc9a71461021a57806306fdde031461023d5780630e89341c14610252575b600080fd5b610207610202366004614108565b61050e565b6040519081526020015b60405180910390f35b61022d610228366004614132565b61074f565b6040519015158152602001610211565b610245610834565b60405161021191906141ee565b610245610260366004614201565b6108c2565b6102786102733660046142a8565b6108cd565b005b61022d610288366004614108565b6108ff565b61022d61029b366004614201565b610916565b6102b36102ae366004614363565b610945565b60405161021191906143cf565b61022d6102ce366004614108565b610ac1565b61022d6102e1366004614413565b610cae565b61030c6102f4366004614201565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610211565b610245610f97565b610278610337366004614201565b610fa4565b61022d61034a366004614201565b61102b565b61020761035d36600461452d565b61121e565b6102076103703660046145cb565b61131c565b610388610383366004614619565b61139a565b60408051928352602083019190915201610211565b6102786103ab3660046146b3565b6113c4565b61022d6103be366004614413565b600760209081526000928352604080842090915290825290205460ff1681565b6102786103ec3660046146ea565b6113f6565b61022d6103ff366004614726565b61155a565b61022d610412366004614108565b6117be565b61022d610425366004614777565b611839565b61043d610438366004614201565b6118a4565b60405161021198979695949392919061479c565b61022d61045f366004614413565b611afb565b610245610472366004614201565b611e74565b61020761048536600461481c565b612331565b61022d610498366004614847565b600160209081526000928352604080842090915290825290205460ff1681565b610278610273366004614871565b6104d96104d4366004614201565b61237d565b60405160ff9091168152602001610211565b60035461030c9063ffffffff1681565b61022d610509366004614201565b6126dd565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916105da906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610606906148e9565b80156106535780601f1061062857610100808354040283529160200191610653565b820191906000526020600020905b81548152906001019060200180831161063657829003601f168201915b5050505050815260200160038201805461066c906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610698906148e9565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050815250509050600091506106fe8184612a36565b80156107105750610710848285612b77565b156107485773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806107e257507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061082e57507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60028054610841906148e9565b80601f016020809104026020016040519081016040528092919081815260200182805461086d906148e9565b80156108ba5780601f1061088f576101008083540402835291602001916108ba565b820191906000526020600020905b81548152906001019060200180831161089d57829003601f168201915b505050505081565b606061082e82612cff565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600161090d848461050e565b10159392505050565b6000808211801561082e5750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b60608382146109b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff8111156109ce576109ce61443f565b6040519080825280602002602001820160405280156109f7578160200160208202803683370190505b50905060005b84811015610ab857600080878784818110610a1a57610a1a61493c565b9050602002016020810190610a2f919061496b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610a7d57610a7d61493c565b90506020020135815260200190815260200160002054828281518110610aa557610aa561493c565b60209081029190910101526001016109fd565b50949350505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610b8d906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb9906148e9565b8015610c065780601f10610bdb57610100808354040283529160200191610c06565b820191906000526020600020905b815481529060010190602001808311610be957829003601f168201915b50505050508152602001600382018054610c1f906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4b906148e9565b8015610c985780601f10610c6d57610100808354040283529160200191610c98565b820191906000526020600020905b815481529060010190602001808311610c7b57829003601f168201915b5050505050815250509050610745848285612b77565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610d7a906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610da6906148e9565b8015610df35780601f10610dc857610100808354040283529160200191610df3565b820191906000526020600020905b815481529060010190602001808311610dd657829003601f168201915b50505050508152602001600382018054610e0c906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054610e38906148e9565b8015610e855780601f10610e5a57610100808354040283529160200191610e85565b820191906000526020600020905b815481529060010190602001808311610e6857829003601f168201915b5050505050815250509050610e9a33856117be565b610ed9576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018590526044016109ac565b6020808201516000868152600690925260409091205463ffffffff918216911610610f30576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3a83856108ff565b15610f71576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f8d83856001604051806020016040528060008152506130c0565b5060019392505050565b60048054610841906148e9565b610fae33826108ff565b610fe4576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff0338260016131c3565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916110f7906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611123906148e9565b80156111705780601f1061114557610100808354040283529160200191611170565b820191906000526020600020905b81548152906001019060200180831161115357829003601f168201915b50505050508152602001600382018054611189906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546111b5906148e9565b80156112025780601f106111d757610100808354040283529160200191611202565b820191906000526020600020905b8154815290600101906020018083116111e557829003601f168201915b50505050508152505090506112178184612a36565b9392505050565b600061122a33886108ff565b611269576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018890526044016109ac565b60ff8716156112a4576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ad876132d3565b90506112bd8187878787876137a6565b50600087815260056020526040902080546019906112fa90790100000000000000000000000000000000000000000000000000900460ff166149b5565b91906101000a81548160ff021916908360ff1602179055509695505050505050565b6003805460009160e09183906113379063ffffffff166149d4565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b905061137d81604051806020016040528060008152506001600080876137a6565b5061082e83826001604051806020016040528060008152506130c0565b6000806113a7338561131c565b91506113b782898989898861121e565b9050965096945050505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61140033846117be565b611436576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826001611443848361050e565b101561147b576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320848452909152812080549091906114b7906149f7565b9091555073ffffffffffffffffffffffffffffffffffffffff8216600090815260208181526040808320848452909152812080549091906114f790614a2c565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611626906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611652906148e9565b801561169f5780601f106116745761010080835404028352916020019161169f565b820191906000526020600020905b81548152906001019060200180831161168257829003601f168201915b505050505081526020016003820180546116b8906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546116e4906148e9565b80156117315780601f1061170657610100808354040283529160200191611731565b820191906000526020600020905b81548152906001019060200180831161171457829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117a5576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117b186868686613a0f565b5060019695505050505050565b60006117c982610916565b156117d65750600061082e565b600060016117e38461237d565b6117ed9190614a64565b90505b60018160ff161061182a57611809846102888584612331565b1561181857600191505061082e565b8061182281614a87565b9150506117f0565b61074584610288856000612331565b6000828152600560205260408120600181015473ffffffffffffffffffffffffffffffffffffffff16331461189a576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458484613b22565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949384938493849388938593849384939192909160a0840191611986906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546119b2906148e9565b80156119ff5780601f106119d4576101008083540402835291602001916119ff565b820191906000526020600020905b8154815290600101906020018083116119e257829003601f168201915b50505050508152602001600382018054611a18906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611a44906148e9565b8015611a915780601f10611a6657610100808354040283529160200191611a91565b820191906000526020600020905b815481529060010190602001808311611a7457829003601f168201915b5050509190925250505060a081015160208083015160008e8152600690925260409091205483516080850151939d50919b5063ffffffff169950975095509050611ada8a611e74565b935080606001519250611aed818b612a36565b915050919395975091939597565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611bc7906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf3906148e9565b8015611c405780601f10611c1557610100808354040283529160200191611c40565b820191906000526020600020905b815481529060010190602001808311611c2357829003601f168201915b50505050508152602001600382018054611c59906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611c85906148e9565b8015611cd25780601f10611ca757610100808354040283529160200191611cd2565b820191906000526020600020905b815481529060010190602001808311611cb557829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611db3908590614ade565b600060405180830381855afa9150503d8060008114611dee576040519150601f19603f3d011682016040523d82523d6000602084013e611df3565b606091505b5091509150818015611e06575060008151115b15611e295780806020019051810190611e1f9190614afa565b9095509350611e5b565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e6789898787613a0f565b9998505050505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190611f45906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054611f71906148e9565b8015611fbe5780601f10611f9357610100808354040283529160200191611fbe565b820191906000526020600020905b815481529060010190602001808311611fa157829003601f168201915b50505050508152602001600382018054611fd7906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612003906148e9565b80156120505780601f1061202557610100808354040283529160200191612050565b820191906000526020600020905b81548152906001019060200180831161203357829003601f168201915b5050509190925250505060c081015180519192509015612093578060405160200161207b9190614b29565b60405160208183030381529060405292505050919050565b600061209e8561237d565b60ff169050805b80156122fb5760006120bc87610485600185614b6a565b600081815260056020908152604091829020825160e081018452815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169483019490945260ff78010000000000000000000000000000000000000000000000008204811615159583019590955279010000000000000000000000000000000000000000000000000090049093166060840152600181015490911660808301526002810180549394509192909160a084019161218d906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546121b9906148e9565b80156122065780601f106121db57610100808354040283529160200191612206565b820191906000526020600020905b8154815290600101906020018083116121e957829003601f168201915b5050505050815260200160038201805461221f906148e9565b80601f016020809104026020016040519081016040528092919081815260200182805461224b906148e9565b80156122985780601f1061226d57610100808354040283529160200191612298565b820191906000526020600020905b81548152906001019060200180831161227b57829003601f168201915b50505050508152505094508460c0015193506000845111156122ea57836122be88613be9565b6040516020016122cf929190614b81565b60405160208183030381529060405295505050505050919050565b506122f4816149f7565b90506120a5565b50600461230786613be9565b604051602001612318929190614bb0565b6040516020818303038152906040529350505050919050565b60008061233f83601c614a64565b61234a906008614c4c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b600060ff8216156123905750601c919050565b61ffff8216156123a25750601b919050565b62ffffff8216156123b55750601a919050565b63ffffffff8216156123c957506019919050565b64ffffffffff8216156123de57506018919050565b65ffffffffffff8216156123f457506017919050565b66ffffffffffffff82161561240b57506016919050565b67ffffffffffffffff82161561242357506015919050565b68ffffffffffffffffff82161561243c57506014919050565b69ffffffffffffffffffff82161561245657506013919050565b6affffffffffffffffffffff82161561247157506012919050565b6bffffffffffffffffffffffff82161561248d57506011919050565b6cffffffffffffffffffffffffff8216156124aa57506010919050565b6dffffffffffffffffffffffffffff8216156124c85750600f919050565b6effffffffffffffffffffffffffffff8216156124e75750600e919050565b6fffffffffffffffffffffffffffffffff8216156125075750600d919050565b70ffffffffffffffffffffffffffffffffff8216156125285750600c919050565b71ffffffffffffffffffffffffffffffffffff82161561254a5750600b919050565b72ffffffffffffffffffffffffffffffffffffff82161561256d5750600a919050565b73ffffffffffffffffffffffffffffffffffffffff82161561259157506009919050565b74ffffffffffffffffffffffffffffffffffffffffff8216156125b657506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff8216156125dc57506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff82161561260357506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff82161561262b57506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff82161561265457506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff82161561267e57506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff8216156126a957506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216156126d557506001919050565b506000919050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916127a9906148e9565b80601f01602080910402602001604051908101604052809291908181526020018280546127d5906148e9565b80156128225780601f106127f757610100808354040283529160200191612822565b820191906000526020600020905b81548152906001019060200180831161280557829003601f168201915b5050505050815260200160038201805461283b906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612867906148e9565b80156128b45780601f10612889576101008083540402835291602001916128b4565b820191906000526020600020905b81548152906001019060200180831161289757829003601f168201915b5050505050815250509050600080846040516024016128d591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061297c908590614ade565b600060405180830381855afa9150503d80600081146129b7576040519150601f19603f3d011682016040523d82523d6000602084013e6129bc565b606091505b50915091508180156129cf575060008151115b156129ef57808060200190518101906129e89190614c75565b9350612a21565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a2b8785613b22565b979650505050505050565b60008082604051602401612a4c91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690612af3908590614ade565b600060405180830381855afa9150503d8060008114612b2e576040519150601f19603f3d011682016040523d82523d6000602084013e612b33565b606091505b5091509150818015612b46575060008151115b15612b665780806020019051810190612b5f9190614c75565b9350612b6e565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690612c49908590614ade565b600060405180830381855afa9150503d8060008114612c84576040519150601f19603f3d011682016040523d82523d6000602084013e612c89565b606091505b5091509150818015612c9c575060008151115b15612cbe5780806020019051810190612cb59190614afa565b9450612cf59050565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190612dd0906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612dfc906148e9565b8015612e495780601f10612e1e57610100808354040283529160200191612e49565b820191906000526020600020905b815481529060010190602001808311612e2c57829003601f168201915b50505050508152602001600382018054612e62906148e9565b80601f0160208091040260200160405190810160405280929190818152602001828054612e8e906148e9565b8015612edb5780601f10612eb057610100808354040283529160200191612edb565b820191906000526020600020905b815481529060010190602001808311612ebe57829003601f168201915b50505050508152505090506000612ef184610916565b15612efd575082612f19565b612f16846001612f0c8761237d565b6104859190614a64565b90505b6000612f3260e0612f2b876000612331565b901c613be9565b60008681526006602052604081205491925090612f549063ffffffff16613be9565b612f67856020015163ffffffff16613be9565b612f7085613be9565b612f7b866020613d26565b8751612f8690613f69565b612f938960800151613f69565b604051602001612fa896959493929190614c92565b60405160208183030381529060405290506000612fc58588612a36565b613004576040518060400160405280600881526020017f696e61637469766500000000000000000000000000000000000000000000000081525061303b565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006130918660a00151856130518b613be9565b61305c8c6020613d26565b866130668e611e74565b8960405160200161307d9796959493929190614e36565b604051602081830303815290604052613f8c565b9050806040516020016130a49190614ff5565b6040516020818303038152906040529650505050505050919050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906130fe90849061503a565b9091555050600083815260066020526040812080549091906131259063ffffffff166149d4565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62868660405161154c929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290613201908490614b6a565b9091555050600082815260066020526040812080549091906132289063ffffffff16615052565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516132c6929190918252602082015260400190565b60405180910390a4505050565b600081815260056020526040812054819061330f90790100000000000000000000000000000000000000000000000000900460ff166001615068565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166000036133495760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff166000036133805760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff166000036133b65760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff166000036133eb5760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff1660000361341f5760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff166000036134525760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff166000036134845760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff166000036134b55760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff166000036134e55760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff166000036135145760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff166000036135425760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff1660000361356f5760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff1660000361359b5760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff166000036135c65760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff166000036135f05760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff166000036136195760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff166000036136415760588160ff16901b8317915050919050565b826affffffffffffffffffffff166000036136685760508160ff16901b8317915050919050565b8269ffffffffffffffffffff1660000361368e5760488160ff16901b8317915050919050565b8268ffffffffffffffffff166000036136b35760408160ff16901b8317915050919050565b8267ffffffffffffffff166000036136d75760388160ff16901b8317915050919050565b8266ffffffffffffff166000036136fa5760308160ff16901b8317915050919050565b8265ffffffffffff1660000361371c5760288160ff16901b8317915050919050565b8264ffffffffff1660000361373d5760208160ff16901b8317915050919050565b8263ffffffff1660000361375d5760188160ff16901b8317915050919050565b8262ffffff1660000361377c5760108160ff16901b8317915050919050565b8261ffff1660000361379a5760088160ff16901b8317915050919050565b60ff1691909117919050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c0810191909152858160a0018190525084816020019063ffffffff16908163ffffffff168152505083816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160c001819052506001816040019015159081151581525050806005600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548160ff02191690831515021790555060608201518160000160196101000a81548160ff021916908360ff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160020190816139ab91906150dc565b5060c082015160038201906139c090826150dc565b509050507fec3ffd1c8b2d500049d00ade82ead8a9f4aeeeab4b37fb8913380cce862a99ed8787878787876040516139fd969594939291906151f6565b60405180910390a19695505050505050565b60008215613a2357613a23848660016131c3565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503613abc5750600084815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260056020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146107485780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b606081600003613c2c57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115613c565780613c4081614a2c565b9150613c4f9050600a83615280565b9150613c30565b60008167ffffffffffffffff811115613c7157613c7161443f565b6040519080825280601f01601f191660200182016040528015613c9b576020820181803683370190505b5090505b8415613d1e57613cb0600183614b6a565b9150613cbd600a86615294565b613cc890603061503a565b60f81b818381518110613cdd57613cdd61493c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350613d17600a86615280565b9450613c9f565b949350505050565b60606000613d358360026152a8565b613d4090600261503a565b67ffffffffffffffff811115613d5857613d5861443f565b6040519080825280601f01601f191660200182016040528015613d82576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613db957613db961493c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613e1c57613e1c61493c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613e588460026152a8565b613e6390600161503a565b90505b6001811115613f00577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613ea457613ea461493c565b1a60f81b828281518110613eba57613eba61493c565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613ef9816149f7565b9050613e66565b508315611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ac565b606061082e73ffffffffffffffffffffffffffffffffffffffff83166014613d26565b60608151600003613fab57505060408051602081019091526000815290565b60006040518060600160405280604081526020016152e66040913990506000600384516002613fda919061503a565b613fe49190615280565b613fef9060046152a8565b67ffffffffffffffff8111156140075761400761443f565b6040519080825280601f01601f191660200182016040528015614031576020820181803683370190505b509050600182016020820185865187015b8082101561409d576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250614042565b50506003865106600181146140b957600281146140cc576140d4565b603d6001830353603d60028303536140d4565b603d60018303535b509195945050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461410357600080fd5b919050565b6000806040838503121561411b57600080fd5b614124836140df565b946020939093013593505050565b60006020828403121561414457600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461121757600080fd5b60005b8381101561418f578181015183820152602001614177565b8381111561419e576000848401525b50505050565b600081518084526141bc816020860160208601614174565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061121760208301846141a4565b60006020828403121561421357600080fd5b5035919050565b60008083601f84011261422c57600080fd5b50813567ffffffffffffffff81111561424457600080fd5b6020830191508360208260051b850101111561425f57600080fd5b9250929050565b60008083601f84011261427857600080fd5b50813567ffffffffffffffff81111561429057600080fd5b60208301915083602082850101111561425f57600080fd5b60008060008060008060008060a0898b0312156142c457600080fd5b6142cd896140df565b97506142db60208a016140df565b9650604089013567ffffffffffffffff808211156142f857600080fd5b6143048c838d0161421a565b909850965060608b013591508082111561431d57600080fd5b6143298c838d0161421a565b909650945060808b013591508082111561434257600080fd5b5061434f8b828c01614266565b999c989b5096995094979396929594505050565b6000806000806040858703121561437957600080fd5b843567ffffffffffffffff8082111561439157600080fd5b61439d8883890161421a565b909650945060208701359150808211156143b657600080fd5b506143c38782880161421a565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015614407578351835292840192918401916001016143eb565b50909695505050505050565b6000806040838503121561442657600080fd5b82359150614436602084016140df565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261447f57600080fd5b813567ffffffffffffffff8082111561449a5761449a61443f565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156144e0576144e061443f565b816040528381528660208588010111156144f957600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff8116811461410357600080fd5b60008060008060008060c0878903121561454657600080fd5b86359550602087013567ffffffffffffffff8082111561456557600080fd5b6145718a838b0161446e565b965061457f60408a01614519565b955061458d60608a016140df565b945061459b60808a016140df565b935060a08901359150808211156145b157600080fd5b506145be89828a0161446e565b9150509295509295509295565b600080604083850312156145de57600080fd5b6145e7836140df565b9150602083013567ffffffffffffffff81111561460357600080fd5b61460f8582860161446e565b9150509250929050565b60008060008060008060c0878903121561463257600080fd5b863567ffffffffffffffff8082111561464a57600080fd5b6146568a838b0161446e565b975061466460208a01614519565b965061467260408a016140df565b955061468060608a016140df565b9450608089013591508082111561469657600080fd5b61459b8a838b0161446e565b80151581146146b057600080fd5b50565b600080604083850312156146c657600080fd5b6146cf836140df565b915060208301356146df816146a2565b809150509250929050565b6000806000606084860312156146ff57600080fd5b8335925061470f602085016140df565b915061471d604085016140df565b90509250925092565b6000806000806080858703121561473c57600080fd5b8435935061474c602086016140df565b9250604085013561475c816146a2565b9150606085013561476c816146a2565b939692955090935050565b6000806040838503121561478a57600080fd5b8235915060208301356146df816146a2565b60006101008083526147b08184018c6141a4565b63ffffffff8b811660208601528a16604085015273ffffffffffffffffffffffffffffffffffffffff89811660608601528816608085015283810360a085015290506147fc81876141a4565b60ff9590951660c0840152505090151560e0909101529695505050505050565b6000806040838503121561482f57600080fd5b82359150602083013560ff811681146146df57600080fd5b6000806040838503121561485a57600080fd5b614863836140df565b9150614436602084016140df565b60008060008060008060a0878903121561488a57600080fd5b614893876140df565b95506148a1602088016140df565b94506040870135935060608701359250608087013567ffffffffffffffff8111156148cb57600080fd5b6148d789828a01614266565b979a9699509497509295939492505050565b600181811c908216806148fd57607f821691505b602082108103614936577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561497d57600080fd5b611217826140df565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff81036149cb576149cb614986565b60010192915050565b600063ffffffff8083168181036149ed576149ed614986565b6001019392505050565b600081614a0657614a06614986565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a5d57614a5d614986565b5060010190565b600060ff821660ff841680821015614a7e57614a7e614986565b90039392505050565b600060ff821680614a9a57614a9a614986565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b60008151614ad4818560208601614174565b9290920192915050565b60008251614af0818460208701614174565b9190910192915050565b60008060408385031215614b0d57600080fd5b8251614b18816146a2565b60208401519092506146df816146a2565b60008251614b3b818460208701614174565b7f3000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b600082821015614b7c57614b7c614986565b500390565b60008351614b93818460208801614174565b835190830190614ba7818360208801614174565b01949350505050565b6000808454614bbe816148e9565b60018281168015614bd65760018114614c0957614c38565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450614c38565b8860005260208060002060005b85811015614c2f5781548a820152908401908201614c16565b50505082870194505b505050508351614ba7818360208801614174565b600060ff821660ff84168160ff0481118215151615614c6d57614c6d614986565b029392505050565b600060208284031215614c8757600080fd5b8151611217816146a2565b7f7b2263757272656e7420737570706c79223a2022000000000000000000000000815260008751614cca816014850160208c01614174565b7f222c2022737570706c7920636170223a202200000000000000000000000000006014918401918201528751614d07816026840160208c01614174565b7f222c202261646d696e2028696429223a20220000000000000000000000000000602692909101918201528651614d45816038840160208b01614174565b7f222c202261646d696e202870726574747920696429223a202200000000000000603892909101918201528551614d83816051840160208a01614174565b7f222c20226f7261636c652061646472657373223a202200000000000000000000605192909101918201528451614dc1816067840160208901614174565b614e28614dff614df96067848601017f222c2022636f6e646974696f6e732061646472657373223a20220000000000008152601a0190565b87614ac2565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008851614e6e816018850160208d01614174565b7f222c2022646f6d61696e223a20220000000000000000000000000000000000006018918401918201528851614eab816026840160208d01614174565b7f222c20226964223a202200000000000000000000000000000000000000000000602692909101918201528751614ee9816030840160208c01614174565b7f222c2022707265747479206964223a2022000000000000000000000000000000603092909101918201528651614f27816041840160208b01614174565b7f222c2022737461747573223a202200000000000000000000000000000000000060419290910191820152614e28614fcc614fc6614f9d614f97614f6e604f87018c614ac2565b7f222c2022696d616765223a2022000000000000000000000000000000000000008152600d0190565b89614ac2565b7f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b86614ac2565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161502d81601d850160208701614174565b91909101601d0192915050565b6000821982111561504d5761504d614986565b500190565b600063ffffffff821680614a9a57614a9a614986565b600060ff821660ff84168060ff0382111561508557615085614986565b019392505050565b601f8211156150d757600081815260208120601f850160051c810160208610156150b45750805b601f850160051c820191505b818110156150d3578281556001016150c0565b5050505b505050565b815167ffffffffffffffff8111156150f6576150f661443f565b61510a8161510484546148e9565b8461508d565b602080601f83116001811461515d57600084156151275750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556150d3565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156151aa5788860151825594840194600190910190840161518b565b50858210156151e657878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b86815260c06020820152600061520f60c08301886141a4565b63ffffffff8716604084015273ffffffffffffffffffffffffffffffffffffffff86811660608501528516608084015282810360a0840152611e6781856141a4565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261528f5761528f615251565b500490565b6000826152a3576152a3615251565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152e0576152e0614986565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212200bc025db4f6a2b2dd40f1c72620e2150bb1d3e7427efccaaad018e45a2b7c1a764736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203100000000000000000000000000000000000000000000000000000000000000000000000000000000000b686174732d62657461313a000000000000000000000000000000000000000000", - "nonce": "0x2", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0xcfcb79a018a29c61f695483367fbe7dbf15d851ba14cea0bb5ce6405a6ada924", - "transactionIndex": "0x1", - "blockHash": "0x5ff99d849192fff87915f11d94967db3d7d3ad8c09903e07b32695eb07b10e0e", - "blockNumber": "0x16cca17", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "to": null, - "cumulativeGasUsed": "0x48d39d", - "gasUsed": "0x47a373", - "contractAddress": "0xb7019c3670f5d4dd99166727a7d29f8a16f4f20a", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d05e07" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/100/run-latest.json", - "returns": {}, - "timestamp": 1661561044, - "commit": "f8a22ee" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/100/run-1661982941.json b/broadcast/Hats.s.sol/100/run-1661982941.json deleted file mode 100644 index e685ed9..0000000 --- a/broadcast/Hats.s.sol/100/run-1661982941.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x935bd152af344ee5836e7c3b2f6e2cfbc5c6b0997f23ee2e99c3459e3ab47b6e", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0x245e5b56c18b18ac2d72f94c5f7be1d52497a8ad", - "function": null, - "arguments": null, - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x5d27ba", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b506040516200565d3803806200565d833981016040819052620000349162000127565b600262000042838262000220565b50600462000051828262000220565b505050620002ec565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b838211156200011d5760008385830101525b9695505050505050565b600080604083850312156200013b57600080fd5b82516001600160401b03808211156200015357600080fd5b620001618683870162000070565b935060208501519150808211156200017857600080fd5b50620001878582860162000070565b9150509250929050565b600181811c90821680620001a657607f821691505b602082108103620001c757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021b57600081815260208120601f850160051c81016020861015620001f65750805b601f850160051c820191505b81811015620002175782815560010162000202565b5050505b505050565b81516001600160401b038111156200023c576200023c6200005a565b62000254816200024d845462000191565b84620001cd565b602080601f8311600181146200028c5760008415620002735750858301515b600019600386901b1c1916600185901b17855562000217565b600085815260208120601f198616915b82811015620002bd578886015182559484019460019091019084016200029c565b5085821015620002dc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61536180620002fc6000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c8063a10963561161010f578063d70343d8116100a2578063f242432a11610071578063f242432a146104b8578063fb2aaa4c146104c6578063fc3e05a4146104eb578063fd427358146104fb57600080fd5b8063d70343d814610451578063e33dd5c914610464578063e769138514610477578063e985e9c51461048a57600080fd5b8063afaae55a116100de578063afaae55a146103f1578063b56f756214610404578063c43dc17714610417578063d395acf81461042a57600080fd5b8063a109635614610375578063a22cb4651461039d578063a2be079b146103b0578063a4a1f06c146103de57600080fd5b806354a1826c116101875780637a9df89f116101565780637a9df89f1461032957806382afd23b1461033c578063854cc0491461034f5780639dd22c9f1461036257600080fd5b806354a1826c146102c0578063641f776e146102d35780637178fb51146102e657806374f82e301461032157600080fd5b80632eb2c2d6116101c35780632eb2c2d6146102655780634352409a1461027a57806345fffac81461028d5780634e1273f4146102a057600080fd5b8062fdd58e146101f457806301ffc9a71461021a57806306fdde031461023d5780630e89341c14610252575b600080fd5b61020761020236600461410e565b61050e565b6040519081526020015b60405180910390f35b61022d610228366004614138565b61074f565b6040519015158152602001610211565b610245610834565b60405161021191906141f4565b610245610260366004614207565b6108c2565b6102786102733660046142ae565b6108cd565b005b61022d61028836600461410e565b6108ff565b61022d61029b366004614207565b610916565b6102b36102ae366004614369565b610945565b60405161021191906143d5565b61022d6102ce36600461410e565b610ac1565b61022d6102e1366004614419565b610cae565b61030c6102f4366004614207565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610211565b610245610f97565b610278610337366004614207565b610fa4565b61022d61034a366004614207565b61102b565b61020761035d366004614533565b61121e565b6102076103703660046145d1565b61131c565b61038861038336600461461f565b61139a565b60408051928352602083019190915201610211565b6102786103ab3660046146b9565b6113c4565b61022d6103be366004614419565b600760209081526000928352604080842090915290825290205460ff1681565b6102786103ec3660046146f0565b6113f6565b61022d6103ff36600461472c565b611558565b61022d61041236600461410e565b6117bc565b61022d61042536600461477d565b61183e565b61043d610438366004614207565b6118a9565b6040516102119897969594939291906147a2565b61022d61045f366004614419565b611b00565b610245610472366004614207565b611e79565b610207610485366004614822565b612336565b61022d61049836600461484d565b600160209081526000928352604080842090915290825290205460ff1681565b610278610273366004614877565b6104d96104d4366004614207565b612382565b60405160ff9091168152602001610211565b60035461030c9063ffffffff1681565b61022d610509366004614207565b6126e2565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916105da906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610606906148ef565b80156106535780601f1061062857610100808354040283529160200191610653565b820191906000526020600020905b81548152906001019060200180831161063657829003601f168201915b5050505050815260200160038201805461066c906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610698906148ef565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050815250509050600091506106fe8184612a3b565b80156107105750610710848285612b7c565b156107485773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806107e257507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061082e57507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60028054610841906148ef565b80601f016020809104026020016040519081016040528092919081815260200182805461086d906148ef565b80156108ba5780601f1061088f576101008083540402835291602001916108ba565b820191906000526020600020905b81548152906001019060200180831161089d57829003601f168201915b505050505081565b606061082e82612d04565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600161090d848461050e565b10159392505050565b6000808211801561082e5750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b60608382146109b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff8111156109ce576109ce614445565b6040519080825280602002602001820160405280156109f7578160200160208202803683370190505b50905060005b84811015610ab857600080878784818110610a1a57610a1a614942565b9050602002016020810190610a2f9190614971565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610a7d57610a7d614942565b90506020020135815260200190815260200160002054828281518110610aa557610aa5614942565b60209081029190910101526001016109fd565b50949350505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610b8d906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb9906148ef565b8015610c065780601f10610bdb57610100808354040283529160200191610c06565b820191906000526020600020905b815481529060010190602001808311610be957829003601f168201915b50505050508152602001600382018054610c1f906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4b906148ef565b8015610c985780601f10610c6d57610100808354040283529160200191610c98565b820191906000526020600020905b815481529060010190602001808311610c7b57829003601f168201915b5050505050815250509050610745848285612b7c565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610d7a906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610da6906148ef565b8015610df35780601f10610dc857610100808354040283529160200191610df3565b820191906000526020600020905b815481529060010190602001808311610dd657829003601f168201915b50505050508152602001600382018054610e0c906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054610e38906148ef565b8015610e855780601f10610e5a57610100808354040283529160200191610e85565b820191906000526020600020905b815481529060010190602001808311610e6857829003601f168201915b5050505050815250509050610e9a33856117bc565b610ed9576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018590526044016109ac565b6020808201516000868152600690925260409091205463ffffffff918216911610610f30576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3a83856108ff565b15610f71576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f8d83856001604051806020016040528060008152506130c5565b5060019392505050565b60048054610841906148ef565b610fae33826108ff565b610fe4576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff0338260016131d6565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916110f7906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054611123906148ef565b80156111705780601f1061114557610100808354040283529160200191611170565b820191906000526020600020905b81548152906001019060200180831161115357829003601f168201915b50505050508152602001600382018054611189906148ef565b80601f01602080910402602001604051908101604052809291908181526020018280546111b5906148ef565b80156112025780601f106111d757610100808354040283529160200191611202565b820191906000526020600020905b8154815290600101906020018083116111e557829003601f168201915b50505050508152505090506112178184612a3b565b9392505050565b600061122a33886108ff565b611269576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018890526044016109ac565b60ff8716156112a4576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112ad876132d9565b90506112bd8187878787876137ac565b50600087815260056020526040902080546019906112fa90790100000000000000000000000000000000000000000000000000900460ff166149bb565b91906101000a81548160ff021916908360ff1602179055509695505050505050565b6003805460009160e09183906113379063ffffffff166149da565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b905061137d81604051806020016040528060008152506001600080876137ac565b5061082e83826001604051806020016040528060008152506130c5565b6000806113a7338561131c565b91506113b782898989898861121e565b9050965096945050505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61140033846117bc565b611436576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001611442838561050e565b101561147a576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216600090815260208181526040808320868452909152812080549091906114b6906149fd565b9091555073ffffffffffffffffffffffffffffffffffffffff8116600090815260208181526040808320868452909152812080549091906114f690614a32565b90915550604080518481526001602082015273ffffffffffffffffffffffffffffffffffffffff808416929085169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a4505050565b6000848152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611624906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054611650906148ef565b801561169d5780601f106116725761010080835404028352916020019161169d565b820191906000526020600020905b81548152906001019060200180831161168057829003601f168201915b505050505081526020016003820180546116b6906148ef565b80601f01602080910402602001604051908101604052809291908181526020018280546116e2906148ef565b801561172f5780601f106117045761010080835404028352916020019161172f565b820191906000526020600020905b81548152906001019060200180831161171257829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117a3576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117af86868686613a15565b5060019695505050505050565b60006117c782610916565b156117dd576117d683836108ff565b905061082e565b600060016117ea84612382565b6117f49190614a6a565b90505b60ff81161561182f5761180e846102888584612336565b1561181d57600191505061082e565b8061182781614a8d565b9150506117f7565b61074584610288856000612336565b6000828152600560205260408120600181015473ffffffffffffffffffffffffffffffffffffffff16331461189f576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107458484613b28565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949384938493849388938593849384939192909160a084019161198b906148ef565b80601f01602080910402602001604051908101604052809291908181526020018280546119b7906148ef565b8015611a045780601f106119d957610100808354040283529160200191611a04565b820191906000526020600020905b8154815290600101906020018083116119e757829003601f168201915b50505050508152602001600382018054611a1d906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054611a49906148ef565b8015611a965780601f10611a6b57610100808354040283529160200191611a96565b820191906000526020600020905b815481529060010190602001808311611a7957829003601f168201915b5050509190925250505060a081015160208083015160008e8152600690925260409091205483516080850151939d50919b5063ffffffff169950975095509050611adf8a611e79565b935080606001519250611af2818b612a3b565b915050919395975091939597565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611bcc906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054611bf8906148ef565b8015611c455780601f10611c1a57610100808354040283529160200191611c45565b820191906000526020600020905b815481529060010190602001808311611c2857829003601f168201915b50505050508152602001600382018054611c5e906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054611c8a906148ef565b8015611cd75780601f10611cac57610100808354040283529160200191611cd7565b820191906000526020600020905b815481529060010190602001808311611cba57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611db8908590614ae4565b600060405180830381855afa9150503d8060008114611df3576040519150601f19603f3d011682016040523d82523d6000602084013e611df8565b606091505b5091509150818015611e0b575060008151115b15611e2e5780806020019051810190611e249190614b00565b9095509350611e60565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e6c89898787613a15565b9998505050505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190611f4a906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054611f76906148ef565b8015611fc35780601f10611f9857610100808354040283529160200191611fc3565b820191906000526020600020905b815481529060010190602001808311611fa657829003601f168201915b50505050508152602001600382018054611fdc906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054612008906148ef565b80156120555780601f1061202a57610100808354040283529160200191612055565b820191906000526020600020905b81548152906001019060200180831161203857829003601f168201915b5050509190925250505060c08101518051919250901561209857806040516020016120809190614b2f565b60405160208183030381529060405292505050919050565b60006120a385612382565b60ff169050805b80156123005760006120c187610485600185614b70565b600081815260056020908152604091829020825160e081018452815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169483019490945260ff78010000000000000000000000000000000000000000000000008204811615159583019590955279010000000000000000000000000000000000000000000000000090049093166060840152600181015490911660808301526002810180549394509192909160a0840191612192906148ef565b80601f01602080910402602001604051908101604052809291908181526020018280546121be906148ef565b801561220b5780601f106121e05761010080835404028352916020019161220b565b820191906000526020600020905b8154815290600101906020018083116121ee57829003601f168201915b50505050508152602001600382018054612224906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054612250906148ef565b801561229d5780601f106122725761010080835404028352916020019161229d565b820191906000526020600020905b81548152906001019060200180831161228057829003601f168201915b50505050508152505094508460c0015193506000845111156122ef57836122c388613bef565b6040516020016122d4929190614b87565b60405160208183030381529060405295505050505050919050565b506122f9816149fd565b90506120aa565b50600461230c86613bef565b60405160200161231d929190614bb6565b6040516020818303038152906040529350505050919050565b60008061234483601c614a6a565b61234f906008614c52565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b600060ff8216156123955750601c919050565b61ffff8216156123a75750601b919050565b62ffffff8216156123ba5750601a919050565b63ffffffff8216156123ce57506019919050565b64ffffffffff8216156123e357506018919050565b65ffffffffffff8216156123f957506017919050565b66ffffffffffffff82161561241057506016919050565b67ffffffffffffffff82161561242857506015919050565b68ffffffffffffffffff82161561244157506014919050565b69ffffffffffffffffffff82161561245b57506013919050565b6affffffffffffffffffffff82161561247657506012919050565b6bffffffffffffffffffffffff82161561249257506011919050565b6cffffffffffffffffffffffffff8216156124af57506010919050565b6dffffffffffffffffffffffffffff8216156124cd5750600f919050565b6effffffffffffffffffffffffffffff8216156124ec5750600e919050565b6fffffffffffffffffffffffffffffffff82161561250c5750600d919050565b70ffffffffffffffffffffffffffffffffff82161561252d5750600c919050565b71ffffffffffffffffffffffffffffffffffff82161561254f5750600b919050565b72ffffffffffffffffffffffffffffffffffffff8216156125725750600a919050565b73ffffffffffffffffffffffffffffffffffffffff82161561259657506009919050565b74ffffffffffffffffffffffffffffffffffffffffff8216156125bb57506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff8216156125e157506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff82161561260857506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff82161561263057506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff82161561265957506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff82161561268357506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff8216156126ae57506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8216156126da57506001919050565b506000919050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916127ae906148ef565b80601f01602080910402602001604051908101604052809291908181526020018280546127da906148ef565b80156128275780601f106127fc57610100808354040283529160200191612827565b820191906000526020600020905b81548152906001019060200180831161280a57829003601f168201915b50505050508152602001600382018054612840906148ef565b80601f016020809104026020016040519081016040528092919081815260200182805461286c906148ef565b80156128b95780601f1061288e576101008083540402835291602001916128b9565b820191906000526020600020905b81548152906001019060200180831161289c57829003601f168201915b5050505050815250509050600080846040516024016128da91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690612981908590614ae4565b600060405180830381855afa9150503d80600081146129bc576040519150601f19603f3d011682016040523d82523d6000602084013e6129c1565b606091505b50915091508180156129d4575060008151115b156129f457808060200190518101906129ed9190614c7b565b9350612a26565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a308785613b28565b979650505050505050565b60008082604051602401612a5191815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690612af8908590614ae4565b600060405180830381855afa9150503d8060008114612b33576040519150601f19603f3d011682016040523d82523d6000602084013e612b38565b606091505b5091509150818015612b4b575060008151115b15612b6b5780806020019051810190612b649190614c7b565b9350612b73565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690612c4e908590614ae4565b600060405180830381855afa9150503d8060008114612c89576040519150601f19603f3d011682016040523d82523d6000602084013e612c8e565b606091505b5091509150818015612ca1575060008151115b15612cc35780806020019051810190612cba9190614b00565b9450612cfa9050565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190612dd5906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054612e01906148ef565b8015612e4e5780601f10612e2357610100808354040283529160200191612e4e565b820191906000526020600020905b815481529060010190602001808311612e3157829003601f168201915b50505050508152602001600382018054612e67906148ef565b80601f0160208091040260200160405190810160405280929190818152602001828054612e93906148ef565b8015612ee05780601f10612eb557610100808354040283529160200191612ee0565b820191906000526020600020905b815481529060010190602001808311612ec357829003601f168201915b50505050508152505090506000612ef684610916565b15612f02575082612f1e565b612f1b846001612f1187612382565b6104859190614a6a565b90505b6000612f3760e0612f30876000612336565b901c613bef565b60008681526006602052604081205491925090612f599063ffffffff16613bef565b612f6c856020015163ffffffff16613bef565b612f7585613bef565b612f80866020613d2c565b8751612f8b90613f6f565b612f988960800151613f6f565b604051602001612fad96959493929190614c98565b60405160208183030381529060405290506000612fca8588612a3b565b613009576040518060400160405280600881526020017f696e616374697665000000000000000000000000000000000000000000000000815250613040565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006130968660a00151856130568b613bef565b6130618c6020613d2c565b8661306b8e611e79565b896040516020016130829796959493929190614e3c565b604051602081830303815290604052613f92565b9050806040516020016130a99190614ffb565b6040516020818303038152906040529650505050505050919050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020818152604080832086845290915281208054849290613103908490615040565b90915550506000838152600660205260408120805490919061312a9063ffffffff166149da565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516131c8929190918252602082015260400190565b60405180910390a450505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290613214908490614b70565b90915550506000828152600660205260408120805490919061323b9063ffffffff16615058565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62858560405161154b929190918252602082015260400190565b600081815260056020526040812054819061331590790100000000000000000000000000000000000000000000000000900460ff16600161506e565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660000361334f5760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff166000036133865760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff166000036133bc5760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff166000036133f15760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff166000036134255760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff166000036134585760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff1660000361348a5760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff166000036134bb5760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff166000036134eb5760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff1660000361351a5760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff166000036135485760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff166000036135755760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff166000036135a15760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff166000036135cc5760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff166000036135f65760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff1660000361361f5760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff166000036136475760588160ff16901b8317915050919050565b826affffffffffffffffffffff1660000361366e5760508160ff16901b8317915050919050565b8269ffffffffffffffffffff166000036136945760488160ff16901b8317915050919050565b8268ffffffffffffffffff166000036136b95760408160ff16901b8317915050919050565b8267ffffffffffffffff166000036136dd5760388160ff16901b8317915050919050565b8266ffffffffffffff166000036137005760308160ff16901b8317915050919050565b8265ffffffffffff166000036137225760288160ff16901b8317915050919050565b8264ffffffffff166000036137435760208160ff16901b8317915050919050565b8263ffffffff166000036137635760188160ff16901b8317915050919050565b8262ffffff166000036137825760108160ff16901b8317915050919050565b8261ffff166000036137a05760088160ff16901b8317915050919050565b60ff1691909117919050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c0810191909152858160a0018190525084816020019063ffffffff16908163ffffffff168152505083816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160c001819052506001816040019015159081151581525050806005600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548160ff02191690831515021790555060608201518160000160196101000a81548160ff021916908360ff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160020190816139b191906150e2565b5060c082015160038201906139c690826150e2565b509050507fec3ffd1c8b2d500049d00ade82ead8a9f4aeeeab4b37fb8913380cce862a99ed878787878787604051613a03969594939291906151fc565b60405180910390a19695505050505050565b60008215613a2957613a29848660016131d6565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503613ac25750600084815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260056020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146107485780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b606081600003613c3257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115613c5c5780613c4681614a32565b9150613c559050600a83615286565b9150613c36565b60008167ffffffffffffffff811115613c7757613c77614445565b6040519080825280601f01601f191660200182016040528015613ca1576020820181803683370190505b5090505b8415613d2457613cb6600183614b70565b9150613cc3600a8661529a565b613cce906030615040565b60f81b818381518110613ce357613ce3614942565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350613d1d600a86615286565b9450613ca5565b949350505050565b60606000613d3b8360026152ae565b613d46906002615040565b67ffffffffffffffff811115613d5e57613d5e614445565b6040519080825280601f01601f191660200182016040528015613d88576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613dbf57613dbf614942565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613e2257613e22614942565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613e5e8460026152ae565b613e69906001615040565b90505b6001811115613f06577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613eaa57613eaa614942565b1a60f81b828281518110613ec057613ec0614942565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613eff816149fd565b9050613e6c565b508315611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016109ac565b606061082e73ffffffffffffffffffffffffffffffffffffffff83166014613d2c565b60608151600003613fb157505060408051602081019091526000815290565b60006040518060600160405280604081526020016152ec6040913990506000600384516002613fe09190615040565b613fea9190615286565b613ff59060046152ae565b67ffffffffffffffff81111561400d5761400d614445565b6040519080825280601f01601f191660200182016040528015614037576020820181803683370190505b509050600182016020820185865187015b808210156140a3576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250614048565b50506003865106600181146140bf57600281146140d2576140da565b603d6001830353603d60028303536140da565b603d60018303535b509195945050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461410957600080fd5b919050565b6000806040838503121561412157600080fd5b61412a836140e5565b946020939093013593505050565b60006020828403121561414a57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461121757600080fd5b60005b8381101561419557818101518382015260200161417d565b838111156141a4576000848401525b50505050565b600081518084526141c281602086016020860161417a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061121760208301846141aa565b60006020828403121561421957600080fd5b5035919050565b60008083601f84011261423257600080fd5b50813567ffffffffffffffff81111561424a57600080fd5b6020830191508360208260051b850101111561426557600080fd5b9250929050565b60008083601f84011261427e57600080fd5b50813567ffffffffffffffff81111561429657600080fd5b60208301915083602082850101111561426557600080fd5b60008060008060008060008060a0898b0312156142ca57600080fd5b6142d3896140e5565b97506142e160208a016140e5565b9650604089013567ffffffffffffffff808211156142fe57600080fd5b61430a8c838d01614220565b909850965060608b013591508082111561432357600080fd5b61432f8c838d01614220565b909650945060808b013591508082111561434857600080fd5b506143558b828c0161426c565b999c989b5096995094979396929594505050565b6000806000806040858703121561437f57600080fd5b843567ffffffffffffffff8082111561439757600080fd5b6143a388838901614220565b909650945060208701359150808211156143bc57600080fd5b506143c987828801614220565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b8181101561440d578351835292840192918401916001016143f1565b50909695505050505050565b6000806040838503121561442c57600080fd5b8235915061443c602084016140e5565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261448557600080fd5b813567ffffffffffffffff808211156144a0576144a0614445565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156144e6576144e6614445565b816040528381528660208588010111156144ff57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff8116811461410957600080fd5b60008060008060008060c0878903121561454c57600080fd5b86359550602087013567ffffffffffffffff8082111561456b57600080fd5b6145778a838b01614474565b965061458560408a0161451f565b955061459360608a016140e5565b94506145a160808a016140e5565b935060a08901359150808211156145b757600080fd5b506145c489828a01614474565b9150509295509295509295565b600080604083850312156145e457600080fd5b6145ed836140e5565b9150602083013567ffffffffffffffff81111561460957600080fd5b61461585828601614474565b9150509250929050565b60008060008060008060c0878903121561463857600080fd5b863567ffffffffffffffff8082111561465057600080fd5b61465c8a838b01614474565b975061466a60208a0161451f565b965061467860408a016140e5565b955061468660608a016140e5565b9450608089013591508082111561469c57600080fd5b6145a18a838b01614474565b80151581146146b657600080fd5b50565b600080604083850312156146cc57600080fd5b6146d5836140e5565b915060208301356146e5816146a8565b809150509250929050565b60008060006060848603121561470557600080fd5b83359250614715602085016140e5565b9150614723604085016140e5565b90509250925092565b6000806000806080858703121561474257600080fd5b84359350614752602086016140e5565b92506040850135614762816146a8565b91506060850135614772816146a8565b939692955090935050565b6000806040838503121561479057600080fd5b8235915060208301356146e5816146a8565b60006101008083526147b68184018c6141aa565b63ffffffff8b811660208601528a16604085015273ffffffffffffffffffffffffffffffffffffffff89811660608601528816608085015283810360a0850152905061480281876141aa565b60ff9590951660c0840152505090151560e0909101529695505050505050565b6000806040838503121561483557600080fd5b82359150602083013560ff811681146146e557600080fd5b6000806040838503121561486057600080fd5b614869836140e5565b915061443c602084016140e5565b60008060008060008060a0878903121561489057600080fd5b614899876140e5565b95506148a7602088016140e5565b94506040870135935060608701359250608087013567ffffffffffffffff8111156148d157600080fd5b6148dd89828a0161426c565b979a9699509497509295939492505050565b600181811c9082168061490357607f821691505b60208210810361493c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561498357600080fd5b611217826140e5565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060ff821660ff81036149d1576149d161498c565b60010192915050565b600063ffffffff8083168181036149f3576149f361498c565b6001019392505050565b600081614a0c57614a0c61498c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6357614a6361498c565b5060010190565b600060ff821660ff841680821015614a8457614a8461498c565b90039392505050565b600060ff821680614aa057614aa061498c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b60008151614ada81856020860161417a565b9290920192915050565b60008251614af681846020870161417a565b9190910192915050565b60008060408385031215614b1357600080fd5b8251614b1e816146a8565b60208401519092506146e5816146a8565b60008251614b4181846020870161417a565b7f3000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b600082821015614b8257614b8261498c565b500390565b60008351614b9981846020880161417a565b835190830190614bad81836020880161417a565b01949350505050565b6000808454614bc4816148ef565b60018281168015614bdc5760018114614c0f57614c3e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0084168752821515830287019450614c3e565b8860005260208060002060005b85811015614c355781548a820152908401908201614c1c565b50505082870194505b505050508351614bad81836020880161417a565b600060ff821660ff84168160ff0481118215151615614c7357614c7361498c565b029392505050565b600060208284031215614c8d57600080fd5b8151611217816146a8565b7f7b2263757272656e7420737570706c79223a2022000000000000000000000000815260008751614cd0816014850160208c0161417a565b7f222c2022737570706c7920636170223a202200000000000000000000000000006014918401918201528751614d0d816026840160208c0161417a565b7f222c202261646d696e2028696429223a20220000000000000000000000000000602692909101918201528651614d4b816038840160208b0161417a565b7f222c202261646d696e202870726574747920696429223a202200000000000000603892909101918201528551614d89816051840160208a0161417a565b7f222c20226f7261636c652061646472657373223a202200000000000000000000605192909101918201528451614dc781606784016020890161417a565b614e2e614e05614dff6067848601017f222c2022636f6e646974696f6e732061646472657373223a20220000000000008152601a0190565b87614ac8565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008851614e74816018850160208d0161417a565b7f222c2022646f6d61696e223a20220000000000000000000000000000000000006018918401918201528851614eb1816026840160208d0161417a565b7f222c20226964223a202200000000000000000000000000000000000000000000602692909101918201528751614eef816030840160208c0161417a565b7f222c2022707265747479206964223a2022000000000000000000000000000000603092909101918201528651614f2d816041840160208b0161417a565b7f222c2022737461747573223a202200000000000000000000000000000000000060419290910191820152614e2e614fd2614fcc614fa3614f9d614f74604f87018c614ac8565b7f222c2022696d616765223a2022000000000000000000000000000000000000008152600d0190565b89614ac8565b7f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b86614ac8565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161503381601d85016020870161417a565b91909101601d0192915050565b600082198211156150535761505361498c565b500190565b600063ffffffff821680614aa057614aa061498c565b600060ff821660ff84168060ff0382111561508b5761508b61498c565b019392505050565b601f8211156150dd57600081815260208120601f850160051c810160208610156150ba5750805b601f850160051c820191505b818110156150d9578281556001016150c6565b5050505b505050565b815167ffffffffffffffff8111156150fc576150fc614445565b6151108161510a84546148ef565b84615093565b602080601f831160018114615163576000841561512d5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556150d9565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156151b057888601518255948401946001909101908401615191565b50858210156151ec57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b86815260c06020820152600061521560c08301886141aa565b63ffffffff8716604084015273ffffffffffffffffffffffffffffffffffffffff86811660608501528516608084015282810360a0840152611e6c81856141aa565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261529557615295615257565b500490565b6000826152a9576152a9615257565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152e6576152e661498c565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212200f5d229ada47a9604f895b37897cd51703b98c9d562d7c918b08f83d46666e4364736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203300000000000000000000000000000000000000000000000000000000000000000000000000000000000b686174732d62657461333a000000000000000000000000000000000000000000", - "nonce": "0x5", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0x935bd152af344ee5836e7c3b2f6e2cfbc5c6b0997f23ee2e99c3459e3ab47b6e", - "transactionIndex": "0x0", - "blockHash": "0x483591d1eea98554ad29faef065f5ed250adacfd6ebf3b1bf78db94d19e929f0", - "blockNumber": "0x16de601", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "to": null, - "cumulativeGasUsed": "0x47a868", - "gasUsed": "0x47a868", - "contractAddress": "0x245e5b56c18b18ac2d72f94c5f7be1d52497a8ad", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d05e07" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/100/run-latest.json", - "returns": {}, - "timestamp": 1661982941, - "commit": "2381c26" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/100/run-1665682949.json b/broadcast/Hats.s.sol/100/run-1665682949.json deleted file mode 100644 index 23187a1..0000000 --- a/broadcast/Hats.s.sol/100/run-1665682949.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x314ec5e790a0bcfbe7a022e52f59d0096a19d4e5685294fe817bba3d03397104", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0x72C89eB08444bC16396DD9432b3e82d956c412EC", - "function": null, - "arguments": [ - "Hats Protocol - Beta 4", - "hats-beta4:" - ], - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x6107f2", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b50604051620059ea380380620059ea83398101604081905262000034916200011f565b600262000042838262000218565b50600462000051828262000218565b505050620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b600093810190920192909252949350505050565b600080604083850312156200013357600080fd5b82516001600160401b03808211156200014b57600080fd5b620001598683870162000070565b935060208501519150808211156200017057600080fd5b506200017f8582860162000070565b9150509250929050565b600181811c908216806200019e57607f821691505b602082108103620001bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021357600081815260208120601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b038111156200023457620002346200005a565b6200024c8162000245845462000189565b84620001c5565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6156f680620002f46000396000f3fe608060405234801561001057600080fd5b50600436106102915760003560e01c80639011771f11610160578063d3272ba8116100d8578063e76913851161008c578063f242432a11610071578063f242432a146105df578063fb2aaa4c146105ed578063fc3e05a41461061257600080fd5b8063e76913851461059e578063e985e9c5146105b157600080fd5b8063d80a8434116100bd578063d80a843414610565578063dd8298da14610578578063e33dd5c91461058b57600080fd5b8063d3272ba81461052b578063d395acf81461053e57600080fd5b8063a2be079b1161012f578063afaae55a11610114578063afaae55a146104f2578063b56f756214610505578063c43dc1771461051857600080fd5b8063a2be079b146104b1578063a4a1f06c146104df57600080fd5b80639011771f146104505780639dd22c9f14610463578063a109635614610476578063a22cb4651461049e57600080fd5b80634e1273f41161020e57806374f82e30116101c25780637fd6b55f116101a75780637fd6b55f1461041757806382afd23b1461042a578063854cc0491461043d57600080fd5b806374f82e30146103fc5780637a9df89f1461040457600080fd5b806354a1826c116101f357806354a1826c1461039b578063641f776e146103ae5780637178fb51146103c157600080fd5b80634e1273f41461036857806352a6b2651461038857600080fd5b80631183a8c0116102655780633fa9d5441161024a5780633fa9d5441461032f5780634352409a1461034257806345fffac81461035557600080fd5b80631183a8c0146103075780632eb2c2d61461031a57600080fd5b8062fdd58e1461029657806301ffc9a7146102bc57806306fdde03146102df5780630e89341c146102f4575b600080fd5b6102a96102a43660046141cc565b610622565b6040519081526020015b60405180910390f35b6102cf6102ca3660046141f6565b610863565b60405190151581526020016102b3565b6102e7610948565b6040516102b391906142a6565b6102e76103023660046142b9565b6109d6565b6102a96103153660046142b9565b6109e1565b61032d610328366004614360565b610a30565b005b6102cf61033d36600461441b565b610a62565b6102cf6103503660046141cc565b610ddb565b6102cf6103633660046142b9565b610df2565b61037b610376366004614447565b610e21565b6040516102b391906144b3565b6102cf610396366004614666565b610f9d565b6102cf6103a93660046141cc565b611040565b6102cf6103bc36600461441b565b6113ab565b6103e76103cf3660046142b9565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016102b3565b6102e76116fd565b61032d6104123660046142b9565b61170a565b6102a96104253660046146ca565b611791565b6102cf6104383660046142b9565b611830565b6102a961044b3660046147a2565b611a1c565b6102a961045e3660046142b9565b611b1a565b6102a9610471366004614840565b611b3b565b610489610484366004614884565b611bb9565b604080519283526020830191909152016102b3565b61032d6104ac36600461491e565b611be3565b6102cf6104bf36600461441b565b600760209081526000928352604080842090915290825290205460ff1681565b61032d6104ed36600461494a565b611c15565b6102cf610500366004614986565b611d9c565b6102cf6105133660046141cc565b612000565b6102cf6105263660046149d7565b612082565b6102cf6105393660046142b9565b6120ed565b61055161054c3660046142b9565b612446565b6040516102b39897969594939291906149fc565b6102cf6105733660046141cc565b61269d565b6102cf610586366004614b5e565b61288a565b6102e76105993660046142b9565b6129d0565b6102a96105ac3660046146ca565b612e8d565b6102cf6105bf366004614c46565b600160209081526000928352604080842090915290825290205460ff1681565b61032d610328366004614c70565b6106006105fb3660046142b9565b612ed7565b60405160ff90911681526020016102b3565b6003546103e79063ffffffff1681565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916106ee90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90614ce8565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050815260200160038201805461078090614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90614ce8565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b5050505050815250509050600091506108128184612f4c565b8015610824575061082484828561308d565b1561085c5773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806108f657507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061094257507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6002805461095590614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461098190614ce8565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b505050505081565b60606109428261322e565b6000818152600560205260408120548190610a1d90790100000000000000000000000000000000000000000000000000900460ff166001614d6a565b9050610a298382611791565b9392505050565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610b2e90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5a90614ce8565b8015610ba75780601f10610b7c57610100808354040283529160200191610ba7565b820191906000526020600020905b815481529060010190602001808311610b8a57829003601f168201915b50505050508152602001600382018054610bc090614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec90614ce8565b8015610c395780601f10610c0e57610100808354040283529160200191610c39565b820191906000526020600020905b815481529060010190602001808311610c1c57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690610d1a908590614d9f565b600060405180830381855afa9150503d8060008114610d55576040519150601f19603f3d011682016040523d82523d6000602084013e610d5a565b606091505b5091509150818015610d6d575060008151115b15610d905780806020019051810190610d869190614dbb565b9095509350610dc2565b6040517f07a084fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dce898987876135e9565b9998505050505050505050565b60006001610de98484610622565b10159392505050565b600080821180156109425750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff811115610eaa57610eaa6144f7565b604051908082528060200260200182016040528015610ed3578160200160208202803683370190505b50905060005b84811015610f9457600080878784818110610ef657610ef6614dea565b9050602002016020810190610f0b9190614e19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610f5957610f59614dea565b90506020020135815260200190815260200160002054828281518110610f8157610f81614dea565b6020908102919091010152600101610ed9565b50949350505050565b81518151600091908114610fdd576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561103557611024858281518110610ffd57610ffd614dea565b602002602001015185838151811061101757611017614dea565b60200260200101516113ab565b5061102e81614e34565b9050610fe0565b506001949350505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161110c90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461113890614ce8565b80156111855780601f1061115a57610100808354040283529160200191611185565b820191906000526020600020905b81548152906001019060200180831161116857829003601f168201915b5050505050815260200160038201805461119e90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546111ca90614ce8565b80156112175780601f106111ec57610100808354040283529160200191611217565b820191906000526020600020905b8154815290600101906020018083116111fa57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff87166024820152604481018690529192506000916064019050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905283519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906112f5908590614d9f565b600060405180830381855afa9150503d8060008114611330576040519150601f19603f3d011682016040523d82523d6000602084013e611335565b606091505b5091509150818015611348575060008151115b1561136a57808060200190518101906113619190614dbb565b95506113a19050565b600086815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161594505b5050505092915050565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161147790614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546114a390614ce8565b80156114f05780601f106114c5576101008083540402835291602001916114f0565b820191906000526020600020905b8154815290600101906020018083116114d357829003601f168201915b5050505050815260200160038201805461150990614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461153590614ce8565b80156115825780601f1061155757610100808354040283529160200191611582565b820191906000526020600020905b81548152906001019060200180831161156557829003601f168201915b5050505050815250509050806020015163ffffffff166000036115d4576040517fae23181400000000000000000000000000000000000000000000000000000000815260048101859052602401610e88565b6115de3385612000565b61161d576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101859052604401610e88565b6020808201516000868152600690925260409091205463ffffffff918216911610611677576040517f0cd96ab800000000000000000000000000000000000000000000000000000000815260048101859052602401610e88565b6116818385610ddb565b156116d7576040517f643d208300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101859052604401610e88565b6116f38385600160405180602001604052806000815250613706565b5060019392505050565b6004805461095590614ce8565b6117143382610ddb565b61174a576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61175633826001613817565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b60008060005b601c811015611828576117ab816008614e6c565b6117b6906020614ea9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c915081851660000361181857806117f26001601c614ebc565b6117fc9190614ebc565b611807906008614e6c565b8460ff16901b851792505050610942565b61182181614e34565b9050611797565b505092915050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916118fc90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461192890614ce8565b80156119755780601f1061194a57610100808354040283529160200191611975565b820191906000526020600020905b81548152906001019060200180831161195857829003601f168201915b5050505050815260200160038201805461198e90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546119ba90614ce8565b8015611a075780601f106119dc57610100808354040283529160200191611a07565b820191906000526020600020905b8154815290600101906020018083116119ea57829003601f168201915b5050505050815250509050610a298184612f4c565b600060ff871615611a59576040517f7c9225c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a62876109e1565b9050611a6e3382612000565b611aad576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101829052604401610e88565b611abb81878787878761391a565b5060008781526005602052604090208054601990611af890790100000000000000000000000000000000000000000000000000900460ff16614ecf565b91906101000a81548160ff021916908360ff1602179055509695505050505050565b6000611b28601c6008614e6c565b611b33836000612e8d565b901c92915050565b6003805460009160e0918390611b569063ffffffff16614eee565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050611b9c816040518060200160405280600081525060016000808761391a565b506109428382600160405180602001604052806000815250613706565b600080611bc63385611b3b565b9150611bd6828989898988611a1c565b9050965096945050505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c1f3384612000565b611c55576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020818152604080832086845290915290205460011115611cbe576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020818152604080832086845290915281208054909190611cfa90614f11565b9091555073ffffffffffffffffffffffffffffffffffffffff811660009081526020818152604080832086845290915281208054909190611d3a90614e34565b90915550604080518481526001602082015273ffffffffffffffffffffffffffffffffffffffff808416929085169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a4505050565b6000848152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611e6890614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9490614ce8565b8015611ee15780601f10611eb657610100808354040283529160200191611ee1565b820191906000526020600020905b815481529060010190602001808311611ec457829003601f168201915b50505050508152602001600382018054611efa90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2690614ce8565b8015611f735780601f10611f4857610100808354040283529160200191611f73565b820191906000526020600020905b815481529060010190602001808311611f5657829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe7576040517fef3da15100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ff3868686866135e9565b5060019695505050505050565b600061200b82610df2565b156120215761201a8383610ddb565b9050610942565b6000600161202e84612ed7565b6120389190614f46565b90505b60ff81161561207357612052846103508584612e8d565b15612061576001915050610942565b8061206b81614f5f565b91505061203b565b61085984610350856000612e8d565b6000828152600560205260408120600181015473ffffffffffffffffffffffffffffffffffffffff1633146120e3576040517f14b35e7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598484613b83565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916121b990614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546121e590614ce8565b80156122325780601f1061220757610100808354040283529160200191612232565b820191906000526020600020905b81548152906001019060200180831161221557829003601f168201915b5050505050815260200160038201805461224b90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461227790614ce8565b80156122c45780601f10612299576101008083540402835291602001916122c4565b820191906000526020600020905b8154815290600101906020018083116122a757829003601f168201915b5050505050815250509050600080846040516024016122e591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061238c908590614d9f565b600060405180830381855afa9150503d80600081146123c7576040519150601f19603f3d011682016040523d82523d6000602084013e6123cc565b606091505b50915091508180156123df575060008151115b156123ff57808060200190518101906123f89190614f9a565b9350612431565b6040517fa41f929c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61243b8785613b83565b979650505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949384938493849388938593849384939192909160a084019161252890614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461255490614ce8565b80156125a15780601f10612576576101008083540402835291602001916125a1565b820191906000526020600020905b81548152906001019060200180831161258457829003601f168201915b505050505081526020016003820180546125ba90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546125e690614ce8565b80156126335780601f1061260857610100808354040283529160200191612633565b820191906000526020600020905b81548152906001019060200180831161261657829003601f168201915b5050509190925250505060a081015160208083015160008e8152600690925260409091205483516080850151939d50919b5063ffffffff16995097509550905061267c8a6129d0565b93508060600151925061268f818b612f4c565b915050919395975091939597565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161276990614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461279590614ce8565b80156127e25780601f106127b7576101008083540402835291602001916127e2565b820191906000526020600020905b8154815290600101906020018083116127c557829003601f168201915b505050505081526020016003820180546127fb90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461282790614ce8565b80156128745780601f1061284957610100808354040283529160200191612874565b820191906000526020600020905b81548152906001019060200180831161285757829003601f168201915b505050505081525050905061085984828561308d565b6000808751905060008751821480156128a35750865182145b80156128af5750855182145b80156128bb5750845182145b80156128c75750835182145b905080612900576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156129c0576129af8a828151811061292057612920614dea565b60200260200101518a838151811061293a5761293a614dea565b60200260200101518a848151811061295457612954614dea565b60200260200101518a858151811061296e5761296e614dea565b60200260200101518a868151811061298857612988614dea565b60200260200101518a87815181106129a2576129a2614dea565b6020026020010151611a1c565b506129b981614e34565b9050612903565b5060019998505050505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190612aa190614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612acd90614ce8565b8015612b1a5780601f10612aef57610100808354040283529160200191612b1a565b820191906000526020600020905b815481529060010190602001808311612afd57829003601f168201915b50505050508152602001600382018054612b3390614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5f90614ce8565b8015612bac5780601f10612b8157610100808354040283529160200191612bac565b820191906000526020600020905b815481529060010190602001808311612b8f57829003601f168201915b5050509190925250505060c081015180519192509015612bef5780604051602001612bd79190614fb7565b60405160208183030381529060405292505050919050565b6000612bfa85612ed7565b60ff169050805b8015612e57576000612c18876105ac600185614ebc565b600081815260056020908152604091829020825160e081018452815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169483019490945260ff78010000000000000000000000000000000000000000000000008204811615159583019590955279010000000000000000000000000000000000000000000000000090049093166060840152600181015490911660808301526002810180549394509192909160a0840191612ce990614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1590614ce8565b8015612d625780601f10612d3757610100808354040283529160200191612d62565b820191906000526020600020905b815481529060010190602001808311612d4557829003601f168201915b50505050508152602001600382018054612d7b90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612da790614ce8565b8015612df45780601f10612dc957610100808354040283529160200191612df4565b820191906000526020600020905b815481529060010190602001808311612dd757829003601f168201915b50505050508152505094508460c001519350600084511115612e465783612e1a88613c4a565b604051602001612e2b929190614ff8565b60405160208183030381529060405295505050505050919050565b50612e5081614f11565b9050612c01565b506004612e6386613c4a565b604051602001612e74929190615027565b6040516020818303038152906040529350505050919050565b600080612e9e60ff8416601c614ebc565b612ea9906008614e6c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901b841691505092915050565b60008060005b601c811015612f4257612ef1816008614e6c565b612efc906020614ea9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c9150818416600003612f32579392505050565b612f3b81614e34565b9050612edd565b50601c9392505050565b60008082604051602401612f6291815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690613009908590614d9f565b600060405180830381855afa9150503d8060008114613044576040519150601f19603f3d011682016040523d82523d6000602084013e613049565b606091505b509150915081801561305c575060008151115b1561307c57808060200190518101906130759190614f9a565b9350613084565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061315f908590614d9f565b600060405180830381855afa9150503d806000811461319a576040519150601f19603f3d011682016040523d82523d6000602084013e61319f565b606091505b50915091508180156131b2575060008151115b156131ed576000818060200190518101906131cd9190614dbb565b90955090508480156131dd575080155b156131e757600094505b50613224565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a0840191906132ff90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461332b90614ce8565b80156133785780601f1061334d57610100808354040283529160200191613378565b820191906000526020600020905b81548152906001019060200180831161335b57829003601f168201915b5050505050815260200160038201805461339190614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546133bd90614ce8565b801561340a5780601f106133df5761010080835404028352916020019161340a565b820191906000526020600020905b8154815290600101906020018083116133ed57829003601f168201915b5050505050815250509050600061342084610df2565b1561342c575082613448565b61344584600161343b87612ed7565b6105ac9190614f46565b90505b600061345b61345686611b1a565b613c4a565b6000868152600660205260408120549192509061347d9063ffffffff16613c4a565b613490856020015163ffffffff16613c4a565b61349985613c4a565b6134a4866020613d08565b87516134af90613f4b565b6134bc8960800151613f4b565b6040516020016134d1969594939291906150c3565b604051602081830303815290604052905060006134ee8588612f4c565b61352d576040518060400160405280600881526020017f696e616374697665000000000000000000000000000000000000000000000000815250613564565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006135ba8660a001518561357a8b613c4a565b6135858c6020613d08565b8661358f8e6129d0565b896040516020016135a69796959493929190615267565b604051602081830303815290604052613f6e565b9050806040516020016135cd9190615426565b6040516020818303038152906040529650505050505050919050565b60008215806135f6575081155b156136075761360784866001613817565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff161515821515036136a05750600084815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020818152604080832086845290915281208054849290613744908490614ea9565b90915550506000838152600660205260408120805490919061376b9063ffffffff16614eee565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051613809929190918252602082015260400190565b60405180910390a450505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290613855908490614ebc565b90915550506000828152600660205260408120805490919061387c9063ffffffff1661546b565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611d8f929190918252602082015260400190565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c0810191909152858160a0018190525084816020019063ffffffff16908163ffffffff168152505083816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160c001819052506001816040019015159081151581525050806005600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548160ff02191690831515021790555060608201518160000160196101000a81548160ff021916908360ff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816002019081613b1f91906154d0565b5060c08201516003820190613b3490826154d0565b509050507fec3ffd1c8b2d500049d00ade82ead8a9f4aeeeab4b37fb8913380cce862a99ed878787878787604051613b71969594939291906155ea565b60405180910390a19695505050505050565b600082815260056020526040812080547801000000000000000000000000000000000000000000000000900460ff1615158315151461085c5780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b60606000613c57836140c1565b600101905060008167ffffffffffffffff811115613c7757613c776144f7565b6040519080825280601f01601f191660200182016040528015613ca1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613cab57509392505050565b60606000613d17836002614e6c565b613d22906002614ea9565b67ffffffffffffffff811115613d3a57613d3a6144f7565b6040519080825280601f01601f191660200182016040528015613d64576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613d9b57613d9b614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613dfe57613dfe614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613e3a846002614e6c565b613e45906001614ea9565b90505b6001811115613ee2577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613e8657613e86614dea565b1a60f81b828281518110613e9c57613e9c614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613edb81614f11565b9050613e48565b508315610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e88565b606061094273ffffffffffffffffffffffffffffffffffffffff83166014613d08565b60608151600003613f8d57505060408051602081019091526000815290565b60006040518060600160405280604081526020016156816040913990506000600384516002613fbc9190614ea9565b613fc69190615645565b613fd1906004614e6c565b67ffffffffffffffff811115613fe957613fe96144f7565b6040519080825280601f01601f191660200182016040528015614013576020820181803683370190505b509050600182016020820185865187015b8082101561407f576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250614024565b505060038651066001811461409b57600281146140ae576140b6565b603d6001830353603d60028303536140b6565b603d60018303535b509195945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061410a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614136576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061415457662386f26fc10000830492506010015b6305f5e100831061416c576305f5e100830492506008015b612710831061418057612710830492506004015b60648310614192576064830492506002015b600a83106109425760010192915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146141c757600080fd5b919050565b600080604083850312156141df57600080fd5b6141e8836141a3565b946020939093013593505050565b60006020828403121561420857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a2957600080fd5b60005b8381101561425357818101518382015260200161423b565b50506000910152565b60008151808452614274816020860160208601614238565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a29602083018461425c565b6000602082840312156142cb57600080fd5b5035919050565b60008083601f8401126142e457600080fd5b50813567ffffffffffffffff8111156142fc57600080fd5b6020830191508360208260051b850101111561431757600080fd5b9250929050565b60008083601f84011261433057600080fd5b50813567ffffffffffffffff81111561434857600080fd5b60208301915083602082850101111561431757600080fd5b60008060008060008060008060a0898b03121561437c57600080fd5b614385896141a3565b975061439360208a016141a3565b9650604089013567ffffffffffffffff808211156143b057600080fd5b6143bc8c838d016142d2565b909850965060608b01359150808211156143d557600080fd5b6143e18c838d016142d2565b909650945060808b01359150808211156143fa57600080fd5b506144078b828c0161431e565b999c989b5096995094979396929594505050565b6000806040838503121561442e57600080fd5b8235915061443e602084016141a3565b90509250929050565b6000806000806040858703121561445d57600080fd5b843567ffffffffffffffff8082111561447557600080fd5b614481888389016142d2565b9096509450602087013591508082111561449a57600080fd5b506144a7878288016142d2565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156144eb578351835292840192918401916001016144cf565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561456d5761456d6144f7565b604052919050565b600067ffffffffffffffff82111561458f5761458f6144f7565b5060051b60200190565b600082601f8301126145aa57600080fd5b813560206145bf6145ba83614575565b614526565b82815260059290921b840181019181810190868411156145de57600080fd5b8286015b848110156145f957803583529183019183016145e2565b509695505050505050565b600082601f83011261461557600080fd5b813560206146256145ba83614575565b82815260059290921b8401810191818101908684111561464457600080fd5b8286015b848110156145f957614659816141a3565b8352918301918301614648565b6000806040838503121561467957600080fd5b823567ffffffffffffffff8082111561469157600080fd5b61469d86838701614599565b935060208501359150808211156146b357600080fd5b506146c085828601614604565b9150509250929050565b600080604083850312156146dd57600080fd5b82359150602083013560ff811681146146f557600080fd5b809150509250929050565b600082601f83011261471157600080fd5b813567ffffffffffffffff81111561472b5761472b6144f7565b61475c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614526565b81815284602083860101111561477157600080fd5b816020850160208301376000918101602001919091529392505050565b803563ffffffff811681146141c757600080fd5b60008060008060008060c087890312156147bb57600080fd5b86359550602087013567ffffffffffffffff808211156147da57600080fd5b6147e68a838b01614700565b96506147f460408a0161478e565b955061480260608a016141a3565b945061481060808a016141a3565b935060a089013591508082111561482657600080fd5b5061483389828a01614700565b9150509295509295509295565b6000806040838503121561485357600080fd5b61485c836141a3565b9150602083013567ffffffffffffffff81111561487857600080fd5b6146c085828601614700565b60008060008060008060c0878903121561489d57600080fd5b863567ffffffffffffffff808211156148b557600080fd5b6148c18a838b01614700565b97506148cf60208a0161478e565b96506148dd60408a016141a3565b95506148eb60608a016141a3565b9450608089013591508082111561490157600080fd5b6148108a838b01614700565b801515811461491b57600080fd5b50565b6000806040838503121561493157600080fd5b61493a836141a3565b915060208301356146f58161490d565b60008060006060848603121561495f57600080fd5b8335925061496f602085016141a3565b915061497d604085016141a3565b90509250925092565b6000806000806080858703121561499c57600080fd5b843593506149ac602086016141a3565b925060408501356149bc8161490d565b915060608501356149cc8161490d565b939692955090935050565b600080604083850312156149ea57600080fd5b8235915060208301356146f58161490d565b6000610100808352614a108184018c61425c565b63ffffffff8b811660208601528a16604085015273ffffffffffffffffffffffffffffffffffffffff89811660608601528816608085015283810360a08501529050614a5c818761425c565b60ff9590951660c0840152505090151560e0909101529695505050505050565b600082601f830112614a8d57600080fd5b81356020614a9d6145ba83614575565b82815260059290921b84018101918181019086841115614abc57600080fd5b8286015b848110156145f957803567ffffffffffffffff811115614ae05760008081fd5b614aee8986838b0101614700565b845250918301918301614ac0565b600082601f830112614b0d57600080fd5b81356020614b1d6145ba83614575565b82815260059290921b84018101918181019086841115614b3c57600080fd5b8286015b848110156145f957614b518161478e565b8352918301918301614b40565b60008060008060008060c08789031215614b7757600080fd5b863567ffffffffffffffff80821115614b8f57600080fd5b614b9b8a838b01614599565b97506020890135915080821115614bb157600080fd5b614bbd8a838b01614a7c565b96506040890135915080821115614bd357600080fd5b614bdf8a838b01614afc565b95506060890135915080821115614bf557600080fd5b614c018a838b01614604565b94506080890135915080821115614c1757600080fd5b614c238a838b01614604565b935060a0890135915080821115614c3957600080fd5b5061483389828a01614a7c565b60008060408385031215614c5957600080fd5b614c62836141a3565b915061443e602084016141a3565b60008060008060008060a08789031215614c8957600080fd5b614c92876141a3565b9550614ca0602088016141a3565b94506040870135935060608701359250608087013567ffffffffffffffff811115614cca57600080fd5b614cd689828a0161431e565b979a9699509497509295939492505050565b600181811c90821680614cfc57607f821691505b602082108103614d35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff818116838216019081111561094257610942614d3b565b60008151614d95818560208601614238565b9290920192915050565b60008251614db1818460208701614238565b9190910192915050565b60008060408385031215614dce57600080fd5b8251614dd98161490d565b60208401519092506146f58161490d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614e2b57600080fd5b610a29826141a3565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6557614e65614d3b565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea457614ea4614d3b565b500290565b8082018082111561094257610942614d3b565b8181038181111561094257610942614d3b565b600060ff821660ff8103614ee557614ee5614d3b565b60010192915050565b600063ffffffff808316818103614f0757614f07614d3b565b6001019392505050565b600081614f2057614f20614d3b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60ff828116828216039081111561094257610942614d3b565b600060ff821680614f7257614f72614d3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600060208284031215614fac57600080fd5b8151610a298161490d565b60008251614fc9818460208701614238565b7f3000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b6000835161500a818460208801614238565b83519083019061501e818360208801614238565b01949350505050565b600080845461503581614ce8565b6001828116801561504d5760018114615080576150af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841687528215158302870194506150af565b8860005260208060002060005b858110156150a65781548a82015290840190820161508d565b50505082870194505b50505050835161501e818360208801614238565b7f7b2263757272656e7420737570706c79223a20220000000000000000000000008152600087516150fb816014850160208c01614238565b7f222c2022737570706c7920636170223a202200000000000000000000000000006014918401918201528751615138816026840160208c01614238565b7f222c202261646d696e2028696429223a20220000000000000000000000000000602692909101918201528651615176816038840160208b01614238565b7f222c202261646d696e202870726574747920696429223a2022000000000000006038929091019182015285516151b4816051840160208a01614238565b7f222c2022656c69676962696c6974792061646472657373223a202200000000006051929091019182015284516151f281606c840160208901614238565b61525961523061522a606c848601017f222c2022746f67676c652061646472657373223a202200000000000000000000815260160190565b87614d83565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a2022000000000000000081526000885161529f816018850160208d01614238565b7f222c2022646f6d61696e223a202200000000000000000000000000000000000060189184019182015288516152dc816026840160208d01614238565b7f222c20226964223a20220000000000000000000000000000000000000000000060269290910191820152875161531a816030840160208c01614238565b7f222c2022707265747479206964223a2022000000000000000000000000000000603092909101918201528651615358816041840160208b01614238565b7f222c2022737461747573223a2022000000000000000000000000000000000000604192909101918201526152596153fd6153f76153ce6153c861539f604f87018c614d83565b7f222c2022696d616765223a2022000000000000000000000000000000000000008152600d0190565b89614d83565b7f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b86614d83565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161545e81601d850160208701614238565b91909101601d0192915050565b600063ffffffff821680614f7257614f72614d3b565b601f8211156154cb57600081815260208120601f850160051c810160208610156154a85750805b601f850160051c820191505b818110156154c7578281556001016154b4565b5050505b505050565b815167ffffffffffffffff8111156154ea576154ea6144f7565b6154fe816154f88454614ce8565b84615481565b602080601f831160018114615551576000841561551b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556154c7565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561559e5788860151825594840194600190910190840161557f565b50858210156155da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b86815260c06020820152600061560360c083018861425c565b63ffffffff8716604084015273ffffffffffffffffffffffffffffffffffffffff86811660608501528516608084015282810360a0840152610dce818561425c565b60008261567b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122052320c4bcd98e37bd6159591c58f2761d4bf834a0e48918dd19945779164d93a64736f6c63430008100033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203400000000000000000000000000000000000000000000000000000000000000000000000000000000000b686174732d62657461343a000000000000000000000000000000000000000000", - "nonce": "0xb", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0x314ec5e790a0bcfbe7a022e52f59d0096a19d4e5685294fe817bba3d03397104", - "transactionIndex": "0x3", - "blockHash": "0xc8917d8ed511e668cea5339c988aa0bed792cd7a2881b81cbb76bcb8cba61275", - "blockNumber": "0x17714e3", - "from": "0xf48928b8d6C04122778aD74C64886D972decA39F", - "to": null, - "cumulativeGasUsed": "0x53c118", - "gasUsed": "0x4aa3a7", - "contractAddress": "0x72C89eB08444bC16396DD9432b3e82d956c412EC", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d05e07" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/100/run-latest.json", - "returns": {}, - "timestamp": 1665682949, - "commit": "ce433f4" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/100/run-latest.json b/broadcast/Hats.s.sol/100/run-latest.json deleted file mode 100644 index 23187a1..0000000 --- a/broadcast/Hats.s.sol/100/run-latest.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x314ec5e790a0bcfbe7a022e52f59d0096a19d4e5685294fe817bba3d03397104", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0x72C89eB08444bC16396DD9432b3e82d956c412EC", - "function": null, - "arguments": [ - "Hats Protocol - Beta 4", - "hats-beta4:" - ], - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x6107f2", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b50604051620059ea380380620059ea83398101604081905262000034916200011f565b600262000042838262000218565b50600462000051828262000218565b505050620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b600093810190920192909252949350505050565b600080604083850312156200013357600080fd5b82516001600160401b03808211156200014b57600080fd5b620001598683870162000070565b935060208501519150808211156200017057600080fd5b506200017f8582860162000070565b9150509250929050565b600181811c908216806200019e57607f821691505b602082108103620001bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021357600081815260208120601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b038111156200023457620002346200005a565b6200024c8162000245845462000189565b84620001c5565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6156f680620002f46000396000f3fe608060405234801561001057600080fd5b50600436106102915760003560e01c80639011771f11610160578063d3272ba8116100d8578063e76913851161008c578063f242432a11610071578063f242432a146105df578063fb2aaa4c146105ed578063fc3e05a41461061257600080fd5b8063e76913851461059e578063e985e9c5146105b157600080fd5b8063d80a8434116100bd578063d80a843414610565578063dd8298da14610578578063e33dd5c91461058b57600080fd5b8063d3272ba81461052b578063d395acf81461053e57600080fd5b8063a2be079b1161012f578063afaae55a11610114578063afaae55a146104f2578063b56f756214610505578063c43dc1771461051857600080fd5b8063a2be079b146104b1578063a4a1f06c146104df57600080fd5b80639011771f146104505780639dd22c9f14610463578063a109635614610476578063a22cb4651461049e57600080fd5b80634e1273f41161020e57806374f82e30116101c25780637fd6b55f116101a75780637fd6b55f1461041757806382afd23b1461042a578063854cc0491461043d57600080fd5b806374f82e30146103fc5780637a9df89f1461040457600080fd5b806354a1826c116101f357806354a1826c1461039b578063641f776e146103ae5780637178fb51146103c157600080fd5b80634e1273f41461036857806352a6b2651461038857600080fd5b80631183a8c0116102655780633fa9d5441161024a5780633fa9d5441461032f5780634352409a1461034257806345fffac81461035557600080fd5b80631183a8c0146103075780632eb2c2d61461031a57600080fd5b8062fdd58e1461029657806301ffc9a7146102bc57806306fdde03146102df5780630e89341c146102f4575b600080fd5b6102a96102a43660046141cc565b610622565b6040519081526020015b60405180910390f35b6102cf6102ca3660046141f6565b610863565b60405190151581526020016102b3565b6102e7610948565b6040516102b391906142a6565b6102e76103023660046142b9565b6109d6565b6102a96103153660046142b9565b6109e1565b61032d610328366004614360565b610a30565b005b6102cf61033d36600461441b565b610a62565b6102cf6103503660046141cc565b610ddb565b6102cf6103633660046142b9565b610df2565b61037b610376366004614447565b610e21565b6040516102b391906144b3565b6102cf610396366004614666565b610f9d565b6102cf6103a93660046141cc565b611040565b6102cf6103bc36600461441b565b6113ab565b6103e76103cf3660046142b9565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016102b3565b6102e76116fd565b61032d6104123660046142b9565b61170a565b6102a96104253660046146ca565b611791565b6102cf6104383660046142b9565b611830565b6102a961044b3660046147a2565b611a1c565b6102a961045e3660046142b9565b611b1a565b6102a9610471366004614840565b611b3b565b610489610484366004614884565b611bb9565b604080519283526020830191909152016102b3565b61032d6104ac36600461491e565b611be3565b6102cf6104bf36600461441b565b600760209081526000928352604080842090915290825290205460ff1681565b61032d6104ed36600461494a565b611c15565b6102cf610500366004614986565b611d9c565b6102cf6105133660046141cc565b612000565b6102cf6105263660046149d7565b612082565b6102cf6105393660046142b9565b6120ed565b61055161054c3660046142b9565b612446565b6040516102b39897969594939291906149fc565b6102cf6105733660046141cc565b61269d565b6102cf610586366004614b5e565b61288a565b6102e76105993660046142b9565b6129d0565b6102a96105ac3660046146ca565b612e8d565b6102cf6105bf366004614c46565b600160209081526000928352604080842090915290825290205460ff1681565b61032d610328366004614c70565b6106006105fb3660046142b9565b612ed7565b60405160ff90911681526020016102b3565b6003546103e79063ffffffff1681565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916106ee90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90614ce8565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050815260200160038201805461078090614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90614ce8565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b5050505050815250509050600091506108128184612f4c565b8015610824575061082484828561308d565b1561085c5773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806108f657507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061094257507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6002805461095590614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461098190614ce8565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b505050505081565b60606109428261322e565b6000818152600560205260408120548190610a1d90790100000000000000000000000000000000000000000000000000900460ff166001614d6a565b9050610a298382611791565b9392505050565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610b2e90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5a90614ce8565b8015610ba75780601f10610b7c57610100808354040283529160200191610ba7565b820191906000526020600020905b815481529060010190602001808311610b8a57829003601f168201915b50505050508152602001600382018054610bc090614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec90614ce8565b8015610c395780601f10610c0e57610100808354040283529160200191610c39565b820191906000526020600020905b815481529060010190602001808311610c1c57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690610d1a908590614d9f565b600060405180830381855afa9150503d8060008114610d55576040519150601f19603f3d011682016040523d82523d6000602084013e610d5a565b606091505b5091509150818015610d6d575060008151115b15610d905780806020019051810190610d869190614dbb565b9095509350610dc2565b6040517f07a084fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dce898987876135e9565b9998505050505050505050565b60006001610de98484610622565b10159392505050565b600080821180156109425750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff811115610eaa57610eaa6144f7565b604051908082528060200260200182016040528015610ed3578160200160208202803683370190505b50905060005b84811015610f9457600080878784818110610ef657610ef6614dea565b9050602002016020810190610f0b9190614e19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610f5957610f59614dea565b90506020020135815260200190815260200160002054828281518110610f8157610f81614dea565b6020908102919091010152600101610ed9565b50949350505050565b81518151600091908114610fdd576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561103557611024858281518110610ffd57610ffd614dea565b602002602001015185838151811061101757611017614dea565b60200260200101516113ab565b5061102e81614e34565b9050610fe0565b506001949350505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161110c90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461113890614ce8565b80156111855780601f1061115a57610100808354040283529160200191611185565b820191906000526020600020905b81548152906001019060200180831161116857829003601f168201915b5050505050815260200160038201805461119e90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546111ca90614ce8565b80156112175780601f106111ec57610100808354040283529160200191611217565b820191906000526020600020905b8154815290600101906020018083116111fa57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff87166024820152604481018690529192506000916064019050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905283519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906112f5908590614d9f565b600060405180830381855afa9150503d8060008114611330576040519150601f19603f3d011682016040523d82523d6000602084013e611335565b606091505b5091509150818015611348575060008151115b1561136a57808060200190518101906113619190614dbb565b95506113a19050565b600086815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161594505b5050505092915050565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161147790614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546114a390614ce8565b80156114f05780601f106114c5576101008083540402835291602001916114f0565b820191906000526020600020905b8154815290600101906020018083116114d357829003601f168201915b5050505050815260200160038201805461150990614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461153590614ce8565b80156115825780601f1061155757610100808354040283529160200191611582565b820191906000526020600020905b81548152906001019060200180831161156557829003601f168201915b5050505050815250509050806020015163ffffffff166000036115d4576040517fae23181400000000000000000000000000000000000000000000000000000000815260048101859052602401610e88565b6115de3385612000565b61161d576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101859052604401610e88565b6020808201516000868152600690925260409091205463ffffffff918216911610611677576040517f0cd96ab800000000000000000000000000000000000000000000000000000000815260048101859052602401610e88565b6116818385610ddb565b156116d7576040517f643d208300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101859052604401610e88565b6116f38385600160405180602001604052806000815250613706565b5060019392505050565b6004805461095590614ce8565b6117143382610ddb565b61174a576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61175633826001613817565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b60008060005b601c811015611828576117ab816008614e6c565b6117b6906020614ea9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c915081851660000361181857806117f26001601c614ebc565b6117fc9190614ebc565b611807906008614e6c565b8460ff16901b851792505050610942565b61182181614e34565b9050611797565b505092915050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916118fc90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461192890614ce8565b80156119755780601f1061194a57610100808354040283529160200191611975565b820191906000526020600020905b81548152906001019060200180831161195857829003601f168201915b5050505050815260200160038201805461198e90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546119ba90614ce8565b8015611a075780601f106119dc57610100808354040283529160200191611a07565b820191906000526020600020905b8154815290600101906020018083116119ea57829003601f168201915b5050505050815250509050610a298184612f4c565b600060ff871615611a59576040517f7c9225c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a62876109e1565b9050611a6e3382612000565b611aad576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101829052604401610e88565b611abb81878787878761391a565b5060008781526005602052604090208054601990611af890790100000000000000000000000000000000000000000000000000900460ff16614ecf565b91906101000a81548160ff021916908360ff1602179055509695505050505050565b6000611b28601c6008614e6c565b611b33836000612e8d565b901c92915050565b6003805460009160e0918390611b569063ffffffff16614eee565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050611b9c816040518060200160405280600081525060016000808761391a565b506109428382600160405180602001604052806000815250613706565b600080611bc63385611b3b565b9150611bd6828989898988611a1c565b9050965096945050505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c1f3384612000565b611c55576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020818152604080832086845290915290205460011115611cbe576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020818152604080832086845290915281208054909190611cfa90614f11565b9091555073ffffffffffffffffffffffffffffffffffffffff811660009081526020818152604080832086845290915281208054909190611d3a90614e34565b90915550604080518481526001602082015273ffffffffffffffffffffffffffffffffffffffff808416929085169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a4505050565b6000848152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611e6890614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9490614ce8565b8015611ee15780601f10611eb657610100808354040283529160200191611ee1565b820191906000526020600020905b815481529060010190602001808311611ec457829003601f168201915b50505050508152602001600382018054611efa90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2690614ce8565b8015611f735780601f10611f4857610100808354040283529160200191611f73565b820191906000526020600020905b815481529060010190602001808311611f5657829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe7576040517fef3da15100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ff3868686866135e9565b5060019695505050505050565b600061200b82610df2565b156120215761201a8383610ddb565b9050610942565b6000600161202e84612ed7565b6120389190614f46565b90505b60ff81161561207357612052846103508584612e8d565b15612061576001915050610942565b8061206b81614f5f565b91505061203b565b61085984610350856000612e8d565b6000828152600560205260408120600181015473ffffffffffffffffffffffffffffffffffffffff1633146120e3576040517f14b35e7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598484613b83565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916121b990614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546121e590614ce8565b80156122325780601f1061220757610100808354040283529160200191612232565b820191906000526020600020905b81548152906001019060200180831161221557829003601f168201915b5050505050815260200160038201805461224b90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461227790614ce8565b80156122c45780601f10612299576101008083540402835291602001916122c4565b820191906000526020600020905b8154815290600101906020018083116122a757829003601f168201915b5050505050815250509050600080846040516024016122e591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061238c908590614d9f565b600060405180830381855afa9150503d80600081146123c7576040519150601f19603f3d011682016040523d82523d6000602084013e6123cc565b606091505b50915091508180156123df575060008151115b156123ff57808060200190518101906123f89190614f9a565b9350612431565b6040517fa41f929c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61243b8785613b83565b979650505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949384938493849388938593849384939192909160a084019161252890614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461255490614ce8565b80156125a15780601f10612576576101008083540402835291602001916125a1565b820191906000526020600020905b81548152906001019060200180831161258457829003601f168201915b505050505081526020016003820180546125ba90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546125e690614ce8565b80156126335780601f1061260857610100808354040283529160200191612633565b820191906000526020600020905b81548152906001019060200180831161261657829003601f168201915b5050509190925250505060a081015160208083015160008e8152600690925260409091205483516080850151939d50919b5063ffffffff16995097509550905061267c8a6129d0565b93508060600151925061268f818b612f4c565b915050919395975091939597565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161276990614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461279590614ce8565b80156127e25780601f106127b7576101008083540402835291602001916127e2565b820191906000526020600020905b8154815290600101906020018083116127c557829003601f168201915b505050505081526020016003820180546127fb90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461282790614ce8565b80156128745780601f1061284957610100808354040283529160200191612874565b820191906000526020600020905b81548152906001019060200180831161285757829003601f168201915b505050505081525050905061085984828561308d565b6000808751905060008751821480156128a35750865182145b80156128af5750855182145b80156128bb5750845182145b80156128c75750835182145b905080612900576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156129c0576129af8a828151811061292057612920614dea565b60200260200101518a838151811061293a5761293a614dea565b60200260200101518a848151811061295457612954614dea565b60200260200101518a858151811061296e5761296e614dea565b60200260200101518a868151811061298857612988614dea565b60200260200101518a87815181106129a2576129a2614dea565b6020026020010151611a1c565b506129b981614e34565b9050612903565b5060019998505050505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190612aa190614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612acd90614ce8565b8015612b1a5780601f10612aef57610100808354040283529160200191612b1a565b820191906000526020600020905b815481529060010190602001808311612afd57829003601f168201915b50505050508152602001600382018054612b3390614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5f90614ce8565b8015612bac5780601f10612b8157610100808354040283529160200191612bac565b820191906000526020600020905b815481529060010190602001808311612b8f57829003601f168201915b5050509190925250505060c081015180519192509015612bef5780604051602001612bd79190614fb7565b60405160208183030381529060405292505050919050565b6000612bfa85612ed7565b60ff169050805b8015612e57576000612c18876105ac600185614ebc565b600081815260056020908152604091829020825160e081018452815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169483019490945260ff78010000000000000000000000000000000000000000000000008204811615159583019590955279010000000000000000000000000000000000000000000000000090049093166060840152600181015490911660808301526002810180549394509192909160a0840191612ce990614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1590614ce8565b8015612d625780601f10612d3757610100808354040283529160200191612d62565b820191906000526020600020905b815481529060010190602001808311612d4557829003601f168201915b50505050508152602001600382018054612d7b90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612da790614ce8565b8015612df45780601f10612dc957610100808354040283529160200191612df4565b820191906000526020600020905b815481529060010190602001808311612dd757829003601f168201915b50505050508152505094508460c001519350600084511115612e465783612e1a88613c4a565b604051602001612e2b929190614ff8565b60405160208183030381529060405295505050505050919050565b50612e5081614f11565b9050612c01565b506004612e6386613c4a565b604051602001612e74929190615027565b6040516020818303038152906040529350505050919050565b600080612e9e60ff8416601c614ebc565b612ea9906008614e6c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901b841691505092915050565b60008060005b601c811015612f4257612ef1816008614e6c565b612efc906020614ea9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c9150818416600003612f32579392505050565b612f3b81614e34565b9050612edd565b50601c9392505050565b60008082604051602401612f6291815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690613009908590614d9f565b600060405180830381855afa9150503d8060008114613044576040519150601f19603f3d011682016040523d82523d6000602084013e613049565b606091505b509150915081801561305c575060008151115b1561307c57808060200190518101906130759190614f9a565b9350613084565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061315f908590614d9f565b600060405180830381855afa9150503d806000811461319a576040519150601f19603f3d011682016040523d82523d6000602084013e61319f565b606091505b50915091508180156131b2575060008151115b156131ed576000818060200190518101906131cd9190614dbb565b90955090508480156131dd575080155b156131e757600094505b50613224565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a0840191906132ff90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461332b90614ce8565b80156133785780601f1061334d57610100808354040283529160200191613378565b820191906000526020600020905b81548152906001019060200180831161335b57829003601f168201915b5050505050815260200160038201805461339190614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546133bd90614ce8565b801561340a5780601f106133df5761010080835404028352916020019161340a565b820191906000526020600020905b8154815290600101906020018083116133ed57829003601f168201915b5050505050815250509050600061342084610df2565b1561342c575082613448565b61344584600161343b87612ed7565b6105ac9190614f46565b90505b600061345b61345686611b1a565b613c4a565b6000868152600660205260408120549192509061347d9063ffffffff16613c4a565b613490856020015163ffffffff16613c4a565b61349985613c4a565b6134a4866020613d08565b87516134af90613f4b565b6134bc8960800151613f4b565b6040516020016134d1969594939291906150c3565b604051602081830303815290604052905060006134ee8588612f4c565b61352d576040518060400160405280600881526020017f696e616374697665000000000000000000000000000000000000000000000000815250613564565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006135ba8660a001518561357a8b613c4a565b6135858c6020613d08565b8661358f8e6129d0565b896040516020016135a69796959493929190615267565b604051602081830303815290604052613f6e565b9050806040516020016135cd9190615426565b6040516020818303038152906040529650505050505050919050565b60008215806135f6575081155b156136075761360784866001613817565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff161515821515036136a05750600084815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020818152604080832086845290915281208054849290613744908490614ea9565b90915550506000838152600660205260408120805490919061376b9063ffffffff16614eee565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051613809929190918252602082015260400190565b60405180910390a450505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290613855908490614ebc565b90915550506000828152600660205260408120805490919061387c9063ffffffff1661546b565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611d8f929190918252602082015260400190565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c0810191909152858160a0018190525084816020019063ffffffff16908163ffffffff168152505083816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160c001819052506001816040019015159081151581525050806005600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548160ff02191690831515021790555060608201518160000160196101000a81548160ff021916908360ff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816002019081613b1f91906154d0565b5060c08201516003820190613b3490826154d0565b509050507fec3ffd1c8b2d500049d00ade82ead8a9f4aeeeab4b37fb8913380cce862a99ed878787878787604051613b71969594939291906155ea565b60405180910390a19695505050505050565b600082815260056020526040812080547801000000000000000000000000000000000000000000000000900460ff1615158315151461085c5780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b60606000613c57836140c1565b600101905060008167ffffffffffffffff811115613c7757613c776144f7565b6040519080825280601f01601f191660200182016040528015613ca1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613cab57509392505050565b60606000613d17836002614e6c565b613d22906002614ea9565b67ffffffffffffffff811115613d3a57613d3a6144f7565b6040519080825280601f01601f191660200182016040528015613d64576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613d9b57613d9b614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613dfe57613dfe614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613e3a846002614e6c565b613e45906001614ea9565b90505b6001811115613ee2577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613e8657613e86614dea565b1a60f81b828281518110613e9c57613e9c614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613edb81614f11565b9050613e48565b508315610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e88565b606061094273ffffffffffffffffffffffffffffffffffffffff83166014613d08565b60608151600003613f8d57505060408051602081019091526000815290565b60006040518060600160405280604081526020016156816040913990506000600384516002613fbc9190614ea9565b613fc69190615645565b613fd1906004614e6c565b67ffffffffffffffff811115613fe957613fe96144f7565b6040519080825280601f01601f191660200182016040528015614013576020820181803683370190505b509050600182016020820185865187015b8082101561407f576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250614024565b505060038651066001811461409b57600281146140ae576140b6565b603d6001830353603d60028303536140b6565b603d60018303535b509195945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061410a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614136576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061415457662386f26fc10000830492506010015b6305f5e100831061416c576305f5e100830492506008015b612710831061418057612710830492506004015b60648310614192576064830492506002015b600a83106109425760010192915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146141c757600080fd5b919050565b600080604083850312156141df57600080fd5b6141e8836141a3565b946020939093013593505050565b60006020828403121561420857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a2957600080fd5b60005b8381101561425357818101518382015260200161423b565b50506000910152565b60008151808452614274816020860160208601614238565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a29602083018461425c565b6000602082840312156142cb57600080fd5b5035919050565b60008083601f8401126142e457600080fd5b50813567ffffffffffffffff8111156142fc57600080fd5b6020830191508360208260051b850101111561431757600080fd5b9250929050565b60008083601f84011261433057600080fd5b50813567ffffffffffffffff81111561434857600080fd5b60208301915083602082850101111561431757600080fd5b60008060008060008060008060a0898b03121561437c57600080fd5b614385896141a3565b975061439360208a016141a3565b9650604089013567ffffffffffffffff808211156143b057600080fd5b6143bc8c838d016142d2565b909850965060608b01359150808211156143d557600080fd5b6143e18c838d016142d2565b909650945060808b01359150808211156143fa57600080fd5b506144078b828c0161431e565b999c989b5096995094979396929594505050565b6000806040838503121561442e57600080fd5b8235915061443e602084016141a3565b90509250929050565b6000806000806040858703121561445d57600080fd5b843567ffffffffffffffff8082111561447557600080fd5b614481888389016142d2565b9096509450602087013591508082111561449a57600080fd5b506144a7878288016142d2565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156144eb578351835292840192918401916001016144cf565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561456d5761456d6144f7565b604052919050565b600067ffffffffffffffff82111561458f5761458f6144f7565b5060051b60200190565b600082601f8301126145aa57600080fd5b813560206145bf6145ba83614575565b614526565b82815260059290921b840181019181810190868411156145de57600080fd5b8286015b848110156145f957803583529183019183016145e2565b509695505050505050565b600082601f83011261461557600080fd5b813560206146256145ba83614575565b82815260059290921b8401810191818101908684111561464457600080fd5b8286015b848110156145f957614659816141a3565b8352918301918301614648565b6000806040838503121561467957600080fd5b823567ffffffffffffffff8082111561469157600080fd5b61469d86838701614599565b935060208501359150808211156146b357600080fd5b506146c085828601614604565b9150509250929050565b600080604083850312156146dd57600080fd5b82359150602083013560ff811681146146f557600080fd5b809150509250929050565b600082601f83011261471157600080fd5b813567ffffffffffffffff81111561472b5761472b6144f7565b61475c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614526565b81815284602083860101111561477157600080fd5b816020850160208301376000918101602001919091529392505050565b803563ffffffff811681146141c757600080fd5b60008060008060008060c087890312156147bb57600080fd5b86359550602087013567ffffffffffffffff808211156147da57600080fd5b6147e68a838b01614700565b96506147f460408a0161478e565b955061480260608a016141a3565b945061481060808a016141a3565b935060a089013591508082111561482657600080fd5b5061483389828a01614700565b9150509295509295509295565b6000806040838503121561485357600080fd5b61485c836141a3565b9150602083013567ffffffffffffffff81111561487857600080fd5b6146c085828601614700565b60008060008060008060c0878903121561489d57600080fd5b863567ffffffffffffffff808211156148b557600080fd5b6148c18a838b01614700565b97506148cf60208a0161478e565b96506148dd60408a016141a3565b95506148eb60608a016141a3565b9450608089013591508082111561490157600080fd5b6148108a838b01614700565b801515811461491b57600080fd5b50565b6000806040838503121561493157600080fd5b61493a836141a3565b915060208301356146f58161490d565b60008060006060848603121561495f57600080fd5b8335925061496f602085016141a3565b915061497d604085016141a3565b90509250925092565b6000806000806080858703121561499c57600080fd5b843593506149ac602086016141a3565b925060408501356149bc8161490d565b915060608501356149cc8161490d565b939692955090935050565b600080604083850312156149ea57600080fd5b8235915060208301356146f58161490d565b6000610100808352614a108184018c61425c565b63ffffffff8b811660208601528a16604085015273ffffffffffffffffffffffffffffffffffffffff89811660608601528816608085015283810360a08501529050614a5c818761425c565b60ff9590951660c0840152505090151560e0909101529695505050505050565b600082601f830112614a8d57600080fd5b81356020614a9d6145ba83614575565b82815260059290921b84018101918181019086841115614abc57600080fd5b8286015b848110156145f957803567ffffffffffffffff811115614ae05760008081fd5b614aee8986838b0101614700565b845250918301918301614ac0565b600082601f830112614b0d57600080fd5b81356020614b1d6145ba83614575565b82815260059290921b84018101918181019086841115614b3c57600080fd5b8286015b848110156145f957614b518161478e565b8352918301918301614b40565b60008060008060008060c08789031215614b7757600080fd5b863567ffffffffffffffff80821115614b8f57600080fd5b614b9b8a838b01614599565b97506020890135915080821115614bb157600080fd5b614bbd8a838b01614a7c565b96506040890135915080821115614bd357600080fd5b614bdf8a838b01614afc565b95506060890135915080821115614bf557600080fd5b614c018a838b01614604565b94506080890135915080821115614c1757600080fd5b614c238a838b01614604565b935060a0890135915080821115614c3957600080fd5b5061483389828a01614a7c565b60008060408385031215614c5957600080fd5b614c62836141a3565b915061443e602084016141a3565b60008060008060008060a08789031215614c8957600080fd5b614c92876141a3565b9550614ca0602088016141a3565b94506040870135935060608701359250608087013567ffffffffffffffff811115614cca57600080fd5b614cd689828a0161431e565b979a9699509497509295939492505050565b600181811c90821680614cfc57607f821691505b602082108103614d35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff818116838216019081111561094257610942614d3b565b60008151614d95818560208601614238565b9290920192915050565b60008251614db1818460208701614238565b9190910192915050565b60008060408385031215614dce57600080fd5b8251614dd98161490d565b60208401519092506146f58161490d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614e2b57600080fd5b610a29826141a3565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6557614e65614d3b565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea457614ea4614d3b565b500290565b8082018082111561094257610942614d3b565b8181038181111561094257610942614d3b565b600060ff821660ff8103614ee557614ee5614d3b565b60010192915050565b600063ffffffff808316818103614f0757614f07614d3b565b6001019392505050565b600081614f2057614f20614d3b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60ff828116828216039081111561094257610942614d3b565b600060ff821680614f7257614f72614d3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600060208284031215614fac57600080fd5b8151610a298161490d565b60008251614fc9818460208701614238565b7f3000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b6000835161500a818460208801614238565b83519083019061501e818360208801614238565b01949350505050565b600080845461503581614ce8565b6001828116801561504d5760018114615080576150af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841687528215158302870194506150af565b8860005260208060002060005b858110156150a65781548a82015290840190820161508d565b50505082870194505b50505050835161501e818360208801614238565b7f7b2263757272656e7420737570706c79223a20220000000000000000000000008152600087516150fb816014850160208c01614238565b7f222c2022737570706c7920636170223a202200000000000000000000000000006014918401918201528751615138816026840160208c01614238565b7f222c202261646d696e2028696429223a20220000000000000000000000000000602692909101918201528651615176816038840160208b01614238565b7f222c202261646d696e202870726574747920696429223a2022000000000000006038929091019182015285516151b4816051840160208a01614238565b7f222c2022656c69676962696c6974792061646472657373223a202200000000006051929091019182015284516151f281606c840160208901614238565b61525961523061522a606c848601017f222c2022746f67676c652061646472657373223a202200000000000000000000815260160190565b87614d83565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a2022000000000000000081526000885161529f816018850160208d01614238565b7f222c2022646f6d61696e223a202200000000000000000000000000000000000060189184019182015288516152dc816026840160208d01614238565b7f222c20226964223a20220000000000000000000000000000000000000000000060269290910191820152875161531a816030840160208c01614238565b7f222c2022707265747479206964223a2022000000000000000000000000000000603092909101918201528651615358816041840160208b01614238565b7f222c2022737461747573223a2022000000000000000000000000000000000000604192909101918201526152596153fd6153f76153ce6153c861539f604f87018c614d83565b7f222c2022696d616765223a2022000000000000000000000000000000000000008152600d0190565b89614d83565b7f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b86614d83565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161545e81601d850160208701614238565b91909101601d0192915050565b600063ffffffff821680614f7257614f72614d3b565b601f8211156154cb57600081815260208120601f850160051c810160208610156154a85750805b601f850160051c820191505b818110156154c7578281556001016154b4565b5050505b505050565b815167ffffffffffffffff8111156154ea576154ea6144f7565b6154fe816154f88454614ce8565b84615481565b602080601f831160018114615551576000841561551b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556154c7565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561559e5788860151825594840194600190910190840161557f565b50858210156155da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b86815260c06020820152600061560360c083018861425c565b63ffffffff8716604084015273ffffffffffffffffffffffffffffffffffffffff86811660608501528516608084015282810360a0840152610dce818561425c565b60008261567b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122052320c4bcd98e37bd6159591c58f2761d4bf834a0e48918dd19945779164d93a64736f6c63430008100033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203400000000000000000000000000000000000000000000000000000000000000000000000000000000000b686174732d62657461343a000000000000000000000000000000000000000000", - "nonce": "0xb", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0x314ec5e790a0bcfbe7a022e52f59d0096a19d4e5685294fe817bba3d03397104", - "transactionIndex": "0x3", - "blockHash": "0xc8917d8ed511e668cea5339c988aa0bed792cd7a2881b81cbb76bcb8cba61275", - "blockNumber": "0x17714e3", - "from": "0xf48928b8d6C04122778aD74C64886D972decA39F", - "to": null, - "cumulativeGasUsed": "0x53c118", - "gasUsed": "0x4aa3a7", - "contractAddress": "0x72C89eB08444bC16396DD9432b3e82d956c412EC", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d05e07" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/100/run-latest.json", - "returns": {}, - "timestamp": 1665682949, - "commit": "ce433f4" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/137/run-1665682702.json b/broadcast/Hats.s.sol/137/run-1665682702.json deleted file mode 100644 index 31d7b45..0000000 --- a/broadcast/Hats.s.sol/137/run-1665682702.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x84f96f9d709ab9e84737111265a98bf0e3ddd5b13a891e3b07093dd4ead0b9b1", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0xE81597289A249aE725c2D80E7848DbFa9708c22D", - "function": null, - "arguments": [ - "Hats Protocol - Beta 4", - "hats-beta4:" - ], - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x6107f2", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b50604051620059ea380380620059ea83398101604081905262000034916200011f565b600262000042838262000218565b50600462000051828262000218565b505050620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b600093810190920192909252949350505050565b600080604083850312156200013357600080fd5b82516001600160401b03808211156200014b57600080fd5b620001598683870162000070565b935060208501519150808211156200017057600080fd5b506200017f8582860162000070565b9150509250929050565b600181811c908216806200019e57607f821691505b602082108103620001bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021357600081815260208120601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b038111156200023457620002346200005a565b6200024c8162000245845462000189565b84620001c5565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6156f680620002f46000396000f3fe608060405234801561001057600080fd5b50600436106102915760003560e01c80639011771f11610160578063d3272ba8116100d8578063e76913851161008c578063f242432a11610071578063f242432a146105df578063fb2aaa4c146105ed578063fc3e05a41461061257600080fd5b8063e76913851461059e578063e985e9c5146105b157600080fd5b8063d80a8434116100bd578063d80a843414610565578063dd8298da14610578578063e33dd5c91461058b57600080fd5b8063d3272ba81461052b578063d395acf81461053e57600080fd5b8063a2be079b1161012f578063afaae55a11610114578063afaae55a146104f2578063b56f756214610505578063c43dc1771461051857600080fd5b8063a2be079b146104b1578063a4a1f06c146104df57600080fd5b80639011771f146104505780639dd22c9f14610463578063a109635614610476578063a22cb4651461049e57600080fd5b80634e1273f41161020e57806374f82e30116101c25780637fd6b55f116101a75780637fd6b55f1461041757806382afd23b1461042a578063854cc0491461043d57600080fd5b806374f82e30146103fc5780637a9df89f1461040457600080fd5b806354a1826c116101f357806354a1826c1461039b578063641f776e146103ae5780637178fb51146103c157600080fd5b80634e1273f41461036857806352a6b2651461038857600080fd5b80631183a8c0116102655780633fa9d5441161024a5780633fa9d5441461032f5780634352409a1461034257806345fffac81461035557600080fd5b80631183a8c0146103075780632eb2c2d61461031a57600080fd5b8062fdd58e1461029657806301ffc9a7146102bc57806306fdde03146102df5780630e89341c146102f4575b600080fd5b6102a96102a43660046141cc565b610622565b6040519081526020015b60405180910390f35b6102cf6102ca3660046141f6565b610863565b60405190151581526020016102b3565b6102e7610948565b6040516102b391906142a6565b6102e76103023660046142b9565b6109d6565b6102a96103153660046142b9565b6109e1565b61032d610328366004614360565b610a30565b005b6102cf61033d36600461441b565b610a62565b6102cf6103503660046141cc565b610ddb565b6102cf6103633660046142b9565b610df2565b61037b610376366004614447565b610e21565b6040516102b391906144b3565b6102cf610396366004614666565b610f9d565b6102cf6103a93660046141cc565b611040565b6102cf6103bc36600461441b565b6113ab565b6103e76103cf3660046142b9565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016102b3565b6102e76116fd565b61032d6104123660046142b9565b61170a565b6102a96104253660046146ca565b611791565b6102cf6104383660046142b9565b611830565b6102a961044b3660046147a2565b611a1c565b6102a961045e3660046142b9565b611b1a565b6102a9610471366004614840565b611b3b565b610489610484366004614884565b611bb9565b604080519283526020830191909152016102b3565b61032d6104ac36600461491e565b611be3565b6102cf6104bf36600461441b565b600760209081526000928352604080842090915290825290205460ff1681565b61032d6104ed36600461494a565b611c15565b6102cf610500366004614986565b611d9c565b6102cf6105133660046141cc565b612000565b6102cf6105263660046149d7565b612082565b6102cf6105393660046142b9565b6120ed565b61055161054c3660046142b9565b612446565b6040516102b39897969594939291906149fc565b6102cf6105733660046141cc565b61269d565b6102cf610586366004614b5e565b61288a565b6102e76105993660046142b9565b6129d0565b6102a96105ac3660046146ca565b612e8d565b6102cf6105bf366004614c46565b600160209081526000928352604080842090915290825290205460ff1681565b61032d610328366004614c70565b6106006105fb3660046142b9565b612ed7565b60405160ff90911681526020016102b3565b6003546103e79063ffffffff1681565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916106ee90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90614ce8565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050815260200160038201805461078090614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90614ce8565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b5050505050815250509050600091506108128184612f4c565b8015610824575061082484828561308d565b1561085c5773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806108f657507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061094257507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6002805461095590614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461098190614ce8565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b505050505081565b60606109428261322e565b6000818152600560205260408120548190610a1d90790100000000000000000000000000000000000000000000000000900460ff166001614d6a565b9050610a298382611791565b9392505050565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610b2e90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5a90614ce8565b8015610ba75780601f10610b7c57610100808354040283529160200191610ba7565b820191906000526020600020905b815481529060010190602001808311610b8a57829003601f168201915b50505050508152602001600382018054610bc090614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec90614ce8565b8015610c395780601f10610c0e57610100808354040283529160200191610c39565b820191906000526020600020905b815481529060010190602001808311610c1c57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690610d1a908590614d9f565b600060405180830381855afa9150503d8060008114610d55576040519150601f19603f3d011682016040523d82523d6000602084013e610d5a565b606091505b5091509150818015610d6d575060008151115b15610d905780806020019051810190610d869190614dbb565b9095509350610dc2565b6040517f07a084fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dce898987876135e9565b9998505050505050505050565b60006001610de98484610622565b10159392505050565b600080821180156109425750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff811115610eaa57610eaa6144f7565b604051908082528060200260200182016040528015610ed3578160200160208202803683370190505b50905060005b84811015610f9457600080878784818110610ef657610ef6614dea565b9050602002016020810190610f0b9190614e19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610f5957610f59614dea565b90506020020135815260200190815260200160002054828281518110610f8157610f81614dea565b6020908102919091010152600101610ed9565b50949350505050565b81518151600091908114610fdd576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561103557611024858281518110610ffd57610ffd614dea565b602002602001015185838151811061101757611017614dea565b60200260200101516113ab565b5061102e81614e34565b9050610fe0565b506001949350505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161110c90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461113890614ce8565b80156111855780601f1061115a57610100808354040283529160200191611185565b820191906000526020600020905b81548152906001019060200180831161116857829003601f168201915b5050505050815260200160038201805461119e90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546111ca90614ce8565b80156112175780601f106111ec57610100808354040283529160200191611217565b820191906000526020600020905b8154815290600101906020018083116111fa57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff87166024820152604481018690529192506000916064019050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905283519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906112f5908590614d9f565b600060405180830381855afa9150503d8060008114611330576040519150601f19603f3d011682016040523d82523d6000602084013e611335565b606091505b5091509150818015611348575060008151115b1561136a57808060200190518101906113619190614dbb565b95506113a19050565b600086815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161594505b5050505092915050565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161147790614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546114a390614ce8565b80156114f05780601f106114c5576101008083540402835291602001916114f0565b820191906000526020600020905b8154815290600101906020018083116114d357829003601f168201915b5050505050815260200160038201805461150990614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461153590614ce8565b80156115825780601f1061155757610100808354040283529160200191611582565b820191906000526020600020905b81548152906001019060200180831161156557829003601f168201915b5050505050815250509050806020015163ffffffff166000036115d4576040517fae23181400000000000000000000000000000000000000000000000000000000815260048101859052602401610e88565b6115de3385612000565b61161d576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101859052604401610e88565b6020808201516000868152600690925260409091205463ffffffff918216911610611677576040517f0cd96ab800000000000000000000000000000000000000000000000000000000815260048101859052602401610e88565b6116818385610ddb565b156116d7576040517f643d208300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101859052604401610e88565b6116f38385600160405180602001604052806000815250613706565b5060019392505050565b6004805461095590614ce8565b6117143382610ddb565b61174a576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61175633826001613817565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b60008060005b601c811015611828576117ab816008614e6c565b6117b6906020614ea9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c915081851660000361181857806117f26001601c614ebc565b6117fc9190614ebc565b611807906008614e6c565b8460ff16901b851792505050610942565b61182181614e34565b9050611797565b505092915050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916118fc90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461192890614ce8565b80156119755780601f1061194a57610100808354040283529160200191611975565b820191906000526020600020905b81548152906001019060200180831161195857829003601f168201915b5050505050815260200160038201805461198e90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546119ba90614ce8565b8015611a075780601f106119dc57610100808354040283529160200191611a07565b820191906000526020600020905b8154815290600101906020018083116119ea57829003601f168201915b5050505050815250509050610a298184612f4c565b600060ff871615611a59576040517f7c9225c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a62876109e1565b9050611a6e3382612000565b611aad576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101829052604401610e88565b611abb81878787878761391a565b5060008781526005602052604090208054601990611af890790100000000000000000000000000000000000000000000000000900460ff16614ecf565b91906101000a81548160ff021916908360ff1602179055509695505050505050565b6000611b28601c6008614e6c565b611b33836000612e8d565b901c92915050565b6003805460009160e0918390611b569063ffffffff16614eee565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050611b9c816040518060200160405280600081525060016000808761391a565b506109428382600160405180602001604052806000815250613706565b600080611bc63385611b3b565b9150611bd6828989898988611a1c565b9050965096945050505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c1f3384612000565b611c55576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020818152604080832086845290915290205460011115611cbe576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020818152604080832086845290915281208054909190611cfa90614f11565b9091555073ffffffffffffffffffffffffffffffffffffffff811660009081526020818152604080832086845290915281208054909190611d3a90614e34565b90915550604080518481526001602082015273ffffffffffffffffffffffffffffffffffffffff808416929085169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a4505050565b6000848152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611e6890614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9490614ce8565b8015611ee15780601f10611eb657610100808354040283529160200191611ee1565b820191906000526020600020905b815481529060010190602001808311611ec457829003601f168201915b50505050508152602001600382018054611efa90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2690614ce8565b8015611f735780601f10611f4857610100808354040283529160200191611f73565b820191906000526020600020905b815481529060010190602001808311611f5657829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe7576040517fef3da15100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ff3868686866135e9565b5060019695505050505050565b600061200b82610df2565b156120215761201a8383610ddb565b9050610942565b6000600161202e84612ed7565b6120389190614f46565b90505b60ff81161561207357612052846103508584612e8d565b15612061576001915050610942565b8061206b81614f5f565b91505061203b565b61085984610350856000612e8d565b6000828152600560205260408120600181015473ffffffffffffffffffffffffffffffffffffffff1633146120e3576040517f14b35e7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598484613b83565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916121b990614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546121e590614ce8565b80156122325780601f1061220757610100808354040283529160200191612232565b820191906000526020600020905b81548152906001019060200180831161221557829003601f168201915b5050505050815260200160038201805461224b90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461227790614ce8565b80156122c45780601f10612299576101008083540402835291602001916122c4565b820191906000526020600020905b8154815290600101906020018083116122a757829003601f168201915b5050505050815250509050600080846040516024016122e591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061238c908590614d9f565b600060405180830381855afa9150503d80600081146123c7576040519150601f19603f3d011682016040523d82523d6000602084013e6123cc565b606091505b50915091508180156123df575060008151115b156123ff57808060200190518101906123f89190614f9a565b9350612431565b6040517fa41f929c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61243b8785613b83565b979650505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949384938493849388938593849384939192909160a084019161252890614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461255490614ce8565b80156125a15780601f10612576576101008083540402835291602001916125a1565b820191906000526020600020905b81548152906001019060200180831161258457829003601f168201915b505050505081526020016003820180546125ba90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546125e690614ce8565b80156126335780601f1061260857610100808354040283529160200191612633565b820191906000526020600020905b81548152906001019060200180831161261657829003601f168201915b5050509190925250505060a081015160208083015160008e8152600690925260409091205483516080850151939d50919b5063ffffffff16995097509550905061267c8a6129d0565b93508060600151925061268f818b612f4c565b915050919395975091939597565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161276990614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461279590614ce8565b80156127e25780601f106127b7576101008083540402835291602001916127e2565b820191906000526020600020905b8154815290600101906020018083116127c557829003601f168201915b505050505081526020016003820180546127fb90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461282790614ce8565b80156128745780601f1061284957610100808354040283529160200191612874565b820191906000526020600020905b81548152906001019060200180831161285757829003601f168201915b505050505081525050905061085984828561308d565b6000808751905060008751821480156128a35750865182145b80156128af5750855182145b80156128bb5750845182145b80156128c75750835182145b905080612900576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156129c0576129af8a828151811061292057612920614dea565b60200260200101518a838151811061293a5761293a614dea565b60200260200101518a848151811061295457612954614dea565b60200260200101518a858151811061296e5761296e614dea565b60200260200101518a868151811061298857612988614dea565b60200260200101518a87815181106129a2576129a2614dea565b6020026020010151611a1c565b506129b981614e34565b9050612903565b5060019998505050505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190612aa190614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612acd90614ce8565b8015612b1a5780601f10612aef57610100808354040283529160200191612b1a565b820191906000526020600020905b815481529060010190602001808311612afd57829003601f168201915b50505050508152602001600382018054612b3390614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5f90614ce8565b8015612bac5780601f10612b8157610100808354040283529160200191612bac565b820191906000526020600020905b815481529060010190602001808311612b8f57829003601f168201915b5050509190925250505060c081015180519192509015612bef5780604051602001612bd79190614fb7565b60405160208183030381529060405292505050919050565b6000612bfa85612ed7565b60ff169050805b8015612e57576000612c18876105ac600185614ebc565b600081815260056020908152604091829020825160e081018452815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169483019490945260ff78010000000000000000000000000000000000000000000000008204811615159583019590955279010000000000000000000000000000000000000000000000000090049093166060840152600181015490911660808301526002810180549394509192909160a0840191612ce990614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1590614ce8565b8015612d625780601f10612d3757610100808354040283529160200191612d62565b820191906000526020600020905b815481529060010190602001808311612d4557829003601f168201915b50505050508152602001600382018054612d7b90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612da790614ce8565b8015612df45780601f10612dc957610100808354040283529160200191612df4565b820191906000526020600020905b815481529060010190602001808311612dd757829003601f168201915b50505050508152505094508460c001519350600084511115612e465783612e1a88613c4a565b604051602001612e2b929190614ff8565b60405160208183030381529060405295505050505050919050565b50612e5081614f11565b9050612c01565b506004612e6386613c4a565b604051602001612e74929190615027565b6040516020818303038152906040529350505050919050565b600080612e9e60ff8416601c614ebc565b612ea9906008614e6c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901b841691505092915050565b60008060005b601c811015612f4257612ef1816008614e6c565b612efc906020614ea9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c9150818416600003612f32579392505050565b612f3b81614e34565b9050612edd565b50601c9392505050565b60008082604051602401612f6291815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690613009908590614d9f565b600060405180830381855afa9150503d8060008114613044576040519150601f19603f3d011682016040523d82523d6000602084013e613049565b606091505b509150915081801561305c575060008151115b1561307c57808060200190518101906130759190614f9a565b9350613084565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061315f908590614d9f565b600060405180830381855afa9150503d806000811461319a576040519150601f19603f3d011682016040523d82523d6000602084013e61319f565b606091505b50915091508180156131b2575060008151115b156131ed576000818060200190518101906131cd9190614dbb565b90955090508480156131dd575080155b156131e757600094505b50613224565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a0840191906132ff90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461332b90614ce8565b80156133785780601f1061334d57610100808354040283529160200191613378565b820191906000526020600020905b81548152906001019060200180831161335b57829003601f168201915b5050505050815260200160038201805461339190614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546133bd90614ce8565b801561340a5780601f106133df5761010080835404028352916020019161340a565b820191906000526020600020905b8154815290600101906020018083116133ed57829003601f168201915b5050505050815250509050600061342084610df2565b1561342c575082613448565b61344584600161343b87612ed7565b6105ac9190614f46565b90505b600061345b61345686611b1a565b613c4a565b6000868152600660205260408120549192509061347d9063ffffffff16613c4a565b613490856020015163ffffffff16613c4a565b61349985613c4a565b6134a4866020613d08565b87516134af90613f4b565b6134bc8960800151613f4b565b6040516020016134d1969594939291906150c3565b604051602081830303815290604052905060006134ee8588612f4c565b61352d576040518060400160405280600881526020017f696e616374697665000000000000000000000000000000000000000000000000815250613564565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006135ba8660a001518561357a8b613c4a565b6135858c6020613d08565b8661358f8e6129d0565b896040516020016135a69796959493929190615267565b604051602081830303815290604052613f6e565b9050806040516020016135cd9190615426565b6040516020818303038152906040529650505050505050919050565b60008215806135f6575081155b156136075761360784866001613817565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff161515821515036136a05750600084815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020818152604080832086845290915281208054849290613744908490614ea9565b90915550506000838152600660205260408120805490919061376b9063ffffffff16614eee565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051613809929190918252602082015260400190565b60405180910390a450505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290613855908490614ebc565b90915550506000828152600660205260408120805490919061387c9063ffffffff1661546b565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611d8f929190918252602082015260400190565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c0810191909152858160a0018190525084816020019063ffffffff16908163ffffffff168152505083816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160c001819052506001816040019015159081151581525050806005600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548160ff02191690831515021790555060608201518160000160196101000a81548160ff021916908360ff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816002019081613b1f91906154d0565b5060c08201516003820190613b3490826154d0565b509050507fec3ffd1c8b2d500049d00ade82ead8a9f4aeeeab4b37fb8913380cce862a99ed878787878787604051613b71969594939291906155ea565b60405180910390a19695505050505050565b600082815260056020526040812080547801000000000000000000000000000000000000000000000000900460ff1615158315151461085c5780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b60606000613c57836140c1565b600101905060008167ffffffffffffffff811115613c7757613c776144f7565b6040519080825280601f01601f191660200182016040528015613ca1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613cab57509392505050565b60606000613d17836002614e6c565b613d22906002614ea9565b67ffffffffffffffff811115613d3a57613d3a6144f7565b6040519080825280601f01601f191660200182016040528015613d64576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613d9b57613d9b614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613dfe57613dfe614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613e3a846002614e6c565b613e45906001614ea9565b90505b6001811115613ee2577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613e8657613e86614dea565b1a60f81b828281518110613e9c57613e9c614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613edb81614f11565b9050613e48565b508315610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e88565b606061094273ffffffffffffffffffffffffffffffffffffffff83166014613d08565b60608151600003613f8d57505060408051602081019091526000815290565b60006040518060600160405280604081526020016156816040913990506000600384516002613fbc9190614ea9565b613fc69190615645565b613fd1906004614e6c565b67ffffffffffffffff811115613fe957613fe96144f7565b6040519080825280601f01601f191660200182016040528015614013576020820181803683370190505b509050600182016020820185865187015b8082101561407f576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250614024565b505060038651066001811461409b57600281146140ae576140b6565b603d6001830353603d60028303536140b6565b603d60018303535b509195945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061410a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614136576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061415457662386f26fc10000830492506010015b6305f5e100831061416c576305f5e100830492506008015b612710831061418057612710830492506004015b60648310614192576064830492506002015b600a83106109425760010192915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146141c757600080fd5b919050565b600080604083850312156141df57600080fd5b6141e8836141a3565b946020939093013593505050565b60006020828403121561420857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a2957600080fd5b60005b8381101561425357818101518382015260200161423b565b50506000910152565b60008151808452614274816020860160208601614238565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a29602083018461425c565b6000602082840312156142cb57600080fd5b5035919050565b60008083601f8401126142e457600080fd5b50813567ffffffffffffffff8111156142fc57600080fd5b6020830191508360208260051b850101111561431757600080fd5b9250929050565b60008083601f84011261433057600080fd5b50813567ffffffffffffffff81111561434857600080fd5b60208301915083602082850101111561431757600080fd5b60008060008060008060008060a0898b03121561437c57600080fd5b614385896141a3565b975061439360208a016141a3565b9650604089013567ffffffffffffffff808211156143b057600080fd5b6143bc8c838d016142d2565b909850965060608b01359150808211156143d557600080fd5b6143e18c838d016142d2565b909650945060808b01359150808211156143fa57600080fd5b506144078b828c0161431e565b999c989b5096995094979396929594505050565b6000806040838503121561442e57600080fd5b8235915061443e602084016141a3565b90509250929050565b6000806000806040858703121561445d57600080fd5b843567ffffffffffffffff8082111561447557600080fd5b614481888389016142d2565b9096509450602087013591508082111561449a57600080fd5b506144a7878288016142d2565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156144eb578351835292840192918401916001016144cf565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561456d5761456d6144f7565b604052919050565b600067ffffffffffffffff82111561458f5761458f6144f7565b5060051b60200190565b600082601f8301126145aa57600080fd5b813560206145bf6145ba83614575565b614526565b82815260059290921b840181019181810190868411156145de57600080fd5b8286015b848110156145f957803583529183019183016145e2565b509695505050505050565b600082601f83011261461557600080fd5b813560206146256145ba83614575565b82815260059290921b8401810191818101908684111561464457600080fd5b8286015b848110156145f957614659816141a3565b8352918301918301614648565b6000806040838503121561467957600080fd5b823567ffffffffffffffff8082111561469157600080fd5b61469d86838701614599565b935060208501359150808211156146b357600080fd5b506146c085828601614604565b9150509250929050565b600080604083850312156146dd57600080fd5b82359150602083013560ff811681146146f557600080fd5b809150509250929050565b600082601f83011261471157600080fd5b813567ffffffffffffffff81111561472b5761472b6144f7565b61475c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614526565b81815284602083860101111561477157600080fd5b816020850160208301376000918101602001919091529392505050565b803563ffffffff811681146141c757600080fd5b60008060008060008060c087890312156147bb57600080fd5b86359550602087013567ffffffffffffffff808211156147da57600080fd5b6147e68a838b01614700565b96506147f460408a0161478e565b955061480260608a016141a3565b945061481060808a016141a3565b935060a089013591508082111561482657600080fd5b5061483389828a01614700565b9150509295509295509295565b6000806040838503121561485357600080fd5b61485c836141a3565b9150602083013567ffffffffffffffff81111561487857600080fd5b6146c085828601614700565b60008060008060008060c0878903121561489d57600080fd5b863567ffffffffffffffff808211156148b557600080fd5b6148c18a838b01614700565b97506148cf60208a0161478e565b96506148dd60408a016141a3565b95506148eb60608a016141a3565b9450608089013591508082111561490157600080fd5b6148108a838b01614700565b801515811461491b57600080fd5b50565b6000806040838503121561493157600080fd5b61493a836141a3565b915060208301356146f58161490d565b60008060006060848603121561495f57600080fd5b8335925061496f602085016141a3565b915061497d604085016141a3565b90509250925092565b6000806000806080858703121561499c57600080fd5b843593506149ac602086016141a3565b925060408501356149bc8161490d565b915060608501356149cc8161490d565b939692955090935050565b600080604083850312156149ea57600080fd5b8235915060208301356146f58161490d565b6000610100808352614a108184018c61425c565b63ffffffff8b811660208601528a16604085015273ffffffffffffffffffffffffffffffffffffffff89811660608601528816608085015283810360a08501529050614a5c818761425c565b60ff9590951660c0840152505090151560e0909101529695505050505050565b600082601f830112614a8d57600080fd5b81356020614a9d6145ba83614575565b82815260059290921b84018101918181019086841115614abc57600080fd5b8286015b848110156145f957803567ffffffffffffffff811115614ae05760008081fd5b614aee8986838b0101614700565b845250918301918301614ac0565b600082601f830112614b0d57600080fd5b81356020614b1d6145ba83614575565b82815260059290921b84018101918181019086841115614b3c57600080fd5b8286015b848110156145f957614b518161478e565b8352918301918301614b40565b60008060008060008060c08789031215614b7757600080fd5b863567ffffffffffffffff80821115614b8f57600080fd5b614b9b8a838b01614599565b97506020890135915080821115614bb157600080fd5b614bbd8a838b01614a7c565b96506040890135915080821115614bd357600080fd5b614bdf8a838b01614afc565b95506060890135915080821115614bf557600080fd5b614c018a838b01614604565b94506080890135915080821115614c1757600080fd5b614c238a838b01614604565b935060a0890135915080821115614c3957600080fd5b5061483389828a01614a7c565b60008060408385031215614c5957600080fd5b614c62836141a3565b915061443e602084016141a3565b60008060008060008060a08789031215614c8957600080fd5b614c92876141a3565b9550614ca0602088016141a3565b94506040870135935060608701359250608087013567ffffffffffffffff811115614cca57600080fd5b614cd689828a0161431e565b979a9699509497509295939492505050565b600181811c90821680614cfc57607f821691505b602082108103614d35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff818116838216019081111561094257610942614d3b565b60008151614d95818560208601614238565b9290920192915050565b60008251614db1818460208701614238565b9190910192915050565b60008060408385031215614dce57600080fd5b8251614dd98161490d565b60208401519092506146f58161490d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614e2b57600080fd5b610a29826141a3565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6557614e65614d3b565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea457614ea4614d3b565b500290565b8082018082111561094257610942614d3b565b8181038181111561094257610942614d3b565b600060ff821660ff8103614ee557614ee5614d3b565b60010192915050565b600063ffffffff808316818103614f0757614f07614d3b565b6001019392505050565b600081614f2057614f20614d3b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60ff828116828216039081111561094257610942614d3b565b600060ff821680614f7257614f72614d3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600060208284031215614fac57600080fd5b8151610a298161490d565b60008251614fc9818460208701614238565b7f3000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b6000835161500a818460208801614238565b83519083019061501e818360208801614238565b01949350505050565b600080845461503581614ce8565b6001828116801561504d5760018114615080576150af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841687528215158302870194506150af565b8860005260208060002060005b858110156150a65781548a82015290840190820161508d565b50505082870194505b50505050835161501e818360208801614238565b7f7b2263757272656e7420737570706c79223a20220000000000000000000000008152600087516150fb816014850160208c01614238565b7f222c2022737570706c7920636170223a202200000000000000000000000000006014918401918201528751615138816026840160208c01614238565b7f222c202261646d696e2028696429223a20220000000000000000000000000000602692909101918201528651615176816038840160208b01614238565b7f222c202261646d696e202870726574747920696429223a2022000000000000006038929091019182015285516151b4816051840160208a01614238565b7f222c2022656c69676962696c6974792061646472657373223a202200000000006051929091019182015284516151f281606c840160208901614238565b61525961523061522a606c848601017f222c2022746f67676c652061646472657373223a202200000000000000000000815260160190565b87614d83565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a2022000000000000000081526000885161529f816018850160208d01614238565b7f222c2022646f6d61696e223a202200000000000000000000000000000000000060189184019182015288516152dc816026840160208d01614238565b7f222c20226964223a20220000000000000000000000000000000000000000000060269290910191820152875161531a816030840160208c01614238565b7f222c2022707265747479206964223a2022000000000000000000000000000000603092909101918201528651615358816041840160208b01614238565b7f222c2022737461747573223a2022000000000000000000000000000000000000604192909101918201526152596153fd6153f76153ce6153c861539f604f87018c614d83565b7f222c2022696d616765223a2022000000000000000000000000000000000000008152600d0190565b89614d83565b7f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b86614d83565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161545e81601d850160208701614238565b91909101601d0192915050565b600063ffffffff821680614f7257614f72614d3b565b601f8211156154cb57600081815260208120601f850160051c810160208610156154a85750805b601f850160051c820191505b818110156154c7578281556001016154b4565b5050505b505050565b815167ffffffffffffffff8111156154ea576154ea6144f7565b6154fe816154f88454614ce8565b84615481565b602080601f831160018114615551576000841561551b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556154c7565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561559e5788860151825594840194600190910190840161557f565b50858210156155da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b86815260c06020820152600061560360c083018861425c565b63ffffffff8716604084015273ffffffffffffffffffffffffffffffffffffffff86811660608501528516608084015282810360a0840152610dce818561425c565b60008261567b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122052320c4bcd98e37bd6159591c58f2761d4bf834a0e48918dd19945779164d93a64736f6c63430008100033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203400000000000000000000000000000000000000000000000000000000000000000000000000000000000b686174732d62657461343a000000000000000000000000000000000000000000", - "nonce": "0x1", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0x84f96f9d709ab9e84737111265a98bf0e3ddd5b13a891e3b07093dd4ead0b9b1", - "transactionIndex": "0x33", - "blockHash": "0xfa753c322bd052006b84058857d05836f60a2d9aa094963443fa6109c96ef3d1", - "blockNumber": "0x20b6547", - "from": "0xf48928b8d6C04122778aD74C64886D972decA39F", - "to": null, - "cumulativeGasUsed": "0xad8457", - "gasUsed": "0x4aa3a7", - "contractAddress": "0xE81597289A249aE725c2D80E7848DbFa9708c22D", - "logs": [ - { - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x000000000000000000000000f48928b8d6c04122778ad74c64886d972deca39f", - "0x0000000000000000000000007c7379531b2aee82e4ca06d4175d13b9cbeafd49" - ], - "data": "0x00000000000000000000000000000000000000000000000002f564d258cdd16b0000000000000000000000000000000000000000000000008475758934c0eb30000000000000000000000000000000000000000000018ae04a33eac7ed63e852000000000000000000000000000000000000000000000000818010b6dbf319c5000000000000000000000000000000000000000000018ae04d294f9a4631b9bd", - "blockHash": "0xfa753c322bd052006b84058857d05836f60a2d9aa094963443fa6109c96ef3d1", - "blockNumber": "0x20b6547", - "transactionHash": "0x84f96f9d709ab9e84737111265a98bf0e3ddd5b13a891e3b07093dd4ead0b9b1", - "transactionIndex": "0x33", - "logIndex": "0xbe", - "removed": false - } - ], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000008000000000000000000000000000000000000000000000000004000000800000000000400000000100000000000000000000000000000000100000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000100000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", - "type": "0x2", - "effectiveGasPrice": "0x1ddb7cd379" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/137/run-latest.json", - "returns": {}, - "timestamp": 1665682702, - "commit": "d9680e9" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/137/run-latest.json b/broadcast/Hats.s.sol/137/run-latest.json deleted file mode 100644 index 31d7b45..0000000 --- a/broadcast/Hats.s.sol/137/run-latest.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x84f96f9d709ab9e84737111265a98bf0e3ddd5b13a891e3b07093dd4ead0b9b1", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0xE81597289A249aE725c2D80E7848DbFa9708c22D", - "function": null, - "arguments": [ - "Hats Protocol - Beta 4", - "hats-beta4:" - ], - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x6107f2", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b50604051620059ea380380620059ea83398101604081905262000034916200011f565b600262000042838262000218565b50600462000051828262000218565b505050620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b600093810190920192909252949350505050565b600080604083850312156200013357600080fd5b82516001600160401b03808211156200014b57600080fd5b620001598683870162000070565b935060208501519150808211156200017057600080fd5b506200017f8582860162000070565b9150509250929050565b600181811c908216806200019e57607f821691505b602082108103620001bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021357600081815260208120601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b038111156200023457620002346200005a565b6200024c8162000245845462000189565b84620001c5565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6156f680620002f46000396000f3fe608060405234801561001057600080fd5b50600436106102915760003560e01c80639011771f11610160578063d3272ba8116100d8578063e76913851161008c578063f242432a11610071578063f242432a146105df578063fb2aaa4c146105ed578063fc3e05a41461061257600080fd5b8063e76913851461059e578063e985e9c5146105b157600080fd5b8063d80a8434116100bd578063d80a843414610565578063dd8298da14610578578063e33dd5c91461058b57600080fd5b8063d3272ba81461052b578063d395acf81461053e57600080fd5b8063a2be079b1161012f578063afaae55a11610114578063afaae55a146104f2578063b56f756214610505578063c43dc1771461051857600080fd5b8063a2be079b146104b1578063a4a1f06c146104df57600080fd5b80639011771f146104505780639dd22c9f14610463578063a109635614610476578063a22cb4651461049e57600080fd5b80634e1273f41161020e57806374f82e30116101c25780637fd6b55f116101a75780637fd6b55f1461041757806382afd23b1461042a578063854cc0491461043d57600080fd5b806374f82e30146103fc5780637a9df89f1461040457600080fd5b806354a1826c116101f357806354a1826c1461039b578063641f776e146103ae5780637178fb51146103c157600080fd5b80634e1273f41461036857806352a6b2651461038857600080fd5b80631183a8c0116102655780633fa9d5441161024a5780633fa9d5441461032f5780634352409a1461034257806345fffac81461035557600080fd5b80631183a8c0146103075780632eb2c2d61461031a57600080fd5b8062fdd58e1461029657806301ffc9a7146102bc57806306fdde03146102df5780630e89341c146102f4575b600080fd5b6102a96102a43660046141cc565b610622565b6040519081526020015b60405180910390f35b6102cf6102ca3660046141f6565b610863565b60405190151581526020016102b3565b6102e7610948565b6040516102b391906142a6565b6102e76103023660046142b9565b6109d6565b6102a96103153660046142b9565b6109e1565b61032d610328366004614360565b610a30565b005b6102cf61033d36600461441b565b610a62565b6102cf6103503660046141cc565b610ddb565b6102cf6103633660046142b9565b610df2565b61037b610376366004614447565b610e21565b6040516102b391906144b3565b6102cf610396366004614666565b610f9d565b6102cf6103a93660046141cc565b611040565b6102cf6103bc36600461441b565b6113ab565b6103e76103cf3660046142b9565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016102b3565b6102e76116fd565b61032d6104123660046142b9565b61170a565b6102a96104253660046146ca565b611791565b6102cf6104383660046142b9565b611830565b6102a961044b3660046147a2565b611a1c565b6102a961045e3660046142b9565b611b1a565b6102a9610471366004614840565b611b3b565b610489610484366004614884565b611bb9565b604080519283526020830191909152016102b3565b61032d6104ac36600461491e565b611be3565b6102cf6104bf36600461441b565b600760209081526000928352604080842090915290825290205460ff1681565b61032d6104ed36600461494a565b611c15565b6102cf610500366004614986565b611d9c565b6102cf6105133660046141cc565b612000565b6102cf6105263660046149d7565b612082565b6102cf6105393660046142b9565b6120ed565b61055161054c3660046142b9565b612446565b6040516102b39897969594939291906149fc565b6102cf6105733660046141cc565b61269d565b6102cf610586366004614b5e565b61288a565b6102e76105993660046142b9565b6129d0565b6102a96105ac3660046146ca565b612e8d565b6102cf6105bf366004614c46565b600160209081526000928352604080842090915290825290205460ff1681565b61032d610328366004614c70565b6106006105fb3660046142b9565b612ed7565b60405160ff90911681526020016102b3565b6003546103e79063ffffffff1681565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916106ee90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90614ce8565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050815260200160038201805461078090614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90614ce8565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b5050505050815250509050600091506108128184612f4c565b8015610824575061082484828561308d565b1561085c5773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806108f657507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061094257507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6002805461095590614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461098190614ce8565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b505050505081565b60606109428261322e565b6000818152600560205260408120548190610a1d90790100000000000000000000000000000000000000000000000000900460ff166001614d6a565b9050610a298382611791565b9392505050565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610b2e90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5a90614ce8565b8015610ba75780601f10610b7c57610100808354040283529160200191610ba7565b820191906000526020600020905b815481529060010190602001808311610b8a57829003601f168201915b50505050508152602001600382018054610bc090614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec90614ce8565b8015610c395780601f10610c0e57610100808354040283529160200191610c39565b820191906000526020600020905b815481529060010190602001808311610c1c57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690610d1a908590614d9f565b600060405180830381855afa9150503d8060008114610d55576040519150601f19603f3d011682016040523d82523d6000602084013e610d5a565b606091505b5091509150818015610d6d575060008151115b15610d905780806020019051810190610d869190614dbb565b9095509350610dc2565b6040517f07a084fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dce898987876135e9565b9998505050505050505050565b60006001610de98484610622565b10159392505050565b600080821180156109425750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff811115610eaa57610eaa6144f7565b604051908082528060200260200182016040528015610ed3578160200160208202803683370190505b50905060005b84811015610f9457600080878784818110610ef657610ef6614dea565b9050602002016020810190610f0b9190614e19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610f5957610f59614dea565b90506020020135815260200190815260200160002054828281518110610f8157610f81614dea565b6020908102919091010152600101610ed9565b50949350505050565b81518151600091908114610fdd576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561103557611024858281518110610ffd57610ffd614dea565b602002602001015185838151811061101757611017614dea565b60200260200101516113ab565b5061102e81614e34565b9050610fe0565b506001949350505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161110c90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461113890614ce8565b80156111855780601f1061115a57610100808354040283529160200191611185565b820191906000526020600020905b81548152906001019060200180831161116857829003601f168201915b5050505050815260200160038201805461119e90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546111ca90614ce8565b80156112175780601f106111ec57610100808354040283529160200191611217565b820191906000526020600020905b8154815290600101906020018083116111fa57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff87166024820152604481018690529192506000916064019050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905283519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906112f5908590614d9f565b600060405180830381855afa9150503d8060008114611330576040519150601f19603f3d011682016040523d82523d6000602084013e611335565b606091505b5091509150818015611348575060008151115b1561136a57808060200190518101906113619190614dbb565b95506113a19050565b600086815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161594505b5050505092915050565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161147790614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546114a390614ce8565b80156114f05780601f106114c5576101008083540402835291602001916114f0565b820191906000526020600020905b8154815290600101906020018083116114d357829003601f168201915b5050505050815260200160038201805461150990614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461153590614ce8565b80156115825780601f1061155757610100808354040283529160200191611582565b820191906000526020600020905b81548152906001019060200180831161156557829003601f168201915b5050505050815250509050806020015163ffffffff166000036115d4576040517fae23181400000000000000000000000000000000000000000000000000000000815260048101859052602401610e88565b6115de3385612000565b61161d576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101859052604401610e88565b6020808201516000868152600690925260409091205463ffffffff918216911610611677576040517f0cd96ab800000000000000000000000000000000000000000000000000000000815260048101859052602401610e88565b6116818385610ddb565b156116d7576040517f643d208300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101859052604401610e88565b6116f38385600160405180602001604052806000815250613706565b5060019392505050565b6004805461095590614ce8565b6117143382610ddb565b61174a576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61175633826001613817565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b60008060005b601c811015611828576117ab816008614e6c565b6117b6906020614ea9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c915081851660000361181857806117f26001601c614ebc565b6117fc9190614ebc565b611807906008614e6c565b8460ff16901b851792505050610942565b61182181614e34565b9050611797565b505092915050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916118fc90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461192890614ce8565b80156119755780601f1061194a57610100808354040283529160200191611975565b820191906000526020600020905b81548152906001019060200180831161195857829003601f168201915b5050505050815260200160038201805461198e90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546119ba90614ce8565b8015611a075780601f106119dc57610100808354040283529160200191611a07565b820191906000526020600020905b8154815290600101906020018083116119ea57829003601f168201915b5050505050815250509050610a298184612f4c565b600060ff871615611a59576040517f7c9225c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a62876109e1565b9050611a6e3382612000565b611aad576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101829052604401610e88565b611abb81878787878761391a565b5060008781526005602052604090208054601990611af890790100000000000000000000000000000000000000000000000000900460ff16614ecf565b91906101000a81548160ff021916908360ff1602179055509695505050505050565b6000611b28601c6008614e6c565b611b33836000612e8d565b901c92915050565b6003805460009160e0918390611b569063ffffffff16614eee565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050611b9c816040518060200160405280600081525060016000808761391a565b506109428382600160405180602001604052806000815250613706565b600080611bc63385611b3b565b9150611bd6828989898988611a1c565b9050965096945050505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c1f3384612000565b611c55576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020818152604080832086845290915290205460011115611cbe576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020818152604080832086845290915281208054909190611cfa90614f11565b9091555073ffffffffffffffffffffffffffffffffffffffff811660009081526020818152604080832086845290915281208054909190611d3a90614e34565b90915550604080518481526001602082015273ffffffffffffffffffffffffffffffffffffffff808416929085169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a4505050565b6000848152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611e6890614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9490614ce8565b8015611ee15780601f10611eb657610100808354040283529160200191611ee1565b820191906000526020600020905b815481529060010190602001808311611ec457829003601f168201915b50505050508152602001600382018054611efa90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2690614ce8565b8015611f735780601f10611f4857610100808354040283529160200191611f73565b820191906000526020600020905b815481529060010190602001808311611f5657829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe7576040517fef3da15100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ff3868686866135e9565b5060019695505050505050565b600061200b82610df2565b156120215761201a8383610ddb565b9050610942565b6000600161202e84612ed7565b6120389190614f46565b90505b60ff81161561207357612052846103508584612e8d565b15612061576001915050610942565b8061206b81614f5f565b91505061203b565b61085984610350856000612e8d565b6000828152600560205260408120600181015473ffffffffffffffffffffffffffffffffffffffff1633146120e3576040517f14b35e7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598484613b83565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916121b990614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546121e590614ce8565b80156122325780601f1061220757610100808354040283529160200191612232565b820191906000526020600020905b81548152906001019060200180831161221557829003601f168201915b5050505050815260200160038201805461224b90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461227790614ce8565b80156122c45780601f10612299576101008083540402835291602001916122c4565b820191906000526020600020905b8154815290600101906020018083116122a757829003601f168201915b5050505050815250509050600080846040516024016122e591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061238c908590614d9f565b600060405180830381855afa9150503d80600081146123c7576040519150601f19603f3d011682016040523d82523d6000602084013e6123cc565b606091505b50915091508180156123df575060008151115b156123ff57808060200190518101906123f89190614f9a565b9350612431565b6040517fa41f929c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61243b8785613b83565b979650505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949384938493849388938593849384939192909160a084019161252890614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461255490614ce8565b80156125a15780601f10612576576101008083540402835291602001916125a1565b820191906000526020600020905b81548152906001019060200180831161258457829003601f168201915b505050505081526020016003820180546125ba90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546125e690614ce8565b80156126335780601f1061260857610100808354040283529160200191612633565b820191906000526020600020905b81548152906001019060200180831161261657829003601f168201915b5050509190925250505060a081015160208083015160008e8152600690925260409091205483516080850151939d50919b5063ffffffff16995097509550905061267c8a6129d0565b93508060600151925061268f818b612f4c565b915050919395975091939597565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161276990614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461279590614ce8565b80156127e25780601f106127b7576101008083540402835291602001916127e2565b820191906000526020600020905b8154815290600101906020018083116127c557829003601f168201915b505050505081526020016003820180546127fb90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461282790614ce8565b80156128745780601f1061284957610100808354040283529160200191612874565b820191906000526020600020905b81548152906001019060200180831161285757829003601f168201915b505050505081525050905061085984828561308d565b6000808751905060008751821480156128a35750865182145b80156128af5750855182145b80156128bb5750845182145b80156128c75750835182145b905080612900576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156129c0576129af8a828151811061292057612920614dea565b60200260200101518a838151811061293a5761293a614dea565b60200260200101518a848151811061295457612954614dea565b60200260200101518a858151811061296e5761296e614dea565b60200260200101518a868151811061298857612988614dea565b60200260200101518a87815181106129a2576129a2614dea565b6020026020010151611a1c565b506129b981614e34565b9050612903565b5060019998505050505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190612aa190614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612acd90614ce8565b8015612b1a5780601f10612aef57610100808354040283529160200191612b1a565b820191906000526020600020905b815481529060010190602001808311612afd57829003601f168201915b50505050508152602001600382018054612b3390614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5f90614ce8565b8015612bac5780601f10612b8157610100808354040283529160200191612bac565b820191906000526020600020905b815481529060010190602001808311612b8f57829003601f168201915b5050509190925250505060c081015180519192509015612bef5780604051602001612bd79190614fb7565b60405160208183030381529060405292505050919050565b6000612bfa85612ed7565b60ff169050805b8015612e57576000612c18876105ac600185614ebc565b600081815260056020908152604091829020825160e081018452815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169483019490945260ff78010000000000000000000000000000000000000000000000008204811615159583019590955279010000000000000000000000000000000000000000000000000090049093166060840152600181015490911660808301526002810180549394509192909160a0840191612ce990614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1590614ce8565b8015612d625780601f10612d3757610100808354040283529160200191612d62565b820191906000526020600020905b815481529060010190602001808311612d4557829003601f168201915b50505050508152602001600382018054612d7b90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612da790614ce8565b8015612df45780601f10612dc957610100808354040283529160200191612df4565b820191906000526020600020905b815481529060010190602001808311612dd757829003601f168201915b50505050508152505094508460c001519350600084511115612e465783612e1a88613c4a565b604051602001612e2b929190614ff8565b60405160208183030381529060405295505050505050919050565b50612e5081614f11565b9050612c01565b506004612e6386613c4a565b604051602001612e74929190615027565b6040516020818303038152906040529350505050919050565b600080612e9e60ff8416601c614ebc565b612ea9906008614e6c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901b841691505092915050565b60008060005b601c811015612f4257612ef1816008614e6c565b612efc906020614ea9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c9150818416600003612f32579392505050565b612f3b81614e34565b9050612edd565b50601c9392505050565b60008082604051602401612f6291815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690613009908590614d9f565b600060405180830381855afa9150503d8060008114613044576040519150601f19603f3d011682016040523d82523d6000602084013e613049565b606091505b509150915081801561305c575060008151115b1561307c57808060200190518101906130759190614f9a565b9350613084565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061315f908590614d9f565b600060405180830381855afa9150503d806000811461319a576040519150601f19603f3d011682016040523d82523d6000602084013e61319f565b606091505b50915091508180156131b2575060008151115b156131ed576000818060200190518101906131cd9190614dbb565b90955090508480156131dd575080155b156131e757600094505b50613224565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a0840191906132ff90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461332b90614ce8565b80156133785780601f1061334d57610100808354040283529160200191613378565b820191906000526020600020905b81548152906001019060200180831161335b57829003601f168201915b5050505050815260200160038201805461339190614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546133bd90614ce8565b801561340a5780601f106133df5761010080835404028352916020019161340a565b820191906000526020600020905b8154815290600101906020018083116133ed57829003601f168201915b5050505050815250509050600061342084610df2565b1561342c575082613448565b61344584600161343b87612ed7565b6105ac9190614f46565b90505b600061345b61345686611b1a565b613c4a565b6000868152600660205260408120549192509061347d9063ffffffff16613c4a565b613490856020015163ffffffff16613c4a565b61349985613c4a565b6134a4866020613d08565b87516134af90613f4b565b6134bc8960800151613f4b565b6040516020016134d1969594939291906150c3565b604051602081830303815290604052905060006134ee8588612f4c565b61352d576040518060400160405280600881526020017f696e616374697665000000000000000000000000000000000000000000000000815250613564565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006135ba8660a001518561357a8b613c4a565b6135858c6020613d08565b8661358f8e6129d0565b896040516020016135a69796959493929190615267565b604051602081830303815290604052613f6e565b9050806040516020016135cd9190615426565b6040516020818303038152906040529650505050505050919050565b60008215806135f6575081155b156136075761360784866001613817565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff161515821515036136a05750600084815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020818152604080832086845290915281208054849290613744908490614ea9565b90915550506000838152600660205260408120805490919061376b9063ffffffff16614eee565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051613809929190918252602082015260400190565b60405180910390a450505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290613855908490614ebc565b90915550506000828152600660205260408120805490919061387c9063ffffffff1661546b565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611d8f929190918252602082015260400190565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c0810191909152858160a0018190525084816020019063ffffffff16908163ffffffff168152505083816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160c001819052506001816040019015159081151581525050806005600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548160ff02191690831515021790555060608201518160000160196101000a81548160ff021916908360ff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816002019081613b1f91906154d0565b5060c08201516003820190613b3490826154d0565b509050507fec3ffd1c8b2d500049d00ade82ead8a9f4aeeeab4b37fb8913380cce862a99ed878787878787604051613b71969594939291906155ea565b60405180910390a19695505050505050565b600082815260056020526040812080547801000000000000000000000000000000000000000000000000900460ff1615158315151461085c5780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b60606000613c57836140c1565b600101905060008167ffffffffffffffff811115613c7757613c776144f7565b6040519080825280601f01601f191660200182016040528015613ca1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613cab57509392505050565b60606000613d17836002614e6c565b613d22906002614ea9565b67ffffffffffffffff811115613d3a57613d3a6144f7565b6040519080825280601f01601f191660200182016040528015613d64576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613d9b57613d9b614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613dfe57613dfe614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613e3a846002614e6c565b613e45906001614ea9565b90505b6001811115613ee2577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613e8657613e86614dea565b1a60f81b828281518110613e9c57613e9c614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613edb81614f11565b9050613e48565b508315610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e88565b606061094273ffffffffffffffffffffffffffffffffffffffff83166014613d08565b60608151600003613f8d57505060408051602081019091526000815290565b60006040518060600160405280604081526020016156816040913990506000600384516002613fbc9190614ea9565b613fc69190615645565b613fd1906004614e6c565b67ffffffffffffffff811115613fe957613fe96144f7565b6040519080825280601f01601f191660200182016040528015614013576020820181803683370190505b509050600182016020820185865187015b8082101561407f576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250614024565b505060038651066001811461409b57600281146140ae576140b6565b603d6001830353603d60028303536140b6565b603d60018303535b509195945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061410a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614136576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061415457662386f26fc10000830492506010015b6305f5e100831061416c576305f5e100830492506008015b612710831061418057612710830492506004015b60648310614192576064830492506002015b600a83106109425760010192915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146141c757600080fd5b919050565b600080604083850312156141df57600080fd5b6141e8836141a3565b946020939093013593505050565b60006020828403121561420857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a2957600080fd5b60005b8381101561425357818101518382015260200161423b565b50506000910152565b60008151808452614274816020860160208601614238565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a29602083018461425c565b6000602082840312156142cb57600080fd5b5035919050565b60008083601f8401126142e457600080fd5b50813567ffffffffffffffff8111156142fc57600080fd5b6020830191508360208260051b850101111561431757600080fd5b9250929050565b60008083601f84011261433057600080fd5b50813567ffffffffffffffff81111561434857600080fd5b60208301915083602082850101111561431757600080fd5b60008060008060008060008060a0898b03121561437c57600080fd5b614385896141a3565b975061439360208a016141a3565b9650604089013567ffffffffffffffff808211156143b057600080fd5b6143bc8c838d016142d2565b909850965060608b01359150808211156143d557600080fd5b6143e18c838d016142d2565b909650945060808b01359150808211156143fa57600080fd5b506144078b828c0161431e565b999c989b5096995094979396929594505050565b6000806040838503121561442e57600080fd5b8235915061443e602084016141a3565b90509250929050565b6000806000806040858703121561445d57600080fd5b843567ffffffffffffffff8082111561447557600080fd5b614481888389016142d2565b9096509450602087013591508082111561449a57600080fd5b506144a7878288016142d2565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156144eb578351835292840192918401916001016144cf565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561456d5761456d6144f7565b604052919050565b600067ffffffffffffffff82111561458f5761458f6144f7565b5060051b60200190565b600082601f8301126145aa57600080fd5b813560206145bf6145ba83614575565b614526565b82815260059290921b840181019181810190868411156145de57600080fd5b8286015b848110156145f957803583529183019183016145e2565b509695505050505050565b600082601f83011261461557600080fd5b813560206146256145ba83614575565b82815260059290921b8401810191818101908684111561464457600080fd5b8286015b848110156145f957614659816141a3565b8352918301918301614648565b6000806040838503121561467957600080fd5b823567ffffffffffffffff8082111561469157600080fd5b61469d86838701614599565b935060208501359150808211156146b357600080fd5b506146c085828601614604565b9150509250929050565b600080604083850312156146dd57600080fd5b82359150602083013560ff811681146146f557600080fd5b809150509250929050565b600082601f83011261471157600080fd5b813567ffffffffffffffff81111561472b5761472b6144f7565b61475c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614526565b81815284602083860101111561477157600080fd5b816020850160208301376000918101602001919091529392505050565b803563ffffffff811681146141c757600080fd5b60008060008060008060c087890312156147bb57600080fd5b86359550602087013567ffffffffffffffff808211156147da57600080fd5b6147e68a838b01614700565b96506147f460408a0161478e565b955061480260608a016141a3565b945061481060808a016141a3565b935060a089013591508082111561482657600080fd5b5061483389828a01614700565b9150509295509295509295565b6000806040838503121561485357600080fd5b61485c836141a3565b9150602083013567ffffffffffffffff81111561487857600080fd5b6146c085828601614700565b60008060008060008060c0878903121561489d57600080fd5b863567ffffffffffffffff808211156148b557600080fd5b6148c18a838b01614700565b97506148cf60208a0161478e565b96506148dd60408a016141a3565b95506148eb60608a016141a3565b9450608089013591508082111561490157600080fd5b6148108a838b01614700565b801515811461491b57600080fd5b50565b6000806040838503121561493157600080fd5b61493a836141a3565b915060208301356146f58161490d565b60008060006060848603121561495f57600080fd5b8335925061496f602085016141a3565b915061497d604085016141a3565b90509250925092565b6000806000806080858703121561499c57600080fd5b843593506149ac602086016141a3565b925060408501356149bc8161490d565b915060608501356149cc8161490d565b939692955090935050565b600080604083850312156149ea57600080fd5b8235915060208301356146f58161490d565b6000610100808352614a108184018c61425c565b63ffffffff8b811660208601528a16604085015273ffffffffffffffffffffffffffffffffffffffff89811660608601528816608085015283810360a08501529050614a5c818761425c565b60ff9590951660c0840152505090151560e0909101529695505050505050565b600082601f830112614a8d57600080fd5b81356020614a9d6145ba83614575565b82815260059290921b84018101918181019086841115614abc57600080fd5b8286015b848110156145f957803567ffffffffffffffff811115614ae05760008081fd5b614aee8986838b0101614700565b845250918301918301614ac0565b600082601f830112614b0d57600080fd5b81356020614b1d6145ba83614575565b82815260059290921b84018101918181019086841115614b3c57600080fd5b8286015b848110156145f957614b518161478e565b8352918301918301614b40565b60008060008060008060c08789031215614b7757600080fd5b863567ffffffffffffffff80821115614b8f57600080fd5b614b9b8a838b01614599565b97506020890135915080821115614bb157600080fd5b614bbd8a838b01614a7c565b96506040890135915080821115614bd357600080fd5b614bdf8a838b01614afc565b95506060890135915080821115614bf557600080fd5b614c018a838b01614604565b94506080890135915080821115614c1757600080fd5b614c238a838b01614604565b935060a0890135915080821115614c3957600080fd5b5061483389828a01614a7c565b60008060408385031215614c5957600080fd5b614c62836141a3565b915061443e602084016141a3565b60008060008060008060a08789031215614c8957600080fd5b614c92876141a3565b9550614ca0602088016141a3565b94506040870135935060608701359250608087013567ffffffffffffffff811115614cca57600080fd5b614cd689828a0161431e565b979a9699509497509295939492505050565b600181811c90821680614cfc57607f821691505b602082108103614d35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff818116838216019081111561094257610942614d3b565b60008151614d95818560208601614238565b9290920192915050565b60008251614db1818460208701614238565b9190910192915050565b60008060408385031215614dce57600080fd5b8251614dd98161490d565b60208401519092506146f58161490d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614e2b57600080fd5b610a29826141a3565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6557614e65614d3b565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea457614ea4614d3b565b500290565b8082018082111561094257610942614d3b565b8181038181111561094257610942614d3b565b600060ff821660ff8103614ee557614ee5614d3b565b60010192915050565b600063ffffffff808316818103614f0757614f07614d3b565b6001019392505050565b600081614f2057614f20614d3b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60ff828116828216039081111561094257610942614d3b565b600060ff821680614f7257614f72614d3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600060208284031215614fac57600080fd5b8151610a298161490d565b60008251614fc9818460208701614238565b7f3000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b6000835161500a818460208801614238565b83519083019061501e818360208801614238565b01949350505050565b600080845461503581614ce8565b6001828116801561504d5760018114615080576150af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841687528215158302870194506150af565b8860005260208060002060005b858110156150a65781548a82015290840190820161508d565b50505082870194505b50505050835161501e818360208801614238565b7f7b2263757272656e7420737570706c79223a20220000000000000000000000008152600087516150fb816014850160208c01614238565b7f222c2022737570706c7920636170223a202200000000000000000000000000006014918401918201528751615138816026840160208c01614238565b7f222c202261646d696e2028696429223a20220000000000000000000000000000602692909101918201528651615176816038840160208b01614238565b7f222c202261646d696e202870726574747920696429223a2022000000000000006038929091019182015285516151b4816051840160208a01614238565b7f222c2022656c69676962696c6974792061646472657373223a202200000000006051929091019182015284516151f281606c840160208901614238565b61525961523061522a606c848601017f222c2022746f67676c652061646472657373223a202200000000000000000000815260160190565b87614d83565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a2022000000000000000081526000885161529f816018850160208d01614238565b7f222c2022646f6d61696e223a202200000000000000000000000000000000000060189184019182015288516152dc816026840160208d01614238565b7f222c20226964223a20220000000000000000000000000000000000000000000060269290910191820152875161531a816030840160208c01614238565b7f222c2022707265747479206964223a2022000000000000000000000000000000603092909101918201528651615358816041840160208b01614238565b7f222c2022737461747573223a2022000000000000000000000000000000000000604192909101918201526152596153fd6153f76153ce6153c861539f604f87018c614d83565b7f222c2022696d616765223a2022000000000000000000000000000000000000008152600d0190565b89614d83565b7f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b86614d83565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161545e81601d850160208701614238565b91909101601d0192915050565b600063ffffffff821680614f7257614f72614d3b565b601f8211156154cb57600081815260208120601f850160051c810160208610156154a85750805b601f850160051c820191505b818110156154c7578281556001016154b4565b5050505b505050565b815167ffffffffffffffff8111156154ea576154ea6144f7565b6154fe816154f88454614ce8565b84615481565b602080601f831160018114615551576000841561551b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556154c7565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561559e5788860151825594840194600190910190840161557f565b50858210156155da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b86815260c06020820152600061560360c083018861425c565b63ffffffff8716604084015273ffffffffffffffffffffffffffffffffffffffff86811660608501528516608084015282810360a0840152610dce818561425c565b60008261567b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122052320c4bcd98e37bd6159591c58f2761d4bf834a0e48918dd19945779164d93a64736f6c63430008100033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203400000000000000000000000000000000000000000000000000000000000000000000000000000000000b686174732d62657461343a000000000000000000000000000000000000000000", - "nonce": "0x1", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0x84f96f9d709ab9e84737111265a98bf0e3ddd5b13a891e3b07093dd4ead0b9b1", - "transactionIndex": "0x33", - "blockHash": "0xfa753c322bd052006b84058857d05836f60a2d9aa094963443fa6109c96ef3d1", - "blockNumber": "0x20b6547", - "from": "0xf48928b8d6C04122778aD74C64886D972decA39F", - "to": null, - "cumulativeGasUsed": "0xad8457", - "gasUsed": "0x4aa3a7", - "contractAddress": "0xE81597289A249aE725c2D80E7848DbFa9708c22D", - "logs": [ - { - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x000000000000000000000000f48928b8d6c04122778ad74c64886d972deca39f", - "0x0000000000000000000000007c7379531b2aee82e4ca06d4175d13b9cbeafd49" - ], - "data": "0x00000000000000000000000000000000000000000000000002f564d258cdd16b0000000000000000000000000000000000000000000000008475758934c0eb30000000000000000000000000000000000000000000018ae04a33eac7ed63e852000000000000000000000000000000000000000000000000818010b6dbf319c5000000000000000000000000000000000000000000018ae04d294f9a4631b9bd", - "blockHash": "0xfa753c322bd052006b84058857d05836f60a2d9aa094963443fa6109c96ef3d1", - "blockNumber": "0x20b6547", - "transactionHash": "0x84f96f9d709ab9e84737111265a98bf0e3ddd5b13a891e3b07093dd4ead0b9b1", - "transactionIndex": "0x33", - "logIndex": "0xbe", - "removed": false - } - ], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000008000000000000000000000000000000000000000000000000004000000800000000000400000000100000000000000000000000000000000100000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000100000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", - "type": "0x2", - "effectiveGasPrice": "0x1ddb7cd379" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/137/run-latest.json", - "returns": {}, - "timestamp": 1665682702, - "commit": "d9680e9" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/4/run-1661264465.json b/broadcast/Hats.s.sol/4/run-1661264465.json deleted file mode 100644 index 133cda7..0000000 --- a/broadcast/Hats.s.sol/4/run-1661264465.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xf8f5e2cc6bcc6f671de8292b70e95e2260bc9a84b1a6046b8c8b0a0a50a5b9e5", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0xf55228444742e6812535bcda350167cd965121b7", - "function": null, - "arguments": null, - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x4ee79f", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b506040516200497938038062004979833981016040819052620000349162000060565b6002620000428282620001cb565b505062000297565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200007457600080fd5b82516001600160401b03808211156200008c57600080fd5b818501915085601f830112620000a157600080fd5b815181811115620000b657620000b66200004a565b604051601f8201601f19908116603f01168101908382118183101715620000e157620000e16200004a565b816040528281528886848701011115620000fa57600080fd5b600093505b828410156200011e5784840186015181850187015292850192620000ff565b82841115620001305760008684830101525b98975050505050505050565b600181811c908216806200015157607f821691505b6020821081036200017257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001c657600081815260208120601f850160051c81016020861015620001a15750805b601f850160051c820191505b81811015620001c257828155600101620001ad565b5050505b505050565b81516001600160401b03811115620001e757620001e76200004a565b620001ff81620001f884546200013c565b8462000178565b602080601f8311600181146200023757600084156200021e5750858301515b600019600386901b1c1916600185901b178555620001c2565b600085815260208120601f198616915b82811015620002685788860151825594840194600190910190840162000247565b5085821015620002875787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6146d280620002a76000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c8063a22cb46511610104578063d70343d8116100a2578063f242432a11610071578063f242432a14610486578063fb2aaa4c14610494578063fc3e05a4146104b9578063fd427358146104c957600080fd5b8063d70343d81461041f578063e769138514610432578063e985e9c514610445578063efdfb0881461047357600080fd5b8063afaae55a116100de578063afaae55a146103c0578063b56f7562146103d3578063c43dc177146103e6578063d395acf8146103f957600080fd5b8063a22cb4651461036c578063a2be079b1461037f578063a4a1f06c146103ad57600080fd5b806345fffac81161017c578063641f776e1161014b578063641f776e146102f85780637178fb511461030b5780637a9df89f1461034657806382afd23b1461035957600080fd5b806345fffac81461029f5780634e1273f4146102b257806354a1826c146102d2578063619531c7146102e557600080fd5b806306fdde03116101b857806306fdde031461024f5780630e89341c146102645780632eb2c2d6146102775780634352409a1461028c57600080fd5b8062fdd58e146101de578063018632e91461020457806301ffc9a71461022c575b600080fd5b6101f16101ec366004613669565b6104dc565b6040519081526020015b60405180910390f35b610217610212366004613781565b61068b565b604080519283526020830191909152016101fb565b61023f61023a3660046137f0565b6106b1565b60405190151581526020016101fb565b610257610796565b6040516101fb91906138ac565b6102576102723660046138bf565b610824565b61028a610285366004613966565b61082f565b005b61023f61029a366004613669565b610861565b61023f6102ad3660046138bf565b610878565b6102c56102c0366004613a21565b6108a7565b6040516101fb9190613a8d565b61023f6102e0366004613669565b610a23565b6101f16102f3366004613ad1565b610b7e565b61023f610306366004613aec565b610c00565b6103316103193660046138bf565b60056020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101fb565b61028a6103543660046138bf565b610e57565b61023f6103673660046138bf565b610ede565b61028a61037a366004613b29565b61103f565b61023f61038d366004613aec565b600660209081526000928352604080842090915290825290205460ff1681565b61028a6103bb366004613b60565b611071565b61023f6103ce366004613b9c565b6111d5565b61023f6103e1366004613669565b6113a7565b61023f6103f4366004613bed565b611422565b61040c6104073660046138bf565b61148d565b6040516101fb9796959493929190613c12565b61023f61042d366004613aec565b611648565b6101f1610440366004613c78565b61192f565b61023f610453366004613ca3565b600160209081526000928352604080842090915290825290205460ff1681565b6101f1610481366004613ccd565b61197b565b61028a610285366004613d46565b6104a76104a23660046138bf565b611a77565b60405160ff90911681526020016101fb565b6003546103319063ffffffff1681565b61023f6104d73660046138bf565b611dd7565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916105a890613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546105d490613dbe565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b50505050508152505090506000915061063a818461209e565b801561064c575061064c8482856121df565b156106845773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60008061069733610b7e565b91506106a6828787878761197b565b905094509492505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061074457507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061079057507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600280546107a390613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546107cf90613dbe565b801561081c5780601f106107f15761010080835404028352916020019161081c565b820191906000526020600020905b8154815290600101906020018083116107ff57829003601f168201915b505050505081565b606061079082612367565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600161086f84846104dc565b10159392505050565b600080821180156107905750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff81111561093057610930613693565b604051908082528060200260200182016040528015610959578160200160208202803683370190505b50905060005b84811015610a1a5760008087878481811061097c5761097c613e11565b90506020020160208101906109919190613ad1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008585848181106109df576109df613e11565b90506020020135815260200190815260200160002054828281518110610a0757610a07613e11565b602090810291909101015260010161095f565b50949350505050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610aef90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1b90613dbe565b8015610b685780601f10610b3d57610100808354040283529160200191610b68565b820191906000526020600020905b815481529060010190602001808311610b4b57829003601f168201915b50505050508152505090506106818482856121df565b6003805460009160e0918390610b999063ffffffff16613e6f565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050610bde8160405180602001604052806000815250600160008061268c565b50610bfb828260016040518060200160405280600081525061288f565b919050565b6000828152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610ccc90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf890613dbe565b8015610d455780601f10610d1a57610100808354040283529160200191610d45565b820191906000526020600020905b815481529060010190602001808311610d2857829003601f168201915b5050505050815250509050610d5a33856113a7565b610d99576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810185905260440161090e565b6020808201516000868152600590925260409091205463ffffffff918216911610610df0576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dfa8385610861565b15610e31576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4d838560016040518060200160405280600081525061288f565b5060019392505050565b610e613382610861565b610e97576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ea333826001612992565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610faa90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd690613dbe565b80156110235780601f10610ff857610100808354040283529160200191611023565b820191906000526020600020905b81548152906001019060200180831161100657829003601f168201915b5050505050815250509050611038818461209e565b9392505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61107b33846113a7565b6110b1576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260016110be84836104dc565b10156110f6576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208484529091528120805490919061113290613e92565b9091555073ffffffffffffffffffffffffffffffffffffffff82166000908152602081815260408083208484529091528120805490919061117290613ec7565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916112a190613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546112cd90613dbe565b801561131a5780601f106112ef5761010080835404028352916020019161131a565b820191906000526020600020905b8154815290600101906020018083116112fd57829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138e576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139a86868686612aa2565b5060019695505050505050565b60006113b282610878565b156113bf57506000610790565b600060016113cc84611a77565b6113d69190613eff565b90505b60018160ff1610611413576113f28461029a858461192f565b15611401576001915050610790565b8061140b81613f22565b9150506113d9565b6106818461029a85600061192f565b6000828152600460205260408120600181015473ffffffffffffffffffffffffffffffffffffffff163314611483576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106818484612bb5565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff7801000000000000000000000000000000000000000000000000820481161515948301949094527901000000000000000000000000000000000000000000000000009004909216606083810191909152600182015490931660808301526002810180549394938493849384938493849384939092909160a08401919061156e90613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461159a90613dbe565b80156115e75780601f106115bc576101008083540402835291602001916115e7565b820191906000526020600020905b8154815290600101906020018083116115ca57829003601f168201915b5050509190925250505060a081015160208083015160008d81526005909252604090912054835160808501516060860151949d50929b5063ffffffff9091169950975095509350905061163a818a61209e565b915050919395979092949650565b6000828152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161171490613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461174090613dbe565b801561178d5780601f106117625761010080835404028352916020019161178d565b820191906000526020600020905b81548152906001019060200180831161177057829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061186e908590613f79565b600060405180830381855afa9150503d80600081146118a9576040519150601f19603f3d011682016040523d82523d6000602084013e6118ae565b606091505b50915091508180156118c1575060008151115b156118e457808060200190518101906118da9190613f95565b9095509350611916565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61192289898787612aa2565b9998505050505050505050565b60008061193d83601c613eff565b611948906008613fc4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b60006119873387610861565b6119c6576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810187905260440161090e565b60ff861615611a01576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a0a86612c7c565b9050611a19818686868661268c565b5060008681526004602052604090208054601990611a5690790100000000000000000000000000000000000000000000000000900460ff16613fed565b91906101000a81548160ff021916908360ff16021790555095945050505050565b600060ff821615611a8a5750601c919050565b61ffff821615611a9c5750601b919050565b62ffffff821615611aaf5750601a919050565b63ffffffff821615611ac357506019919050565b64ffffffffff821615611ad857506018919050565b65ffffffffffff821615611aee57506017919050565b66ffffffffffffff821615611b0557506016919050565b67ffffffffffffffff821615611b1d57506015919050565b68ffffffffffffffffff821615611b3657506014919050565b69ffffffffffffffffffff821615611b5057506013919050565b6affffffffffffffffffffff821615611b6b57506012919050565b6bffffffffffffffffffffffff821615611b8757506011919050565b6cffffffffffffffffffffffffff821615611ba457506010919050565b6dffffffffffffffffffffffffffff821615611bc25750600f919050565b6effffffffffffffffffffffffffffff821615611be15750600e919050565b6fffffffffffffffffffffffffffffffff821615611c015750600d919050565b70ffffffffffffffffffffffffffffffffff821615611c225750600c919050565b71ffffffffffffffffffffffffffffffffffff821615611c445750600b919050565b72ffffffffffffffffffffffffffffffffffffff821615611c675750600a919050565b73ffffffffffffffffffffffffffffffffffffffff821615611c8b57506009919050565b74ffffffffffffffffffffffffffffffffffffffffff821615611cb057506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff821615611cd657506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff821615611cfd57506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff821615611d2557506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff821615611d4e57506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff821615611d7857506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff821615611da357506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615611dcf57506001919050565b506000919050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611ea390613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecf90613dbe565b8015611f1c5780601f10611ef157610100808354040283529160200191611f1c565b820191906000526020600020905b815481529060010190602001808311611eff57829003601f168201915b505050505081525050905060008084604051602401611f3d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611fe4908590613f79565b600060405180830381855afa9150503d806000811461201f576040519150601f19603f3d011682016040523d82523d6000602084013e612024565b606091505b5091509150818015612037575060008151115b156120575780806020019051810190612050919061400c565b9350612089565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120938785612bb5565b979650505050505050565b600080826040516024016120b491815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061215b908590613f79565b600060405180830381855afa9150503d8060008114612196576040519150601f19603f3d011682016040523d82523d6000602084013e61219b565b606091505b50915091508180156121ae575060008151115b156121ce57808060200190518101906121c7919061400c565b93506121d6565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906122b1908590613f79565b600060405180830381855afa9150503d80600081146122ec576040519150601f19603f3d011682016040523d82523d6000602084013e6122f1565b606091505b5091509150818015612304575060008151115b15612326578080602001905181019061231d9190613f95565b945061235d9050565b600085815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a08401919061243890613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461246490613dbe565b80156124b15780601f10612486576101008083540402835291602001916124b1565b820191906000526020600020905b81548152906001019060200180831161249457829003601f168201915b505050505081525050905060006124c784610878565b156124d35750826124ef565b6124ec8460016124e287611a77565b6104409190613eff565b90505b600061250860e061250187600061192f565b901c61314f565b6000868152600560205260408120549192509061252a9063ffffffff1661314f565b61253d856020015163ffffffff1661314f565b6125468561314f565b61255186602061328c565b875161255c906134cf565b61256989608001516134cf565b60405160200161257e96959493929190614029565b6040516020818303038152906040529050600061259b858861209e565b6125da576040518060400160405280600881526020017f696e616374697665000000000000000000000000000000000000000000000000815250612611565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b9050600061265d8660a00151856126278b61314f565b6126328c602061328c565b8688604051602001612649969594939291906141cd565b6040516020818303038152906040526134f2565b905080604051602001612670919061435d565b6040516020818303038152906040529650505050505050919050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260a0810185815263ffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8088168652868116608087019081526001604080890182815260008f815260049096529420885181549651955160608b015160ff16790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff911515780100000000000000000000000000000000000000000000000002919091167fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff9790991674010000000000000000000000000000000000000000027fffffffffffffffff0000000000000000000000000000000000000000000000009098169186169190911796909617949094169590951793909317825591519281018054939092167fffffffffffffffffffffffff0000000000000000000000000000000000000000939093169290921790559051829190600282019061284390826143f1565b509050507f5763628556709478482c29a370cd5c5054e3e42cf0fc3050cbc8e03db29aa4fc868686868660405161287e95949392919061450b565b60405180910390a195945050505050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906128cd90849061455e565b9091555050600083815260056020526040812080549091906128f49063ffffffff16613e6f565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516111c7929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320858452909152812080548392906129d0908490614576565b9091555050600082815260056020526040812080549091906129f79063ffffffff1661458d565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612a95929190918252602082015260400190565b60405180910390a4505050565b60008215612ab657612ab684866001612992565b600085815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503612b4f5750600084815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260046020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146106845780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b6000818152600460205260408120548190612cb890790100000000000000000000000000000000000000000000000000900460ff1660016145a3565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612cf25760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d295760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d5f5760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d945760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff16600003612dc85760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff16600003612dfb5760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff16600003612e2d5760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff16600003612e5e5760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff16600003612e8e5760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff16600003612ebd5760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff16600003612eeb5760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff16600003612f185760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff16600003612f445760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff16600003612f6f5760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff16600003612f995760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff16600003612fc25760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff16600003612fea5760588160ff16901b8317915050919050565b826affffffffffffffffffffff166000036130115760508160ff16901b8317915050919050565b8269ffffffffffffffffffff166000036130375760488160ff16901b8317915050919050565b8268ffffffffffffffffff1660000361305c5760408160ff16901b8317915050919050565b8267ffffffffffffffff166000036130805760388160ff16901b8317915050919050565b8266ffffffffffffff166000036130a35760308160ff16901b8317915050919050565b8265ffffffffffff166000036130c55760288160ff16901b8317915050919050565b8264ffffffffff166000036130e65760208160ff16901b8317915050919050565b8263ffffffff166000036131065760188160ff16901b8317915050919050565b8262ffffff166000036131255760108160ff16901b8317915050919050565b8261ffff166000036131435760088160ff16901b8317915050919050565b60ff1691909117919050565b60608160000361319257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156131bc57806131a681613ec7565b91506131b59050600a836145f7565b9150613196565b60008167ffffffffffffffff8111156131d7576131d7613693565b6040519080825280601f01601f191660200182016040528015613201576020820181803683370190505b5090505b841561328457613216600183614576565b9150613223600a8661460b565b61322e90603061455e565b60f81b81838151811061324357613243613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061327d600a866145f7565b9450613205565b949350505050565b6060600061329b83600261461f565b6132a690600261455e565b67ffffffffffffffff8111156132be576132be613693565b6040519080825280601f01601f1916602001820160405280156132e8576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061331f5761331f613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061338257613382613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006133be84600261461f565b6133c990600161455e565b90505b6001811115613466577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061340a5761340a613e11565b1a60f81b82828151811061342057613420613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361345f81613e92565b90506133cc565b508315611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161090e565b606061079073ffffffffffffffffffffffffffffffffffffffff8316601461328c565b6060815160000361351157505060408051602081019091526000815290565b600060405180606001604052806040815260200161465d6040913990506000600384516002613540919061455e565b61354a91906145f7565b61355590600461461f565b67ffffffffffffffff81111561356d5761356d613693565b6040519080825280601f01601f191660200182016040528015613597576020820181803683370190505b509050600182016020820185865187015b80821015613603576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506135a8565b505060038651066001811461361f57600281146136325761363a565b603d6001830353603d600283035361363a565b603d60018303535b509195945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bfb57600080fd5b6000806040838503121561367c57600080fd5b61368583613645565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126136d357600080fd5b813567ffffffffffffffff808211156136ee576136ee613693565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561373457613734613693565b8160405283815286602085880101111561374d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff81168114610bfb57600080fd5b6000806000806080858703121561379757600080fd5b843567ffffffffffffffff8111156137ae57600080fd5b6137ba878288016136c2565b9450506137c96020860161376d565b92506137d760408601613645565b91506137e560608601613645565b905092959194509250565b60006020828403121561380257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461103857600080fd5b60005b8381101561384d578181015183820152602001613835565b8381111561385c576000848401525b50505050565b6000815180845261387a816020860160208601613832565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006110386020830184613862565b6000602082840312156138d157600080fd5b5035919050565b60008083601f8401126138ea57600080fd5b50813567ffffffffffffffff81111561390257600080fd5b6020830191508360208260051b850101111561391d57600080fd5b9250929050565b60008083601f84011261393657600080fd5b50813567ffffffffffffffff81111561394e57600080fd5b60208301915083602082850101111561391d57600080fd5b60008060008060008060008060a0898b03121561398257600080fd5b61398b89613645565b975061399960208a01613645565b9650604089013567ffffffffffffffff808211156139b657600080fd5b6139c28c838d016138d8565b909850965060608b01359150808211156139db57600080fd5b6139e78c838d016138d8565b909650945060808b0135915080821115613a0057600080fd5b50613a0d8b828c01613924565b999c989b5096995094979396929594505050565b60008060008060408587031215613a3757600080fd5b843567ffffffffffffffff80821115613a4f57600080fd5b613a5b888389016138d8565b90965094506020870135915080821115613a7457600080fd5b50613a81878288016138d8565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613ac557835183529284019291840191600101613aa9565b50909695505050505050565b600060208284031215613ae357600080fd5b61103882613645565b60008060408385031215613aff57600080fd5b82359150613b0f60208401613645565b90509250929050565b8015158114613b2657600080fd5b50565b60008060408385031215613b3c57600080fd5b613b4583613645565b91506020830135613b5581613b18565b809150509250929050565b600080600060608486031215613b7557600080fd5b83359250613b8560208501613645565b9150613b9360408501613645565b90509250925092565b60008060008060808587031215613bb257600080fd5b84359350613bc260208601613645565b92506040850135613bd281613b18565b91506060850135613be281613b18565b939692955090935050565b60008060408385031215613c0057600080fd5b823591506020830135613b5581613b18565b60e081526000613c2560e083018a613862565b63ffffffff988916602084015296909716604082015273ffffffffffffffffffffffffffffffffffffffff948516606082015292909316608083015260ff1660a082015290151560c09091015292915050565b60008060408385031215613c8b57600080fd5b82359150602083013560ff81168114613b5557600080fd5b60008060408385031215613cb657600080fd5b613cbf83613645565b9150613b0f60208401613645565b600080600080600060a08688031215613ce557600080fd5b85359450602086013567ffffffffffffffff811115613d0357600080fd5b613d0f888289016136c2565b945050613d1e6040870161376d565b9250613d2c60608701613645565b9150613d3a60808701613645565b90509295509295909350565b60008060008060008060a08789031215613d5f57600080fd5b613d6887613645565b9550613d7660208801613645565b94506040870135935060608701359250608087013567ffffffffffffffff811115613da057600080fd5b613dac89828a01613924565b979a9699509497509295939492505050565b600181811c90821680613dd257607f821691505b602082108103613e0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103613e8857613e88613e40565b6001019392505050565b600081613ea157613ea1613e40565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ef857613ef8613e40565b5060010190565b600060ff821660ff841680821015613f1957613f19613e40565b90039392505050565b600060ff821680613f3557613f35613e40565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b60008151613f6f818560208601613832565b9290920192915050565b60008251613f8b818460208701613832565b9190910192915050565b60008060408385031215613fa857600080fd5b8251613fb381613b18565b6020840151909250613b5581613b18565b600060ff821660ff84168160ff0481118215151615613fe557613fe5613e40565b029392505050565b600060ff821660ff810361400357614003613e40565b60010192915050565b60006020828403121561401e57600080fd5b815161103881613b18565b7f7b2263757272656e7420737570706c79223a2022000000000000000000000000815260008751614061816014850160208c01613832565b7f222c2022737570706c7920636170223a20220000000000000000000000000000601491840191820152875161409e816026840160208c01613832565b7f222c202261646d696e2028696429223a202200000000000000000000000000006026929091019182015286516140dc816038840160208b01613832565b7f222c202261646d696e202870726574747920696429223a20220000000000000060389290910191820152855161411a816051840160208a01613832565b7f222c20226f7261636c652061646472657373223a202200000000000000000000605192909101918201528451614158816067840160208901613832565b6141bf6141966141906067848601017f222c2022636f6e646974696f6e732061646472657373223a20220000000000008152601a0190565b87613f5d565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008751614205816018850160208c01613832565b7f222c2022646f6d61696e223a20220000000000000000000000000000000000006018918401918201528751614242816026840160208c01613832565b7f222c20226964223a202200000000000000000000000000000000000000000000602692909101918201528651614280816030840160208b01613832565b7f222c2022707265747479206964223a20220000000000000000000000000000006030929091019182015285516142be816041840160208a01613832565b7f222c2022737461747573223a20220000000000000000000000000000000000006041929091019182015284516142fc81604f840160208901613832565b6141bf614334614190604f848601017f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161439581601d850160208701613832565b91909101601d0192915050565b601f8211156143ec57600081815260208120601f850160051c810160208610156143c95750805b601f850160051c820191505b818110156143e8578281556001016143d5565b5050505b505050565b815167ffffffffffffffff81111561440b5761440b613693565b61441f816144198454613dbe565b846143a2565b602080601f831160018114614472576000841561443c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556143e8565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156144bf578886015182559484019460019091019084016144a0565b50858210156144fb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b85815260a06020820152600061452460a0830187613862565b63ffffffff9590951660408301525073ffffffffffffffffffffffffffffffffffffffff9283166060820152911660809091015292915050565b6000821982111561457157614571613e40565b500190565b60008282101561458857614588613e40565b500390565b600063ffffffff821680613f3557613f35613e40565b600060ff821660ff84168060ff038211156145c0576145c0613e40565b019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614606576146066145c8565b500490565b60008261461a5761461a6145c8565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561465757614657613e40565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122097fadf390de83cd4af64a5ba5c423dc2c55447032371de4c0503ab2c5bc3ed5564736f6c634300080f003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203100000000000000000000", - "nonce": "0x16", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [], - "libraries": [], - "pending": [ - "0xf8f5e2cc6bcc6f671de8292b70e95e2260bc9a84b1a6046b8c8b0a0a50a5b9e5" - ], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/4/run-latest.json", - "returns": {}, - "timestamp": 1661264465, - "commit": "fe20161" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/4/run-1661264479.json b/broadcast/Hats.s.sol/4/run-1661264479.json deleted file mode 100644 index 4b050d1..0000000 --- a/broadcast/Hats.s.sol/4/run-1661264479.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xf8f5e2cc6bcc6f671de8292b70e95e2260bc9a84b1a6046b8c8b0a0a50a5b9e5", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0xf55228444742e6812535bcda350167cd965121b7", - "function": null, - "arguments": null, - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x4ee79f", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b506040516200497938038062004979833981016040819052620000349162000060565b6002620000428282620001cb565b505062000297565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200007457600080fd5b82516001600160401b03808211156200008c57600080fd5b818501915085601f830112620000a157600080fd5b815181811115620000b657620000b66200004a565b604051601f8201601f19908116603f01168101908382118183101715620000e157620000e16200004a565b816040528281528886848701011115620000fa57600080fd5b600093505b828410156200011e5784840186015181850187015292850192620000ff565b82841115620001305760008684830101525b98975050505050505050565b600181811c908216806200015157607f821691505b6020821081036200017257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001c657600081815260208120601f850160051c81016020861015620001a15750805b601f850160051c820191505b81811015620001c257828155600101620001ad565b5050505b505050565b81516001600160401b03811115620001e757620001e76200004a565b620001ff81620001f884546200013c565b8462000178565b602080601f8311600181146200023757600084156200021e5750858301515b600019600386901b1c1916600185901b178555620001c2565b600085815260208120601f198616915b82811015620002685788860151825594840194600190910190840162000247565b5085821015620002875787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6146d280620002a76000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c8063a22cb46511610104578063d70343d8116100a2578063f242432a11610071578063f242432a14610486578063fb2aaa4c14610494578063fc3e05a4146104b9578063fd427358146104c957600080fd5b8063d70343d81461041f578063e769138514610432578063e985e9c514610445578063efdfb0881461047357600080fd5b8063afaae55a116100de578063afaae55a146103c0578063b56f7562146103d3578063c43dc177146103e6578063d395acf8146103f957600080fd5b8063a22cb4651461036c578063a2be079b1461037f578063a4a1f06c146103ad57600080fd5b806345fffac81161017c578063641f776e1161014b578063641f776e146102f85780637178fb511461030b5780637a9df89f1461034657806382afd23b1461035957600080fd5b806345fffac81461029f5780634e1273f4146102b257806354a1826c146102d2578063619531c7146102e557600080fd5b806306fdde03116101b857806306fdde031461024f5780630e89341c146102645780632eb2c2d6146102775780634352409a1461028c57600080fd5b8062fdd58e146101de578063018632e91461020457806301ffc9a71461022c575b600080fd5b6101f16101ec366004613669565b6104dc565b6040519081526020015b60405180910390f35b610217610212366004613781565b61068b565b604080519283526020830191909152016101fb565b61023f61023a3660046137f0565b6106b1565b60405190151581526020016101fb565b610257610796565b6040516101fb91906138ac565b6102576102723660046138bf565b610824565b61028a610285366004613966565b61082f565b005b61023f61029a366004613669565b610861565b61023f6102ad3660046138bf565b610878565b6102c56102c0366004613a21565b6108a7565b6040516101fb9190613a8d565b61023f6102e0366004613669565b610a23565b6101f16102f3366004613ad1565b610b7e565b61023f610306366004613aec565b610c00565b6103316103193660046138bf565b60056020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101fb565b61028a6103543660046138bf565b610e57565b61023f6103673660046138bf565b610ede565b61028a61037a366004613b29565b61103f565b61023f61038d366004613aec565b600660209081526000928352604080842090915290825290205460ff1681565b61028a6103bb366004613b60565b611071565b61023f6103ce366004613b9c565b6111d5565b61023f6103e1366004613669565b6113a7565b61023f6103f4366004613bed565b611422565b61040c6104073660046138bf565b61148d565b6040516101fb9796959493929190613c12565b61023f61042d366004613aec565b611648565b6101f1610440366004613c78565b61192f565b61023f610453366004613ca3565b600160209081526000928352604080842090915290825290205460ff1681565b6101f1610481366004613ccd565b61197b565b61028a610285366004613d46565b6104a76104a23660046138bf565b611a77565b60405160ff90911681526020016101fb565b6003546103319063ffffffff1681565b61023f6104d73660046138bf565b611dd7565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916105a890613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546105d490613dbe565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b50505050508152505090506000915061063a818461209e565b801561064c575061064c8482856121df565b156106845773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60008061069733610b7e565b91506106a6828787878761197b565b905094509492505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061074457507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061079057507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600280546107a390613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546107cf90613dbe565b801561081c5780601f106107f15761010080835404028352916020019161081c565b820191906000526020600020905b8154815290600101906020018083116107ff57829003601f168201915b505050505081565b606061079082612367565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600161086f84846104dc565b10159392505050565b600080821180156107905750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff81111561093057610930613693565b604051908082528060200260200182016040528015610959578160200160208202803683370190505b50905060005b84811015610a1a5760008087878481811061097c5761097c613e11565b90506020020160208101906109919190613ad1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008585848181106109df576109df613e11565b90506020020135815260200190815260200160002054828281518110610a0757610a07613e11565b602090810291909101015260010161095f565b50949350505050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610aef90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1b90613dbe565b8015610b685780601f10610b3d57610100808354040283529160200191610b68565b820191906000526020600020905b815481529060010190602001808311610b4b57829003601f168201915b50505050508152505090506106818482856121df565b6003805460009160e0918390610b999063ffffffff16613e6f565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050610bde8160405180602001604052806000815250600160008061268c565b50610bfb828260016040518060200160405280600081525061288f565b919050565b6000828152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610ccc90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf890613dbe565b8015610d455780601f10610d1a57610100808354040283529160200191610d45565b820191906000526020600020905b815481529060010190602001808311610d2857829003601f168201915b5050505050815250509050610d5a33856113a7565b610d99576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810185905260440161090e565b6020808201516000868152600590925260409091205463ffffffff918216911610610df0576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dfa8385610861565b15610e31576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4d838560016040518060200160405280600081525061288f565b5060019392505050565b610e613382610861565b610e97576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ea333826001612992565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610faa90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd690613dbe565b80156110235780601f10610ff857610100808354040283529160200191611023565b820191906000526020600020905b81548152906001019060200180831161100657829003601f168201915b5050505050815250509050611038818461209e565b9392505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61107b33846113a7565b6110b1576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260016110be84836104dc565b10156110f6576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208484529091528120805490919061113290613e92565b9091555073ffffffffffffffffffffffffffffffffffffffff82166000908152602081815260408083208484529091528120805490919061117290613ec7565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916112a190613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546112cd90613dbe565b801561131a5780601f106112ef5761010080835404028352916020019161131a565b820191906000526020600020905b8154815290600101906020018083116112fd57829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138e576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139a86868686612aa2565b5060019695505050505050565b60006113b282610878565b156113bf57506000610790565b600060016113cc84611a77565b6113d69190613eff565b90505b60018160ff1610611413576113f28461029a858461192f565b15611401576001915050610790565b8061140b81613f22565b9150506113d9565b6106818461029a85600061192f565b6000828152600460205260408120600181015473ffffffffffffffffffffffffffffffffffffffff163314611483576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106818484612bb5565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff7801000000000000000000000000000000000000000000000000820481161515948301949094527901000000000000000000000000000000000000000000000000009004909216606083810191909152600182015490931660808301526002810180549394938493849384938493849384939092909160a08401919061156e90613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461159a90613dbe565b80156115e75780601f106115bc576101008083540402835291602001916115e7565b820191906000526020600020905b8154815290600101906020018083116115ca57829003601f168201915b5050509190925250505060a081015160208083015160008d81526005909252604090912054835160808501516060860151949d50929b5063ffffffff9091169950975095509350905061163a818a61209e565b915050919395979092949650565b6000828152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161171490613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461174090613dbe565b801561178d5780601f106117625761010080835404028352916020019161178d565b820191906000526020600020905b81548152906001019060200180831161177057829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061186e908590613f79565b600060405180830381855afa9150503d80600081146118a9576040519150601f19603f3d011682016040523d82523d6000602084013e6118ae565b606091505b50915091508180156118c1575060008151115b156118e457808060200190518101906118da9190613f95565b9095509350611916565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61192289898787612aa2565b9998505050505050505050565b60008061193d83601c613eff565b611948906008613fc4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b60006119873387610861565b6119c6576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810187905260440161090e565b60ff861615611a01576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a0a86612c7c565b9050611a19818686868661268c565b5060008681526004602052604090208054601990611a5690790100000000000000000000000000000000000000000000000000900460ff16613fed565b91906101000a81548160ff021916908360ff16021790555095945050505050565b600060ff821615611a8a5750601c919050565b61ffff821615611a9c5750601b919050565b62ffffff821615611aaf5750601a919050565b63ffffffff821615611ac357506019919050565b64ffffffffff821615611ad857506018919050565b65ffffffffffff821615611aee57506017919050565b66ffffffffffffff821615611b0557506016919050565b67ffffffffffffffff821615611b1d57506015919050565b68ffffffffffffffffff821615611b3657506014919050565b69ffffffffffffffffffff821615611b5057506013919050565b6affffffffffffffffffffff821615611b6b57506012919050565b6bffffffffffffffffffffffff821615611b8757506011919050565b6cffffffffffffffffffffffffff821615611ba457506010919050565b6dffffffffffffffffffffffffffff821615611bc25750600f919050565b6effffffffffffffffffffffffffffff821615611be15750600e919050565b6fffffffffffffffffffffffffffffffff821615611c015750600d919050565b70ffffffffffffffffffffffffffffffffff821615611c225750600c919050565b71ffffffffffffffffffffffffffffffffffff821615611c445750600b919050565b72ffffffffffffffffffffffffffffffffffffff821615611c675750600a919050565b73ffffffffffffffffffffffffffffffffffffffff821615611c8b57506009919050565b74ffffffffffffffffffffffffffffffffffffffffff821615611cb057506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff821615611cd657506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff821615611cfd57506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff821615611d2557506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff821615611d4e57506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff821615611d7857506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff821615611da357506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615611dcf57506001919050565b506000919050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611ea390613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecf90613dbe565b8015611f1c5780601f10611ef157610100808354040283529160200191611f1c565b820191906000526020600020905b815481529060010190602001808311611eff57829003601f168201915b505050505081525050905060008084604051602401611f3d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611fe4908590613f79565b600060405180830381855afa9150503d806000811461201f576040519150601f19603f3d011682016040523d82523d6000602084013e612024565b606091505b5091509150818015612037575060008151115b156120575780806020019051810190612050919061400c565b9350612089565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120938785612bb5565b979650505050505050565b600080826040516024016120b491815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061215b908590613f79565b600060405180830381855afa9150503d8060008114612196576040519150601f19603f3d011682016040523d82523d6000602084013e61219b565b606091505b50915091508180156121ae575060008151115b156121ce57808060200190518101906121c7919061400c565b93506121d6565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906122b1908590613f79565b600060405180830381855afa9150503d80600081146122ec576040519150601f19603f3d011682016040523d82523d6000602084013e6122f1565b606091505b5091509150818015612304575060008151115b15612326578080602001905181019061231d9190613f95565b945061235d9050565b600085815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a08401919061243890613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461246490613dbe565b80156124b15780601f10612486576101008083540402835291602001916124b1565b820191906000526020600020905b81548152906001019060200180831161249457829003601f168201915b505050505081525050905060006124c784610878565b156124d35750826124ef565b6124ec8460016124e287611a77565b6104409190613eff565b90505b600061250860e061250187600061192f565b901c61314f565b6000868152600560205260408120549192509061252a9063ffffffff1661314f565b61253d856020015163ffffffff1661314f565b6125468561314f565b61255186602061328c565b875161255c906134cf565b61256989608001516134cf565b60405160200161257e96959493929190614029565b6040516020818303038152906040529050600061259b858861209e565b6125da576040518060400160405280600881526020017f696e616374697665000000000000000000000000000000000000000000000000815250612611565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b9050600061265d8660a00151856126278b61314f565b6126328c602061328c565b8688604051602001612649969594939291906141cd565b6040516020818303038152906040526134f2565b905080604051602001612670919061435d565b6040516020818303038152906040529650505050505050919050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260a0810185815263ffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8088168652868116608087019081526001604080890182815260008f815260049096529420885181549651955160608b015160ff16790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff911515780100000000000000000000000000000000000000000000000002919091167fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff9790991674010000000000000000000000000000000000000000027fffffffffffffffff0000000000000000000000000000000000000000000000009098169186169190911796909617949094169590951793909317825591519281018054939092167fffffffffffffffffffffffff0000000000000000000000000000000000000000939093169290921790559051829190600282019061284390826143f1565b509050507f5763628556709478482c29a370cd5c5054e3e42cf0fc3050cbc8e03db29aa4fc868686868660405161287e95949392919061450b565b60405180910390a195945050505050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906128cd90849061455e565b9091555050600083815260056020526040812080549091906128f49063ffffffff16613e6f565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516111c7929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320858452909152812080548392906129d0908490614576565b9091555050600082815260056020526040812080549091906129f79063ffffffff1661458d565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612a95929190918252602082015260400190565b60405180910390a4505050565b60008215612ab657612ab684866001612992565b600085815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503612b4f5750600084815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260046020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146106845780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b6000818152600460205260408120548190612cb890790100000000000000000000000000000000000000000000000000900460ff1660016145a3565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612cf25760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d295760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d5f5760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d945760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff16600003612dc85760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff16600003612dfb5760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff16600003612e2d5760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff16600003612e5e5760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff16600003612e8e5760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff16600003612ebd5760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff16600003612eeb5760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff16600003612f185760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff16600003612f445760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff16600003612f6f5760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff16600003612f995760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff16600003612fc25760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff16600003612fea5760588160ff16901b8317915050919050565b826affffffffffffffffffffff166000036130115760508160ff16901b8317915050919050565b8269ffffffffffffffffffff166000036130375760488160ff16901b8317915050919050565b8268ffffffffffffffffff1660000361305c5760408160ff16901b8317915050919050565b8267ffffffffffffffff166000036130805760388160ff16901b8317915050919050565b8266ffffffffffffff166000036130a35760308160ff16901b8317915050919050565b8265ffffffffffff166000036130c55760288160ff16901b8317915050919050565b8264ffffffffff166000036130e65760208160ff16901b8317915050919050565b8263ffffffff166000036131065760188160ff16901b8317915050919050565b8262ffffff166000036131255760108160ff16901b8317915050919050565b8261ffff166000036131435760088160ff16901b8317915050919050565b60ff1691909117919050565b60608160000361319257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156131bc57806131a681613ec7565b91506131b59050600a836145f7565b9150613196565b60008167ffffffffffffffff8111156131d7576131d7613693565b6040519080825280601f01601f191660200182016040528015613201576020820181803683370190505b5090505b841561328457613216600183614576565b9150613223600a8661460b565b61322e90603061455e565b60f81b81838151811061324357613243613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061327d600a866145f7565b9450613205565b949350505050565b6060600061329b83600261461f565b6132a690600261455e565b67ffffffffffffffff8111156132be576132be613693565b6040519080825280601f01601f1916602001820160405280156132e8576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061331f5761331f613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061338257613382613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006133be84600261461f565b6133c990600161455e565b90505b6001811115613466577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061340a5761340a613e11565b1a60f81b82828151811061342057613420613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361345f81613e92565b90506133cc565b508315611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161090e565b606061079073ffffffffffffffffffffffffffffffffffffffff8316601461328c565b6060815160000361351157505060408051602081019091526000815290565b600060405180606001604052806040815260200161465d6040913990506000600384516002613540919061455e565b61354a91906145f7565b61355590600461461f565b67ffffffffffffffff81111561356d5761356d613693565b6040519080825280601f01601f191660200182016040528015613597576020820181803683370190505b509050600182016020820185865187015b80821015613603576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506135a8565b505060038651066001811461361f57600281146136325761363a565b603d6001830353603d600283035361363a565b603d60018303535b509195945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bfb57600080fd5b6000806040838503121561367c57600080fd5b61368583613645565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126136d357600080fd5b813567ffffffffffffffff808211156136ee576136ee613693565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561373457613734613693565b8160405283815286602085880101111561374d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff81168114610bfb57600080fd5b6000806000806080858703121561379757600080fd5b843567ffffffffffffffff8111156137ae57600080fd5b6137ba878288016136c2565b9450506137c96020860161376d565b92506137d760408601613645565b91506137e560608601613645565b905092959194509250565b60006020828403121561380257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461103857600080fd5b60005b8381101561384d578181015183820152602001613835565b8381111561385c576000848401525b50505050565b6000815180845261387a816020860160208601613832565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006110386020830184613862565b6000602082840312156138d157600080fd5b5035919050565b60008083601f8401126138ea57600080fd5b50813567ffffffffffffffff81111561390257600080fd5b6020830191508360208260051b850101111561391d57600080fd5b9250929050565b60008083601f84011261393657600080fd5b50813567ffffffffffffffff81111561394e57600080fd5b60208301915083602082850101111561391d57600080fd5b60008060008060008060008060a0898b03121561398257600080fd5b61398b89613645565b975061399960208a01613645565b9650604089013567ffffffffffffffff808211156139b657600080fd5b6139c28c838d016138d8565b909850965060608b01359150808211156139db57600080fd5b6139e78c838d016138d8565b909650945060808b0135915080821115613a0057600080fd5b50613a0d8b828c01613924565b999c989b5096995094979396929594505050565b60008060008060408587031215613a3757600080fd5b843567ffffffffffffffff80821115613a4f57600080fd5b613a5b888389016138d8565b90965094506020870135915080821115613a7457600080fd5b50613a81878288016138d8565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613ac557835183529284019291840191600101613aa9565b50909695505050505050565b600060208284031215613ae357600080fd5b61103882613645565b60008060408385031215613aff57600080fd5b82359150613b0f60208401613645565b90509250929050565b8015158114613b2657600080fd5b50565b60008060408385031215613b3c57600080fd5b613b4583613645565b91506020830135613b5581613b18565b809150509250929050565b600080600060608486031215613b7557600080fd5b83359250613b8560208501613645565b9150613b9360408501613645565b90509250925092565b60008060008060808587031215613bb257600080fd5b84359350613bc260208601613645565b92506040850135613bd281613b18565b91506060850135613be281613b18565b939692955090935050565b60008060408385031215613c0057600080fd5b823591506020830135613b5581613b18565b60e081526000613c2560e083018a613862565b63ffffffff988916602084015296909716604082015273ffffffffffffffffffffffffffffffffffffffff948516606082015292909316608083015260ff1660a082015290151560c09091015292915050565b60008060408385031215613c8b57600080fd5b82359150602083013560ff81168114613b5557600080fd5b60008060408385031215613cb657600080fd5b613cbf83613645565b9150613b0f60208401613645565b600080600080600060a08688031215613ce557600080fd5b85359450602086013567ffffffffffffffff811115613d0357600080fd5b613d0f888289016136c2565b945050613d1e6040870161376d565b9250613d2c60608701613645565b9150613d3a60808701613645565b90509295509295909350565b60008060008060008060a08789031215613d5f57600080fd5b613d6887613645565b9550613d7660208801613645565b94506040870135935060608701359250608087013567ffffffffffffffff811115613da057600080fd5b613dac89828a01613924565b979a9699509497509295939492505050565b600181811c90821680613dd257607f821691505b602082108103613e0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103613e8857613e88613e40565b6001019392505050565b600081613ea157613ea1613e40565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ef857613ef8613e40565b5060010190565b600060ff821660ff841680821015613f1957613f19613e40565b90039392505050565b600060ff821680613f3557613f35613e40565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b60008151613f6f818560208601613832565b9290920192915050565b60008251613f8b818460208701613832565b9190910192915050565b60008060408385031215613fa857600080fd5b8251613fb381613b18565b6020840151909250613b5581613b18565b600060ff821660ff84168160ff0481118215151615613fe557613fe5613e40565b029392505050565b600060ff821660ff810361400357614003613e40565b60010192915050565b60006020828403121561401e57600080fd5b815161103881613b18565b7f7b2263757272656e7420737570706c79223a2022000000000000000000000000815260008751614061816014850160208c01613832565b7f222c2022737570706c7920636170223a20220000000000000000000000000000601491840191820152875161409e816026840160208c01613832565b7f222c202261646d696e2028696429223a202200000000000000000000000000006026929091019182015286516140dc816038840160208b01613832565b7f222c202261646d696e202870726574747920696429223a20220000000000000060389290910191820152855161411a816051840160208a01613832565b7f222c20226f7261636c652061646472657373223a202200000000000000000000605192909101918201528451614158816067840160208901613832565b6141bf6141966141906067848601017f222c2022636f6e646974696f6e732061646472657373223a20220000000000008152601a0190565b87613f5d565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008751614205816018850160208c01613832565b7f222c2022646f6d61696e223a20220000000000000000000000000000000000006018918401918201528751614242816026840160208c01613832565b7f222c20226964223a202200000000000000000000000000000000000000000000602692909101918201528651614280816030840160208b01613832565b7f222c2022707265747479206964223a20220000000000000000000000000000006030929091019182015285516142be816041840160208a01613832565b7f222c2022737461747573223a20220000000000000000000000000000000000006041929091019182015284516142fc81604f840160208901613832565b6141bf614334614190604f848601017f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161439581601d850160208701613832565b91909101601d0192915050565b601f8211156143ec57600081815260208120601f850160051c810160208610156143c95750805b601f850160051c820191505b818110156143e8578281556001016143d5565b5050505b505050565b815167ffffffffffffffff81111561440b5761440b613693565b61441f816144198454613dbe565b846143a2565b602080601f831160018114614472576000841561443c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556143e8565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156144bf578886015182559484019460019091019084016144a0565b50858210156144fb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b85815260a06020820152600061452460a0830187613862565b63ffffffff9590951660408301525073ffffffffffffffffffffffffffffffffffffffff9283166060820152911660809091015292915050565b6000821982111561457157614571613e40565b500190565b60008282101561458857614588613e40565b500390565b600063ffffffff821680613f3557613f35613e40565b600060ff821660ff84168060ff038211156145c0576145c0613e40565b019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614606576146066145c8565b500490565b60008261461a5761461a6145c8565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561465757614657613e40565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122097fadf390de83cd4af64a5ba5c423dc2c55447032371de4c0503ab2c5bc3ed5564736f6c634300080f003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203100000000000000000000", - "nonce": "0x16", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0xf8f5e2cc6bcc6f671de8292b70e95e2260bc9a84b1a6046b8c8b0a0a50a5b9e5", - "transactionIndex": "0xb", - "blockHash": "0x5de805e89350f1fd2360decf32cf7c08b239eca3eb5bdcc77afd7d8efe6e1e4f", - "blockNumber": "0xabb5f8", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "to": null, - "cumulativeGasUsed": "0x566808", - "gasUsed": "0x3cb22c", - "contractAddress": "0xf55228444742e6812535bcda350167cd965121b7", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d0e341" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/4/run-latest.json", - "returns": {}, - "timestamp": 1661264479, - "commit": "fe20161" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/4/run-1661264505.json b/broadcast/Hats.s.sol/4/run-1661264505.json deleted file mode 100644 index bfab70b..0000000 --- a/broadcast/Hats.s.sol/4/run-1661264505.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xf8f5e2cc6bcc6f671de8292b70e95e2260bc9a84b1a6046b8c8b0a0a50a5b9e5", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0xf55228444742e6812535bcda350167cd965121b7", - "function": null, - "arguments": null, - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x4ee79f", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b506040516200497938038062004979833981016040819052620000349162000060565b6002620000428282620001cb565b505062000297565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200007457600080fd5b82516001600160401b03808211156200008c57600080fd5b818501915085601f830112620000a157600080fd5b815181811115620000b657620000b66200004a565b604051601f8201601f19908116603f01168101908382118183101715620000e157620000e16200004a565b816040528281528886848701011115620000fa57600080fd5b600093505b828410156200011e5784840186015181850187015292850192620000ff565b82841115620001305760008684830101525b98975050505050505050565b600181811c908216806200015157607f821691505b6020821081036200017257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001c657600081815260208120601f850160051c81016020861015620001a15750805b601f850160051c820191505b81811015620001c257828155600101620001ad565b5050505b505050565b81516001600160401b03811115620001e757620001e76200004a565b620001ff81620001f884546200013c565b8462000178565b602080601f8311600181146200023757600084156200021e5750858301515b600019600386901b1c1916600185901b178555620001c2565b600085815260208120601f198616915b82811015620002685788860151825594840194600190910190840162000247565b5085821015620002875787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6146d280620002a76000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c8063a22cb46511610104578063d70343d8116100a2578063f242432a11610071578063f242432a14610486578063fb2aaa4c14610494578063fc3e05a4146104b9578063fd427358146104c957600080fd5b8063d70343d81461041f578063e769138514610432578063e985e9c514610445578063efdfb0881461047357600080fd5b8063afaae55a116100de578063afaae55a146103c0578063b56f7562146103d3578063c43dc177146103e6578063d395acf8146103f957600080fd5b8063a22cb4651461036c578063a2be079b1461037f578063a4a1f06c146103ad57600080fd5b806345fffac81161017c578063641f776e1161014b578063641f776e146102f85780637178fb511461030b5780637a9df89f1461034657806382afd23b1461035957600080fd5b806345fffac81461029f5780634e1273f4146102b257806354a1826c146102d2578063619531c7146102e557600080fd5b806306fdde03116101b857806306fdde031461024f5780630e89341c146102645780632eb2c2d6146102775780634352409a1461028c57600080fd5b8062fdd58e146101de578063018632e91461020457806301ffc9a71461022c575b600080fd5b6101f16101ec366004613669565b6104dc565b6040519081526020015b60405180910390f35b610217610212366004613781565b61068b565b604080519283526020830191909152016101fb565b61023f61023a3660046137f0565b6106b1565b60405190151581526020016101fb565b610257610796565b6040516101fb91906138ac565b6102576102723660046138bf565b610824565b61028a610285366004613966565b61082f565b005b61023f61029a366004613669565b610861565b61023f6102ad3660046138bf565b610878565b6102c56102c0366004613a21565b6108a7565b6040516101fb9190613a8d565b61023f6102e0366004613669565b610a23565b6101f16102f3366004613ad1565b610b7e565b61023f610306366004613aec565b610c00565b6103316103193660046138bf565b60056020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101fb565b61028a6103543660046138bf565b610e57565b61023f6103673660046138bf565b610ede565b61028a61037a366004613b29565b61103f565b61023f61038d366004613aec565b600660209081526000928352604080842090915290825290205460ff1681565b61028a6103bb366004613b60565b611071565b61023f6103ce366004613b9c565b6111d5565b61023f6103e1366004613669565b6113a7565b61023f6103f4366004613bed565b611422565b61040c6104073660046138bf565b61148d565b6040516101fb9796959493929190613c12565b61023f61042d366004613aec565b611648565b6101f1610440366004613c78565b61192f565b61023f610453366004613ca3565b600160209081526000928352604080842090915290825290205460ff1681565b6101f1610481366004613ccd565b61197b565b61028a610285366004613d46565b6104a76104a23660046138bf565b611a77565b60405160ff90911681526020016101fb565b6003546103319063ffffffff1681565b61023f6104d73660046138bf565b611dd7565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916105a890613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546105d490613dbe565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b50505050508152505090506000915061063a818461209e565b801561064c575061064c8482856121df565b156106845773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60008061069733610b7e565b91506106a6828787878761197b565b905094509492505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061074457507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061079057507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600280546107a390613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546107cf90613dbe565b801561081c5780601f106107f15761010080835404028352916020019161081c565b820191906000526020600020905b8154815290600101906020018083116107ff57829003601f168201915b505050505081565b606061079082612367565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600161086f84846104dc565b10159392505050565b600080821180156107905750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff81111561093057610930613693565b604051908082528060200260200182016040528015610959578160200160208202803683370190505b50905060005b84811015610a1a5760008087878481811061097c5761097c613e11565b90506020020160208101906109919190613ad1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008585848181106109df576109df613e11565b90506020020135815260200190815260200160002054828281518110610a0757610a07613e11565b602090810291909101015260010161095f565b50949350505050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610aef90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1b90613dbe565b8015610b685780601f10610b3d57610100808354040283529160200191610b68565b820191906000526020600020905b815481529060010190602001808311610b4b57829003601f168201915b50505050508152505090506106818482856121df565b6003805460009160e0918390610b999063ffffffff16613e6f565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050610bde8160405180602001604052806000815250600160008061268c565b50610bfb828260016040518060200160405280600081525061288f565b919050565b6000828152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610ccc90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf890613dbe565b8015610d455780601f10610d1a57610100808354040283529160200191610d45565b820191906000526020600020905b815481529060010190602001808311610d2857829003601f168201915b5050505050815250509050610d5a33856113a7565b610d99576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810185905260440161090e565b6020808201516000868152600590925260409091205463ffffffff918216911610610df0576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dfa8385610861565b15610e31576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4d838560016040518060200160405280600081525061288f565b5060019392505050565b610e613382610861565b610e97576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ea333826001612992565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610faa90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd690613dbe565b80156110235780601f10610ff857610100808354040283529160200191611023565b820191906000526020600020905b81548152906001019060200180831161100657829003601f168201915b5050505050815250509050611038818461209e565b9392505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61107b33846113a7565b6110b1576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260016110be84836104dc565b10156110f6576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208484529091528120805490919061113290613e92565b9091555073ffffffffffffffffffffffffffffffffffffffff82166000908152602081815260408083208484529091528120805490919061117290613ec7565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916112a190613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546112cd90613dbe565b801561131a5780601f106112ef5761010080835404028352916020019161131a565b820191906000526020600020905b8154815290600101906020018083116112fd57829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138e576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139a86868686612aa2565b5060019695505050505050565b60006113b282610878565b156113bf57506000610790565b600060016113cc84611a77565b6113d69190613eff565b90505b60018160ff1610611413576113f28461029a858461192f565b15611401576001915050610790565b8061140b81613f22565b9150506113d9565b6106818461029a85600061192f565b6000828152600460205260408120600181015473ffffffffffffffffffffffffffffffffffffffff163314611483576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106818484612bb5565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff7801000000000000000000000000000000000000000000000000820481161515948301949094527901000000000000000000000000000000000000000000000000009004909216606083810191909152600182015490931660808301526002810180549394938493849384938493849384939092909160a08401919061156e90613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461159a90613dbe565b80156115e75780601f106115bc576101008083540402835291602001916115e7565b820191906000526020600020905b8154815290600101906020018083116115ca57829003601f168201915b5050509190925250505060a081015160208083015160008d81526005909252604090912054835160808501516060860151949d50929b5063ffffffff9091169950975095509350905061163a818a61209e565b915050919395979092949650565b6000828152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161171490613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461174090613dbe565b801561178d5780601f106117625761010080835404028352916020019161178d565b820191906000526020600020905b81548152906001019060200180831161177057829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061186e908590613f79565b600060405180830381855afa9150503d80600081146118a9576040519150601f19603f3d011682016040523d82523d6000602084013e6118ae565b606091505b50915091508180156118c1575060008151115b156118e457808060200190518101906118da9190613f95565b9095509350611916565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61192289898787612aa2565b9998505050505050505050565b60008061193d83601c613eff565b611948906008613fc4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b60006119873387610861565b6119c6576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810187905260440161090e565b60ff861615611a01576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a0a86612c7c565b9050611a19818686868661268c565b5060008681526004602052604090208054601990611a5690790100000000000000000000000000000000000000000000000000900460ff16613fed565b91906101000a81548160ff021916908360ff16021790555095945050505050565b600060ff821615611a8a5750601c919050565b61ffff821615611a9c5750601b919050565b62ffffff821615611aaf5750601a919050565b63ffffffff821615611ac357506019919050565b64ffffffffff821615611ad857506018919050565b65ffffffffffff821615611aee57506017919050565b66ffffffffffffff821615611b0557506016919050565b67ffffffffffffffff821615611b1d57506015919050565b68ffffffffffffffffff821615611b3657506014919050565b69ffffffffffffffffffff821615611b5057506013919050565b6affffffffffffffffffffff821615611b6b57506012919050565b6bffffffffffffffffffffffff821615611b8757506011919050565b6cffffffffffffffffffffffffff821615611ba457506010919050565b6dffffffffffffffffffffffffffff821615611bc25750600f919050565b6effffffffffffffffffffffffffffff821615611be15750600e919050565b6fffffffffffffffffffffffffffffffff821615611c015750600d919050565b70ffffffffffffffffffffffffffffffffff821615611c225750600c919050565b71ffffffffffffffffffffffffffffffffffff821615611c445750600b919050565b72ffffffffffffffffffffffffffffffffffffff821615611c675750600a919050565b73ffffffffffffffffffffffffffffffffffffffff821615611c8b57506009919050565b74ffffffffffffffffffffffffffffffffffffffffff821615611cb057506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff821615611cd657506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff821615611cfd57506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff821615611d2557506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff821615611d4e57506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff821615611d7857506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff821615611da357506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615611dcf57506001919050565b506000919050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611ea390613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecf90613dbe565b8015611f1c5780601f10611ef157610100808354040283529160200191611f1c565b820191906000526020600020905b815481529060010190602001808311611eff57829003601f168201915b505050505081525050905060008084604051602401611f3d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611fe4908590613f79565b600060405180830381855afa9150503d806000811461201f576040519150601f19603f3d011682016040523d82523d6000602084013e612024565b606091505b5091509150818015612037575060008151115b156120575780806020019051810190612050919061400c565b9350612089565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120938785612bb5565b979650505050505050565b600080826040516024016120b491815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061215b908590613f79565b600060405180830381855afa9150503d8060008114612196576040519150601f19603f3d011682016040523d82523d6000602084013e61219b565b606091505b50915091508180156121ae575060008151115b156121ce57808060200190518101906121c7919061400c565b93506121d6565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906122b1908590613f79565b600060405180830381855afa9150503d80600081146122ec576040519150601f19603f3d011682016040523d82523d6000602084013e6122f1565b606091505b5091509150818015612304575060008151115b15612326578080602001905181019061231d9190613f95565b945061235d9050565b600085815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a08401919061243890613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461246490613dbe565b80156124b15780601f10612486576101008083540402835291602001916124b1565b820191906000526020600020905b81548152906001019060200180831161249457829003601f168201915b505050505081525050905060006124c784610878565b156124d35750826124ef565b6124ec8460016124e287611a77565b6104409190613eff565b90505b600061250860e061250187600061192f565b901c61314f565b6000868152600560205260408120549192509061252a9063ffffffff1661314f565b61253d856020015163ffffffff1661314f565b6125468561314f565b61255186602061328c565b875161255c906134cf565b61256989608001516134cf565b60405160200161257e96959493929190614029565b6040516020818303038152906040529050600061259b858861209e565b6125da576040518060400160405280600881526020017f696e616374697665000000000000000000000000000000000000000000000000815250612611565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b9050600061265d8660a00151856126278b61314f565b6126328c602061328c565b8688604051602001612649969594939291906141cd565b6040516020818303038152906040526134f2565b905080604051602001612670919061435d565b6040516020818303038152906040529650505050505050919050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260a0810185815263ffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8088168652868116608087019081526001604080890182815260008f815260049096529420885181549651955160608b015160ff16790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff911515780100000000000000000000000000000000000000000000000002919091167fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff9790991674010000000000000000000000000000000000000000027fffffffffffffffff0000000000000000000000000000000000000000000000009098169186169190911796909617949094169590951793909317825591519281018054939092167fffffffffffffffffffffffff0000000000000000000000000000000000000000939093169290921790559051829190600282019061284390826143f1565b509050507f5763628556709478482c29a370cd5c5054e3e42cf0fc3050cbc8e03db29aa4fc868686868660405161287e95949392919061450b565b60405180910390a195945050505050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906128cd90849061455e565b9091555050600083815260056020526040812080549091906128f49063ffffffff16613e6f565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516111c7929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320858452909152812080548392906129d0908490614576565b9091555050600082815260056020526040812080549091906129f79063ffffffff1661458d565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612a95929190918252602082015260400190565b60405180910390a4505050565b60008215612ab657612ab684866001612992565b600085815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503612b4f5750600084815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260046020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146106845780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b6000818152600460205260408120548190612cb890790100000000000000000000000000000000000000000000000000900460ff1660016145a3565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612cf25760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d295760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d5f5760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d945760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff16600003612dc85760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff16600003612dfb5760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff16600003612e2d5760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff16600003612e5e5760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff16600003612e8e5760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff16600003612ebd5760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff16600003612eeb5760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff16600003612f185760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff16600003612f445760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff16600003612f6f5760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff16600003612f995760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff16600003612fc25760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff16600003612fea5760588160ff16901b8317915050919050565b826affffffffffffffffffffff166000036130115760508160ff16901b8317915050919050565b8269ffffffffffffffffffff166000036130375760488160ff16901b8317915050919050565b8268ffffffffffffffffff1660000361305c5760408160ff16901b8317915050919050565b8267ffffffffffffffff166000036130805760388160ff16901b8317915050919050565b8266ffffffffffffff166000036130a35760308160ff16901b8317915050919050565b8265ffffffffffff166000036130c55760288160ff16901b8317915050919050565b8264ffffffffff166000036130e65760208160ff16901b8317915050919050565b8263ffffffff166000036131065760188160ff16901b8317915050919050565b8262ffffff166000036131255760108160ff16901b8317915050919050565b8261ffff166000036131435760088160ff16901b8317915050919050565b60ff1691909117919050565b60608160000361319257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156131bc57806131a681613ec7565b91506131b59050600a836145f7565b9150613196565b60008167ffffffffffffffff8111156131d7576131d7613693565b6040519080825280601f01601f191660200182016040528015613201576020820181803683370190505b5090505b841561328457613216600183614576565b9150613223600a8661460b565b61322e90603061455e565b60f81b81838151811061324357613243613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061327d600a866145f7565b9450613205565b949350505050565b6060600061329b83600261461f565b6132a690600261455e565b67ffffffffffffffff8111156132be576132be613693565b6040519080825280601f01601f1916602001820160405280156132e8576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061331f5761331f613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061338257613382613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006133be84600261461f565b6133c990600161455e565b90505b6001811115613466577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061340a5761340a613e11565b1a60f81b82828151811061342057613420613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361345f81613e92565b90506133cc565b508315611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161090e565b606061079073ffffffffffffffffffffffffffffffffffffffff8316601461328c565b6060815160000361351157505060408051602081019091526000815290565b600060405180606001604052806040815260200161465d6040913990506000600384516002613540919061455e565b61354a91906145f7565b61355590600461461f565b67ffffffffffffffff81111561356d5761356d613693565b6040519080825280601f01601f191660200182016040528015613597576020820181803683370190505b509050600182016020820185865187015b80821015613603576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506135a8565b505060038651066001811461361f57600281146136325761363a565b603d6001830353603d600283035361363a565b603d60018303535b509195945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bfb57600080fd5b6000806040838503121561367c57600080fd5b61368583613645565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126136d357600080fd5b813567ffffffffffffffff808211156136ee576136ee613693565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561373457613734613693565b8160405283815286602085880101111561374d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff81168114610bfb57600080fd5b6000806000806080858703121561379757600080fd5b843567ffffffffffffffff8111156137ae57600080fd5b6137ba878288016136c2565b9450506137c96020860161376d565b92506137d760408601613645565b91506137e560608601613645565b905092959194509250565b60006020828403121561380257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461103857600080fd5b60005b8381101561384d578181015183820152602001613835565b8381111561385c576000848401525b50505050565b6000815180845261387a816020860160208601613832565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006110386020830184613862565b6000602082840312156138d157600080fd5b5035919050565b60008083601f8401126138ea57600080fd5b50813567ffffffffffffffff81111561390257600080fd5b6020830191508360208260051b850101111561391d57600080fd5b9250929050565b60008083601f84011261393657600080fd5b50813567ffffffffffffffff81111561394e57600080fd5b60208301915083602082850101111561391d57600080fd5b60008060008060008060008060a0898b03121561398257600080fd5b61398b89613645565b975061399960208a01613645565b9650604089013567ffffffffffffffff808211156139b657600080fd5b6139c28c838d016138d8565b909850965060608b01359150808211156139db57600080fd5b6139e78c838d016138d8565b909650945060808b0135915080821115613a0057600080fd5b50613a0d8b828c01613924565b999c989b5096995094979396929594505050565b60008060008060408587031215613a3757600080fd5b843567ffffffffffffffff80821115613a4f57600080fd5b613a5b888389016138d8565b90965094506020870135915080821115613a7457600080fd5b50613a81878288016138d8565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613ac557835183529284019291840191600101613aa9565b50909695505050505050565b600060208284031215613ae357600080fd5b61103882613645565b60008060408385031215613aff57600080fd5b82359150613b0f60208401613645565b90509250929050565b8015158114613b2657600080fd5b50565b60008060408385031215613b3c57600080fd5b613b4583613645565b91506020830135613b5581613b18565b809150509250929050565b600080600060608486031215613b7557600080fd5b83359250613b8560208501613645565b9150613b9360408501613645565b90509250925092565b60008060008060808587031215613bb257600080fd5b84359350613bc260208601613645565b92506040850135613bd281613b18565b91506060850135613be281613b18565b939692955090935050565b60008060408385031215613c0057600080fd5b823591506020830135613b5581613b18565b60e081526000613c2560e083018a613862565b63ffffffff988916602084015296909716604082015273ffffffffffffffffffffffffffffffffffffffff948516606082015292909316608083015260ff1660a082015290151560c09091015292915050565b60008060408385031215613c8b57600080fd5b82359150602083013560ff81168114613b5557600080fd5b60008060408385031215613cb657600080fd5b613cbf83613645565b9150613b0f60208401613645565b600080600080600060a08688031215613ce557600080fd5b85359450602086013567ffffffffffffffff811115613d0357600080fd5b613d0f888289016136c2565b945050613d1e6040870161376d565b9250613d2c60608701613645565b9150613d3a60808701613645565b90509295509295909350565b60008060008060008060a08789031215613d5f57600080fd5b613d6887613645565b9550613d7660208801613645565b94506040870135935060608701359250608087013567ffffffffffffffff811115613da057600080fd5b613dac89828a01613924565b979a9699509497509295939492505050565b600181811c90821680613dd257607f821691505b602082108103613e0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103613e8857613e88613e40565b6001019392505050565b600081613ea157613ea1613e40565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ef857613ef8613e40565b5060010190565b600060ff821660ff841680821015613f1957613f19613e40565b90039392505050565b600060ff821680613f3557613f35613e40565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b60008151613f6f818560208601613832565b9290920192915050565b60008251613f8b818460208701613832565b9190910192915050565b60008060408385031215613fa857600080fd5b8251613fb381613b18565b6020840151909250613b5581613b18565b600060ff821660ff84168160ff0481118215151615613fe557613fe5613e40565b029392505050565b600060ff821660ff810361400357614003613e40565b60010192915050565b60006020828403121561401e57600080fd5b815161103881613b18565b7f7b2263757272656e7420737570706c79223a2022000000000000000000000000815260008751614061816014850160208c01613832565b7f222c2022737570706c7920636170223a20220000000000000000000000000000601491840191820152875161409e816026840160208c01613832565b7f222c202261646d696e2028696429223a202200000000000000000000000000006026929091019182015286516140dc816038840160208b01613832565b7f222c202261646d696e202870726574747920696429223a20220000000000000060389290910191820152855161411a816051840160208a01613832565b7f222c20226f7261636c652061646472657373223a202200000000000000000000605192909101918201528451614158816067840160208901613832565b6141bf6141966141906067848601017f222c2022636f6e646974696f6e732061646472657373223a20220000000000008152601a0190565b87613f5d565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008751614205816018850160208c01613832565b7f222c2022646f6d61696e223a20220000000000000000000000000000000000006018918401918201528751614242816026840160208c01613832565b7f222c20226964223a202200000000000000000000000000000000000000000000602692909101918201528651614280816030840160208b01613832565b7f222c2022707265747479206964223a20220000000000000000000000000000006030929091019182015285516142be816041840160208a01613832565b7f222c2022737461747573223a20220000000000000000000000000000000000006041929091019182015284516142fc81604f840160208901613832565b6141bf614334614190604f848601017f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161439581601d850160208701613832565b91909101601d0192915050565b601f8211156143ec57600081815260208120601f850160051c810160208610156143c95750805b601f850160051c820191505b818110156143e8578281556001016143d5565b5050505b505050565b815167ffffffffffffffff81111561440b5761440b613693565b61441f816144198454613dbe565b846143a2565b602080601f831160018114614472576000841561443c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556143e8565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156144bf578886015182559484019460019091019084016144a0565b50858210156144fb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b85815260a06020820152600061452460a0830187613862565b63ffffffff9590951660408301525073ffffffffffffffffffffffffffffffffffffffff9283166060820152911660809091015292915050565b6000821982111561457157614571613e40565b500190565b60008282101561458857614588613e40565b500390565b600063ffffffff821680613f3557613f35613e40565b600060ff821660ff84168060ff038211156145c0576145c0613e40565b019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614606576146066145c8565b500490565b60008261461a5761461a6145c8565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561465757614657613e40565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122097fadf390de83cd4af64a5ba5c423dc2c55447032371de4c0503ab2c5bc3ed5564736f6c634300080f003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203100000000000000000000", - "nonce": "0x16", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0xf8f5e2cc6bcc6f671de8292b70e95e2260bc9a84b1a6046b8c8b0a0a50a5b9e5", - "transactionIndex": "0xb", - "blockHash": "0x5de805e89350f1fd2360decf32cf7c08b239eca3eb5bdcc77afd7d8efe6e1e4f", - "blockNumber": "0xabb5f8", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "to": null, - "cumulativeGasUsed": "0x566808", - "gasUsed": "0x3cb22c", - "contractAddress": "0xf55228444742e6812535bcda350167cd965121b7", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d0e341" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/4/run-latest.json", - "returns": {}, - "timestamp": 1661264505, - "commit": "fe20161" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/4/run-1661264584.json b/broadcast/Hats.s.sol/4/run-1661264584.json deleted file mode 100644 index 10a021b..0000000 --- a/broadcast/Hats.s.sol/4/run-1661264584.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xf8f5e2cc6bcc6f671de8292b70e95e2260bc9a84b1a6046b8c8b0a0a50a5b9e5", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0xf55228444742e6812535bcda350167cd965121b7", - "function": null, - "arguments": null, - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x4ee79f", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b506040516200497938038062004979833981016040819052620000349162000060565b6002620000428282620001cb565b505062000297565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200007457600080fd5b82516001600160401b03808211156200008c57600080fd5b818501915085601f830112620000a157600080fd5b815181811115620000b657620000b66200004a565b604051601f8201601f19908116603f01168101908382118183101715620000e157620000e16200004a565b816040528281528886848701011115620000fa57600080fd5b600093505b828410156200011e5784840186015181850187015292850192620000ff565b82841115620001305760008684830101525b98975050505050505050565b600181811c908216806200015157607f821691505b6020821081036200017257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001c657600081815260208120601f850160051c81016020861015620001a15750805b601f850160051c820191505b81811015620001c257828155600101620001ad565b5050505b505050565b81516001600160401b03811115620001e757620001e76200004a565b620001ff81620001f884546200013c565b8462000178565b602080601f8311600181146200023757600084156200021e5750858301515b600019600386901b1c1916600185901b178555620001c2565b600085815260208120601f198616915b82811015620002685788860151825594840194600190910190840162000247565b5085821015620002875787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6146d280620002a76000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c8063a22cb46511610104578063d70343d8116100a2578063f242432a11610071578063f242432a14610486578063fb2aaa4c14610494578063fc3e05a4146104b9578063fd427358146104c957600080fd5b8063d70343d81461041f578063e769138514610432578063e985e9c514610445578063efdfb0881461047357600080fd5b8063afaae55a116100de578063afaae55a146103c0578063b56f7562146103d3578063c43dc177146103e6578063d395acf8146103f957600080fd5b8063a22cb4651461036c578063a2be079b1461037f578063a4a1f06c146103ad57600080fd5b806345fffac81161017c578063641f776e1161014b578063641f776e146102f85780637178fb511461030b5780637a9df89f1461034657806382afd23b1461035957600080fd5b806345fffac81461029f5780634e1273f4146102b257806354a1826c146102d2578063619531c7146102e557600080fd5b806306fdde03116101b857806306fdde031461024f5780630e89341c146102645780632eb2c2d6146102775780634352409a1461028c57600080fd5b8062fdd58e146101de578063018632e91461020457806301ffc9a71461022c575b600080fd5b6101f16101ec366004613669565b6104dc565b6040519081526020015b60405180910390f35b610217610212366004613781565b61068b565b604080519283526020830191909152016101fb565b61023f61023a3660046137f0565b6106b1565b60405190151581526020016101fb565b610257610796565b6040516101fb91906138ac565b6102576102723660046138bf565b610824565b61028a610285366004613966565b61082f565b005b61023f61029a366004613669565b610861565b61023f6102ad3660046138bf565b610878565b6102c56102c0366004613a21565b6108a7565b6040516101fb9190613a8d565b61023f6102e0366004613669565b610a23565b6101f16102f3366004613ad1565b610b7e565b61023f610306366004613aec565b610c00565b6103316103193660046138bf565b60056020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101fb565b61028a6103543660046138bf565b610e57565b61023f6103673660046138bf565b610ede565b61028a61037a366004613b29565b61103f565b61023f61038d366004613aec565b600660209081526000928352604080842090915290825290205460ff1681565b61028a6103bb366004613b60565b611071565b61023f6103ce366004613b9c565b6111d5565b61023f6103e1366004613669565b6113a7565b61023f6103f4366004613bed565b611422565b61040c6104073660046138bf565b61148d565b6040516101fb9796959493929190613c12565b61023f61042d366004613aec565b611648565b6101f1610440366004613c78565b61192f565b61023f610453366004613ca3565b600160209081526000928352604080842090915290825290205460ff1681565b6101f1610481366004613ccd565b61197b565b61028a610285366004613d46565b6104a76104a23660046138bf565b611a77565b60405160ff90911681526020016101fb565b6003546103319063ffffffff1681565b61023f6104d73660046138bf565b611dd7565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916105a890613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546105d490613dbe565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b50505050508152505090506000915061063a818461209e565b801561064c575061064c8482856121df565b156106845773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60008061069733610b7e565b91506106a6828787878761197b565b905094509492505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061074457507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061079057507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600280546107a390613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546107cf90613dbe565b801561081c5780601f106107f15761010080835404028352916020019161081c565b820191906000526020600020905b8154815290600101906020018083116107ff57829003601f168201915b505050505081565b606061079082612367565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600161086f84846104dc565b10159392505050565b600080821180156107905750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff81111561093057610930613693565b604051908082528060200260200182016040528015610959578160200160208202803683370190505b50905060005b84811015610a1a5760008087878481811061097c5761097c613e11565b90506020020160208101906109919190613ad1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008585848181106109df576109df613e11565b90506020020135815260200190815260200160002054828281518110610a0757610a07613e11565b602090810291909101015260010161095f565b50949350505050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610aef90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1b90613dbe565b8015610b685780601f10610b3d57610100808354040283529160200191610b68565b820191906000526020600020905b815481529060010190602001808311610b4b57829003601f168201915b50505050508152505090506106818482856121df565b6003805460009160e0918390610b999063ffffffff16613e6f565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050610bde8160405180602001604052806000815250600160008061268c565b50610bfb828260016040518060200160405280600081525061288f565b919050565b6000828152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610ccc90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf890613dbe565b8015610d455780601f10610d1a57610100808354040283529160200191610d45565b820191906000526020600020905b815481529060010190602001808311610d2857829003601f168201915b5050505050815250509050610d5a33856113a7565b610d99576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810185905260440161090e565b6020808201516000868152600590925260409091205463ffffffff918216911610610df0576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dfa8385610861565b15610e31576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4d838560016040518060200160405280600081525061288f565b5060019392505050565b610e613382610861565b610e97576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ea333826001612992565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610faa90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd690613dbe565b80156110235780601f10610ff857610100808354040283529160200191611023565b820191906000526020600020905b81548152906001019060200180831161100657829003601f168201915b5050505050815250509050611038818461209e565b9392505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61107b33846113a7565b6110b1576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260016110be84836104dc565b10156110f6576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208484529091528120805490919061113290613e92565b9091555073ffffffffffffffffffffffffffffffffffffffff82166000908152602081815260408083208484529091528120805490919061117290613ec7565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916112a190613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546112cd90613dbe565b801561131a5780601f106112ef5761010080835404028352916020019161131a565b820191906000526020600020905b8154815290600101906020018083116112fd57829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138e576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139a86868686612aa2565b5060019695505050505050565b60006113b282610878565b156113bf57506000610790565b600060016113cc84611a77565b6113d69190613eff565b90505b60018160ff1610611413576113f28461029a858461192f565b15611401576001915050610790565b8061140b81613f22565b9150506113d9565b6106818461029a85600061192f565b6000828152600460205260408120600181015473ffffffffffffffffffffffffffffffffffffffff163314611483576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106818484612bb5565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff7801000000000000000000000000000000000000000000000000820481161515948301949094527901000000000000000000000000000000000000000000000000009004909216606083810191909152600182015490931660808301526002810180549394938493849384938493849384939092909160a08401919061156e90613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461159a90613dbe565b80156115e75780601f106115bc576101008083540402835291602001916115e7565b820191906000526020600020905b8154815290600101906020018083116115ca57829003601f168201915b5050509190925250505060a081015160208083015160008d81526005909252604090912054835160808501516060860151949d50929b5063ffffffff9091169950975095509350905061163a818a61209e565b915050919395979092949650565b6000828152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161171490613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461174090613dbe565b801561178d5780601f106117625761010080835404028352916020019161178d565b820191906000526020600020905b81548152906001019060200180831161177057829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061186e908590613f79565b600060405180830381855afa9150503d80600081146118a9576040519150601f19603f3d011682016040523d82523d6000602084013e6118ae565b606091505b50915091508180156118c1575060008151115b156118e457808060200190518101906118da9190613f95565b9095509350611916565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61192289898787612aa2565b9998505050505050505050565b60008061193d83601c613eff565b611948906008613fc4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b60006119873387610861565b6119c6576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810187905260440161090e565b60ff861615611a01576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a0a86612c7c565b9050611a19818686868661268c565b5060008681526004602052604090208054601990611a5690790100000000000000000000000000000000000000000000000000900460ff16613fed565b91906101000a81548160ff021916908360ff16021790555095945050505050565b600060ff821615611a8a5750601c919050565b61ffff821615611a9c5750601b919050565b62ffffff821615611aaf5750601a919050565b63ffffffff821615611ac357506019919050565b64ffffffffff821615611ad857506018919050565b65ffffffffffff821615611aee57506017919050565b66ffffffffffffff821615611b0557506016919050565b67ffffffffffffffff821615611b1d57506015919050565b68ffffffffffffffffff821615611b3657506014919050565b69ffffffffffffffffffff821615611b5057506013919050565b6affffffffffffffffffffff821615611b6b57506012919050565b6bffffffffffffffffffffffff821615611b8757506011919050565b6cffffffffffffffffffffffffff821615611ba457506010919050565b6dffffffffffffffffffffffffffff821615611bc25750600f919050565b6effffffffffffffffffffffffffffff821615611be15750600e919050565b6fffffffffffffffffffffffffffffffff821615611c015750600d919050565b70ffffffffffffffffffffffffffffffffff821615611c225750600c919050565b71ffffffffffffffffffffffffffffffffffff821615611c445750600b919050565b72ffffffffffffffffffffffffffffffffffffff821615611c675750600a919050565b73ffffffffffffffffffffffffffffffffffffffff821615611c8b57506009919050565b74ffffffffffffffffffffffffffffffffffffffffff821615611cb057506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff821615611cd657506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff821615611cfd57506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff821615611d2557506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff821615611d4e57506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff821615611d7857506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff821615611da357506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615611dcf57506001919050565b506000919050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611ea390613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecf90613dbe565b8015611f1c5780601f10611ef157610100808354040283529160200191611f1c565b820191906000526020600020905b815481529060010190602001808311611eff57829003601f168201915b505050505081525050905060008084604051602401611f3d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611fe4908590613f79565b600060405180830381855afa9150503d806000811461201f576040519150601f19603f3d011682016040523d82523d6000602084013e612024565b606091505b5091509150818015612037575060008151115b156120575780806020019051810190612050919061400c565b9350612089565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120938785612bb5565b979650505050505050565b600080826040516024016120b491815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061215b908590613f79565b600060405180830381855afa9150503d8060008114612196576040519150601f19603f3d011682016040523d82523d6000602084013e61219b565b606091505b50915091508180156121ae575060008151115b156121ce57808060200190518101906121c7919061400c565b93506121d6565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906122b1908590613f79565b600060405180830381855afa9150503d80600081146122ec576040519150601f19603f3d011682016040523d82523d6000602084013e6122f1565b606091505b5091509150818015612304575060008151115b15612326578080602001905181019061231d9190613f95565b945061235d9050565b600085815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a08401919061243890613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461246490613dbe565b80156124b15780601f10612486576101008083540402835291602001916124b1565b820191906000526020600020905b81548152906001019060200180831161249457829003601f168201915b505050505081525050905060006124c784610878565b156124d35750826124ef565b6124ec8460016124e287611a77565b6104409190613eff565b90505b600061250860e061250187600061192f565b901c61314f565b6000868152600560205260408120549192509061252a9063ffffffff1661314f565b61253d856020015163ffffffff1661314f565b6125468561314f565b61255186602061328c565b875161255c906134cf565b61256989608001516134cf565b60405160200161257e96959493929190614029565b6040516020818303038152906040529050600061259b858861209e565b6125da576040518060400160405280600881526020017f696e616374697665000000000000000000000000000000000000000000000000815250612611565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b9050600061265d8660a00151856126278b61314f565b6126328c602061328c565b8688604051602001612649969594939291906141cd565b6040516020818303038152906040526134f2565b905080604051602001612670919061435d565b6040516020818303038152906040529650505050505050919050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260a0810185815263ffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8088168652868116608087019081526001604080890182815260008f815260049096529420885181549651955160608b015160ff16790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff911515780100000000000000000000000000000000000000000000000002919091167fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff9790991674010000000000000000000000000000000000000000027fffffffffffffffff0000000000000000000000000000000000000000000000009098169186169190911796909617949094169590951793909317825591519281018054939092167fffffffffffffffffffffffff0000000000000000000000000000000000000000939093169290921790559051829190600282019061284390826143f1565b509050507f5763628556709478482c29a370cd5c5054e3e42cf0fc3050cbc8e03db29aa4fc868686868660405161287e95949392919061450b565b60405180910390a195945050505050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906128cd90849061455e565b9091555050600083815260056020526040812080549091906128f49063ffffffff16613e6f565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516111c7929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320858452909152812080548392906129d0908490614576565b9091555050600082815260056020526040812080549091906129f79063ffffffff1661458d565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612a95929190918252602082015260400190565b60405180910390a4505050565b60008215612ab657612ab684866001612992565b600085815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503612b4f5750600084815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260046020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146106845780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b6000818152600460205260408120548190612cb890790100000000000000000000000000000000000000000000000000900460ff1660016145a3565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612cf25760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d295760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d5f5760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d945760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff16600003612dc85760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff16600003612dfb5760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff16600003612e2d5760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff16600003612e5e5760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff16600003612e8e5760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff16600003612ebd5760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff16600003612eeb5760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff16600003612f185760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff16600003612f445760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff16600003612f6f5760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff16600003612f995760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff16600003612fc25760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff16600003612fea5760588160ff16901b8317915050919050565b826affffffffffffffffffffff166000036130115760508160ff16901b8317915050919050565b8269ffffffffffffffffffff166000036130375760488160ff16901b8317915050919050565b8268ffffffffffffffffff1660000361305c5760408160ff16901b8317915050919050565b8267ffffffffffffffff166000036130805760388160ff16901b8317915050919050565b8266ffffffffffffff166000036130a35760308160ff16901b8317915050919050565b8265ffffffffffff166000036130c55760288160ff16901b8317915050919050565b8264ffffffffff166000036130e65760208160ff16901b8317915050919050565b8263ffffffff166000036131065760188160ff16901b8317915050919050565b8262ffffff166000036131255760108160ff16901b8317915050919050565b8261ffff166000036131435760088160ff16901b8317915050919050565b60ff1691909117919050565b60608160000361319257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156131bc57806131a681613ec7565b91506131b59050600a836145f7565b9150613196565b60008167ffffffffffffffff8111156131d7576131d7613693565b6040519080825280601f01601f191660200182016040528015613201576020820181803683370190505b5090505b841561328457613216600183614576565b9150613223600a8661460b565b61322e90603061455e565b60f81b81838151811061324357613243613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061327d600a866145f7565b9450613205565b949350505050565b6060600061329b83600261461f565b6132a690600261455e565b67ffffffffffffffff8111156132be576132be613693565b6040519080825280601f01601f1916602001820160405280156132e8576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061331f5761331f613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061338257613382613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006133be84600261461f565b6133c990600161455e565b90505b6001811115613466577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061340a5761340a613e11565b1a60f81b82828151811061342057613420613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361345f81613e92565b90506133cc565b508315611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161090e565b606061079073ffffffffffffffffffffffffffffffffffffffff8316601461328c565b6060815160000361351157505060408051602081019091526000815290565b600060405180606001604052806040815260200161465d6040913990506000600384516002613540919061455e565b61354a91906145f7565b61355590600461461f565b67ffffffffffffffff81111561356d5761356d613693565b6040519080825280601f01601f191660200182016040528015613597576020820181803683370190505b509050600182016020820185865187015b80821015613603576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506135a8565b505060038651066001811461361f57600281146136325761363a565b603d6001830353603d600283035361363a565b603d60018303535b509195945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bfb57600080fd5b6000806040838503121561367c57600080fd5b61368583613645565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126136d357600080fd5b813567ffffffffffffffff808211156136ee576136ee613693565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561373457613734613693565b8160405283815286602085880101111561374d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff81168114610bfb57600080fd5b6000806000806080858703121561379757600080fd5b843567ffffffffffffffff8111156137ae57600080fd5b6137ba878288016136c2565b9450506137c96020860161376d565b92506137d760408601613645565b91506137e560608601613645565b905092959194509250565b60006020828403121561380257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461103857600080fd5b60005b8381101561384d578181015183820152602001613835565b8381111561385c576000848401525b50505050565b6000815180845261387a816020860160208601613832565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006110386020830184613862565b6000602082840312156138d157600080fd5b5035919050565b60008083601f8401126138ea57600080fd5b50813567ffffffffffffffff81111561390257600080fd5b6020830191508360208260051b850101111561391d57600080fd5b9250929050565b60008083601f84011261393657600080fd5b50813567ffffffffffffffff81111561394e57600080fd5b60208301915083602082850101111561391d57600080fd5b60008060008060008060008060a0898b03121561398257600080fd5b61398b89613645565b975061399960208a01613645565b9650604089013567ffffffffffffffff808211156139b657600080fd5b6139c28c838d016138d8565b909850965060608b01359150808211156139db57600080fd5b6139e78c838d016138d8565b909650945060808b0135915080821115613a0057600080fd5b50613a0d8b828c01613924565b999c989b5096995094979396929594505050565b60008060008060408587031215613a3757600080fd5b843567ffffffffffffffff80821115613a4f57600080fd5b613a5b888389016138d8565b90965094506020870135915080821115613a7457600080fd5b50613a81878288016138d8565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613ac557835183529284019291840191600101613aa9565b50909695505050505050565b600060208284031215613ae357600080fd5b61103882613645565b60008060408385031215613aff57600080fd5b82359150613b0f60208401613645565b90509250929050565b8015158114613b2657600080fd5b50565b60008060408385031215613b3c57600080fd5b613b4583613645565b91506020830135613b5581613b18565b809150509250929050565b600080600060608486031215613b7557600080fd5b83359250613b8560208501613645565b9150613b9360408501613645565b90509250925092565b60008060008060808587031215613bb257600080fd5b84359350613bc260208601613645565b92506040850135613bd281613b18565b91506060850135613be281613b18565b939692955090935050565b60008060408385031215613c0057600080fd5b823591506020830135613b5581613b18565b60e081526000613c2560e083018a613862565b63ffffffff988916602084015296909716604082015273ffffffffffffffffffffffffffffffffffffffff948516606082015292909316608083015260ff1660a082015290151560c09091015292915050565b60008060408385031215613c8b57600080fd5b82359150602083013560ff81168114613b5557600080fd5b60008060408385031215613cb657600080fd5b613cbf83613645565b9150613b0f60208401613645565b600080600080600060a08688031215613ce557600080fd5b85359450602086013567ffffffffffffffff811115613d0357600080fd5b613d0f888289016136c2565b945050613d1e6040870161376d565b9250613d2c60608701613645565b9150613d3a60808701613645565b90509295509295909350565b60008060008060008060a08789031215613d5f57600080fd5b613d6887613645565b9550613d7660208801613645565b94506040870135935060608701359250608087013567ffffffffffffffff811115613da057600080fd5b613dac89828a01613924565b979a9699509497509295939492505050565b600181811c90821680613dd257607f821691505b602082108103613e0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103613e8857613e88613e40565b6001019392505050565b600081613ea157613ea1613e40565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ef857613ef8613e40565b5060010190565b600060ff821660ff841680821015613f1957613f19613e40565b90039392505050565b600060ff821680613f3557613f35613e40565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b60008151613f6f818560208601613832565b9290920192915050565b60008251613f8b818460208701613832565b9190910192915050565b60008060408385031215613fa857600080fd5b8251613fb381613b18565b6020840151909250613b5581613b18565b600060ff821660ff84168160ff0481118215151615613fe557613fe5613e40565b029392505050565b600060ff821660ff810361400357614003613e40565b60010192915050565b60006020828403121561401e57600080fd5b815161103881613b18565b7f7b2263757272656e7420737570706c79223a2022000000000000000000000000815260008751614061816014850160208c01613832565b7f222c2022737570706c7920636170223a20220000000000000000000000000000601491840191820152875161409e816026840160208c01613832565b7f222c202261646d696e2028696429223a202200000000000000000000000000006026929091019182015286516140dc816038840160208b01613832565b7f222c202261646d696e202870726574747920696429223a20220000000000000060389290910191820152855161411a816051840160208a01613832565b7f222c20226f7261636c652061646472657373223a202200000000000000000000605192909101918201528451614158816067840160208901613832565b6141bf6141966141906067848601017f222c2022636f6e646974696f6e732061646472657373223a20220000000000008152601a0190565b87613f5d565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008751614205816018850160208c01613832565b7f222c2022646f6d61696e223a20220000000000000000000000000000000000006018918401918201528751614242816026840160208c01613832565b7f222c20226964223a202200000000000000000000000000000000000000000000602692909101918201528651614280816030840160208b01613832565b7f222c2022707265747479206964223a20220000000000000000000000000000006030929091019182015285516142be816041840160208a01613832565b7f222c2022737461747573223a20220000000000000000000000000000000000006041929091019182015284516142fc81604f840160208901613832565b6141bf614334614190604f848601017f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161439581601d850160208701613832565b91909101601d0192915050565b601f8211156143ec57600081815260208120601f850160051c810160208610156143c95750805b601f850160051c820191505b818110156143e8578281556001016143d5565b5050505b505050565b815167ffffffffffffffff81111561440b5761440b613693565b61441f816144198454613dbe565b846143a2565b602080601f831160018114614472576000841561443c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556143e8565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156144bf578886015182559484019460019091019084016144a0565b50858210156144fb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b85815260a06020820152600061452460a0830187613862565b63ffffffff9590951660408301525073ffffffffffffffffffffffffffffffffffffffff9283166060820152911660809091015292915050565b6000821982111561457157614571613e40565b500190565b60008282101561458857614588613e40565b500390565b600063ffffffff821680613f3557613f35613e40565b600060ff821660ff84168060ff038211156145c0576145c0613e40565b019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614606576146066145c8565b500490565b60008261461a5761461a6145c8565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561465757614657613e40565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122097fadf390de83cd4af64a5ba5c423dc2c55447032371de4c0503ab2c5bc3ed5564736f6c634300080f003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203100000000000000000000", - "nonce": "0x16", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0xf8f5e2cc6bcc6f671de8292b70e95e2260bc9a84b1a6046b8c8b0a0a50a5b9e5", - "transactionIndex": "0xb", - "blockHash": "0x5de805e89350f1fd2360decf32cf7c08b239eca3eb5bdcc77afd7d8efe6e1e4f", - "blockNumber": "0xabb5f8", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "to": null, - "cumulativeGasUsed": "0x566808", - "gasUsed": "0x3cb22c", - "contractAddress": "0xf55228444742e6812535bcda350167cd965121b7", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d0e341" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/4/run-latest.json", - "returns": {}, - "timestamp": 1661264584, - "commit": "fe20161" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/4/run-latest.json b/broadcast/Hats.s.sol/4/run-latest.json deleted file mode 100644 index 10a021b..0000000 --- a/broadcast/Hats.s.sol/4/run-latest.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xf8f5e2cc6bcc6f671de8292b70e95e2260bc9a84b1a6046b8c8b0a0a50a5b9e5", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0xf55228444742e6812535bcda350167cd965121b7", - "function": null, - "arguments": null, - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x4ee79f", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b506040516200497938038062004979833981016040819052620000349162000060565b6002620000428282620001cb565b505062000297565b634e487b7160e01b600052604160045260246000fd5b600060208083850312156200007457600080fd5b82516001600160401b03808211156200008c57600080fd5b818501915085601f830112620000a157600080fd5b815181811115620000b657620000b66200004a565b604051601f8201601f19908116603f01168101908382118183101715620000e157620000e16200004a565b816040528281528886848701011115620000fa57600080fd5b600093505b828410156200011e5784840186015181850187015292850192620000ff565b82841115620001305760008684830101525b98975050505050505050565b600181811c908216806200015157607f821691505b6020821081036200017257634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001c657600081815260208120601f850160051c81016020861015620001a15750805b601f850160051c820191505b81811015620001c257828155600101620001ad565b5050505b505050565b81516001600160401b03811115620001e757620001e76200004a565b620001ff81620001f884546200013c565b8462000178565b602080601f8311600181146200023757600084156200021e5750858301515b600019600386901b1c1916600185901b178555620001c2565b600085815260208120601f198616915b82811015620002685788860151825594840194600190910190840162000247565b5085821015620002875787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6146d280620002a76000396000f3fe608060405234801561001057600080fd5b50600436106101d95760003560e01c8063a22cb46511610104578063d70343d8116100a2578063f242432a11610071578063f242432a14610486578063fb2aaa4c14610494578063fc3e05a4146104b9578063fd427358146104c957600080fd5b8063d70343d81461041f578063e769138514610432578063e985e9c514610445578063efdfb0881461047357600080fd5b8063afaae55a116100de578063afaae55a146103c0578063b56f7562146103d3578063c43dc177146103e6578063d395acf8146103f957600080fd5b8063a22cb4651461036c578063a2be079b1461037f578063a4a1f06c146103ad57600080fd5b806345fffac81161017c578063641f776e1161014b578063641f776e146102f85780637178fb511461030b5780637a9df89f1461034657806382afd23b1461035957600080fd5b806345fffac81461029f5780634e1273f4146102b257806354a1826c146102d2578063619531c7146102e557600080fd5b806306fdde03116101b857806306fdde031461024f5780630e89341c146102645780632eb2c2d6146102775780634352409a1461028c57600080fd5b8062fdd58e146101de578063018632e91461020457806301ffc9a71461022c575b600080fd5b6101f16101ec366004613669565b6104dc565b6040519081526020015b60405180910390f35b610217610212366004613781565b61068b565b604080519283526020830191909152016101fb565b61023f61023a3660046137f0565b6106b1565b60405190151581526020016101fb565b610257610796565b6040516101fb91906138ac565b6102576102723660046138bf565b610824565b61028a610285366004613966565b61082f565b005b61023f61029a366004613669565b610861565b61023f6102ad3660046138bf565b610878565b6102c56102c0366004613a21565b6108a7565b6040516101fb9190613a8d565b61023f6102e0366004613669565b610a23565b6101f16102f3366004613ad1565b610b7e565b61023f610306366004613aec565b610c00565b6103316103193660046138bf565b60056020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101fb565b61028a6103543660046138bf565b610e57565b61023f6103673660046138bf565b610ede565b61028a61037a366004613b29565b61103f565b61023f61038d366004613aec565b600660209081526000928352604080842090915290825290205460ff1681565b61028a6103bb366004613b60565b611071565b61023f6103ce366004613b9c565b6111d5565b61023f6103e1366004613669565b6113a7565b61023f6103f4366004613bed565b611422565b61040c6104073660046138bf565b61148d565b6040516101fb9796959493929190613c12565b61023f61042d366004613aec565b611648565b6101f1610440366004613c78565b61192f565b61023f610453366004613ca3565b600160209081526000928352604080842090915290825290205460ff1681565b6101f1610481366004613ccd565b61197b565b61028a610285366004613d46565b6104a76104a23660046138bf565b611a77565b60405160ff90911681526020016101fb565b6003546103319063ffffffff1681565b61023f6104d73660046138bf565b611dd7565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916105a890613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546105d490613dbe565b80156106215780601f106105f657610100808354040283529160200191610621565b820191906000526020600020905b81548152906001019060200180831161060457829003601f168201915b50505050508152505090506000915061063a818461209e565b801561064c575061064c8482856121df565b156106845773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60008061069733610b7e565b91506106a6828787878761197b565b905094509492505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061074457507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061079057507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600280546107a390613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546107cf90613dbe565b801561081c5780601f106107f15761010080835404028352916020019161081c565b820191906000526020600020905b8154815290600101906020018083116107ff57829003601f168201915b505050505081565b606061079082612367565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600161086f84846104dc565b10159392505050565b600080821180156107905750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff81111561093057610930613693565b604051908082528060200260200182016040528015610959578160200160208202803683370190505b50905060005b84811015610a1a5760008087878481811061097c5761097c613e11565b90506020020160208101906109919190613ad1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008585848181106109df576109df613e11565b90506020020135815260200190815260200160002054828281518110610a0757610a07613e11565b602090810291909101015260010161095f565b50949350505050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610aef90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1b90613dbe565b8015610b685780601f10610b3d57610100808354040283529160200191610b68565b820191906000526020600020905b815481529060010190602001808311610b4b57829003601f168201915b50505050508152505090506106818482856121df565b6003805460009160e0918390610b999063ffffffff16613e6f565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050610bde8160405180602001604052806000815250600160008061268c565b50610bfb828260016040518060200160405280600081525061288f565b919050565b6000828152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610ccc90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf890613dbe565b8015610d455780601f10610d1a57610100808354040283529160200191610d45565b820191906000526020600020905b815481529060010190602001808311610d2857829003601f168201915b5050505050815250509050610d5a33856113a7565b610d99576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810185905260440161090e565b6020808201516000868152600590925260409091205463ffffffff918216911610610df0576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dfa8385610861565b15610e31576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e4d838560016040518060200160405280600081525061288f565b5060019392505050565b610e613382610861565b610e97576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ea333826001612992565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610faa90613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd690613dbe565b80156110235780601f10610ff857610100808354040283529160200191611023565b820191906000526020600020905b81548152906001019060200180831161100657829003601f168201915b5050505050815250509050611038818461209e565b9392505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61107b33846113a7565b6110b1576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260016110be84836104dc565b10156110f6576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208484529091528120805490919061113290613e92565b9091555073ffffffffffffffffffffffffffffffffffffffff82166000908152602081815260408083208484529091528120805490919061117290613ec7565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916112a190613dbe565b80601f01602080910402602001604051908101604052809291908181526020018280546112cd90613dbe565b801561131a5780601f106112ef5761010080835404028352916020019161131a565b820191906000526020600020905b8154815290600101906020018083116112fd57829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138e576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139a86868686612aa2565b5060019695505050505050565b60006113b282610878565b156113bf57506000610790565b600060016113cc84611a77565b6113d69190613eff565b90505b60018160ff1610611413576113f28461029a858461192f565b15611401576001915050610790565b8061140b81613f22565b9150506113d9565b6106818461029a85600061192f565b6000828152600460205260408120600181015473ffffffffffffffffffffffffffffffffffffffff163314611483576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106818484612bb5565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff7801000000000000000000000000000000000000000000000000820481161515948301949094527901000000000000000000000000000000000000000000000000009004909216606083810191909152600182015490931660808301526002810180549394938493849384938493849384939092909160a08401919061156e90613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461159a90613dbe565b80156115e75780601f106115bc576101008083540402835291602001916115e7565b820191906000526020600020905b8154815290600101906020018083116115ca57829003601f168201915b5050509190925250505060a081015160208083015160008d81526005909252604090912054835160808501516060860151949d50929b5063ffffffff9091169950975095509350905061163a818a61209e565b915050919395979092949650565b6000828152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161171490613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461174090613dbe565b801561178d5780601f106117625761010080835404028352916020019161178d565b820191906000526020600020905b81548152906001019060200180831161177057829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061186e908590613f79565b600060405180830381855afa9150503d80600081146118a9576040519150601f19603f3d011682016040523d82523d6000602084013e6118ae565b606091505b50915091508180156118c1575060008151115b156118e457808060200190518101906118da9190613f95565b9095509350611916565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61192289898787612aa2565b9998505050505050505050565b60008061193d83601c613eff565b611948906008613fc4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b60006119873387610861565b6119c6576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810187905260440161090e565b60ff861615611a01576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a0a86612c7c565b9050611a19818686868661268c565b5060008681526004602052604090208054601990611a5690790100000000000000000000000000000000000000000000000000900460ff16613fed565b91906101000a81548160ff021916908360ff16021790555095945050505050565b600060ff821615611a8a5750601c919050565b61ffff821615611a9c5750601b919050565b62ffffff821615611aaf5750601a919050565b63ffffffff821615611ac357506019919050565b64ffffffffff821615611ad857506018919050565b65ffffffffffff821615611aee57506017919050565b66ffffffffffffff821615611b0557506016919050565b67ffffffffffffffff821615611b1d57506015919050565b68ffffffffffffffffff821615611b3657506014919050565b69ffffffffffffffffffff821615611b5057506013919050565b6affffffffffffffffffffff821615611b6b57506012919050565b6bffffffffffffffffffffffff821615611b8757506011919050565b6cffffffffffffffffffffffffff821615611ba457506010919050565b6dffffffffffffffffffffffffffff821615611bc25750600f919050565b6effffffffffffffffffffffffffffff821615611be15750600e919050565b6fffffffffffffffffffffffffffffffff821615611c015750600d919050565b70ffffffffffffffffffffffffffffffffff821615611c225750600c919050565b71ffffffffffffffffffffffffffffffffffff821615611c445750600b919050565b72ffffffffffffffffffffffffffffffffffffff821615611c675750600a919050565b73ffffffffffffffffffffffffffffffffffffffff821615611c8b57506009919050565b74ffffffffffffffffffffffffffffffffffffffffff821615611cb057506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff821615611cd657506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff821615611cfd57506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff821615611d2557506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff821615611d4e57506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff821615611d7857506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff821615611da357506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615611dcf57506001919050565b506000919050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611ea390613dbe565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecf90613dbe565b8015611f1c5780601f10611ef157610100808354040283529160200191611f1c565b820191906000526020600020905b815481529060010190602001808311611eff57829003601f168201915b505050505081525050905060008084604051602401611f3d91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611fe4908590613f79565b600060405180830381855afa9150503d806000811461201f576040519150601f19603f3d011682016040523d82523d6000602084013e612024565b606091505b5091509150818015612037575060008151115b156120575780806020019051810190612050919061400c565b9350612089565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120938785612bb5565b979650505050505050565b600080826040516024016120b491815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061215b908590613f79565b600060405180830381855afa9150503d8060008114612196576040519150601f19603f3d011682016040523d82523d6000602084013e61219b565b606091505b50915091508180156121ae575060008151115b156121ce57808060200190518101906121c7919061400c565b93506121d6565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906122b1908590613f79565b600060405180830381855afa9150503d80600081146122ec576040519150601f19603f3d011682016040523d82523d6000602084013e6122f1565b606091505b5091509150818015612304575060008151115b15612326578080602001905181019061231d9190613f95565b945061235d9050565b600085815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600460209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a08401919061243890613dbe565b80601f016020809104026020016040519081016040528092919081815260200182805461246490613dbe565b80156124b15780601f10612486576101008083540402835291602001916124b1565b820191906000526020600020905b81548152906001019060200180831161249457829003601f168201915b505050505081525050905060006124c784610878565b156124d35750826124ef565b6124ec8460016124e287611a77565b6104409190613eff565b90505b600061250860e061250187600061192f565b901c61314f565b6000868152600560205260408120549192509061252a9063ffffffff1661314f565b61253d856020015163ffffffff1661314f565b6125468561314f565b61255186602061328c565b875161255c906134cf565b61256989608001516134cf565b60405160200161257e96959493929190614029565b6040516020818303038152906040529050600061259b858861209e565b6125da576040518060400160405280600881526020017f696e616374697665000000000000000000000000000000000000000000000000815250612611565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b9050600061265d8660a00151856126278b61314f565b6126328c602061328c565b8688604051602001612649969594939291906141cd565b6040516020818303038152906040526134f2565b905080604051602001612670919061435d565b6040516020818303038152906040529650505050505050919050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260a0810185815263ffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8088168652868116608087019081526001604080890182815260008f815260049096529420885181549651955160608b015160ff16790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff911515780100000000000000000000000000000000000000000000000002919091167fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff9790991674010000000000000000000000000000000000000000027fffffffffffffffff0000000000000000000000000000000000000000000000009098169186169190911796909617949094169590951793909317825591519281018054939092167fffffffffffffffffffffffff0000000000000000000000000000000000000000939093169290921790559051829190600282019061284390826143f1565b509050507f5763628556709478482c29a370cd5c5054e3e42cf0fc3050cbc8e03db29aa4fc868686868660405161287e95949392919061450b565b60405180910390a195945050505050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906128cd90849061455e565b9091555050600083815260056020526040812080549091906128f49063ffffffff16613e6f565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516111c7929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208181526040808320858452909152812080548392906129d0908490614576565b9091555050600082815260056020526040812080549091906129f79063ffffffff1661458d565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612a95929190918252602082015260400190565b60405180910390a4505050565b60008215612ab657612ab684866001612992565b600085815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503612b4f5750600084815260066020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260046020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146106845780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b6000818152600460205260408120548190612cb890790100000000000000000000000000000000000000000000000000900460ff1660016145a3565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612cf25760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d295760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d5f5760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d945760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff16600003612dc85760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff16600003612dfb5760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff16600003612e2d5760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff16600003612e5e5760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff16600003612e8e5760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff16600003612ebd5760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff16600003612eeb5760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff16600003612f185760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff16600003612f445760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff16600003612f6f5760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff16600003612f995760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff16600003612fc25760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff16600003612fea5760588160ff16901b8317915050919050565b826affffffffffffffffffffff166000036130115760508160ff16901b8317915050919050565b8269ffffffffffffffffffff166000036130375760488160ff16901b8317915050919050565b8268ffffffffffffffffff1660000361305c5760408160ff16901b8317915050919050565b8267ffffffffffffffff166000036130805760388160ff16901b8317915050919050565b8266ffffffffffffff166000036130a35760308160ff16901b8317915050919050565b8265ffffffffffff166000036130c55760288160ff16901b8317915050919050565b8264ffffffffff166000036130e65760208160ff16901b8317915050919050565b8263ffffffff166000036131065760188160ff16901b8317915050919050565b8262ffffff166000036131255760108160ff16901b8317915050919050565b8261ffff166000036131435760088160ff16901b8317915050919050565b60ff1691909117919050565b60608160000361319257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156131bc57806131a681613ec7565b91506131b59050600a836145f7565b9150613196565b60008167ffffffffffffffff8111156131d7576131d7613693565b6040519080825280601f01601f191660200182016040528015613201576020820181803683370190505b5090505b841561328457613216600183614576565b9150613223600a8661460b565b61322e90603061455e565b60f81b81838151811061324357613243613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061327d600a866145f7565b9450613205565b949350505050565b6060600061329b83600261461f565b6132a690600261455e565b67ffffffffffffffff8111156132be576132be613693565b6040519080825280601f01601f1916602001820160405280156132e8576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061331f5761331f613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061338257613382613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006133be84600261461f565b6133c990600161455e565b90505b6001811115613466577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061340a5761340a613e11565b1a60f81b82828151811061342057613420613e11565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c9361345f81613e92565b90506133cc565b508315611038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161090e565b606061079073ffffffffffffffffffffffffffffffffffffffff8316601461328c565b6060815160000361351157505060408051602081019091526000815290565b600060405180606001604052806040815260200161465d6040913990506000600384516002613540919061455e565b61354a91906145f7565b61355590600461461f565b67ffffffffffffffff81111561356d5761356d613693565b6040519080825280601f01601f191660200182016040528015613597576020820181803683370190505b509050600182016020820185865187015b80821015613603576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506135a8565b505060038651066001811461361f57600281146136325761363a565b603d6001830353603d600283035361363a565b603d60018303535b509195945050505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bfb57600080fd5b6000806040838503121561367c57600080fd5b61368583613645565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f8301126136d357600080fd5b813567ffffffffffffffff808211156136ee576136ee613693565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561373457613734613693565b8160405283815286602085880101111561374d57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff81168114610bfb57600080fd5b6000806000806080858703121561379757600080fd5b843567ffffffffffffffff8111156137ae57600080fd5b6137ba878288016136c2565b9450506137c96020860161376d565b92506137d760408601613645565b91506137e560608601613645565b905092959194509250565b60006020828403121561380257600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461103857600080fd5b60005b8381101561384d578181015183820152602001613835565b8381111561385c576000848401525b50505050565b6000815180845261387a816020860160208601613832565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006110386020830184613862565b6000602082840312156138d157600080fd5b5035919050565b60008083601f8401126138ea57600080fd5b50813567ffffffffffffffff81111561390257600080fd5b6020830191508360208260051b850101111561391d57600080fd5b9250929050565b60008083601f84011261393657600080fd5b50813567ffffffffffffffff81111561394e57600080fd5b60208301915083602082850101111561391d57600080fd5b60008060008060008060008060a0898b03121561398257600080fd5b61398b89613645565b975061399960208a01613645565b9650604089013567ffffffffffffffff808211156139b657600080fd5b6139c28c838d016138d8565b909850965060608b01359150808211156139db57600080fd5b6139e78c838d016138d8565b909650945060808b0135915080821115613a0057600080fd5b50613a0d8b828c01613924565b999c989b5096995094979396929594505050565b60008060008060408587031215613a3757600080fd5b843567ffffffffffffffff80821115613a4f57600080fd5b613a5b888389016138d8565b90965094506020870135915080821115613a7457600080fd5b50613a81878288016138d8565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613ac557835183529284019291840191600101613aa9565b50909695505050505050565b600060208284031215613ae357600080fd5b61103882613645565b60008060408385031215613aff57600080fd5b82359150613b0f60208401613645565b90509250929050565b8015158114613b2657600080fd5b50565b60008060408385031215613b3c57600080fd5b613b4583613645565b91506020830135613b5581613b18565b809150509250929050565b600080600060608486031215613b7557600080fd5b83359250613b8560208501613645565b9150613b9360408501613645565b90509250925092565b60008060008060808587031215613bb257600080fd5b84359350613bc260208601613645565b92506040850135613bd281613b18565b91506060850135613be281613b18565b939692955090935050565b60008060408385031215613c0057600080fd5b823591506020830135613b5581613b18565b60e081526000613c2560e083018a613862565b63ffffffff988916602084015296909716604082015273ffffffffffffffffffffffffffffffffffffffff948516606082015292909316608083015260ff1660a082015290151560c09091015292915050565b60008060408385031215613c8b57600080fd5b82359150602083013560ff81168114613b5557600080fd5b60008060408385031215613cb657600080fd5b613cbf83613645565b9150613b0f60208401613645565b600080600080600060a08688031215613ce557600080fd5b85359450602086013567ffffffffffffffff811115613d0357600080fd5b613d0f888289016136c2565b945050613d1e6040870161376d565b9250613d2c60608701613645565b9150613d3a60808701613645565b90509295509295909350565b60008060008060008060a08789031215613d5f57600080fd5b613d6887613645565b9550613d7660208801613645565b94506040870135935060608701359250608087013567ffffffffffffffff811115613da057600080fd5b613dac89828a01613924565b979a9699509497509295939492505050565b600181811c90821680613dd257607f821691505b602082108103613e0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103613e8857613e88613e40565b6001019392505050565b600081613ea157613ea1613e40565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ef857613ef8613e40565b5060010190565b600060ff821660ff841680821015613f1957613f19613e40565b90039392505050565b600060ff821680613f3557613f35613e40565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b60008151613f6f818560208601613832565b9290920192915050565b60008251613f8b818460208701613832565b9190910192915050565b60008060408385031215613fa857600080fd5b8251613fb381613b18565b6020840151909250613b5581613b18565b600060ff821660ff84168160ff0481118215151615613fe557613fe5613e40565b029392505050565b600060ff821660ff810361400357614003613e40565b60010192915050565b60006020828403121561401e57600080fd5b815161103881613b18565b7f7b2263757272656e7420737570706c79223a2022000000000000000000000000815260008751614061816014850160208c01613832565b7f222c2022737570706c7920636170223a20220000000000000000000000000000601491840191820152875161409e816026840160208c01613832565b7f222c202261646d696e2028696429223a202200000000000000000000000000006026929091019182015286516140dc816038840160208b01613832565b7f222c202261646d696e202870726574747920696429223a20220000000000000060389290910191820152855161411a816051840160208a01613832565b7f222c20226f7261636c652061646472657373223a202200000000000000000000605192909101918201528451614158816067840160208901613832565b6141bf6141966141906067848601017f222c2022636f6e646974696f6e732061646472657373223a20220000000000008152601a0190565b87613f5d565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008751614205816018850160208c01613832565b7f222c2022646f6d61696e223a20220000000000000000000000000000000000006018918401918201528751614242816026840160208c01613832565b7f222c20226964223a202200000000000000000000000000000000000000000000602692909101918201528651614280816030840160208b01613832565b7f222c2022707265747479206964223a20220000000000000000000000000000006030929091019182015285516142be816041840160208a01613832565b7f222c2022737461747573223a20220000000000000000000000000000000000006041929091019182015284516142fc81604f840160208901613832565b6141bf614334614190604f848601017f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161439581601d850160208701613832565b91909101601d0192915050565b601f8211156143ec57600081815260208120601f850160051c810160208610156143c95750805b601f850160051c820191505b818110156143e8578281556001016143d5565b5050505b505050565b815167ffffffffffffffff81111561440b5761440b613693565b61441f816144198454613dbe565b846143a2565b602080601f831160018114614472576000841561443c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556143e8565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156144bf578886015182559484019460019091019084016144a0565b50858210156144fb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b85815260a06020820152600061452460a0830187613862565b63ffffffff9590951660408301525073ffffffffffffffffffffffffffffffffffffffff9283166060820152911660809091015292915050565b6000821982111561457157614571613e40565b500190565b60008282101561458857614588613e40565b500390565b600063ffffffff821680613f3557613f35613e40565b600060ff821660ff84168060ff038211156145c0576145c0613e40565b019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614606576146066145c8565b500490565b60008261461a5761461a6145c8565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561465757614657613e40565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122097fadf390de83cd4af64a5ba5c423dc2c55447032371de4c0503ab2c5bc3ed5564736f6c634300080f003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203100000000000000000000", - "nonce": "0x16", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0xf8f5e2cc6bcc6f671de8292b70e95e2260bc9a84b1a6046b8c8b0a0a50a5b9e5", - "transactionIndex": "0xb", - "blockHash": "0x5de805e89350f1fd2360decf32cf7c08b239eca3eb5bdcc77afd7d8efe6e1e4f", - "blockNumber": "0xabb5f8", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "to": null, - "cumulativeGasUsed": "0x566808", - "gasUsed": "0x3cb22c", - "contractAddress": "0xf55228444742e6812535bcda350167cd965121b7", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d0e341" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/4/run-latest.json", - "returns": {}, - "timestamp": 1661264584, - "commit": "fe20161" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/5/run-1657745364.json b/broadcast/Hats.s.sol/5/run-1657745364.json deleted file mode 100644 index 853985f..0000000 --- a/broadcast/Hats.s.sol/5/run-1657745364.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x80bd4a97d3a46549b469bd975eae33c7820341da6c0bda7804c5d2a306c90a75", - "type": "CREATE", - "contractName": "Hats", - "contractAddress": "0xe81597289a249ae725c2d80e7848dbfa9708c22d", - "tx": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x4b4db4", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b50614424806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c8063a2be079b1161010f578063d70343d8116100a2578063f242432a11610071578063f242432a146104c1578063fb2aaa4c146104cf578063fc3e05a4146104f4578063fd4273581461050457600080fd5b8063d70343d81461045a578063e76913851461046d578063e985e9c514610480578063efdfb088146104ae57600080fd5b8063b56f7562116100de578063b56f7562146103e9578063bca747b5146103fc578063c43dc17714610421578063d395acf81461043457600080fd5b8063a2be079b14610382578063a4a1f06c146103b0578063afaae55a146103c3578063b23abf7a146103d657600080fd5b80634e1273f4116101875780637178fb51116101565780637178fb511461030e5780637a9df89f1461034957806382afd23b1461035c578063a22cb4651461036f57600080fd5b80634e1273f4146102b557806354a1826c146102d5578063619531c7146102e8578063641f776e146102fb57600080fd5b80630e89341c116101c35780630e89341c1461025a5780632eb2c2d61461027a5780634352409a1461028f57806345fffac8146102a257600080fd5b8062fdd58e146101e9578063018632e91461020f57806301ffc9a714610237575b600080fd5b6101fc6101f736600461347f565b610517565b6040519081526020015b60405180910390f35b61022261021d3660046135c0565b6106c7565b60408051928352602083019190915201610206565b61024a61024536600461362f565b6106ed565b6040519015158152602001610206565b61026d610268366004613671565b6107ce565b6040516102069190613704565b61028d6102883660046137a5565b6107d9565b005b61024a61029d36600461347f565b61080b565b61024a6102b0366004613671565b610822565b6102c86102c3366004613860565b610851565b60405161020691906138cc565b61024a6102e336600461347f565b6109cd565b6101fc6102f6366004613910565b610b28565b61024a61030936600461392b565b610bde565b61033461031c366004613671565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610206565b61028d610357366004613671565b610e35565b61024a61036a366004613671565b610ebc565b61028d61037d366004613968565b61101d565b61024a61039036600461392b565b600560209081526000928352604080842090915290825290205460ff1681565b61028d6103be36600461399f565b61104f565b61024a6103d13660046139db565b6111b3565b61024a6103e4366004613a3d565b611385565b61024a6103f736600461347f565b61150d565b61040f61040a366004613671565b611588565b60405161020696959493929190613b1c565b61024a61042f366004613b7e565b6116ae565b610447610442366004613671565b611719565b6040516102069796959493929190613ba3565b61024a61046836600461392b565b6118d4565b6101fc61047b366004613c09565b611bbb565b61024a61048e366004613c2c565b600160209081526000928352604080842090915290825290205460ff1681565b6101fc6104bc366004613c56565b611c07565b61028d610288366004613ccf565b6104e26104dd366004613671565b611d03565b60405160ff9091168152602001610206565b6002546103349063ffffffff1681565b61024a610512366004613671565b612063565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916105e390613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461060f90613d47565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b505050505081525050905060009150610675818461232a565b80156106875750610687848285611385565b156106bf5773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b505b92915050565b6000806106d333610b28565b91506106e28287878787611c07565b905094509492505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061078057507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806106c15750507fffffffff00000000000000000000000000000000000000000000000000000000167f0e89341c000000000000000000000000000000000000000000000000000000001490565b60606106c18261246b565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060016108198484610517565b10159392505050565b600080821180156106c15750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b60608382146108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff8111156108da576108da6134a9565b604051908082528060200260200182016040528015610903578160200160208202803683370190505b50905060005b848110156109c45760008087878481811061092657610926613d9a565b905060200201602081019061093b9190613910565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085858481811061098957610989613d9a565b905060200201358152602001908152602001600020548282815181106109b1576109b1613d9a565b6020908102919091010152600101610909565b50949350505050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610a9990613d47565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac590613d47565b8015610b125780601f10610ae757610100808354040283529160200191610b12565b820191906000526020600020905b815481529060010190602001808311610af557829003601f168201915b50505050508152505090506106bc848285611385565b6002805460009160e0918390610b439063ffffffff16613df8565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050610b8881604051806020016040528060008152506001600080612721565b5060028054600090610b9f9063ffffffff16613df8565b91906101000a81548163ffffffff021916908363ffffffff160217905550610bd98282600160405180602001604052806000815250612928565b919050565b6000828152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610caa90613d47565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd690613d47565b8015610d235780601f10610cf857610100808354040283529160200191610d23565b820191906000526020600020905b815481529060010190602001808311610d0657829003601f168201915b5050505050815250509050610d38338561150d565b610d77576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018590526044016108b8565b6020808201516000868152600490925260409091205463ffffffff918216911610610dce576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dd8838561080b565b15610e0f576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e2b8385600160405180602001604052806000815250612928565b5060019392505050565b610e3f338261080b565b610e75576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e8133826001612a2b565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610f8890613d47565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb490613d47565b80156110015780601f10610fd657610100808354040283529160200191611001565b820191906000526020600020905b815481529060010190602001808311610fe457829003601f168201915b5050505050815250509050611016818461232a565b9392505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611059338461150d565b61108f576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600161109c8483610517565b10156110d4576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208484529091528120805490919061111090613e1b565b9091555073ffffffffffffffffffffffffffffffffffffffff82166000908152602081815260408083208484529091528120805490919061115090613e50565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161127f90613d47565b80601f01602080910402602001604051908101604052809291908181526020018280546112ab90613d47565b80156112f85780601f106112cd576101008083540402835291602001916112f8565b820191906000526020600020905b8154815290600101906020018083116112db57829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461136c576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61137886868686612b3b565b5060019695505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611457908590613e88565b600060405180830381855afa9150503d8060008114611492576040519150601f19603f3d011682016040523d82523d6000602084013e611497565b606091505b50915091508180156114aa575060008151115b156114cc57808060200190518101906114c39190613ea4565b94506115039050565b600085815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b600061151882610822565b15611525575060006106c1565b6000600161153284611d03565b61153c9190613ed3565b90505b60018160ff1610611579576115588461029d8584611bbb565b156115675760019150506106c1565b8061157181613ef6565b91505061153f565b6106bc8461029d856000611bbb565b60036020526000908152604090208054600182015460028301805473ffffffffffffffffffffffffffffffffffffffff8085169563ffffffff740100000000000000000000000000000000000000008704169560ff78010000000000000000000000000000000000000000000000008204811696790100000000000000000000000000000000000000000000000000909204169492169290919061162b90613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461165790613d47565b80156116a45780601f10611679576101008083540402835291602001916116a4565b820191906000526020600020905b81548152906001019060200180831161168757829003601f168201915b5050505050905086565b6000828152600360205260408120600181015473ffffffffffffffffffffffffffffffffffffffff16331461170f576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106bc8484612c4e565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff7801000000000000000000000000000000000000000000000000820481161515948301949094527901000000000000000000000000000000000000000000000000009004909216606083810191909152600182015490931660808301526002810180549394938493849384938493849384939092909160a0840191906117fa90613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461182690613d47565b80156118735780601f1061184857610100808354040283529160200191611873565b820191906000526020600020905b81548152906001019060200180831161185657829003601f168201915b5050509190925250505060a081015160208083015160008d81526004909252604090912054835160808501516060860151949d50929b5063ffffffff909116995097509550935090506118c6818a61232a565b915050919395979092949650565b6000828152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916119a090613d47565b80601f01602080910402602001604051908101604052809291908181526020018280546119cc90613d47565b8015611a195780601f106119ee57610100808354040283529160200191611a19565b820191906000526020600020905b8154815290600101906020018083116119fc57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611afa908590613e88565b600060405180830381855afa9150503d8060008114611b35576040519150601f19603f3d011682016040523d82523d6000602084013e611b3a565b606091505b5091509150818015611b4d575060008151115b15611b705780806020019051810190611b669190613ea4565b9095509350611ba2565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bae89898787612b3b565b9998505050505050505050565b600080611bc983601c613ed3565b611bd4906008613f31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b6000611c13338761080b565b611c52576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018790526044016108b8565b60ff861615611c8d576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c9686612d15565b9050611ca58186868686612721565b5060008681526003602052604090208054601990611ce290790100000000000000000000000000000000000000000000000000900460ff16613f5a565b91906101000a81548160ff021916908360ff16021790555095945050505050565b600060ff821615611d165750601c919050565b61ffff821615611d285750601b919050565b62ffffff821615611d3b5750601a919050565b63ffffffff821615611d4f57506019919050565b64ffffffffff821615611d6457506018919050565b65ffffffffffff821615611d7a57506017919050565b66ffffffffffffff821615611d9157506016919050565b67ffffffffffffffff821615611da957506015919050565b68ffffffffffffffffff821615611dc257506014919050565b69ffffffffffffffffffff821615611ddc57506013919050565b6affffffffffffffffffffff821615611df757506012919050565b6bffffffffffffffffffffffff821615611e1357506011919050565b6cffffffffffffffffffffffffff821615611e3057506010919050565b6dffffffffffffffffffffffffffff821615611e4e5750600f919050565b6effffffffffffffffffffffffffffff821615611e6d5750600e919050565b6fffffffffffffffffffffffffffffffff821615611e8d5750600d919050565b70ffffffffffffffffffffffffffffffffff821615611eae5750600c919050565b71ffffffffffffffffffffffffffffffffffff821615611ed05750600b919050565b72ffffffffffffffffffffffffffffffffffffff821615611ef35750600a919050565b73ffffffffffffffffffffffffffffffffffffffff821615611f1757506009919050565b74ffffffffffffffffffffffffffffffffffffffffff821615611f3c57506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff821615611f6257506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff821615611f8957506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff821615611fb157506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff821615611fda57506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff82161561200457506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff82161561202f57506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82161561205b57506001919050565b506000919050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161212f90613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461215b90613d47565b80156121a85780601f1061217d576101008083540402835291602001916121a8565b820191906000526020600020905b81548152906001019060200180831161218b57829003601f168201915b5050505050815250509050600080846040516024016121c991815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690612270908590613e88565b600060405180830381855afa9150503d80600081146122ab576040519150601f19603f3d011682016040523d82523d6000602084013e6122b0565b606091505b50915091508180156122c3575060008151115b156122e357808060200190518101906122dc9190613f79565b9350612315565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61231f8785612c4e565b979650505050505050565b6000808260405160240161234091815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906123e7908590613e88565b600060405180830381855afa9150503d8060008114612422576040519150601f19603f3d011682016040523d82523d6000602084013e612427565b606091505b509150915081801561243a575060008151115b1561245a57808060200190518101906124539190613f79565b9350612462565b856040015193505b50505092915050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a08401919061253c90613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461256890613d47565b80156125b55780601f1061258a576101008083540402835291602001916125b5565b820191906000526020600020905b81548152906001019060200180831161259857829003601f168201915b505050505081525050905060006125cb84610822565b156125d75750826125f3565b6125f08460016125e687611d03565b61047b9190613ed3565b90505b6000848152600460209081526040808320548583015186516080880151935161262a9563ffffffff90941694929388939101613f96565b60405160208183030381529060405290506000612647848761232a565b612686576040518060400160405280600881526020017f696e6163746976650000000000000000000000000000000000000000000000008152506126bd565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006126f38560a001518884866040516020016126df949392919061411c565b6040516020818303038152906040526131e8565b9050806040516020016127069190614234565b60405160208183030381529060405295505050505050919050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260a0810185815263ffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8088168652868116608087019081526001604080890182815260008f81526003875291909120895181549751925160608c015160ff16790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff911515780100000000000000000000000000000000000000000000000002919091167fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff94909a1674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090991691871691909117979097179190911696909617949094178555519284018054939091167fffffffffffffffffffffffff000000000000000000000000000000000000000093909316929092179091559151805184936128dc9260028501929101906133c2565b509050507f5763628556709478482c29a370cd5c5054e3e42cf0fc3050cbc8e03db29aa4fc8686868686604051612917959493929190614279565b60405180910390a195945050505050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906129669084906142cc565b90915550506000838152600460205260408120805490919061298d9063ffffffff16613df8565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516111a5929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290612a699084906142e4565b909155505060008281526004602052604081208054909190612a909063ffffffff166142fb565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612b2e929190918252602082015260400190565b60405180910390a4505050565b60008215612b4f57612b4f84866001612a2b565b600085815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503612be85750600084815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260036020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146106bf5780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b6000818152600360205260408120548190612d5190790100000000000000000000000000000000000000000000000000900460ff166001614311565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d8b5760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612dc25760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612df85760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff16600003612e2d5760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff16600003612e615760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff16600003612e945760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff16600003612ec65760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff16600003612ef75760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff16600003612f275760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff16600003612f565760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff16600003612f845760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff16600003612fb15760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff16600003612fdd5760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff166000036130085760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff166000036130325760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff1660000361305b5760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff166000036130835760588160ff16901b8317915050919050565b826affffffffffffffffffffff166000036130aa5760508160ff16901b8317915050919050565b8269ffffffffffffffffffff166000036130d05760488160ff16901b8317915050919050565b8268ffffffffffffffffff166000036130f55760408160ff16901b8317915050919050565b8267ffffffffffffffff166000036131195760388160ff16901b8317915050919050565b8266ffffffffffffff1660000361313c5760308160ff16901b8317915050919050565b8265ffffffffffff1660000361315e5760288160ff16901b8317915050919050565b8264ffffffffff1660000361317f5760208160ff16901b8317915050919050565b8263ffffffff1660000361319f5760188160ff16901b8317915050919050565b8262ffffff166000036131be5760108160ff16901b8317915050919050565b8261ffff166000036131dc5760088160ff16901b8317915050919050565b60ff1691909117919050565b6060815160000361320757505060408051602081019091526000815290565b60006040518060600160405280604081526020016143af604091399050600060038451600261323691906142cc565b6132409190614336565b61324b906004614371565b9050600061325a8260206142cc565b67ffffffffffffffff811115613272576132726134a9565b6040519080825280601f01601f19166020018201604052801561329c576020820181803683370190505b509050818152600183018586518101602084015b8183101561330a5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b938201939093526004016132b0565b600389510660018114613324576002811461336e576133b4565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8301526133b4565b7f3d000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301525b509398975050505050505050565b8280546133ce90613d47565b90600052602060002090601f0160209004810192826133f05760008555613436565b82601f1061340957805160ff1916838001178555613436565b82800160010185558215613436579182015b8281111561343657825182559160200191906001019061341b565b50613442929150613446565b5090565b5b808211156134425760008155600101613447565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bd957600080fd5b6000806040838503121561349257600080fd5b61349b8361345b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156134fb576134fb6134a9565b60405290565b600082601f83011261351257600080fd5b813567ffffffffffffffff8082111561352d5761352d6134a9565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613573576135736134a9565b8160405283815286602085880101111561358c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff81168114610bd957600080fd5b600080600080608085870312156135d657600080fd5b843567ffffffffffffffff8111156135ed57600080fd5b6135f987828801613501565b945050613608602086016135ac565b92506136166040860161345b565b91506136246060860161345b565b905092959194509250565b60006020828403121561364157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101657600080fd5b60006020828403121561368357600080fd5b5035919050565b60005b838110156136a557818101518382015260200161368d565b838111156136b4576000848401525b50505050565b600081518084526136d281602086016020860161368a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061101660208301846136ba565b60008083601f84011261372957600080fd5b50813567ffffffffffffffff81111561374157600080fd5b6020830191508360208260051b850101111561375c57600080fd5b9250929050565b60008083601f84011261377557600080fd5b50813567ffffffffffffffff81111561378d57600080fd5b60208301915083602082850101111561375c57600080fd5b60008060008060008060008060a0898b0312156137c157600080fd5b6137ca8961345b565b97506137d860208a0161345b565b9650604089013567ffffffffffffffff808211156137f557600080fd5b6138018c838d01613717565b909850965060608b013591508082111561381a57600080fd5b6138268c838d01613717565b909650945060808b013591508082111561383f57600080fd5b5061384c8b828c01613763565b999c989b5096995094979396929594505050565b6000806000806040858703121561387657600080fd5b843567ffffffffffffffff8082111561388e57600080fd5b61389a88838901613717565b909650945060208701359150808211156138b357600080fd5b506138c087828801613717565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613904578351835292840192918401916001016138e8565b50909695505050505050565b60006020828403121561392257600080fd5b6110168261345b565b6000806040838503121561393e57600080fd5b8235915061394e6020840161345b565b90509250929050565b801515811461396557600080fd5b50565b6000806040838503121561397b57600080fd5b6139848361345b565b9150602083013561399481613957565b809150509250929050565b6000806000606084860312156139b457600080fd5b833592506139c46020850161345b565b91506139d26040850161345b565b90509250925092565b600080600080608085870312156139f157600080fd5b84359350613a016020860161345b565b92506040850135613a1181613957565b91506060850135613a2181613957565b939692955090935050565b803560ff81168114610bd957600080fd5b600080600060608486031215613a5257600080fd5b613a5b8461345b565b9250602084013567ffffffffffffffff80821115613a7857600080fd5b9085019060c08288031215613a8c57600080fd5b613a946134d8565b613a9d8361345b565b8152613aab602084016135ac565b60208201526040830135613abe81613957565b6040820152613acf60608401613a2c565b6060820152613ae06080840161345b565b608082015260a083013582811115613af757600080fd5b613b0389828601613501565b60a0830152509497949650505050604092909201359150565b600073ffffffffffffffffffffffffffffffffffffffff808916835263ffffffff88166020840152861515604084015260ff8616606084015280851660808401525060c060a0830152613b7260c08301846136ba565b98975050505050505050565b60008060408385031215613b9157600080fd5b82359150602083013561399481613957565b60e081526000613bb660e083018a6136ba565b63ffffffff988916602084015296909716604082015273ffffffffffffffffffffffffffffffffffffffff948516606082015292909316608083015260ff1660a082015290151560c09091015292915050565b60008060408385031215613c1c57600080fd5b8235915061394e60208401613a2c565b60008060408385031215613c3f57600080fd5b613c488361345b565b915061394e6020840161345b565b600080600080600060a08688031215613c6e57600080fd5b85359450602086013567ffffffffffffffff811115613c8c57600080fd5b613c9888828901613501565b945050613ca7604087016135ac565b9250613cb56060870161345b565b9150613cc36080870161345b565b90509295509295909350565b60008060008060008060a08789031215613ce857600080fd5b613cf18761345b565b9550613cff6020880161345b565b94506040870135935060608701359250608087013567ffffffffffffffff811115613d2957600080fd5b613d3589828a01613763565b979a9699509497509295939492505050565b600181811c90821680613d5b57607f821691505b602082108103613d94577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103613e1157613e11613dc9565b6001019392505050565b600081613e2a57613e2a613dc9565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e8157613e81613dc9565b5060010190565b60008251613e9a81846020870161368a565b9190910192915050565b60008060408385031215613eb757600080fd5b8251613ec281613957565b602084015190925061399481613957565b600060ff821660ff841680821015613eed57613eed613dc9565b90039392505050565b600060ff821680613f0957613f09613dc9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600060ff821660ff84168160ff0481118215151615613f5257613f52613dc9565b029392505050565b600060ff821660ff8103613f7057613f70613dc9565b60010192915050565b600060208284031215613f8b57600080fd5b815161101681613957565b7f7b2263757272656e7420737570706c79223a2022000000000000000000000000815260007fffffffff00000000000000000000000000000000000000000000000000000000808860e01b1660148401527f222c2022737570706c7920636170223a202200000000000000000000000000006018840152808760e01b16602a840152507f222c202261646d696e202868617429223a202200000000000000000000000000602e8301528460418301527f222c20226f7261636c6520286164647265737329223a2022000000000000000060618301527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008460601b1660798301527f222c2022636f6e646974696f6e7320286164647265737329223a202200000000608d8301526140ed60a983018460601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169052565b7f227d00000000000000000000000000000000000000000000000000000000000060bd83015260bf820161231f565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008551614154816018850160208a0161368a565b80830190507f222c20226964223a20220000000000000000000000000000000000000000000060188201528560228201527f222c2022737461747573223a2022000000000000000000000000000000000000604282015284516141be81605084016020890161368a565b7f222c202270726f70657274696573223a200000000000000000000000000000006050929091019182015283516141fc81606184016020880161368a565b7f7d00000000000000000000000000000000000000000000000000000000000000606192909101918201526062019695505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161426c81601d85016020870161368a565b91909101601d0192915050565b85815260a06020820152600061429260a08301876136ba565b63ffffffff9590951660408301525073ffffffffffffffffffffffffffffffffffffffff9283166060820152911660809091015292915050565b600082198211156142df576142df613dc9565b500190565b6000828210156142f6576142f6613dc9565b500390565b600063ffffffff821680613f0957613f09613dc9565b600060ff821660ff84168060ff0382111561432e5761432e613dc9565b019392505050565b60008261436c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a9576143a9613dc9565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220a3bd5474c3f47349f65f01552e7bdd24d1206a6ae9ec8839cd6812d9854e3b1064736f6c634300080d0033", - "nonce": "0x1", - "accessList": [] - } - } - ], - "receipts": [], - "libraries": [], - "pending": [ - "0x80bd4a97d3a46549b469bd975eae33c7820341da6c0bda7804c5d2a306c90a75" - ], - "path": "broadcast/Hats.s.sol/5/run-latest.json", - "returns": {}, - "timestamp": 1657745364 -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/5/run-1657745385.json b/broadcast/Hats.s.sol/5/run-1657745385.json deleted file mode 100644 index 60f3403..0000000 --- a/broadcast/Hats.s.sol/5/run-1657745385.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x80bd4a97d3a46549b469bd975eae33c7820341da6c0bda7804c5d2a306c90a75", - "type": "CREATE", - "contractName": "Hats", - "contractAddress": "0xe81597289a249ae725c2d80e7848dbfa9708c22d", - "tx": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x4b4db4", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b50614424806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c8063a2be079b1161010f578063d70343d8116100a2578063f242432a11610071578063f242432a146104c1578063fb2aaa4c146104cf578063fc3e05a4146104f4578063fd4273581461050457600080fd5b8063d70343d81461045a578063e76913851461046d578063e985e9c514610480578063efdfb088146104ae57600080fd5b8063b56f7562116100de578063b56f7562146103e9578063bca747b5146103fc578063c43dc17714610421578063d395acf81461043457600080fd5b8063a2be079b14610382578063a4a1f06c146103b0578063afaae55a146103c3578063b23abf7a146103d657600080fd5b80634e1273f4116101875780637178fb51116101565780637178fb511461030e5780637a9df89f1461034957806382afd23b1461035c578063a22cb4651461036f57600080fd5b80634e1273f4146102b557806354a1826c146102d5578063619531c7146102e8578063641f776e146102fb57600080fd5b80630e89341c116101c35780630e89341c1461025a5780632eb2c2d61461027a5780634352409a1461028f57806345fffac8146102a257600080fd5b8062fdd58e146101e9578063018632e91461020f57806301ffc9a714610237575b600080fd5b6101fc6101f736600461347f565b610517565b6040519081526020015b60405180910390f35b61022261021d3660046135c0565b6106c7565b60408051928352602083019190915201610206565b61024a61024536600461362f565b6106ed565b6040519015158152602001610206565b61026d610268366004613671565b6107ce565b6040516102069190613704565b61028d6102883660046137a5565b6107d9565b005b61024a61029d36600461347f565b61080b565b61024a6102b0366004613671565b610822565b6102c86102c3366004613860565b610851565b60405161020691906138cc565b61024a6102e336600461347f565b6109cd565b6101fc6102f6366004613910565b610b28565b61024a61030936600461392b565b610bde565b61033461031c366004613671565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610206565b61028d610357366004613671565b610e35565b61024a61036a366004613671565b610ebc565b61028d61037d366004613968565b61101d565b61024a61039036600461392b565b600560209081526000928352604080842090915290825290205460ff1681565b61028d6103be36600461399f565b61104f565b61024a6103d13660046139db565b6111b3565b61024a6103e4366004613a3d565b611385565b61024a6103f736600461347f565b61150d565b61040f61040a366004613671565b611588565b60405161020696959493929190613b1c565b61024a61042f366004613b7e565b6116ae565b610447610442366004613671565b611719565b6040516102069796959493929190613ba3565b61024a61046836600461392b565b6118d4565b6101fc61047b366004613c09565b611bbb565b61024a61048e366004613c2c565b600160209081526000928352604080842090915290825290205460ff1681565b6101fc6104bc366004613c56565b611c07565b61028d610288366004613ccf565b6104e26104dd366004613671565b611d03565b60405160ff9091168152602001610206565b6002546103349063ffffffff1681565b61024a610512366004613671565b612063565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916105e390613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461060f90613d47565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b505050505081525050905060009150610675818461232a565b80156106875750610687848285611385565b156106bf5773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b505b92915050565b6000806106d333610b28565b91506106e28287878787611c07565b905094509492505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061078057507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806106c15750507fffffffff00000000000000000000000000000000000000000000000000000000167f0e89341c000000000000000000000000000000000000000000000000000000001490565b60606106c18261246b565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060016108198484610517565b10159392505050565b600080821180156106c15750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b60608382146108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff8111156108da576108da6134a9565b604051908082528060200260200182016040528015610903578160200160208202803683370190505b50905060005b848110156109c45760008087878481811061092657610926613d9a565b905060200201602081019061093b9190613910565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085858481811061098957610989613d9a565b905060200201358152602001908152602001600020548282815181106109b1576109b1613d9a565b6020908102919091010152600101610909565b50949350505050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610a9990613d47565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac590613d47565b8015610b125780601f10610ae757610100808354040283529160200191610b12565b820191906000526020600020905b815481529060010190602001808311610af557829003601f168201915b50505050508152505090506106bc848285611385565b6002805460009160e0918390610b439063ffffffff16613df8565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050610b8881604051806020016040528060008152506001600080612721565b5060028054600090610b9f9063ffffffff16613df8565b91906101000a81548163ffffffff021916908363ffffffff160217905550610bd98282600160405180602001604052806000815250612928565b919050565b6000828152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610caa90613d47565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd690613d47565b8015610d235780601f10610cf857610100808354040283529160200191610d23565b820191906000526020600020905b815481529060010190602001808311610d0657829003601f168201915b5050505050815250509050610d38338561150d565b610d77576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018590526044016108b8565b6020808201516000868152600490925260409091205463ffffffff918216911610610dce576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dd8838561080b565b15610e0f576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e2b8385600160405180602001604052806000815250612928565b5060019392505050565b610e3f338261080b565b610e75576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e8133826001612a2b565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610f8890613d47565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb490613d47565b80156110015780601f10610fd657610100808354040283529160200191611001565b820191906000526020600020905b815481529060010190602001808311610fe457829003601f168201915b5050505050815250509050611016818461232a565b9392505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611059338461150d565b61108f576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600161109c8483610517565b10156110d4576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208484529091528120805490919061111090613e1b565b9091555073ffffffffffffffffffffffffffffffffffffffff82166000908152602081815260408083208484529091528120805490919061115090613e50565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161127f90613d47565b80601f01602080910402602001604051908101604052809291908181526020018280546112ab90613d47565b80156112f85780601f106112cd576101008083540402835291602001916112f8565b820191906000526020600020905b8154815290600101906020018083116112db57829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461136c576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61137886868686612b3b565b5060019695505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611457908590613e88565b600060405180830381855afa9150503d8060008114611492576040519150601f19603f3d011682016040523d82523d6000602084013e611497565b606091505b50915091508180156114aa575060008151115b156114cc57808060200190518101906114c39190613ea4565b94506115039050565b600085815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b600061151882610822565b15611525575060006106c1565b6000600161153284611d03565b61153c9190613ed3565b90505b60018160ff1610611579576115588461029d8584611bbb565b156115675760019150506106c1565b8061157181613ef6565b91505061153f565b6106bc8461029d856000611bbb565b60036020526000908152604090208054600182015460028301805473ffffffffffffffffffffffffffffffffffffffff8085169563ffffffff740100000000000000000000000000000000000000008704169560ff78010000000000000000000000000000000000000000000000008204811696790100000000000000000000000000000000000000000000000000909204169492169290919061162b90613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461165790613d47565b80156116a45780601f10611679576101008083540402835291602001916116a4565b820191906000526020600020905b81548152906001019060200180831161168757829003601f168201915b5050505050905086565b6000828152600360205260408120600181015473ffffffffffffffffffffffffffffffffffffffff16331461170f576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106bc8484612c4e565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff7801000000000000000000000000000000000000000000000000820481161515948301949094527901000000000000000000000000000000000000000000000000009004909216606083810191909152600182015490931660808301526002810180549394938493849384938493849384939092909160a0840191906117fa90613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461182690613d47565b80156118735780601f1061184857610100808354040283529160200191611873565b820191906000526020600020905b81548152906001019060200180831161185657829003601f168201915b5050509190925250505060a081015160208083015160008d81526004909252604090912054835160808501516060860151949d50929b5063ffffffff909116995097509550935090506118c6818a61232a565b915050919395979092949650565b6000828152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916119a090613d47565b80601f01602080910402602001604051908101604052809291908181526020018280546119cc90613d47565b8015611a195780601f106119ee57610100808354040283529160200191611a19565b820191906000526020600020905b8154815290600101906020018083116119fc57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611afa908590613e88565b600060405180830381855afa9150503d8060008114611b35576040519150601f19603f3d011682016040523d82523d6000602084013e611b3a565b606091505b5091509150818015611b4d575060008151115b15611b705780806020019051810190611b669190613ea4565b9095509350611ba2565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bae89898787612b3b565b9998505050505050505050565b600080611bc983601c613ed3565b611bd4906008613f31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b6000611c13338761080b565b611c52576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018790526044016108b8565b60ff861615611c8d576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c9686612d15565b9050611ca58186868686612721565b5060008681526003602052604090208054601990611ce290790100000000000000000000000000000000000000000000000000900460ff16613f5a565b91906101000a81548160ff021916908360ff16021790555095945050505050565b600060ff821615611d165750601c919050565b61ffff821615611d285750601b919050565b62ffffff821615611d3b5750601a919050565b63ffffffff821615611d4f57506019919050565b64ffffffffff821615611d6457506018919050565b65ffffffffffff821615611d7a57506017919050565b66ffffffffffffff821615611d9157506016919050565b67ffffffffffffffff821615611da957506015919050565b68ffffffffffffffffff821615611dc257506014919050565b69ffffffffffffffffffff821615611ddc57506013919050565b6affffffffffffffffffffff821615611df757506012919050565b6bffffffffffffffffffffffff821615611e1357506011919050565b6cffffffffffffffffffffffffff821615611e3057506010919050565b6dffffffffffffffffffffffffffff821615611e4e5750600f919050565b6effffffffffffffffffffffffffffff821615611e6d5750600e919050565b6fffffffffffffffffffffffffffffffff821615611e8d5750600d919050565b70ffffffffffffffffffffffffffffffffff821615611eae5750600c919050565b71ffffffffffffffffffffffffffffffffffff821615611ed05750600b919050565b72ffffffffffffffffffffffffffffffffffffff821615611ef35750600a919050565b73ffffffffffffffffffffffffffffffffffffffff821615611f1757506009919050565b74ffffffffffffffffffffffffffffffffffffffffff821615611f3c57506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff821615611f6257506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff821615611f8957506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff821615611fb157506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff821615611fda57506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff82161561200457506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff82161561202f57506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82161561205b57506001919050565b506000919050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161212f90613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461215b90613d47565b80156121a85780601f1061217d576101008083540402835291602001916121a8565b820191906000526020600020905b81548152906001019060200180831161218b57829003601f168201915b5050505050815250509050600080846040516024016121c991815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690612270908590613e88565b600060405180830381855afa9150503d80600081146122ab576040519150601f19603f3d011682016040523d82523d6000602084013e6122b0565b606091505b50915091508180156122c3575060008151115b156122e357808060200190518101906122dc9190613f79565b9350612315565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61231f8785612c4e565b979650505050505050565b6000808260405160240161234091815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906123e7908590613e88565b600060405180830381855afa9150503d8060008114612422576040519150601f19603f3d011682016040523d82523d6000602084013e612427565b606091505b509150915081801561243a575060008151115b1561245a57808060200190518101906124539190613f79565b9350612462565b856040015193505b50505092915050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a08401919061253c90613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461256890613d47565b80156125b55780601f1061258a576101008083540402835291602001916125b5565b820191906000526020600020905b81548152906001019060200180831161259857829003601f168201915b505050505081525050905060006125cb84610822565b156125d75750826125f3565b6125f08460016125e687611d03565b61047b9190613ed3565b90505b6000848152600460209081526040808320548583015186516080880151935161262a9563ffffffff90941694929388939101613f96565b60405160208183030381529060405290506000612647848761232a565b612686576040518060400160405280600881526020017f696e6163746976650000000000000000000000000000000000000000000000008152506126bd565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006126f38560a001518884866040516020016126df949392919061411c565b6040516020818303038152906040526131e8565b9050806040516020016127069190614234565b60405160208183030381529060405295505050505050919050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260a0810185815263ffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8088168652868116608087019081526001604080890182815260008f81526003875291909120895181549751925160608c015160ff16790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff911515780100000000000000000000000000000000000000000000000002919091167fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff94909a1674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090991691871691909117979097179190911696909617949094178555519284018054939091167fffffffffffffffffffffffff000000000000000000000000000000000000000093909316929092179091559151805184936128dc9260028501929101906133c2565b509050507f5763628556709478482c29a370cd5c5054e3e42cf0fc3050cbc8e03db29aa4fc8686868686604051612917959493929190614279565b60405180910390a195945050505050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906129669084906142cc565b90915550506000838152600460205260408120805490919061298d9063ffffffff16613df8565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516111a5929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290612a699084906142e4565b909155505060008281526004602052604081208054909190612a909063ffffffff166142fb565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612b2e929190918252602082015260400190565b60405180910390a4505050565b60008215612b4f57612b4f84866001612a2b565b600085815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503612be85750600084815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260036020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146106bf5780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b6000818152600360205260408120548190612d5190790100000000000000000000000000000000000000000000000000900460ff166001614311565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d8b5760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612dc25760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612df85760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff16600003612e2d5760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff16600003612e615760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff16600003612e945760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff16600003612ec65760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff16600003612ef75760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff16600003612f275760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff16600003612f565760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff16600003612f845760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff16600003612fb15760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff16600003612fdd5760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff166000036130085760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff166000036130325760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff1660000361305b5760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff166000036130835760588160ff16901b8317915050919050565b826affffffffffffffffffffff166000036130aa5760508160ff16901b8317915050919050565b8269ffffffffffffffffffff166000036130d05760488160ff16901b8317915050919050565b8268ffffffffffffffffff166000036130f55760408160ff16901b8317915050919050565b8267ffffffffffffffff166000036131195760388160ff16901b8317915050919050565b8266ffffffffffffff1660000361313c5760308160ff16901b8317915050919050565b8265ffffffffffff1660000361315e5760288160ff16901b8317915050919050565b8264ffffffffff1660000361317f5760208160ff16901b8317915050919050565b8263ffffffff1660000361319f5760188160ff16901b8317915050919050565b8262ffffff166000036131be5760108160ff16901b8317915050919050565b8261ffff166000036131dc5760088160ff16901b8317915050919050565b60ff1691909117919050565b6060815160000361320757505060408051602081019091526000815290565b60006040518060600160405280604081526020016143af604091399050600060038451600261323691906142cc565b6132409190614336565b61324b906004614371565b9050600061325a8260206142cc565b67ffffffffffffffff811115613272576132726134a9565b6040519080825280601f01601f19166020018201604052801561329c576020820181803683370190505b509050818152600183018586518101602084015b8183101561330a5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b938201939093526004016132b0565b600389510660018114613324576002811461336e576133b4565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8301526133b4565b7f3d000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301525b509398975050505050505050565b8280546133ce90613d47565b90600052602060002090601f0160209004810192826133f05760008555613436565b82601f1061340957805160ff1916838001178555613436565b82800160010185558215613436579182015b8281111561343657825182559160200191906001019061341b565b50613442929150613446565b5090565b5b808211156134425760008155600101613447565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bd957600080fd5b6000806040838503121561349257600080fd5b61349b8361345b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156134fb576134fb6134a9565b60405290565b600082601f83011261351257600080fd5b813567ffffffffffffffff8082111561352d5761352d6134a9565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613573576135736134a9565b8160405283815286602085880101111561358c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff81168114610bd957600080fd5b600080600080608085870312156135d657600080fd5b843567ffffffffffffffff8111156135ed57600080fd5b6135f987828801613501565b945050613608602086016135ac565b92506136166040860161345b565b91506136246060860161345b565b905092959194509250565b60006020828403121561364157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101657600080fd5b60006020828403121561368357600080fd5b5035919050565b60005b838110156136a557818101518382015260200161368d565b838111156136b4576000848401525b50505050565b600081518084526136d281602086016020860161368a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061101660208301846136ba565b60008083601f84011261372957600080fd5b50813567ffffffffffffffff81111561374157600080fd5b6020830191508360208260051b850101111561375c57600080fd5b9250929050565b60008083601f84011261377557600080fd5b50813567ffffffffffffffff81111561378d57600080fd5b60208301915083602082850101111561375c57600080fd5b60008060008060008060008060a0898b0312156137c157600080fd5b6137ca8961345b565b97506137d860208a0161345b565b9650604089013567ffffffffffffffff808211156137f557600080fd5b6138018c838d01613717565b909850965060608b013591508082111561381a57600080fd5b6138268c838d01613717565b909650945060808b013591508082111561383f57600080fd5b5061384c8b828c01613763565b999c989b5096995094979396929594505050565b6000806000806040858703121561387657600080fd5b843567ffffffffffffffff8082111561388e57600080fd5b61389a88838901613717565b909650945060208701359150808211156138b357600080fd5b506138c087828801613717565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613904578351835292840192918401916001016138e8565b50909695505050505050565b60006020828403121561392257600080fd5b6110168261345b565b6000806040838503121561393e57600080fd5b8235915061394e6020840161345b565b90509250929050565b801515811461396557600080fd5b50565b6000806040838503121561397b57600080fd5b6139848361345b565b9150602083013561399481613957565b809150509250929050565b6000806000606084860312156139b457600080fd5b833592506139c46020850161345b565b91506139d26040850161345b565b90509250925092565b600080600080608085870312156139f157600080fd5b84359350613a016020860161345b565b92506040850135613a1181613957565b91506060850135613a2181613957565b939692955090935050565b803560ff81168114610bd957600080fd5b600080600060608486031215613a5257600080fd5b613a5b8461345b565b9250602084013567ffffffffffffffff80821115613a7857600080fd5b9085019060c08288031215613a8c57600080fd5b613a946134d8565b613a9d8361345b565b8152613aab602084016135ac565b60208201526040830135613abe81613957565b6040820152613acf60608401613a2c565b6060820152613ae06080840161345b565b608082015260a083013582811115613af757600080fd5b613b0389828601613501565b60a0830152509497949650505050604092909201359150565b600073ffffffffffffffffffffffffffffffffffffffff808916835263ffffffff88166020840152861515604084015260ff8616606084015280851660808401525060c060a0830152613b7260c08301846136ba565b98975050505050505050565b60008060408385031215613b9157600080fd5b82359150602083013561399481613957565b60e081526000613bb660e083018a6136ba565b63ffffffff988916602084015296909716604082015273ffffffffffffffffffffffffffffffffffffffff948516606082015292909316608083015260ff1660a082015290151560c09091015292915050565b60008060408385031215613c1c57600080fd5b8235915061394e60208401613a2c565b60008060408385031215613c3f57600080fd5b613c488361345b565b915061394e6020840161345b565b600080600080600060a08688031215613c6e57600080fd5b85359450602086013567ffffffffffffffff811115613c8c57600080fd5b613c9888828901613501565b945050613ca7604087016135ac565b9250613cb56060870161345b565b9150613cc36080870161345b565b90509295509295909350565b60008060008060008060a08789031215613ce857600080fd5b613cf18761345b565b9550613cff6020880161345b565b94506040870135935060608701359250608087013567ffffffffffffffff811115613d2957600080fd5b613d3589828a01613763565b979a9699509497509295939492505050565b600181811c90821680613d5b57607f821691505b602082108103613d94577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103613e1157613e11613dc9565b6001019392505050565b600081613e2a57613e2a613dc9565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e8157613e81613dc9565b5060010190565b60008251613e9a81846020870161368a565b9190910192915050565b60008060408385031215613eb757600080fd5b8251613ec281613957565b602084015190925061399481613957565b600060ff821660ff841680821015613eed57613eed613dc9565b90039392505050565b600060ff821680613f0957613f09613dc9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600060ff821660ff84168160ff0481118215151615613f5257613f52613dc9565b029392505050565b600060ff821660ff8103613f7057613f70613dc9565b60010192915050565b600060208284031215613f8b57600080fd5b815161101681613957565b7f7b2263757272656e7420737570706c79223a2022000000000000000000000000815260007fffffffff00000000000000000000000000000000000000000000000000000000808860e01b1660148401527f222c2022737570706c7920636170223a202200000000000000000000000000006018840152808760e01b16602a840152507f222c202261646d696e202868617429223a202200000000000000000000000000602e8301528460418301527f222c20226f7261636c6520286164647265737329223a2022000000000000000060618301527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008460601b1660798301527f222c2022636f6e646974696f6e7320286164647265737329223a202200000000608d8301526140ed60a983018460601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169052565b7f227d00000000000000000000000000000000000000000000000000000000000060bd83015260bf820161231f565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008551614154816018850160208a0161368a565b80830190507f222c20226964223a20220000000000000000000000000000000000000000000060188201528560228201527f222c2022737461747573223a2022000000000000000000000000000000000000604282015284516141be81605084016020890161368a565b7f222c202270726f70657274696573223a200000000000000000000000000000006050929091019182015283516141fc81606184016020880161368a565b7f7d00000000000000000000000000000000000000000000000000000000000000606192909101918201526062019695505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161426c81601d85016020870161368a565b91909101601d0192915050565b85815260a06020820152600061429260a08301876136ba565b63ffffffff9590951660408301525073ffffffffffffffffffffffffffffffffffffffff9283166060820152911660809091015292915050565b600082198211156142df576142df613dc9565b500190565b6000828210156142f6576142f6613dc9565b500390565b600063ffffffff821680613f0957613f09613dc9565b600060ff821660ff84168060ff0382111561432e5761432e613dc9565b019392505050565b60008261436c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a9576143a9613dc9565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220a3bd5474c3f47349f65f01552e7bdd24d1206a6ae9ec8839cd6812d9854e3b1064736f6c634300080d0033", - "nonce": "0x1", - "accessList": [] - } - } - ], - "receipts": [ - { - "transactionHash": "0x80bd4a97d3a46549b469bd975eae33c7820341da6c0bda7804c5d2a306c90a75", - "transactionIndex": "0x2", - "blockHash": "0xf905967d3dee6f9b6c89b485061df2954d02f2aa646063e3ee32c70df4a5dcde", - "blockNumber": "0x6e30fb", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "to": null, - "cumulativeGasUsed": "0x3d7098", - "gasUsed": "0x39ed01", - "contractAddress": "0xe81597289a249ae725c2d80e7848dbfa9708c22d", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d05e07" - } - ], - "libraries": [], - "pending": [], - "path": "broadcast/Hats.s.sol/5/run-latest.json", - "returns": {}, - "timestamp": 1657745385 -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/5/run-1657745426.json b/broadcast/Hats.s.sol/5/run-1657745426.json deleted file mode 100644 index 493e156..0000000 --- a/broadcast/Hats.s.sol/5/run-1657745426.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x80bd4a97d3a46549b469bd975eae33c7820341da6c0bda7804c5d2a306c90a75", - "type": "CREATE", - "contractName": "Hats", - "contractAddress": "0xe81597289a249ae725c2d80e7848dbfa9708c22d", - "tx": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x4b4db4", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b50614424806100206000396000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c8063a2be079b1161010f578063d70343d8116100a2578063f242432a11610071578063f242432a146104c1578063fb2aaa4c146104cf578063fc3e05a4146104f4578063fd4273581461050457600080fd5b8063d70343d81461045a578063e76913851461046d578063e985e9c514610480578063efdfb088146104ae57600080fd5b8063b56f7562116100de578063b56f7562146103e9578063bca747b5146103fc578063c43dc17714610421578063d395acf81461043457600080fd5b8063a2be079b14610382578063a4a1f06c146103b0578063afaae55a146103c3578063b23abf7a146103d657600080fd5b80634e1273f4116101875780637178fb51116101565780637178fb511461030e5780637a9df89f1461034957806382afd23b1461035c578063a22cb4651461036f57600080fd5b80634e1273f4146102b557806354a1826c146102d5578063619531c7146102e8578063641f776e146102fb57600080fd5b80630e89341c116101c35780630e89341c1461025a5780632eb2c2d61461027a5780634352409a1461028f57806345fffac8146102a257600080fd5b8062fdd58e146101e9578063018632e91461020f57806301ffc9a714610237575b600080fd5b6101fc6101f736600461347f565b610517565b6040519081526020015b60405180910390f35b61022261021d3660046135c0565b6106c7565b60408051928352602083019190915201610206565b61024a61024536600461362f565b6106ed565b6040519015158152602001610206565b61026d610268366004613671565b6107ce565b6040516102069190613704565b61028d6102883660046137a5565b6107d9565b005b61024a61029d36600461347f565b61080b565b61024a6102b0366004613671565b610822565b6102c86102c3366004613860565b610851565b60405161020691906138cc565b61024a6102e336600461347f565b6109cd565b6101fc6102f6366004613910565b610b28565b61024a61030936600461392b565b610bde565b61033461031c366004613671565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610206565b61028d610357366004613671565b610e35565b61024a61036a366004613671565b610ebc565b61028d61037d366004613968565b61101d565b61024a61039036600461392b565b600560209081526000928352604080842090915290825290205460ff1681565b61028d6103be36600461399f565b61104f565b61024a6103d13660046139db565b6111b3565b61024a6103e4366004613a3d565b611385565b61024a6103f736600461347f565b61150d565b61040f61040a366004613671565b611588565b60405161020696959493929190613b1c565b61024a61042f366004613b7e565b6116ae565b610447610442366004613671565b611719565b6040516102069796959493929190613ba3565b61024a61046836600461392b565b6118d4565b6101fc61047b366004613c09565b611bbb565b61024a61048e366004613c2c565b600160209081526000928352604080842090915290825290205460ff1681565b6101fc6104bc366004613c56565b611c07565b61028d610288366004613ccf565b6104e26104dd366004613671565b611d03565b60405160ff9091168152602001610206565b6002546103349063ffffffff1681565b61024a610512366004613671565b612063565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916105e390613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461060f90613d47565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b505050505081525050905060009150610675818461232a565b80156106875750610687848285611385565b156106bf5773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b505b92915050565b6000806106d333610b28565b91506106e28287878787611c07565b905094509492505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061078057507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806106c15750507fffffffff00000000000000000000000000000000000000000000000000000000167f0e89341c000000000000000000000000000000000000000000000000000000001490565b60606106c18261246b565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060016108198484610517565b10159392505050565b600080821180156106c15750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b60608382146108c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff8111156108da576108da6134a9565b604051908082528060200260200182016040528015610903578160200160208202803683370190505b50905060005b848110156109c45760008087878481811061092657610926613d9a565b905060200201602081019061093b9190613910565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085858481811061098957610989613d9a565b905060200201358152602001908152602001600020548282815181106109b1576109b1613d9a565b6020908102919091010152600101610909565b50949350505050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610a9990613d47565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac590613d47565b8015610b125780601f10610ae757610100808354040283529160200191610b12565b820191906000526020600020905b815481529060010190602001808311610af557829003601f168201915b50505050508152505090506106bc848285611385565b6002805460009160e0918390610b439063ffffffff16613df8565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050610b8881604051806020016040528060008152506001600080612721565b5060028054600090610b9f9063ffffffff16613df8565b91906101000a81548163ffffffff021916908363ffffffff160217905550610bd98282600160405180602001604052806000815250612928565b919050565b6000828152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610caa90613d47565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd690613d47565b8015610d235780601f10610cf857610100808354040283529160200191610d23565b820191906000526020600020905b815481529060010190602001808311610d0657829003601f168201915b5050505050815250509050610d38338561150d565b610d77576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018590526044016108b8565b6020808201516000868152600490925260409091205463ffffffff918216911610610dce576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dd8838561080b565b15610e0f576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e2b8385600160405180602001604052806000815250612928565b5060019392505050565b610e3f338261080b565b610e75576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e8133826001612a2b565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610f8890613d47565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb490613d47565b80156110015780601f10610fd657610100808354040283529160200191611001565b820191906000526020600020905b815481529060010190602001808311610fe457829003601f168201915b5050505050815250509050611016818461232a565b9392505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611059338461150d565b61108f576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600161109c8483610517565b10156110d4576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208484529091528120805490919061111090613e1b565b9091555073ffffffffffffffffffffffffffffffffffffffff82166000908152602081815260408083208484529091528120805490919061115090613e50565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161127f90613d47565b80601f01602080910402602001604051908101604052809291908181526020018280546112ab90613d47565b80156112f85780601f106112cd576101008083540402835291602001916112f8565b820191906000526020600020905b8154815290600101906020018083116112db57829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461136c576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61137886868686612b3b565b5060019695505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611457908590613e88565b600060405180830381855afa9150503d8060008114611492576040519150601f19603f3d011682016040523d82523d6000602084013e611497565b606091505b50915091508180156114aa575060008151115b156114cc57808060200190518101906114c39190613ea4565b94506115039050565b600085815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b600061151882610822565b15611525575060006106c1565b6000600161153284611d03565b61153c9190613ed3565b90505b60018160ff1610611579576115588461029d8584611bbb565b156115675760019150506106c1565b8061157181613ef6565b91505061153f565b6106bc8461029d856000611bbb565b60036020526000908152604090208054600182015460028301805473ffffffffffffffffffffffffffffffffffffffff8085169563ffffffff740100000000000000000000000000000000000000008704169560ff78010000000000000000000000000000000000000000000000008204811696790100000000000000000000000000000000000000000000000000909204169492169290919061162b90613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461165790613d47565b80156116a45780601f10611679576101008083540402835291602001916116a4565b820191906000526020600020905b81548152906001019060200180831161168757829003601f168201915b5050505050905086565b6000828152600360205260408120600181015473ffffffffffffffffffffffffffffffffffffffff16331461170f576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106bc8484612c4e565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff7801000000000000000000000000000000000000000000000000820481161515948301949094527901000000000000000000000000000000000000000000000000009004909216606083810191909152600182015490931660808301526002810180549394938493849384938493849384939092909160a0840191906117fa90613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461182690613d47565b80156118735780601f1061184857610100808354040283529160200191611873565b820191906000526020600020905b81548152906001019060200180831161185657829003601f168201915b5050509190925250505060a081015160208083015160008d81526004909252604090912054835160808501516060860151949d50929b5063ffffffff909116995097509550935090506118c6818a61232a565b915050919395979092949650565b6000828152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916119a090613d47565b80601f01602080910402602001604051908101604052809291908181526020018280546119cc90613d47565b8015611a195780601f106119ee57610100808354040283529160200191611a19565b820191906000526020600020905b8154815290600101906020018083116119fc57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611afa908590613e88565b600060405180830381855afa9150503d8060008114611b35576040519150601f19603f3d011682016040523d82523d6000602084013e611b3a565b606091505b5091509150818015611b4d575060008151115b15611b705780806020019051810190611b669190613ea4565b9095509350611ba2565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611bae89898787612b3b565b9998505050505050505050565b600080611bc983601c613ed3565b611bd4906008613f31565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b6000611c13338761080b565b611c52576040517ff921ec01000000000000000000000000000000000000000000000000000000008152336004820152602481018790526044016108b8565b60ff861615611c8d576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c9686612d15565b9050611ca58186868686612721565b5060008681526003602052604090208054601990611ce290790100000000000000000000000000000000000000000000000000900460ff16613f5a565b91906101000a81548160ff021916908360ff16021790555095945050505050565b600060ff821615611d165750601c919050565b61ffff821615611d285750601b919050565b62ffffff821615611d3b5750601a919050565b63ffffffff821615611d4f57506019919050565b64ffffffffff821615611d6457506018919050565b65ffffffffffff821615611d7a57506017919050565b66ffffffffffffff821615611d9157506016919050565b67ffffffffffffffff821615611da957506015919050565b68ffffffffffffffffff821615611dc257506014919050565b69ffffffffffffffffffff821615611ddc57506013919050565b6affffffffffffffffffffff821615611df757506012919050565b6bffffffffffffffffffffffff821615611e1357506011919050565b6cffffffffffffffffffffffffff821615611e3057506010919050565b6dffffffffffffffffffffffffffff821615611e4e5750600f919050565b6effffffffffffffffffffffffffffff821615611e6d5750600e919050565b6fffffffffffffffffffffffffffffffff821615611e8d5750600d919050565b70ffffffffffffffffffffffffffffffffff821615611eae5750600c919050565b71ffffffffffffffffffffffffffffffffffff821615611ed05750600b919050565b72ffffffffffffffffffffffffffffffffffffff821615611ef35750600a919050565b73ffffffffffffffffffffffffffffffffffffffff821615611f1757506009919050565b74ffffffffffffffffffffffffffffffffffffffffff821615611f3c57506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff821615611f6257506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff821615611f8957506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff821615611fb157506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff821615611fda57506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff82161561200457506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff82161561202f57506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82161561205b57506001919050565b506000919050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161212f90613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461215b90613d47565b80156121a85780601f1061217d576101008083540402835291602001916121a8565b820191906000526020600020905b81548152906001019060200180831161218b57829003601f168201915b5050505050815250509050600080846040516024016121c991815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690612270908590613e88565b600060405180830381855afa9150503d80600081146122ab576040519150601f19603f3d011682016040523d82523d6000602084013e6122b0565b606091505b50915091508180156122c3575060008151115b156122e357808060200190518101906122dc9190613f79565b9350612315565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61231f8785612c4e565b979650505050505050565b6000808260405160240161234091815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906123e7908590613e88565b600060405180830381855afa9150503d8060008114612422576040519150601f19603f3d011682016040523d82523d6000602084013e612427565b606091505b509150915081801561243a575060008151115b1561245a57808060200190518101906124539190613f79565b9350612462565b856040015193505b50505092915050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a08401919061253c90613d47565b80601f016020809104026020016040519081016040528092919081815260200182805461256890613d47565b80156125b55780601f1061258a576101008083540402835291602001916125b5565b820191906000526020600020905b81548152906001019060200180831161259857829003601f168201915b505050505081525050905060006125cb84610822565b156125d75750826125f3565b6125f08460016125e687611d03565b61047b9190613ed3565b90505b6000848152600460209081526040808320548583015186516080880151935161262a9563ffffffff90941694929388939101613f96565b60405160208183030381529060405290506000612647848761232a565b612686576040518060400160405280600881526020017f696e6163746976650000000000000000000000000000000000000000000000008152506126bd565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006126f38560a001518884866040516020016126df949392919061411c565b6040516020818303038152906040526131e8565b9050806040516020016127069190614234565b60405160208183030381529060405295505050505050919050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260a0810185815263ffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8088168652868116608087019081526001604080890182815260008f81526003875291909120895181549751925160608c015160ff16790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff911515780100000000000000000000000000000000000000000000000002919091167fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff94909a1674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090991691871691909117979097179190911696909617949094178555519284018054939091167fffffffffffffffffffffffff000000000000000000000000000000000000000093909316929092179091559151805184936128dc9260028501929101906133c2565b509050507f5763628556709478482c29a370cd5c5054e3e42cf0fc3050cbc8e03db29aa4fc8686868686604051612917959493929190614279565b60405180910390a195945050505050565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260208181526040808320868452909152812080548492906129669084906142cc565b90915550506000838152600460205260408120805490919061298d9063ffffffff16613df8565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6286866040516111a5929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290612a699084906142e4565b909155505060008281526004602052604081208054909190612a909063ffffffff166142fb565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051612b2e929190918252602082015260400190565b60405180910390a4505050565b60008215612b4f57612b4f84866001612a2b565b600085815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503612be85750600084815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260036020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146106bf5780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b6000818152600360205260408120548190612d5190790100000000000000000000000000000000000000000000000000900460ff166001614311565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612d8b5760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612dc25760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612df85760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff16600003612e2d5760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff16600003612e615760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff16600003612e945760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff16600003612ec65760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff16600003612ef75760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff16600003612f275760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff16600003612f565760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff16600003612f845760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff16600003612fb15760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff16600003612fdd5760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff166000036130085760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff166000036130325760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff1660000361305b5760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff166000036130835760588160ff16901b8317915050919050565b826affffffffffffffffffffff166000036130aa5760508160ff16901b8317915050919050565b8269ffffffffffffffffffff166000036130d05760488160ff16901b8317915050919050565b8268ffffffffffffffffff166000036130f55760408160ff16901b8317915050919050565b8267ffffffffffffffff166000036131195760388160ff16901b8317915050919050565b8266ffffffffffffff1660000361313c5760308160ff16901b8317915050919050565b8265ffffffffffff1660000361315e5760288160ff16901b8317915050919050565b8264ffffffffff1660000361317f5760208160ff16901b8317915050919050565b8263ffffffff1660000361319f5760188160ff16901b8317915050919050565b8262ffffff166000036131be5760108160ff16901b8317915050919050565b8261ffff166000036131dc5760088160ff16901b8317915050919050565b60ff1691909117919050565b6060815160000361320757505060408051602081019091526000815290565b60006040518060600160405280604081526020016143af604091399050600060038451600261323691906142cc565b6132409190614336565b61324b906004614371565b9050600061325a8260206142cc565b67ffffffffffffffff811115613272576132726134a9565b6040519080825280601f01601f19166020018201604052801561329c576020820181803683370190505b509050818152600183018586518101602084015b8183101561330a5760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b938201939093526004016132b0565b600389510660018114613324576002811461336e576133b4565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8301526133b4565b7f3d000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301525b509398975050505050505050565b8280546133ce90613d47565b90600052602060002090601f0160209004810192826133f05760008555613436565b82601f1061340957805160ff1916838001178555613436565b82800160010185558215613436579182015b8281111561343657825182559160200191906001019061341b565b50613442929150613446565b5090565b5b808211156134425760008155600101613447565b803573ffffffffffffffffffffffffffffffffffffffff81168114610bd957600080fd5b6000806040838503121561349257600080fd5b61349b8361345b565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156134fb576134fb6134a9565b60405290565b600082601f83011261351257600080fd5b813567ffffffffffffffff8082111561352d5761352d6134a9565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715613573576135736134a9565b8160405283815286602085880101111561358c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff81168114610bd957600080fd5b600080600080608085870312156135d657600080fd5b843567ffffffffffffffff8111156135ed57600080fd5b6135f987828801613501565b945050613608602086016135ac565b92506136166040860161345b565b91506136246060860161345b565b905092959194509250565b60006020828403121561364157600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461101657600080fd5b60006020828403121561368357600080fd5b5035919050565b60005b838110156136a557818101518382015260200161368d565b838111156136b4576000848401525b50505050565b600081518084526136d281602086016020860161368a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061101660208301846136ba565b60008083601f84011261372957600080fd5b50813567ffffffffffffffff81111561374157600080fd5b6020830191508360208260051b850101111561375c57600080fd5b9250929050565b60008083601f84011261377557600080fd5b50813567ffffffffffffffff81111561378d57600080fd5b60208301915083602082850101111561375c57600080fd5b60008060008060008060008060a0898b0312156137c157600080fd5b6137ca8961345b565b97506137d860208a0161345b565b9650604089013567ffffffffffffffff808211156137f557600080fd5b6138018c838d01613717565b909850965060608b013591508082111561381a57600080fd5b6138268c838d01613717565b909650945060808b013591508082111561383f57600080fd5b5061384c8b828c01613763565b999c989b5096995094979396929594505050565b6000806000806040858703121561387657600080fd5b843567ffffffffffffffff8082111561388e57600080fd5b61389a88838901613717565b909650945060208701359150808211156138b357600080fd5b506138c087828801613717565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613904578351835292840192918401916001016138e8565b50909695505050505050565b60006020828403121561392257600080fd5b6110168261345b565b6000806040838503121561393e57600080fd5b8235915061394e6020840161345b565b90509250929050565b801515811461396557600080fd5b50565b6000806040838503121561397b57600080fd5b6139848361345b565b9150602083013561399481613957565b809150509250929050565b6000806000606084860312156139b457600080fd5b833592506139c46020850161345b565b91506139d26040850161345b565b90509250925092565b600080600080608085870312156139f157600080fd5b84359350613a016020860161345b565b92506040850135613a1181613957565b91506060850135613a2181613957565b939692955090935050565b803560ff81168114610bd957600080fd5b600080600060608486031215613a5257600080fd5b613a5b8461345b565b9250602084013567ffffffffffffffff80821115613a7857600080fd5b9085019060c08288031215613a8c57600080fd5b613a946134d8565b613a9d8361345b565b8152613aab602084016135ac565b60208201526040830135613abe81613957565b6040820152613acf60608401613a2c565b6060820152613ae06080840161345b565b608082015260a083013582811115613af757600080fd5b613b0389828601613501565b60a0830152509497949650505050604092909201359150565b600073ffffffffffffffffffffffffffffffffffffffff808916835263ffffffff88166020840152861515604084015260ff8616606084015280851660808401525060c060a0830152613b7260c08301846136ba565b98975050505050505050565b60008060408385031215613b9157600080fd5b82359150602083013561399481613957565b60e081526000613bb660e083018a6136ba565b63ffffffff988916602084015296909716604082015273ffffffffffffffffffffffffffffffffffffffff948516606082015292909316608083015260ff1660a082015290151560c09091015292915050565b60008060408385031215613c1c57600080fd5b8235915061394e60208401613a2c565b60008060408385031215613c3f57600080fd5b613c488361345b565b915061394e6020840161345b565b600080600080600060a08688031215613c6e57600080fd5b85359450602086013567ffffffffffffffff811115613c8c57600080fd5b613c9888828901613501565b945050613ca7604087016135ac565b9250613cb56060870161345b565b9150613cc36080870161345b565b90509295509295909350565b60008060008060008060a08789031215613ce857600080fd5b613cf18761345b565b9550613cff6020880161345b565b94506040870135935060608701359250608087013567ffffffffffffffff811115613d2957600080fd5b613d3589828a01613763565b979a9699509497509295939492505050565b600181811c90821680613d5b57607f821691505b602082108103613d94577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103613e1157613e11613dc9565b6001019392505050565b600081613e2a57613e2a613dc9565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e8157613e81613dc9565b5060010190565b60008251613e9a81846020870161368a565b9190910192915050565b60008060408385031215613eb757600080fd5b8251613ec281613957565b602084015190925061399481613957565b600060ff821660ff841680821015613eed57613eed613dc9565b90039392505050565b600060ff821680613f0957613f09613dc9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600060ff821660ff84168160ff0481118215151615613f5257613f52613dc9565b029392505050565b600060ff821660ff8103613f7057613f70613dc9565b60010192915050565b600060208284031215613f8b57600080fd5b815161101681613957565b7f7b2263757272656e7420737570706c79223a2022000000000000000000000000815260007fffffffff00000000000000000000000000000000000000000000000000000000808860e01b1660148401527f222c2022737570706c7920636170223a202200000000000000000000000000006018840152808760e01b16602a840152507f222c202261646d696e202868617429223a202200000000000000000000000000602e8301528460418301527f222c20226f7261636c6520286164647265737329223a2022000000000000000060618301527fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008460601b1660798301527f222c2022636f6e646974696f6e7320286164647265737329223a202200000000608d8301526140ed60a983018460601b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169052565b7f227d00000000000000000000000000000000000000000000000000000000000060bd83015260bf820161231f565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008551614154816018850160208a0161368a565b80830190507f222c20226964223a20220000000000000000000000000000000000000000000060188201528560228201527f222c2022737461747573223a2022000000000000000000000000000000000000604282015284516141be81605084016020890161368a565b7f222c202270726f70657274696573223a200000000000000000000000000000006050929091019182015283516141fc81606184016020880161368a565b7f7d00000000000000000000000000000000000000000000000000000000000000606192909101918201526062019695505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161426c81601d85016020870161368a565b91909101601d0192915050565b85815260a06020820152600061429260a08301876136ba565b63ffffffff9590951660408301525073ffffffffffffffffffffffffffffffffffffffff9283166060820152911660809091015292915050565b600082198211156142df576142df613dc9565b500190565b6000828210156142f6576142f6613dc9565b500390565b600063ffffffff821680613f0957613f09613dc9565b600060ff821660ff84168060ff0382111561432e5761432e613dc9565b019392505050565b60008261436c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143a9576143a9613dc9565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220a3bd5474c3f47349f65f01552e7bdd24d1206a6ae9ec8839cd6812d9854e3b1064736f6c634300080d0033", - "nonce": "0x1", - "accessList": [] - } - } - ], - "receipts": [ - { - "transactionHash": "0x80bd4a97d3a46549b469bd975eae33c7820341da6c0bda7804c5d2a306c90a75", - "transactionIndex": "0x2", - "blockHash": "0xf905967d3dee6f9b6c89b485061df2954d02f2aa646063e3ee32c70df4a5dcde", - "blockNumber": "0x6e30fb", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "to": null, - "cumulativeGasUsed": "0x3d7098", - "gasUsed": "0x39ed01", - "contractAddress": "0xe81597289a249ae725c2d80e7848dbfa9708c22d", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d05e07" - } - ], - "libraries": [], - "pending": [], - "path": "broadcast/Hats.s.sol/5/run-latest.json", - "returns": {}, - "timestamp": 1657745426 -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/5/run-1657853117.json b/broadcast/Hats.s.sol/5/run-1657853117.json deleted file mode 100644 index 2481396..0000000 --- a/broadcast/Hats.s.sol/5/run-1657853117.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x3c7e5e28d38ba9a6844c87849c7538fdbac8d2f5ac3eaa03cbd79b97c00db345", - "type": "CREATE", - "contractName": "Hats", - "contractAddress": "0xb7019c3670f5d4dd99166727a7d29f8a16f4f20a", - "tx": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x4d3b44", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b506145e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c8063a22cb46511610104578063d70343d8116100a2578063f242432a11610071578063f242432a14610473578063fb2aaa4c14610481578063fc3e05a4146104a6578063fd427358146104b657600080fd5b8063d70343d81461040c578063e76913851461041f578063e985e9c514610432578063efdfb0881461046057600080fd5b8063afaae55a116100de578063afaae55a146103ad578063b56f7562146103c0578063c43dc177146103d3578063d395acf8146103e657600080fd5b8063a22cb46514610359578063a2be079b1461036c578063a4a1f06c1461039a57600080fd5b80634e1273f411610171578063641f776e1161014b578063641f776e146102e55780637178fb51146102f85780637a9df89f1461033357806382afd23b1461034657600080fd5b80634e1273f41461029f57806354a1826c146102bf578063619531c7146102d257600080fd5b80630e89341c116101ad5780630e89341c146102445780632eb2c2d6146102645780634352409a1461027957806345fffac81461028c57600080fd5b8062fdd58e146101d3578063018632e9146101f957806301ffc9a714610221575b600080fd5b6101e66101e13660046136e9565b6104c9565b6040519081526020015b60405180910390f35b61020c610207366004613801565b610679565b604080519283526020830191909152016101f0565b61023461022f366004613870565b61069f565b60405190151581526020016101f0565b6102576102523660046138b2565b610780565b6040516101f09190613945565b6102776102723660046139e6565b61078b565b005b6102346102873660046136e9565b6107bd565b61023461029a3660046138b2565b6107d4565b6102b26102ad366004613aa1565b610803565b6040516101f09190613b0d565b6102346102cd3660046136e9565b61097f565b6101e66102e0366004613b51565b610ada565b6102346102f3366004613b6c565b610b5c565b61031e6103063660046138b2565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101f0565b6102776103413660046138b2565b610db3565b6102346103543660046138b2565b610e3a565b610277610367366004613ba9565b610f9b565b61023461037a366004613b6c565b600560209081526000928352604080842090915290825290205460ff1681565b6102776103a8366004613be0565b610fcd565b6102346103bb366004613c1c565b611131565b6102346103ce3660046136e9565b611303565b6102346103e1366004613c6d565b61137e565b6103f96103f43660046138b2565b6113e9565b6040516101f09796959493929190613c92565b61023461041a366004613b6c565b6115a4565b6101e661042d366004613cf8565b61188b565b610234610440366004613d23565b600160209081526000928352604080842090915290825290205460ff1681565b6101e661046e366004613d4d565b6118d7565b610277610272366004613dc6565b61049461048f3660046138b2565b6119d3565b60405160ff90911681526020016101f0565b60025461031e9063ffffffff1681565b6102346104c43660046138b2565b611d33565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161059590613e3e565b80601f01602080910402602001604051908101604052809291908181526020018280546105c190613e3e565b801561060e5780601f106105e35761010080835404028352916020019161060e565b820191906000526020600020905b8154815290600101906020018083116105f157829003601f168201915b5050505050815250509050600091506106278184611ffa565b8015610639575061063984828561213b565b156106715773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b505b92915050565b60008061068533610ada565b915061069482878787876118d7565b905094509492505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061073257507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806106735750507fffffffff00000000000000000000000000000000000000000000000000000000167f0e89341c000000000000000000000000000000000000000000000000000000001490565b6060610673826122c3565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060016107cb84846104c9565b10159392505050565b600080821180156106735750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff81111561088c5761088c613713565b6040519080825280602002602001820160405280156108b5578160200160208202803683370190505b50905060005b84811015610976576000808787848181106108d8576108d8613e91565b90506020020160208101906108ed9190613b51565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085858481811061093b5761093b613e91565b9050602002013581526020019081526020016000205482828151811061096357610963613e91565b60209081029190910101526001016108bb565b50949350505050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610a4b90613e3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7790613e3e565b8015610ac45780601f10610a9957610100808354040283529160200191610ac4565b820191906000526020600020905b815481529060010190602001808311610aa757829003601f168201915b505050505081525050905061066e84828561213b565b6002805460009160e0918390610af59063ffffffff16613eef565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050610b3a816040518060200160405280600081525060016000806125e8565b50610b5782826001604051806020016040528060008152506127ef565b919050565b6000828152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610c2890613e3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5490613e3e565b8015610ca15780601f10610c7657610100808354040283529160200191610ca1565b820191906000526020600020905b815481529060010190602001808311610c8457829003601f168201915b5050505050815250509050610cb63385611303565b610cf5576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810185905260440161086a565b6020808201516000868152600490925260409091205463ffffffff918216911610610d4c576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d5683856107bd565b15610d8d576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610da983856001604051806020016040528060008152506127ef565b5060019392505050565b610dbd33826107bd565b610df3576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dff338260016128f2565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610f0690613e3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3290613e3e565b8015610f7f5780601f10610f5457610100808354040283529160200191610f7f565b820191906000526020600020905b815481529060010190602001808311610f6257829003601f168201915b5050505050815250509050610f948184611ffa565b9392505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd73384611303565b61100d576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600161101a84836104c9565b1015611052576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208484529091528120805490919061108e90613f12565b9091555073ffffffffffffffffffffffffffffffffffffffff8216600090815260208181526040808320848452909152812080549091906110ce90613f47565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916111fd90613e3e565b80601f016020809104026020016040519081016040528092919081815260200182805461122990613e3e565b80156112765780601f1061124b57610100808354040283529160200191611276565b820191906000526020600020905b81548152906001019060200180831161125957829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112f686868686612a02565b5060019695505050505050565b600061130e826107d4565b1561131b57506000610673565b60006001611328846119d3565b6113329190613f7f565b90505b60018160ff161061136f5761134e84610287858461188b565b1561135d576001915050610673565b8061136781613fa2565b915050611335565b61066e8461028785600061188b565b6000828152600360205260408120600181015473ffffffffffffffffffffffffffffffffffffffff1633146113df576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e8484612b15565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff7801000000000000000000000000000000000000000000000000820481161515948301949094527901000000000000000000000000000000000000000000000000009004909216606083810191909152600182015490931660808301526002810180549394938493849384938493849384939092909160a0840191906114ca90613e3e565b80601f01602080910402602001604051908101604052809291908181526020018280546114f690613e3e565b80156115435780601f1061151857610100808354040283529160200191611543565b820191906000526020600020905b81548152906001019060200180831161152657829003601f168201915b5050509190925250505060a081015160208083015160008d81526004909252604090912054835160808501516060860151949d50929b5063ffffffff90911699509750955093509050611596818a611ffa565b915050919395979092949650565b6000828152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161167090613e3e565b80601f016020809104026020016040519081016040528092919081815260200182805461169c90613e3e565b80156116e95780601f106116be576101008083540402835291602001916116e9565b820191906000526020600020905b8154815290600101906020018083116116cc57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906117ca908590613ff9565b600060405180830381855afa9150503d8060008114611805576040519150601f19603f3d011682016040523d82523d6000602084013e61180a565b606091505b509150915081801561181d575060008151115b1561184057808060200190518101906118369190614015565b9095509350611872565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61187e89898787612a02565b9998505050505050505050565b60008061189983601c613f7f565b6118a4906008614044565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b60006118e333876107bd565b611922576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810187905260440161086a565b60ff86161561195d576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61196686612bdc565b905061197581868686866125e8565b50600086815260036020526040902080546019906119b290790100000000000000000000000000000000000000000000000000900460ff1661406d565b91906101000a81548160ff021916908360ff16021790555095945050505050565b600060ff8216156119e65750601c919050565b61ffff8216156119f85750601b919050565b62ffffff821615611a0b5750601a919050565b63ffffffff821615611a1f57506019919050565b64ffffffffff821615611a3457506018919050565b65ffffffffffff821615611a4a57506017919050565b66ffffffffffffff821615611a6157506016919050565b67ffffffffffffffff821615611a7957506015919050565b68ffffffffffffffffff821615611a9257506014919050565b69ffffffffffffffffffff821615611aac57506013919050565b6affffffffffffffffffffff821615611ac757506012919050565b6bffffffffffffffffffffffff821615611ae357506011919050565b6cffffffffffffffffffffffffff821615611b0057506010919050565b6dffffffffffffffffffffffffffff821615611b1e5750600f919050565b6effffffffffffffffffffffffffffff821615611b3d5750600e919050565b6fffffffffffffffffffffffffffffffff821615611b5d5750600d919050565b70ffffffffffffffffffffffffffffffffff821615611b7e5750600c919050565b71ffffffffffffffffffffffffffffffffffff821615611ba05750600b919050565b72ffffffffffffffffffffffffffffffffffffff821615611bc35750600a919050565b73ffffffffffffffffffffffffffffffffffffffff821615611be757506009919050565b74ffffffffffffffffffffffffffffffffffffffffff821615611c0c57506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff821615611c3257506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff821615611c5957506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff821615611c8157506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff821615611caa57506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff821615611cd457506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff821615611cff57506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615611d2b57506001919050565b506000919050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611dff90613e3e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2b90613e3e565b8015611e785780601f10611e4d57610100808354040283529160200191611e78565b820191906000526020600020905b815481529060010190602001808311611e5b57829003601f168201915b505050505081525050905060008084604051602401611e9991815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611f40908590613ff9565b600060405180830381855afa9150503d8060008114611f7b576040519150601f19603f3d011682016040523d82523d6000602084013e611f80565b606091505b5091509150818015611f93575060008151115b15611fb35780806020019051810190611fac919061408c565b9350611fe5565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fef8785612b15565b979650505050505050565b6000808260405160240161201091815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906120b7908590613ff9565b600060405180830381855afa9150503d80600081146120f2576040519150601f19603f3d011682016040523d82523d6000602084013e6120f7565b606091505b509150915081801561210a575060008151115b1561212a5780806020019051810190612123919061408c565b9350612132565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061220d908590613ff9565b600060405180830381855afa9150503d8060008114612248576040519150601f19603f3d011682016040523d82523d6000602084013e61224d565b606091505b5091509150818015612260575060008151115b1561228257808060200190518101906122799190614015565b94506122b99050565b600085815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a08401919061239490613e3e565b80601f01602080910402602001604051908101604052809291908181526020018280546123c090613e3e565b801561240d5780601f106123e25761010080835404028352916020019161240d565b820191906000526020600020905b8154815290600101906020018083116123f057829003601f168201915b50505050508152505090506000612423846107d4565b1561242f57508261244b565b61244884600161243e876119d3565b61042d9190613f7f565b90505b600061246460e061245d87600061188b565b901c6130af565b600086815260046020526040812054919250906124869063ffffffff166130af565b612499856020015163ffffffff166130af565b6124a2856130af565b6124ad8660206131ec565b87516124b89061342f565b6124c5896080015161342f565b6040516020016124da969594939291906140a9565b604051602081830303815290604052905060006124f78588611ffa565b612536576040518060400160405280600881526020017f696e61637469766500000000000000000000000000000000000000000000000081525061256d565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006125b98660a00151856125838b6130af565b61258e8c60206131ec565b86886040516020016125a59695949392919061424d565b604051602081830303815290604052613452565b9050806040516020016125cc91906143dd565b6040516020818303038152906040529650505050505050919050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260a0810185815263ffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8088168652868116608087019081526001604080890182815260008f81526003875291909120895181549751925160608c015160ff16790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff911515780100000000000000000000000000000000000000000000000002919091167fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff94909a1674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090991691871691909117979097179190911696909617949094178555519284018054939091167fffffffffffffffffffffffff000000000000000000000000000000000000000093909316929092179091559151805184936127a392600285019291019061362c565b509050507f5763628556709478482c29a370cd5c5054e3e42cf0fc3050cbc8e03db29aa4fc86868686866040516127de959493929190614422565b60405180910390a195945050505050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091528120805484929061282d908490614475565b9091555050600083815260046020526040812080549091906128549063ffffffff16613eef565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051611123929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208584529091528120805483929061293090849061448d565b9091555050600082815260046020526040812080549091906129579063ffffffff166144a4565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516129f5929190918252602082015260400190565b60405180910390a4505050565b60008215612a1657612a16848660016128f2565b600085815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503612aaf5750600084815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260036020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146106715780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b6000818152600360205260408120548190612c1890790100000000000000000000000000000000000000000000000000900460ff1660016144ba565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612c525760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612c895760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612cbf5760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff16600003612cf45760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff16600003612d285760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff16600003612d5b5760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff16600003612d8d5760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff16600003612dbe5760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff16600003612dee5760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff16600003612e1d5760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff16600003612e4b5760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff16600003612e785760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff16600003612ea45760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff16600003612ecf5760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff16600003612ef95760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff16600003612f225760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff16600003612f4a5760588160ff16901b8317915050919050565b826affffffffffffffffffffff16600003612f715760508160ff16901b8317915050919050565b8269ffffffffffffffffffff16600003612f975760488160ff16901b8317915050919050565b8268ffffffffffffffffff16600003612fbc5760408160ff16901b8317915050919050565b8267ffffffffffffffff16600003612fe05760388160ff16901b8317915050919050565b8266ffffffffffffff166000036130035760308160ff16901b8317915050919050565b8265ffffffffffff166000036130255760288160ff16901b8317915050919050565b8264ffffffffff166000036130465760208160ff16901b8317915050919050565b8263ffffffff166000036130665760188160ff16901b8317915050919050565b8262ffffff166000036130855760108160ff16901b8317915050919050565b8261ffff166000036130a35760088160ff16901b8317915050919050565b60ff1691909117919050565b6060816000036130f257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561311c578061310681613f47565b91506131159050600a8361450e565b91506130f6565b60008167ffffffffffffffff81111561313757613137613713565b6040519080825280601f01601f191660200182016040528015613161576020820181803683370190505b5090505b84156131e45761317660018361448d565b9150613183600a86614522565b61318e906030614475565b60f81b8183815181106131a3576131a3613e91565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506131dd600a8661450e565b9450613165565b949350505050565b606060006131fb836002614536565b613206906002614475565b67ffffffffffffffff81111561321e5761321e613713565b6040519080825280601f01601f191660200182016040528015613248576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061327f5761327f613e91565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106132e2576132e2613e91565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061331e846002614536565b613329906001614475565b90505b60018111156133c6577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061336a5761336a613e91565b1a60f81b82828151811061338057613380613e91565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936133bf81613f12565b905061332c565b508315610f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161086a565b606061067373ffffffffffffffffffffffffffffffffffffffff831660146131ec565b6060815160000361347157505060408051602081019091526000815290565b600060405180606001604052806040815260200161457460409139905060006003845160026134a09190614475565b6134aa919061450e565b6134b5906004614536565b905060006134c4826020614475565b67ffffffffffffffff8111156134dc576134dc613713565b6040519080825280601f01601f191660200182016040528015613506576020820181803683370190505b509050818152600183018586518101602084015b818310156135745760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b9382019390935260040161351a565b60038951066001811461358e57600281146135d85761361e565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83015261361e565b7f3d000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301525b509398975050505050505050565b82805461363890613e3e565b90600052602060002090601f01602090048101928261365a57600085556136a0565b82601f1061367357805160ff19168380011785556136a0565b828001600101855582156136a0579182015b828111156136a0578251825591602001919060010190613685565b506136ac9291506136b0565b5090565b5b808211156136ac57600081556001016136b1565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b5757600080fd5b600080604083850312156136fc57600080fd5b613705836136c5565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261375357600080fd5b813567ffffffffffffffff8082111561376e5761376e613713565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156137b4576137b4613713565b816040528381528660208588010111156137cd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff81168114610b5757600080fd5b6000806000806080858703121561381757600080fd5b843567ffffffffffffffff81111561382e57600080fd5b61383a87828801613742565b945050613849602086016137ed565b9250613857604086016136c5565b9150613865606086016136c5565b905092959194509250565b60006020828403121561388257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f9457600080fd5b6000602082840312156138c457600080fd5b5035919050565b60005b838110156138e65781810151838201526020016138ce565b838111156138f5576000848401525b50505050565b600081518084526139138160208601602086016138cb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f9460208301846138fb565b60008083601f84011261396a57600080fd5b50813567ffffffffffffffff81111561398257600080fd5b6020830191508360208260051b850101111561399d57600080fd5b9250929050565b60008083601f8401126139b657600080fd5b50813567ffffffffffffffff8111156139ce57600080fd5b60208301915083602082850101111561399d57600080fd5b60008060008060008060008060a0898b031215613a0257600080fd5b613a0b896136c5565b9750613a1960208a016136c5565b9650604089013567ffffffffffffffff80821115613a3657600080fd5b613a428c838d01613958565b909850965060608b0135915080821115613a5b57600080fd5b613a678c838d01613958565b909650945060808b0135915080821115613a8057600080fd5b50613a8d8b828c016139a4565b999c989b5096995094979396929594505050565b60008060008060408587031215613ab757600080fd5b843567ffffffffffffffff80821115613acf57600080fd5b613adb88838901613958565b90965094506020870135915080821115613af457600080fd5b50613b0187828801613958565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613b4557835183529284019291840191600101613b29565b50909695505050505050565b600060208284031215613b6357600080fd5b610f94826136c5565b60008060408385031215613b7f57600080fd5b82359150613b8f602084016136c5565b90509250929050565b8015158114613ba657600080fd5b50565b60008060408385031215613bbc57600080fd5b613bc5836136c5565b91506020830135613bd581613b98565b809150509250929050565b600080600060608486031215613bf557600080fd5b83359250613c05602085016136c5565b9150613c13604085016136c5565b90509250925092565b60008060008060808587031215613c3257600080fd5b84359350613c42602086016136c5565b92506040850135613c5281613b98565b91506060850135613c6281613b98565b939692955090935050565b60008060408385031215613c8057600080fd5b823591506020830135613bd581613b98565b60e081526000613ca560e083018a6138fb565b63ffffffff988916602084015296909716604082015273ffffffffffffffffffffffffffffffffffffffff948516606082015292909316608083015260ff1660a082015290151560c09091015292915050565b60008060408385031215613d0b57600080fd5b82359150602083013560ff81168114613bd557600080fd5b60008060408385031215613d3657600080fd5b613d3f836136c5565b9150613b8f602084016136c5565b600080600080600060a08688031215613d6557600080fd5b85359450602086013567ffffffffffffffff811115613d8357600080fd5b613d8f88828901613742565b945050613d9e604087016137ed565b9250613dac606087016136c5565b9150613dba608087016136c5565b90509295509295909350565b60008060008060008060a08789031215613ddf57600080fd5b613de8876136c5565b9550613df6602088016136c5565b94506040870135935060608701359250608087013567ffffffffffffffff811115613e2057600080fd5b613e2c89828a016139a4565b979a9699509497509295939492505050565b600181811c90821680613e5257607f821691505b602082108103613e8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103613f0857613f08613ec0565b6001019392505050565b600081613f2157613f21613ec0565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f7857613f78613ec0565b5060010190565b600060ff821660ff841680821015613f9957613f99613ec0565b90039392505050565b600060ff821680613fb557613fb5613ec0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b60008151613fef8185602086016138cb565b9290920192915050565b6000825161400b8184602087016138cb565b9190910192915050565b6000806040838503121561402857600080fd5b825161403381613b98565b6020840151909250613bd581613b98565b600060ff821660ff84168160ff048111821515161561406557614065613ec0565b029392505050565b600060ff821660ff810361408357614083613ec0565b60010192915050565b60006020828403121561409e57600080fd5b8151610f9481613b98565b7f7b2263757272656e7420737570706c79223a20220000000000000000000000008152600087516140e1816014850160208c016138cb565b7f222c2022737570706c7920636170223a20220000000000000000000000000000601491840191820152875161411e816026840160208c016138cb565b7f222c202261646d696e2028696429223a2022000000000000000000000000000060269290910191820152865161415c816038840160208b016138cb565b7f222c202261646d696e202870726574747920696429223a20220000000000000060389290910191820152855161419a816051840160208a016138cb565b7f222c20226f7261636c652061646472657373223a2022000000000000000000006051929091019182015284516141d88160678401602089016138cb565b61423f6142166142106067848601017f222c2022636f6e646974696f6e732061646472657373223a20220000000000008152601a0190565b87613fdd565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008751614285816018850160208c016138cb565b7f222c2022646f6d61696e223a202200000000000000000000000000000000000060189184019182015287516142c2816026840160208c016138cb565b7f222c20226964223a202200000000000000000000000000000000000000000000602692909101918201528651614300816030840160208b016138cb565b7f222c2022707265747479206964223a202200000000000000000000000000000060309290910191820152855161433e816041840160208a016138cb565b7f222c2022737461747573223a202200000000000000000000000000000000000060419290910191820152845161437c81604f8401602089016138cb565b61423f6143b4614210604f848601017f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161441581601d8501602087016138cb565b91909101601d0192915050565b85815260a06020820152600061443b60a08301876138fb565b63ffffffff9590951660408301525073ffffffffffffffffffffffffffffffffffffffff9283166060820152911660809091015292915050565b6000821982111561448857614488613ec0565b500190565b60008282101561449f5761449f613ec0565b500390565b600063ffffffff821680613fb557613fb5613ec0565b600060ff821660ff84168060ff038211156144d7576144d7613ec0565b019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261451d5761451d6144df565b500490565b600082614531576145316144df565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561456e5761456e613ec0565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220234b99183296b453838c1375b9d5b03b9b2a039e340edddb9f111f34967c18c164736f6c634300080d0033", - "nonce": "0x2", - "accessList": [] - } - } - ], - "receipts": [], - "libraries": [], - "pending": [ - "0x3c7e5e28d38ba9a6844c87849c7538fdbac8d2f5ac3eaa03cbd79b97c00db345" - ], - "path": "broadcast/Hats.s.sol/5/run-latest.json", - "returns": {}, - "timestamp": 1657853117 -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/5/run-1657853124.json b/broadcast/Hats.s.sol/5/run-1657853124.json deleted file mode 100644 index 29b235a..0000000 --- a/broadcast/Hats.s.sol/5/run-1657853124.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x3c7e5e28d38ba9a6844c87849c7538fdbac8d2f5ac3eaa03cbd79b97c00db345", - "type": "CREATE", - "contractName": "Hats", - "contractAddress": "0xb7019c3670f5d4dd99166727a7d29f8a16f4f20a", - "tx": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x4d3b44", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b506145e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c8063a22cb46511610104578063d70343d8116100a2578063f242432a11610071578063f242432a14610473578063fb2aaa4c14610481578063fc3e05a4146104a6578063fd427358146104b657600080fd5b8063d70343d81461040c578063e76913851461041f578063e985e9c514610432578063efdfb0881461046057600080fd5b8063afaae55a116100de578063afaae55a146103ad578063b56f7562146103c0578063c43dc177146103d3578063d395acf8146103e657600080fd5b8063a22cb46514610359578063a2be079b1461036c578063a4a1f06c1461039a57600080fd5b80634e1273f411610171578063641f776e1161014b578063641f776e146102e55780637178fb51146102f85780637a9df89f1461033357806382afd23b1461034657600080fd5b80634e1273f41461029f57806354a1826c146102bf578063619531c7146102d257600080fd5b80630e89341c116101ad5780630e89341c146102445780632eb2c2d6146102645780634352409a1461027957806345fffac81461028c57600080fd5b8062fdd58e146101d3578063018632e9146101f957806301ffc9a714610221575b600080fd5b6101e66101e13660046136e9565b6104c9565b6040519081526020015b60405180910390f35b61020c610207366004613801565b610679565b604080519283526020830191909152016101f0565b61023461022f366004613870565b61069f565b60405190151581526020016101f0565b6102576102523660046138b2565b610780565b6040516101f09190613945565b6102776102723660046139e6565b61078b565b005b6102346102873660046136e9565b6107bd565b61023461029a3660046138b2565b6107d4565b6102b26102ad366004613aa1565b610803565b6040516101f09190613b0d565b6102346102cd3660046136e9565b61097f565b6101e66102e0366004613b51565b610ada565b6102346102f3366004613b6c565b610b5c565b61031e6103063660046138b2565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101f0565b6102776103413660046138b2565b610db3565b6102346103543660046138b2565b610e3a565b610277610367366004613ba9565b610f9b565b61023461037a366004613b6c565b600560209081526000928352604080842090915290825290205460ff1681565b6102776103a8366004613be0565b610fcd565b6102346103bb366004613c1c565b611131565b6102346103ce3660046136e9565b611303565b6102346103e1366004613c6d565b61137e565b6103f96103f43660046138b2565b6113e9565b6040516101f09796959493929190613c92565b61023461041a366004613b6c565b6115a4565b6101e661042d366004613cf8565b61188b565b610234610440366004613d23565b600160209081526000928352604080842090915290825290205460ff1681565b6101e661046e366004613d4d565b6118d7565b610277610272366004613dc6565b61049461048f3660046138b2565b6119d3565b60405160ff90911681526020016101f0565b60025461031e9063ffffffff1681565b6102346104c43660046138b2565b611d33565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161059590613e3e565b80601f01602080910402602001604051908101604052809291908181526020018280546105c190613e3e565b801561060e5780601f106105e35761010080835404028352916020019161060e565b820191906000526020600020905b8154815290600101906020018083116105f157829003601f168201915b5050505050815250509050600091506106278184611ffa565b8015610639575061063984828561213b565b156106715773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b505b92915050565b60008061068533610ada565b915061069482878787876118d7565b905094509492505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061073257507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806106735750507fffffffff00000000000000000000000000000000000000000000000000000000167f0e89341c000000000000000000000000000000000000000000000000000000001490565b6060610673826122c3565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060016107cb84846104c9565b10159392505050565b600080821180156106735750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff81111561088c5761088c613713565b6040519080825280602002602001820160405280156108b5578160200160208202803683370190505b50905060005b84811015610976576000808787848181106108d8576108d8613e91565b90506020020160208101906108ed9190613b51565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085858481811061093b5761093b613e91565b9050602002013581526020019081526020016000205482828151811061096357610963613e91565b60209081029190910101526001016108bb565b50949350505050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610a4b90613e3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7790613e3e565b8015610ac45780601f10610a9957610100808354040283529160200191610ac4565b820191906000526020600020905b815481529060010190602001808311610aa757829003601f168201915b505050505081525050905061066e84828561213b565b6002805460009160e0918390610af59063ffffffff16613eef565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050610b3a816040518060200160405280600081525060016000806125e8565b50610b5782826001604051806020016040528060008152506127ef565b919050565b6000828152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610c2890613e3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5490613e3e565b8015610ca15780601f10610c7657610100808354040283529160200191610ca1565b820191906000526020600020905b815481529060010190602001808311610c8457829003601f168201915b5050505050815250509050610cb63385611303565b610cf5576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810185905260440161086a565b6020808201516000868152600490925260409091205463ffffffff918216911610610d4c576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d5683856107bd565b15610d8d576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610da983856001604051806020016040528060008152506127ef565b5060019392505050565b610dbd33826107bd565b610df3576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dff338260016128f2565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610f0690613e3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3290613e3e565b8015610f7f5780601f10610f5457610100808354040283529160200191610f7f565b820191906000526020600020905b815481529060010190602001808311610f6257829003601f168201915b5050505050815250509050610f948184611ffa565b9392505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd73384611303565b61100d576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600161101a84836104c9565b1015611052576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208484529091528120805490919061108e90613f12565b9091555073ffffffffffffffffffffffffffffffffffffffff8216600090815260208181526040808320848452909152812080549091906110ce90613f47565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916111fd90613e3e565b80601f016020809104026020016040519081016040528092919081815260200182805461122990613e3e565b80156112765780601f1061124b57610100808354040283529160200191611276565b820191906000526020600020905b81548152906001019060200180831161125957829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112f686868686612a02565b5060019695505050505050565b600061130e826107d4565b1561131b57506000610673565b60006001611328846119d3565b6113329190613f7f565b90505b60018160ff161061136f5761134e84610287858461188b565b1561135d576001915050610673565b8061136781613fa2565b915050611335565b61066e8461028785600061188b565b6000828152600360205260408120600181015473ffffffffffffffffffffffffffffffffffffffff1633146113df576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e8484612b15565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff7801000000000000000000000000000000000000000000000000820481161515948301949094527901000000000000000000000000000000000000000000000000009004909216606083810191909152600182015490931660808301526002810180549394938493849384938493849384939092909160a0840191906114ca90613e3e565b80601f01602080910402602001604051908101604052809291908181526020018280546114f690613e3e565b80156115435780601f1061151857610100808354040283529160200191611543565b820191906000526020600020905b81548152906001019060200180831161152657829003601f168201915b5050509190925250505060a081015160208083015160008d81526004909252604090912054835160808501516060860151949d50929b5063ffffffff90911699509750955093509050611596818a611ffa565b915050919395979092949650565b6000828152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161167090613e3e565b80601f016020809104026020016040519081016040528092919081815260200182805461169c90613e3e565b80156116e95780601f106116be576101008083540402835291602001916116e9565b820191906000526020600020905b8154815290600101906020018083116116cc57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906117ca908590613ff9565b600060405180830381855afa9150503d8060008114611805576040519150601f19603f3d011682016040523d82523d6000602084013e61180a565b606091505b509150915081801561181d575060008151115b1561184057808060200190518101906118369190614015565b9095509350611872565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61187e89898787612a02565b9998505050505050505050565b60008061189983601c613f7f565b6118a4906008614044565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b60006118e333876107bd565b611922576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810187905260440161086a565b60ff86161561195d576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61196686612bdc565b905061197581868686866125e8565b50600086815260036020526040902080546019906119b290790100000000000000000000000000000000000000000000000000900460ff1661406d565b91906101000a81548160ff021916908360ff16021790555095945050505050565b600060ff8216156119e65750601c919050565b61ffff8216156119f85750601b919050565b62ffffff821615611a0b5750601a919050565b63ffffffff821615611a1f57506019919050565b64ffffffffff821615611a3457506018919050565b65ffffffffffff821615611a4a57506017919050565b66ffffffffffffff821615611a6157506016919050565b67ffffffffffffffff821615611a7957506015919050565b68ffffffffffffffffff821615611a9257506014919050565b69ffffffffffffffffffff821615611aac57506013919050565b6affffffffffffffffffffff821615611ac757506012919050565b6bffffffffffffffffffffffff821615611ae357506011919050565b6cffffffffffffffffffffffffff821615611b0057506010919050565b6dffffffffffffffffffffffffffff821615611b1e5750600f919050565b6effffffffffffffffffffffffffffff821615611b3d5750600e919050565b6fffffffffffffffffffffffffffffffff821615611b5d5750600d919050565b70ffffffffffffffffffffffffffffffffff821615611b7e5750600c919050565b71ffffffffffffffffffffffffffffffffffff821615611ba05750600b919050565b72ffffffffffffffffffffffffffffffffffffff821615611bc35750600a919050565b73ffffffffffffffffffffffffffffffffffffffff821615611be757506009919050565b74ffffffffffffffffffffffffffffffffffffffffff821615611c0c57506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff821615611c3257506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff821615611c5957506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff821615611c8157506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff821615611caa57506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff821615611cd457506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff821615611cff57506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615611d2b57506001919050565b506000919050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611dff90613e3e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2b90613e3e565b8015611e785780601f10611e4d57610100808354040283529160200191611e78565b820191906000526020600020905b815481529060010190602001808311611e5b57829003601f168201915b505050505081525050905060008084604051602401611e9991815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611f40908590613ff9565b600060405180830381855afa9150503d8060008114611f7b576040519150601f19603f3d011682016040523d82523d6000602084013e611f80565b606091505b5091509150818015611f93575060008151115b15611fb35780806020019051810190611fac919061408c565b9350611fe5565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fef8785612b15565b979650505050505050565b6000808260405160240161201091815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906120b7908590613ff9565b600060405180830381855afa9150503d80600081146120f2576040519150601f19603f3d011682016040523d82523d6000602084013e6120f7565b606091505b509150915081801561210a575060008151115b1561212a5780806020019051810190612123919061408c565b9350612132565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061220d908590613ff9565b600060405180830381855afa9150503d8060008114612248576040519150601f19603f3d011682016040523d82523d6000602084013e61224d565b606091505b5091509150818015612260575060008151115b1561228257808060200190518101906122799190614015565b94506122b99050565b600085815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a08401919061239490613e3e565b80601f01602080910402602001604051908101604052809291908181526020018280546123c090613e3e565b801561240d5780601f106123e25761010080835404028352916020019161240d565b820191906000526020600020905b8154815290600101906020018083116123f057829003601f168201915b50505050508152505090506000612423846107d4565b1561242f57508261244b565b61244884600161243e876119d3565b61042d9190613f7f565b90505b600061246460e061245d87600061188b565b901c6130af565b600086815260046020526040812054919250906124869063ffffffff166130af565b612499856020015163ffffffff166130af565b6124a2856130af565b6124ad8660206131ec565b87516124b89061342f565b6124c5896080015161342f565b6040516020016124da969594939291906140a9565b604051602081830303815290604052905060006124f78588611ffa565b612536576040518060400160405280600881526020017f696e61637469766500000000000000000000000000000000000000000000000081525061256d565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006125b98660a00151856125838b6130af565b61258e8c60206131ec565b86886040516020016125a59695949392919061424d565b604051602081830303815290604052613452565b9050806040516020016125cc91906143dd565b6040516020818303038152906040529650505050505050919050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260a0810185815263ffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8088168652868116608087019081526001604080890182815260008f81526003875291909120895181549751925160608c015160ff16790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff911515780100000000000000000000000000000000000000000000000002919091167fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff94909a1674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090991691871691909117979097179190911696909617949094178555519284018054939091167fffffffffffffffffffffffff000000000000000000000000000000000000000093909316929092179091559151805184936127a392600285019291019061362c565b509050507f5763628556709478482c29a370cd5c5054e3e42cf0fc3050cbc8e03db29aa4fc86868686866040516127de959493929190614422565b60405180910390a195945050505050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091528120805484929061282d908490614475565b9091555050600083815260046020526040812080549091906128549063ffffffff16613eef565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051611123929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208584529091528120805483929061293090849061448d565b9091555050600082815260046020526040812080549091906129579063ffffffff166144a4565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516129f5929190918252602082015260400190565b60405180910390a4505050565b60008215612a1657612a16848660016128f2565b600085815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503612aaf5750600084815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260036020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146106715780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b6000818152600360205260408120548190612c1890790100000000000000000000000000000000000000000000000000900460ff1660016144ba565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612c525760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612c895760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612cbf5760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff16600003612cf45760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff16600003612d285760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff16600003612d5b5760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff16600003612d8d5760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff16600003612dbe5760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff16600003612dee5760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff16600003612e1d5760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff16600003612e4b5760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff16600003612e785760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff16600003612ea45760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff16600003612ecf5760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff16600003612ef95760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff16600003612f225760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff16600003612f4a5760588160ff16901b8317915050919050565b826affffffffffffffffffffff16600003612f715760508160ff16901b8317915050919050565b8269ffffffffffffffffffff16600003612f975760488160ff16901b8317915050919050565b8268ffffffffffffffffff16600003612fbc5760408160ff16901b8317915050919050565b8267ffffffffffffffff16600003612fe05760388160ff16901b8317915050919050565b8266ffffffffffffff166000036130035760308160ff16901b8317915050919050565b8265ffffffffffff166000036130255760288160ff16901b8317915050919050565b8264ffffffffff166000036130465760208160ff16901b8317915050919050565b8263ffffffff166000036130665760188160ff16901b8317915050919050565b8262ffffff166000036130855760108160ff16901b8317915050919050565b8261ffff166000036130a35760088160ff16901b8317915050919050565b60ff1691909117919050565b6060816000036130f257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561311c578061310681613f47565b91506131159050600a8361450e565b91506130f6565b60008167ffffffffffffffff81111561313757613137613713565b6040519080825280601f01601f191660200182016040528015613161576020820181803683370190505b5090505b84156131e45761317660018361448d565b9150613183600a86614522565b61318e906030614475565b60f81b8183815181106131a3576131a3613e91565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506131dd600a8661450e565b9450613165565b949350505050565b606060006131fb836002614536565b613206906002614475565b67ffffffffffffffff81111561321e5761321e613713565b6040519080825280601f01601f191660200182016040528015613248576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061327f5761327f613e91565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106132e2576132e2613e91565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061331e846002614536565b613329906001614475565b90505b60018111156133c6577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061336a5761336a613e91565b1a60f81b82828151811061338057613380613e91565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936133bf81613f12565b905061332c565b508315610f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161086a565b606061067373ffffffffffffffffffffffffffffffffffffffff831660146131ec565b6060815160000361347157505060408051602081019091526000815290565b600060405180606001604052806040815260200161457460409139905060006003845160026134a09190614475565b6134aa919061450e565b6134b5906004614536565b905060006134c4826020614475565b67ffffffffffffffff8111156134dc576134dc613713565b6040519080825280601f01601f191660200182016040528015613506576020820181803683370190505b509050818152600183018586518101602084015b818310156135745760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b9382019390935260040161351a565b60038951066001811461358e57600281146135d85761361e565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83015261361e565b7f3d000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301525b509398975050505050505050565b82805461363890613e3e565b90600052602060002090601f01602090048101928261365a57600085556136a0565b82601f1061367357805160ff19168380011785556136a0565b828001600101855582156136a0579182015b828111156136a0578251825591602001919060010190613685565b506136ac9291506136b0565b5090565b5b808211156136ac57600081556001016136b1565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b5757600080fd5b600080604083850312156136fc57600080fd5b613705836136c5565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261375357600080fd5b813567ffffffffffffffff8082111561376e5761376e613713565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156137b4576137b4613713565b816040528381528660208588010111156137cd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff81168114610b5757600080fd5b6000806000806080858703121561381757600080fd5b843567ffffffffffffffff81111561382e57600080fd5b61383a87828801613742565b945050613849602086016137ed565b9250613857604086016136c5565b9150613865606086016136c5565b905092959194509250565b60006020828403121561388257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f9457600080fd5b6000602082840312156138c457600080fd5b5035919050565b60005b838110156138e65781810151838201526020016138ce565b838111156138f5576000848401525b50505050565b600081518084526139138160208601602086016138cb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f9460208301846138fb565b60008083601f84011261396a57600080fd5b50813567ffffffffffffffff81111561398257600080fd5b6020830191508360208260051b850101111561399d57600080fd5b9250929050565b60008083601f8401126139b657600080fd5b50813567ffffffffffffffff8111156139ce57600080fd5b60208301915083602082850101111561399d57600080fd5b60008060008060008060008060a0898b031215613a0257600080fd5b613a0b896136c5565b9750613a1960208a016136c5565b9650604089013567ffffffffffffffff80821115613a3657600080fd5b613a428c838d01613958565b909850965060608b0135915080821115613a5b57600080fd5b613a678c838d01613958565b909650945060808b0135915080821115613a8057600080fd5b50613a8d8b828c016139a4565b999c989b5096995094979396929594505050565b60008060008060408587031215613ab757600080fd5b843567ffffffffffffffff80821115613acf57600080fd5b613adb88838901613958565b90965094506020870135915080821115613af457600080fd5b50613b0187828801613958565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613b4557835183529284019291840191600101613b29565b50909695505050505050565b600060208284031215613b6357600080fd5b610f94826136c5565b60008060408385031215613b7f57600080fd5b82359150613b8f602084016136c5565b90509250929050565b8015158114613ba657600080fd5b50565b60008060408385031215613bbc57600080fd5b613bc5836136c5565b91506020830135613bd581613b98565b809150509250929050565b600080600060608486031215613bf557600080fd5b83359250613c05602085016136c5565b9150613c13604085016136c5565b90509250925092565b60008060008060808587031215613c3257600080fd5b84359350613c42602086016136c5565b92506040850135613c5281613b98565b91506060850135613c6281613b98565b939692955090935050565b60008060408385031215613c8057600080fd5b823591506020830135613bd581613b98565b60e081526000613ca560e083018a6138fb565b63ffffffff988916602084015296909716604082015273ffffffffffffffffffffffffffffffffffffffff948516606082015292909316608083015260ff1660a082015290151560c09091015292915050565b60008060408385031215613d0b57600080fd5b82359150602083013560ff81168114613bd557600080fd5b60008060408385031215613d3657600080fd5b613d3f836136c5565b9150613b8f602084016136c5565b600080600080600060a08688031215613d6557600080fd5b85359450602086013567ffffffffffffffff811115613d8357600080fd5b613d8f88828901613742565b945050613d9e604087016137ed565b9250613dac606087016136c5565b9150613dba608087016136c5565b90509295509295909350565b60008060008060008060a08789031215613ddf57600080fd5b613de8876136c5565b9550613df6602088016136c5565b94506040870135935060608701359250608087013567ffffffffffffffff811115613e2057600080fd5b613e2c89828a016139a4565b979a9699509497509295939492505050565b600181811c90821680613e5257607f821691505b602082108103613e8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103613f0857613f08613ec0565b6001019392505050565b600081613f2157613f21613ec0565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f7857613f78613ec0565b5060010190565b600060ff821660ff841680821015613f9957613f99613ec0565b90039392505050565b600060ff821680613fb557613fb5613ec0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b60008151613fef8185602086016138cb565b9290920192915050565b6000825161400b8184602087016138cb565b9190910192915050565b6000806040838503121561402857600080fd5b825161403381613b98565b6020840151909250613bd581613b98565b600060ff821660ff84168160ff048111821515161561406557614065613ec0565b029392505050565b600060ff821660ff810361408357614083613ec0565b60010192915050565b60006020828403121561409e57600080fd5b8151610f9481613b98565b7f7b2263757272656e7420737570706c79223a20220000000000000000000000008152600087516140e1816014850160208c016138cb565b7f222c2022737570706c7920636170223a20220000000000000000000000000000601491840191820152875161411e816026840160208c016138cb565b7f222c202261646d696e2028696429223a2022000000000000000000000000000060269290910191820152865161415c816038840160208b016138cb565b7f222c202261646d696e202870726574747920696429223a20220000000000000060389290910191820152855161419a816051840160208a016138cb565b7f222c20226f7261636c652061646472657373223a2022000000000000000000006051929091019182015284516141d88160678401602089016138cb565b61423f6142166142106067848601017f222c2022636f6e646974696f6e732061646472657373223a20220000000000008152601a0190565b87613fdd565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008751614285816018850160208c016138cb565b7f222c2022646f6d61696e223a202200000000000000000000000000000000000060189184019182015287516142c2816026840160208c016138cb565b7f222c20226964223a202200000000000000000000000000000000000000000000602692909101918201528651614300816030840160208b016138cb565b7f222c2022707265747479206964223a202200000000000000000000000000000060309290910191820152855161433e816041840160208a016138cb565b7f222c2022737461747573223a202200000000000000000000000000000000000060419290910191820152845161437c81604f8401602089016138cb565b61423f6143b4614210604f848601017f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161441581601d8501602087016138cb565b91909101601d0192915050565b85815260a06020820152600061443b60a08301876138fb565b63ffffffff9590951660408301525073ffffffffffffffffffffffffffffffffffffffff9283166060820152911660809091015292915050565b6000821982111561448857614488613ec0565b500190565b60008282101561449f5761449f613ec0565b500390565b600063ffffffff821680613fb557613fb5613ec0565b600060ff821660ff84168060ff038211156144d7576144d7613ec0565b019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261451d5761451d6144df565b500490565b600082614531576145316144df565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561456e5761456e613ec0565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220234b99183296b453838c1375b9d5b03b9b2a039e340edddb9f111f34967c18c164736f6c634300080d0033", - "nonce": "0x2", - "accessList": [] - } - } - ], - "receipts": [ - { - "transactionHash": "0x3c7e5e28d38ba9a6844c87849c7538fdbac8d2f5ac3eaa03cbd79b97c00db345", - "transactionIndex": "0x0", - "blockHash": "0x48772afa1e287822334b13dfe823fe463e2bd82d37d498f1aafb43228cecbc90", - "blockNumber": "0x6e4ce5", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "to": null, - "cumulativeGasUsed": "0x3b68ab", - "gasUsed": "0x3b68ab", - "contractAddress": "0xb7019c3670f5d4dd99166727a7d29f8a16f4f20a", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d05e08" - } - ], - "libraries": [], - "pending": [], - "path": "broadcast/Hats.s.sol/5/run-latest.json", - "returns": {}, - "timestamp": 1657853124 -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/5/run-1657853179.json b/broadcast/Hats.s.sol/5/run-1657853179.json deleted file mode 100644 index 26ecf8d..0000000 --- a/broadcast/Hats.s.sol/5/run-1657853179.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x3c7e5e28d38ba9a6844c87849c7538fdbac8d2f5ac3eaa03cbd79b97c00db345", - "type": "CREATE", - "contractName": "Hats", - "contractAddress": "0xb7019c3670f5d4dd99166727a7d29f8a16f4f20a", - "tx": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x4d3b44", - "value": "0x0", - "data": "0x608060405234801561001057600080fd5b506145e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106101ce5760003560e01c8063a22cb46511610104578063d70343d8116100a2578063f242432a11610071578063f242432a14610473578063fb2aaa4c14610481578063fc3e05a4146104a6578063fd427358146104b657600080fd5b8063d70343d81461040c578063e76913851461041f578063e985e9c514610432578063efdfb0881461046057600080fd5b8063afaae55a116100de578063afaae55a146103ad578063b56f7562146103c0578063c43dc177146103d3578063d395acf8146103e657600080fd5b8063a22cb46514610359578063a2be079b1461036c578063a4a1f06c1461039a57600080fd5b80634e1273f411610171578063641f776e1161014b578063641f776e146102e55780637178fb51146102f85780637a9df89f1461033357806382afd23b1461034657600080fd5b80634e1273f41461029f57806354a1826c146102bf578063619531c7146102d257600080fd5b80630e89341c116101ad5780630e89341c146102445780632eb2c2d6146102645780634352409a1461027957806345fffac81461028c57600080fd5b8062fdd58e146101d3578063018632e9146101f957806301ffc9a714610221575b600080fd5b6101e66101e13660046136e9565b6104c9565b6040519081526020015b60405180910390f35b61020c610207366004613801565b610679565b604080519283526020830191909152016101f0565b61023461022f366004613870565b61069f565b60405190151581526020016101f0565b6102576102523660046138b2565b610780565b6040516101f09190613945565b6102776102723660046139e6565b61078b565b005b6102346102873660046136e9565b6107bd565b61023461029a3660046138b2565b6107d4565b6102b26102ad366004613aa1565b610803565b6040516101f09190613b0d565b6102346102cd3660046136e9565b61097f565b6101e66102e0366004613b51565b610ada565b6102346102f3366004613b6c565b610b5c565b61031e6103063660046138b2565b60046020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016101f0565b6102776103413660046138b2565b610db3565b6102346103543660046138b2565b610e3a565b610277610367366004613ba9565b610f9b565b61023461037a366004613b6c565b600560209081526000928352604080842090915290825290205460ff1681565b6102776103a8366004613be0565b610fcd565b6102346103bb366004613c1c565b611131565b6102346103ce3660046136e9565b611303565b6102346103e1366004613c6d565b61137e565b6103f96103f43660046138b2565b6113e9565b6040516101f09796959493929190613c92565b61023461041a366004613b6c565b6115a4565b6101e661042d366004613cf8565b61188b565b610234610440366004613d23565b600160209081526000928352604080842090915290825290205460ff1681565b6101e661046e366004613d4d565b6118d7565b610277610272366004613dc6565b61049461048f3660046138b2565b6119d3565b60405160ff90911681526020016101f0565b60025461031e9063ffffffff1681565b6102346104c43660046138b2565b611d33565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161059590613e3e565b80601f01602080910402602001604051908101604052809291908181526020018280546105c190613e3e565b801561060e5780601f106105e35761010080835404028352916020019161060e565b820191906000526020600020905b8154815290600101906020018083116105f157829003601f168201915b5050505050815250509050600091506106278184611ffa565b8015610639575061063984828561213b565b156106715773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b505b92915050565b60008061068533610ada565b915061069482878787876118d7565b905094509492505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061073257507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806106735750507fffffffff00000000000000000000000000000000000000000000000000000000167f0e89341c000000000000000000000000000000000000000000000000000000001490565b6060610673826122c3565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060016107cb84846104c9565b10159392505050565b600080821180156106735750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff81111561088c5761088c613713565b6040519080825280602002602001820160405280156108b5578160200160208202803683370190505b50905060005b84811015610976576000808787848181106108d8576108d8613e91565b90506020020160208101906108ed9190613b51565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085858481811061093b5761093b613e91565b9050602002013581526020019081526020016000205482828151811061096357610963613e91565b60209081029190910101526001016108bb565b50949350505050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610a4b90613e3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7790613e3e565b8015610ac45780601f10610a9957610100808354040283529160200191610ac4565b820191906000526020600020905b815481529060010190602001808311610aa757829003601f168201915b505050505081525050905061066e84828561213b565b6002805460009160e0918390610af59063ffffffff16613eef565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050610b3a816040518060200160405280600081525060016000806125e8565b50610b5782826001604051806020016040528060008152506127ef565b919050565b6000828152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610c2890613e3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5490613e3e565b8015610ca15780601f10610c7657610100808354040283529160200191610ca1565b820191906000526020600020905b815481529060010190602001808311610c8457829003601f168201915b5050505050815250509050610cb63385611303565b610cf5576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810185905260440161086a565b6020808201516000868152600490925260409091205463ffffffff918216911610610d4c576040517fcddd591700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d5683856107bd565b15610d8d576040517f2a8029ce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610da983856001604051806020016040528060008152506127ef565b5060019392505050565b610dbd33826107bd565b610df3576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dff338260016128f2565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610f0690613e3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3290613e3e565b8015610f7f5780601f10610f5457610100808354040283529160200191610f7f565b820191906000526020600020905b815481529060010190602001808311610f6257829003601f168201915b5050505050815250509050610f948184611ffa565b9392505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fd73384611303565b61100d576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600161101a84836104c9565b1015611052576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208484529091528120805490919061108e90613f12565b9091555073ffffffffffffffffffffffffffffffffffffffff8216600090815260208181526040808320848452909152812080549091906110ce90613f47565b90915550604080518281526001602082015273ffffffffffffffffffffffffffffffffffffffff808516929086169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a450505050565b6000848152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916111fd90613e3e565b80601f016020809104026020016040519081016040528092919081815260200182805461122990613e3e565b80156112765780601f1061124b57610100808354040283529160200191611276565b820191906000526020600020905b81548152906001019060200180831161125957829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112ea576040517f5466352b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112f686868686612a02565b5060019695505050505050565b600061130e826107d4565b1561131b57506000610673565b60006001611328846119d3565b6113329190613f7f565b90505b60018160ff161061136f5761134e84610287858461188b565b1561135d576001915050610673565b8061136781613fa2565b915050611335565b61066e8461028785600061188b565b6000828152600360205260408120600181015473ffffffffffffffffffffffffffffffffffffffff1633146113df576040517f15671f6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066e8484612b15565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff7801000000000000000000000000000000000000000000000000820481161515948301949094527901000000000000000000000000000000000000000000000000009004909216606083810191909152600182015490931660808301526002810180549394938493849384938493849384939092909160a0840191906114ca90613e3e565b80601f01602080910402602001604051908101604052809291908181526020018280546114f690613e3e565b80156115435780601f1061151857610100808354040283529160200191611543565b820191906000526020600020905b81548152906001019060200180831161152657829003601f168201915b5050509190925250505060a081015160208083015160008d81526004909252604090912054835160808501516060860151949d50929b5063ffffffff90911699509750955093509050611596818a611ffa565b915050919395979092949650565b6000828152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161167090613e3e565b80601f016020809104026020016040519081016040528092919081815260200182805461169c90613e3e565b80156116e95780601f106116be576101008083540402835291602001916116e9565b820191906000526020600020905b8154815290600101906020018083116116cc57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906117ca908590613ff9565b600060405180830381855afa9150503d8060008114611805576040519150601f19603f3d011682016040523d82523d6000602084013e61180a565b606091505b509150915081801561181d575060008151115b1561184057808060200190518101906118369190614015565b9095509350611872565b6040517fcc06f72700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61187e89898787612a02565b9998505050505050505050565b60008061189983601c613f7f565b6118a4906008614044565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60ff919091161b841691505092915050565b60006118e333876107bd565b611922576040517ff921ec010000000000000000000000000000000000000000000000000000000081523360048201526024810187905260440161086a565b60ff86161561195d576040517f221f404100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61196686612bdc565b905061197581868686866125e8565b50600086815260036020526040902080546019906119b290790100000000000000000000000000000000000000000000000000900460ff1661406d565b91906101000a81548160ff021916908360ff16021790555095945050505050565b600060ff8216156119e65750601c919050565b61ffff8216156119f85750601b919050565b62ffffff821615611a0b5750601a919050565b63ffffffff821615611a1f57506019919050565b64ffffffffff821615611a3457506018919050565b65ffffffffffff821615611a4a57506017919050565b66ffffffffffffff821615611a6157506016919050565b67ffffffffffffffff821615611a7957506015919050565b68ffffffffffffffffff821615611a9257506014919050565b69ffffffffffffffffffff821615611aac57506013919050565b6affffffffffffffffffffff821615611ac757506012919050565b6bffffffffffffffffffffffff821615611ae357506011919050565b6cffffffffffffffffffffffffff821615611b0057506010919050565b6dffffffffffffffffffffffffffff821615611b1e5750600f919050565b6effffffffffffffffffffffffffffff821615611b3d5750600e919050565b6fffffffffffffffffffffffffffffffff821615611b5d5750600d919050565b70ffffffffffffffffffffffffffffffffff821615611b7e5750600c919050565b71ffffffffffffffffffffffffffffffffffff821615611ba05750600b919050565b72ffffffffffffffffffffffffffffffffffffff821615611bc35750600a919050565b73ffffffffffffffffffffffffffffffffffffffff821615611be757506009919050565b74ffffffffffffffffffffffffffffffffffffffffff821615611c0c57506008919050565b75ffffffffffffffffffffffffffffffffffffffffffff821615611c3257506007919050565b76ffffffffffffffffffffffffffffffffffffffffffffff821615611c5957506006919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff821615611c8157506005919050565b78ffffffffffffffffffffffffffffffffffffffffffffffffff821615611caa57506004919050565b79ffffffffffffffffffffffffffffffffffffffffffffffffffff821615611cd457506003919050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff821615611cff57506002919050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff821615611d2b57506001919050565b506000919050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611dff90613e3e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2b90613e3e565b8015611e785780601f10611e4d57610100808354040283529160200191611e78565b820191906000526020600020905b815481529060010190602001808311611e5b57829003601f168201915b505050505081525050905060008084604051602401611e9991815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690611f40908590613ff9565b600060405180830381855afa9150503d8060008114611f7b576040519150601f19603f3d011682016040523d82523d6000602084013e611f80565b606091505b5091509150818015611f93575060008151115b15611fb35780806020019051810190611fac919061408c565b9350611fe5565b6040517fa4883d7c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fef8785612b15565b979650505050505050565b6000808260405160240161201091815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906120b7908590613ff9565b600060405180830381855afa9150503d80600081146120f2576040519150601f19603f3d011682016040523d82523d6000602084013e6120f7565b606091505b509150915081801561210a575060008151115b1561212a5780806020019051810190612123919061408c565b9350612132565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061220d908590613ff9565b600060405180830381855afa9150503d8060008114612248576040519150601f19603f3d011682016040523d82523d6000602084013e61224d565b606091505b5091509150818015612260575060008151115b1561228257808060200190518101906122799190614015565b94506122b99050565b600085815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600360209081526040808320815160c081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a08401919061239490613e3e565b80601f01602080910402602001604051908101604052809291908181526020018280546123c090613e3e565b801561240d5780601f106123e25761010080835404028352916020019161240d565b820191906000526020600020905b8154815290600101906020018083116123f057829003601f168201915b50505050508152505090506000612423846107d4565b1561242f57508261244b565b61244884600161243e876119d3565b61042d9190613f7f565b90505b600061246460e061245d87600061188b565b901c6130af565b600086815260046020526040812054919250906124869063ffffffff166130af565b612499856020015163ffffffff166130af565b6124a2856130af565b6124ad8660206131ec565b87516124b89061342f565b6124c5896080015161342f565b6040516020016124da969594939291906140a9565b604051602081830303815290604052905060006124f78588611ffa565b612536576040518060400160405280600881526020017f696e61637469766500000000000000000000000000000000000000000000000081525061256d565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006125b98660a00151856125838b6130af565b61258e8c60206131ec565b86886040516020016125a59695949392919061424d565b604051602081830303815290604052613452565b9050806040516020016125cc91906143dd565b6040516020818303038152906040529650505050505050919050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260a0810185815263ffffffff808616602080850191825273ffffffffffffffffffffffffffffffffffffffff8088168652868116608087019081526001604080890182815260008f81526003875291909120895181549751925160608c015160ff16790100000000000000000000000000000000000000000000000000027fffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffff911515780100000000000000000000000000000000000000000000000002919091167fffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffff94909a1674010000000000000000000000000000000000000000027fffffffffffffffff00000000000000000000000000000000000000000000000090991691871691909117979097179190911696909617949094178555519284018054939091167fffffffffffffffffffffffff000000000000000000000000000000000000000093909316929092179091559151805184936127a392600285019291019061362c565b509050507f5763628556709478482c29a370cd5c5054e3e42cf0fc3050cbc8e03db29aa4fc86868686866040516127de959493929190614422565b60405180910390a195945050505050565b73ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091528120805484929061282d908490614475565b9091555050600083815260046020526040812080549091906128549063ffffffff16613eef565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051611123929190918252602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081815260408083208584529091528120805483929061293090849061448d565b9091555050600082815260046020526040812080549091906129579063ffffffff166144a4565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6285856040516129f5929190918252602082015260400190565b60405180910390a4505050565b60008215612a1657612a16848660016128f2565b600085815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff16151582151503612aaf5750600084815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b600082815260036020526040812080547801000000000000000000000000000000000000000000000000900460ff161515831515146106715780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b6000818152600360205260408120548190612c1890790100000000000000000000000000000000000000000000000000900460ff1660016144ba565b9050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612c525760d88160ff16901b8317915050919050565b827affffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612c895760d08160ff16901b8317915050919050565b8279ffffffffffffffffffffffffffffffffffffffffffffffffffff16600003612cbf5760c88160ff16901b8317915050919050565b8278ffffffffffffffffffffffffffffffffffffffffffffffffff16600003612cf45760c08160ff16901b8317915050919050565b8277ffffffffffffffffffffffffffffffffffffffffffffffff16600003612d285760b88160ff16901b8317915050919050565b8276ffffffffffffffffffffffffffffffffffffffffffffff16600003612d5b5760b08160ff16901b8317915050919050565b8275ffffffffffffffffffffffffffffffffffffffffffff16600003612d8d5760a88160ff16901b8317915050919050565b8274ffffffffffffffffffffffffffffffffffffffffff16600003612dbe5760a08160ff16901b8317915050919050565b8273ffffffffffffffffffffffffffffffffffffffff16600003612dee5760988160ff16901b8317915050919050565b8272ffffffffffffffffffffffffffffffffffffff16600003612e1d5760908160ff16901b8317915050919050565b8271ffffffffffffffffffffffffffffffffffff16600003612e4b5760888160ff16901b8317915050919050565b8270ffffffffffffffffffffffffffffffffff16600003612e785760808160ff16901b8317915050919050565b826fffffffffffffffffffffffffffffffff16600003612ea45760788160ff16901b8317915050919050565b826effffffffffffffffffffffffffffff16600003612ecf5760708160ff16901b8317915050919050565b826dffffffffffffffffffffffffffff16600003612ef95760688160ff16901b8317915050919050565b826cffffffffffffffffffffffffff16600003612f225760608160ff16901b8317915050919050565b826bffffffffffffffffffffffff16600003612f4a5760588160ff16901b8317915050919050565b826affffffffffffffffffffff16600003612f715760508160ff16901b8317915050919050565b8269ffffffffffffffffffff16600003612f975760488160ff16901b8317915050919050565b8268ffffffffffffffffff16600003612fbc5760408160ff16901b8317915050919050565b8267ffffffffffffffff16600003612fe05760388160ff16901b8317915050919050565b8266ffffffffffffff166000036130035760308160ff16901b8317915050919050565b8265ffffffffffff166000036130255760288160ff16901b8317915050919050565b8264ffffffffff166000036130465760208160ff16901b8317915050919050565b8263ffffffff166000036130665760188160ff16901b8317915050919050565b8262ffffff166000036130855760108160ff16901b8317915050919050565b8261ffff166000036130a35760088160ff16901b8317915050919050565b60ff1691909117919050565b6060816000036130f257505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561311c578061310681613f47565b91506131159050600a8361450e565b91506130f6565b60008167ffffffffffffffff81111561313757613137613713565b6040519080825280601f01601f191660200182016040528015613161576020820181803683370190505b5090505b84156131e45761317660018361448d565b9150613183600a86614522565b61318e906030614475565b60f81b8183815181106131a3576131a3613e91565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506131dd600a8661450e565b9450613165565b949350505050565b606060006131fb836002614536565b613206906002614475565b67ffffffffffffffff81111561321e5761321e613713565b6040519080825280601f01601f191660200182016040528015613248576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061327f5761327f613e91565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106132e2576132e2613e91565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600061331e846002614536565b613329906001614475565b90505b60018111156133c6577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061336a5761336a613e91565b1a60f81b82828151811061338057613380613e91565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c936133bf81613f12565b905061332c565b508315610f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161086a565b606061067373ffffffffffffffffffffffffffffffffffffffff831660146131ec565b6060815160000361347157505060408051602081019091526000815290565b600060405180606001604052806040815260200161457460409139905060006003845160026134a09190614475565b6134aa919061450e565b6134b5906004614536565b905060006134c4826020614475565b67ffffffffffffffff8111156134dc576134dc613713565b6040519080825280601f01601f191660200182016040528015613506576020820181803683370190505b509050818152600183018586518101602084015b818310156135745760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b9382019390935260040161351a565b60038951066001811461358e57600281146135d85761361e565b7f3d3d0000000000000000000000000000000000000000000000000000000000007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe83015261361e565b7f3d000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8301525b509398975050505050505050565b82805461363890613e3e565b90600052602060002090601f01602090048101928261365a57600085556136a0565b82601f1061367357805160ff19168380011785556136a0565b828001600101855582156136a0579182015b828111156136a0578251825591602001919060010190613685565b506136ac9291506136b0565b5090565b5b808211156136ac57600081556001016136b1565b803573ffffffffffffffffffffffffffffffffffffffff81168114610b5757600080fd5b600080604083850312156136fc57600080fd5b613705836136c5565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261375357600080fd5b813567ffffffffffffffff8082111561376e5761376e613713565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156137b4576137b4613713565b816040528381528660208588010111156137cd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803563ffffffff81168114610b5757600080fd5b6000806000806080858703121561381757600080fd5b843567ffffffffffffffff81111561382e57600080fd5b61383a87828801613742565b945050613849602086016137ed565b9250613857604086016136c5565b9150613865606086016136c5565b905092959194509250565b60006020828403121561388257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f9457600080fd5b6000602082840312156138c457600080fd5b5035919050565b60005b838110156138e65781810151838201526020016138ce565b838111156138f5576000848401525b50505050565b600081518084526139138160208601602086016138cb565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f9460208301846138fb565b60008083601f84011261396a57600080fd5b50813567ffffffffffffffff81111561398257600080fd5b6020830191508360208260051b850101111561399d57600080fd5b9250929050565b60008083601f8401126139b657600080fd5b50813567ffffffffffffffff8111156139ce57600080fd5b60208301915083602082850101111561399d57600080fd5b60008060008060008060008060a0898b031215613a0257600080fd5b613a0b896136c5565b9750613a1960208a016136c5565b9650604089013567ffffffffffffffff80821115613a3657600080fd5b613a428c838d01613958565b909850965060608b0135915080821115613a5b57600080fd5b613a678c838d01613958565b909650945060808b0135915080821115613a8057600080fd5b50613a8d8b828c016139a4565b999c989b5096995094979396929594505050565b60008060008060408587031215613ab757600080fd5b843567ffffffffffffffff80821115613acf57600080fd5b613adb88838901613958565b90965094506020870135915080821115613af457600080fd5b50613b0187828801613958565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b81811015613b4557835183529284019291840191600101613b29565b50909695505050505050565b600060208284031215613b6357600080fd5b610f94826136c5565b60008060408385031215613b7f57600080fd5b82359150613b8f602084016136c5565b90509250929050565b8015158114613ba657600080fd5b50565b60008060408385031215613bbc57600080fd5b613bc5836136c5565b91506020830135613bd581613b98565b809150509250929050565b600080600060608486031215613bf557600080fd5b83359250613c05602085016136c5565b9150613c13604085016136c5565b90509250925092565b60008060008060808587031215613c3257600080fd5b84359350613c42602086016136c5565b92506040850135613c5281613b98565b91506060850135613c6281613b98565b939692955090935050565b60008060408385031215613c8057600080fd5b823591506020830135613bd581613b98565b60e081526000613ca560e083018a6138fb565b63ffffffff988916602084015296909716604082015273ffffffffffffffffffffffffffffffffffffffff948516606082015292909316608083015260ff1660a082015290151560c09091015292915050565b60008060408385031215613d0b57600080fd5b82359150602083013560ff81168114613bd557600080fd5b60008060408385031215613d3657600080fd5b613d3f836136c5565b9150613b8f602084016136c5565b600080600080600060a08688031215613d6557600080fd5b85359450602086013567ffffffffffffffff811115613d8357600080fd5b613d8f88828901613742565b945050613d9e604087016137ed565b9250613dac606087016136c5565b9150613dba608087016136c5565b90509295509295909350565b60008060008060008060a08789031215613ddf57600080fd5b613de8876136c5565b9550613df6602088016136c5565b94506040870135935060608701359250608087013567ffffffffffffffff811115613e2057600080fd5b613e2c89828a016139a4565b979a9699509497509295939492505050565b600181811c90821680613e5257607f821691505b602082108103613e8b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103613f0857613f08613ec0565b6001019392505050565b600081613f2157613f21613ec0565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f7857613f78613ec0565b5060010190565b600060ff821660ff841680821015613f9957613f99613ec0565b90039392505050565b600060ff821680613fb557613fb5613ec0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b60008151613fef8185602086016138cb565b9290920192915050565b6000825161400b8184602087016138cb565b9190910192915050565b6000806040838503121561402857600080fd5b825161403381613b98565b6020840151909250613bd581613b98565b600060ff821660ff84168160ff048111821515161561406557614065613ec0565b029392505050565b600060ff821660ff810361408357614083613ec0565b60010192915050565b60006020828403121561409e57600080fd5b8151610f9481613b98565b7f7b2263757272656e7420737570706c79223a20220000000000000000000000008152600087516140e1816014850160208c016138cb565b7f222c2022737570706c7920636170223a20220000000000000000000000000000601491840191820152875161411e816026840160208c016138cb565b7f222c202261646d696e2028696429223a2022000000000000000000000000000060269290910191820152865161415c816038840160208b016138cb565b7f222c202261646d696e202870726574747920696429223a20220000000000000060389290910191820152855161419a816051840160208a016138cb565b7f222c20226f7261636c652061646472657373223a2022000000000000000000006051929091019182015284516141d88160678401602089016138cb565b61423f6142166142106067848601017f222c2022636f6e646974696f6e732061646472657373223a20220000000000008152601a0190565b87613fdd565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a20220000000000000000815260008751614285816018850160208c016138cb565b7f222c2022646f6d61696e223a202200000000000000000000000000000000000060189184019182015287516142c2816026840160208c016138cb565b7f222c20226964223a202200000000000000000000000000000000000000000000602692909101918201528651614300816030840160208b016138cb565b7f222c2022707265747479206964223a202200000000000000000000000000000060309290910191820152855161433e816041840160208a016138cb565b7f222c2022737461747573223a202200000000000000000000000000000000000060419290910191820152845161437c81604f8401602089016138cb565b61423f6143b4614210604f848601017f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161441581601d8501602087016138cb565b91909101601d0192915050565b85815260a06020820152600061443b60a08301876138fb565b63ffffffff9590951660408301525073ffffffffffffffffffffffffffffffffffffffff9283166060820152911660809091015292915050565b6000821982111561448857614488613ec0565b500190565b60008282101561449f5761449f613ec0565b500390565b600063ffffffff821680613fb557613fb5613ec0565b600060ff821660ff84168060ff038211156144d7576144d7613ec0565b019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261451d5761451d6144df565b500490565b600082614531576145316144df565b500690565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561456e5761456e613ec0565b50029056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220234b99183296b453838c1375b9d5b03b9b2a039e340edddb9f111f34967c18c164736f6c634300080d0033", - "nonce": "0x2", - "accessList": [] - } - } - ], - "receipts": [ - { - "transactionHash": "0x3c7e5e28d38ba9a6844c87849c7538fdbac8d2f5ac3eaa03cbd79b97c00db345", - "transactionIndex": "0x0", - "blockHash": "0x48772afa1e287822334b13dfe823fe463e2bd82d37d498f1aafb43228cecbc90", - "blockNumber": "0x6e4ce5", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "to": null, - "cumulativeGasUsed": "0x3b68ab", - "gasUsed": "0x3b68ab", - "contractAddress": "0xb7019c3670f5d4dd99166727a7d29f8a16f4f20a", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0xb2d05e08" - } - ], - "libraries": [], - "pending": [], - "path": "broadcast/Hats.s.sol/5/run-latest.json", - "returns": {}, - "timestamp": 1657853179 -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/5/run-1665683071.json b/broadcast/Hats.s.sol/5/run-1665683071.json deleted file mode 100644 index e0df15d..0000000 --- a/broadcast/Hats.s.sol/5/run-1665683071.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x997c32490ebf38e4de051b6ba3a312817e6a98736a397c1e177cf50f4bc19997", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0x2923469A33bd2FA2Ab33c877DB81d35A9D8d60C6", - "function": null, - "arguments": [ - "Hats Protocol - Beta 4", - "hats-beta4:" - ], - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x6107f2", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b50604051620059ea380380620059ea83398101604081905262000034916200011f565b600262000042838262000218565b50600462000051828262000218565b505050620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b600093810190920192909252949350505050565b600080604083850312156200013357600080fd5b82516001600160401b03808211156200014b57600080fd5b620001598683870162000070565b935060208501519150808211156200017057600080fd5b506200017f8582860162000070565b9150509250929050565b600181811c908216806200019e57607f821691505b602082108103620001bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021357600081815260208120601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b038111156200023457620002346200005a565b6200024c8162000245845462000189565b84620001c5565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6156f680620002f46000396000f3fe608060405234801561001057600080fd5b50600436106102915760003560e01c80639011771f11610160578063d3272ba8116100d8578063e76913851161008c578063f242432a11610071578063f242432a146105df578063fb2aaa4c146105ed578063fc3e05a41461061257600080fd5b8063e76913851461059e578063e985e9c5146105b157600080fd5b8063d80a8434116100bd578063d80a843414610565578063dd8298da14610578578063e33dd5c91461058b57600080fd5b8063d3272ba81461052b578063d395acf81461053e57600080fd5b8063a2be079b1161012f578063afaae55a11610114578063afaae55a146104f2578063b56f756214610505578063c43dc1771461051857600080fd5b8063a2be079b146104b1578063a4a1f06c146104df57600080fd5b80639011771f146104505780639dd22c9f14610463578063a109635614610476578063a22cb4651461049e57600080fd5b80634e1273f41161020e57806374f82e30116101c25780637fd6b55f116101a75780637fd6b55f1461041757806382afd23b1461042a578063854cc0491461043d57600080fd5b806374f82e30146103fc5780637a9df89f1461040457600080fd5b806354a1826c116101f357806354a1826c1461039b578063641f776e146103ae5780637178fb51146103c157600080fd5b80634e1273f41461036857806352a6b2651461038857600080fd5b80631183a8c0116102655780633fa9d5441161024a5780633fa9d5441461032f5780634352409a1461034257806345fffac81461035557600080fd5b80631183a8c0146103075780632eb2c2d61461031a57600080fd5b8062fdd58e1461029657806301ffc9a7146102bc57806306fdde03146102df5780630e89341c146102f4575b600080fd5b6102a96102a43660046141cc565b610622565b6040519081526020015b60405180910390f35b6102cf6102ca3660046141f6565b610863565b60405190151581526020016102b3565b6102e7610948565b6040516102b391906142a6565b6102e76103023660046142b9565b6109d6565b6102a96103153660046142b9565b6109e1565b61032d610328366004614360565b610a30565b005b6102cf61033d36600461441b565b610a62565b6102cf6103503660046141cc565b610ddb565b6102cf6103633660046142b9565b610df2565b61037b610376366004614447565b610e21565b6040516102b391906144b3565b6102cf610396366004614666565b610f9d565b6102cf6103a93660046141cc565b611040565b6102cf6103bc36600461441b565b6113ab565b6103e76103cf3660046142b9565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016102b3565b6102e76116fd565b61032d6104123660046142b9565b61170a565b6102a96104253660046146ca565b611791565b6102cf6104383660046142b9565b611830565b6102a961044b3660046147a2565b611a1c565b6102a961045e3660046142b9565b611b1a565b6102a9610471366004614840565b611b3b565b610489610484366004614884565b611bb9565b604080519283526020830191909152016102b3565b61032d6104ac36600461491e565b611be3565b6102cf6104bf36600461441b565b600760209081526000928352604080842090915290825290205460ff1681565b61032d6104ed36600461494a565b611c15565b6102cf610500366004614986565b611d9c565b6102cf6105133660046141cc565b612000565b6102cf6105263660046149d7565b612082565b6102cf6105393660046142b9565b6120ed565b61055161054c3660046142b9565b612446565b6040516102b39897969594939291906149fc565b6102cf6105733660046141cc565b61269d565b6102cf610586366004614b5e565b61288a565b6102e76105993660046142b9565b6129d0565b6102a96105ac3660046146ca565b612e8d565b6102cf6105bf366004614c46565b600160209081526000928352604080842090915290825290205460ff1681565b61032d610328366004614c70565b6106006105fb3660046142b9565b612ed7565b60405160ff90911681526020016102b3565b6003546103e79063ffffffff1681565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916106ee90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90614ce8565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050815260200160038201805461078090614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90614ce8565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b5050505050815250509050600091506108128184612f4c565b8015610824575061082484828561308d565b1561085c5773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806108f657507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061094257507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6002805461095590614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461098190614ce8565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b505050505081565b60606109428261322e565b6000818152600560205260408120548190610a1d90790100000000000000000000000000000000000000000000000000900460ff166001614d6a565b9050610a298382611791565b9392505050565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610b2e90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5a90614ce8565b8015610ba75780601f10610b7c57610100808354040283529160200191610ba7565b820191906000526020600020905b815481529060010190602001808311610b8a57829003601f168201915b50505050508152602001600382018054610bc090614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec90614ce8565b8015610c395780601f10610c0e57610100808354040283529160200191610c39565b820191906000526020600020905b815481529060010190602001808311610c1c57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690610d1a908590614d9f565b600060405180830381855afa9150503d8060008114610d55576040519150601f19603f3d011682016040523d82523d6000602084013e610d5a565b606091505b5091509150818015610d6d575060008151115b15610d905780806020019051810190610d869190614dbb565b9095509350610dc2565b6040517f07a084fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dce898987876135e9565b9998505050505050505050565b60006001610de98484610622565b10159392505050565b600080821180156109425750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff811115610eaa57610eaa6144f7565b604051908082528060200260200182016040528015610ed3578160200160208202803683370190505b50905060005b84811015610f9457600080878784818110610ef657610ef6614dea565b9050602002016020810190610f0b9190614e19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610f5957610f59614dea565b90506020020135815260200190815260200160002054828281518110610f8157610f81614dea565b6020908102919091010152600101610ed9565b50949350505050565b81518151600091908114610fdd576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561103557611024858281518110610ffd57610ffd614dea565b602002602001015185838151811061101757611017614dea565b60200260200101516113ab565b5061102e81614e34565b9050610fe0565b506001949350505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161110c90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461113890614ce8565b80156111855780601f1061115a57610100808354040283529160200191611185565b820191906000526020600020905b81548152906001019060200180831161116857829003601f168201915b5050505050815260200160038201805461119e90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546111ca90614ce8565b80156112175780601f106111ec57610100808354040283529160200191611217565b820191906000526020600020905b8154815290600101906020018083116111fa57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff87166024820152604481018690529192506000916064019050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905283519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906112f5908590614d9f565b600060405180830381855afa9150503d8060008114611330576040519150601f19603f3d011682016040523d82523d6000602084013e611335565b606091505b5091509150818015611348575060008151115b1561136a57808060200190518101906113619190614dbb565b95506113a19050565b600086815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161594505b5050505092915050565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161147790614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546114a390614ce8565b80156114f05780601f106114c5576101008083540402835291602001916114f0565b820191906000526020600020905b8154815290600101906020018083116114d357829003601f168201915b5050505050815260200160038201805461150990614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461153590614ce8565b80156115825780601f1061155757610100808354040283529160200191611582565b820191906000526020600020905b81548152906001019060200180831161156557829003601f168201915b5050505050815250509050806020015163ffffffff166000036115d4576040517fae23181400000000000000000000000000000000000000000000000000000000815260048101859052602401610e88565b6115de3385612000565b61161d576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101859052604401610e88565b6020808201516000868152600690925260409091205463ffffffff918216911610611677576040517f0cd96ab800000000000000000000000000000000000000000000000000000000815260048101859052602401610e88565b6116818385610ddb565b156116d7576040517f643d208300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101859052604401610e88565b6116f38385600160405180602001604052806000815250613706565b5060019392505050565b6004805461095590614ce8565b6117143382610ddb565b61174a576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61175633826001613817565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b60008060005b601c811015611828576117ab816008614e6c565b6117b6906020614ea9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c915081851660000361181857806117f26001601c614ebc565b6117fc9190614ebc565b611807906008614e6c565b8460ff16901b851792505050610942565b61182181614e34565b9050611797565b505092915050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916118fc90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461192890614ce8565b80156119755780601f1061194a57610100808354040283529160200191611975565b820191906000526020600020905b81548152906001019060200180831161195857829003601f168201915b5050505050815260200160038201805461198e90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546119ba90614ce8565b8015611a075780601f106119dc57610100808354040283529160200191611a07565b820191906000526020600020905b8154815290600101906020018083116119ea57829003601f168201915b5050505050815250509050610a298184612f4c565b600060ff871615611a59576040517f7c9225c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a62876109e1565b9050611a6e3382612000565b611aad576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101829052604401610e88565b611abb81878787878761391a565b5060008781526005602052604090208054601990611af890790100000000000000000000000000000000000000000000000000900460ff16614ecf565b91906101000a81548160ff021916908360ff1602179055509695505050505050565b6000611b28601c6008614e6c565b611b33836000612e8d565b901c92915050565b6003805460009160e0918390611b569063ffffffff16614eee565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050611b9c816040518060200160405280600081525060016000808761391a565b506109428382600160405180602001604052806000815250613706565b600080611bc63385611b3b565b9150611bd6828989898988611a1c565b9050965096945050505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c1f3384612000565b611c55576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020818152604080832086845290915290205460011115611cbe576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020818152604080832086845290915281208054909190611cfa90614f11565b9091555073ffffffffffffffffffffffffffffffffffffffff811660009081526020818152604080832086845290915281208054909190611d3a90614e34565b90915550604080518481526001602082015273ffffffffffffffffffffffffffffffffffffffff808416929085169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a4505050565b6000848152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611e6890614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9490614ce8565b8015611ee15780601f10611eb657610100808354040283529160200191611ee1565b820191906000526020600020905b815481529060010190602001808311611ec457829003601f168201915b50505050508152602001600382018054611efa90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2690614ce8565b8015611f735780601f10611f4857610100808354040283529160200191611f73565b820191906000526020600020905b815481529060010190602001808311611f5657829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe7576040517fef3da15100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ff3868686866135e9565b5060019695505050505050565b600061200b82610df2565b156120215761201a8383610ddb565b9050610942565b6000600161202e84612ed7565b6120389190614f46565b90505b60ff81161561207357612052846103508584612e8d565b15612061576001915050610942565b8061206b81614f5f565b91505061203b565b61085984610350856000612e8d565b6000828152600560205260408120600181015473ffffffffffffffffffffffffffffffffffffffff1633146120e3576040517f14b35e7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598484613b83565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916121b990614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546121e590614ce8565b80156122325780601f1061220757610100808354040283529160200191612232565b820191906000526020600020905b81548152906001019060200180831161221557829003601f168201915b5050505050815260200160038201805461224b90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461227790614ce8565b80156122c45780601f10612299576101008083540402835291602001916122c4565b820191906000526020600020905b8154815290600101906020018083116122a757829003601f168201915b5050505050815250509050600080846040516024016122e591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061238c908590614d9f565b600060405180830381855afa9150503d80600081146123c7576040519150601f19603f3d011682016040523d82523d6000602084013e6123cc565b606091505b50915091508180156123df575060008151115b156123ff57808060200190518101906123f89190614f9a565b9350612431565b6040517fa41f929c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61243b8785613b83565b979650505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949384938493849388938593849384939192909160a084019161252890614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461255490614ce8565b80156125a15780601f10612576576101008083540402835291602001916125a1565b820191906000526020600020905b81548152906001019060200180831161258457829003601f168201915b505050505081526020016003820180546125ba90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546125e690614ce8565b80156126335780601f1061260857610100808354040283529160200191612633565b820191906000526020600020905b81548152906001019060200180831161261657829003601f168201915b5050509190925250505060a081015160208083015160008e8152600690925260409091205483516080850151939d50919b5063ffffffff16995097509550905061267c8a6129d0565b93508060600151925061268f818b612f4c565b915050919395975091939597565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161276990614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461279590614ce8565b80156127e25780601f106127b7576101008083540402835291602001916127e2565b820191906000526020600020905b8154815290600101906020018083116127c557829003601f168201915b505050505081526020016003820180546127fb90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461282790614ce8565b80156128745780601f1061284957610100808354040283529160200191612874565b820191906000526020600020905b81548152906001019060200180831161285757829003601f168201915b505050505081525050905061085984828561308d565b6000808751905060008751821480156128a35750865182145b80156128af5750855182145b80156128bb5750845182145b80156128c75750835182145b905080612900576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156129c0576129af8a828151811061292057612920614dea565b60200260200101518a838151811061293a5761293a614dea565b60200260200101518a848151811061295457612954614dea565b60200260200101518a858151811061296e5761296e614dea565b60200260200101518a868151811061298857612988614dea565b60200260200101518a87815181106129a2576129a2614dea565b6020026020010151611a1c565b506129b981614e34565b9050612903565b5060019998505050505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190612aa190614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612acd90614ce8565b8015612b1a5780601f10612aef57610100808354040283529160200191612b1a565b820191906000526020600020905b815481529060010190602001808311612afd57829003601f168201915b50505050508152602001600382018054612b3390614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5f90614ce8565b8015612bac5780601f10612b8157610100808354040283529160200191612bac565b820191906000526020600020905b815481529060010190602001808311612b8f57829003601f168201915b5050509190925250505060c081015180519192509015612bef5780604051602001612bd79190614fb7565b60405160208183030381529060405292505050919050565b6000612bfa85612ed7565b60ff169050805b8015612e57576000612c18876105ac600185614ebc565b600081815260056020908152604091829020825160e081018452815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169483019490945260ff78010000000000000000000000000000000000000000000000008204811615159583019590955279010000000000000000000000000000000000000000000000000090049093166060840152600181015490911660808301526002810180549394509192909160a0840191612ce990614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1590614ce8565b8015612d625780601f10612d3757610100808354040283529160200191612d62565b820191906000526020600020905b815481529060010190602001808311612d4557829003601f168201915b50505050508152602001600382018054612d7b90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612da790614ce8565b8015612df45780601f10612dc957610100808354040283529160200191612df4565b820191906000526020600020905b815481529060010190602001808311612dd757829003601f168201915b50505050508152505094508460c001519350600084511115612e465783612e1a88613c4a565b604051602001612e2b929190614ff8565b60405160208183030381529060405295505050505050919050565b50612e5081614f11565b9050612c01565b506004612e6386613c4a565b604051602001612e74929190615027565b6040516020818303038152906040529350505050919050565b600080612e9e60ff8416601c614ebc565b612ea9906008614e6c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901b841691505092915050565b60008060005b601c811015612f4257612ef1816008614e6c565b612efc906020614ea9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c9150818416600003612f32579392505050565b612f3b81614e34565b9050612edd565b50601c9392505050565b60008082604051602401612f6291815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690613009908590614d9f565b600060405180830381855afa9150503d8060008114613044576040519150601f19603f3d011682016040523d82523d6000602084013e613049565b606091505b509150915081801561305c575060008151115b1561307c57808060200190518101906130759190614f9a565b9350613084565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061315f908590614d9f565b600060405180830381855afa9150503d806000811461319a576040519150601f19603f3d011682016040523d82523d6000602084013e61319f565b606091505b50915091508180156131b2575060008151115b156131ed576000818060200190518101906131cd9190614dbb565b90955090508480156131dd575080155b156131e757600094505b50613224565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a0840191906132ff90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461332b90614ce8565b80156133785780601f1061334d57610100808354040283529160200191613378565b820191906000526020600020905b81548152906001019060200180831161335b57829003601f168201915b5050505050815260200160038201805461339190614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546133bd90614ce8565b801561340a5780601f106133df5761010080835404028352916020019161340a565b820191906000526020600020905b8154815290600101906020018083116133ed57829003601f168201915b5050505050815250509050600061342084610df2565b1561342c575082613448565b61344584600161343b87612ed7565b6105ac9190614f46565b90505b600061345b61345686611b1a565b613c4a565b6000868152600660205260408120549192509061347d9063ffffffff16613c4a565b613490856020015163ffffffff16613c4a565b61349985613c4a565b6134a4866020613d08565b87516134af90613f4b565b6134bc8960800151613f4b565b6040516020016134d1969594939291906150c3565b604051602081830303815290604052905060006134ee8588612f4c565b61352d576040518060400160405280600881526020017f696e616374697665000000000000000000000000000000000000000000000000815250613564565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006135ba8660a001518561357a8b613c4a565b6135858c6020613d08565b8661358f8e6129d0565b896040516020016135a69796959493929190615267565b604051602081830303815290604052613f6e565b9050806040516020016135cd9190615426565b6040516020818303038152906040529650505050505050919050565b60008215806135f6575081155b156136075761360784866001613817565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff161515821515036136a05750600084815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020818152604080832086845290915281208054849290613744908490614ea9565b90915550506000838152600660205260408120805490919061376b9063ffffffff16614eee565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051613809929190918252602082015260400190565b60405180910390a450505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290613855908490614ebc565b90915550506000828152600660205260408120805490919061387c9063ffffffff1661546b565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611d8f929190918252602082015260400190565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c0810191909152858160a0018190525084816020019063ffffffff16908163ffffffff168152505083816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160c001819052506001816040019015159081151581525050806005600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548160ff02191690831515021790555060608201518160000160196101000a81548160ff021916908360ff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816002019081613b1f91906154d0565b5060c08201516003820190613b3490826154d0565b509050507fec3ffd1c8b2d500049d00ade82ead8a9f4aeeeab4b37fb8913380cce862a99ed878787878787604051613b71969594939291906155ea565b60405180910390a19695505050505050565b600082815260056020526040812080547801000000000000000000000000000000000000000000000000900460ff1615158315151461085c5780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b60606000613c57836140c1565b600101905060008167ffffffffffffffff811115613c7757613c776144f7565b6040519080825280601f01601f191660200182016040528015613ca1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613cab57509392505050565b60606000613d17836002614e6c565b613d22906002614ea9565b67ffffffffffffffff811115613d3a57613d3a6144f7565b6040519080825280601f01601f191660200182016040528015613d64576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613d9b57613d9b614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613dfe57613dfe614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613e3a846002614e6c565b613e45906001614ea9565b90505b6001811115613ee2577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613e8657613e86614dea565b1a60f81b828281518110613e9c57613e9c614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613edb81614f11565b9050613e48565b508315610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e88565b606061094273ffffffffffffffffffffffffffffffffffffffff83166014613d08565b60608151600003613f8d57505060408051602081019091526000815290565b60006040518060600160405280604081526020016156816040913990506000600384516002613fbc9190614ea9565b613fc69190615645565b613fd1906004614e6c565b67ffffffffffffffff811115613fe957613fe96144f7565b6040519080825280601f01601f191660200182016040528015614013576020820181803683370190505b509050600182016020820185865187015b8082101561407f576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250614024565b505060038651066001811461409b57600281146140ae576140b6565b603d6001830353603d60028303536140b6565b603d60018303535b509195945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061410a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614136576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061415457662386f26fc10000830492506010015b6305f5e100831061416c576305f5e100830492506008015b612710831061418057612710830492506004015b60648310614192576064830492506002015b600a83106109425760010192915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146141c757600080fd5b919050565b600080604083850312156141df57600080fd5b6141e8836141a3565b946020939093013593505050565b60006020828403121561420857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a2957600080fd5b60005b8381101561425357818101518382015260200161423b565b50506000910152565b60008151808452614274816020860160208601614238565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a29602083018461425c565b6000602082840312156142cb57600080fd5b5035919050565b60008083601f8401126142e457600080fd5b50813567ffffffffffffffff8111156142fc57600080fd5b6020830191508360208260051b850101111561431757600080fd5b9250929050565b60008083601f84011261433057600080fd5b50813567ffffffffffffffff81111561434857600080fd5b60208301915083602082850101111561431757600080fd5b60008060008060008060008060a0898b03121561437c57600080fd5b614385896141a3565b975061439360208a016141a3565b9650604089013567ffffffffffffffff808211156143b057600080fd5b6143bc8c838d016142d2565b909850965060608b01359150808211156143d557600080fd5b6143e18c838d016142d2565b909650945060808b01359150808211156143fa57600080fd5b506144078b828c0161431e565b999c989b5096995094979396929594505050565b6000806040838503121561442e57600080fd5b8235915061443e602084016141a3565b90509250929050565b6000806000806040858703121561445d57600080fd5b843567ffffffffffffffff8082111561447557600080fd5b614481888389016142d2565b9096509450602087013591508082111561449a57600080fd5b506144a7878288016142d2565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156144eb578351835292840192918401916001016144cf565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561456d5761456d6144f7565b604052919050565b600067ffffffffffffffff82111561458f5761458f6144f7565b5060051b60200190565b600082601f8301126145aa57600080fd5b813560206145bf6145ba83614575565b614526565b82815260059290921b840181019181810190868411156145de57600080fd5b8286015b848110156145f957803583529183019183016145e2565b509695505050505050565b600082601f83011261461557600080fd5b813560206146256145ba83614575565b82815260059290921b8401810191818101908684111561464457600080fd5b8286015b848110156145f957614659816141a3565b8352918301918301614648565b6000806040838503121561467957600080fd5b823567ffffffffffffffff8082111561469157600080fd5b61469d86838701614599565b935060208501359150808211156146b357600080fd5b506146c085828601614604565b9150509250929050565b600080604083850312156146dd57600080fd5b82359150602083013560ff811681146146f557600080fd5b809150509250929050565b600082601f83011261471157600080fd5b813567ffffffffffffffff81111561472b5761472b6144f7565b61475c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614526565b81815284602083860101111561477157600080fd5b816020850160208301376000918101602001919091529392505050565b803563ffffffff811681146141c757600080fd5b60008060008060008060c087890312156147bb57600080fd5b86359550602087013567ffffffffffffffff808211156147da57600080fd5b6147e68a838b01614700565b96506147f460408a0161478e565b955061480260608a016141a3565b945061481060808a016141a3565b935060a089013591508082111561482657600080fd5b5061483389828a01614700565b9150509295509295509295565b6000806040838503121561485357600080fd5b61485c836141a3565b9150602083013567ffffffffffffffff81111561487857600080fd5b6146c085828601614700565b60008060008060008060c0878903121561489d57600080fd5b863567ffffffffffffffff808211156148b557600080fd5b6148c18a838b01614700565b97506148cf60208a0161478e565b96506148dd60408a016141a3565b95506148eb60608a016141a3565b9450608089013591508082111561490157600080fd5b6148108a838b01614700565b801515811461491b57600080fd5b50565b6000806040838503121561493157600080fd5b61493a836141a3565b915060208301356146f58161490d565b60008060006060848603121561495f57600080fd5b8335925061496f602085016141a3565b915061497d604085016141a3565b90509250925092565b6000806000806080858703121561499c57600080fd5b843593506149ac602086016141a3565b925060408501356149bc8161490d565b915060608501356149cc8161490d565b939692955090935050565b600080604083850312156149ea57600080fd5b8235915060208301356146f58161490d565b6000610100808352614a108184018c61425c565b63ffffffff8b811660208601528a16604085015273ffffffffffffffffffffffffffffffffffffffff89811660608601528816608085015283810360a08501529050614a5c818761425c565b60ff9590951660c0840152505090151560e0909101529695505050505050565b600082601f830112614a8d57600080fd5b81356020614a9d6145ba83614575565b82815260059290921b84018101918181019086841115614abc57600080fd5b8286015b848110156145f957803567ffffffffffffffff811115614ae05760008081fd5b614aee8986838b0101614700565b845250918301918301614ac0565b600082601f830112614b0d57600080fd5b81356020614b1d6145ba83614575565b82815260059290921b84018101918181019086841115614b3c57600080fd5b8286015b848110156145f957614b518161478e565b8352918301918301614b40565b60008060008060008060c08789031215614b7757600080fd5b863567ffffffffffffffff80821115614b8f57600080fd5b614b9b8a838b01614599565b97506020890135915080821115614bb157600080fd5b614bbd8a838b01614a7c565b96506040890135915080821115614bd357600080fd5b614bdf8a838b01614afc565b95506060890135915080821115614bf557600080fd5b614c018a838b01614604565b94506080890135915080821115614c1757600080fd5b614c238a838b01614604565b935060a0890135915080821115614c3957600080fd5b5061483389828a01614a7c565b60008060408385031215614c5957600080fd5b614c62836141a3565b915061443e602084016141a3565b60008060008060008060a08789031215614c8957600080fd5b614c92876141a3565b9550614ca0602088016141a3565b94506040870135935060608701359250608087013567ffffffffffffffff811115614cca57600080fd5b614cd689828a0161431e565b979a9699509497509295939492505050565b600181811c90821680614cfc57607f821691505b602082108103614d35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff818116838216019081111561094257610942614d3b565b60008151614d95818560208601614238565b9290920192915050565b60008251614db1818460208701614238565b9190910192915050565b60008060408385031215614dce57600080fd5b8251614dd98161490d565b60208401519092506146f58161490d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614e2b57600080fd5b610a29826141a3565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6557614e65614d3b565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea457614ea4614d3b565b500290565b8082018082111561094257610942614d3b565b8181038181111561094257610942614d3b565b600060ff821660ff8103614ee557614ee5614d3b565b60010192915050565b600063ffffffff808316818103614f0757614f07614d3b565b6001019392505050565b600081614f2057614f20614d3b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60ff828116828216039081111561094257610942614d3b565b600060ff821680614f7257614f72614d3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600060208284031215614fac57600080fd5b8151610a298161490d565b60008251614fc9818460208701614238565b7f3000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b6000835161500a818460208801614238565b83519083019061501e818360208801614238565b01949350505050565b600080845461503581614ce8565b6001828116801561504d5760018114615080576150af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841687528215158302870194506150af565b8860005260208060002060005b858110156150a65781548a82015290840190820161508d565b50505082870194505b50505050835161501e818360208801614238565b7f7b2263757272656e7420737570706c79223a20220000000000000000000000008152600087516150fb816014850160208c01614238565b7f222c2022737570706c7920636170223a202200000000000000000000000000006014918401918201528751615138816026840160208c01614238565b7f222c202261646d696e2028696429223a20220000000000000000000000000000602692909101918201528651615176816038840160208b01614238565b7f222c202261646d696e202870726574747920696429223a2022000000000000006038929091019182015285516151b4816051840160208a01614238565b7f222c2022656c69676962696c6974792061646472657373223a202200000000006051929091019182015284516151f281606c840160208901614238565b61525961523061522a606c848601017f222c2022746f67676c652061646472657373223a202200000000000000000000815260160190565b87614d83565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a2022000000000000000081526000885161529f816018850160208d01614238565b7f222c2022646f6d61696e223a202200000000000000000000000000000000000060189184019182015288516152dc816026840160208d01614238565b7f222c20226964223a20220000000000000000000000000000000000000000000060269290910191820152875161531a816030840160208c01614238565b7f222c2022707265747479206964223a2022000000000000000000000000000000603092909101918201528651615358816041840160208b01614238565b7f222c2022737461747573223a2022000000000000000000000000000000000000604192909101918201526152596153fd6153f76153ce6153c861539f604f87018c614d83565b7f222c2022696d616765223a2022000000000000000000000000000000000000008152600d0190565b89614d83565b7f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b86614d83565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161545e81601d850160208701614238565b91909101601d0192915050565b600063ffffffff821680614f7257614f72614d3b565b601f8211156154cb57600081815260208120601f850160051c810160208610156154a85750805b601f850160051c820191505b818110156154c7578281556001016154b4565b5050505b505050565b815167ffffffffffffffff8111156154ea576154ea6144f7565b6154fe816154f88454614ce8565b84615481565b602080601f831160018114615551576000841561551b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556154c7565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561559e5788860151825594840194600190910190840161557f565b50858210156155da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b86815260c06020820152600061560360c083018861425c565b63ffffffff8716604084015273ffffffffffffffffffffffffffffffffffffffff86811660608501528516608084015282810360a0840152610dce818561425c565b60008261567b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122052320c4bcd98e37bd6159591c58f2761d4bf834a0e48918dd19945779164d93a64736f6c63430008100033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203400000000000000000000000000000000000000000000000000000000000000000000000000000000000b686174732d62657461343a000000000000000000000000000000000000000000", - "nonce": "0x6", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0x997c32490ebf38e4de051b6ba3a312817e6a98736a397c1e177cf50f4bc19997", - "transactionIndex": "0x9", - "blockHash": "0x61101df18ba83aba04dd572daf672389c5b792f282c2c5e68b2abd97e8cd37ff", - "blockNumber": "0x76764f", - "from": "0xf48928b8d6C04122778aD74C64886D972decA39F", - "to": null, - "cumulativeGasUsed": "0x5e2a39", - "gasUsed": "0x4aa3a7", - "contractAddress": "0x2923469A33bd2FA2Ab33c877DB81d35A9D8d60C6", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0x2d4bf6ba6" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/5/run-latest.json", - "returns": {}, - "timestamp": 1665683071, - "commit": "ce433f4" -} \ No newline at end of file diff --git a/broadcast/Hats.s.sol/5/run-latest.json b/broadcast/Hats.s.sol/5/run-latest.json deleted file mode 100644 index e0df15d..0000000 --- a/broadcast/Hats.s.sol/5/run-latest.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x997c32490ebf38e4de051b6ba3a312817e6a98736a397c1e177cf50f4bc19997", - "transactionType": "CREATE", - "contractName": "Hats", - "contractAddress": "0x2923469A33bd2FA2Ab33c877DB81d35A9D8d60C6", - "function": null, - "arguments": [ - "Hats Protocol - Beta 4", - "hats-beta4:" - ], - "transaction": { - "type": "0x02", - "from": "0xf48928b8d6c04122778ad74c64886d972deca39f", - "gas": "0x6107f2", - "value": "0x0", - "data": "0x60806040523480156200001157600080fd5b50604051620059ea380380620059ea83398101604081905262000034916200011f565b600262000042838262000218565b50600462000051828262000218565b505050620002e4565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200008257600080fd5b81516001600160401b03808211156200009f576200009f6200005a565b604051601f8301601f19908116603f01168101908282118183101715620000ca57620000ca6200005a565b81604052838152602092508683858801011115620000e757600080fd5b600091505b838210156200010b5785820183015181830184015290820190620000ec565b600093810190920192909252949350505050565b600080604083850312156200013357600080fd5b82516001600160401b03808211156200014b57600080fd5b620001598683870162000070565b935060208501519150808211156200017057600080fd5b506200017f8582860162000070565b9150509250929050565b600181811c908216806200019e57607f821691505b602082108103620001bf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200021357600081815260208120601f850160051c81016020861015620001ee5750805b601f850160051c820191505b818110156200020f57828155600101620001fa565b5050505b505050565b81516001600160401b038111156200023457620002346200005a565b6200024c8162000245845462000189565b84620001c5565b602080601f8311600181146200028457600084156200026b5750858301515b600019600386901b1c1916600185901b1785556200020f565b600085815260208120601f198616915b82811015620002b55788860151825594840194600190910190840162000294565b5085821015620002d45787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6156f680620002f46000396000f3fe608060405234801561001057600080fd5b50600436106102915760003560e01c80639011771f11610160578063d3272ba8116100d8578063e76913851161008c578063f242432a11610071578063f242432a146105df578063fb2aaa4c146105ed578063fc3e05a41461061257600080fd5b8063e76913851461059e578063e985e9c5146105b157600080fd5b8063d80a8434116100bd578063d80a843414610565578063dd8298da14610578578063e33dd5c91461058b57600080fd5b8063d3272ba81461052b578063d395acf81461053e57600080fd5b8063a2be079b1161012f578063afaae55a11610114578063afaae55a146104f2578063b56f756214610505578063c43dc1771461051857600080fd5b8063a2be079b146104b1578063a4a1f06c146104df57600080fd5b80639011771f146104505780639dd22c9f14610463578063a109635614610476578063a22cb4651461049e57600080fd5b80634e1273f41161020e57806374f82e30116101c25780637fd6b55f116101a75780637fd6b55f1461041757806382afd23b1461042a578063854cc0491461043d57600080fd5b806374f82e30146103fc5780637a9df89f1461040457600080fd5b806354a1826c116101f357806354a1826c1461039b578063641f776e146103ae5780637178fb51146103c157600080fd5b80634e1273f41461036857806352a6b2651461038857600080fd5b80631183a8c0116102655780633fa9d5441161024a5780633fa9d5441461032f5780634352409a1461034257806345fffac81461035557600080fd5b80631183a8c0146103075780632eb2c2d61461031a57600080fd5b8062fdd58e1461029657806301ffc9a7146102bc57806306fdde03146102df5780630e89341c146102f4575b600080fd5b6102a96102a43660046141cc565b610622565b6040519081526020015b60405180910390f35b6102cf6102ca3660046141f6565b610863565b60405190151581526020016102b3565b6102e7610948565b6040516102b391906142a6565b6102e76103023660046142b9565b6109d6565b6102a96103153660046142b9565b6109e1565b61032d610328366004614360565b610a30565b005b6102cf61033d36600461441b565b610a62565b6102cf6103503660046141cc565b610ddb565b6102cf6103633660046142b9565b610df2565b61037b610376366004614447565b610e21565b6040516102b391906144b3565b6102cf610396366004614666565b610f9d565b6102cf6103a93660046141cc565b611040565b6102cf6103bc36600461441b565b6113ab565b6103e76103cf3660046142b9565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff90911681526020016102b3565b6102e76116fd565b61032d6104123660046142b9565b61170a565b6102a96104253660046146ca565b611791565b6102cf6104383660046142b9565b611830565b6102a961044b3660046147a2565b611a1c565b6102a961045e3660046142b9565b611b1a565b6102a9610471366004614840565b611b3b565b610489610484366004614884565b611bb9565b604080519283526020830191909152016102b3565b61032d6104ac36600461491e565b611be3565b6102cf6104bf36600461441b565b600760209081526000928352604080842090915290825290205460ff1681565b61032d6104ed36600461494a565b611c15565b6102cf610500366004614986565b611d9c565b6102cf6105133660046141cc565b612000565b6102cf6105263660046149d7565b612082565b6102cf6105393660046142b9565b6120ed565b61055161054c3660046142b9565b612446565b6040516102b39897969594939291906149fc565b6102cf6105733660046141cc565b61269d565b6102cf610586366004614b5e565b61288a565b6102e76105993660046142b9565b6129d0565b6102a96105ac3660046146ca565b612e8d565b6102cf6105bf366004614c46565b600160209081526000928352604080842090915290825290205460ff1681565b61032d610328366004614c70565b6106006105fb3660046142b9565b612ed7565b60405160ff90911681526020016102b3565b6003546103e79063ffffffff1681565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916106ee90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90614ce8565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050815260200160038201805461078090614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546107ac90614ce8565b80156107f95780601f106107ce576101008083540402835291602001916107f9565b820191906000526020600020905b8154815290600101906020018083116107dc57829003601f168201915b5050505050815250509050600091506108128184612f4c565b8015610824575061082484828561308d565b1561085c5773ffffffffffffffffffffffffffffffffffffffff84166000908152602081815260408083208684529091529020545b91505b5092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806108f657507fd9b67a26000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061094257507f0e89341c000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6002805461095590614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461098190614ce8565b80156109ce5780601f106109a3576101008083540402835291602001916109ce565b820191906000526020600020905b8154815290600101906020018083116109b157829003601f168201915b505050505081565b60606109428261322e565b6000818152600560205260408120548190610a1d90790100000000000000000000000000000000000000000000000000900460ff166001614d6a565b9050610a298382611791565b9392505050565b6040517fddb7bb0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191610b2e90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5a90614ce8565b8015610ba75780601f10610b7c57610100808354040283529160200191610ba7565b820191906000526020600020905b815481529060010190602001808311610b8a57829003601f168201915b50505050508152602001600382018054610bc090614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054610bec90614ce8565b8015610c395780601f10610c0e57610100808354040283529160200191610c39565b820191906000526020600020905b815481529060010190602001808311610c1c57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff86166024820152604481018790529192506000918291508190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690610d1a908590614d9f565b600060405180830381855afa9150503d8060008114610d55576040519150601f19603f3d011682016040523d82523d6000602084013e610d5a565b606091505b5091509150818015610d6d575060008151115b15610d905780806020019051810190610d869190614dbb565b9095509350610dc2565b6040517f07a084fe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610dce898987876135e9565b9998505050505050505050565b60006001610de98484610622565b10159392505050565b600080821180156109425750507bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6060838214610e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4c454e4754485f4d49534d41544348000000000000000000000000000000000060448201526064015b60405180910390fd5b8367ffffffffffffffff811115610eaa57610eaa6144f7565b604051908082528060200260200182016040528015610ed3578160200160208202803683370190505b50905060005b84811015610f9457600080878784818110610ef657610ef6614dea565b9050602002016020810190610f0b9190614e19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858584818110610f5957610f59614dea565b90506020020135815260200190815260200160002054828281518110610f8157610f81614dea565b6020908102919091010152600101610ed9565b50949350505050565b81518151600091908114610fdd576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561103557611024858281518110610ffd57610ffd614dea565b602002602001015185838151811061101757611017614dea565b60200260200101516113ab565b5061102e81614e34565b9050610fe0565b506001949350505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161110c90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461113890614ce8565b80156111855780601f1061115a57610100808354040283529160200191611185565b820191906000526020600020905b81548152906001019060200180831161116857829003601f168201915b5050505050815260200160038201805461119e90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546111ca90614ce8565b80156112175780601f106111ec57610100808354040283529160200191611217565b820191906000526020600020905b8154815290600101906020018083116111fa57829003601f168201915b50505091909252505060405173ffffffffffffffffffffffffffffffffffffffff87166024820152604481018690529192506000916064019050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905283519051919250600091829173ffffffffffffffffffffffffffffffffffffffff16906112f5908590614d9f565b600060405180830381855afa9150503d8060008114611330576040519150601f19603f3d011682016040523d82523d6000602084013e611335565b606091505b5091509150818015611348575060008151115b1561136a57808060200190518101906113619190614dbb565b95506113a19050565b600086815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161594505b5050505092915050565b6000828152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161147790614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546114a390614ce8565b80156114f05780601f106114c5576101008083540402835291602001916114f0565b820191906000526020600020905b8154815290600101906020018083116114d357829003601f168201915b5050505050815260200160038201805461150990614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461153590614ce8565b80156115825780601f1061155757610100808354040283529160200191611582565b820191906000526020600020905b81548152906001019060200180831161156557829003601f168201915b5050505050815250509050806020015163ffffffff166000036115d4576040517fae23181400000000000000000000000000000000000000000000000000000000815260048101859052602401610e88565b6115de3385612000565b61161d576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101859052604401610e88565b6020808201516000868152600690925260409091205463ffffffff918216911610611677576040517f0cd96ab800000000000000000000000000000000000000000000000000000000815260048101859052602401610e88565b6116818385610ddb565b156116d7576040517f643d208300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101859052604401610e88565b6116f38385600160405180602001604052806000815250613706565b5060019392505050565b6004805461095590614ce8565b6117143382610ddb565b61174a576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61175633826001613817565b604080518281523360208201527f2c89d843fe25610b34fbe5e1f0159ce8e76d9f1d48fa8d043931b6df2bf41fa9910160405180910390a150565b60008060005b601c811015611828576117ab816008614e6c565b6117b6906020614ea9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c915081851660000361181857806117f26001601c614ebc565b6117fc9190614ebc565b611807906008614e6c565b8460ff16901b851792505050610942565b61182181614e34565b9050611797565b505092915050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916118fc90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461192890614ce8565b80156119755780601f1061194a57610100808354040283529160200191611975565b820191906000526020600020905b81548152906001019060200180831161195857829003601f168201915b5050505050815260200160038201805461198e90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546119ba90614ce8565b8015611a075780601f106119dc57610100808354040283529160200191611a07565b820191906000526020600020905b8154815290600101906020018083116119ea57829003601f168201915b5050505050815250509050610a298184612f4c565b600060ff871615611a59576040517f7c9225c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a62876109e1565b9050611a6e3382612000565b611aad576040517ff921ec0100000000000000000000000000000000000000000000000000000000815233600482015260248101829052604401610e88565b611abb81878787878761391a565b5060008781526005602052604090208054601990611af890790100000000000000000000000000000000000000000000000000900460ff16614ecf565b91906101000a81548160ff021916908360ff1602179055509695505050505050565b6000611b28601c6008614e6c565b611b33836000612e8d565b901c92915050565b6003805460009160e0918390611b569063ffffffff16614eee565b91906101000a81548163ffffffff021916908363ffffffff160217905563ffffffff16901b9050611b9c816040518060200160405280600081525060016000808761391a565b506109428382600160405180602001604052806000815250613706565b600080611bc63385611b3b565b9150611bd6828989898988611a1c565b9050965096945050505050565b6040517f91820c7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c1f3384612000565b611c55576040517fd99366ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020818152604080832086845290915290205460011115611cbe576040517fae9f0ba500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526020818152604080832086845290915281208054909190611cfa90614f11565b9091555073ffffffffffffffffffffffffffffffffffffffff811660009081526020818152604080832086845290915281208054909190611d3a90614e34565b90915550604080518481526001602082015273ffffffffffffffffffffffffffffffffffffffff808416929085169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291015b60405180910390a4505050565b6000848152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a0840191611e6890614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9490614ce8565b8015611ee15780601f10611eb657610100808354040283529160200191611ee1565b820191906000526020600020905b815481529060010190602001808311611ec457829003601f168201915b50505050508152602001600382018054611efa90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2690614ce8565b8015611f735780601f10611f4857610100808354040283529160200191611f73565b820191906000526020600020905b815481529060010190602001808311611f5657829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fe7576040517fef3da15100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ff3868686866135e9565b5060019695505050505050565b600061200b82610df2565b156120215761201a8383610ddb565b9050610942565b6000600161202e84612ed7565b6120389190614f46565b90505b60ff81161561207357612052846103508584612e8d565b15612061576001915050610942565b8061206b81614f5f565b91505061203b565b61085984610350856000612e8d565b6000828152600560205260408120600181015473ffffffffffffffffffffffffffffffffffffffff1633146120e3576040517f14b35e7e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598484613b83565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a08401916121b990614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546121e590614ce8565b80156122325780601f1061220757610100808354040283529160200191612232565b820191906000526020600020905b81548152906001019060200180831161221557829003601f168201915b5050505050815260200160038201805461224b90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461227790614ce8565b80156122c45780601f10612299576101008083540402835291602001916122c4565b820191906000526020600020905b8154815290600101906020018083116122a757829003601f168201915b5050505050815250509050600080846040516024016122e591815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808501519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061238c908590614d9f565b600060405180830381855afa9150503d80600081146123c7576040519150601f19603f3d011682016040523d82523d6000602084013e6123cc565b606091505b50915091508180156123df575060008151115b156123ff57808060200190518101906123f89190614f9a565b9350612431565b6040517fa41f929c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61243b8785613b83565b979650505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949384938493849388938593849384939192909160a084019161252890614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461255490614ce8565b80156125a15780601f10612576576101008083540402835291602001916125a1565b820191906000526020600020905b81548152906001019060200180831161258457829003601f168201915b505050505081526020016003820180546125ba90614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546125e690614ce8565b80156126335780601f1061260857610100808354040283529160200191612633565b820191906000526020600020905b81548152906001019060200180831161261657829003601f168201915b5050509190925250505060a081015160208083015160008e8152600690925260409091205483516080850151939d50919b5063ffffffff16995097509550905061267c8a6129d0565b93508060600151925061268f818b612f4c565b915050919395975091939597565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff780100000000000000000000000000000000000000000000000082048116151594830194909452790100000000000000000000000000000000000000000000000000900490921660608301526001810154909216608082015260028201805484939160a084019161276990614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461279590614ce8565b80156127e25780601f106127b7576101008083540402835291602001916127e2565b820191906000526020600020905b8154815290600101906020018083116127c557829003601f168201915b505050505081526020016003820180546127fb90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461282790614ce8565b80156128745780601f1061284957610100808354040283529160200191612874565b820191906000526020600020905b81548152906001019060200180831161285757829003601f168201915b505050505081525050905061085984828561308d565b6000808751905060008751821480156128a35750865182145b80156128af5750855182145b80156128bb5750845182145b80156128c75750835182145b905080612900576040517ffc5221bd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156129c0576129af8a828151811061292057612920614dea565b60200260200101518a838151811061293a5761293a614dea565b60200260200101518a848151811061295457612954614dea565b60200260200101518a858151811061296e5761296e614dea565b60200260200101518a868151811061298857612988614dea565b60200260200101518a87815181106129a2576129a2614dea565b6020026020010151611a1c565b506129b981614e34565b9050612903565b5060019998505050505050505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a084019190612aa190614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612acd90614ce8565b8015612b1a5780601f10612aef57610100808354040283529160200191612b1a565b820191906000526020600020905b815481529060010190602001808311612afd57829003601f168201915b50505050508152602001600382018054612b3390614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5f90614ce8565b8015612bac5780601f10612b8157610100808354040283529160200191612bac565b820191906000526020600020905b815481529060010190602001808311612b8f57829003601f168201915b5050509190925250505060c081015180519192509015612bef5780604051602001612bd79190614fb7565b60405160208183030381529060405292505050919050565b6000612bfa85612ed7565b60ff169050805b8015612e57576000612c18876105ac600185614ebc565b600081815260056020908152604091829020825160e081018452815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169483019490945260ff78010000000000000000000000000000000000000000000000008204811615159583019590955279010000000000000000000000000000000000000000000000000090049093166060840152600181015490911660808301526002810180549394509192909160a0840191612ce990614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1590614ce8565b8015612d625780601f10612d3757610100808354040283529160200191612d62565b820191906000526020600020905b815481529060010190602001808311612d4557829003601f168201915b50505050508152602001600382018054612d7b90614ce8565b80601f0160208091040260200160405190810160405280929190818152602001828054612da790614ce8565b8015612df45780601f10612dc957610100808354040283529160200191612df4565b820191906000526020600020905b815481529060010190602001808311612dd757829003601f168201915b50505050508152505094508460c001519350600084511115612e465783612e1a88613c4a565b604051602001612e2b929190614ff8565b60405160208183030381529060405295505050505050919050565b50612e5081614f11565b9050612c01565b506004612e6386613c4a565b604051602001612e74929190615027565b6040516020818303038152906040529350505050919050565b600080612e9e60ff8416601c614ebc565b612ea9906008614e6c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901b841691505092915050565b60008060005b601c811015612f4257612ef1816008614e6c565b612efc906020614ea9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c9150818416600003612f32579392505050565b612f3b81614e34565b9050612edd565b50601c9392505050565b60008082604051602401612f6291815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f96208f7a0000000000000000000000000000000000000000000000000000000017905260808601519051919250600091829173ffffffffffffffffffffffffffffffffffffffff1690613009908590614d9f565b600060405180830381855afa9150503d8060008114613044576040519150601f19603f3d011682016040523d82523d6000602084013e613049565b606091505b509150915081801561305c575060008151115b1561307c57808060200190518101906130759190614f9a565b9350613084565b856040015193505b50505092915050565b60405173ffffffffffffffffffffffffffffffffffffffff84166024820152604481018290526000908190606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fbd6838720000000000000000000000000000000000000000000000000000000017905285519051919250600091829173ffffffffffffffffffffffffffffffffffffffff169061315f908590614d9f565b600060405180830381855afa9150503d806000811461319a576040519150601f19603f3d011682016040523d82523d6000602084013e61319f565b606091505b50915091508180156131b2575060008151115b156131ed576000818060200190518101906131cd9190614dbb565b90955090508480156131dd575080155b156131e757600094505b50613224565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8b16845290915290205460ff161593505b5050509392505050565b6000818152600560209081526040808320815160e081018352815473ffffffffffffffffffffffffffffffffffffffff808216835263ffffffff740100000000000000000000000000000000000000008304169583019590955260ff78010000000000000000000000000000000000000000000000008204811615159483019490945279010000000000000000000000000000000000000000000000000090049092166060838101919091526001820154909316608083015260028101805493949360a0840191906132ff90614ce8565b80601f016020809104026020016040519081016040528092919081815260200182805461332b90614ce8565b80156133785780601f1061334d57610100808354040283529160200191613378565b820191906000526020600020905b81548152906001019060200180831161335b57829003601f168201915b5050505050815260200160038201805461339190614ce8565b80601f01602080910402602001604051908101604052809291908181526020018280546133bd90614ce8565b801561340a5780601f106133df5761010080835404028352916020019161340a565b820191906000526020600020905b8154815290600101906020018083116133ed57829003601f168201915b5050505050815250509050600061342084610df2565b1561342c575082613448565b61344584600161343b87612ed7565b6105ac9190614f46565b90505b600061345b61345686611b1a565b613c4a565b6000868152600660205260408120549192509061347d9063ffffffff16613c4a565b613490856020015163ffffffff16613c4a565b61349985613c4a565b6134a4866020613d08565b87516134af90613f4b565b6134bc8960800151613f4b565b6040516020016134d1969594939291906150c3565b604051602081830303815290604052905060006134ee8588612f4c565b61352d576040518060400160405280600881526020017f696e616374697665000000000000000000000000000000000000000000000000815250613564565b6040518060400160405280600681526020017f61637469766500000000000000000000000000000000000000000000000000008152505b905060006135ba8660a001518561357a8b613c4a565b6135858c6020613d08565b8661358f8e6129d0565b896040516020016135a69796959493929190615267565b604051602081830303815290604052613f6e565b9050806040516020016135cd9190615426565b6040516020818303038152906040529650505050505050919050565b60008215806135f6575081155b156136075761360784866001613817565b600085815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff8816845290915290205460ff161515821515036136a05750600084815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016821517905560015b6040805186815273ffffffffffffffffffffffffffffffffffffffff8616602082015284151581830152831515606082015290517f41e88a038281eb33de5569dd3165473f70751977b6ee9a63aba6b8230a4fa78f9181900360800190a1949350505050565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020818152604080832086845290915281208054849290613744908490614ea9565b90915550506000838152600660205260408120805490919061376b9063ffffffff16614eee565b91906101000a81548163ffffffff021916908363ffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051613809929190918252602082015260400190565b60405180910390a450505050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020818152604080832085845290915281208054839290613855908490614ebc565b90915550506000828152600660205260408120805490919061387c9063ffffffff1661546b565b91906101000a81548163ffffffff021916908363ffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051611d8f929190918252602082015260400190565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c0810191909152858160a0018190525084816020019063ffffffff16908163ffffffff168152505083816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160c001819052506001816040019015159081151581525050806005600089815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548160ff02191690831515021790555060608201518160000160196101000a81548160ff021916908360ff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a0820151816002019081613b1f91906154d0565b5060c08201516003820190613b3490826154d0565b509050507fec3ffd1c8b2d500049d00ade82ead8a9f4aeeeab4b37fb8913380cce862a99ed878787878787604051613b71969594939291906155ea565b60405180910390a19695505050505050565b600082815260056020526040812080547801000000000000000000000000000000000000000000000000900460ff1615158315151461085c5780547fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1678010000000000000000000000000000000000000000000000008415159081029190911782556040805186815260208101929092527fd07f9843f67faeb66cef933eec38bef71b53ef4086a2aa2a5b109b6ee531c751910160405180910390a15060019392505050565b60606000613c57836140c1565b600101905060008167ffffffffffffffff811115613c7757613c776144f7565b6040519080825280601f01601f191660200182016040528015613ca1576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084613cab57509392505050565b60606000613d17836002614e6c565b613d22906002614ea9565b67ffffffffffffffff811115613d3a57613d3a6144f7565b6040519080825280601f01601f191660200182016040528015613d64576020820181803683370190505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613d9b57613d9b614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613dfe57613dfe614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000613e3a846002614e6c565b613e45906001614ea9565b90505b6001811115613ee2577f303132333435363738396162636465660000000000000000000000000000000085600f1660108110613e8657613e86614dea565b1a60f81b828281518110613e9c57613e9c614dea565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93613edb81614f11565b9050613e48565b508315610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e88565b606061094273ffffffffffffffffffffffffffffffffffffffff83166014613d08565b60608151600003613f8d57505060408051602081019091526000815290565b60006040518060600160405280604081526020016156816040913990506000600384516002613fbc9190614ea9565b613fc69190615645565b613fd1906004614e6c565b67ffffffffffffffff811115613fe957613fe96144f7565b6040519080825280601f01601f191660200182016040528015614013576020820181803683370190505b509050600182016020820185865187015b8082101561407f576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845350600183019250614024565b505060038651066001811461409b57600281146140ae576140b6565b603d6001830353603d60028303536140b6565b603d60018303535b509195945050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061410a577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614136576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061415457662386f26fc10000830492506010015b6305f5e100831061416c576305f5e100830492506008015b612710831061418057612710830492506004015b60648310614192576064830492506002015b600a83106109425760010192915050565b803573ffffffffffffffffffffffffffffffffffffffff811681146141c757600080fd5b919050565b600080604083850312156141df57600080fd5b6141e8836141a3565b946020939093013593505050565b60006020828403121561420857600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610a2957600080fd5b60005b8381101561425357818101518382015260200161423b565b50506000910152565b60008151808452614274816020860160208601614238565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610a29602083018461425c565b6000602082840312156142cb57600080fd5b5035919050565b60008083601f8401126142e457600080fd5b50813567ffffffffffffffff8111156142fc57600080fd5b6020830191508360208260051b850101111561431757600080fd5b9250929050565b60008083601f84011261433057600080fd5b50813567ffffffffffffffff81111561434857600080fd5b60208301915083602082850101111561431757600080fd5b60008060008060008060008060a0898b03121561437c57600080fd5b614385896141a3565b975061439360208a016141a3565b9650604089013567ffffffffffffffff808211156143b057600080fd5b6143bc8c838d016142d2565b909850965060608b01359150808211156143d557600080fd5b6143e18c838d016142d2565b909650945060808b01359150808211156143fa57600080fd5b506144078b828c0161431e565b999c989b5096995094979396929594505050565b6000806040838503121561442e57600080fd5b8235915061443e602084016141a3565b90509250929050565b6000806000806040858703121561445d57600080fd5b843567ffffffffffffffff8082111561447557600080fd5b614481888389016142d2565b9096509450602087013591508082111561449a57600080fd5b506144a7878288016142d2565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156144eb578351835292840192918401916001016144cf565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561456d5761456d6144f7565b604052919050565b600067ffffffffffffffff82111561458f5761458f6144f7565b5060051b60200190565b600082601f8301126145aa57600080fd5b813560206145bf6145ba83614575565b614526565b82815260059290921b840181019181810190868411156145de57600080fd5b8286015b848110156145f957803583529183019183016145e2565b509695505050505050565b600082601f83011261461557600080fd5b813560206146256145ba83614575565b82815260059290921b8401810191818101908684111561464457600080fd5b8286015b848110156145f957614659816141a3565b8352918301918301614648565b6000806040838503121561467957600080fd5b823567ffffffffffffffff8082111561469157600080fd5b61469d86838701614599565b935060208501359150808211156146b357600080fd5b506146c085828601614604565b9150509250929050565b600080604083850312156146dd57600080fd5b82359150602083013560ff811681146146f557600080fd5b809150509250929050565b600082601f83011261471157600080fd5b813567ffffffffffffffff81111561472b5761472b6144f7565b61475c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614526565b81815284602083860101111561477157600080fd5b816020850160208301376000918101602001919091529392505050565b803563ffffffff811681146141c757600080fd5b60008060008060008060c087890312156147bb57600080fd5b86359550602087013567ffffffffffffffff808211156147da57600080fd5b6147e68a838b01614700565b96506147f460408a0161478e565b955061480260608a016141a3565b945061481060808a016141a3565b935060a089013591508082111561482657600080fd5b5061483389828a01614700565b9150509295509295509295565b6000806040838503121561485357600080fd5b61485c836141a3565b9150602083013567ffffffffffffffff81111561487857600080fd5b6146c085828601614700565b60008060008060008060c0878903121561489d57600080fd5b863567ffffffffffffffff808211156148b557600080fd5b6148c18a838b01614700565b97506148cf60208a0161478e565b96506148dd60408a016141a3565b95506148eb60608a016141a3565b9450608089013591508082111561490157600080fd5b6148108a838b01614700565b801515811461491b57600080fd5b50565b6000806040838503121561493157600080fd5b61493a836141a3565b915060208301356146f58161490d565b60008060006060848603121561495f57600080fd5b8335925061496f602085016141a3565b915061497d604085016141a3565b90509250925092565b6000806000806080858703121561499c57600080fd5b843593506149ac602086016141a3565b925060408501356149bc8161490d565b915060608501356149cc8161490d565b939692955090935050565b600080604083850312156149ea57600080fd5b8235915060208301356146f58161490d565b6000610100808352614a108184018c61425c565b63ffffffff8b811660208601528a16604085015273ffffffffffffffffffffffffffffffffffffffff89811660608601528816608085015283810360a08501529050614a5c818761425c565b60ff9590951660c0840152505090151560e0909101529695505050505050565b600082601f830112614a8d57600080fd5b81356020614a9d6145ba83614575565b82815260059290921b84018101918181019086841115614abc57600080fd5b8286015b848110156145f957803567ffffffffffffffff811115614ae05760008081fd5b614aee8986838b0101614700565b845250918301918301614ac0565b600082601f830112614b0d57600080fd5b81356020614b1d6145ba83614575565b82815260059290921b84018101918181019086841115614b3c57600080fd5b8286015b848110156145f957614b518161478e565b8352918301918301614b40565b60008060008060008060c08789031215614b7757600080fd5b863567ffffffffffffffff80821115614b8f57600080fd5b614b9b8a838b01614599565b97506020890135915080821115614bb157600080fd5b614bbd8a838b01614a7c565b96506040890135915080821115614bd357600080fd5b614bdf8a838b01614afc565b95506060890135915080821115614bf557600080fd5b614c018a838b01614604565b94506080890135915080821115614c1757600080fd5b614c238a838b01614604565b935060a0890135915080821115614c3957600080fd5b5061483389828a01614a7c565b60008060408385031215614c5957600080fd5b614c62836141a3565b915061443e602084016141a3565b60008060008060008060a08789031215614c8957600080fd5b614c92876141a3565b9550614ca0602088016141a3565b94506040870135935060608701359250608087013567ffffffffffffffff811115614cca57600080fd5b614cd689828a0161431e565b979a9699509497509295939492505050565b600181811c90821680614cfc57607f821691505b602082108103614d35577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff818116838216019081111561094257610942614d3b565b60008151614d95818560208601614238565b9290920192915050565b60008251614db1818460208701614238565b9190910192915050565b60008060408385031215614dce57600080fd5b8251614dd98161490d565b60208401519092506146f58161490d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215614e2b57600080fd5b610a29826141a3565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614e6557614e65614d3b565b5060010190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ea457614ea4614d3b565b500290565b8082018082111561094257610942614d3b565b8181038181111561094257610942614d3b565b600060ff821660ff8103614ee557614ee5614d3b565b60010192915050565b600063ffffffff808316818103614f0757614f07614d3b565b6001019392505050565b600081614f2057614f20614d3b565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b60ff828116828216039081111561094257610942614d3b565b600060ff821680614f7257614f72614d3b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b600060208284031215614fac57600080fd5b8151610a298161490d565b60008251614fc9818460208701614238565b7f3000000000000000000000000000000000000000000000000000000000000000920191825250600101919050565b6000835161500a818460208801614238565b83519083019061501e818360208801614238565b01949350505050565b600080845461503581614ce8565b6001828116801561504d5760018114615080576150af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841687528215158302870194506150af565b8860005260208060002060005b858110156150a65781548a82015290840190820161508d565b50505082870194505b50505050835161501e818360208801614238565b7f7b2263757272656e7420737570706c79223a20220000000000000000000000008152600087516150fb816014850160208c01614238565b7f222c2022737570706c7920636170223a202200000000000000000000000000006014918401918201528751615138816026840160208c01614238565b7f222c202261646d696e2028696429223a20220000000000000000000000000000602692909101918201528651615176816038840160208b01614238565b7f222c202261646d696e202870726574747920696429223a2022000000000000006038929091019182015285516151b4816051840160208a01614238565b7f222c2022656c69676962696c6974792061646472657373223a202200000000006051929091019182015284516151f281606c840160208901614238565b61525961523061522a606c848601017f222c2022746f67676c652061646472657373223a202200000000000000000000815260160190565b87614d83565b7f227d000000000000000000000000000000000000000000000000000000000000815260020190565b9a9950505050505050505050565b7f7b226e616d652026206465736372697074696f6e223a2022000000000000000081526000885161529f816018850160208d01614238565b7f222c2022646f6d61696e223a202200000000000000000000000000000000000060189184019182015288516152dc816026840160208d01614238565b7f222c20226964223a20220000000000000000000000000000000000000000000060269290910191820152875161531a816030840160208c01614238565b7f222c2022707265747479206964223a2022000000000000000000000000000000603092909101918201528651615358816041840160208b01614238565b7f222c2022737461747573223a2022000000000000000000000000000000000000604192909101918201526152596153fd6153f76153ce6153c861539f604f87018c614d83565b7f222c2022696d616765223a2022000000000000000000000000000000000000008152600d0190565b89614d83565b7f222c202270726f70657274696573223a20000000000000000000000000000000815260110190565b86614d83565b7f7d00000000000000000000000000000000000000000000000000000000000000815260010190565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c00000081526000825161545e81601d850160208701614238565b91909101601d0192915050565b600063ffffffff821680614f7257614f72614d3b565b601f8211156154cb57600081815260208120601f850160051c810160208610156154a85750805b601f850160051c820191505b818110156154c7578281556001016154b4565b5050505b505050565b815167ffffffffffffffff8111156154ea576154ea6144f7565b6154fe816154f88454614ce8565b84615481565b602080601f831160018114615551576000841561551b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556154c7565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561559e5788860151825594840194600190910190840161557f565b50858210156155da57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b86815260c06020820152600061560360c083018861425c565b63ffffffff8716604084015273ffffffffffffffffffffffffffffffffffffffff86811660608501528516608084015282810360a0840152610dce818561425c565b60008261567b577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa264697066735822122052320c4bcd98e37bd6159591c58f2761d4bf834a0e48918dd19945779164d93a64736f6c63430008100033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000016486174732050726f746f636f6c202d2042657461203400000000000000000000000000000000000000000000000000000000000000000000000000000000000b686174732d62657461343a000000000000000000000000000000000000000000", - "nonce": "0x6", - "accessList": [] - }, - "additionalContracts": [] - } - ], - "receipts": [ - { - "transactionHash": "0x997c32490ebf38e4de051b6ba3a312817e6a98736a397c1e177cf50f4bc19997", - "transactionIndex": "0x9", - "blockHash": "0x61101df18ba83aba04dd572daf672389c5b792f282c2c5e68b2abd97e8cd37ff", - "blockNumber": "0x76764f", - "from": "0xf48928b8d6C04122778aD74C64886D972decA39F", - "to": null, - "cumulativeGasUsed": "0x5e2a39", - "gasUsed": "0x4aa3a7", - "contractAddress": "0x2923469A33bd2FA2Ab33c877DB81d35A9D8d60C6", - "logs": [], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "effectiveGasPrice": "0x2d4bf6ba6" - } - ], - "libraries": [], - "pending": [], - "path": "/Users/spencer/Workspaces/Hats_Protocol/hats-protocol/broadcast/Hats.s.sol/5/run-latest.json", - "returns": {}, - "timestamp": 1665683071, - "commit": "ce433f4" -} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index bc3c2ee..34233a3 100644 --- a/foundry.toml +++ b/foundry.toml @@ -2,8 +2,8 @@ src = 'src' out = 'out' libs = ['lib'] -optimizer_runs = 1000000 -gas_reports = ["*"] +optimizer_runs = 10_000 +gas_reports = ["Hats"] auto_detect_solc = false solc = "0.8.17" remappings = [ @@ -12,6 +12,19 @@ remappings = [ "solbase/=lib/solbase/src/" ] +[fmt] +bracket_spacing = true +int_types = "long" +line_length = 120 +multiline_func_header = "attributes_first" +number_underscore = "thousands" +quote_style = "double" +tab_width = 4 +wrap_comments = false + +[book] +book = "./book.toml" + [rpc_endpoints] ethereum = "${ETHEREUM_RPC}" optimism = "${OPTIMISM_RPC}" diff --git a/lcov.info b/lcov.info index ee12974..a20f745 100644 --- a/lcov.info +++ b/lcov.info @@ -1,590 +1,626 @@ TN: SF:script/Hats.s.sol -FN:8,DeployHats.run +FN:11,DeployHats.run FNDA:0,DeployHats.run -DA:9,0 -DA:11,0 -DA:13,0 -FNF:1 -FNH:0 -LF:3 -LH:0 -BRF:0 -BRH:0 -end_of_record -TN: -SF:src/Hats.sol -FN:111,Hats.mintTopHat -FNDA:142,Hats.mintTopHat -DA:114,142 -DA:116,142 -DA:124,142 -FN:134,Hats.createTopHatAndHat -FNDA:142,Hats.createTopHatAndHat -DA:140,142 -DA:142,142 -FN:159,Hats.createHat -FNDA:142,Hats.createHat -DA:167,142 -BRDA:167,0,0,- -BRDA:167,0,1,4 -DA:168,142 -DA:170,142 -BRDA:170,1,0,- -BRDA:170,1,1,4 -DA:171,142 -DA:174,142 -DA:176,142 -DA:178,142 -FN:181,Hats._buildNextId -FNDA:142,Hats._buildNextId -DA:182,142 -DA:184,142 -BRDA:184,2,0,2 -BRDA:184,2,1,2 -DA:185,142 -DA:187,142 -BRDA:187,3,0,1 -BRDA:187,3,1,1 -DA:188,142 -DA:190,142 -BRDA:190,4,0,1 -BRDA:190,4,1,- -DA:191,142 -DA:193,142 -BRDA:193,5,0,- -BRDA:193,5,1,- -DA:194,142 -DA:196,142 -BRDA:196,6,0,- -BRDA:196,6,1,- -DA:197,142 -DA:199,142 -BRDA:199,7,0,- -BRDA:199,7,1,- -DA:200,142 -DA:202,142 -BRDA:202,8,0,- -BRDA:202,8,1,- -DA:203,142 -DA:205,142 -BRDA:205,9,0,- -BRDA:205,9,1,- -DA:206,142 -DA:208,142 -BRDA:208,10,0,- -BRDA:208,10,1,- -DA:209,142 -DA:211,142 -BRDA:211,11,0,- -BRDA:211,11,1,- -DA:212,142 -DA:214,142 -BRDA:214,12,0,- -BRDA:214,12,1,- -DA:215,142 -DA:217,142 -BRDA:217,13,0,- -BRDA:217,13,1,- -DA:218,142 -DA:220,142 -BRDA:220,14,0,- -BRDA:220,14,1,- -DA:221,142 -DA:223,142 -BRDA:223,15,0,- -BRDA:223,15,1,- -DA:224,142 -DA:226,142 -BRDA:226,16,0,- -BRDA:226,16,1,- -DA:227,142 -DA:229,142 -BRDA:229,17,0,- -BRDA:229,17,1,- -DA:230,142 -DA:232,142 -BRDA:232,18,0,- -BRDA:232,18,1,- -DA:233,142 -DA:235,142 -BRDA:235,19,0,- -BRDA:235,19,1,- -DA:236,142 -DA:238,142 -BRDA:238,20,0,- -BRDA:238,20,1,- -DA:239,142 -DA:241,142 -BRDA:241,21,0,- -BRDA:241,21,1,- -DA:242,142 -DA:244,142 -BRDA:244,22,0,- -BRDA:244,22,1,- -DA:245,142 -DA:247,142 -BRDA:247,23,0,- -BRDA:247,23,1,- -DA:248,142 -DA:250,142 -BRDA:250,24,0,- -BRDA:250,24,1,- -DA:251,142 -DA:254,142 -BRDA:254,25,0,- -BRDA:254,25,1,- -DA:255,142 -DA:258,142 -BRDA:258,26,0,- -BRDA:258,26,1,- -DA:259,142 -DA:262,142 -BRDA:262,27,0,- -BRDA:262,27,1,- -DA:263,142 -DA:266,142 -BRDA:266,28,0,- -BRDA:266,28,1,- -DA:267,142 -DA:270,142 -FN:278,Hats.mintHat -FNDA:142,Hats.mintHat -DA:279,142 -DA:281,142 -BRDA:281,29,0,1 -BRDA:281,29,1,13 -DA:282,142 -DA:285,142 -BRDA:285,30,0,1 -BRDA:285,30,1,12 -DA:286,142 -DA:289,142 -BRDA:289,31,0,1 -BRDA:289,31,1,11 -DA:290,142 -DA:293,142 -DA:295,142 -FN:302,Hats.setHatStatus -FNDA:142,Hats.setHatStatus -DA:306,142 -DA:308,142 -BRDA:308,32,0,2 -BRDA:308,32,1,6 -DA:309,142 -DA:312,142 -FN:319,Hats.pullHatStatusFromConditions -FNDA:142,Hats.pullHatStatusFromConditions -DA:323,142 -DA:324,142 -DA:326,142 -DA:331,142 -DA:337,142 -BRDA:337,33,0,2 -BRDA:337,33,1,1 -DA:338,142 -DA:340,142 -DA:343,142 -FN:353,Hats.setHatWearerStatus -FNDA:142,Hats.setHatWearerStatus -DA:359,142 -DA:361,142 -BRDA:361,34,0,1 -BRDA:361,34,1,4 -DA:362,142 -DA:365,142 -DA:367,142 -FN:374,Hats.pullHatWearerStatusFromOracle -FNDA:142,Hats.pullHatWearerStatusFromOracle -DA:378,142 -DA:379,142 -DA:380,142 -DA:382,142 -DA:388,142 -DA:392,142 -BRDA:392,35,0,3 -BRDA:392,35,1,1 -DA:393,142 -DA:395,142 -DA:398,142 -FN:404,Hats.renounceHat -FNDA:142,Hats.renounceHat -DA:405,142 -BRDA:405,36,0,1 -BRDA:405,36,1,1 -DA:406,142 -DA:409,142 -DA:411,142 -FN:426,Hats._createHat -FNDA:142,Hats._createHat -DA:433,142 -DA:435,142 -DA:437,142 -DA:439,142 -DA:440,142 -DA:442,142 -DA:444,142 -FN:448,Hats._processHatStatus -FNDA:142,Hats._processHatStatus -DA:453,142 -DA:455,142 -BRDA:455,37,0,8 -BRDA:455,37,1,8 -DA:456,142 -DA:457,142 -DA:458,142 -FN:467,Hats._processHatWearerStatus -FNDA:142,Hats._processHatWearerStatus -DA:473,142 -BRDA:473,38,0,5 -BRDA:473,38,1,7 -DA:475,142 -DA:484,142 -BRDA:484,39,0,2 -BRDA:484,39,1,7 -DA:485,142 -DA:486,142 -DA:489,142 -FN:492,Hats.transferHat -FNDA:142,Hats.transferHat -DA:497,142 -BRDA:497,40,0,1 -BRDA:497,40,1,1 -DA:498,142 -DA:501,142 -DA:504,142 -BRDA:504,41,0,- -BRDA:504,41,1,1 -DA:505,142 -DA:509,142 -DA:510,142 -DA:512,142 -FN:528,Hats.viewHat -FNDA:142,Hats.viewHat -DA:541,142 -DA:542,142 -DA:543,142 -DA:544,142 -DA:545,142 -DA:546,142 -DA:547,142 -DA:548,142 -FN:555,Hats.isTopHat -FNDA:142,Hats.isTopHat -DA:556,142 -FN:564,Hats.isWearerOfHat -FNDA:142,Hats.isWearerOfHat -DA:569,142 -FN:577,Hats.isAdminOfHat -FNDA:142,Hats.isAdminOfHat -DA:583,142 -BRDA:583,42,0,- -BRDA:583,42,1,17 -DA:584,142 -DA:587,142 -DA:589,142 -DA:590,142 -BRDA:590,43,0,2 -BRDA:590,43,1,- -DA:591,142 -DA:593,142 -DA:595,142 -FN:598,Hats.getHatLevel -FNDA:142,Hats.getHatLevel -DA:600,142 -BRDA:600,44,0,- -BRDA:600,44,1,21 -DA:601,142 -BRDA:601,45,0,- -BRDA:601,45,1,21 -DA:602,142 -BRDA:602,46,0,- -BRDA:602,46,1,21 -DA:603,142 -BRDA:603,47,0,- -BRDA:603,47,1,21 -DA:604,142 -BRDA:604,48,0,- -BRDA:604,48,1,21 -DA:605,142 -BRDA:605,49,0,- -BRDA:605,49,1,21 -DA:606,142 -BRDA:606,50,0,- -BRDA:606,50,1,21 -DA:607,142 -BRDA:607,51,0,- -BRDA:607,51,1,21 -DA:608,142 -BRDA:608,52,0,- -BRDA:608,52,1,21 -DA:609,142 -BRDA:609,53,0,- -BRDA:609,53,1,21 -DA:610,142 -BRDA:610,54,0,- -BRDA:610,54,1,21 -DA:611,142 -BRDA:611,55,0,- -BRDA:611,55,1,21 -DA:612,142 -BRDA:612,56,0,- -BRDA:612,56,1,21 -DA:613,142 -BRDA:613,57,0,- -BRDA:613,57,1,21 -DA:614,142 -BRDA:614,58,0,- -BRDA:614,58,1,21 -DA:615,142 -BRDA:615,59,0,- -BRDA:615,59,1,21 -DA:616,142 -BRDA:616,60,0,- -BRDA:616,60,1,21 -DA:617,142 -BRDA:617,61,0,- -BRDA:617,61,1,21 -DA:618,142 -BRDA:618,62,0,- -BRDA:618,62,1,21 -DA:619,142 -BRDA:619,63,0,- -BRDA:619,63,1,21 -DA:620,142 -BRDA:620,64,0,- -BRDA:620,64,1,21 -DA:621,142 -BRDA:621,65,0,- -BRDA:621,65,1,21 -DA:622,142 -BRDA:622,66,0,- -BRDA:622,66,1,21 -DA:623,142 -BRDA:623,67,0,- -BRDA:623,67,1,21 -DA:624,142 -BRDA:624,68,0,- -BRDA:624,68,1,21 -DA:625,142 -BRDA:625,69,0,2 -BRDA:625,69,1,19 -DA:626,142 -BRDA:626,70,0,1 -BRDA:626,70,1,18 -DA:627,142 -BRDA:627,71,0,17 -BRDA:627,71,1,1 -DA:628,142 -FN:631,Hats.getAdminAtLevel -FNDA:142,Hats.getAdminAtLevel -DA:636,142 -DA:638,142 -FN:645,Hats._isActive -FNDA:142,Hats._isActive -DA:650,142 -DA:655,142 -DA:659,142 -BRDA:659,72,0,4 -BRDA:659,72,1,88 -DA:660,142 -DA:662,142 -FN:670,Hats.isActive -FNDA:142,Hats.isActive -DA:671,142 -DA:672,142 -FN:680,Hats._isInGoodStanding -FNDA:142,Hats._isInGoodStanding -DA:685,142 -DA:691,142 -DA:693,142 -BRDA:693,73,0,6 -BRDA:693,73,1,75 -DA:694,142 -DA:696,142 -FN:705,Hats.isInGoodStanding -FNDA:142,Hats.isInGoodStanding -DA:710,142 -DA:711,142 -FN:717,Hats._constructURI -FNDA:142,Hats._constructURI -DA:722,142 -DA:724,142 -DA:726,142 -BRDA:726,74,0,1 -BRDA:726,74,1,1 -DA:727,142 -DA:729,142 -DA:732,142 -DA:736,142 -DA:751,142 -DA:753,142 -DA:777,142 -FN:788,Hats.balanceOf -FNDA:142,Hats.balanceOf -DA:794,142 -DA:796,142 -DA:798,142 -BRDA:798,75,0,71 -BRDA:798,75,1,77 -DA:799,142 -FN:809,Hats._mint -FNDA:142,Hats._mint -DA:815,142 -DA:818,142 -DA:820,142 -FN:828,Hats._burn -FNDA:142,Hats._burn -DA:833,142 -DA:836,142 -DA:838,142 -FN:841,Hats.setApprovalForAll -FNDA:142,Hats.setApprovalForAll -DA:846,142 -FN:851,Hats.safeTransferFrom -FNDA:142,Hats.safeTransferFrom -DA:858,142 -FN:863,Hats.safeBatchTransferFrom -FNDA:142,Hats.safeBatchTransferFrom -DA:870,142 -FN:876,Hats.uri -FNDA:142,Hats.uri -DA:877,142 -FNF:32 -FNH:32 -LF:220 -LH:220 -BRF:152 -BRH:73 -end_of_record -TN: -SF:src/HatsAdmins/SampleHatter.sol -FN:18,SampleMultiHatter.mint -FNDA:0,SampleMultiHatter.mint +DA:12,0 +DA:14,0 +DA:15,0 +DA:17,0 DA:19,0 -FN:22,SampleMultiHatter._mint -FNDA:0,SampleMultiHatter._mint -DA:23,0 -BRDA:23,0,0,- -BRDA:23,0,1,- -DA:24,0 -FN:27,SampleMultiHatter.createAndMint -FNDA:0,SampleMultiHatter.createAndMint +FN:34,DeployHatsAndMintTopHat.run +FNDA:0,DeployHatsAndMintTopHat.run DA:35,0 -DA:42,0 -FN:46,SampleMultiHatter.transfer -FNDA:0,SampleMultiHatter.transfer +DA:40,0 +DA:41,0 +DA:43,0 +DA:45,0 +DA:46,0 +DA:48,0 +DA:50,0 DA:51,0 -FN:54,SampleMultiHatter.batchTransfer -FNDA:0,SampleMultiHatter.batchTransfer -DA:59,0 -FNF:5 +DA:53,0 +FNF:2 FNH:0 -LF:7 +LF:15 LH:0 -BRF:2 +BRF:0 BRH:0 end_of_record TN: -SF:src/HatsConditions/SampleHatsConditions.sol -FN:47,OwnableHatsConditions.getHatStatus -FNDA:0,OwnableHatsConditions.getHatStatus -DA:53,0 -FN:56,OwnableHatsConditions.setHatStatus -FNDA:0,OwnableHatsConditions.setHatStatus -DA:61,0 -DA:62,0 -DA:64,0 -FN:67,OwnableHatsConditions._updateHatStatus -FNDA:0,OwnableHatsConditions._updateHatStatus -DA:68,0 -FN:16,ExpiringHatsConditions.getHatStatus -FNDA:0,ExpiringHatsConditions.getHatStatus -DA:22,0 -FN:25,ExpiringHatsConditions.setExpiry -FNDA:0,ExpiringHatsConditions.setExpiry -DA:26,0 -BRDA:26,0,0,- -BRDA:26,0,1,- -DA:27,0 -DA:30,0 -DA:32,0 -FNF:5 -FNH:0 -LF:10 -LH:0 -BRF:2 -BRH:0 +SF:src/Hats.sol +FN:111,Hats.mintTopHat +FNDA:8,Hats.mintTopHat +DA:117,8 +DA:119,8 +DA:129,8 +FN:143,Hats.createHat +FNDA:40671,Hats.createHat +DA:152,45604 +BRDA:152,0,0,- +BRDA:152,0,1,45604 +DA:153,0 +DA:156,45604 +DA:159,45604 +DA:162,45604 +DA:166,45604 +FN:180,Hats.batchCreateHats +FNDA:515,Hats.batchCreateHats +DA:190,515 +DA:192,515 +DA:201,515 +BRDA:201,1,0,256 +BRDA:201,1,1,259 +DA:204,259 +DA:205,4933 +DA:216,4933 +DA:220,259 +FN:227,Hats.getNextId +FNDA:2,Hats.getNextId +DA:228,45606 +DA:229,45606 +FN:237,Hats.mintHat +FNDA:542,Hats.mintHat +DA:238,2441 +DA:239,2441 +BRDA:239,2,0,1 +BRDA:239,2,1,2440 +DA:242,2440 +DA:244,2439 +BRDA:244,3,0,1 +BRDA:244,3,1,2438 +DA:245,1 +DA:248,2438 +BRDA:248,4,0,1 +BRDA:248,4,1,2437 +DA:249,1 +DA:252,2437 +DA:254,2437 +FN:262,Hats.batchMintHats +FNDA:512,Hats.batchMintHats +DA:263,512 +DA:264,512 +BRDA:264,5,0,256 +BRDA:264,5,1,256 +DA:266,256 +DA:267,1899 +DA:269,1899 +DA:273,256 +FN:281,Hats.setHatStatus +FNDA:8,Hats.setHatStatus +DA:282,8 +DA:284,8 +BRDA:284,6,0,2 +BRDA:284,6,1,6 +DA:285,2 +DA:288,6 +FN:295,Hats.checkHatStatus +FNDA:3,Hats.checkHatStatus +DA:296,3 +DA:297,3 +DA:299,3 +DA:301,3 +DA:305,3 +BRDA:305,7,0,2 +BRDA:305,7,1,1 +DA:306,2 +DA:308,1 +DA:311,2 +FN:322,Hats.setHatWearerStatus +FNDA:8,Hats.setHatWearerStatus +DA:326,8 +DA:328,8 +BRDA:328,8,0,1 +BRDA:328,8,1,7 +DA:329,1 +DA:332,7 +DA:334,7 +FN:341,Hats.checkHatWearerStatus +FNDA:7,Hats.checkHatWearerStatus +DA:342,7 +DA:343,7 +DA:344,7 +DA:346,7 +DA:348,7 +DA:352,7 +BRDA:352,9,0,6 +BRDA:352,9,1,1 +DA:353,6 +DA:355,1 +DA:358,6 +FN:364,Hats.renounceHat +FNDA:2,Hats.renounceHat +DA:365,2 +BRDA:365,10,0,1 +BRDA:365,10,1,1 +DA:366,1 +DA:369,1 +FN:387,Hats._createHat +FNDA:45612,Hats._createHat +DA:396,45612 +DA:397,45612 +DA:398,45612 +DA:399,45612 +DA:400,45612 +DA:401,45612 +DA:402,45612 +DA:404,45612 +FN:412,Hats._processHatStatus +FNDA:8,Hats._processHatStatus +DA:414,8 +DA:416,8 +BRDA:416,11,0,8 +BRDA:416,11,1,8 +DA:417,8 +DA:418,8 +DA:419,8 +FN:432,Hats._processHatWearerStatus +FNDA:13,Hats._processHatWearerStatus +DA:437,13 +BRDA:437,12,0,9 +BRDA:437,12,1,11 +DA:439,11 +BRDA:439,13,0,9 +BRDA:439,13,1,11 +DA:440,9 +DA:450,13 +BRDA:450,14,0,8 +BRDA:450,14,1,13 +DA:451,8 +DA:452,8 +DA:454,8 +FN:462,Hats._setHatStatus +FNDA:8,Hats._setHatStatus +DA:463,8 +BRDA:463,15,0,2 +BRDA:463,15,1,6 +DA:464,2 +DA:466,6 +FN:475,Hats._checkAdmin +FNDA:48140,Hats._checkAdmin +DA:476,48140 +BRDA:476,16,0,8 +BRDA:476,16,1,48132 +DA:477,8 +FN:482,Hats._checkAdminOrWearer +FNDA:5,Hats._checkAdminOrWearer +DA:483,5 +BRDA:483,17,0,2 +BRDA:483,17,1,3 +DA:484,2 +FN:493,Hats.transferHat +FNDA:6,Hats.transferHat +DA:494,6 +DA:497,5 +BRDA:497,18,0,1 +BRDA:497,18,1,3 +DA:498,4 +BRDA:498,19,0,1 +BRDA:498,19,1,3 +DA:502,4 +BRDA:502,20,0,- +BRDA:502,20,1,4 +DA:503,0 +DA:507,4 +BRDA:507,21,0,2 +BRDA:507,21,1,2 +DA:508,2 +DA:515,2 +DA:517,2 +DA:520,2 +FN:526,Hats.makeHatImmutable +FNDA:3,Hats.makeHatImmutable +DA:527,3 +DA:529,2 +DA:531,2 +BRDA:531,22,0,1 +BRDA:531,22,1,1 +DA:532,1 +DA:535,1 +DA:537,1 +FN:544,Hats.changeHatDetails +FNDA:3,Hats.changeHatDetails +DA:545,3 +DA:546,3 +DA:549,3 +BRDA:549,23,0,1 +BRDA:549,23,1,1 +DA:550,2 +BRDA:550,24,0,1 +BRDA:550,24,1,1 +DA:553,2 +DA:555,2 +FN:562,Hats.changeHatEligibility +FNDA:3,Hats.changeHatEligibility +DA:563,3 +DA:564,3 +DA:566,3 +BRDA:566,25,0,2 +BRDA:566,25,1,1 +DA:567,2 +DA:570,1 +DA:572,1 +FN:579,Hats.changeHatToggle +FNDA:3,Hats.changeHatToggle +DA:580,3 +DA:581,3 +DA:583,3 +BRDA:583,26,0,2 +BRDA:583,26,1,1 +DA:584,2 +DA:587,1 +DA:589,1 +FN:596,Hats.changeHatImageURI +FNDA:3,Hats.changeHatImageURI +DA:597,3 +DA:598,3 +DA:601,3 +BRDA:601,27,0,1 +BRDA:601,27,1,1 +DA:602,2 +BRDA:602,28,0,1 +BRDA:602,28,1,1 +DA:605,2 +DA:607,2 +FN:614,Hats.changeHatMaxSupply +FNDA:9,Hats.changeHatMaxSupply +DA:615,9 +DA:616,9 +DA:618,9 +BRDA:618,29,0,2 +BRDA:618,29,1,7 +DA:619,2 +DA:622,7 +BRDA:622,30,0,1 +BRDA:622,30,1,6 +DA:623,1 +DA:626,6 +DA:628,6 +FN:641,Hats.requestLinkTopHatToTree +FNDA:28,Hats.requestLinkTopHatToTree +DA:642,28 +DA:645,28 +DA:647,26 +DA:648,26 +FN:656,Hats.approveLinkTopHatToTree +FNDA:25,Hats.approveLinkTopHatToTree +DA:658,25 +BRDA:658,31,0,22 +BRDA:658,31,1,3 +DA:659,22 +DA:662,3 +DA:666,24 +BRDA:666,32,0,1 +BRDA:666,32,1,23 +DA:670,23 +DA:673,23 +FN:679,Hats.unlinkTopHatFromTree +FNDA:2,Hats.unlinkTopHatFromTree +DA:680,2 +DA:681,2 +DA:683,1 +DA:684,1 +FN:692,Hats.relinkTopHatWithinTree +FNDA:8,Hats.relinkTopHatWithinTree +DA:693,8 +DA:696,8 +DA:699,8 +BRDA:699,33,0,6 +BRDA:699,33,1,2 +DA:700,6 +DA:703,2 +DA:707,5 +FN:714,Hats._linkTopHatToTree +FNDA:28,Hats._linkTopHatToTree +DA:715,28 +BRDA:715,34,0,3 +BRDA:715,34,1,25 +DA:718,25 +BRDA:718,35,0,2 +BRDA:718,35,1,4 +DA:719,6 +BRDA:719,36,0,2 +BRDA:719,36,1,4 +DA:720,2 +DA:724,23 +DA:725,23 +FN:743,Hats.viewHat +FNDA:804,Hats.viewHat +DA:758,804 +DA:759,804 +DA:760,804 +DA:761,804 +DA:762,804 +DA:763,804 +DA:764,804 +DA:765,804 +DA:766,804 +DA:767,804 +FN:775,Hats.isWearerOfHat +FNDA:30,Hats.isWearerOfHat +DA:776,50879 +FN:784,Hats.isAdminOfHat +FNDA:9,Hats.isAdminOfHat +DA:785,48154 +BRDA:785,37,0,30 +BRDA:785,37,1,48124 +DA:786,30 +DA:789,48124 +DA:791,48376 +DA:792,42839 +BRDA:792,38,0,42587 +BRDA:792,38,1,252 +DA:793,42587 +DA:797,252 +DA:801,5537 +FN:809,Hats._isActive +FNDA:51700,Hats._isActive +DA:810,51700 +DA:812,51700 +DA:814,51700 +BRDA:814,39,0,4 +BRDA:814,39,1,51696 +DA:815,4 +DA:817,51696 +FN:825,Hats._getHatStatus +FNDA:51704,Hats._getHatStatus +DA:826,51704 +FN:833,Hats._isMutable +FNDA:831,Hats._isMutable +DA:834,831 +FN:842,Hats.isInGoodStanding +FNDA:10,Hats.isInGoodStanding +DA:843,10 +DA:847,10 +BRDA:847,40,0,4 +BRDA:847,40,1,6 +DA:848,4 +DA:850,6 +FN:860,Hats._isEligible +FNDA:50760,Hats._isEligible +DA:861,50760 +DA:862,50760 +DA:864,50760 +BRDA:864,41,0,1 +BRDA:864,41,1,7 +DA:865,7 +DA:866,7 +DA:868,7 +BRDA:868,42,0,1 +BRDA:868,42,1,7 +DA:870,50753 +FN:879,Hats.isEligible +FNDA:0,Hats.isEligible +DA:881,0 +FN:888,Hats.hatSupply +FNDA:26,Hats.hatSupply +DA:889,26 +FN:897,Hats.getImageURIForHat +FNDA:5,Hats.getImageURIForHat +DA:899,811 +DA:901,811 +DA:904,811 +BRDA:904,43,0,550 +BRDA:904,43,1,261 +DA:905,550 +DA:909,261 +DA:912,261 +BRDA:912,44,0,- +BRDA:912,44,1,- +DA:915,260 +DA:918,260 +DA:919,5 +DA:920,5 +DA:921,5 +DA:923,5 +BRDA:923,45,0,1 +BRDA:923,45,1,4 +DA:924,1 +DA:928,4 +DA:933,259 +FN:939,Hats._constructURI +FNDA:2,Hats._constructURI +DA:940,2 +DA:942,2 +DA:944,2 +BRDA:944,46,0,1 +BRDA:944,46,1,1 +DA:945,1 +DA:947,1 +DA:951,2 +DA:961,2 +DA:981,2 +FN:1016,Hats.balanceOf +FNDA:15,Hats.balanceOf +DA:1022,50894 +DA:1024,50894 +DA:1026,50894 +BRDA:1026,47,0,50754 +BRDA:1026,47,1,50894 +DA:1027,50754 +FN:1035,Hats._mintHat +FNDA:2445,Hats._mintHat +DA:1038,2445 +DA:1042,2445 +DA:1045,2445 +FN:1052,Hats._burnHat +FNDA:10,Hats._burnHat +DA:1055,10 +DA:1058,10 +DA:1061,10 +FN:1066,Hats.setApprovalForAll +FNDA:0,Hats.setApprovalForAll +DA:1067,0 +FN:1072,Hats.safeTransferFrom +FNDA:0,Hats.safeTransferFrom +DA:1073,0 +FN:1077,Hats.safeBatchTransferFrom +FNDA:0,Hats.safeBatchTransferFrom +DA:1082,0 +FN:1088,Hats.uri +FNDA:2,Hats.uri +DA:1089,2 +FNF:48 +FNH:44 +LF:239 +LH:233 +BRF:96 +BRH:92 end_of_record TN: -SF:src/HatsOracles/SampleHatsOracle.sol -FN:20,OwnableHatsOracle.getWearerStatus -FNDA:0,OwnableHatsOracle.getWearerStatus -DA:25,0 -FN:28,OwnableHatsOracle.setWearerStatus -FNDA:0,OwnableHatsOracle.setWearerStatus -DA:33,0 -DA:34,0 -DA:36,0 -FN:39,OwnableHatsOracle._updateHatWearerStatus -FNDA:0,OwnableHatsOracle._updateHatWearerStatus -DA:43,0 -FNF:3 -FNH:0 -LF:5 -LH:0 -BRF:0 -BRH:0 +SF:src/HatsIdUtilities.sol +FN:65,HatsIdUtilities.buildHatId +FNDA:289,HatsIdUtilities.buildHatId +DA:66,45923 +DA:67,45923 +DA:69,86876 +DA:75,86876 +BRDA:75,0,0,45923 +BRDA:75,0,1,40953 +DA:77,45923 +DA:84,45923 +DA:89,40953 +FN:97,HatsIdUtilities.getHatLevel +FNDA:63,HatsIdUtilities.getHatLevel +DA:98,48680 +DA:99,48680 +DA:100,0 +DA:101,140862 +DA:103,140862 +BRDA:103,1,0,92235 +BRDA:103,1,1,48680 +DA:107,92235 +DA:110,48680 +DA:112,48680 +BRDA:112,2,0,125 +BRDA:112,2,1,48555 +DA:113,125 +DA:116,48555 +FN:123,HatsIdUtilities.isTopHat +FNDA:18,HatsIdUtilities.isTopHat +DA:124,48185 +FN:133,HatsIdUtilities.getAdminAtLevel +FNDA:19,HatsIdUtilities.getAdminAtLevel +DA:134,48469 +DA:135,48469 +BRDA:135,3,0,48396 +BRDA:135,3,1,73 +DA:137,73 +DA:139,73 +BRDA:139,4,0,5 +BRDA:139,4,1,68 +DA:141,68 +FN:149,HatsIdUtilities.getTreeAdminAtLevel +FNDA:0,HatsIdUtilities.getTreeAdminAtLevel +DA:150,48474 +DA:152,48474 +FN:159,HatsIdUtilities.getTophatDomain +FNDA:4,HatsIdUtilities.getTophatDomain +DA:160,48588 +FN:166,HatsIdUtilities.getTippyTophatDomain +FNDA:0,HatsIdUtilities.getTippyTophatDomain +DA:167,18 +DA:168,18 +BRDA:168,5,0,12 +BRDA:168,5,1,6 +DA:169,6 +FN:176,HatsIdUtilities.noCircularLinkage +FNDA:0,HatsIdUtilities.noCircularLinkage +DA:177,56 +BRDA:177,6,0,25 +BRDA:177,6,1,31 +DA:178,31 +DA:179,31 +BRDA:179,7,0,3 +BRDA:179,7,1,28 +DA:180,28 +DA:181,28 +FN:187,HatsIdUtilities.sameTippyTophatDomain +FNDA:0,HatsIdUtilities.sameTippyTophatDomain +DA:189,6 +DA:190,6 +DA:191,6 +DA:194,6 +FNF:9 +FNH:5 +LF:38 +LH:37 +BRF:16 +BRH:16 end_of_record TN: SF:test/HatsTestSetup.t.sol -FN:66,TestSetup.setUp +FN:64,TestSetup.setUp FNDA:0,TestSetup.setUp +DA:65,0 DA:67,0 -DA:69,0 -DA:72,0 -FN:75,TestSetup.setUpVariables +DA:70,0 +FN:73,TestSetup.setUpVariables FNDA:0,TestSetup.setUpVariables -DA:77,0 +DA:75,0 DA:78,0 DA:79,0 DA:80,0 DA:81,0 -DA:84,0 +DA:82,0 DA:85,0 DA:86,0 -FN:89,TestSetup.createTopHat -FNDA:0,TestSetup.createTopHat +DA:87,0 +DA:89,0 +DA:90,0 DA:91,0 -FN:95,TestSetup.createHatsBranch +DA:93,0 +FN:96,TestSetup.createTopHat +FNDA:0,TestSetup.createTopHat +DA:98,0 +FN:103,TestSetup.createHatsBranch FNDA:0,TestSetup.createHatsBranch -DA:99,0 -DA:100,0 -DA:101,0 -DA:102,0 -DA:104,0 -DA:105,0 DA:107,0 DA:108,0 +DA:109,0 DA:110,0 +DA:112,0 DA:113,0 DA:115,0 -DA:122,0 -DA:125,0 -DA:126,0 -DA:127,0 -DA:129,0 -FN:136,TestSetup2.setUp -FNDA:0,TestSetup2.setUp +DA:116,0 +DA:118,0 +DA:121,0 +DA:123,0 +DA:132,0 +DA:135,0 +DA:136,0 +DA:137,0 DA:139,0 -DA:142,0 -DA:143,0 +FN:169,TestSetupMutable.setUp +FNDA:0,TestSetupMutable.setUp +DA:171,0 +DA:174,0 +DA:175,0 +FN:146,TestSetup2.setUp +FNDA:0,TestSetup2.setUp +DA:148,0 +DA:151,0 DA:152,0 -DA:153,0 -FNF:5 +DA:163,0 +DA:164,0 +FN:188,TestSetupBatch.setUp +FNDA:0,TestSetupBatch.setUp +DA:190,0 +FNF:7 FNH:0 -LF:33 +LF:42 LH:0 BRF:0 BRH:0 end_of_record +TN: +SF:test/LinkableHatsIdUtilities.sol +FN:7,LinkableHatsIdUtilities.linkTree +FNDA:2,LinkableHatsIdUtilities.linkTree +DA:8,2 +FNF:1 +FNH:1 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record diff --git a/script/Hats.s.sol b/script/Hats.s.sol index 457f8e1..c19560c 100644 --- a/script/Hats.s.sol +++ b/script/Hats.s.sol @@ -1,56 +1,62 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13; -import "forge-std/Script.sol"; -import "../src/Hats.sol"; +import { Script, console2 } from "forge-std/Script.sol"; +import { Hats } from "../src/Hats.sol"; contract DeployHats is Script { - string public imageURI = ""; - string public name = "Hats Protocol - Beta 4"; // increment this each beta deployment + string public constant baseImageURI = "ipfs://bafybeigcimbqwfajsnhoq7fqnbdllz7kye7cpdy3adj2sob3wku2llu5bi"; + + string public constant name = "Hats Protocol v1-beta1"; // increment this each deployment + + bytes32 internal constant SALT = bytes32(abi.encode(0x4a75)); // ~ H(4) A(a) T(7) S(5) function run() external { uint256 privKey = vm.envUint("PRIVATE_KEY"); address deployer = vm.rememberKey(privKey); + console2.log(vm.getNonce(deployer)); + vm.startBroadcast(deployer); - Hats hats = new Hats(name, imageURI); + Hats hats = new Hats{ salt: SALT }(name, baseImageURI); vm.stopBroadcast(); + + console2.log("Salt: ", vm.toString(SALT)); + console2.log("Hats contract: ", address(hats)); } // forge script script/Hats.s.sol:DeployHats -f goerli - // forge script script/Hats.s.sol:DeployHats -f polygon --broadcast --verify + // forge script script/Hats.s.sol:DeployHats -f goerli --broadcast --verify // forge script script/Hats.s.sol:DeployHats --rpc-url http://localhost:8545 --broadcast - // forge verify-contract --chain-id 5 --num-of-optimizations 1000000 --watch --constructor-args $(cast abi-encode "constructor(string,string)" "Hats Protocol - beta XYZ" "") --compiler-version v0.8.16 src/Hats.sol:Hats $ETHERSCAN_API + // forge verify-contract --chain-id 5 --num-of-optimizations 10000 --watch --constructor-args $(cast abi-encode "constructor(string,string)" "Hats Protocol v1-beta1" "ipfs://bafybeigcimbqwfajsnhoq7fqnbdllz7kye7cpdy3adj2sob3wku2llu5bi") --compiler-version v0.8.17 0x96bD657Fcc04c71B47f896a829E5728415cbcAa1 src/Hats.sol:Hats $ETHERSCAN_KEY } contract DeployHatsAndMintTopHat is Script { string public imageURI = ""; string public name = "Hats Protocol - Test XYZ"; + bytes32 internal constant SALT = bytes32(abi.encode(0x4a15)); // ~ hats function run() external { uint256 privKey = vm.envUint("PRIVATE_KEY"); - // uint256 privKey = uint256( - // 0x0 - // ); address deployer = vm.rememberKey(privKey); vm.startBroadcast(deployer); - Hats hats = new Hats(name, imageURI); + Hats hats = new Hats{ salt: SALT }(name, imageURI); string memory image = ""; string memory details = ""; uint256 tophat = hats.mintTopHat(deployer, details, image); + vm.stopBroadcast(); + console2.log("hats: ", address(hats)); console2.log("tophat: ", tophat); - - vm.stopBroadcast(); } // forge script script/Hats.s.sol:DeployHatsAndMintTopHat -f goerli diff --git a/src/Hats.sol b/src/Hats.sol index 9fc7c0e..7f00c52 100644 --- a/src/Hats.sol +++ b/src/Hats.sol @@ -1,4 +1,5 @@ -// Copyright (C) 2022 Hats Protocol +// SPDX-License-Identifier: AGPL-3.0 +// Copyright (C) 2023 Haberdasher Labs // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -15,65 +16,82 @@ pragma solidity >=0.8.13; -import {ERC1155} from "ERC1155/ERC1155.sol"; +import { ERC1155 } from "lib/ERC1155/ERC1155.sol"; // import "forge-std/Test.sol"; //remove after testing import "./Interfaces/IHats.sol"; import "./HatsIdUtilities.sol"; -import "./HatsToggle/IHatsToggle.sol"; -import "./HatsEligibility/IHatsEligibility.sol"; +import "./Interfaces/IHatsToggle.sol"; +import "./Interfaces/IHatsEligibility.sol"; import "solbase/utils/Base64.sol"; import "solbase/utils/LibString.sol"; /// @title Hats Protocol -/// @notice Hats are DAO-native revocable roles that are represented as semi-fungable tokens for composability -/// @dev This is a multitenant contract that can manage all Hats for a given chain -/// @author Hats Protocol +/// @notice Hats are DAO-native, revocable, and programmable roles that are represented as non-transferable ERC-1155 tokens for composability +/// @dev This is a multitenant contract that can manage all hats for a given chain +/// @author Haberdasher Labs contract Hats is IHats, ERC1155, HatsIdUtilities { /*////////////////////////////////////////////////////////////// HATS DATA MODELS //////////////////////////////////////////////////////////////*/ + /// @notice A Hat object containing the hat's properties + /// @dev The members are packed to minimize storage costs + /// @custom:member eligibility Module that rules on wearer eligibiliy and standing + /// @custom:member maxSupply The max number of hats with this id that can exist + /// @custom:member supply The number of this hat that currently exist + /// @custom:member lastHatId Indexes how many different child hats an admin has + /// @custom:member toggle Module that sets the hat's status + /** + * @custom:member config Holds status and other settings, with this bitwise schema: + * + * 0th bit | `active` status; can be altered by toggle + * 1 | `mutable` setting + * 2 - 95 | unassigned + */ + /// @custom:member details Holds arbitrary metadata about the hat + /// @custom:member imageURI A uri pointing to an image for the hat struct Hat { // 1st storage slot - address eligibility; // ─┐ can revoke Hat based on ruling | 20 - uint32 maxSupply; // │ the max number of identical hats that can exist | 4 - uint8 lastHatId; // ─┘ indexes how many different hats an admin is holding | 1 + address eligibility; // ─┐ 20 + uint32 maxSupply; // │ 4 + uint32 supply; // │ 4 + uint16 lastHatId; // ─┘ 2 // 2nd slot - address toggle; // ─┐ controls when Hat is active | 20 - uint96 config; // ─┘ active status & other settings (see schema below) | 12 + address toggle; // ─┐ 20 + uint96 config; // ─┘ 12 // 3rd+ slot (optional) string details; string imageURI; } - /* Hat.config schema (by bit) - * 0th bit | `active` status; can be altered by toggle, via setHatStatus() - * 1 | `mutable` option - * 2 - 95 | unassigned - */ - /*////////////////////////////////////////////////////////////// HATS STORAGE //////////////////////////////////////////////////////////////*/ + /// @notice The name of the contract, typically including the version string public name; - uint32 public lastTopHatId; // initialized at 0 + /// @notice The first 4 bytes of the id of the last tophat created. + uint32 public lastTopHatId; // first tophat id starts at 1 + /// @notice The fallback image URI for hat tokens with no `imageURI` specified in their branch string public baseImageURI; - // see HatsIdUtilities.sol for more info on how Hat Ids work + /// @dev Internal mapping of hats to hat ids. See HatsIdUtilities.sol for more info on how hat ids work mapping(uint256 => Hat) internal _hats; // key: hatId => value: Hat struct - mapping(uint256 => uint32) public hatSupply; // key: hatId => value: supply - - // for external contracts to check if Hat was revoked because the wearer is in bad standing - mapping(uint256 => mapping(address => bool)) public badStandings; // key: hatId => value: (key: wearer => value: badStanding?) + /// @notice Mapping of wearers in bad standing for certain hats + /// @dev Used by external contracts to trigger penalties for wearers in bad standing + /// hatId => wearer => !standing + mapping(uint256 => mapping(address => bool)) public badStandings; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ + /// @notice All arguments are immutable; they can only be set once during construction + /// @param _name The name of this contract, typically including the version + /// @param _baseImageURI The fallback image URI constructor(string memory _name, string memory _baseImageURI) { name = _name; baseImageURI = _baseImageURI; @@ -86,14 +104,14 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @notice Creates and mints a Hat that is its own admin, i.e. a "topHat" /// @dev A topHat has no eligibility and no toggle /// @param _target The address to which the newly created topHat is minted + /// @param _details A description of the Hat [optional] /// @param _imageURI The image uri for this top hat and the fallback for its /// downstream hats [optional] /// @return topHatId The id of the newly created topHat - function mintTopHat( - address _target, - string memory _details, - string memory _imageURI - ) public returns (uint256 topHatId) { + function mintTopHat(address _target, string memory _details, string memory _imageURI) + public + returns (uint256 topHatId) + { // create hat topHatId = uint256(++lastTopHatId) << 224; @@ -108,43 +126,9 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { _imageURI ); - _mint(_target, topHatId, 1, ""); + _mintHat(_target, topHatId); } - // /// @notice Mints a topHat to the msg.sender and creates another Hat admin'd by the topHat - // /// @param _details A description of the hat - // /// @param _maxSupply The total instances of the Hat that can be worn at once - // /// @param _eligibility The address that can report on the Hat wearer's standing - // /// @param _toggle The address that can deactivate the hat [optional] - // /// @param _mutable Whether the hat's properties are changeable after creation - // /// @param _topHatImageURI The image uri for this top hat and the fallback for its - // /// downstream hats [optional] - // /// @param _firstHatImageURI The image uri for the first hat and the fallback for its - // /// downstream hats [optional] - // /// @return topHatId The id of the newly created topHat - // /// @return firstHatId The id of the other newly created hat - // function createTopHatAndHat( - // string memory _details, // encode as bytes32 ?? - // uint32 _maxSupply, - // address _eligibility, - // address _toggle, - // bool _mutable, - // string memory _topHatImageURI, - // string memory _firstHatImageURI - // ) public returns (uint256 topHatId, uint256 firstHatId) { - // topHatId = mintTopHat(msg.sender, _topHatImageURI); - - // firstHatId = createHat( - // topHatId, - // _details, - // _maxSupply, - // _eligibility, - // _toggle, - // _mutable, - // _firstHatImageURI - // ); - // } - /// @notice Creates a new hat. The msg.sender must wear the `_admin` hat. /// @dev Initializes a new Hat struct, but does not mint any tokens. /// @param _details A description of the Hat @@ -158,7 +142,7 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @return newHatId The id of the newly created Hat function createHat( uint256 _admin, - string memory _details, // encode as bytes32 ?? + string memory _details, uint32 _maxSupply, address _eligibility, address _toggle, @@ -175,17 +159,10 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { _checkAdmin(newHatId); // create the new hat - _createHat( - newHatId, - _details, - _maxSupply, - _eligibility, - _toggle, - _mutable, - _imageURI - ); + _createHat(newHatId, _details, _maxSupply, _eligibility, _toggle, _mutable, _imageURI); // increment _admin.lastHatId + // use the overflow check to constrain to correct number of hats per level ++_hats[_admin].lastHatId; } @@ -197,6 +174,7 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @param _eligibilityModules Array of eligibility module addresses for each hat to /// create /// @param _toggleModules Array of toggle module addresses for each hat to create + /// @param _mutables Array of mutable flags for each hat to create /// @param _imageURIs Array of imageURIs for each hat to create /// @return bool True if all createHat calls succeeded function batchCreateHats( @@ -211,17 +189,19 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { // check if array lengths are the same uint256 length = _admins.length; // save an MLOAD - bool sameLengths = (length == _details.length && - length == _maxSupplies.length && - length == _eligibilityModules.length && - length == _toggleModules.length && - length == _mutables.length && - length == _imageURIs.length); + bool sameLengths = ( + length == _details.length // details + && length == _maxSupplies.length // supplies + && length == _eligibilityModules.length // eligibility + && length == _toggleModules.length // toggle + && length == _mutables.length // mutable + && length == _imageURIs.length + ); // imageURI if (!sameLengths) revert BatchArrayLengthMismatch(); // loop through and create each hat - for (uint256 i = 0; i < length; ++i) { + for (uint256 i = 0; i < length;) { createHat( _admins[i], _details[i], @@ -231,13 +211,21 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { _mutables[i], _imageURIs[i] ); + + unchecked { + ++i; + } } return true; } + /// @notice Gets the id of the next child hat of the hat `_admin` + /// @dev Does not incrememnt lastHatId + /// @param _admin The id of the hat to serve as the admin for the next child hat + /// @return The new hat id function getNextId(uint256 _admin) public view returns (uint256) { - uint8 nextHatId = _hats[_admin].lastHatId + 1; + uint16 nextHatId = _hats[_admin].lastHatId + 1; return buildHatId(_admin, nextHatId); } @@ -253,7 +241,7 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { // only the wearer of a hat's admin Hat can mint it _checkAdmin(_hatId); - if (hatSupply[_hatId] >= hat.maxSupply) { + if (hat.supply >= hat.maxSupply) { revert AllHatsWorn(_hatId); } @@ -261,20 +249,25 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { revert AlreadyWearingHat(_wearer, _hatId); } - _mint(_wearer, uint256(_hatId), 1, ""); + _mintHat(_wearer, _hatId); return true; } - function batchMintHats(uint256[] memory _hatIds, address[] memory _wearers) - public - returns (bool) - { + /// @notice Mints new hats in batch. The msg.sender must be an admin of each hat. + /// @dev This is a convenience function that loops through the arrays and calls `mintHat`. + /// @param _hatIds Array of ids of hats to mint + /// @param _wearers Array of addresses to which the hats will be minted + /// @return bool True if all mintHat calls succeeded + function batchMintHats(uint256[] memory _hatIds, address[] memory _wearers) public returns (bool) { uint256 length = _hatIds.length; if (length != _wearers.length) revert BatchArrayLengthMismatch(); - for (uint256 i = 0; i < length; ++i) { + for (uint256 i = 0; i < length;) { mintHat(_hatIds[i], _wearers[i]); + unchecked { + ++i; + } } return true; @@ -283,32 +276,27 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @notice Toggles a Hat's status from active to deactive, or vice versa /// @dev The msg.sender must be set as the hat's toggle /// @param _hatId The id of the Hat for which to adjust status + /// @param _newStatus The new status to set /// @return bool Whether the status was toggled - function setHatStatus(uint256 _hatId, bool newStatus) - external - returns (bool) - { + function setHatStatus(uint256 _hatId, bool _newStatus) external returns (bool) { Hat storage hat = _hats[_hatId]; if (msg.sender != hat.toggle) { revert NotHatsToggle(); } - return _processHatStatus(_hatId, newStatus); + return _processHatStatus(_hatId, _newStatus); } - /// @notice Checks a hat's toggle and, if new, toggle's the hat's status - /// @dev // TODO + /// @notice Checks a hat's toggle module and processes the returned status + /// @dev May change the hat's status in storage /// @param _hatId The id of the Hat whose toggle we are checking /// @return bool Whether there was a new status function checkHatStatus(uint256 _hatId) external returns (bool) { Hat memory hat = _hats[_hatId]; bool newStatus; - bytes memory data = abi.encodeWithSignature( - "getHatStatus(uint256)", - _hatId - ); + bytes memory data = abi.encodeWithSignature("getHatStatus(uint256)", _hatId); (bool success, bytes memory returndata) = hat.toggle.staticcall(data); @@ -331,12 +319,10 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// false) /// @param _standing False if the wearer is no longer in good standing (and potentially should be penalized) /// @return bool Whether the report succeeded - function setHatWearerStatus( - uint256 _hatId, - address _wearer, - bool _eligible, - bool _standing - ) external returns (bool) { + function setHatWearerStatus(uint256 _hatId, address _wearer, bool _eligible, bool _standing) + external + returns (bool) + { Hat memory hat = _hats[_hatId]; if (msg.sender != hat.eligibility) { @@ -352,23 +338,14 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @dev Burns the wearer's hat, if revoked /// @param _hatId The id of the hat /// @param _wearer The address of the Hat wearer whose status report is being requested - function checkHatWearerStatus(uint256 _hatId, address _wearer) - public - returns (bool) - { + function checkHatWearerStatus(uint256 _hatId, address _wearer) public returns (bool) { Hat memory hat = _hats[_hatId]; bool eligible; bool standing; - bytes memory data = abi.encodeWithSignature( - "getWearerStatus(address,uint256)", - _wearer, - _hatId - ); + bytes memory data = abi.encodeWithSignature("getWearerStatus(address,uint256)", _wearer, _hatId); - (bool success, bytes memory returndata) = hat.eligibility.staticcall( - data - ); + (bool success, bytes memory returndata) = hat.eligibility.staticcall(data); // if function call succeeds with data of length > 0 // then we know the contract exists and has the getWearerStatus function @@ -389,9 +366,7 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { revert NotHatWearer(); } // remove the hat - _burn(msg.sender, _hatId, 1); - - // emit HatRenounced(_hatId, msg.sender); + _burnHat(msg.sender, _hatId); } /*////////////////////////////////////////////////////////////// @@ -411,7 +386,7 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @return hat The contents of the newly created hat function _createHat( uint256 _id, - string memory _details, // encode as bytes32 ?? + string memory _details, uint32 _maxSupply, address _eligibility, address _toggle, @@ -426,22 +401,15 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { hat.config = _mutable ? uint96(3 << 94) : uint96(1 << 95); _hats[_id] = hat; - emit HatCreated( - _id, - _details, - _maxSupply, - _eligibility, - _toggle, - _mutable, - _imageURI - ); + emit HatCreated(_id, _details, _maxSupply, _eligibility, _toggle, _mutable, _imageURI); } - // TODO write comment - function _processHatStatus(uint256 _hatId, bool _newStatus) - internal - returns (bool updated) - { + /// @notice Internal function to process hat status + /// @dev Updates a hat's status if different from current + /// @param _hatId The id of the Hat in quest + /// @param _newStatus The status to potentially change to + /// @return updated - Whether the status was updated + function _processHatStatus(uint256 _hatId, bool _newStatus) internal returns (bool updated) { // optimize later Hat storage hat = _hats[_hatId]; @@ -460,16 +428,17 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @param _eligible Whether _wearer is eligible for the Hat (if false, this function /// will revoke their Hat) /// @param _standing Whether _wearer is in good standing (to be recorded in storage) - function _processHatWearerStatus( - uint256 _hatId, - address _wearer, - bool _eligible, - bool _standing - ) internal returns (bool updated) { - // always ineligible if in bad standing - if (!_eligible || !_standing) { - // revoke the Hat by burning it - _burn(_wearer, _hatId, 1); + /// @return updated Whether the wearer standing was updated + function _processHatWearerStatus(uint256 _hatId, address _wearer, bool _eligible, bool _standing) + internal + returns (bool updated) + { + // revoke/burn the hat if _wearer has a positive balance + if (_balanceOf[_wearer][_hatId] > 0) { + // always ineligible if in bad standing + if (!_eligible || !_standing) { + _burnHat(_wearer, _hatId); + } } // record standing for use by other contracts @@ -481,38 +450,74 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { if (_standing == badStandings[_hatId][_wearer]) { badStandings[_hatId][_wearer] = !_standing; updated = true; + + emit WearerStandingChanged(_hatId, _wearer, _standing); + } + } + + /// @notice Internal function to set a hat's status in storage + /// @dev Flips the 0th bit of _hat.config via bitwise operation + /// @param _hat The hat object + /// @param _status The status to set for the hat + function _setHatStatus(Hat storage _hat, bool _status) internal { + if (_status) { + _hat.config |= uint96(1 << 95); + } else { + _hat.config &= ~uint96(1 << 95); + } + } + + /*////////////////////////////////////////////////////////////// + HATS ADMIN FUNCTIONS + //////////////////////////////////////////////////////////////*/ + + /// @notice Checks whether msg.sender is an admin of a hat, and reverts if not + function _checkAdmin(uint256 _hatId) internal view { + if (!isAdminOfHat(msg.sender, _hatId)) { + revert NotAdmin(msg.sender, _hatId); } + } - // emit WearerStatus(_hatId, _wearer, _eligible, _standing); + /// @notice checks whether the msg.sender is either an admin or wearer or a hat, and reverts the appropriate error if not + function _checkAdminOrWearer(uint256 _hatId) internal view { + if (!isAdminOfHat(msg.sender, _hatId) && !isWearerOfHat(msg.sender, _hatId)) { + revert NotAdminOrWearer(); + } } - function transferHat( - uint256 _hatId, - address _from, - address _to - ) public { + /// @notice Transfers a hat from one wearer to another + /// @dev The hat must be mutable, and the transfer must be initiated by an admin + /// @param _hatId The hat in question + /// @param _from The current wearer + /// @param _to The new wearer + function transferHat(uint256 _hatId, address _from, address _to) public { _checkAdmin(_hatId); + // cannot transfer immutable hats, except for tophats, which can always transfer themselves + if (!isTopHat(_hatId)) { + if (!_isMutable(_hats[_hatId])) revert Immutable(); + } + // Checks storage instead of `isWearerOfHat` since admins may want to transfer revoked Hats to new wearers if (_balanceOf[_from][_hatId] < 1) { revert NotHatWearer(); } - //Adjust balances - --_balanceOf[_from][_hatId]; - ++_balanceOf[_to][_hatId]; - - emit TransferSingle(msg.sender, _from, _to, _hatId, 1); - } + // Check if recipient is already wearing hat; also checks storage to maintain balance == 1 invariant + if (_balanceOf[_to][_hatId] > 0) { + revert AlreadyWearingHat(_to, _hatId); + } - /*////////////////////////////////////////////////////////////// - HATS ADMIN FUNCTIONS - //////////////////////////////////////////////////////////////*/ + //Adjust balances - function _checkAdmin(uint256 _hatId) internal { - if (!isAdminOfHat(msg.sender, _hatId)) { - revert NotAdmin(msg.sender, _hatId); + unchecked { + // should not underflow given NotHatWearer check above + --_balanceOf[_from][_hatId]; + // should not overflow given AlreadyWearingHat check above + ++_balanceOf[_to][_hatId]; } + + emit TransferSingle(msg.sender, _from, _to, _hatId, 1); } /// @notice Set a mutable hat to immutable @@ -533,17 +538,16 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { } /// @notice Change a hat's details - /// @dev Hat must be mutable + /// @dev Hat must be mutable, except for tophats /// @param _hatId The id of the Hat to change /// @param _newDetails The new details - function changeHatDetails(uint256 _hatId, string memory _newDetails) - external - { + function changeHatDetails(uint256 _hatId, string memory _newDetails) external { _checkAdmin(_hatId); Hat storage hat = _hats[_hatId]; - if (!_isMutable(hat)) { - revert Immutable(); + // a tophat can change its own details, but otherwise only mutable hat details can be changed + if (!isTopHat(_hatId)) { + if (!_isMutable(hat)) revert Immutable(); } hat.details = _newDetails; @@ -555,9 +559,7 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @dev Hat must be mutable /// @param _hatId The id of the Hat to change /// @param _newEligibility The new eligibility module - function changeHatEligibility(uint256 _hatId, address _newEligibility) - external - { + function changeHatEligibility(uint256 _hatId, address _newEligibility) external { _checkAdmin(_hatId); Hat storage hat = _hats[_hatId]; @@ -588,17 +590,16 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { } /// @notice Change a hat's details - /// @dev Hat must be mutable + /// @dev Hat must be mutable, except for tophats /// @param _hatId The id of the Hat to change /// @param _newImageURI The new imageURI - function changeHatImageURI(uint256 _hatId, string memory _newImageURI) - external - { + function changeHatImageURI(uint256 _hatId, string memory _newImageURI) external { _checkAdmin(_hatId); Hat storage hat = _hats[_hatId]; - if (!_isMutable(hat)) { - revert Immutable(); + // a tophat can change its own imageURI, but otherwise only mutable hat imageURIs can be changed + if (!isTopHat(_hatId)) { + if (!_isMutable(hat)) revert Immutable(); } hat.imageURI = _newImageURI; @@ -618,7 +619,7 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { revert Immutable(); } - if (_newMaxSupply < hatSupply[_hatId]) { + if (_newMaxSupply < hat.supply) { revert NewMaxSupplyTooLow(); } @@ -627,6 +628,103 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { emit HatMaxSupplyChanged(_hatId, _newMaxSupply); } + /// @notice Submits a request to link a Hat Tree under a parent tree. Requests can be + /// submitted by either... + /// a) the wearer of a tophat, previous to any linkage, or + /// b) the admin(s) of an already-linked tophat (aka tree root), where such a + /// request is to move the tree root to another admin within the same parent + /// tree + /// @dev A tophat can have at most 1 request at a time. Submitting a new request will + /// replace the existing request. + /// @param _topHatDomain The domain of the tophat to link + /// @param _requestedAdminHat The hat that will administer the linked tree + function requestLinkTopHatToTree(uint32 _topHatDomain, uint256 _requestedAdminHat) external { + uint256 fullTopHatId = uint256(_topHatDomain) << 224; // (256 - TOPHAT_ADDRESS_SPACE); + + // The wearer of an unlinked tophat is also the admin of same; once a tophat is linked, its wearer is no longer its admin + _checkAdmin(fullTopHatId); + + linkedTreeRequests[_topHatDomain] = _requestedAdminHat; + emit TopHatLinkRequested(_topHatDomain, _requestedAdminHat); + } + + /// @notice Approve a request to link a Tree under a parent tree + /// @dev Requests can only be approved by an admin of the `_newAdminHat`, and there + /// can only be one link per tree root at a given time. + /// @param _topHatDomain The 32 bit domain of the tophat to link + /// @param _newAdminHat The hat that will administer the linked tree + function approveLinkTopHatToTree(uint32 _topHatDomain, uint256 _newAdminHat) external { + // for everything but the last hat level, check the admin of `_newAdminHat`'s theoretical child hat, since either wearer or admin of `_newAdminHat` can approve + if (getHatLevel(_newAdminHat) < MAX_LEVELS) { + _checkAdmin(buildHatId(_newAdminHat, 1)); + } else { + // the above buildHatId trick doesn't work for the last hat level, so we need to explicitly check both admin and wearer in this case + _checkAdminOrWearer(_newAdminHat); + } + + // Linkages must be initiated by a request + if (_newAdminHat != linkedTreeRequests[_topHatDomain]) revert LinkageNotRequested(); + + // remove the request -- ensures all linkages are initialized by unique requests, + // except for relinks (see `relinkTopHatWithinTree`) + delete linkedTreeRequests[_topHatDomain]; + + // execute the link. Replaces existing link, if any. + _linkTopHatToTree(_topHatDomain, _newAdminHat); + } + + /// @notice Unlink a Tree from the parent tree + /// @dev This can only be called by an admin of the tree root + /// @param _topHatDomain The 32 bit domain of the tophat to unlink + function unlinkTopHatFromTree(uint32 _topHatDomain) external { + uint256 fullTopHatId = uint256(_topHatDomain) << 224; // (256 - TOPHAT_ADDRESS_SPACE); + _checkAdmin(fullTopHatId); + + delete linkedTreeAdmins[_topHatDomain]; + emit TopHatLinked(_topHatDomain, 0); + } + + /// @notice Move a tree root to a different position within the same parent tree, + /// without a request + /// @dev Caller must be both an admin tree root and admin or wearer of `_newAdminHat` + /// @param _topHatDomain The 32 bit domain of the tophat to relink + /// @param _newAdminHat The new admin for the linked tree + function relinkTopHatWithinTree(uint32 _topHatDomain, uint256 _newAdminHat) external { + uint256 fullTopHatId = uint256(_topHatDomain) << 224; // (256 - TOPHAT_ADDRESS_SPACE); + + // msg.sender being capable of both requesting and approving allows us to skip the request step + _checkAdmin(fullTopHatId); // "requester" must be admin + + // "approver" can be wearer or admin + if (getHatLevel(_newAdminHat) < MAX_LEVELS) { + _checkAdmin(buildHatId(_newAdminHat, 1)); + } else { + // the above buildHatId trick doesn't work for the last hat level, so we need to explicitly check both admin and wearer in this case + _checkAdminOrWearer(_newAdminHat); + } + + // execute the new link, replacing the old link + _linkTopHatToTree(_topHatDomain, _newAdminHat); + } + + /// @notice Internal function to link a Tree under a parent Tree, with protection against circular linkages and relinking to a separate Tree + /// @dev Linking `_topHatDomain` replaces any existing links + /// @param _topHatDomain The 32 bit domain of the tophat to link + /// @param _newAdminHat The new admin for the linked tree + function _linkTopHatToTree(uint32 _topHatDomain, uint256 _newAdminHat) internal { + if (!noCircularLinkage(_topHatDomain, _newAdminHat)) revert CircularLinkage(); + + // disallow relinking to separate tree + if (linkedTreeAdmins[_topHatDomain] > 0) { + if (!sameTippyTophatDomain(_topHatDomain, _newAdminHat)) { + revert CrossTreeLinkage(); + } + } + + linkedTreeAdmins[_topHatDomain] = _newAdminHat; + emit TopHatLinked(_topHatDomain, _newAdminHat); + } + /*////////////////////////////////////////////////////////////// HATS VIEW FUNCTIONS //////////////////////////////////////////////////////////////*/ @@ -652,7 +750,7 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { address eligibility, address toggle, string memory imageURI, - uint8 lastHatId, + uint16 lastHatId, bool mutable_, bool active ) @@ -660,7 +758,7 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { Hat memory hat = _hats[_hatId]; details = hat.details; maxSupply = hat.maxSupply; - supply = hatSupply[_hatId]; + supply = hat.supply; eligibility = hat.eligibility; toggle = hat.toggle; imageURI = getImageURIForHat(_hatId); @@ -674,12 +772,8 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @param _user The address in question /// @param _hatId The id of the Hat that the `_user` might wear /// @return bool Whether the `_user` wears the Hat. - function isWearerOfHat(address _user, uint256 _hatId) - public - view - returns (bool) - { - return (balanceOf(_user, _hatId) >= 1); + function isWearerOfHat(address _user, uint256 _hatId) public view returns (bool) { + return (balanceOf(_user, _hatId) > 0); } /// @notice Checks whether a given address serves as the admin of a given Hat @@ -687,11 +781,7 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @param _user The address in question /// @param _hatId The id of the Hat for which the `_user` might be the admin /// @return bool Whether the `_user` has admin rights for the Hat - function isAdminOfHat(address _user, uint256 _hatId) - public - view - returns (bool) - { + function isAdminOfHat(address _user, uint256 _hatId) public view returns (bool) { if (isTopHat(_hatId)) { return (isWearerOfHat(_user, _hatId)); } @@ -702,8 +792,10 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { if (isWearerOfHat(_user, getAdminAtLevel(_hatId, adminHatLevel))) { return true; } - - adminHatLevel--; + // should not underflow given stopping condition > 0 + unchecked { + --adminHatLevel; + } } return isWearerOfHat(_user, getAdminAtLevel(_hatId, 0)); @@ -714,15 +806,8 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @param _hat The Hat struct /// @param _hatId The id of the hat /// @return active The active status of the hat - function _isActive(Hat memory _hat, uint256 _hatId) - internal - view - returns (bool) - { - bytes memory data = abi.encodeWithSignature( - "getHatStatus(uint256)", - _hatId - ); + function _isActive(Hat memory _hat, uint256 _hatId) internal view returns (bool) { + bytes memory data = abi.encodeWithSignature("getHatStatus(uint256)", _hatId); (bool success, bytes memory returndata) = _hat.toggle.staticcall(data); @@ -733,53 +818,31 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { } } - // /// @notice Checks the active status of a hat - // /// @dev Use `_isActive` for internal calls that can take a Hat as a param - // /// @param _hatId The id of the hat - // /// @return bool The active status of the hat - // function isActive(uint256 _hatId) public view returns (bool) { - // return _isActive(_hats[_hatId], _hatId); - // } - - function _getHatStatus(Hat memory _hat) internal view returns (bool) { + /// @notice Internal function to retrieve a hat's status from storage + /// @dev reads the 0th bit of the hat's config + /// @param _hat The hat object + /// @return Whether the hat is active + function _getHatStatus(Hat memory _hat) internal pure returns (bool) { return (_hat.config >> 95 != 0); } - function _setHatStatus(Hat storage _hat, bool _status) internal { - if (_status) { - _hat.config |= uint96(1 << 95); - } else { - _hat.config &= ~uint96(1 << 95); - } - } - - function _isMutable(Hat memory _hat) internal view returns (bool) { + /// @notice Internal function to retrieve a hat's mutability setting + /// @dev reads the 1st bit of the hat's config + /// @param _hat The hat object + /// @return Whether the hat is mutable + function _isMutable(Hat memory _hat) internal pure returns (bool) { return (_hat.config & uint96(1 << 94) != 0); } - // function isMutable(uint256 _hatId) public view returns (bool) { - // return _isMutable(_hats[_hatId]); - // } - /// @notice Checks whether a wearer of a Hat is in good standing /// @dev Public function for use when pa ssing a Hat object is not possible or preferable /// @param _wearer The address of the Hat wearer /// @param _hatId The id of the Hat /// @return standing Whether the wearer is in good standing - function isInGoodStanding(address _wearer, uint256 _hatId) - public - view - returns (bool standing) - { - (bool success, bytes memory returndata) = _hats[_hatId] - .eligibility - .staticcall( - abi.encodeWithSignature( - "getWearerStatus(address,uint256)", - _wearer, - _hatId - ) - ); + function isInGoodStanding(address _wearer, uint256 _hatId) public view returns (bool standing) { + (bool success, bytes memory returndata) = _hats[_hatId].eligibility.staticcall( + abi.encodeWithSignature("getWearerStatus(address,uint256)", _wearer, _hatId) + ); if (success && returndata.length > 0) { (, standing) = abi.decode(returndata, (bool, bool)); @@ -794,18 +857,9 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @param _hat The Hat object /// @param _hatId The id of the Hat /// @return eligible Whether the wearer is eligible for the Hat - function _isEligible( - address _wearer, - Hat memory _hat, - uint256 _hatId - ) internal view returns (bool eligible) { - (bool success, bytes memory returndata) = _hat.eligibility.staticcall( - abi.encodeWithSignature( - "getWearerStatus(address,uint256)", - _wearer, - _hatId - ) - ); + function _isEligible(address _wearer, Hat memory _hat, uint256 _hatId) internal view returns (bool eligible) { + (bool success, bytes memory returndata) = + _hat.eligibility.staticcall(abi.encodeWithSignature("getWearerStatus(address,uint256)", _wearer, _hatId)); if (success && returndata.length > 0) { bool standing; @@ -822,25 +876,25 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { /// @param _hatId The id of the Hat /// @param _wearer The address to check /// @return bool - function isEligible(address _wearer, uint256 _hatId) - public - view - returns (bool) - { + function isEligible(address _wearer, uint256 _hatId) public view returns (bool) { // Hat memory hat = _hats[_hatId]; return _isEligible(_wearer, _hats[_hatId], _hatId); } + /// @notice Gets the current supply of a Hat + /// @dev Only tracks explicit burns and mints, not dynamic revocations + /// @param _hatId The id of the Hat + /// @return supply The current supply of the Hat + function hatSupply(uint256 _hatId) external view returns (uint32 supply) { + supply = _hats[_hatId].supply; + } + /// @notice Gets the imageURI for a given hat /// @dev If this hat does not have an imageURI set, recursively get the imageURI from /// its admin /// @param _hatId The hat whose imageURI we're looking for /// @return imageURI The imageURI of this hat or, if empty, its admin - function getImageURIForHat(uint256 _hatId) - public - view - returns (string memory) - { + function getImageURIForHat(uint256 _hatId) public view returns (string memory) { // check _hatId first to potentially avoid the `getHatLevel` call Hat memory hat = _hats[_hatId]; @@ -849,11 +903,6 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { // if _hatId has an imageURI, we return it if (bytes(imageURI).length > 0) { return imageURI; - - /// TODO bring back the following in a way that actually works - // since there's only one hat with this imageURI at this level, by convention - // we refer to it with `id = 0` - // return string.concat(imageURI, "0"); } // otherwise, we check its branch of admins @@ -866,36 +915,28 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { uint256 id; // already checked at `level` above, so we start the loop at `level - 1` - for (uint256 i = level - 1; i > 0; --i) { + for (uint256 i = level - 1; i > 0;) { id = getAdminAtLevel(_hatId, uint8(i)); hat = _hats[id]; imageURI = hat.imageURI; if (bytes(imageURI).length > 0) { return imageURI; - - /// TODO bring back the following in a way that actually works - // since there are multiple hats with this imageURI at _hatId's level, - // we need to use _hatId to disambiguate - // return string.concat(imageURI, LibString.toString(_hatId)); + } + // should not underflow given stopping condition is > 0 + unchecked { + --i; } } // if none of _hatId's admins has an imageURI of its own, we again fall back to the global image uri return baseImageURI; - - /// TODO bring back the following in a way that actually works - // return string.concat(baseImageURI, LibString.toString(_hatId)); } /// @notice Constructs the URI for a Hat, using data from the Hat struct /// @param _hatId The id of the Hat /// @return An ERC1155-compatible JSON string - function _constructURI(uint256 _hatId) - internal - view - returns (string memory) - { + function _constructURI(uint256 _hatId) internal view returns (string memory) { Hat memory hat = _hats[_hatId]; uint256 hatAdmin; @@ -921,7 +962,7 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { '"status": "', (_isActive(hat, _hatId) ? "active" : "inactive"), '", "current supply": "', - LibString.toString(hatSupply[_hatId]), + LibString.toString(hat.supply), '", "supply cap": "', LibString.toString(hat.maxSupply), '", "admin (id)": "', @@ -937,31 +978,30 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { '"' ); - return - string( - abi.encodePacked( - "data:application/json;base64,", - Base64.encode( - bytes( - string.concat( - '{"name": "', - "Hat", - '", "description": "', - hat.details, - '", "image": "', - getImageURIForHat(_hatId), - '",', - '"properties": ', - "{", - idProperties, - otherProperties, - "}", - "}" - ) + return string( + abi.encodePacked( + "data:application/json;base64,", + Base64.encode( + bytes( + string.concat( + '{"name": "', + "Hat", + '", "description": "', + hat.details, + '", "image": "', + getImageURIForHat(_hatId), + '",', + '"properties": ', + "{", + idProperties, + otherProperties, + "}", + "}" ) ) ) - ); + ) + ); } /*////////////////////////////////////////////////////////////// @@ -969,103 +1009,83 @@ contract Hats is IHats, ERC1155, HatsIdUtilities { //////////////////////////////////////////////////////////////*/ /// @notice Gets the Hat token balance of a user for a given Hat - /// @param wearer The address whose balance is being checked - /// @param hatId The id of the Hat - /// @return balance The `_user`'s balance of the Hat tokens. Will typically not be greater than 1. - function balanceOf(address wearer, uint256 hatId) + /// @dev Balance is dynamic based on the hat's status and wearer's eligibility, so off-chain balance data indexed from events may not be in sync + /// @param _wearer The address whose balance is being checked + /// @param _hatId The id of the Hat + /// @return balance The `wearer`'s balance of the Hat tokens. Can never be > 1. + function balanceOf(address _wearer, uint256 _hatId) public view override(ERC1155, IHats) returns (uint256 balance) { - Hat memory hat = _hats[hatId]; + Hat memory hat = _hats[_hatId]; balance = 0; - if (_isActive(hat, hatId) && _isEligible(wearer, hat, hatId)) { - balance = super.balanceOf(wearer, hatId); + if (_isActive(hat, _hatId) && _isEligible(_wearer, hat, _hatId)) { + balance = super.balanceOf(_wearer, _hatId); } } - /// @notice Mints a Hat token to `to` - /// @dev Overrides ERC1155._mint: skips the typical 1155TokenReceiver hook since Hat wearers don't control their own Hat, and adds Hats-specific state changes - /// @param to The wearer of the Hat and the recipient of the newly minted token - /// @param id The id of the Hat to mint, cast to uint256 - /// @param amount Must always be 1, since it's not possible wear >1 Hat - /// @param data Can be empty since we skip the 1155TokenReceiver hook - function _mint( - address to, - uint256 id, - uint256 amount, - bytes memory data - ) internal override { - _balanceOf[to][id] += amount; - - // increment Hat supply counter - ++hatSupply[uint256(id)]; - - emit TransferSingle(msg.sender, address(0), to, id, amount); + /// @notice Internal call to mint a Hat token to a wearer + /// @dev Unsafe if called when `_wearer` has a non-zero balance of `_hatId` + /// @param _wearer The wearer of the Hat and the recipient of the newly minted token + /// @param _hatId The id of the Hat to mint + function _mintHat(address _wearer, uint256 _hatId) internal { + unchecked { + // should not overflow since `mintHat` enforces max balance of 1 + _balanceOf[_wearer][_hatId] = 1; + + // increment Hat supply counter + // should not overflow given AllHatsWorn check in `mintHat` + ++_hats[_hatId].supply; + } + + emit TransferSingle(msg.sender, address(0), _wearer, _hatId, 1); } - /// @notice Burns a wearer's (`from`'s) Hat token - /// @dev Overrides ERC1155._burn: adds Hats-specific state change - /// @param from The wearer from which to burn the Hat token - /// @param id The id of the Hat to burn, cast to uint256 - /// @param amount Must always be 1, since it's not possible wear >1 Hat - function _burn( - address from, - uint256 id, - uint256 amount - ) internal override { - _balanceOf[from][id] -= amount; - - // decrement Hat supply counter - --hatSupply[uint256(id)]; - - emit TransferSingle(msg.sender, from, address(0), id, amount); + /// @notice Internal call to burn a wearer's Hat token + /// @dev Unsafe if called when `_wearer` doesn't have a zero balance of `_hatId` + /// @param _wearer The wearer from which to burn the Hat token + /// @param _hatId The id of the Hat to burn + function _burnHat(address _wearer, uint256 _hatId) internal { + // neither should underflow since `_burnHat` is never called on non-positive balance + unchecked { + _balanceOf[_wearer][_hatId] = 0; + + // decrement Hat supply counter + --_hats[_hatId].supply; + } + + emit TransferSingle(msg.sender, _wearer, address(0), _hatId, 1); } - function setApprovalForAll(address operator, bool approved) - public - pure - override - { + /// @notice Approvals are not necessary for Hats since transfers are not handled by the wearer + /// @dev Admins should use `transferHat()` to transfer + function setApprovalForAll(address, bool) public pure override { revert(); } /// @notice Safe transfers are not necessary for Hats since transfers are not handled by the wearer - /// @dev Use `Hats.TransferHat()` instead - function safeTransferFrom( - address from, - address to, - uint256 id, - uint256 amount, - bytes calldata data - ) public pure override { + /// @dev Admins should use `transferHat()` to transfer + function safeTransferFrom(address, address, uint256, uint256, bytes calldata) public pure override { revert(); } /// @notice Safe transfers are not necessary for Hats since transfers are not handled by the wearer - /// @dev Use `Hats.BatchTransferHats()` instead - function safeBatchTransferFrom( - address from, - address to, - uint256[] calldata ids, - uint256[] calldata amounts, - bytes calldata data - ) public pure override { + function safeBatchTransferFrom(address, address, uint256[] calldata, uint256[] calldata, bytes calldata) + public + pure + override + { revert(); } /// @notice View the uri for a Hat /// @param id The id of the Hat /// @return string An 1155-compatible JSON object - function uri(uint256 id) - public - view - override(ERC1155, IHats) - returns (string memory) - { - return _constructURI(uint256(id)); + function uri(uint256 id) public view override(ERC1155, IHats) returns (string memory) { + return _constructURI(id); } } diff --git a/src/HatsAdmins/SampleHatter.sol b/src/HatsAdmins/SampleHatter.sol deleted file mode 100644 index 8757104..0000000 --- a/src/HatsAdmins/SampleHatter.sol +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright (C) 2022 Hats Protocol -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -pragma solidity >=0.8.13; - -import "../HatsEligibility/IHatsEligibility.sol"; -import "../Interfaces/IHats.sol"; -import "utils/Auth.sol"; - -/// @notice designed to serve as the admin for multiple hats -abstract contract SampleMultiHatter is Auth { - IHats public HATS; - - constructor(address _hatsContract) { - HATS = IHats(_hatsContract); - } - - // DAO governance mint function (auth) - function mint(uint256 _hatId, address _wearer) public virtual requiresAuth { - _mint(_hatId, _wearer); - } - - function _mint(uint256 _hatId, address _wearer) internal virtual { - require(HATS.isInGoodStanding(_wearer, _hatId), "not eligible"); - HATS.mintHat(_hatId, _wearer); - } - - function createAndMint( - uint256 _admin, - string memory _details, - uint32 _maxSupply, - address _eligibility, - address _toggle, - address _wearer, - bool _mutable, - string memory _imageURI - ) public virtual requiresAuth { - uint256 id = HATS.createHat( - _admin, - _details, - _maxSupply, - _eligibility, - _toggle, - _mutable, - _imageURI - ); - _mint(id, _wearer); - } - - // DAO governance transfer function (auth) - function transfer( - uint256 _hatId, - address _wearer, - address _newWearer - ) public virtual requiresAuth { - HATS.transferHat(_hatId, _wearer, _newWearer); - } -} diff --git a/src/HatsEligibility/SampleHatsEligibility.sol b/src/HatsEligibility/SampleHatsEligibility.sol deleted file mode 100644 index 88c3892..0000000 --- a/src/HatsEligibility/SampleHatsEligibility.sol +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (C) 2022 Hats Protocol -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -pragma solidity >=0.8.13; - -import "./IHatsEligibility.sol"; -import "../Interfaces/IHats.sol"; -import "utils/Auth.sol"; - -abstract contract OwnableHatsEligibility is IHats, IHatsEligibility, Auth { - event HatStandingSet( - address _wearer, - uint256 _hatId, - bool _eligible, - bool _standing - ); - - IHats public HATS; - - mapping(address => mapping(uint256 => bool)) public standings; - - constructor(address _hatsContract) { - HATS = IHats(_hatsContract); - } - - function getWearerStatus(address _wearer, uint64 _hatId) - public - view - returns (bool) - { - return standings[_wearer][_hatId]; - } - - function setWearerStatus( - address _wearer, - uint256 _hatId, - bool _eligible, - bool _standing - ) public virtual requiresAuth { - standings[_wearer][_hatId] = _standing; - _updateHatWearerStatus(_wearer, _hatId, _eligible, _standing); - - emit HatStandingSet(_wearer, _hatId, _eligible, _standing); - } - - function _updateHatWearerStatus( - address _wearer, - uint256 _hatId, - bool _eligible, - bool _standing - ) internal virtual { - HATS.setHatWearerStatus(_hatId, _wearer, _eligible, _standing); - } -} diff --git a/src/HatsIdUtilities.sol b/src/HatsIdUtilities.sol index 29b5d5d..542284c 100644 --- a/src/HatsIdUtilities.sol +++ b/src/HatsIdUtilities.sol @@ -1,4 +1,5 @@ -// Copyright (C) 2022 Hats Protocol +// SPDX-License-Identifier: AGPL-3.0 +// Copyright (C) 2023 Haberdasher Labs // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -20,8 +21,16 @@ import "./Interfaces/IHatsIdUtilities.sol"; /// @title Hats Id Utilities /// @dev Functions for working with Hat Ids from Hats Protocol. Factored out of Hats.sol /// for easier use by other contracts. -/// @author Hats Protocol +/// @author Haberdasher Labs contract HatsIdUtilities is IHatsIdUtilities { + /// @notice Mapping of tophats requesting to link to admin hats in other trees + /// @dev Linkage only occurs if request is approved by the new admin + mapping(uint32 => uint256) public linkedTreeRequests; // topHatDomain => requested new admin + + /// @notice Mapping of approved & linked tophats to admin hats in other trees, used for grafting one hats tree onto another + /// @dev Trees can only be linked to another tree via their tophat + mapping(uint32 => uint256) public linkedTreeAdmins; // topHatDomain => hatId + /** * Hat Ids serve as addresses. A given Hat's Id represents its location in its * hat tree: its level, its admin, its admin's admin (etc, all the way up to the @@ -29,85 +38,116 @@ contract HatsIdUtilities is IHatsIdUtilities { * * The top level consists of 4 bytes and references all tophats. * - * Each level below consists of 1 byte, and contains up to 255 child hats. + * Each level below consists of 16 bits, and contains up to 65,536 child hats. * - * A uint256 contains 4 bytes of space for tophat addresses and 28 additional bytes - * of space, giving room for 28 levels of delegation, with the admin at each level - * having space for 255 different child hats. + * A uint256 contains 4 bytes of space for tophat addresses, giving room for ((256 - + * 32) / 16) = 14 levels of delegation, with the admin at each level having space for + * 65,536 different child hats. * - * A hat tree consists of a single tophat and has a max depth of 28 levels. + * A hat tree consists of a single tophat and has a max depth of 14 levels. */ - uint256 internal constant TOPHAT_ADDRESS_SPACE = 32; // 32 bits (4 bytes) of space for tophats, aka the "domain" - uint256 internal constant LOWER_LEVEL_ADDRESS_SPACE = 8; // 8 bits (1 byte) of space for each of the levels below the tophat - uint256 internal constant MAX_LEVELS = 28; // 28 levels below the tophat + /// @dev Number of bits of address space for tophat ids, ie the tophat domain + uint256 internal constant TOPHAT_ADDRESS_SPACE = 32; + + /// @dev Number of bits of address space for each level below the tophat + uint256 internal constant LOWER_LEVEL_ADDRESS_SPACE = 16; + + /// @dev Maximum number of levels below the tophat, ie max tree depth + /// (256 - TOPHAT_ADDRESS_SPACE) / LOWER_LEVEL_ADDRESS_SPACE; + uint256 internal constant MAX_LEVELS = 14; /// @notice Constructs a valid hat id for a new hat underneath a given admin /// @dev Check hats[_admin].lastHatId for the previous hat created underneath _admin /// @param _admin the id of the admin for the new hat - /// @param _newHat the uint8 id of the new hat + /// @param _newHat the uint16 id of the new hat /// @return id The constructed hat id - function buildHatId(uint256 _admin, uint8 _newHat) - public - pure - returns (uint256 id) - { + function buildHatId(uint256 _admin, uint16 _newHat) public pure returns (uint256 id) { uint256 mask; - // TODO: remove this loop - for (uint256 i = 0; i < MAX_LEVELS; ++i) { - mask = uint256( - type(uint256).max >> - (TOPHAT_ADDRESS_SPACE + (LOWER_LEVEL_ADDRESS_SPACE * i)) - ); + for (uint256 i = 0; i < MAX_LEVELS;) { + unchecked { + mask = uint256( + type(uint256).max + // should not overflow given known constants + >> (TOPHAT_ADDRESS_SPACE + (LOWER_LEVEL_ADDRESS_SPACE * i)) + ); + } if (_admin & mask == 0) { - id = - _admin | - (uint256(_newHat) << - (LOWER_LEVEL_ADDRESS_SPACE * (MAX_LEVELS - 1 - i))); + unchecked { + id = _admin + | ( + uint256(_newHat) + // should not overflow given known constants + << (LOWER_LEVEL_ADDRESS_SPACE * (MAX_LEVELS - 1 - i)) + ); + } return id; } + + // should not overflow based on < MAX_LEVELS stopping condition + unchecked { + ++i; + } } } /// @notice Identifies the level a given hat in its hat tree /// @param _hatId the id of the hat in question - /// @return level (0 to 28) - function getHatLevel(uint256 _hatId) public pure returns (uint8) { + /// @return level (0 to type(uint8).max) + function getHatLevel(uint256 _hatId) public view returns (uint8) { uint256 mask; uint256 i; - // TODO: get rid of this for loop and possibly use the YUL switch/case - // syntax. Otherwise, return to the original syntax - for (i = 0; i < MAX_LEVELS; ++i) { - mask = uint256( - type(uint256).max >> - (TOPHAT_ADDRESS_SPACE + (LOWER_LEVEL_ADDRESS_SPACE * i)) - ); - - if (_hatId & mask == 0) return uint8(i); + for (i = 0; i < MAX_LEVELS;) { + mask = uint256(type(uint256).max >> (TOPHAT_ADDRESS_SPACE + (LOWER_LEVEL_ADDRESS_SPACE * i))); + + if (_hatId & mask == 0) break; + + // should not overflow based on < MAX_LEVELS stopping condition + unchecked { + ++i; + } } + uint256 treeAdmin = linkedTreeAdmins[uint32(_hatId >> (256 - TOPHAT_ADDRESS_SPACE))]; - return uint8(MAX_LEVELS); + if (treeAdmin != 0) { + return 1 + uint8(i) + getHatLevel(treeAdmin); + } + + return uint8(i); } /// @notice Checks whether a hat is a topHat /// @dev For use when passing a Hat object is not appropriate /// @param _hatId The hat in question /// @return bool Whether the hat is a topHat - function isTopHat(uint256 _hatId) public pure returns (bool) { - return _hatId > 0 && uint224(_hatId) == 0; + function isTopHat(uint256 _hatId) public view returns (bool) { + return _hatId > 0 && uint224(_hatId) == 0 && linkedTreeAdmins[getTophatDomain(_hatId)] == 0; + } + + /// @notice Gets the hat id of the admin at a given level of a given hat + /// @dev This function traverses trees by following the linkedTreeAdmin + /// pointer to a hat located in a different tree + /// @param _hatId the id of the hat in question + /// @param _level the admin level of interest + /// @return uint256 The hat id of the resulting admin + function getAdminAtLevel(uint256 _hatId, uint8 _level) public view returns (uint256) { + uint256 linkedTreeAdmin = linkedTreeAdmins[getTophatDomain(_hatId)]; + if (linkedTreeAdmin == 0) return getTreeAdminAtLevel(_hatId, _level); + + uint8 localTopHatLevel = getHatLevel(getTreeAdminAtLevel(_hatId, 0)); + + if (localTopHatLevel <= _level) return getTreeAdminAtLevel(_hatId, _level - localTopHatLevel); + + return getAdminAtLevel(linkedTreeAdmin, _level); } /// @notice Gets the hat id of the admin at a given level of a given hat + /// local to the tree containing the hat. /// @param _hatId the id of the hat in question /// @param _level the admin level of interest /// @return uint256 The hat id of the resulting admin - function getAdminAtLevel(uint256 _hatId, uint8 _level) - public - pure - returns (uint256) - { - uint256 mask = type(uint256).max << - (LOWER_LEVEL_ADDRESS_SPACE * (MAX_LEVELS - _level)); + function getTreeAdminAtLevel(uint256 _hatId, uint8 _level) public pure returns (uint256) { + uint256 mask = type(uint256).max << (LOWER_LEVEL_ADDRESS_SPACE * (MAX_LEVELS - _level)); return _hatId & mask; } @@ -115,10 +155,42 @@ contract HatsIdUtilities is IHatsIdUtilities { /// @notice Gets the tophat domain of a given hat /// @dev A domain is the identifier for a given hat tree, stored in the first 4 bytes of a hat's id /// @param _hatId the id of the hat in question - /// @return uint256 The domain - function getTophatDomain(uint256 _hatId) public pure returns (uint256) { - return - getAdminAtLevel(_hatId, 0) >> - (LOWER_LEVEL_ADDRESS_SPACE * MAX_LEVELS); + /// @return uint32 The domain + function getTophatDomain(uint256 _hatId) public pure returns (uint32) { + return uint32(_hatId >> (LOWER_LEVEL_ADDRESS_SPACE * MAX_LEVELS)); + } + + /// @notice Gets the domain of the highest parent tophat — the "tippy tophat" + /// @param _topHatDomain the 32 bit domain of a (likely linked) tophat + /// @return The tippy tophat domain + function getTippyTophatDomain(uint32 _topHatDomain) public view returns (uint32) { + uint256 linkedAdmin = linkedTreeAdmins[_topHatDomain]; + if (linkedAdmin == 0) return _topHatDomain; + return getTippyTophatDomain(getTophatDomain(linkedAdmin)); + } + + /// @notice Checks For any circular linkage of trees + /// @param _topHatDomain the 32 bit domain of the tree to be linked + /// @param _linkedAdmin the hatId of the potential tree admin + /// @return bool circular link has been found + function noCircularLinkage(uint32 _topHatDomain, uint256 _linkedAdmin) public view returns (bool) { + if (_linkedAdmin == 0) return true; + uint32 adminDomain = getTophatDomain(_linkedAdmin); + if (_topHatDomain == adminDomain) return false; + uint256 parentAdmin = linkedTreeAdmins[adminDomain]; + return noCircularLinkage(_topHatDomain, parentAdmin); + } + + /// @notice Checks that a tophat domain and its potential linked admin are from the same tree, ie have the same tippy tophat domain + /// @param _topHatDomain The 32 bit domain of the tophat to be linked + /// @param _newAdminHat The new admin for the linked tree + function sameTippyTophatDomain(uint32 _topHatDomain, uint256 _newAdminHat) public view returns (bool) { + // get highest parent domains for current and new tree root admins + uint32 currentTippyTophatDomain = getTippyTophatDomain(_topHatDomain); + uint32 newAdminDomain = getTophatDomain(_newAdminHat); + uint32 newHTippyTophatDomain = getTippyTophatDomain(newAdminDomain); + + // check that both domains are equal + return (currentTippyTophatDomain == newHTippyTophatDomain); } } diff --git a/src/HatsToggle/SampleHatsToggle.sol b/src/HatsToggle/SampleHatsToggle.sol deleted file mode 100644 index 3503a20..0000000 --- a/src/HatsToggle/SampleHatsToggle.sol +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright (C) 2022 Hats Protocol -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see . - -pragma solidity >=0.8.13; - -import "./IHatsToggle.sol"; -import "../Interfaces/IHats.sol"; -import "utils/Auth.sol"; - -abstract contract ExpiringHatsToggle is IHatsToggle { - event HatExpirySet(uint256 _hatId, uint256 _expiry); - - error ExpiryInPast(); - - mapping(uint256 => uint256) public expiries; // key: hatId => value: expiry timestamp - - function getHatStatus(uint256 _hatId) public view virtual returns (bool) { - return (block.timestamp < expiries[_hatId]); - } - - function setExpiry(uint256 _hatId, uint256 _expiry) public virtual { - if (block.timestamp > _expiry) { - revert ExpiryInPast(); - } - - expiries[_hatId] = _expiry; - - emit HatExpirySet(_hatId, _expiry); - } -} - -abstract contract OwnableHatsToggle is IHatsToggle, Auth { - event HatStatusSet(uint256 _hatId, bool _status); - - IHats public HATS; - - mapping(uint256 => bool) public status; - - constructor(address _hatsContract) { - HATS = IHats(_hatsContract); - } - - function getHatStatus(uint256 _hatId) public view virtual returns (bool) { - return (status[_hatId]); - } - - function setHatStatus(uint256 _hatId, bool _status) - public - virtual - requiresAuth - { - status[_hatId] = _status; - _updateHatStatus(_hatId, _status); - - emit HatStatusSet(_hatId, _status); - } - - function _updateHatStatus(uint256 _hatId, bool _status) internal virtual { - HATS.setHatStatus(_hatId, _status); - } -} diff --git a/src/Interfaces/HatsErrors.sol b/src/Interfaces/HatsErrors.sol index 49d5cb7..ff4b267 100644 --- a/src/Interfaces/HatsErrors.sol +++ b/src/Interfaces/HatsErrors.sol @@ -1,4 +1,5 @@ -// Copyright (C) 2022 Hats Protocol +// SPDX-License-Identifier: AGPL-3.0 +// Copyright (C) 2023 Haberdasher Labs // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -16,21 +17,49 @@ pragma solidity >=0.8.13; interface HatsErrors { - error NotAdmin(address _user, uint256 _hatId); - error AllHatsWorn(uint256 _hatId); - error AlreadyWearingHat(address _wearer, uint256 _hatId); - error HatDoesNotExist(uint256 _hatId); - error NotEligible(address _wearer, uint256 _hatId); - // error NoApprovalsNeeded(); - // error OnlyAdminsCanTransfer(); + /// @notice Emitted when `user` is attempting to perform an action on `hatId` but is not wearing one of `hatId`'s admin hats + /// @dev Can be equivalent to `NotHatWearer(buildHatId(hatId))`, such as when emitted by `approveLinkTopHatToTree` or `relinkTopHatToTree` + error NotAdmin(address user, uint256 hatId); + + /// @notice Emitted when attempting to perform an action as or for an account that is not a wearer of a given hat error NotHatWearer(); + + /// @notice Emitted when attempting to perform an action that requires being either an admin or wearer of a given hat + error NotAdminOrWearer(); + + /// @notice Emitted when attempting to mint `hatId` but `hatId`'s maxSupply has been reached + error AllHatsWorn(uint256 hatId); + + /// @notice Emitted when attempting to create a hat with a level 14 hat as its admin + error MaxLevelsReached(); + + /// @notice Emitted when attempting to mint `hatId` to a `wearer` who is already wearing the hat + error AlreadyWearingHat(address wearer, uint256 hatId); + + /// @notice Emitted when attempting to mint a non-existant hat + error HatDoesNotExist(uint256 hatId); + + /// @notice Emitted when attempting to check or set a hat's status from an account that is not that hat's toggle module error NotHatsToggle(); + + /// @notice Emitted when attempting to check or set a hat wearer's status from an account that is not that hat's eligibility module error NotHatsEligibility(); - // error NotIHatsToggleContract(); - // error NotIHatsEligibilityContract(); + + /// @notice Emitted when array arguments to a batch function have mismatching lengths error BatchArrayLengthMismatch(); - // error SafeTransfersNotNecessary(); - error MaxLevelsReached(); + + /// @notice Emitted when attempting to mutate or transfer an immutable hat error Immutable(); + + /// @notice Emitted when attempting to change a hat's maxSupply to a value lower than its current supply error NewMaxSupplyTooLow(); + + /// @notice Emitted when attempting to link a tophat to a new admin for which the tophat serves as an admin + error CircularLinkage(); + + /// @notice Emitted when attempting to link or relink a tophat to a separate tree + error CrossTreeLinkage(); + + /// @notice Emitted when attempting to link a tophat without a request + error LinkageNotRequested(); } diff --git a/src/Interfaces/HatsEvents.sol b/src/Interfaces/HatsEvents.sol index 86934d1..faac048 100644 --- a/src/Interfaces/HatsEvents.sol +++ b/src/Interfaces/HatsEvents.sol @@ -1,4 +1,5 @@ -// Copyright (C) 2022 Hats Protocol +// SPDX-License-Identifier: AGPL-3.0 +// Copyright (C) 2023 Haberdasher Labs // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -16,6 +17,14 @@ pragma solidity >=0.8.13; interface HatsEvents { + /// @notice Emitted when a new hat is created + /// @param id The id for the new hat + /// @param details A description of the Hat + /// @param maxSupply The total instances of the Hat that can be worn at once + /// @param eligibility The address that can report on the Hat wearer's status + /// @param toggle The address that can deactivate the Hat + /// @param mutable_ Whether the hat's properties are changeable after creation + /// @param imageURI The image uri for this hat and the fallback for its event HatCreated( uint256 id, string details, @@ -26,26 +35,54 @@ interface HatsEvents { string imageURI ); - // event HatRenounced(uint256 hatId, address wearer); - - // event WearerStatus( - // uint256 hatId, - // address wearer, - // bool eligible, - // bool wearerStanding - // ); + /// @notice Emitted when a hat wearer's standing is updated + /// @dev Eligibility is excluded since the source of truth for eligibility is the eligibility module and may change without a transaction + /// @param hatId The id of the wearer's hat + /// @param wearer The wearer's address + /// @param wearerStanding Whether the wearer is in good standing for the hat + event WearerStandingChanged(uint256 hatId, address wearer, bool wearerStanding); + /// @notice Emitted when a hat's status is updated + /// @param hatId The id of the hat + /// @param newStatus Whether the hat is active event HatStatusChanged(uint256 hatId, bool newStatus); + /// @notice Emitted when a hat's details are updated + /// @param hatId The id of the hat + /// @param newDetails The updated details event HatDetailsChanged(uint256 hatId, string newDetails); + /// @notice Emitted when a hat's eligibility module is updated + /// @param hatId The id of the hat + /// @param newEligibility The updated eligibiliy module event HatEligibilityChanged(uint256 hatId, address newEligibility); + /// @notice Emitted when a hat's toggle module is updated + /// @param hatId The id of the hat + /// @param newToggle The updated toggle module event HatToggleChanged(uint256 hatId, address newToggle); + /// @notice Emitted when a hat's mutability is updated + /// @param hatId The id of the hat event HatMutabilityChanged(uint256 hatId); + /// @notice Emitted when a hat's maximum supply is updated + /// @param hatId The id of the hat + /// @param newMaxSupply The updated max supply event HatMaxSupplyChanged(uint256 hatId, uint32 newMaxSupply); + /// @notice Emitted when a hat's image URI is updated + /// @param hatId The id of the hat + /// @param newImageURI The updated image URI event HatImageURIChanged(uint256 hatId, string newImageURI); + + /// @notice Emitted when a tophat linkage is requested by its admin + /// @param domain The domain of the tree tophat to link + /// @param newAdmin The tophat's would-be admin in the parent tree + event TopHatLinkRequested(uint32 domain, uint256 newAdmin); + + /// @notice Emitted when a tophat is linked to a another tree + /// @param domain The domain of the newly-linked tophat + /// @param newAdmin The tophat's new admin in the parent tree + event TopHatLinked(uint32 domain, uint256 newAdmin); } diff --git a/src/Interfaces/IHats.sol b/src/Interfaces/IHats.sol index 1110deb..3861916 100644 --- a/src/Interfaces/IHats.sol +++ b/src/Interfaces/IHats.sol @@ -1,4 +1,5 @@ -// Copyright (C) 2022 Hats Protocol +// SPDX-License-Identifier: AGPL-3.0 +// Copyright (C) 2023 Haberdasher Labs // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -20,21 +21,9 @@ import "./HatsErrors.sol"; import "./HatsEvents.sol"; interface IHats is IHatsIdUtilities, HatsErrors, HatsEvents { - function mintTopHat( - address _target, - string memory _details, - string memory _imageURI - ) external returns (uint256 topHatId); - - // function createTopHatAndHat( - // string memory _details, - // uint32 _maxSupply, - // address _eligibility, - // address _toggle, - // bool _mutable, - // string memory _topHatImageURI, - // string memory _firstHatImageURI - // ) external returns (uint256 topHatId, uint256 firstHatId); + function mintTopHat(address _target, string memory _details, string memory _imageURI) + external + returns (uint256 topHatId); function createHat( uint256 _admin, @@ -60,34 +49,29 @@ interface IHats is IHatsIdUtilities, HatsErrors, HatsEvents { function mintHat(uint256 _hatId, address _wearer) external returns (bool); - function batchMintHats(uint256[] memory _hatIds, address[] memory _wearers) - external - returns (bool); + function batchMintHats(uint256[] memory _hatIds, address[] memory _wearers) external returns (bool); - function setHatStatus(uint256 _hatId, bool _newStatus) - external - returns (bool); + function setHatStatus(uint256 _hatId, bool _newStatus) external returns (bool); function checkHatStatus(uint256 _hatId) external returns (bool); - function setHatWearerStatus( - uint256 _hatId, - address _wearer, - bool _eligible, - bool _standing - ) external returns (bool); - - function checkHatWearerStatus(uint256 _hatId, address _wearer) + function setHatWearerStatus(uint256 _hatId, address _wearer, bool _eligible, bool _standing) external returns (bool); + function checkHatWearerStatus(uint256 _hatId, address _wearer) external returns (bool); + function renounceHat(uint256 _hatId) external; - function transferHat( - uint256 _hatId, - address _from, - address _to - ) external; + function transferHat(uint256 _hatId, address _from, address _to) external; + + function requestLinkTopHatToTree(uint32 _topHatId, uint256 _newAdminHat) external; + + function approveLinkTopHatToTree(uint32 _topHatId, uint256 _newAdminHat) external; + + function unlinkTopHatFromTree(uint32 _topHatId) external; + + function relinkTopHatWithinTree(uint32 _topHatDomain, uint256 _newAdminHat) external; /*////////////////////////////////////////////////////////////// HATS ADMIN FUNCTIONS @@ -95,16 +79,13 @@ interface IHats is IHatsIdUtilities, HatsErrors, HatsEvents { function makeHatImmutable(uint256 _hatId) external; - function changeHatDetails(uint256 _hatId, string memory _newDetails) - external; + function changeHatDetails(uint256 _hatId, string memory _newDetails) external; - function changeHatEligibility(uint256 _hatId, address _newEligibility) - external; + function changeHatEligibility(uint256 _hatId, address _newEligibility) external; function changeHatToggle(uint256 _hatId, address _newToggle) external; - function changeHatImageURI(uint256 _hatId, string memory _newImageURI) - external; + function changeHatImageURI(uint256 _hatId, string memory _newImageURI) external; function changeHatMaxSupply(uint256 _hatId, uint32 _newMaxSupply) external; @@ -122,42 +103,24 @@ interface IHats is IHatsIdUtilities, HatsErrors, HatsEvents { address eligibility, address toggle, string memory imageURI, - uint8 lastHatId, + uint16 lastHatId, bool mutable_, bool active ); - function isWearerOfHat(address _user, uint256 _hatId) - external - view - returns (bool); + function isWearerOfHat(address _user, uint256 _hatId) external view returns (bool); - function isAdminOfHat(address _user, uint256 _hatId) - external - view - returns (bool); + function isAdminOfHat(address _user, uint256 _hatId) external view returns (bool); - // function isActive(uint256 _hatId) external view returns (bool); + function isInGoodStanding(address _wearer, uint256 _hatId) external view returns (bool); - function isInGoodStanding(address _wearer, uint256 _hatId) - external - view - returns (bool); + function isEligible(address _wearer, uint256 _hatId) external view returns (bool); - function isEligible(address _wearer, uint256 _hatId) - external - view - returns (bool); + function hatSupply(uint256 _hatId) external view returns (uint32 supply); - function getImageURIForHat(uint256 _hatId) - external - view - returns (string memory); + function getImageURIForHat(uint256 _hatId) external view returns (string memory); - function balanceOf(address wearer, uint256 hatId) - external - view - returns (uint256 balance); + function balanceOf(address wearer, uint256 hatId) external view returns (uint256 balance); function uri(uint256 id) external view returns (string memory); } diff --git a/src/HatsEligibility/IHatsEligibility.sol b/src/Interfaces/IHatsEligibility.sol similarity index 85% rename from src/HatsEligibility/IHatsEligibility.sol rename to src/Interfaces/IHatsEligibility.sol index 0b77bbf..cc81bf4 100644 --- a/src/HatsEligibility/IHatsEligibility.sol +++ b/src/Interfaces/IHatsEligibility.sol @@ -1,4 +1,5 @@ -// Copyright (C) 2022 Hats Protocol +// SPDX-License-Identifier: AGPL-3.0 +// Copyright (C) 2023 Haberdasher Labs // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -22,8 +23,5 @@ interface IHatsEligibility { /// @param _hatId The id of the hat in question /// @return eligible Whether the _wearer is eligible to wear the hat /// @return standing Whether the _wearer is in goog standing - function getWearerStatus(address _wearer, uint256 _hatId) - external - view - returns (bool eligible, bool standing); + function getWearerStatus(address _wearer, uint256 _hatId) external view returns (bool eligible, bool standing); } diff --git a/src/Interfaces/IHatsIdUtilities.sol b/src/Interfaces/IHatsIdUtilities.sol index 6b5f244..7b58341 100644 --- a/src/Interfaces/IHatsIdUtilities.sol +++ b/src/Interfaces/IHatsIdUtilities.sol @@ -1,4 +1,5 @@ -// Copyright (C) 2022 Hats Protocol +// SPDX-License-Identifier: AGPL-3.0 +// Copyright (C) 2023 Haberdasher Labs // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by @@ -15,22 +16,22 @@ pragma solidity >=0.8.13; -import "./IHatsIdUtilities.sol"; - interface IHatsIdUtilities { - function buildHatId(uint256 _admin, uint8 _newHat) - external - pure - returns (uint256 id); + function buildHatId(uint256 _admin, uint16 _newHat) external pure returns (uint256 id); + + function getHatLevel(uint256 _hatId) external view returns (uint8); + + function isTopHat(uint256 _hatId) external view returns (bool); + + function getAdminAtLevel(uint256 _hatId, uint8 _level) external view returns (uint256); + + function getTreeAdminAtLevel(uint256 _hatId, uint8 _level) external pure returns (uint256); - function getHatLevel(uint256 _hatId) external pure returns (uint8); + function getTophatDomain(uint256 _hatId) external view returns (uint32); - function isTopHat(uint256 _hatId) external pure returns (bool); + function getTippyTophatDomain(uint32 _topHatDomain) external view returns (uint32); - function getAdminAtLevel(uint256 _hatId, uint8 _level) - external - pure - returns (uint256); + function noCircularLinkage(uint32 _topHatDomain, uint256 _linkedAdmin) external view returns (bool); - function getTophatDomain(uint256 _hatId) external pure returns (uint256); + function sameTippyTophatDomain(uint32 _topHatDomain, uint256 _newAdminHat) external view returns (bool); } diff --git a/src/HatsToggle/IHatsToggle.sol b/src/Interfaces/IHatsToggle.sol similarity index 91% rename from src/HatsToggle/IHatsToggle.sol rename to src/Interfaces/IHatsToggle.sol index 72f8d98..23a54c4 100644 --- a/src/HatsToggle/IHatsToggle.sol +++ b/src/Interfaces/IHatsToggle.sol @@ -1,4 +1,5 @@ -// Copyright (C) 2022 Hats Protocol +// SPDX-License-Identifier: AGPL-3.0 +// Copyright (C) 2023 Haberdasher Labs // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as published by diff --git a/test/Hats.t.sol b/test/Hats.t.sol index 49659cd..47bec05 100644 --- a/test/Hats.t.sol +++ b/test/Hats.t.sol @@ -22,26 +22,18 @@ contract CreateTopHatTest is TestSetup { function testTopHatCreated() public { string memory details = "tophat"; vm.expectEmit(false, false, false, true); - emit HatCreated( - 2**224, - details, - 1, - address(0), - address(0), - false, - topHatImageURI - ); + emit HatCreated(2 ** 224, details, 1, address(0), address(0), false, topHatImageURI); topHatId = hats.mintTopHat(topHatWearer, details, topHatImageURI); assertTrue(hats.isTopHat(topHatId)); - assertEq(2**224, topHatId); + assertEq(2 ** 224, topHatId); } function testTopHatMinted() public { vm.expectEmit(true, true, true, true); - emit TransferSingle(address(this), address(0), topHatWearer, 2**224, 1); + emit TransferSingle(address(this), address(0), topHatWearer, 2 ** 224, 1); topHatId = hats.mintTopHat(topHatWearer, "tophat", topHatImageURI); @@ -63,65 +55,33 @@ contract CreateTopHatTest is TestSetup { contract CreateHatsTest is TestSetup { function testImmutableHatCreated() public { // get prelim values - (, , , , , , uint8 lastHatId, , ) = hats.viewHat(topHatId); + (,,,,,, uint16 lastHatId,,) = hats.viewHat(topHatId); vm.expectEmit(false, false, false, true); - emit HatCreated( - hats.getNextId(topHatId), - _details, - _maxSupply, - _eligibility, - _toggle, - false, - secondHatImageURI - ); + emit HatCreated(hats.getNextId(topHatId), _details, _maxSupply, _eligibility, _toggle, false, secondHatImageURI); // topHatId = hats.mintTopHat(topHatWearer, topHatImageURI); vm.prank(address(topHatWearer)); - secondHatId = hats.createHat( - topHatId, - _details, - _maxSupply, - _eligibility, - _toggle, - false, - secondHatImageURI - ); + secondHatId = hats.createHat(topHatId, _details, _maxSupply, _eligibility, _toggle, false, secondHatImageURI); // assert admin's lastHatId is incremented - (, , , , , , uint8 lastHatIdPost, , ) = hats.viewHat(topHatId); - (, , , , , , , bool mutable_, ) = hats.viewHat(secondHatId); + (,,,,,, uint16 lastHatIdPost,,) = hats.viewHat(topHatId); + (,,,,,,, mutable_,) = hats.viewHat(secondHatId); assertEq(lastHatId + 1, lastHatIdPost); assertFalse(mutable_); } function testMutableHatCreated() public { vm.expectEmit(false, false, false, true); - emit HatCreated( - hats.getNextId(topHatId), - _details, - _maxSupply, - _eligibility, - _toggle, - true, - secondHatImageURI - ); + emit HatCreated(hats.getNextId(topHatId), _details, _maxSupply, _eligibility, _toggle, true, secondHatImageURI); console2.log("secondHat"); vm.prank(address(topHatWearer)); - secondHatId = hats.createHat( - topHatId, - _details, - _maxSupply, - _eligibility, - _toggle, - true, - secondHatImageURI - ); + secondHatId = hats.createHat(topHatId, _details, _maxSupply, _eligibility, _toggle, true, secondHatImageURI); - (, , , , , , , bool mutable_, ) = hats.viewHat(secondHatId); + (,,,,,,, mutable_,) = hats.viewHat(secondHatId); assertTrue(mutable_); } @@ -129,12 +89,7 @@ contract CreateHatsTest is TestSetup { // mint TopHat // topHatId = hats.mintTopHat(topHatWearer, topHatImageURI); - (uint256[] memory ids, address[] memory wearers) = createHatsBranch( - 3, - topHatId, - topHatWearer, - false - ); + (uint256[] memory ids,) = createHatsBranch(3, topHatId, topHatWearer, false); assertEq(hats.getHatLevel(ids[2]), 3); assertEq(hats.getAdminAtLevel(ids[0], 0), topHatId); assertEq(hats.getAdminAtLevel(ids[1], 1), ids[0]); @@ -187,18 +142,16 @@ contract BatchCreateHats is TestSetupBatch { imageURIsBatch ); - (, , , , , , uint8 lastHatId, , ) = hats.viewHat(topHatId); + (,,,,,, uint16 lastHatId,,) = hats.viewHat(topHatId); assertEq(lastHatId, count); - (, , , , address t, , , , ) = hats.viewHat( - hats.buildHatId(topHatId, uint8(count)) - ); + (,,,, address t,,,,) = hats.viewHat(hats.buildHatId(topHatId, uint16(count))); assertEq(t, _toggle); } function testBatchCreateHatsSkinnyFullBranch() public { - uint256 count = 28; + uint256 count = 14; adminsBatch = new uint256[](count); detailsBatch = new string[](count); @@ -239,20 +192,12 @@ contract BatchCreateHats is TestSetupBatch { assertEq( hats.getHatLevel( // should be adminId - hats.buildHatId( - hats.getAdminAtLevel(adminId, uint8(count - 1)), - 1 - ) - ), + hats.buildHatId(hats.getAdminAtLevel(adminId, uint8(count - 1)), 1)), count ); } - function testBatchCreateHatsErrorArrayLength( - uint256 count, - uint256 offset, - uint256 array - ) public { + function testBatchCreateHatsErrorArrayLength(uint256 count, uint256 offset, uint256 array) public { count = bound(count, 1, 254); // count = 2; offset = bound(offset, 1, 255 - count); @@ -345,9 +290,7 @@ contract BatchCreateHats is TestSetupBatch { // adminsBatch[count] = topHatId; - vm.expectRevert( - abi.encodeWithSelector(HatsErrors.BatchArrayLengthMismatch.selector) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.BatchArrayLengthMismatch.selector)); hats.batchCreateHats( adminsBatch, @@ -411,12 +354,7 @@ contract ImageURITest is TestSetup2 { function testEmptyHatBranchImageURI() public { uint256 topHat = hats.mintTopHat(topHatWearer, "", ""); - (uint256[] memory ids, ) = createHatsBranch( - 5, - topHat, - topHatWearer, - false - ); + (uint256[] memory ids,) = createHatsBranch(5, topHat, topHatWearer, false); string memory uri = hats.getImageURIForHat(ids[4]); @@ -457,23 +395,14 @@ contract MintHatsTest is TestSetup { // check transfer event will be emitted vm.expectEmit(true, true, true, true); - emit TransferSingle( - topHatWearer, - address(0), - secondWearer, - secondHatId, - 1 - ); + emit TransferSingle(topHatWearer, address(0), secondWearer, secondHatId, 1); // 2-2. mint hat vm.prank(address(topHatWearer)); hats.mintHat(secondHatId, secondWearer); // assert balance = 1 - assertEq( - hats.balanceOf(secondWearer, secondHatId), - ++secondWearerBalance - ); + assertEq(hats.balanceOf(secondWearer, secondHatId), ++secondWearerBalance); // assert iswearer assertTrue(hats.isWearerOfHat(secondWearer, secondHatId)); @@ -486,7 +415,7 @@ contract MintHatsTest is TestSetup { // store prelim values uint256 balance_pre = hats.balanceOf(thirdWearer, secondHatId); uint32 supply_pre = hats.hatSupply(secondHatId); - (, , , , , , uint8 lastHatId_pre, , ) = hats.viewHat(topHatId); + (,,,,,, uint16 lastHatId_pre,,) = hats.viewHat(topHatId); // mint hat vm.prank(address(topHatWearer)); @@ -506,7 +435,7 @@ contract MintHatsTest is TestSetup { assertEq(hats.hatSupply(secondHatId), supply_pre + 2); // assert admin's lastHatId is *not* incremented - (, , , , , , uint8 lastHatId_post, , ) = hats.viewHat(topHatId); + (,,,,,, uint16 lastHatId_post,,) = hats.viewHat(topHatId); assertEq(lastHatId_post, lastHatId_pre); } @@ -514,20 +443,14 @@ contract MintHatsTest is TestSetup { // store prelim values uint256 balance_pre = hats.balanceOf(thirdWearer, secondHatId); uint32 supply_pre = hats.hatSupply(secondHatId); - (, , , , , , uint8 lastHatId_pre, , ) = hats.viewHat(topHatId); + (,,,,,, uint16 lastHatId_pre,,) = hats.viewHat(topHatId); // mint hat vm.prank(address(topHatWearer)); hats.mintHat(secondHatId, secondWearer); // expect error AlreadyWearingHat() - vm.expectRevert( - abi.encodeWithSelector( - HatsErrors.AlreadyWearingHat.selector, - secondWearer, - secondHatId - ) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.AlreadyWearingHat.selector, secondWearer, secondHatId)); // mint another of same id to the same wearer vm.prank(address(topHatWearer)); @@ -543,7 +466,7 @@ contract MintHatsTest is TestSetup { assertEq(hats.hatSupply(secondHatId), supply_pre + 1); // assert admin's lastHatId is *not* incremented - (, , , , , , uint8 lastHatId_post, , ) = hats.viewHat(topHatId); + (,,,,,, uint16 lastHatId_post,,) = hats.viewHat(topHatId); assertEq(lastHatId_post, lastHatId_pre); } @@ -553,13 +476,7 @@ contract MintHatsTest is TestSetup { uint32 supply_pre = hats.hatSupply(secondHatId); // expect NotAdmin Error - vm.expectRevert( - abi.encodeWithSelector( - HatsErrors.NotAdmin.selector, - nonWearer, - secondHatId - ) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotAdmin.selector, nonWearer, secondHatId)); // 2-1. try to mint hat from a non-wearer vm.prank(address(nonWearer)); @@ -587,9 +504,7 @@ contract MintHatsTest is TestSetup { hats.mintHat(secondHatId, topHatWearer); // expect error AllHatsWorn() - vm.expectRevert( - abi.encodeWithSelector(HatsErrors.AllHatsWorn.selector, secondHatId) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.AllHatsWorn.selector, secondHatId)); // 2-3. fail to mint hat 3 hats.mintHat(secondHatId, thirdWearer); @@ -632,12 +547,7 @@ contract MintHatsTest is TestSetup { uint256 badHatId = 123e18; - vm.expectRevert( - abi.encodeWithSelector( - HatsErrors.HatDoesNotExist.selector, - badHatId - ) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.HatDoesNotExist.selector, badHatId)); hats.mintHat(badHatId, secondWearer); } @@ -656,30 +566,20 @@ contract MintHatsTest is TestSetup { // create the hats and populate the minting arrays for (uint256 i = 0; i < count; ++i) { - uint256 id = hats.createHat( - secondHatId, - "", - 1, - topHatWearer, - topHatWearer, - false, - "" - ); + uint256 id = hats.createHat(secondHatId, "", 1, topHatWearer, topHatWearer, false, ""); hatBatch[i] = id; - wearerBatch[i] = address(uint160(10000 + i)); + wearerBatch[i] = address(uint160(10_000 + i)); } hats.batchMintHats(hatBatch, wearerBatch); - (, , , , , , uint8 lastHatId, , ) = hats.viewHat(secondHatId); + (,,,,,, uint16 lastHatId,,) = hats.viewHat(secondHatId); assertEq(lastHatId, count); } - function testBatchMintHatsErrorArrayLength(uint256 count, uint256 offset) - public - { + function testBatchMintHatsErrorArrayLength(uint256 count, uint256 offset) public { count = bound(count, 1, 254); offset = bound(offset, 1, 255 - count); address[] memory wearerBatch = new address[](count); @@ -693,37 +593,19 @@ contract MintHatsTest is TestSetup { // create the hats and populate the minting arrays for (uint256 i = 0; i < count; ++i) { - uint256 id = hats.createHat( - secondHatId, - "", - 1, - topHatWearer, - topHatWearer, - false, - "" - ); + uint256 id = hats.createHat(secondHatId, "", 1, topHatWearer, topHatWearer, false, ""); hatBatch[i] = id; - wearerBatch[i] = address(uint160(10000 + i)); + wearerBatch[i] = address(uint160(10_000 + i)); } // add `offset` number of hats to the batch, without corresponding wearers for (uint256 j = 0; j < offset; ++j) { - uint256 id = hats.createHat( - secondHatId, - "", - 1, - topHatWearer, - topHatWearer, - false, - "" - ); + uint256 id = hats.createHat(secondHatId, "", 1, topHatWearer, topHatWearer, false, ""); hatBatch[count - 1 + j] = id; } - vm.expectRevert( - abi.encodeWithSelector(HatsErrors.BatchArrayLengthMismatch.selector) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.BatchArrayLengthMismatch.selector)); hats.batchMintHats(hatBatch, wearerBatch); } @@ -731,17 +613,7 @@ contract MintHatsTest is TestSetup { contract ViewHatTests is TestSetup2 { function testViewHat1() public { - ( - , - , - , - , - rettoggle, - retimageURI, - retlastHatId, - retmutable, - retactive - ) = hats.viewHat(secondHatId); + (,,,, rettoggle, retimageURI, retlastHatId, retmutable, retactive) = hats.viewHat(secondHatId); assertEq(rettoggle, address(333)); assertEq(retimageURI, secondHatImageURI); @@ -751,8 +623,7 @@ contract ViewHatTests is TestSetup2 { } function testViewHat2() public { - (retdetails, retmaxSupply, retsupply, reteligibility, , , , , ) = hats - .viewHat(secondHatId); + (retdetails, retmaxSupply, retsupply, reteligibility,,,,,) = hats.viewHat(secondHatId); // 3-1. viewHat - displays params as expected assertEq(retdetails, "second hat"); @@ -762,17 +633,7 @@ contract ViewHatTests is TestSetup2 { } function testViewHatOfTopHat1() public { - ( - , - , - , - , - rettoggle, - retimageURI, - retlastHatId, - retmutable, - retactive - ) = hats.viewHat(topHatId); + (,,,, rettoggle, retimageURI, retlastHatId, retmutable, retactive) = hats.viewHat(topHatId); assertEq(rettoggle, address(0)); assertEq(retlastHatId, 1); @@ -781,8 +642,7 @@ contract ViewHatTests is TestSetup2 { } function testViewHatOfTopHat2() public { - (retdetails, retmaxSupply, retsupply, reteligibility, , , , , ) = hats - .viewHat(topHatId); + (retdetails, retmaxSupply, retsupply, reteligibility,,,,,) = hats.viewHat(topHatId); assertEq(retdetails, "tophat"); assertEq(retmaxSupply, 1); @@ -800,27 +660,29 @@ contract ViewHatTests is TestSetup2 { } } -contract TransferHatTests is TestSetup2 { +contract TransferHatTests is TestSetupMutable { + function setUp() public override { + super.setUp(); + + vm.prank(address(topHatWearer)); + + hats.mintHat(secondHatId, secondWearer); + } + function testCannotTransferHatFromNonAdmin() public { // expect NotAdmin error - vm.expectRevert( - abi.encodeWithSelector( - HatsErrors.NotAdmin.selector, - nonWearer, - secondHatId - ) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotAdmin.selector, nonWearer, secondHatId)); // 4-1. transfer from wearer / other wallet vm.prank(address(nonWearer)); hats.transferHat(secondHatId, secondWearer, thirdWearer); } - function testTransferHat() public { + function testTransferMutableHat() public { uint32 hatSupply = hats.hatSupply(secondHatId); - // 4-2. transfer from admin vm.prank(address(topHatWearer)); + hats.transferHat(secondHatId, secondWearer, thirdWearer); // assert secondWearer is no longer wearing @@ -834,6 +696,37 @@ contract TransferHatTests is TestSetup2 { // assert hatSupply is not incremented assertEq(hats.hatSupply(secondHatId), hatSupply); } + + function testCannotTransferHatToExistingWearer() public { + vm.startPrank(topHatWearer); + + hats.mintHat(secondHatId, thirdWearer); + + vm.expectRevert(abi.encodeWithSelector(HatsErrors.AlreadyWearingHat.selector, thirdWearer, secondHatId)); + + hats.transferHat(secondHatId, secondWearer, thirdWearer); + } + + function testCannotTransferHatToRevokedWearer() public { + vm.startPrank(topHatWearer); + + // mint the hat + hats.mintHat(secondHatId, thirdWearer); + + // revoke the hat, but do not burn it + // mock calls to eligibility contract to return (eligible = true, standing = true) + vm.mockCall( + address(_eligibility), + abi.encodeWithSignature("getWearerStatus(address,uint256)", thirdWearer, secondHatId), + abi.encode(false, true) + ); + + assertFalse(hats.isWearerOfHat(thirdWearer, secondHatId)); + // transfer should revert + vm.expectRevert(abi.encodeWithSelector(HatsErrors.AlreadyWearingHat.selector, thirdWearer, secondHatId)); + + hats.transferHat(secondHatId, secondWearer, thirdWearer); + } } contract EligibilitySetHatsTests is TestSetup2 { @@ -841,10 +734,6 @@ contract EligibilitySetHatsTests is TestSetup2 { // confirm second hat is worn by second Wearer assertTrue(hats.isWearerOfHat(secondWearer, secondHatId)); - // expectEmit WearerStatus - should be wearing, in good standing - // vm.expectEmit(false, false, false, true); - // emit WearerStatus(secondHatId, secondWearer, true, true); - // 5-6. do not revoke hat vm.prank(address(_eligibility)); hats.setHatWearerStatus(secondHatId, secondWearer, true, true); @@ -855,10 +744,6 @@ contract EligibilitySetHatsTests is TestSetup2 { function testRevokeHatFromIneligibleWearerInGoodStanding() public { uint32 hatSupply = hats.hatSupply(secondHatId); - // expectEmit WearerStatus - should not be wearing, in good standing - // vm.expectEmit(false, false, false, true); - // emit WearerStatus(secondHatId, secondWearer, false, true); - // 5-8a. revoke hat vm.prank(address(_eligibility)); hats.setHatWearerStatus(secondHatId, secondWearer, false, true); @@ -870,9 +755,9 @@ contract EligibilitySetHatsTests is TestSetup2 { } function testRevokeHatFromIneligibleWearerInBadStanding() public { - // expectEmit WearerStatus - should not be wearing, in bad standing - // vm.expectEmit(false, false, false, true); - // emit WearerStatus(secondHatId, secondWearer, false, false); + // expectEmit WearerStandingChanged + vm.expectEmit(false, false, false, true); + emit WearerStandingChanged(secondHatId, secondWearer, false); // 5-8b. revoke hat with bad standing vm.prank(address(_eligibility)); @@ -882,9 +767,9 @@ contract EligibilitySetHatsTests is TestSetup2 { } function testRevokeHatFromEligibleWearerInBadStanding() public { - // expectEmit WearerStatus - should not be wearing, in bad standing - // vm.expectEmit(false, false, false, true); - // emit WearerStatus(secondHatId, secondWearer, true, false); + // expectEmit WearerStandingChanged + vm.expectEmit(false, false, false, true); + emit WearerStandingChanged(secondHatId, secondWearer, false); // 5-8b. revoke hat with bad standing vm.prank(address(_eligibility)); @@ -893,17 +778,9 @@ contract EligibilitySetHatsTests is TestSetup2 { assertFalse(hats.isInGoodStanding(secondWearer, secondHatId)); } - // TODO: do we need to test the following functionality? - // in the MVP, the following call should never happen: - // setHatWearerStatus(secondHatId, secondWearer, false, false); - // i.e. WearerStatus - wearing, in bad standing - // in a future state, this call could happen if there were less severe penalities than revocations - function testCannotRevokeHatAsNonWearer() public { // expect NotHatsEligibility error - vm.expectRevert( - abi.encodeWithSelector(HatsErrors.NotHatsEligibility.selector) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotHatsEligibility.selector)); // attempt to setHatWearerStatus as non-wearer vm.prank(address(nonWearer)); @@ -926,11 +803,7 @@ contract EligibilitySetHatsTests is TestSetup2 { // mock calls to eligibility contract to return (eligible = true, standing = true) vm.mockCall( address(_eligibility), - abi.encodeWithSignature( - "getWearerStatus(address,uint256)", - secondWearer, - secondHatId - ), + abi.encodeWithSignature("getWearerStatus(address,uint256)", secondWearer, secondHatId), abi.encode(true, true) ); @@ -943,16 +816,29 @@ contract EligibilitySetHatsTests is TestSetup2 { // assert hatSupply is not incremented assertEq(hats.hatSupply(secondHatId), hatSupply); } + + function testSetWearerBackInGoodStanding() public { + // set to bad standing + vm.startPrank(address(_eligibility)); + + vm.expectEmit(false, false, false, true); + emit WearerStandingChanged(secondHatId, secondWearer, false); + + hats.setHatWearerStatus(secondHatId, secondWearer, false, false); + + // set back to good standing + + vm.expectEmit(false, false, false, true); + emit WearerStandingChanged(secondHatId, secondWearer, true); + + hats.setHatWearerStatus(secondHatId, secondWearer, false, true); + } } -contract EligibilityGetHatsTests is TestSetup2 { - function testCannotGetHatWearerStandingNoFunctionInEligibilityContract() - public - { +contract EligibilityCheckHatsTests is TestSetup2 { + function testCannotGetHatWearerStandingNoFunctionInEligibilityContract() public { // expect NotHatsEligibility error - vm.expectRevert( - abi.encodeWithSelector(HatsErrors.NotHatsEligibility.selector) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotHatsEligibility.selector)); // fail attempt to pull wearer status from eligibility hats.checkHatWearerStatus(secondHatId, secondWearer); @@ -964,18 +850,10 @@ contract EligibilityGetHatsTests is TestSetup2 { // confirm second hat is worn by second Wearer assertTrue(hats.isWearerOfHat(secondWearer, secondHatId)); - // expectEmit WearerStatus - should be wearing, in good standing - // vm.expectEmit(false, false, false, true); - // emit WearerStatus(secondHatId, secondWearer, true, true); - // mock calls to eligibility contract to return (eligible = true, standing = true) vm.mockCall( address(_eligibility), - abi.encodeWithSignature( - "getWearerStatus(address,uint256)", - secondWearer, - secondHatId - ), + abi.encodeWithSignature("getWearerStatus(address,uint256)", secondWearer, secondHatId), abi.encode(true, true) ); @@ -988,23 +866,13 @@ contract EligibilityGetHatsTests is TestSetup2 { assertEq(hats.hatSupply(secondHatId), hatSupply); } - function testCheckEligibilityToRevokeHatFromIneligibleWearerInGoodStanding() - public - { + function testCheckEligibilityToRevokeHatFromIneligibleWearerInGoodStanding() public { uint32 hatSupply = hats.hatSupply(secondHatId); - // expectEmit WearerStatus - should not be wearing, in good standing - // vm.expectEmit(false, false, false, true); - // emit WearerStatus(secondHatId, secondWearer, false, true); - // mock calls to eligibility contract to return (eligible = false, standing = true) vm.mockCall( address(_eligibility), - abi.encodeWithSignature( - "getWearerStatus(address,uint256)", - secondWearer, - secondHatId - ), + abi.encodeWithSignature("getWearerStatus(address,uint256)", secondWearer, secondHatId), abi.encode(false, true) ); @@ -1017,23 +885,17 @@ contract EligibilityGetHatsTests is TestSetup2 { assertEq(hats.hatSupply(secondHatId), --hatSupply); } - function testCheckEligibilityToRevokeHatFromIneligibleWearerInBadStanding() - public - { + function testCheckEligibilityToRevokeHatFromIneligibleWearerInBadStanding() public { uint32 hatSupply = hats.hatSupply(secondHatId); - // expectEmit WearerStatus - should not be wearing, in bad standing - // vm.expectEmit(false, false, false, true); - // emit WearerStatus(secondHatId, secondWearer, false, false); + // expectEmit WearerStandingChanged + vm.expectEmit(false, false, false, true); + emit WearerStandingChanged(secondHatId, secondWearer, false); // mock calls to eligibility contract to return (eligible = false, standing = false) vm.mockCall( address(_eligibility), - abi.encodeWithSignature( - "getWearerStatus(address,uint256)", - secondWearer, - secondHatId - ), + abi.encodeWithSignature("getWearerStatus(address,uint256)", secondWearer, secondHatId), abi.encode(false, false) ); @@ -1046,23 +908,17 @@ contract EligibilityGetHatsTests is TestSetup2 { assertEq(hats.hatSupply(secondHatId), --hatSupply); } - function testCheckEligibilityToRevokeHatFromEligibleWearerInBadStanding() - public - { + function testCheckEligibilityToRevokeHatFromEligibleWearerInBadStanding() public { uint32 hatSupply = hats.hatSupply(secondHatId); - // expectEmit WearerStatus - should not be wearing, in bad standing - // vm.expectEmit(false, false, false, true); - // emit WearerStatus(secondHatId, secondWearer, true, false); + // expectEmit WearerStandingChanged + vm.expectEmit(false, false, false, true); + emit WearerStandingChanged(secondHatId, secondWearer, false); // mock calls to eligibility contract to return (eligible = true, standing = false) vm.mockCall( address(_eligibility), - abi.encodeWithSignature( - "getWearerStatus(address,uint256)", - secondWearer, - secondHatId - ), + abi.encodeWithSignature("getWearerStatus(address,uint256)", secondWearer, secondHatId), abi.encode(true, false) ); @@ -1074,6 +930,34 @@ contract EligibilityGetHatsTests is TestSetup2 { // assert hatSupply is decremented assertEq(hats.hatSupply(secondHatId), --hatSupply); } + + function testCheckWearerBackInGoodStanding() public { + // set to bad standing + // mock call to eligibility contract to return (eligible = true, standing = false) + vm.mockCall( + address(_eligibility), + abi.encodeWithSignature("getWearerStatus(address,uint256)", secondWearer, secondHatId), + abi.encode(true, false) + ); + + vm.expectEmit(false, false, false, true); + emit WearerStandingChanged(secondHatId, secondWearer, false); + + hats.checkHatWearerStatus(secondHatId, secondWearer); + + // set back to good standing + // mock call to eligibility contract to return (eligible = true, standing = true) + vm.mockCall( + address(_eligibility), + abi.encodeWithSignature("getWearerStatus(address,uint256)", secondWearer, secondHatId), + abi.encode(true, true) + ); + + vm.expectEmit(false, false, false, true); + emit WearerStandingChanged(secondHatId, secondWearer, true); + + hats.checkHatWearerStatus(secondHatId, secondWearer); + } } contract RenounceHatsTest is TestSetup2 { @@ -1090,9 +974,7 @@ contract RenounceHatsTest is TestSetup2 { function testCannotRenounceHatAsNonWearer() public { // expect NotHatWearer error - vm.expectRevert( - abi.encodeWithSelector(HatsErrors.NotHatWearer.selector) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotHatWearer.selector)); // 6-1. attempt to renounce from non-wearer vm.prank(address(nonWearer)); @@ -1103,7 +985,7 @@ contract RenounceHatsTest is TestSetup2 { contract ToggleSetHatsTest is TestSetup2 { function testDeactivateHat() public { // confirm second hat is active - (, , , , , , , , active_) = hats.viewHat(secondHatId); + (,,,,,,,, active_) = hats.viewHat(secondHatId); assertTrue(active_); assertTrue(hats.isWearerOfHat(secondWearer, secondHatId)); @@ -1114,16 +996,14 @@ contract ToggleSetHatsTest is TestSetup2 { // 7-2. change Hat Status true->false via setHatStatus vm.prank(address(_toggle)); hats.setHatStatus(secondHatId, false); - (, , , , , , , mutable_, ) = hats.viewHat(secondHatId); + (,,,,,,, mutable_,) = hats.viewHat(secondHatId); assertFalse(mutable_); assertFalse(hats.isWearerOfHat(secondWearer, secondHatId)); } function testCannotDeactivateHatAsNonWearer() public { // expect NotHatstoggle error - vm.expectRevert( - abi.encodeWithSelector(HatsErrors.NotHatsToggle.selector) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotHatsToggle.selector)); // 7-1. attempt to change Hat Status hat from non-wearer vm.prank(address(nonWearer)); @@ -1142,7 +1022,7 @@ contract ToggleSetHatsTest is TestSetup2 { // changeHatStatus false->true via setHatStatus vm.prank(address(_toggle)); hats.setHatStatus(secondHatId, true); - (, , , , , , , , active_) = hats.viewHat(secondHatId); + (,,,,,,,, active_) = hats.viewHat(secondHatId); assertTrue(active_); assertTrue(hats.isWearerOfHat(secondWearer, secondHatId)); } @@ -1153,9 +1033,7 @@ contract ToggleSetHatsTest is TestSetup2 { hats.setHatStatus(secondHatId, false); // expect NotHatstoggle error - vm.expectRevert( - abi.encodeWithSelector(HatsErrors.NotHatsToggle.selector) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotHatsToggle.selector)); // 8-1. attempt to changeHatStatus hat from wearer / other wallet / admin vm.prank(address(nonWearer)); @@ -1166,9 +1044,7 @@ contract ToggleSetHatsTest is TestSetup2 { contract ToggleGetHatsTest is TestSetup2 { function testCannotCheckHatStatusNoFunctionInToggleContract() public { // expect NotHatsToggle error - vm.expectRevert( - abi.encodeWithSelector(HatsErrors.NotHatsToggle.selector) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotHatsToggle.selector)); // fail attempt to pull Hat Status hats.checkHatStatus(secondHatId); @@ -1180,15 +1056,11 @@ contract ToggleGetHatsTest is TestSetup2 { emit HatStatusChanged(secondHatId, false); // encode mock for function inside toggle contract to return false - vm.mockCall( - address(_toggle), - abi.encodeWithSignature("getHatStatus(uint256)", secondHatId), - abi.encode(false) - ); + vm.mockCall(address(_toggle), abi.encodeWithSignature("getHatStatus(uint256)", secondHatId), abi.encode(false)); // call mocked function within checkHatStatus to deactivate hats.checkHatStatus(secondHatId); - (, , , , , , , mutable_, ) = hats.viewHat(secondHatId); + (,,,,,,, mutable_,) = hats.viewHat(secondHatId); assertFalse(mutable_); assertFalse(hats.isWearerOfHat(secondWearer, secondHatId)); } @@ -1203,39 +1075,19 @@ contract ToggleGetHatsTest is TestSetup2 { emit HatStatusChanged(secondHatId, true); // encode mock for function inside toggle contract to return false - vm.mockCall( - address(_toggle), - abi.encodeWithSignature("getHatStatus(uint256)", secondHatId), - abi.encode(true) - ); + vm.mockCall(address(_toggle), abi.encodeWithSignature("getHatStatus(uint256)", secondHatId), abi.encode(true)); // call mocked function within checkHatStatus to reactivate hats.checkHatStatus(secondHatId); - (, , , , , , , , active_) = hats.viewHat(secondHatId); + (,,,,,,,, active_) = hats.viewHat(secondHatId); assertTrue(active_); assertTrue(hats.isWearerOfHat(secondWearer, secondHatId)); } } -contract MutabilityTests is TestSetup { - function setUp() public override { - super.setUp(); - - // create a mutable Hat - vm.prank(topHatWearer); - secondHatId = hats.createHat( - topHatId, - "mutable hat", - 2, // maxSupply - _eligibility, - _toggle, - true, - secondHatImageURI - ); - } - +contract MutabilityTests is TestSetupMutable { function testAdminCanMakeMutableHatImmutable() public { - (, , , , , , , mutable_, ) = hats.viewHat(secondHatId); + (,,,,,,, mutable_,) = hats.viewHat(secondHatId); assertTrue(mutable_); vm.expectEmit(false, false, false, true); @@ -1244,7 +1096,7 @@ contract MutabilityTests is TestSetup { vm.prank(topHatWearer); hats.makeHatImmutable(secondHatId); - (, , , , , , , mutable_, ) = hats.viewHat(secondHatId); + (,,,,,,, mutable_,) = hats.viewHat(secondHatId); assertFalse(mutable_); } @@ -1261,7 +1113,7 @@ contract MutabilityTests is TestSetup { secondHatImageURI ); - (, , , , , , , mutable_, ) = hats.viewHat(thirdHatId); + (,,,,,,, mutable_,) = hats.viewHat(thirdHatId); assertFalse(mutable_); vm.expectRevert(abi.encodeWithSelector(HatsErrors.Immutable.selector)); @@ -1271,13 +1123,7 @@ contract MutabilityTests is TestSetup { } function testNonAdminCannotMakeMutableHatImmutable() public { - vm.expectRevert( - abi.encodeWithSelector( - HatsErrors.NotAdmin.selector, - address(this), - secondHatId - ) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotAdmin.selector, address(this), secondHatId)); hats.makeHatImmutable(secondHatId); } @@ -1294,7 +1140,7 @@ contract MutabilityTests is TestSetup { secondHatImageURI ); - (, , , , , , , mutable_, ) = hats.viewHat(thirdHatId); + (,,,,,,, mutable_,) = hats.viewHat(thirdHatId); assertFalse(mutable_); vm.expectRevert(abi.encodeWithSelector(HatsErrors.Immutable.selector)); @@ -1315,6 +1161,60 @@ contract MutabilityTests is TestSetup { vm.stopPrank(); } + function testTopHatCanChangeOwnDetails() public { + string memory new_ = "should work"; + + vm.expectEmit(false, false, false, true); + emit HatDetailsChanged(topHatId, new_); + + vm.prank(topHatWearer); + hats.changeHatDetails(topHatId, new_); + + (string memory changed,,,,,,,,) = hats.viewHat(topHatId); + assertEq(changed, new_); + } + + function testTopHatCanChangeOwnImageURI() public { + string memory new_ = "should work"; + + vm.expectEmit(false, false, false, true); + emit HatImageURIChanged(topHatId, new_); + + vm.prank(topHatWearer); + hats.changeHatImageURI(topHatId, new_); + + (,,,,, string memory changed,,,) = hats.viewHat(topHatId); + assertEq(changed, new_); + } + + function testTopHatCannotChangeOtherProperties() public { + vm.startPrank(topHatWearer); + + (,,,,,,, mutable_,) = hats.viewHat(topHatId); + assertFalse(mutable_); + + vm.expectRevert(abi.encodeWithSelector(HatsErrors.Immutable.selector)); + hats.changeHatEligibility(topHatId, address(this)); + + vm.expectRevert(abi.encodeWithSelector(HatsErrors.Immutable.selector)); + hats.changeHatToggle(topHatId, address(this)); + + vm.expectRevert(abi.encodeWithSelector(HatsErrors.Immutable.selector)); + hats.changeHatMaxSupply(topHatId, uint32(100)); + + vm.stopPrank(); + } + + function testNonTopHatCannotChangeTopHatProperties() public { + vm.startPrank(secondWearer); + + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotAdmin.selector, secondWearer, topHatId)); + hats.changeHatImageURI(topHatId, "should fail"); + + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotAdmin.selector, secondWearer, topHatId)); + hats.changeHatDetails(topHatId, "should also fail"); + } + function testAdminCanChangeMutableHatDetails() public { string memory new_ = "should work"; @@ -1324,7 +1224,7 @@ contract MutabilityTests is TestSetup { vm.prank(topHatWearer); hats.changeHatDetails(secondHatId, new_); - (string memory changed, , , , , , , , ) = hats.viewHat(secondHatId); + (string memory changed,,,,,,,,) = hats.viewHat(secondHatId); assertEq(changed, new_); } @@ -1337,7 +1237,7 @@ contract MutabilityTests is TestSetup { vm.prank(topHatWearer); hats.changeHatEligibility(secondHatId, new_); - (, , , address changed, , , , , ) = hats.viewHat(secondHatId); + (,,, address changed,,,,,) = hats.viewHat(secondHatId); assertEq(changed, new_); } @@ -1350,7 +1250,7 @@ contract MutabilityTests is TestSetup { vm.prank(topHatWearer); hats.changeHatToggle(secondHatId, new_); - (, , , , address changed, , , , ) = hats.viewHat(secondHatId); + (,,,, address changed,,,,) = hats.viewHat(secondHatId); assertEq(changed, new_); } @@ -1363,7 +1263,7 @@ contract MutabilityTests is TestSetup { vm.prank(topHatWearer); hats.changeHatImageURI(secondHatId, new_); - (, , , , , string memory changed, , , ) = hats.viewHat(secondHatId); + (,,,,, string memory changed,,,) = hats.viewHat(secondHatId); assertEq(changed, new_); } @@ -1376,13 +1276,11 @@ contract MutabilityTests is TestSetup { vm.prank(topHatWearer); hats.changeHatMaxSupply(secondHatId, new_); - (, uint32 changed, , , , , , , ) = hats.viewHat(secondHatId); + (, uint32 changed,,,,,,,) = hats.viewHat(secondHatId); assertEq(changed, new_); } - function testAdminCanDecreaseMutableHatMaxSupplyToAboveCurrentSupply() - public - { + function testAdminCanDecreaseMutableHatMaxSupplyToAboveCurrentSupply() public { uint32 new_ = 100; uint32 decreased = 5; @@ -1395,13 +1293,11 @@ contract MutabilityTests is TestSetup { hats.changeHatMaxSupply(secondHatId, decreased); - (, uint32 changed, , , , , , , ) = hats.viewHat(secondHatId); + (, uint32 changed,,,,,,,) = hats.viewHat(secondHatId); assertEq(changed, decreased); } - function testAdminCanDecreaseMutableHatMaxSupplyToEqualToCurrentSupply() - public - { + function testAdminCanDecreaseMutableHatMaxSupplyToEqualToCurrentSupply() public { uint32 new_ = 100; uint32 decreased = 1; @@ -1414,13 +1310,11 @@ contract MutabilityTests is TestSetup { hats.changeHatMaxSupply(secondHatId, decreased); - (, uint32 changed, , , , , , , ) = hats.viewHat(secondHatId); + (, uint32 changed,,,,,,,) = hats.viewHat(secondHatId); assertEq(changed, decreased); } - function testAdminCannotDecreaseMutableHatMaxSupplyBelowCurrentSupply() - public - { + function testAdminCannotDecreaseMutableHatMaxSupplyBelowCurrentSupply() public { uint32 new_ = 100; uint32 decreased = 1; @@ -1429,33 +1323,451 @@ contract MutabilityTests is TestSetup { hats.mintHat(secondHatId, secondWearer); hats.mintHat(secondHatId, thirdWearer); - vm.expectRevert( - abi.encodeWithSelector(HatsErrors.NewMaxSupplyTooLow.selector) - ); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NewMaxSupplyTooLow.selector)); hats.changeHatMaxSupply(secondHatId, decreased); } + + function testAdminCannotTransferImmutableHat() public { + vm.startPrank(topHatWearer); + thirdHatId = hats.createHat( + topHatId, + "immutable hat", + 3, // maxSupply + _eligibility, + _toggle, + false, + secondHatImageURI + ); + + (,,,,,,, mutable_,) = hats.viewHat(thirdHatId); + assertFalse(mutable_); + + hats.mintHat(thirdHatId, thirdWearer); + + vm.expectRevert(abi.encodeWithSelector(HatsErrors.Immutable.selector)); + hats.transferHat(thirdHatId, thirdWearer, secondWearer); + } } contract OverridesHatTests is TestSetup2 { - function testFailSetApprovalForAll() public { + function testFailSetApprovalForAll() public view { hats.setApprovalForAll(topHatWearer, true); } - function testFailSafeTransferFrom() public { + function testFailSafeTransferFrom() public view { bytes memory b = bytes(""); hats.safeTransferFrom(secondWearer, thirdWearer, secondHatId, 1, b); } - // TODO: test for a specific URI output - function testCreateUri() public { + function testCreateUri() public view { string memory jsonUri = hats.uri(secondHatId); console2.log("encoded URI", jsonUri); } - // TODO: test for a specific URI output - function testCreateUriForTopHat() public { + function testCreateUriForTopHat() public view { string memory jsonUri = hats.uri(topHatId); console2.log("encoded URI", jsonUri); } } + +contract LinkHatsTests is TestSetup2 { + uint256 internal secondTopHatId; + uint32 topHatDomain; + uint32 secondTopHatDomain; + uint256 level13HatId; + uint256 level14HatId; + + function setUp() public override { + super.setUp(); + + secondTopHatId = hats.mintTopHat(thirdWearer, "for linking", "http://www.tophat.com/"); + + topHatDomain = hats.getTophatDomain(topHatId); + secondTopHatDomain = hats.getTophatDomain(secondTopHatId); + level13HatId = 0x0000000100050001000100010001000100010001000100010001000100010000; + + vm.prank(topHatWearer); + level14HatId = hats.createHat(level13HatId, "level 14 hat", _maxSupply, _eligibility, _toggle, false, ""); + } + + function testRequestLinking() public { + vm.prank(thirdWearer); + + vm.expectEmit(true, true, true, true); + emit TopHatLinkRequested(secondTopHatDomain, secondHatId); + + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + + assertEq(secondHatId, hats.linkedTreeRequests(secondTopHatDomain)); + } + + function testWearerCanApproveLinkRequest() public { + // request + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + + // approve + vm.prank(secondWearer); + + vm.expectEmit(true, true, true, true); + emit TopHatLinked(secondTopHatDomain, secondHatId); + + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + + assertFalse(hats.isTopHat(secondTopHatId)); + assertEq(hats.getHatLevel(secondTopHatId), 2); + assertTrue(hats.isAdminOfHat(secondWearer, secondTopHatId)); + assertEq(hats.linkedTreeRequests(secondTopHatDomain), 0); + } + + function testAdminCanApproveLinkRequest() public { + // request + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + + // approve + vm.prank(topHatWearer); + + vm.expectEmit(true, true, true, true); + emit TopHatLinked(secondTopHatDomain, secondHatId); + + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + + assertFalse(hats.isTopHat(secondTopHatId)); + assertEq(hats.getHatLevel(secondTopHatId), 2); + assertTrue(hats.isAdminOfHat(secondWearer, secondTopHatId)); + assertEq(hats.linkedTreeRequests(secondTopHatDomain), 0); + } + + function testAdminCanApproveLinkToLastLevelHat() public { + // request + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, level14HatId); + + // approve + vm.prank(topHatWearer); + + vm.expectEmit(true, true, true, true); + emit TopHatLinked(secondTopHatDomain, level14HatId); + + hats.approveLinkTopHatToTree(secondTopHatDomain, level14HatId); + + assertFalse(hats.isTopHat(secondTopHatId)); + assertEq(hats.getHatLevel(secondTopHatId), 15); + assertTrue(hats.isAdminOfHat(topHatWearer, secondTopHatId)); + assertEq(hats.linkedTreeRequests(secondTopHatDomain), 0); + } + + function testWearerCanApproveLinkToLastLevelHat() public { + // mint last level hat to wearer + vm.prank(topHatWearer); + hats.mintHat(level14HatId, fourthWearer); + + // request + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, level14HatId); + + // approve + vm.prank(fourthWearer); + + vm.expectEmit(true, true, true, true); + emit TopHatLinked(secondTopHatDomain, level14HatId); + + hats.approveLinkTopHatToTree(secondTopHatDomain, level14HatId); + + assertFalse(hats.isTopHat(secondTopHatId)); + assertEq(hats.getHatLevel(secondTopHatId), 15); + assertTrue(hats.isAdminOfHat(fourthWearer, secondTopHatId)); + assertEq(hats.linkedTreeRequests(secondTopHatDomain), 0); + } + + function testNonAdminNonWearerCannotApproveLinktoLastLevelHat() public { + // mint last level hat to wearer + vm.prank(topHatWearer); + hats.mintHat(level14HatId, fourthWearer); + + // request + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, level14HatId); + + // attempt to approve from non-admin and non-wearer of new admin hat + assertFalse(hats.isWearerOfHat(secondWearer, level14HatId)); + assertFalse(hats.isAdminOfHat(secondWearer, level14HatId)); + + vm.prank(secondWearer); + + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotAdminOrWearer.selector)); + hats.approveLinkTopHatToTree(secondTopHatDomain, level14HatId); + } + + function testCannotApproveUnrequestedLink() public { + vm.prank(topHatWearer); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.LinkageNotRequested.selector)); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + } + + function testAdminCanRelinkTopHatWithinTree() public { + // first link + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(topHatWearer); + vm.expectEmit(true, true, true, true); + emit TopHatLinked(secondTopHatDomain, secondHatId); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + assertFalse(hats.isTopHat(secondTopHatId)); + assertEq(hats.getHatLevel(secondTopHatId), 2); + + // relink + vm.prank(topHatWearer); + vm.expectEmit(true, true, true, true); + emit TopHatLinked(secondTopHatDomain, topHatId); + hats.relinkTopHatWithinTree(secondTopHatDomain, topHatId); + assertFalse(hats.isTopHat(secondTopHatId)); + assertEq(hats.getHatLevel(secondTopHatId), 1); + } + + function testNewAdminWearerCanRelinkTopHatWithinTree() public { + vm.startPrank(secondWearer); + uint256 level2HatId = hats.createHat(secondHatId, "", _maxSupply, _eligibility, _toggle, false, ""); + hats.mintHat(level2HatId, fourthWearer); + vm.stopPrank(); + // first link + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, level2HatId); + vm.prank(fourthWearer); + hats.approveLinkTopHatToTree(secondTopHatDomain, level2HatId); + assertEq(hats.getHatLevel(secondTopHatId), 3); + + // relink to secondHatId + vm.prank(secondWearer); + vm.expectEmit(true, true, true, true); + emit TopHatLinked(secondTopHatDomain, secondHatId); + hats.relinkTopHatWithinTree(secondTopHatDomain, secondHatId); + assertFalse(hats.isTopHat(secondTopHatId)); + assertEq(hats.getHatLevel(secondTopHatId), 2); + } + + function testNewAdminAdminCanRelinkToLastLevelWithinTree() public { + // first link + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(topHatWearer); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + + // relink + vm.prank(topHatWearer); + vm.expectEmit(true, true, true, true); + emit TopHatLinked(secondTopHatDomain, level14HatId); + hats.relinkTopHatWithinTree(secondTopHatDomain, level14HatId); + assertFalse(hats.isTopHat(secondTopHatId)); + assertEq(hats.getHatLevel(secondTopHatId), 15); + assertTrue(hats.isAdminOfHat(topHatWearer, secondTopHatId)); + assertEq(hats.linkedTreeRequests(secondTopHatDomain), 0); + } + + function testNewAdminNonAdminNonWearerCannotRelink() public { + // first link to secondHat + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(topHatWearer); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + assertTrue(hats.isAdminOfHat(secondWearer, secondTopHatId)); + + // attempt relink to tophatId from secondWearer, who is an admin of secondTopHatId but not an admin or wearer of tophatId + vm.startPrank(secondWearer); + vm.expectRevert( + abi.encodeWithSelector(HatsErrors.NotAdmin.selector, secondWearer, hats.buildHatId(topHatId, 1)) + ); + hats.relinkTopHatWithinTree(secondTopHatDomain, topHatId); + } + + function testNewAdminNonAdminCannotRelinkToLastLevelWithinTree() public { + // first link to secondHat + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(topHatWearer); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + assertTrue(hats.isAdminOfHat(secondWearer, secondTopHatId)); + + // attempt relink to 14th level from secondhatwearer, who is an admin of secondTopHatId but not an admin or wearer of tophatId + vm.startPrank(secondWearer); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotAdminOrWearer.selector)); + hats.relinkTopHatWithinTree(secondTopHatDomain, level14HatId); + } + + function testTreeRootNonAdminCannotRelink() public { + // create another hat under tophat + vm.prank(topHatWearer); + uint256 newHatId = hats.createHat(topHatId, "", _maxSupply, _eligibility, _toggle, false, ""); + + // first link to secondHat + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(topHatWearer); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + + // attempt relink to new hat from secondWearer + vm.startPrank(secondWearer); + vm.expectRevert( + abi.encodeWithSelector(HatsErrors.NotAdmin.selector, secondWearer, hats.buildHatId(newHatId, 1)) + ); + hats.relinkTopHatWithinTree(secondTopHatDomain, newHatId); + } + + function testAdminCanRequestNewLink() public { + // first link to secondHat + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(topHatWearer); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + assertEq(hats.linkedTreeRequests(secondTopHatDomain), 0); + + // request new link from secondWearer + vm.prank(secondWearer); + vm.expectEmit(true, true, true, true); + emit TopHatLinkRequested(secondTopHatDomain, topHatId); + hats.requestLinkTopHatToTree(secondTopHatDomain, topHatId); + assertEq(hats.linkedTreeRequests(secondTopHatDomain), topHatId); + } + + function testNewAdminAdminCanApproveNewLinkRequest() public { + // first link to secondHat + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(topHatWearer); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + + // request new link from secondWearer + vm.prank(secondWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, topHatId); + + // approve new link from tophatwearer + vm.prank(topHatWearer); + vm.expectEmit(true, true, true, true); + emit TopHatLinked(secondTopHatDomain, topHatId); + hats.approveLinkTopHatToTree(secondTopHatDomain, topHatId); + assertEq(hats.linkedTreeRequests(secondTopHatDomain), 0); + assertEq(hats.getHatLevel(secondTopHatId), 1); + } + + function testLinkedTopHatWearerCannotRequestNewLink() public { + // first link + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(topHatWearer); + vm.expectEmit(true, true, true, true); + emit TopHatLinked(secondTopHatDomain, secondHatId); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + assertFalse(hats.isTopHat(secondTopHatId)); + assertEq(hats.getHatLevel(secondTopHatId), 2); + + // attempt second link from wearer + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotAdmin.selector, thirdWearer, secondTopHatId)); + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, topHatId); + } + + function testPreventingCircularLinking() public { + // request + vm.prank(topHatWearer); + hats.requestLinkTopHatToTree(topHatDomain, secondHatId); + + // try approving + vm.prank(topHatWearer); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.CircularLinkage.selector)); + hats.approveLinkTopHatToTree(topHatDomain, secondHatId); + + // test a recursive call + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(topHatWearer); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + + vm.prank(topHatWearer); + hats.requestLinkTopHatToTree(topHatDomain, secondTopHatId); + vm.prank(topHatWearer); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.CircularLinkage.selector)); + hats.approveLinkTopHatToTree(topHatDomain, secondTopHatId); + } + + function testRelinkingCannotCreateCircularLink() public { + // first link, under secondHat + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(topHatWearer); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + + // second link, under first link + uint256 thirdTopHatId = hats.mintTopHat(fourthWearer, "for linking", "http://www.tophat.com/"); + uint32 thirdTopHatDomain = hats.getTophatDomain(thirdTopHatId); + + vm.prank(fourthWearer); + hats.requestLinkTopHatToTree(thirdTopHatDomain, secondTopHatId); + vm.prank(topHatWearer); + hats.approveLinkTopHatToTree(thirdTopHatDomain, secondTopHatId); + + // try relink second tophat under third tophat + vm.prank(topHatWearer); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.CircularLinkage.selector)); + hats.relinkTopHatWithinTree(secondTopHatDomain, thirdTopHatId); + } + + function testCannotCrossTreeRelink() public { + // create third tophat + uint256 thirdTopHatId = hats.mintTopHat(fourthWearer, "invalid relink recipient", "http://www.tophat.com/"); + + // link secondTopHat + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(secondWearer); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + + // attempt link secondTopHat to third tophat (worn by fourthWearer) + vm.prank(secondWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, thirdTopHatId); + vm.prank(fourthWearer); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.CrossTreeLinkage.selector)); + hats.approveLinkTopHatToTree(secondTopHatDomain, thirdTopHatId); + } + + function testCannotApproveCrossTreeLink() public { + // create third tophat + uint256 thirdTopHatId = hats.mintTopHat(topHatWearer, "invalid relink recipient", "http://www.tophat.com/"); + + // link secondTopHat + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(secondWearer); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + + // attempt relink secondTopHat to third tophat (worn by topHatWearer) + vm.prank(topHatWearer); + vm.expectRevert(abi.encodeWithSelector(HatsErrors.CrossTreeLinkage.selector)); + hats.relinkTopHatWithinTree(secondTopHatDomain, thirdTopHatId); + } + + function testTreeLinkingAndUnlinking() public { + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotAdmin.selector, address(this), secondTopHatId)); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + + vm.prank(thirdWearer); + hats.requestLinkTopHatToTree(secondTopHatDomain, secondHatId); + vm.prank(topHatWearer); + vm.expectEmit(true, true, true, true); + emit TopHatLinked(secondTopHatDomain, secondHatId); + hats.approveLinkTopHatToTree(secondTopHatDomain, secondHatId); + assertFalse(hats.isTopHat(secondTopHatId)); + assertEq(hats.getHatLevel(secondTopHatId), 2); + assertEq(hats.linkedTreeRequests(secondTopHatDomain), 0); + + vm.expectRevert(abi.encodeWithSelector(HatsErrors.NotAdmin.selector, address(this), secondTopHatId)); + hats.unlinkTopHatFromTree(secondTopHatDomain); + + vm.prank(secondWearer); + vm.expectEmit(true, true, true, true); + emit TopHatLinked(secondTopHatDomain, 0); + hats.unlinkTopHatFromTree(secondTopHatDomain); + assertEq(hats.isTopHat(secondTopHatId), true); + } +} diff --git a/test/HatsIdUtils.t.sol b/test/HatsIdUtils.t.sol index 5f8ad5b..609edd8 100644 --- a/test/HatsIdUtils.t.sol +++ b/test/HatsIdUtils.t.sol @@ -3,20 +3,58 @@ pragma solidity ^0.8.13; import "forge-std/Test.sol"; import "../src/HatsIdUtilities.sol"; +import "./LinkableHatsIdUtilities.sol"; + +contract LinkedTreeHatIdUtilTests is Test { + LinkableHatsIdUtilities utils; + + error InvalidChildHat(); + + function setUp() public { + utils = new LinkableHatsIdUtilities(); + } + + function testLinkedHats() public { + uint256 admin = 1 << 224; + uint32 oldTopHat = 2; + uint256 oldTopHatId = uint256(oldTopHat) << 224; + uint256 id1 = utils.buildHatId(admin, 1); + utils.linkTree(oldTopHat, id1); + assertFalse(utils.isTopHat(oldTopHatId)); + assertEq(utils.getHatLevel(oldTopHatId), utils.getHatLevel(id1) + 1); + assertEq(utils.getAdminAtLevel(oldTopHatId, 0), admin); + + uint32 admin3 = 3; + uint256 admin3Id = uint256(admin3) << 224; + uint256 id3 = utils.buildHatId(admin3Id, 3); + utils.linkTree(1, id3); + assertEq(utils.getHatLevel(id1), 3); + assertEq(utils.getHatLevel(oldTopHatId), utils.getHatLevel(id1) + 1); + assertEq(utils.getHatLevel(admin), utils.getHatLevel(id3) + 1); + assertEq(utils.getHatLevel(admin3Id), 0); + assertFalse(utils.isTopHat(admin)); + + assertEq(utils.getAdminAtLevel(id1, 2), admin); + assertEq(utils.getAdminAtLevel(oldTopHatId, 0), admin3Id); + } +} contract HatIdUtilTests is Test { HatsIdUtilities utils; + uint256 tophatBits = 32; + uint256 levelBits = 16; + uint256 levels = 14; function setUp() public { utils = new HatsIdUtilities(); } function testgetHatLevel() public { - for (uint256 i = 1; 2 ** i < type(uint224).max; i += 8) { - // each byte corresponds with a level - assertEq(utils.getHatLevel(2 ** i), 28 - (i / 8)); + for (uint256 i = 1; 2 ** i < type(uint224).max; i += levelBits) { + // each `levelBits` bits corresponds with a level + assertEq(utils.getHatLevel(2 ** i), levels - (i / levelBits)); if (i > 1) { - assertEq(utils.getHatLevel(2 ** i + 256), 27); + assertEq(utils.getHatLevel(2 ** i + (2 ** levelBits)), levels - 1); } } } @@ -25,7 +63,7 @@ contract HatIdUtilTests is Test { // start with a top hat uint256 admin = 1 << 224; uint256 next; - for (uint8 i = 1; i < 29; i++) { + for (uint8 i = 1; i < (levels - 1); i++) { next = utils.buildHatId(admin, 1); assertEq(utils.getHatLevel(next), i); assertEq(utils.getAdminAtLevel(next, i - 1), admin); @@ -36,7 +74,7 @@ contract HatIdUtilTests is Test { function testTopHatDomain() public { uint256 admin = 1 << 224; assertEq(utils.isTopHat(admin), true); - assertEq(utils.isTopHat(admin + 1 << 216), false); + assertEq(utils.isTopHat((admin + 1) << 216), false); assertEq(utils.isTopHat(admin + 1), false); assertEq(utils.isTopHat(admin - 1), false); diff --git a/test/HatsTestSetup.t.sol b/test/HatsTestSetup.t.sol index d1d2bec..b72e73d 100644 --- a/test/HatsTestSetup.t.sol +++ b/test/HatsTestSetup.t.sol @@ -46,7 +46,7 @@ abstract contract TestVariables is HatsEvents, HatsErrors { address reteligibility; address rettoggle; string retimageURI; - uint8 retlastHatId; + uint16 retlastHatId; bool retmutable; bool retactive; @@ -54,12 +54,10 @@ abstract contract TestVariables is HatsEvents, HatsErrors { bool mutable_; event TransferSingle( - address indexed operator, - address indexed from, - address indexed to, - uint256 id, - uint256 amount + address indexed operator, address indexed from, address indexed to, uint256 id, uint256 amount ); + + error InvalidChildHat(); } abstract contract TestSetup is Test, TestVariables { @@ -97,21 +95,15 @@ abstract contract TestSetup is Test, TestVariables { function createTopHat() internal { // create TopHat - topHatId = hats.mintTopHat( - topHatWearer, - "tophat", - "http://www.tophat.com/" - ); + topHatId = hats.mintTopHat(topHatWearer, "tophat", "http://www.tophat.com/"); } /// @dev assumes a tophat has already been created /// @dev doesn't apply any imageURIs - function createHatsBranch( - uint256 _length, - uint256 _topHatId, - address _topHatWearer, - bool _mutable - ) internal returns (uint256[] memory ids, address[] memory wearers) { + function createHatsBranch(uint256 _length, uint256 _topHatId, address _topHatWearer, bool _mutable) + internal + returns (uint256[] memory ids, address[] memory wearers) + { uint256 id; address wearer; uint256 admin; @@ -151,7 +143,7 @@ abstract contract TestSetup is Test, TestVariables { // in addition to TestSetup, TestSetup2 creates and mints a second hat abstract contract TestSetup2 is TestSetup { - function setUp() public override { + function setUp() public virtual override { // expand on TestSetup super.setUp(); @@ -173,6 +165,25 @@ abstract contract TestSetup2 is TestSetup { } } +abstract contract TestSetupMutable is TestSetup { + function setUp() public virtual override { + // expand on TestSetup + super.setUp(); + + // create a mutable Hat + vm.prank(topHatWearer); + secondHatId = hats.createHat( + topHatId, + "mutable hat", + 2, // maxSupply + _eligibility, + _toggle, + true, + secondHatImageURI + ); + } +} + abstract contract TestSetupBatch is TestSetup { function setUp() public override { // expand on TestSetup diff --git a/test/LinkableHatsIdUtilities.sol b/test/LinkableHatsIdUtilities.sol new file mode 100644 index 0000000..92cc5f5 --- /dev/null +++ b/test/LinkableHatsIdUtilities.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import "../src/HatsIdUtilities.sol"; + +contract LinkableHatsIdUtilities is HatsIdUtilities { + function linkTree(uint32 _topHatId, uint256 _hatId) public { + linkedTreeAdmins[_topHatId] = _hatId; + } +}