From 9edcf7f174c3ebef100a4400e6a17c746ea521a4 Mon Sep 17 00:00:00 2001 From: katzman Date: Fri, 12 Apr 2024 12:40:35 -0700 Subject: [PATCH 01/42] Add `removeLastOwner` for replayability (#52) * Added removeLastOwner selector to list of approved selectors for replayability * add missing arg to certora .spec * Fix typo in sig hash in spec --- certora/specs/ERC4337Account.spec | 3 ++- src/CoinbaseSmartWallet.sol | 1 + test/CoinbaseSmartWallet/CanSkipChainIdValidation.t.sol | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/certora/specs/ERC4337Account.spec b/certora/specs/ERC4337Account.spec index eef1b74..a6b5617 100644 --- a/certora/specs/ERC4337Account.spec +++ b/certora/specs/ERC4337Account.spec @@ -119,7 +119,8 @@ rule OnlyOwnerOrSelf(env e, method f) filtered { // There is no difference between filtering functions and using them as a lhs of implication f -> f.selector == sig:addOwnerAddress(address).selector || f.selector == sig:addOwnerPublicKey(bytes32, bytes32).selector - || f.selector == sig:removeOwnerAtIndex(uint256, bytes).selector + || f.selector == sig:removeOwnerAtIndex(uint256, bytes).selector + || f.selector == sig:removeLastOwner(uint256, bytes).selector || f.selector == sig:upgradeToAndCall(address, bytes).selector } { bool ownerBefore = e.msg.sender == currentContract || isOwnerAddress(e.msg.sender); // owner can remove themselves diff --git a/src/CoinbaseSmartWallet.sol b/src/CoinbaseSmartWallet.sol index ecc3f9c..9c34412 100644 --- a/src/CoinbaseSmartWallet.sol +++ b/src/CoinbaseSmartWallet.sol @@ -255,6 +255,7 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 functionSelector == MultiOwnable.addOwnerPublicKey.selector || functionSelector == MultiOwnable.addOwnerAddress.selector || functionSelector == MultiOwnable.removeOwnerAtIndex.selector + || functionSelector == MultiOwnable.removeLastOwner.selector || functionSelector == UUPSUpgradeable.upgradeToAndCall.selector ) { return true; diff --git a/test/CoinbaseSmartWallet/CanSkipChainIdValidation.t.sol b/test/CoinbaseSmartWallet/CanSkipChainIdValidation.t.sol index aac7641..a176f4b 100644 --- a/test/CoinbaseSmartWallet/CanSkipChainIdValidation.t.sol +++ b/test/CoinbaseSmartWallet/CanSkipChainIdValidation.t.sol @@ -8,6 +8,7 @@ contract TestCanSkipChainIdValidation is SmartWalletTestBase { MultiOwnable.addOwnerAddress.selector, MultiOwnable.addOwnerPublicKey.selector, MultiOwnable.removeOwnerAtIndex.selector, + MultiOwnable.removeLastOwner.selector, UUPSUpgradeable.upgradeToAndCall.selector ]; bytes4[] otherSelectors = [CoinbaseSmartWallet.execute.selector, CoinbaseSmartWallet.executeBatch.selector]; From cb57387138389fd23977a25c5560620e26da62f1 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Tue, 16 Apr 2024 11:32:45 -0400 Subject: [PATCH 02/42] fix readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b34afee..bc7cb3e 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ It supports - Cross-chain replayability for owner updates and other actions: sign once, update everywhere. ## Multiple Owners -Our smart wallet supports up to 256 concurrent owners. Each owner can transact independently, without sign off from any other owner. +Our smart wallet supports a practically unlimited number of concurrent owners (max 2^256). Each owner can transact independently, without sign off from any other owner. Owners are identified as `bytes` to allow both Ethereum address owners and passkey (Secp256r1) public key owners. From 2418bd7fb424148ff6ef0af976ddb3d750e035e6 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Fri, 19 Apr 2024 06:45:03 -0400 Subject: [PATCH 03/42] do not gitignore lib --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index 99ffd4c..2103fe3 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,4 @@ docs/ .env .VSCodeCounter/ -lib/ - .certora_internal/ \ No newline at end of file From 3de9b26010073e15501cecdc43aba0eb8a10d87a Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Fri, 19 Apr 2024 10:57:58 -0400 Subject: [PATCH 04/42] == false -> ! --- src/CoinbaseSmartWalletFactory.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CoinbaseSmartWalletFactory.sol b/src/CoinbaseSmartWalletFactory.sol index 3637840..30ab3f8 100644 --- a/src/CoinbaseSmartWalletFactory.sol +++ b/src/CoinbaseSmartWalletFactory.sol @@ -50,7 +50,7 @@ contract CoinbaseSmartWalletFactory { account = CoinbaseSmartWallet(payable(accountAddress)); - if (alreadyDeployed == false) { + if (!alreadyDeployed) { account.initialize(owners); } } From f957bb1ba225b7c28dd29661287397d255dcabc6 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Fri, 19 Apr 2024 11:15:40 -0400 Subject: [PATCH 05/42] boost coveralls --- .gas-snapshot | 33 ++++++++++++++------------- test/CoinbaseSmartWalletFactory.t.sol | 5 ++++ 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 74ca931..1ea3e3e 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -13,16 +13,17 @@ AddOwnerPublicKeyTest:testSetsOwnerAtIndex() (gas: 128616) CoinbaseSmartWallet1271InputGeneratorTest:testGetReplaySafeHashForDeployedAccount() (gas: 308446) CoinbaseSmartWallet1271InputGeneratorTest:testGetReplaySafeHashForUndeployedAccount() (gas: 291475) CoinbaseSmartWalletFactoryTest:testDeployDeterministicPassValues() (gas: 267250) -CoinbaseSmartWalletFactoryTest:test_CreateAccount_ReturnsPredeterminedAddress_WhenAccountAlreadyExists() (gas: 287003) +CoinbaseSmartWalletFactoryTest:test_CreateAccount_ReturnsPredeterminedAddress_WhenAccountAlreadyExists() (gas: 286914) CoinbaseSmartWalletFactoryTest:test_RevertsIfLength32ButLargerThanAddress() (gas: 298636) +CoinbaseSmartWalletFactoryTest:test_constructor_setsImplementation(address) (runs: 256, μ: 314355, ~: 314355) CoinbaseSmartWalletFactoryTest:test_createAccountDeploysToPredeterminedAddress() (gas: 268601) CoinbaseSmartWalletFactoryTest:test_createAccountSetsOwnersCorrectly() (gas: 277291) CoinbaseSmartWalletFactoryTest:test_exitIfAccountIsAlreadyInitialized() (gas: 267718) -CoinbaseSmartWalletFactoryTest:test_implementation_returnsExpectedAddress() (gas: 7654) -CoinbaseSmartWalletFactoryTest:test_initCodeHash() (gas: 7890) -CoinbaseSmartWalletFactoryTest:test_revertsIfNoOwners() (gas: 29214) +CoinbaseSmartWalletFactoryTest:test_implementation_returnsExpectedAddress() (gas: 7676) +CoinbaseSmartWalletFactoryTest:test_initCodeHash() (gas: 7912) +CoinbaseSmartWalletFactoryTest:test_revertsIfNoOwners() (gas: 29232) ERC1271Test:test_returnsExpectedDomainHashWhenProxy() (gas: 29198) -ERC1271Test:test_static() (gas: 3243921) +ERC1271Test:test_static() (gas: 3249331) MultiOwnableInitializeTest:testRevertsIfLength32ButLargerThanAddress() (gas: 81111) MultiOwnableInitializeTest:testRevertsIfLength32NotAddress() (gas: 81092) MultiOwnableInitializeTest:testRevertsIfLengthNot32Or64() (gas: 103395) @@ -40,26 +41,26 @@ RemoveOwnerAtIndexTest:test_revert_whenCalledByNonOwner(address) (runs: 256, μ: RemoveOwnerAtIndexTest:test_revert_whenNoOwnerAtIndex() (gas: 33372) RemoveOwnerAtIndexTest:test_revert_whenWrongOwnerAtIndex() (gas: 36694) RemoveOwnerAtIndexTest:test_reverts_ifIsLastOwner() (gas: 7471805) -TestCanSkipChainIdValidation:test_approvedSelectorsReturnTrue() (gas: 15845) -TestCanSkipChainIdValidation:test_otherSelectorsReturnFalse() (gas: 12469) +TestCanSkipChainIdValidation:test_approvedSelectorsReturnTrue() (gas: 17781) +TestCanSkipChainIdValidation:test_otherSelectorsReturnFalse() (gas: 12579) TestExecuteWithoutChainIdValidation:testExecute() (gas: 424837) TestExecuteWithoutChainIdValidation:testExecuteBatch() (gas: 728897) -TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3612753, ~: 3472828) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49960) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50195) +TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3631749, ~: 3655292) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49987) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50222) TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 82347) TestExecuteWithoutChainIdValidation:test_reverts_whenCallerNotEntryPoint() (gas: 11053) -TestExecuteWithoutChainIdValidation:test_reverts_whenOneCallReverts() (gas: 467906) -TestExecuteWithoutChainIdValidation:test_reverts_whenOneSelectorNotApproved() (gas: 179678) -TestExecuteWithoutChainIdValidation:test_reverts_whenSelectorNotApproved() (gas: 106769) -TestExecuteWithoutChainIdValidation:test_succeeds_whenSelectorAllowed() (gas: 424367) +TestExecuteWithoutChainIdValidation:test_reverts_whenOneCallReverts() (gas: 467957) +TestExecuteWithoutChainIdValidation:test_reverts_whenOneSelectorNotApproved() (gas: 179805) +TestExecuteWithoutChainIdValidation:test_reverts_whenSelectorNotApproved() (gas: 106879) +TestExecuteWithoutChainIdValidation:test_succeeds_whenSelectorAllowed() (gas: 424401) TestImplementation:testImplementation() (gas: 12623) TestInitialize:testInitialize() (gas: 21034) -TestInitialize:test_cannotInitImplementation() (gas: 2899105) +TestInitialize:test_cannotInitImplementation() (gas: 2904513) TestIsValidSignature:testReturnsInvalidIfPasskeySigButWrongOwnerLength() (gas: 40187) TestIsValidSignature:testRevertsIfEthereumSignatureButWrongOwnerLength() (gas: 24040) TestIsValidSignature:testRevertsIfOwnerIsInvalidEthereumAddress() (gas: 22021) -TestIsValidSignature:testSmartWalletSigner() (gas: 3174740) +TestIsValidSignature:testSmartWalletSigner() (gas: 3180147) TestIsValidSignature:testValidateSignatureWithEOASigner() (gas: 24922) TestIsValidSignature:testValidateSignatureWithEOASignerFailsWithWrongSigner() (gas: 23877) TestIsValidSignature:testValidateSignatureWithPasskeySigner() (gas: 423238) diff --git a/test/CoinbaseSmartWalletFactory.t.sol b/test/CoinbaseSmartWalletFactory.t.sol index 693a5f1..d70b080 100644 --- a/test/CoinbaseSmartWalletFactory.t.sol +++ b/test/CoinbaseSmartWalletFactory.t.sol @@ -18,6 +18,11 @@ contract CoinbaseSmartWalletFactoryTest is Test { owners.push(abi.encode(address(2))); } + function test_constructor_setsImplementation(address implementation) public { + factory = new CoinbaseSmartWalletFactory(implementation); + assertEq(factory.implementation(), implementation); + } + function test_createAccountSetsOwnersCorrectly() public { address expectedAddress = factory.getAddress(owners, 0); vm.expectCall(expectedAddress, abi.encodeCall(CoinbaseSmartWallet.initialize, (owners))); From 3ba88836e9da433e1aedc1a1346ad7452d114a85 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Fri, 19 Apr 2024 10:55:32 -0400 Subject: [PATCH 06/42] optimize getting function selector --- .gas-snapshot | 30 +++++++++++++++--------------- src/CoinbaseSmartWallet.sol | 4 ++-- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 1ea3e3e..889228f 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -23,7 +23,7 @@ CoinbaseSmartWalletFactoryTest:test_implementation_returnsExpectedAddress() (gas CoinbaseSmartWalletFactoryTest:test_initCodeHash() (gas: 7912) CoinbaseSmartWalletFactoryTest:test_revertsIfNoOwners() (gas: 29232) ERC1271Test:test_returnsExpectedDomainHashWhenProxy() (gas: 29198) -ERC1271Test:test_static() (gas: 3249331) +ERC1271Test:test_static() (gas: 3229650) MultiOwnableInitializeTest:testRevertsIfLength32ButLargerThanAddress() (gas: 81111) MultiOwnableInitializeTest:testRevertsIfLength32NotAddress() (gas: 81092) MultiOwnableInitializeTest:testRevertsIfLengthNot32Or64() (gas: 103395) @@ -45,29 +45,29 @@ TestCanSkipChainIdValidation:test_approvedSelectorsReturnTrue() (gas: 17781) TestCanSkipChainIdValidation:test_otherSelectorsReturnFalse() (gas: 12579) TestExecuteWithoutChainIdValidation:testExecute() (gas: 424837) TestExecuteWithoutChainIdValidation:testExecuteBatch() (gas: 728897) -TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3631749, ~: 3655292) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49987) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50222) -TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 82347) +TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3597261, ~: 3458766) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49890) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50125) +TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 81983) TestExecuteWithoutChainIdValidation:test_reverts_whenCallerNotEntryPoint() (gas: 11053) -TestExecuteWithoutChainIdValidation:test_reverts_whenOneCallReverts() (gas: 467957) -TestExecuteWithoutChainIdValidation:test_reverts_whenOneSelectorNotApproved() (gas: 179805) -TestExecuteWithoutChainIdValidation:test_reverts_whenSelectorNotApproved() (gas: 106879) -TestExecuteWithoutChainIdValidation:test_succeeds_whenSelectorAllowed() (gas: 424401) +TestExecuteWithoutChainIdValidation:test_reverts_whenOneCallReverts() (gas: 467715) +TestExecuteWithoutChainIdValidation:test_reverts_whenOneSelectorNotApproved() (gas: 179684) +TestExecuteWithoutChainIdValidation:test_reverts_whenSelectorNotApproved() (gas: 106758) +TestExecuteWithoutChainIdValidation:test_succeeds_whenSelectorAllowed() (gas: 423916) TestImplementation:testImplementation() (gas: 12623) TestInitialize:testInitialize() (gas: 21034) -TestInitialize:test_cannotInitImplementation() (gas: 2904513) +TestInitialize:test_cannotInitImplementation() (gas: 2885066) TestIsValidSignature:testReturnsInvalidIfPasskeySigButWrongOwnerLength() (gas: 40187) TestIsValidSignature:testRevertsIfEthereumSignatureButWrongOwnerLength() (gas: 24040) TestIsValidSignature:testRevertsIfOwnerIsInvalidEthereumAddress() (gas: 22021) -TestIsValidSignature:testSmartWalletSigner() (gas: 3180147) +TestIsValidSignature:testSmartWalletSigner() (gas: 3160701) TestIsValidSignature:testValidateSignatureWithEOASigner() (gas: 24922) TestIsValidSignature:testValidateSignatureWithEOASignerFailsWithWrongSigner() (gas: 23877) TestIsValidSignature:testValidateSignatureWithPasskeySigner() (gas: 423238) TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsBadOwnerIndex() (gas: 35664) TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsWithWrongBadSignature() (gas: 430704) TestUpgradeToAndCall:testUpgradeToAndCall() (gas: 25477) -TestValidateUserOp:test_reverts_whenReplayableNonceKeyInvalidForSelector() (gas: 14551) -TestValidateUserOp:test_reverts_whenSelectorInvalidForReplayableNonceKey() (gas: 14816) -TestValidateUserOp:test_succeedsWithEOASigner() (gas: 447664) -TestValidateUserOp:test_succeedsWithPasskeySigner() (gas: 785032) \ No newline at end of file +TestValidateUserOp:test_reverts_whenReplayableNonceKeyInvalidForSelector() (gas: 14187) +TestValidateUserOp:test_reverts_whenSelectorInvalidForReplayableNonceKey() (gas: 14452) +TestValidateUserOp:test_succeedsWithEOASigner() (gas: 447938) +TestValidateUserOp:test_succeedsWithPasskeySigner() (gas: 785169) \ No newline at end of file diff --git a/src/CoinbaseSmartWallet.sol b/src/CoinbaseSmartWallet.sol index 9c34412..715320d 100644 --- a/src/CoinbaseSmartWallet.sol +++ b/src/CoinbaseSmartWallet.sol @@ -145,7 +145,7 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 uint256 key = userOp.nonce >> 64; if ( - userOp.callData.length >= 4 && bytes4(userOp.callData[0:4]) == this.executeWithoutChainIdValidation.selector + bytes4(userOp.callData) == this.executeWithoutChainIdValidation.selector ) { userOpHash = getUserOpHashWithoutChainId(userOp); if (key != REPLAYABLE_NONCE_KEY) { @@ -181,7 +181,7 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 function executeWithoutChainIdValidation(bytes[] calldata calls) public payable virtual onlyEntryPoint { for (uint256 i; i < calls.length; i++) { bytes calldata call = calls[i]; - bytes4 selector = bytes4(call[0:4]); + bytes4 selector = bytes4(call); if (!canSkipChainIdValidation(selector)) { revert SelectorNotAllowed(selector); } From 3b686e62fdd7822f5cd9d9c7aac5b46391b0643a Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Fri, 19 Apr 2024 12:17:35 -0400 Subject: [PATCH 07/42] fmt --- src/CoinbaseSmartWallet.sol | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/CoinbaseSmartWallet.sol b/src/CoinbaseSmartWallet.sol index 715320d..8d8cfb3 100644 --- a/src/CoinbaseSmartWallet.sol +++ b/src/CoinbaseSmartWallet.sol @@ -144,9 +144,7 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 { uint256 key = userOp.nonce >> 64; - if ( - bytes4(userOp.callData) == this.executeWithoutChainIdValidation.selector - ) { + if (bytes4(userOp.callData) == this.executeWithoutChainIdValidation.selector) { userOpHash = getUserOpHashWithoutChainId(userOp); if (key != REPLAYABLE_NONCE_KEY) { revert InvalidNonceKey(key); From cb4d53d1de7340b994515810c3f20dacb4d840c6 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Fri, 19 Apr 2024 10:52:47 -0400 Subject: [PATCH 08/42] audit external vs. public --- src/CoinbaseSmartWallet.sol | 39 +++++++++++++++----------- src/CoinbaseSmartWalletFactory.sol | 2 +- test/mocks/MockCoinbaseSmartWallet.sol | 4 ++- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/CoinbaseSmartWallet.sol b/src/CoinbaseSmartWallet.sol index 8d8cfb3..7320a5f 100644 --- a/src/CoinbaseSmartWallet.sol +++ b/src/CoinbaseSmartWallet.sol @@ -106,19 +106,6 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 _initializeOwners(owners); } - /// @notice Initializes the account with the the given owners. - /// - /// @dev Reverts if the account has already been initialized. - /// - /// @param owners The initial array of owners to initialize this account with. - function initialize(bytes[] calldata owners) public payable virtual { - if (nextOwnerIndex() != 0) { - revert Initialized(); - } - - _initializeOwners(owners); - } - /// @notice Custom implemenentation of the ERC-4337 `validateUserOp` method. The EntryPoint will /// make the call to the recipient only if this validation call returns successfully. /// See `IAccount.validateUserOp()`. @@ -135,7 +122,7 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 /// /// @return validationData The encoded `ValidationData` structure. function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds) - public + external payable virtual onlyEntryPoint @@ -176,7 +163,7 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 /// useful for syncing owner changes. /// /// @param calls An array of calldata to use for separate self calls. - function executeWithoutChainIdValidation(bytes[] calldata calls) public payable virtual onlyEntryPoint { + function executeWithoutChainIdValidation(bytes[] calldata calls) external payable virtual onlyEntryPoint { for (uint256 i; i < calls.length; i++) { bytes calldata call = calls[i]; bytes4 selector = bytes4(call); @@ -195,7 +182,12 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 /// @param target The target call address. /// @param value The call value to user. /// @param data The raw call data. - function execute(address target, uint256 value, bytes calldata data) public payable virtual onlyEntryPointOrOwner { + function execute(address target, uint256 value, bytes calldata data) + external + payable + virtual + onlyEntryPointOrOwner + { _call(target, value, data); } @@ -204,12 +196,25 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 /// @dev Can only be called by the Entrypoint or an owner of this account (including itself). /// /// @param calls The list of `Call`s to execute. - function executeBatch(Call[] calldata calls) public payable virtual onlyEntryPointOrOwner { + function executeBatch(Call[] calldata calls) external payable virtual onlyEntryPointOrOwner { for (uint256 i; i < calls.length; i++) { _call(calls[i].target, calls[i].value, calls[i].data); } } + /// @notice Initializes the account with the the given owners. + /// + /// @dev Reverts if the account has already been initialized. + /// + /// @param owners The initial array of owners to initialize this account with. + function initialize(bytes[] calldata owners) public payable virtual { + if (nextOwnerIndex() != 0) { + revert Initialized(); + } + + _initializeOwners(owners); + } + /// @notice Returns the address of the EntryPoint v0.6. /// /// @return The address of the EntryPoint v0.6 diff --git a/src/CoinbaseSmartWalletFactory.sol b/src/CoinbaseSmartWalletFactory.sol index 3637840..6c998a4 100644 --- a/src/CoinbaseSmartWalletFactory.sol +++ b/src/CoinbaseSmartWalletFactory.sol @@ -36,7 +36,7 @@ contract CoinbaseSmartWalletFactory { /// @param nonce The nonce of the account, allowing multiple accounts with the same set of initial /// owners to exist. function createAccount(bytes[] calldata owners, uint256 nonce) - public + external payable virtual returns (CoinbaseSmartWallet account) diff --git a/test/mocks/MockCoinbaseSmartWallet.sol b/test/mocks/MockCoinbaseSmartWallet.sol index 01550c9..3ce64f3 100644 --- a/test/mocks/MockCoinbaseSmartWallet.sol +++ b/test/mocks/MockCoinbaseSmartWallet.sol @@ -24,6 +24,8 @@ contract MockCoinbaseSmartWallet is CoinbaseSmartWallet { assembly { mstore(0x40, add(mload(0x40), mod(filler, 0x40))) } - return super.executeBatch(calls); + for (uint256 i; i < calls.length; i++) { + _call(calls[i].target, calls[i].value, calls[i].data); + } } } From ae728c092bb35669a8801c443dd8882ef1bb9cbe Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Fri, 19 Apr 2024 11:35:00 -0400 Subject: [PATCH 09/42] initialize external --- .gas-snapshot | 10 +++++----- src/CoinbaseSmartWallet.sol | 26 +++++++++++++------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 889228f..9a9da67 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -23,7 +23,7 @@ CoinbaseSmartWalletFactoryTest:test_implementation_returnsExpectedAddress() (gas CoinbaseSmartWalletFactoryTest:test_initCodeHash() (gas: 7912) CoinbaseSmartWalletFactoryTest:test_revertsIfNoOwners() (gas: 29232) ERC1271Test:test_returnsExpectedDomainHashWhenProxy() (gas: 29198) -ERC1271Test:test_static() (gas: 3229650) +ERC1271Test:test_static() (gas: 3235744) MultiOwnableInitializeTest:testRevertsIfLength32ButLargerThanAddress() (gas: 81111) MultiOwnableInitializeTest:testRevertsIfLength32NotAddress() (gas: 81092) MultiOwnableInitializeTest:testRevertsIfLengthNot32Or64() (gas: 103395) @@ -45,9 +45,9 @@ TestCanSkipChainIdValidation:test_approvedSelectorsReturnTrue() (gas: 17781) TestCanSkipChainIdValidation:test_otherSelectorsReturnFalse() (gas: 12579) TestExecuteWithoutChainIdValidation:testExecute() (gas: 424837) TestExecuteWithoutChainIdValidation:testExecuteBatch() (gas: 728897) -TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3597261, ~: 3458766) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49890) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50125) +TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3592913, ~: 3463925) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49920) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50155) TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 81983) TestExecuteWithoutChainIdValidation:test_reverts_whenCallerNotEntryPoint() (gas: 11053) TestExecuteWithoutChainIdValidation:test_reverts_whenOneCallReverts() (gas: 467715) @@ -60,7 +60,7 @@ TestInitialize:test_cannotInitImplementation() (gas: 2885066) TestIsValidSignature:testReturnsInvalidIfPasskeySigButWrongOwnerLength() (gas: 40187) TestIsValidSignature:testRevertsIfEthereumSignatureButWrongOwnerLength() (gas: 24040) TestIsValidSignature:testRevertsIfOwnerIsInvalidEthereumAddress() (gas: 22021) -TestIsValidSignature:testSmartWalletSigner() (gas: 3160701) +TestIsValidSignature:testSmartWalletSigner() (gas: 3166717) TestIsValidSignature:testValidateSignatureWithEOASigner() (gas: 24922) TestIsValidSignature:testValidateSignatureWithEOASignerFailsWithWrongSigner() (gas: 23877) TestIsValidSignature:testValidateSignatureWithPasskeySigner() (gas: 423238) diff --git a/src/CoinbaseSmartWallet.sol b/src/CoinbaseSmartWallet.sol index 7320a5f..8257742 100644 --- a/src/CoinbaseSmartWallet.sol +++ b/src/CoinbaseSmartWallet.sol @@ -106,6 +106,19 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 _initializeOwners(owners); } + /// @notice Initializes the account with the the given owners. + /// + /// @dev Reverts if the account has already been initialized. + /// + /// @param owners The initial array of owners to initialize this account with. + function initialize(bytes[] calldata owners) external payable virtual { + if (nextOwnerIndex() != 0) { + revert Initialized(); + } + + _initializeOwners(owners); + } + /// @notice Custom implemenentation of the ERC-4337 `validateUserOp` method. The EntryPoint will /// make the call to the recipient only if this validation call returns successfully. /// See `IAccount.validateUserOp()`. @@ -202,19 +215,6 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 } } - /// @notice Initializes the account with the the given owners. - /// - /// @dev Reverts if the account has already been initialized. - /// - /// @param owners The initial array of owners to initialize this account with. - function initialize(bytes[] calldata owners) public payable virtual { - if (nextOwnerIndex() != 0) { - revert Initialized(); - } - - _initializeOwners(owners); - } - /// @notice Returns the address of the EntryPoint v0.6. /// /// @return The address of the EntryPoint v0.6 From 8d25bc4dc2d6e9963c40a417e2fc1a6fabb2b098 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Fri, 19 Apr 2024 11:06:30 -0400 Subject: [PATCH 10/42] add ownerCount method --- .gas-snapshot | 116 ++++++++++----------- src/MultiOwnable.sol | 16 ++- test/MultiOwnable/RemoveOwnerAtIndex.t.sol | 3 + 3 files changed, 72 insertions(+), 63 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 9a9da67..99d4bb6 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -1,72 +1,72 @@ -AddOwnerAddressTest:testEmitsAddOwner() (gas: 92402) -AddOwnerAddressTest:testIncreasesOwnerIndex() (gas: 90676) -AddOwnerAddressTest:testRevertsIfAlreadyOwner() (gas: 93191) -AddOwnerAddressTest:testRevertsIfCalledByNonOwner() (gas: 11764) -AddOwnerAddressTest:testSetsIsOwner() (gas: 90470) -AddOwnerAddressTest:testSetsOwnerAtIndex() (gas: 98970) -AddOwnerPublicKeyTest:testEmitsAddOwner() (gas: 115537) -AddOwnerPublicKeyTest:testFuzzIsOwnerPublicKey(bytes32,bytes32) (runs: 256, μ: 115328, ~: 115328) -AddOwnerPublicKeyTest:testRevertsIfAlreadyOwner() (gas: 116355) -AddOwnerPublicKeyTest:testRevertsIfCalledByNonOwner() (gas: 11754) -AddOwnerPublicKeyTest:testSetsIsOwner() (gas: 113769) -AddOwnerPublicKeyTest:testSetsOwnerAtIndex() (gas: 128616) -CoinbaseSmartWallet1271InputGeneratorTest:testGetReplaySafeHashForDeployedAccount() (gas: 308446) -CoinbaseSmartWallet1271InputGeneratorTest:testGetReplaySafeHashForUndeployedAccount() (gas: 291475) -CoinbaseSmartWalletFactoryTest:testDeployDeterministicPassValues() (gas: 267250) -CoinbaseSmartWalletFactoryTest:test_CreateAccount_ReturnsPredeterminedAddress_WhenAccountAlreadyExists() (gas: 286914) -CoinbaseSmartWalletFactoryTest:test_RevertsIfLength32ButLargerThanAddress() (gas: 298636) -CoinbaseSmartWalletFactoryTest:test_constructor_setsImplementation(address) (runs: 256, μ: 314355, ~: 314355) -CoinbaseSmartWalletFactoryTest:test_createAccountDeploysToPredeterminedAddress() (gas: 268601) -CoinbaseSmartWalletFactoryTest:test_createAccountSetsOwnersCorrectly() (gas: 277291) -CoinbaseSmartWalletFactoryTest:test_exitIfAccountIsAlreadyInitialized() (gas: 267718) +AddOwnerAddressTest:testEmitsAddOwner() (gas: 92424) +AddOwnerAddressTest:testIncreasesOwnerIndex() (gas: 90698) +AddOwnerAddressTest:testRevertsIfAlreadyOwner() (gas: 93235) +AddOwnerAddressTest:testRevertsIfCalledByNonOwner() (gas: 11786) +AddOwnerAddressTest:testSetsIsOwner() (gas: 90492) +AddOwnerAddressTest:testSetsOwnerAtIndex() (gas: 98992) +AddOwnerPublicKeyTest:testEmitsAddOwner() (gas: 115559) +AddOwnerPublicKeyTest:testFuzzIsOwnerPublicKey(bytes32,bytes32) (runs: 256, μ: 115372, ~: 115372) +AddOwnerPublicKeyTest:testRevertsIfAlreadyOwner() (gas: 116399) +AddOwnerPublicKeyTest:testRevertsIfCalledByNonOwner() (gas: 11776) +AddOwnerPublicKeyTest:testSetsIsOwner() (gas: 113813) +AddOwnerPublicKeyTest:testSetsOwnerAtIndex() (gas: 128638) +CoinbaseSmartWallet1271InputGeneratorTest:testGetReplaySafeHashForDeployedAccount() (gas: 308479) +CoinbaseSmartWallet1271InputGeneratorTest:testGetReplaySafeHashForUndeployedAccount() (gas: 291508) +CoinbaseSmartWalletFactoryTest:testDeployDeterministicPassValues() (gas: 267283) +CoinbaseSmartWalletFactoryTest:test_CreateAccount_ReturnsPredeterminedAddress_WhenAccountAlreadyExists() (gas: 286935) +CoinbaseSmartWalletFactoryTest:test_RevertsIfLength32ButLargerThanAddress() (gas: 298669) +CoinbaseSmartWalletFactoryTest:test_constructor_setsImplementation(address) (runs: 256, μ: 313355, ~: 313355) +CoinbaseSmartWalletFactoryTest:test_createAccountDeploysToPredeterminedAddress() (gas: 268634) +CoinbaseSmartWalletFactoryTest:test_createAccountSetsOwnersCorrectly() (gas: 277324) +CoinbaseSmartWalletFactoryTest:test_exitIfAccountIsAlreadyInitialized() (gas: 267739) CoinbaseSmartWalletFactoryTest:test_implementation_returnsExpectedAddress() (gas: 7676) CoinbaseSmartWalletFactoryTest:test_initCodeHash() (gas: 7912) CoinbaseSmartWalletFactoryTest:test_revertsIfNoOwners() (gas: 29232) -ERC1271Test:test_returnsExpectedDomainHashWhenProxy() (gas: 29198) -ERC1271Test:test_static() (gas: 3235744) +ERC1271Test:test_returnsExpectedDomainHashWhenProxy() (gas: 29243) +ERC1271Test:test_static() (gas: 3239430) MultiOwnableInitializeTest:testRevertsIfLength32ButLargerThanAddress() (gas: 81111) MultiOwnableInitializeTest:testRevertsIfLength32NotAddress() (gas: 81092) MultiOwnableInitializeTest:testRevertsIfLengthNot32Or64() (gas: 103395) -RemoveLastOwnerTest:test_emitsRemoveOwner() (gas: 50337) -RemoveLastOwnerTest:test_removesOwner() (gas: 49609) -RemoveLastOwnerTest:test_removesOwnerAtIndex() (gas: 49562) +RemoveLastOwnerTest:test_emitsRemoveOwner() (gas: 50714) +RemoveLastOwnerTest:test_removesOwner() (gas: 50008) +RemoveLastOwnerTest:test_removesOwnerAtIndex() (gas: 49939) RemoveLastOwnerTest:test_revert_whenCalledByNonOwner(address) (runs: 256, μ: 19094, ~: 19094) -RemoveLastOwnerTest:test_revert_whenNoOwnerAtIndex() (gas: 48379) -RemoveLastOwnerTest:test_revert_whenWrongOwnerAtIndex() (gas: 34153) -RemoveLastOwnerTest:test_reverts_whenNotLastOwner() (gas: 123412) -RemoveOwnerAtIndexTest:test_emitsRemoveOwner() (gas: 55524) -RemoveOwnerAtIndexTest:test_removesOwner() (gas: 54784) -RemoveOwnerAtIndexTest:test_removesOwnerAtIndex() (gas: 54540) +RemoveLastOwnerTest:test_revert_whenNoOwnerAtIndex() (gas: 48758) +RemoveLastOwnerTest:test_revert_whenWrongOwnerAtIndex() (gas: 34532) +RemoveLastOwnerTest:test_reverts_whenNotLastOwner() (gas: 123813) +RemoveOwnerAtIndexTest:test_emitsRemoveOwner() (gas: 55549) +RemoveOwnerAtIndexTest:test_removesOwner() (gas: 54828) +RemoveOwnerAtIndexTest:test_removesOwnerAtIndex() (gas: 54566) RemoveOwnerAtIndexTest:test_revert_whenCalledByNonOwner(address) (runs: 256, μ: 19145, ~: 19145) -RemoveOwnerAtIndexTest:test_revert_whenNoOwnerAtIndex() (gas: 33372) -RemoveOwnerAtIndexTest:test_revert_whenWrongOwnerAtIndex() (gas: 36694) -RemoveOwnerAtIndexTest:test_reverts_ifIsLastOwner() (gas: 7471805) +RemoveOwnerAtIndexTest:test_revert_whenNoOwnerAtIndex() (gas: 33406) +RemoveOwnerAtIndexTest:test_revert_whenWrongOwnerAtIndex() (gas: 36728) +RemoveOwnerAtIndexTest:test_reverts_ifIsLastOwner() (gas: 7648612) TestCanSkipChainIdValidation:test_approvedSelectorsReturnTrue() (gas: 17781) TestCanSkipChainIdValidation:test_otherSelectorsReturnFalse() (gas: 12579) -TestExecuteWithoutChainIdValidation:testExecute() (gas: 424837) -TestExecuteWithoutChainIdValidation:testExecuteBatch() (gas: 728897) -TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3592913, ~: 3463925) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49920) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50155) +TestExecuteWithoutChainIdValidation:testExecute() (gas: 424882) +TestExecuteWithoutChainIdValidation:testExecuteBatch() (gas: 728942) +TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3628763, ~: 3759256) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49938) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50173) TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 81983) -TestExecuteWithoutChainIdValidation:test_reverts_whenCallerNotEntryPoint() (gas: 11053) -TestExecuteWithoutChainIdValidation:test_reverts_whenOneCallReverts() (gas: 467715) -TestExecuteWithoutChainIdValidation:test_reverts_whenOneSelectorNotApproved() (gas: 179684) -TestExecuteWithoutChainIdValidation:test_reverts_whenSelectorNotApproved() (gas: 106758) -TestExecuteWithoutChainIdValidation:test_succeeds_whenSelectorAllowed() (gas: 423916) -TestImplementation:testImplementation() (gas: 12623) -TestInitialize:testInitialize() (gas: 21034) -TestInitialize:test_cannotInitImplementation() (gas: 2885066) -TestIsValidSignature:testReturnsInvalidIfPasskeySigButWrongOwnerLength() (gas: 40187) -TestIsValidSignature:testRevertsIfEthereumSignatureButWrongOwnerLength() (gas: 24040) -TestIsValidSignature:testRevertsIfOwnerIsInvalidEthereumAddress() (gas: 22021) -TestIsValidSignature:testSmartWalletSigner() (gas: 3166717) -TestIsValidSignature:testValidateSignatureWithEOASigner() (gas: 24922) -TestIsValidSignature:testValidateSignatureWithEOASignerFailsWithWrongSigner() (gas: 23877) -TestIsValidSignature:testValidateSignatureWithPasskeySigner() (gas: 423238) -TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsBadOwnerIndex() (gas: 35664) -TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsWithWrongBadSignature() (gas: 430704) -TestUpgradeToAndCall:testUpgradeToAndCall() (gas: 25477) +TestExecuteWithoutChainIdValidation:test_reverts_whenCallerNotEntryPoint() (gas: 11031) +TestExecuteWithoutChainIdValidation:test_reverts_whenOneCallReverts() (gas: 467783) +TestExecuteWithoutChainIdValidation:test_reverts_whenOneSelectorNotApproved() (gas: 179662) +TestExecuteWithoutChainIdValidation:test_reverts_whenSelectorNotApproved() (gas: 106736) +TestExecuteWithoutChainIdValidation:test_succeeds_whenSelectorAllowed() (gas: 423939) +TestImplementation:testImplementation() (gas: 12558) +TestInitialize:testInitialize() (gas: 21012) +TestInitialize:test_cannotInitImplementation() (gas: 2888726) +TestIsValidSignature:testReturnsInvalidIfPasskeySigButWrongOwnerLength() (gas: 40165) +TestIsValidSignature:testRevertsIfEthereumSignatureButWrongOwnerLength() (gas: 24018) +TestIsValidSignature:testRevertsIfOwnerIsInvalidEthereumAddress() (gas: 21999) +TestIsValidSignature:testSmartWalletSigner() (gas: 3170333) +TestIsValidSignature:testValidateSignatureWithEOASigner() (gas: 24900) +TestIsValidSignature:testValidateSignatureWithEOASignerFailsWithWrongSigner() (gas: 23855) +TestIsValidSignature:testValidateSignatureWithPasskeySigner() (gas: 423216) +TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsBadOwnerIndex() (gas: 35642) +TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsWithWrongBadSignature() (gas: 430682) +TestUpgradeToAndCall:testUpgradeToAndCall() (gas: 25499) TestValidateUserOp:test_reverts_whenReplayableNonceKeyInvalidForSelector() (gas: 14187) TestValidateUserOp:test_reverts_whenSelectorInvalidForReplayableNonceKey() (gas: 14452) TestValidateUserOp:test_succeedsWithEOASigner() (gas: 447938) diff --git a/src/MultiOwnable.sol b/src/MultiOwnable.sol index 5c846ea..1543902 100644 --- a/src/MultiOwnable.sol +++ b/src/MultiOwnable.sol @@ -120,8 +120,7 @@ contract MultiOwnable { /// @param index The index of the owner to be removed. /// @param owner The ABI encoded bytes of the owner to be removed. function removeOwnerAtIndex(uint256 index, bytes calldata owner) external virtual onlyOwner { - MultiOwnableStorage storage $ = _getMultiOwnableStorage(); - if ($.nextOwnerIndex - $.removedOwnersCount == 1) { + if (ownerCount() == 1) { revert LastOwner(); } @@ -137,9 +136,8 @@ contract MultiOwnable { /// @param index The index of the owner to be removed. /// @param owner The ABI encoded bytes of the owner to be removed. function removeLastOwner(uint256 index, bytes calldata owner) external virtual onlyOwner { - MultiOwnableStorage storage $ = _getMultiOwnableStorage(); - uint256 ownersRemaining = $.nextOwnerIndex - $.removedOwnersCount; - if (ownersRemaining > 1) { + uint256 ownersRemaining = ownerCount(); + if (ownerCount() > 1) { revert NotLastOwner(ownersRemaining); } @@ -190,6 +188,14 @@ contract MultiOwnable { return _getMultiOwnableStorage().nextOwnerIndex; } + /// @notice Returns the current number of owners + /// + /// @return The current owner count + function ownerCount() public view virtual returns (uint256) { + MultiOwnableStorage storage $ = _getMultiOwnableStorage(); + return $.nextOwnerIndex - $.removedOwnersCount; + } + /// @notice Tracks the number of owners removed, used with nextOwnerIndex to avoid removing all owners /// /// @return The number of owners that have been removed. diff --git a/test/MultiOwnable/RemoveOwnerAtIndex.t.sol b/test/MultiOwnable/RemoveOwnerAtIndex.t.sol index bc585b1..cc83827 100644 --- a/test/MultiOwnable/RemoveOwnerAtIndex.t.sol +++ b/test/MultiOwnable/RemoveOwnerAtIndex.t.sol @@ -14,14 +14,17 @@ contract RemoveOwnerAtIndexTest is RemoveOwnerBaseTest { mock.init(initialOwners); assertEq(mock.nextOwnerIndex(), 1); assertEq(mock.removedOwnersCount(), 0); + assertEq(mock.ownerCount(), 1); vm.startPrank(firstOnwer); for (uint256 i; i < owners; i++) { mock.addOwnerAddress(makeAddr(string(abi.encodePacked(i)))); assertEq(mock.nextOwnerIndex(), i + 2); + assertEq(mock.ownerCount(), i + 2); } for (uint256 i = 1; i < owners + 1; i++) { mock.removeOwnerAtIndex(i, abi.encode(makeAddr(string(abi.encodePacked(i - 1))))); assertEq(mock.removedOwnersCount(), i); + assertEq(mock.ownerCount(), owners - i + 1); } vm.expectRevert(MultiOwnable.LastOwner.selector); mock.removeOwnerAtIndex(0, abi.encode(firstOnwer)); From 5e90754c1f5bbaca1620c8b05e4b026cc980feab Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Fri, 19 Apr 2024 11:18:15 -0400 Subject: [PATCH 11/42] do not call twice --- .gas-snapshot | 26 +++++++++++++------------- src/MultiOwnable.sol | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 99d4bb6..2c15399 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -23,31 +23,31 @@ CoinbaseSmartWalletFactoryTest:test_implementation_returnsExpectedAddress() (gas CoinbaseSmartWalletFactoryTest:test_initCodeHash() (gas: 7912) CoinbaseSmartWalletFactoryTest:test_revertsIfNoOwners() (gas: 29232) ERC1271Test:test_returnsExpectedDomainHashWhenProxy() (gas: 29243) -ERC1271Test:test_static() (gas: 3239430) +ERC1271Test:test_static() (gas: 3238027) MultiOwnableInitializeTest:testRevertsIfLength32ButLargerThanAddress() (gas: 81111) MultiOwnableInitializeTest:testRevertsIfLength32NotAddress() (gas: 81092) MultiOwnableInitializeTest:testRevertsIfLengthNot32Or64() (gas: 103395) -RemoveLastOwnerTest:test_emitsRemoveOwner() (gas: 50714) -RemoveLastOwnerTest:test_removesOwner() (gas: 50008) -RemoveLastOwnerTest:test_removesOwnerAtIndex() (gas: 49939) +RemoveLastOwnerTest:test_emitsRemoveOwner() (gas: 50363) +RemoveLastOwnerTest:test_removesOwner() (gas: 49657) +RemoveLastOwnerTest:test_removesOwnerAtIndex() (gas: 49588) RemoveLastOwnerTest:test_revert_whenCalledByNonOwner(address) (runs: 256, μ: 19094, ~: 19094) -RemoveLastOwnerTest:test_revert_whenNoOwnerAtIndex() (gas: 48758) -RemoveLastOwnerTest:test_revert_whenWrongOwnerAtIndex() (gas: 34532) -RemoveLastOwnerTest:test_reverts_whenNotLastOwner() (gas: 123813) +RemoveLastOwnerTest:test_revert_whenNoOwnerAtIndex() (gas: 48407) +RemoveLastOwnerTest:test_revert_whenWrongOwnerAtIndex() (gas: 34181) +RemoveLastOwnerTest:test_reverts_whenNotLastOwner() (gas: 123462) RemoveOwnerAtIndexTest:test_emitsRemoveOwner() (gas: 55549) RemoveOwnerAtIndexTest:test_removesOwner() (gas: 54828) RemoveOwnerAtIndexTest:test_removesOwnerAtIndex() (gas: 54566) RemoveOwnerAtIndexTest:test_revert_whenCalledByNonOwner(address) (runs: 256, μ: 19145, ~: 19145) RemoveOwnerAtIndexTest:test_revert_whenNoOwnerAtIndex() (gas: 33406) RemoveOwnerAtIndexTest:test_revert_whenWrongOwnerAtIndex() (gas: 36728) -RemoveOwnerAtIndexTest:test_reverts_ifIsLastOwner() (gas: 7648612) +RemoveOwnerAtIndexTest:test_reverts_ifIsLastOwner() (gas: 7647492) TestCanSkipChainIdValidation:test_approvedSelectorsReturnTrue() (gas: 17781) TestCanSkipChainIdValidation:test_otherSelectorsReturnFalse() (gas: 12579) TestExecuteWithoutChainIdValidation:testExecute() (gas: 424882) TestExecuteWithoutChainIdValidation:testExecuteBatch() (gas: 728942) -TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3628763, ~: 3759256) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49938) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50173) +TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3590200, ~: 3466169) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49931) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50166) TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 81983) TestExecuteWithoutChainIdValidation:test_reverts_whenCallerNotEntryPoint() (gas: 11031) TestExecuteWithoutChainIdValidation:test_reverts_whenOneCallReverts() (gas: 467783) @@ -56,11 +56,11 @@ TestExecuteWithoutChainIdValidation:test_reverts_whenSelectorNotApproved() (gas: TestExecuteWithoutChainIdValidation:test_succeeds_whenSelectorAllowed() (gas: 423939) TestImplementation:testImplementation() (gas: 12558) TestInitialize:testInitialize() (gas: 21012) -TestInitialize:test_cannotInitImplementation() (gas: 2888726) +TestInitialize:test_cannotInitImplementation() (gas: 2887326) TestIsValidSignature:testReturnsInvalidIfPasskeySigButWrongOwnerLength() (gas: 40165) TestIsValidSignature:testRevertsIfEthereumSignatureButWrongOwnerLength() (gas: 24018) TestIsValidSignature:testRevertsIfOwnerIsInvalidEthereumAddress() (gas: 21999) -TestIsValidSignature:testSmartWalletSigner() (gas: 3170333) +TestIsValidSignature:testSmartWalletSigner() (gas: 3168925) TestIsValidSignature:testValidateSignatureWithEOASigner() (gas: 24900) TestIsValidSignature:testValidateSignatureWithEOASignerFailsWithWrongSigner() (gas: 23855) TestIsValidSignature:testValidateSignatureWithPasskeySigner() (gas: 423216) diff --git a/src/MultiOwnable.sol b/src/MultiOwnable.sol index 1543902..ad8f174 100644 --- a/src/MultiOwnable.sol +++ b/src/MultiOwnable.sol @@ -137,7 +137,7 @@ contract MultiOwnable { /// @param owner The ABI encoded bytes of the owner to be removed. function removeLastOwner(uint256 index, bytes calldata owner) external virtual onlyOwner { uint256 ownersRemaining = ownerCount(); - if (ownerCount() > 1) { + if (ownersRemaining > 1) { revert NotLastOwner(ownersRemaining); } From a820d2194b430b3019af81e56001959d386236d0 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Sat, 20 Apr 2024 15:40:51 -0400 Subject: [PATCH 12/42] Smart Wallet --- src/CoinbaseSmartWallet.sol | 119 ++++++++++++++++++------------------ src/ERC1271.sol | 6 +- src/MultiOwnable.sol | 2 +- 3 files changed, 64 insertions(+), 63 deletions(-) diff --git a/src/CoinbaseSmartWallet.sol b/src/CoinbaseSmartWallet.sol index 8257742..8be584e 100644 --- a/src/CoinbaseSmartWallet.sol +++ b/src/CoinbaseSmartWallet.sol @@ -1,10 +1,11 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.23; +import {IAccount} from "account-abstraction/interfaces/IAccount.sol"; import {Receiver} from "solady/accounts/Receiver.sol"; -import {UUPSUpgradeable} from "solady/utils/UUPSUpgradeable.sol"; import {SignatureCheckerLib} from "solady/utils/SignatureCheckerLib.sol"; import {UserOperation, UserOperationLib} from "account-abstraction/interfaces/UserOperation.sol"; +import {UUPSUpgradeable} from "solady/utils/UUPSUpgradeable.sol"; import {WebAuthn} from "webauthn-sol/WebAuthn.sol"; import {ERC1271} from "./ERC1271.sol"; @@ -12,53 +13,55 @@ import {MultiOwnable} from "./MultiOwnable.sol"; /// @title Coinbase Smart Wallet /// -/// @notice ERC4337-compatible smart contract wallet, based on Solady ERC4337 account implementation +/// @notice ERC-4337-compatible smart account, based on Solady's ERC4337 account implementation /// with inspiration from Alchemy's LightAccount and Daimo's DaimoAccount. /// /// @author Coinbase (https://github.com/coinbase/smart-wallet) /// @author Solady (https://github.com/vectorized/solady/blob/main/src/accounts/ERC4337.sol) -contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 { - /// @notice Wrapper struct, used during signature validation, tie a signature with its signer. +contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable, Receiver { + /// @notice A wrapper struct used for signature validation so that callers + /// can identify the owner that signed. struct SignatureWrapper { - /// @dev The index indentifying owner (see MultiOwnable) who signed. + /// @dev The index of the owner that signed, see MultiOwnable.ownerAtIndex uint256 ownerIndex; - /// @dev An ABI encoded ECDSA signature (r, s, v) or WebAuthnAuth struct. + /// @dev If MultiOwnable.ownerAtIndex is an Ethereum address, this should be `abi.encodePacked(r, s, v)` + /// If MultiOwnable.ownerAtIndex is a public key, this should be `abi.encode(WebAuthnAuth)`. bytes signatureData; } - /// @notice Wrapper struct, used in `executeBatch`, describing a raw call to execute. + /// @notice Represents a call to make. struct Call { - /// @dev The target address to call. + /// @dev The address to call. address target; - /// @dev The value to associate with the call. + /// @dev The value to send when making the call. uint256 value; - /// @dev The raw call data. + /// @dev The data of the call. bytes data; } /// @notice Reserved nonce key (upper 192 bits of `UserOperation.nonce`) for cross-chain replayable /// transactions. /// + /// @dev MUST BE the `UserOperation.nonce` key when `UserOperation.calldata` is calling `executeWithoutChainIdValidation` + /// and MUST NOT BE `UserOperation.nonce` key when `UserOperation.calldata` is NOT calling `executeWithoutChainIdValidation`. + /// /// @dev Helps enforce sequential sequencing of replayable transactions. uint256 public constant REPLAYABLE_NONCE_KEY = 8453; - /// @notice Thrown when trying to re-initialize an account. + /// @notice Thrown when `initialize` is called but the account already has had at least one owner. error Initialized(); - /// @notice Thrown when executing a `UserOperation` that requires the chain ID to be validated - /// but this validation has been omitted. + /// @notice Thrown when a call is passed to `executeWithoutChainIdValidation` that is not allowed by `canSkipChainIdValidation` /// - /// @dev Whitelisting of `UserOperation`s that are allowed to skip the chain ID validation is - /// based on their call selectors (see `canSkipChainIdValidation()`). - /// - /// @param selector The user operation call selector that raised the error. + /// @param selector The selector of the call. error SelectorNotAllowed(bytes4 selector); - /// @notice Thrown during a `UserOperation` validation when its key is invalid. + /// @notice Thrown in validateUserOp if the key of `UserOperation.nonce` does not match the calldata. /// - /// @dev The `UserOperation` key validation is based on the `UserOperation` call selector. + /// @dev Calls to `executeWithoutChainIdValidation` MUST use REPLAYABLE_NONCE_KEY and + /// calls NOT to `executeWithoutChainIdValidation` MUST NOT use REPLAYABLE_NONCE_KEY. /// - /// @param key The invalid `UserOperation` key. + /// @param key The invalid `UserOperation.nonce` key. error InvalidNonceKey(uint256 key); /// @notice Reverts if the caller is not the EntryPoint. @@ -106,11 +109,13 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 _initializeOwners(owners); } - /// @notice Initializes the account with the the given owners. + /// @notice Initializes the account with the `owners`. /// - /// @dev Reverts if the account has already been initialized. + /// @dev Reverts if the account has had at least one owner, i.e. has been initialized. /// - /// @param owners The initial array of owners to initialize this account with. + /// @param owners Array of initial owners for this account. Each item should be + /// an ABI encoded Ethereum address, i.e. 32 bytes with 12 leading 0 bytes, + /// or a 64 byte public key. function initialize(bytes[] calldata owners) external payable virtual { if (nextOwnerIndex() != 0) { revert Initialized(); @@ -119,21 +124,23 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 _initializeOwners(owners); } - /// @notice Custom implemenentation of the ERC-4337 `validateUserOp` method. The EntryPoint will - /// make the call to the recipient only if this validation call returns successfully. - /// See `IAccount.validateUserOp()`. + /// @inheritdoc IAccount + /// + /// @notice ERC-4337 `validateUserOp` method. The EntryPoint will + /// call `UserOperation.sender.call(UserOperation.callData)` only if this validation call returns successfully. /// - /// @dev Signature failure should be reported by returning 1 (see: `_validateSignature()`). This - /// allows making a "simulation call" without a valid signature. Other failures (e.g. nonce - /// mismatch, or invalid signature format) should still revert to signal failure. - /// @dev Reverts if the `UserOperation` key is invalid. - /// @dev Reverts if the signature verification fails (except for the case mentionned earlier). + /// @dev Signature failure should be reported by returning 1 (see: `_isValidSignature()`). This + /// allows making a "simulation call" without a valid signature. Other failures (e.g. invalid signature format) should still revert to signal failure. + /// @dev Reverts if the `UserOperation.nonce` key is invalid for `UserOperation.calldata`. + /// @dev Reverts if the signature format is incorrect or invalid for owner type. /// /// @param userOp The `UserOperation` to validate. - /// @param userOpHash The `UserOperation` hash (including the chain ID). + /// @param userOpHash The `UserOperation` hash, as computed by `EntryPoint.getUserOpHash(UserOperation)`. /// @param missingAccountFunds The missing account funds that must be deposited on the Entrypoint. /// - /// @return validationData The encoded `ValidationData` structure. + /// @return validationData The encoded `ValidationData` structure: + /// `(uint256(validAfter) << (160 + 48)) | (uint256(validUntil) << 160) | (success ? 0 : 1)` + /// where `validUntil` is 0 (indefinite) and `validAfter` is 0. function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds) external payable @@ -156,22 +163,20 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 } // Return 0 if the recovered address matches the owner. - if (_validateSignature(userOpHash, userOp.signature)) { + if (_isValidSignature(userOpHash, userOp.signature)) { return 0; } - // Else return 1, which is equivalent to: - // `(uint256(validAfter) << (160 + 48)) | (uint256(validUntil) << 160) | (success ? 0 : 1)` - // where `validUntil` is 0 (indefinite) and `validAfter` is 0. + // Else return 1 return 1; } - /// @notice Execute the given calls from this account to this account (i.e. self call). + /// @notice Execute `calls` on this account (i.e. self call). /// /// @dev Can only be called by the Entrypoint. /// @dev Reverts if the given call is not authorized to skip the chain ID validtion. /// @dev `validateUserOp()` will recompute the `userOpHash` without the chain ID before validating - /// it if the `UserOperation` aims at executing this function. This allows certain operations + /// it if the `UserOperation.calldata` is calling this function. This allows certain UserOperations /// to be replayed for all accounts sharing the same address across chains. E.g. This may be /// useful for syncing owner changes. /// @@ -192,9 +197,9 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 /// /// @dev Can only be called by the Entrypoint or an owner of this account (including itself). /// - /// @param target The target call address. - /// @param value The call value to user. - /// @param data The raw call data. + /// @param target The address to call. + /// @param value The value to send with the call. + /// @param data The data of the call. function execute(address target, uint256 value, bytes calldata data) external payable @@ -204,7 +209,7 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 _call(target, value, data); } - /// @notice Execute the given list of calls from this account. + /// @notice Executes batch of `Call`s. /// /// @dev Can only be called by the Entrypoint or an owner of this account (including itself). /// @@ -217,7 +222,7 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 /// @notice Returns the address of the EntryPoint v0.6. /// - /// @return The address of the EntryPoint v0.6 + /// @return Address of the EntryPoint v0.6 function entryPoint() public view virtual returns (address) { return 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789; } @@ -229,7 +234,7 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 /// /// @param userOp The `UserOperation` to compute the hash for. /// - /// @return userOpHash The `UserOperation` hash, not including the chain ID. + /// @return userOpHash The `UserOperation` hash, which does not depend on chain ID. function getUserOpHashWithoutChainId(UserOperation calldata userOp) public view @@ -248,11 +253,11 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 } } - /// @notice Check if the given function selector is whitelisted to skip the chain ID validation. + /// @notice Returns whether `functionSelector` can be called in `executeWithoutChainIdValidation`. /// /// @param functionSelector The function selector to check. //// - /// @return `true` is the function selector is whitelisted to skip the chain ID validation, else `false`. + /// @return `true` is the function selector is allowed to skip the chain ID validation, else `false`. function canSkipChainIdValidation(bytes4 functionSelector) public pure returns (bool) { if ( functionSelector == MultiOwnable.addOwnerPublicKey.selector @@ -266,10 +271,11 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 return false; } - /// @notice Execute the given call from this account. + /// @notice Executes the given call from this account. /// /// @dev Reverts if the call reverted. - /// @dev Impl taken from https://github.com/alchemyplatform/light-account/blob/main/src/LightAccount.sol#L347 + /// @dev Implementation taken from + /// https://github.com/alchemyplatform/light-account/blob/43f625afdda544d5e5af9c370c9f4be0943e4e90/src/common/BaseLightAccount.sol#L125 /// /// @param target The target call address. /// @param value The call value to user. @@ -285,15 +291,11 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 /// @inheritdoc ERC1271 /// - /// @dev Used both for classic ERC-1271 signature AND `UserOperation` validations. - /// @dev Reverts if the signer (based on the `ownerIndex`) is not compatible with the signature. - /// @dev Reverts if the signature does not correspond to an ERC-1271 signature or to the abi - /// encoded version of a `WebAuthnAuth` struct. - /// @dev Does NOT revert if the signature verification fails to allow making a "simulation call" - /// without a valid signature. + /// @dev Used both for ERC-1271.isValidSignature AND ERC-4337.validateUserOp signature validation. + /// @dev Reverts if owner at `ownerIndex` is not compatible with `signature` format. /// - /// @param signature The abi encoded `SignatureWrapper` struct. - function _validateSignature(bytes32 message, bytes calldata signature) + /// @param signature ABI encoded `SignatureWrapper`. + function _isValidSignature(bytes32 message, bytes calldata signature) internal view virtual @@ -331,7 +333,8 @@ contract CoinbaseSmartWallet is MultiOwnable, UUPSUpgradeable, Receiver, ERC1271 /// @inheritdoc UUPSUpgradeable /// - /// @dev Authorization logic is only based on the sender being an owner of this account. + /// @dev Authorization logic is only based on the `msg.sender` being an owner of this account, + /// or `address(this)`. function _authorizeUpgrade(address) internal view virtual override(UUPSUpgradeable) onlyOwner {} /// @inheritdoc ERC1271 diff --git a/src/ERC1271.sol b/src/ERC1271.sol index c3144f3..410fb9e 100644 --- a/src/ERC1271.sol +++ b/src/ERC1271.sol @@ -142,15 +142,13 @@ abstract contract ERC1271 { /// @return version The current major version of the signing domain. function _domainNameAndVersion() internal view virtual returns (string memory name, string memory version); - /// @notice Validate the `signature` against the given `message`. + /// @notice Validates the `signature` against the given `message`. /// /// @dev MUST be defined by the implementation. - /// @dev The `signature` content MIGHT NOT necessarily be the usual (r,s,v) values. It is the responsibility - /// of the implementation to decode `signature` depending on its usecase. /// /// @param message The message whose signature has been performed on. /// @param signature The signature associated with `message`. /// /// @return `true` is the signature is valid, else `false`. - function _validateSignature(bytes32 message, bytes calldata signature) internal view virtual returns (bool); + function _isValidSignature(bytes32 message, bytes calldata signature) internal view virtual returns (bool); } diff --git a/src/MultiOwnable.sol b/src/MultiOwnable.sol index ad8f174..b8374a6 100644 --- a/src/MultiOwnable.sol +++ b/src/MultiOwnable.sol @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.4; +pragma solidity ^0.8.18; /// @notice Storage layout used by this contract. /// From 13a12e4ead3d037d30d3a0d8eadc658c346b24f7 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Sat, 20 Apr 2024 15:53:50 -0400 Subject: [PATCH 13/42] factory --- src/CoinbaseSmartWalletFactory.sol | 43 +++++++++++++++--------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/src/CoinbaseSmartWalletFactory.sol b/src/CoinbaseSmartWalletFactory.sol index 7db73ba..d04b89c 100644 --- a/src/CoinbaseSmartWalletFactory.sol +++ b/src/CoinbaseSmartWalletFactory.sol @@ -18,23 +18,23 @@ contract CoinbaseSmartWalletFactory { error OwnerRequired(); /// @notice Factory constructor used to initialize the implementation address to use for future - /// ERC-4337 account deployments. + /// CoinbaseSmartWallet deployments. /// - /// @param erc4337 The address of the ERC-4337 implementation used to deploy new cloned accounts. - constructor(address erc4337) payable { - implementation = erc4337; + /// @param implementation_ The address of the CoinbaseSmartWallet implementation which new accounts will proxy to. + constructor(address implementation_) payable { + implementation = implementation_; } - /// @notice Deploys an ERC-4337 account and returns its deterministic address. + /// @notice Returns the deterministic address for a CoinbaseSmartWallet created with `owners` and `nonce` + /// deploys and initializes contract if it has not yet been created. /// - /// @dev The account is deployed behind a minimal ERC1967 proxy whose implementation points to - /// the registered ERC-4337 `implementation`. - /// @dev The `owners` parameter is a set of addresses and/or public keys depending on the signature - /// scheme used (respectively ERC-1271 or Webauthn authentication). + /// @dev Deployed as a ERC-1967 proxy that's implementation is `this.implementation`. /// - /// @param owners The initial set of owners that should be able to control the account. - /// @param nonce The nonce of the account, allowing multiple accounts with the same set of initial - /// owners to exist. + /// @param owners Array of initial owners. Each item should be an ABI encoded address or 64 byte public key. + /// @param nonce The nonce of the account, a caller defined value which allows multiple accounts + /// with the same `owners` to exist at different addresses. + /// + /// @return account The address of the ERC-1967 proxy created with inputs `owners`, `nonce`, and `this.implementation`. function createAccount(bytes[] calldata owners, uint256 nonce) external payable @@ -55,9 +55,9 @@ contract CoinbaseSmartWalletFactory { } } - /// @notice Returns the deterministic address of the account created via `createAccount()`. + /// @notice Returns the deterministic address of the account that would be created by `createAccount`. /// - /// @param owners The initial set of owners provided to `createAccount()`. + /// @param owners Array of initial owners. Each item should be an ABI encoded address or 64 byte public key. /// @param nonce The nonce provided to `createAccount()`. /// /// @return predicted The predicted account deployment address. @@ -65,20 +65,21 @@ contract CoinbaseSmartWalletFactory { predicted = LibClone.predictDeterministicAddress(initCodeHash(), _getSalt(owners, nonce), address(this)); } - /// @notice Returns the initialization code hash of the account (a minimal ERC1967 proxy). + /// @notice Returns the initialization code hash of the account: + /// a ERC1967 proxy that's implementation is `this.implementation`. /// /// @return result The initialization code hash. - function initCodeHash() public view virtual returns (bytes32 result) { - result = LibClone.initCodeHashERC1967(implementation); + function initCodeHash() public view virtual returns (bytes32) { + return LibClone.initCodeHashERC1967(implementation); } - /// @notice Returns the deterministic salt for a specific set of `owners` and `nonce`. + /// @notice Returns the create2 salt for `LibClone.predictDeterministicAddress` /// - /// @param owners The initial set of owners provided to `createAccount()`. + /// @param owners Array of initial owners. Each item should be an ABI encoded address or 64 byte public key. /// @param nonce The nonce provided to `createAccount()`. /// /// @return salt The computed salt. - function _getSalt(bytes[] calldata owners, uint256 nonce) internal pure returns (bytes32 salt) { - salt = keccak256(abi.encode(owners, nonce)); + function _getSalt(bytes[] calldata owners, uint256 nonce) internal pure returns (bytes32) { + return keccak256(abi.encode(owners, nonce)); } } From 9cee8c9aa06ebbf85ce4e8e066b7b98550818b51 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Sat, 20 Apr 2024 15:59:13 -0400 Subject: [PATCH 14/42] ERC1271 --- src/CoinbaseSmartWallet.sol | 13 +++---------- src/ERC1271.sol | 12 ++++++------ 2 files changed, 9 insertions(+), 16 deletions(-) diff --git a/src/CoinbaseSmartWallet.sol b/src/CoinbaseSmartWallet.sol index 8be584e..7ca24ec 100644 --- a/src/CoinbaseSmartWallet.sol +++ b/src/CoinbaseSmartWallet.sol @@ -143,7 +143,6 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// where `validUntil` is 0 (indefinite) and `validAfter` is 0. function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds) external - payable virtual onlyEntryPoint payPrefund(missingAccountFunds) @@ -295,13 +294,7 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// @dev Reverts if owner at `ownerIndex` is not compatible with `signature` format. /// /// @param signature ABI encoded `SignatureWrapper`. - function _isValidSignature(bytes32 message, bytes calldata signature) - internal - view - virtual - override - returns (bool) - { + function _isValidSignature(bytes32 hash, bytes calldata signature) internal view virtual override returns (bool) { SignatureWrapper memory sigWrapper = abi.decode(signature, (SignatureWrapper)); bytes memory ownerBytes = ownerAtIndex(sigWrapper.ownerIndex); @@ -317,7 +310,7 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable owner := mload(add(ownerBytes, 32)) } - return SignatureCheckerLib.isValidSignatureNow(owner, message, sigWrapper.signatureData); + return SignatureCheckerLib.isValidSignatureNow(owner, hash, sigWrapper.signatureData); } if (ownerBytes.length == 64) { @@ -325,7 +318,7 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable WebAuthn.WebAuthnAuth memory auth = abi.decode(sigWrapper.signatureData, (WebAuthn.WebAuthnAuth)); - return WebAuthn.verify({challenge: abi.encode(message), requireUV: false, webAuthnAuth: auth, x: x, y: y}); + return WebAuthn.verify({challenge: abi.encode(hash), requireUV: false, webAuthnAuth: auth, x: x, y: y}); } revert InvalidOwnerBytesLength(ownerBytes); diff --git a/src/ERC1271.sol b/src/ERC1271.sol index 410fb9e..8081481 100644 --- a/src/ERC1271.sol +++ b/src/ERC1271.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; -/// @title ERC-1271 With Cross Account Replay Protection +/// @title ERC-1271 /// /// @notice Abstract ERC-1271 implementation (based on Solady's) with guards to handle the same /// signer being used on multiple accounts. @@ -67,7 +67,7 @@ abstract contract ERC1271 { /// /// @return result `0x1626ba7e` if validation succeeded, else `0xffffffff`. function isValidSignature(bytes32 hash, bytes calldata signature) public view virtual returns (bytes4 result) { - if (_validateSignature({message: replaySafeHash(hash), signature: signature})) { + if (_isValidSignature({hash: replaySafeHash(hash), signature: signature})) { // bytes4(keccak256("isValidSignature(bytes32,bytes)")) return 0x1626ba7e; } @@ -142,13 +142,13 @@ abstract contract ERC1271 { /// @return version The current major version of the signing domain. function _domainNameAndVersion() internal view virtual returns (string memory name, string memory version); - /// @notice Validates the `signature` against the given `message`. + /// @notice Validates the `signature` against the given `hash`. /// /// @dev MUST be defined by the implementation. /// - /// @param message The message whose signature has been performed on. - /// @param signature The signature associated with `message`. + /// @param hash The hash whose signature has been performed on. + /// @param signature The signature associated with `hash`. /// /// @return `true` is the signature is valid, else `false`. - function _isValidSignature(bytes32 message, bytes calldata signature) internal view virtual returns (bool); + function _isValidSignature(bytes32 hash, bytes calldata signature) internal view virtual returns (bool); } From 8e4041d783549941bcfffabcc3021c6864c44fa1 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Sat, 20 Apr 2024 16:14:47 -0400 Subject: [PATCH 15/42] multiownable --- src/MultiOwnable.sol | 68 ++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/src/MultiOwnable.sol b/src/MultiOwnable.sol index b8374a6..c7ecfa1 100644 --- a/src/MultiOwnable.sol +++ b/src/MultiOwnable.sol @@ -9,21 +9,20 @@ struct MultiOwnableStorage { uint256 nextOwnerIndex; /// @dev Tracks number of owners that have been removed. uint256 removedOwnersCount; - /// @dev Mapping of indices to raw owner bytes, used to idenfitied owners by their - /// uint256 id. + /// @dev Maps index to owner bytes, used to idenfitied owners via a uint256 index. /// - /// Some uses —-such as signature validation for secp256r1 public key owners—- - /// requires the caller to assert which owner signed. To economize calldata, + /// Some uses—-such as signature validation for secp256r1 public key owners—- + /// requires the caller to assert the public key of the caller. To economize calldata, /// we allow an index to identify an owner, so that the full owner bytes do /// not need to be passed. /// - /// The underlying raw bytes can either be: - /// - An abi encoded ethereum address - /// - The abi encoded public key (x, y) coordinates when using passkey. + /// The `owner` bytes should either be + /// - An ABI encoded Ethereum address + /// - An ABI encoded public key mapping(uint256 index => bytes owner) ownerAtIndex; - /// @dev Mapping of raw bytes accounts to booleans indicating whether or not the - /// account is an owner of this contract. - mapping(bytes account => bool isOwner_) isOwner; + /// @dev Mapping of bytes to booleans indicating whether or not + /// bytes_ is an owner of this contract. + mapping(bytes bytes_ => bool isOwner_) isOwner; } /// @title Multi Ownable @@ -38,12 +37,12 @@ contract MultiOwnable { bytes32 private constant MUTLI_OWNABLE_STORAGE_LOCATION = 0x97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00; - /// @notice Thrown when the sender is not an owner and is trying to call a privileged function. + /// @notice Thrown when the `msg.sender` is not an owner and is trying to call a privileged function. error Unauthorized(); /// @notice Thrown when trying to add an already registered owner. /// - /// @param owner The raw abi encoded owner bytes. + /// @param owner The owner bytes. error AlreadyOwner(bytes owner); /// @notice Thrown when trying to remove an owner from an index that is empty. @@ -58,16 +57,15 @@ contract MultiOwnable { /// @param actualOwner The actual owner at `index`. error WrongOwnerAtIndex(uint256 index, bytes expectedOwner, bytes actualOwner); - /// @notice Thrown when trying to intialize the contracts owners if a provided owner is neither - /// 64 bytes long (for passkey) nor a valid address. + /// @notice Thrown when a provided owner is neither 64 bytes long (for public key) + /// nor a ABI encoded address. /// - /// @param owner The invalid raw abi encoded owner bytes. + /// @param owner The invalid owner. error InvalidOwnerBytesLength(bytes owner); - /// @notice Thrown when trying to intialize the contracts owners if a provided owner is 32 bytes - /// long but does not fit in an `address` type (`uint160`). + /// @notice Thrown if a provided owner is 32 bytes long but does not fit in an `address` type. /// - /// @param owner The invalid raw abi encoded owner bytes. + /// @param owner The invalid owner. error InvalidEthereumAddressOwner(bytes owner); /// @notice Thrown when removeOwnerAtIndex is called and there is only one current owner. @@ -80,14 +78,14 @@ contract MultiOwnable { /// @notice Emitted when a new owner is registered. /// - /// @param index The owner index. - /// @param owner The raw abi encoded owner bytes. + /// @param index The owner index of the owner added. + /// @param owner The owner added. event AddOwner(uint256 indexed index, bytes owner); /// @notice Emitted when an owner is removed. /// - /// @param index The owner index. - /// @param owner The raw abi encoded owner bytes. + /// @param index The owner index of the owner removed. + /// @param owner The owner removed. event RemoveOwner(uint256 indexed index, bytes owner); /// @notice Access control modifier ensuring the caller is an authorized owner @@ -96,14 +94,14 @@ contract MultiOwnable { _; } - /// @notice Convenience function to add a new owner address. + /// @notice Add a new Ethereum address owner. /// /// @param owner The owner address. function addOwnerAddress(address owner) external virtual onlyOwner { _addOwnerAtIndex(abi.encode(owner), _getMultiOwnableStorage().nextOwnerIndex++); } - /// @notice Convenience function to add a new owner passkey. + /// @notice Adds a new public key owner. /// /// @param x The owner public key x coordinate. /// @param y The owner public key y coordinate. @@ -148,26 +146,26 @@ contract MultiOwnable { /// /// @param account The account address to check. /// - /// @return `true` if the account is an owner, else `false`. + /// @return `true` if the account is an owner else `false`. function isOwnerAddress(address account) public view virtual returns (bool) { return _getMultiOwnableStorage().isOwner[abi.encode(account)]; } - /// @notice Checks if the given `account` public key is registered as owner. + /// @notice Checks if the given `x`, `y` public key is registered as owner. /// /// @param x The public key x coordinate. /// @param y The public key y coordinate. /// - /// @return `true` if the account is an owner, else `false`. + /// @return `true` if the account is an owner else `false`. function isOwnerPublicKey(bytes32 x, bytes32 y) public view virtual returns (bool) { return _getMultiOwnableStorage().isOwner[abi.encode(x, y)]; } - /// @notice Checks if the given `account` raw bytes is registered as owner. + /// @notice Checks if the given `account` bytes is registered as owner. /// - /// @param account The account to check identified by its address or passkey. + /// @param account The account, should be ABI encoded address or public key. /// - /// @return `true` if the account is an owner, else `false`. + /// @return `true` if the account is an owner else `false`. function isOwnerBytes(bytes memory account) public view virtual returns (bool) { return _getMultiOwnableStorage().isOwner[account]; } @@ -196,7 +194,9 @@ contract MultiOwnable { return $.nextOwnerIndex - $.removedOwnersCount; } - /// @notice Tracks the number of owners removed, used with nextOwnerIndex to avoid removing all owners + /// @notice Tracks the number of owners removed + /// + /// @dev used with nextOwnerIndex to avoid removing all owners /// /// @return The number of owners that have been removed. function removedOwnersCount() public view virtual returns (uint256) { @@ -205,10 +205,10 @@ contract MultiOwnable { /// @notice Initialize the owners of this contract. /// - /// @dev Intended to be called when the smart account is first deployed. - /// @dev Reverts if a provided owner is neither 64 bytes long (for passkey) nor a valid address. + /// @dev Intended to be called contract is first deployed and never again. + /// @dev Reverts if a provided owner is neither 64 bytes long (for public key) nor a valid address. /// - /// @param owners The intiial list of owners to register. + /// @param owners The initial set of owners. function _initializeOwners(bytes[] memory owners) internal virtual { MultiOwnableStorage storage $ = _getMultiOwnableStorage(); uint256 nextOwnerIndex_ = $.nextOwnerIndex; From e467b9e6abbc5a01b5cbf5ef6bff6cb1f9362aef Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 08:32:00 -0400 Subject: [PATCH 16/42] baptist feedback --- src/CoinbaseSmartWallet.sol | 24 ++++++++++++------------ src/MultiOwnable.sol | 4 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/CoinbaseSmartWallet.sol b/src/CoinbaseSmartWallet.sol index 7ca24ec..c5b6537 100644 --- a/src/CoinbaseSmartWallet.sol +++ b/src/CoinbaseSmartWallet.sol @@ -20,12 +20,12 @@ import {MultiOwnable} from "./MultiOwnable.sol"; /// @author Solady (https://github.com/vectorized/solady/blob/main/src/accounts/ERC4337.sol) contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable, Receiver { /// @notice A wrapper struct used for signature validation so that callers - /// can identify the owner that signed. + /// can identify the owner that signed. struct SignatureWrapper { - /// @dev The index of the owner that signed, see MultiOwnable.ownerAtIndex + /// @dev The index of the owner that signed, see `MultiOwnable.ownerAtIndex` uint256 ownerIndex; - /// @dev If MultiOwnable.ownerAtIndex is an Ethereum address, this should be `abi.encodePacked(r, s, v)` - /// If MultiOwnable.ownerAtIndex is a public key, this should be `abi.encode(WebAuthnAuth)`. + /// @dev If `MultiOwnable.ownerAtIndex` is an Ethereum address, this should be `abi.encodePacked(r, s, v)` + /// If `MultiOwnable.ownerAtIndex` is a public key, this should be `abi.encode(WebAuthnAuth)`. bytes signatureData; } @@ -43,7 +43,7 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// transactions. /// /// @dev MUST BE the `UserOperation.nonce` key when `UserOperation.calldata` is calling `executeWithoutChainIdValidation` - /// and MUST NOT BE `UserOperation.nonce` key when `UserOperation.calldata` is NOT calling `executeWithoutChainIdValidation`. + /// and MUST NOT BE `UserOperation.nonce` key when `UserOperation.calldata` is NOT calling `executeWithoutChainIdValidation`. /// /// @dev Helps enforce sequential sequencing of replayable transactions. uint256 public constant REPLAYABLE_NONCE_KEY = 8453; @@ -58,8 +58,8 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// @notice Thrown in validateUserOp if the key of `UserOperation.nonce` does not match the calldata. /// - /// @dev Calls to `executeWithoutChainIdValidation` MUST use REPLAYABLE_NONCE_KEY and - /// calls NOT to `executeWithoutChainIdValidation` MUST NOT use REPLAYABLE_NONCE_KEY. + /// @dev Calls to `this.executeWithoutChainIdValidation` MUST use `REPLAYABLE_NONCE_KEY` and + /// calls NOT to `this.executeWithoutChainIdValidation` MUST NOT use `REPLAYABLE_NONCE_KEY`. /// /// @param key The invalid `UserOperation.nonce` key. error InvalidNonceKey(uint256 key); @@ -114,8 +114,8 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// @dev Reverts if the account has had at least one owner, i.e. has been initialized. /// /// @param owners Array of initial owners for this account. Each item should be - /// an ABI encoded Ethereum address, i.e. 32 bytes with 12 leading 0 bytes, - /// or a 64 byte public key. + /// an ABI encoded Ethereum address, i.e. 32 bytes with 12 leading 0 bytes, + /// or a 64 byte public key. function initialize(bytes[] calldata owners) external payable virtual { if (nextOwnerIndex() != 0) { revert Initialized(); @@ -129,7 +129,7 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// @notice ERC-4337 `validateUserOp` method. The EntryPoint will /// call `UserOperation.sender.call(UserOperation.callData)` only if this validation call returns successfully. /// - /// @dev Signature failure should be reported by returning 1 (see: `_isValidSignature()`). This + /// @dev Signature failure should be reported by returning 1 (see: `this._isValidSignature`). This /// allows making a "simulation call" without a valid signature. Other failures (e.g. invalid signature format) should still revert to signal failure. /// @dev Reverts if the `UserOperation.nonce` key is invalid for `UserOperation.calldata`. /// @dev Reverts if the signature format is incorrect or invalid for owner type. @@ -139,8 +139,8 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// @param missingAccountFunds The missing account funds that must be deposited on the Entrypoint. /// /// @return validationData The encoded `ValidationData` structure: - /// `(uint256(validAfter) << (160 + 48)) | (uint256(validUntil) << 160) | (success ? 0 : 1)` - /// where `validUntil` is 0 (indefinite) and `validAfter` is 0. + /// `(uint256(validAfter) << (160 + 48)) | (uint256(validUntil) << 160) | (success ? 0 : 1)` + /// where `validUntil` is 0 (indefinite) and `validAfter` is 0. function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds) external virtual diff --git a/src/MultiOwnable.sol b/src/MultiOwnable.sol index c7ecfa1..f2ab2d4 100644 --- a/src/MultiOwnable.sol +++ b/src/MultiOwnable.sol @@ -94,14 +94,14 @@ contract MultiOwnable { _; } - /// @notice Add a new Ethereum address owner. + /// @notice Adds a new Ethereum-address owner. /// /// @param owner The owner address. function addOwnerAddress(address owner) external virtual onlyOwner { _addOwnerAtIndex(abi.encode(owner), _getMultiOwnableStorage().nextOwnerIndex++); } - /// @notice Adds a new public key owner. + /// @notice Adds a new public-key owner. /// /// @param x The owner public key x coordinate. /// @param y The owner public key y coordinate. From b4a9f149ca8022d2e80d1835e12c49b3b1159d61 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 08:35:51 -0400 Subject: [PATCH 17/42] sort imports --- foundry.toml | 3 +++ script/DeployERC4337Factory.s.sol | 2 +- src/CoinbaseSmartWallet.sol | 3 ++- src/CoinbaseSmartWalletFactory.sol | 2 +- test/CoinbaseSmartWallet/Execute.t.sol | 2 +- test/CoinbaseSmartWallet/ExecuteBatch.t.sol | 2 +- test/CoinbaseSmartWallet/Implementation.t.sol | 2 +- test/CoinbaseSmartWallet/SmartWalletTestBase.sol | 2 +- test/CoinbaseSmartWalletFactory.t.sol | 3 ++- test/ERC1271.t.sol | 2 +- test/ERC1271InputGenerator.t.sol | 1 + 11 files changed, 15 insertions(+), 9 deletions(-) diff --git a/foundry.toml b/foundry.toml index 25b918f..3858f05 100644 --- a/foundry.toml +++ b/foundry.toml @@ -3,4 +3,7 @@ src = "src" out = "out" libs = ["lib"] +[fmt] +sort_imports = true + # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options diff --git a/script/DeployERC4337Factory.s.sol b/script/DeployERC4337Factory.s.sol index 4328ef3..3662b7f 100644 --- a/script/DeployERC4337Factory.s.sol +++ b/script/DeployERC4337Factory.s.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.13; import {Script, console2} from "forge-std/Script.sol"; -import {CoinbaseSmartWalletFactory, CoinbaseSmartWallet} from "../src/CoinbaseSmartWalletFactory.sol"; +import {CoinbaseSmartWallet, CoinbaseSmartWalletFactory} from "../src/CoinbaseSmartWalletFactory.sol"; contract ERC4337FactoryDeployScript is Script { function setUp() public {} diff --git a/src/CoinbaseSmartWallet.sol b/src/CoinbaseSmartWallet.sol index c5b6537..8b11a34 100644 --- a/src/CoinbaseSmartWallet.sol +++ b/src/CoinbaseSmartWallet.sol @@ -2,9 +2,10 @@ pragma solidity 0.8.23; import {IAccount} from "account-abstraction/interfaces/IAccount.sol"; + +import {UserOperation, UserOperationLib} from "account-abstraction/interfaces/UserOperation.sol"; import {Receiver} from "solady/accounts/Receiver.sol"; import {SignatureCheckerLib} from "solady/utils/SignatureCheckerLib.sol"; -import {UserOperation, UserOperationLib} from "account-abstraction/interfaces/UserOperation.sol"; import {UUPSUpgradeable} from "solady/utils/UUPSUpgradeable.sol"; import {WebAuthn} from "webauthn-sol/WebAuthn.sol"; diff --git a/src/CoinbaseSmartWalletFactory.sol b/src/CoinbaseSmartWalletFactory.sol index d04b89c..29db9fe 100644 --- a/src/CoinbaseSmartWalletFactory.sol +++ b/src/CoinbaseSmartWalletFactory.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; -import {LibClone} from "solady/utils/LibClone.sol"; import {CoinbaseSmartWallet} from "./CoinbaseSmartWallet.sol"; +import {LibClone} from "solady/utils/LibClone.sol"; /// @title Coinbase Smart Wallet Factory /// diff --git a/test/CoinbaseSmartWallet/Execute.t.sol b/test/CoinbaseSmartWallet/Execute.t.sol index fc0ca61..514722b 100644 --- a/test/CoinbaseSmartWallet/Execute.t.sol +++ b/test/CoinbaseSmartWallet/Execute.t.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.0; import "solady/../test/utils/TestPlus.sol"; -import "./SmartWalletTestBase.sol"; import {MockTarget} from "../mocks/MockTarget.sol"; +import "./SmartWalletTestBase.sol"; contract TestExecuteWithoutChainIdValidation is SmartWalletTestBase, TestPlus { function setUp() public override { diff --git a/test/CoinbaseSmartWallet/ExecuteBatch.t.sol b/test/CoinbaseSmartWallet/ExecuteBatch.t.sol index 85c56a2..7251a39 100644 --- a/test/CoinbaseSmartWallet/ExecuteBatch.t.sol +++ b/test/CoinbaseSmartWallet/ExecuteBatch.t.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.0; import "solady/../test/utils/TestPlus.sol"; -import "./SmartWalletTestBase.sol"; import {MockTarget} from "../mocks/MockTarget.sol"; +import "./SmartWalletTestBase.sol"; contract TestExecuteWithoutChainIdValidation is SmartWalletTestBase, TestPlus { function testExecuteBatch() public { diff --git a/test/CoinbaseSmartWallet/Implementation.t.sol b/test/CoinbaseSmartWallet/Implementation.t.sol index 41ddee8..66eb7c6 100644 --- a/test/CoinbaseSmartWallet/Implementation.t.sol +++ b/test/CoinbaseSmartWallet/Implementation.t.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {CoinbaseSmartWalletFactory} from "../../src/CoinbaseSmartWalletFactory.sol"; import {CoinbaseSmartWallet} from "../../src/CoinbaseSmartWallet.sol"; +import {CoinbaseSmartWalletFactory} from "../../src/CoinbaseSmartWalletFactory.sol"; import "./SmartWalletTestBase.sol"; diff --git a/test/CoinbaseSmartWallet/SmartWalletTestBase.sol b/test/CoinbaseSmartWallet/SmartWalletTestBase.sol index 5a1d8ab..f518b7d 100644 --- a/test/CoinbaseSmartWallet/SmartWalletTestBase.sol +++ b/test/CoinbaseSmartWallet/SmartWalletTestBase.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {Test, console2, stdError} from "forge-std/Test.sol"; import {IEntryPoint} from "account-abstraction/interfaces/IEntryPoint.sol"; +import {Test, console2, stdError} from "forge-std/Test.sol"; import "../../src/CoinbaseSmartWallet.sol"; import {MockCoinbaseSmartWallet} from "../mocks/MockCoinbaseSmartWallet.sol"; diff --git a/test/CoinbaseSmartWalletFactory.t.sol b/test/CoinbaseSmartWalletFactory.t.sol index d70b080..ee906ad 100644 --- a/test/CoinbaseSmartWalletFactory.t.sol +++ b/test/CoinbaseSmartWalletFactory.t.sol @@ -2,9 +2,10 @@ pragma solidity ^0.8.0; import {Test, console2} from "forge-std/Test.sol"; +import {LibClone} from "solady/utils/LibClone.sol"; + import {CoinbaseSmartWallet, MultiOwnable} from "../src/CoinbaseSmartWallet.sol"; import {CoinbaseSmartWalletFactory} from "../src/CoinbaseSmartWalletFactory.sol"; -import {LibClone} from "solady/utils/LibClone.sol"; contract CoinbaseSmartWalletFactoryTest is Test { CoinbaseSmartWalletFactory factory; diff --git a/test/ERC1271.t.sol b/test/ERC1271.t.sol index 1a4dda5..fea1bf0 100644 --- a/test/ERC1271.t.sol +++ b/test/ERC1271.t.sol @@ -3,8 +3,8 @@ pragma solidity ^0.8.0; import {Test, console2} from "forge-std/Test.sol"; -import "../src/ERC1271.sol"; import "../src/CoinbaseSmartWalletFactory.sol"; +import "../src/ERC1271.sol"; import {MockCoinbaseSmartWallet} from "./mocks/MockCoinbaseSmartWallet.sol"; diff --git a/test/ERC1271InputGenerator.t.sol b/test/ERC1271InputGenerator.t.sol index dca731c..e46f90d 100644 --- a/test/ERC1271InputGenerator.t.sol +++ b/test/ERC1271InputGenerator.t.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.0; import {Test, console2} from "forge-std/Test.sol"; + import {CoinbaseSmartWallet} from "../src/CoinbaseSmartWallet.sol"; import {CoinbaseSmartWalletFactory} from "../src/CoinbaseSmartWalletFactory.sol"; import {ERC1271InputGenerator} from "../src/utils/ERC1271InputGenerator.sol"; From 04ae12aa6df9185f53525b2552f8dc82e0d7c33a Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 08:45:41 -0400 Subject: [PATCH 18/42] formatting --- foundry.toml | 1 + src/CoinbaseSmartWallet.sol | 16 ++++++++++------ src/CoinbaseSmartWalletFactory.sol | 9 +++++---- src/ERC1271.sol | 10 ++++++---- src/MultiOwnable.sol | 9 +++++---- src/utils/ERC1271InputGenerator.sol | 17 ++++++++++------- test/CoinbaseSmartWallet/IsValidSignature.t.sol | 3 ++- 7 files changed, 39 insertions(+), 26 deletions(-) diff --git a/foundry.toml b/foundry.toml index 3858f05..a8831a5 100644 --- a/foundry.toml +++ b/foundry.toml @@ -5,5 +5,6 @@ libs = ["lib"] [fmt] sort_imports = true +wrap_comments = true # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options diff --git a/src/CoinbaseSmartWallet.sol b/src/CoinbaseSmartWallet.sol index 8b11a34..62cffaf 100644 --- a/src/CoinbaseSmartWallet.sol +++ b/src/CoinbaseSmartWallet.sol @@ -43,8 +43,9 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// @notice Reserved nonce key (upper 192 bits of `UserOperation.nonce`) for cross-chain replayable /// transactions. /// - /// @dev MUST BE the `UserOperation.nonce` key when `UserOperation.calldata` is calling `executeWithoutChainIdValidation` - /// and MUST NOT BE `UserOperation.nonce` key when `UserOperation.calldata` is NOT calling `executeWithoutChainIdValidation`. + /// @dev MUST BE the `UserOperation.nonce` key when `UserOperation.calldata` is calling + /// `executeWithoutChainIdValidation`and MUST NOT BE `UserOperation.nonce` key when `UserOperation.calldata` is + /// NOT calling `executeWithoutChainIdValidation`. /// /// @dev Helps enforce sequential sequencing of replayable transactions. uint256 public constant REPLAYABLE_NONCE_KEY = 8453; @@ -52,7 +53,8 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// @notice Thrown when `initialize` is called but the account already has had at least one owner. error Initialized(); - /// @notice Thrown when a call is passed to `executeWithoutChainIdValidation` that is not allowed by `canSkipChainIdValidation` + /// @notice Thrown when a call is passed to `executeWithoutChainIdValidation` that is not allowed by + /// `canSkipChainIdValidation` /// /// @param selector The selector of the call. error SelectorNotAllowed(bytes4 selector); @@ -128,10 +130,12 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// @inheritdoc IAccount /// /// @notice ERC-4337 `validateUserOp` method. The EntryPoint will - /// call `UserOperation.sender.call(UserOperation.callData)` only if this validation call returns successfully. + /// call `UserOperation.sender.call(UserOperation.callData)` only if this validation call returns + /// successfully. /// /// @dev Signature failure should be reported by returning 1 (see: `this._isValidSignature`). This - /// allows making a "simulation call" without a valid signature. Other failures (e.g. invalid signature format) should still revert to signal failure. + /// allows making a "simulation call" without a valid signature. Other failures (e.g. invalid signature format) + /// should still revert to signal failure. /// @dev Reverts if the `UserOperation.nonce` key is invalid for `UserOperation.calldata`. /// @dev Reverts if the signature format is incorrect or invalid for owner type. /// @@ -328,7 +332,7 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// @inheritdoc UUPSUpgradeable /// /// @dev Authorization logic is only based on the `msg.sender` being an owner of this account, - /// or `address(this)`. + /// or `address(this)`. function _authorizeUpgrade(address) internal view virtual override(UUPSUpgradeable) onlyOwner {} /// @inheritdoc ERC1271 diff --git a/src/CoinbaseSmartWalletFactory.sol b/src/CoinbaseSmartWalletFactory.sol index 29db9fe..3b2068a 100644 --- a/src/CoinbaseSmartWalletFactory.sol +++ b/src/CoinbaseSmartWalletFactory.sol @@ -26,15 +26,16 @@ contract CoinbaseSmartWalletFactory { } /// @notice Returns the deterministic address for a CoinbaseSmartWallet created with `owners` and `nonce` - /// deploys and initializes contract if it has not yet been created. + /// deploys and initializes contract if it has not yet been created. /// /// @dev Deployed as a ERC-1967 proxy that's implementation is `this.implementation`. /// /// @param owners Array of initial owners. Each item should be an ABI encoded address or 64 byte public key. /// @param nonce The nonce of the account, a caller defined value which allows multiple accounts - /// with the same `owners` to exist at different addresses. + /// with the same `owners` to exist at different addresses. /// - /// @return account The address of the ERC-1967 proxy created with inputs `owners`, `nonce`, and `this.implementation`. + /// @return account The address of the ERC-1967 proxy created with inputs `owners`, `nonce`, and + /// `this.implementation`. function createAccount(bytes[] calldata owners, uint256 nonce) external payable @@ -66,7 +67,7 @@ contract CoinbaseSmartWalletFactory { } /// @notice Returns the initialization code hash of the account: - /// a ERC1967 proxy that's implementation is `this.implementation`. + /// a ERC1967 proxy that's implementation is `this.implementation`. /// /// @return result The initialization code hash. function initCodeHash() public view virtual returns (bytes32) { diff --git a/src/ERC1271.sol b/src/ERC1271.sol index 8081481..77e29f8 100644 --- a/src/ERC1271.sol +++ b/src/ERC1271.sol @@ -112,7 +112,8 @@ abstract contract ERC1271 { /// @notice Returns the EIP-712 typed hash of the `CoinbaseSmartWalletMessage(bytes32 hash)` data structure. /// - /// @dev Implements encode(domainSeparator : 𝔹²⁵⁶, message : 𝕊) = "\x19\x01" || domainSeparator || hashStruct(message). + /// @dev Implements encode(domainSeparator : 𝔹²⁵⁶, message : 𝕊) = "\x19\x01" || domainSeparator || + /// hashStruct(message). /// @dev See https://eips.ethereum.org/EIPS/eip-712#specification. /// /// @param hash The `CoinbaseSmartWalletMessage.hash` field to hash. @@ -122,7 +123,8 @@ abstract contract ERC1271 { return keccak256(abi.encodePacked("\x19\x01", domainSeparator(), _hashStruct(hash))); } - /// @notice Returns the EIP-712 `hashStruct` result of the `CoinbaseSmartWalletMessage(bytes32 hash)` data structure. + /// @notice Returns the EIP-712 `hashStruct` result of the `CoinbaseSmartWalletMessage(bytes32 hash)` data + /// structure. /// /// @dev Implements hashStruct(s : 𝕊) = keccak256(typeHash || encodeData(s)). /// @dev See https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct. @@ -138,7 +140,7 @@ abstract contract ERC1271 { /// /// @dev MUST be defined by the implementation. /// - /// @return name The user readable name of signing domain. + /// @return name The user readable name of signing domain. /// @return version The current major version of the signing domain. function _domainNameAndVersion() internal view virtual returns (string memory name, string memory version); @@ -146,7 +148,7 @@ abstract contract ERC1271 { /// /// @dev MUST be defined by the implementation. /// - /// @param hash The hash whose signature has been performed on. + /// @param hash The hash whose signature has been performed on. /// @param signature The signature associated with `hash`. /// /// @return `true` is the signature is valid, else `false`. diff --git a/src/MultiOwnable.sol b/src/MultiOwnable.sol index f2ab2d4..ddb1e08 100644 --- a/src/MultiOwnable.sol +++ b/src/MultiOwnable.sol @@ -32,7 +32,8 @@ struct MultiOwnableStorage { /// @author Coinbase (https://github.com/coinbase/smart-wallet) contract MultiOwnable { /// @dev Slot for the `MultiOwnableStorage` struct in storage. - /// Computed from: keccak256(abi.encode(uint256(keccak256("coinbase.storage.MultiOwnable")) - 1)) & ~bytes32(uint256(0xff)) + /// Computed from + /// keccak256(abi.encode(uint256(keccak256("coinbase.storage.MultiOwnable")) - 1)) & ~bytes32(uint256(0xff)) /// Follows ERC-7201 (see https://eips.ethereum.org/EIPS/eip-7201). bytes32 private constant MUTLI_OWNABLE_STORAGE_LOCATION = 0x97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00; @@ -52,13 +53,13 @@ contract MultiOwnable { /// @notice Thrown when `owner` argument does not match owner found at index. /// - /// @param index The index of the owner to be removed. + /// @param index The index of the owner to be removed. /// @param expectedOwner The owner passed in the remove call. - /// @param actualOwner The actual owner at `index`. + /// @param actualOwner The actual owner at `index`. error WrongOwnerAtIndex(uint256 index, bytes expectedOwner, bytes actualOwner); /// @notice Thrown when a provided owner is neither 64 bytes long (for public key) - /// nor a ABI encoded address. + /// nor a ABI encoded address. /// /// @param owner The invalid owner. error InvalidOwnerBytesLength(bytes owner); diff --git a/src/utils/ERC1271InputGenerator.sol b/src/utils/ERC1271InputGenerator.sol index 4c71fdd..bfa273d 100644 --- a/src/utils/ERC1271InputGenerator.sol +++ b/src/utils/ERC1271InputGenerator.sol @@ -5,9 +5,10 @@ import {CoinbaseSmartWallet} from "../CoinbaseSmartWallet.sol"; /// @title ERC1271 Input Generator /// -/// @notice Helper contract for generating an ERC-1271 input hash to sign for deployed and undeployed CoinbaseSmartWallet. -/// May be useful for generating ERC-6492 compliant signatures. -/// Inspired by Ambire's DeploylessUniversalSigValidator (https://github.com/AmbireTech/signature-validator/blob/main/contracts/DeploylessUniversalSigValidator.sol) +/// @notice Helper contract for generating an ERC-1271 input hash to sign for deployed and undeployed +/// CoinbaseSmartWallet. May be useful for generating ERC-6492 compliant signatures. +/// Inspired by Ambire's DeploylessUniversalSigValidator +/// https://github.com/AmbireTech/signature-validator/blob/d5f84f5fc00bfdf79b80205b983a8258b6d1b3ea/contracts/DeploylessUniversalSigValidator.sol. /// /// @dev This contract is not meant to ever actually be deployed, only mock deployed and used via a static eth_call. /// @@ -17,9 +18,9 @@ contract ERC1271InputGenerator { error AccountDeploymentFailed(); /// @notice Thrown when the address returned from call to `accountFactory` does not - /// match passed account + /// match passed account /// - /// @param account The passed account + /// @param account The passed account /// @param returned The returned account error ReturnedAddressDoesNotMatchAccount(address account, address returned); @@ -35,7 +36,8 @@ contract ERC1271InputGenerator { /// @param factoryCalldata The calldata that will be used to deploy the account (if not already deployed). constructor(CoinbaseSmartWallet account, bytes32 hash, address accountFactory, bytes memory factoryCalldata) { // This allows us to get a replay-safe hash on any deployed or undeployed account - // in a single eth_call, i.e. without deploying the contract. We do this by calling replaySafeHash on a deployed account, + // in a single eth_call, i.e. without deploying the contract. We do this by calling replaySafeHash on a deployed + // account, // or by simulating the deployment of an undeployed account and then calling replaySafeHash on it. bytes32 replaySafeHash = _coinbaseSmartWallet1271Input(account, hash, accountFactory, factoryCalldata); assembly { @@ -46,7 +48,8 @@ contract ERC1271InputGenerator { } } - /// @notice Helper method to get a replay-safe hash from the given `account` by calling its `replaySafeHash()` method. + /// @notice Helper method to get a replay-safe hash from the given `account` by calling its `replaySafeHash()` + /// method. /// /// /// @dev Deploys the account if not already deployed before calling `replaySafeHash` on it. diff --git a/test/CoinbaseSmartWallet/IsValidSignature.t.sol b/test/CoinbaseSmartWallet/IsValidSignature.t.sol index d92432e..859338e 100644 --- a/test/CoinbaseSmartWallet/IsValidSignature.t.sol +++ b/test/CoinbaseSmartWallet/IsValidSignature.t.sol @@ -178,7 +178,8 @@ contract TestIsValidSignature is SmartWalletTestBase { bytes memory signature = abi.encodePacked(r, s, v); bytes32 invalidAddress = bytes32(uint256(type(uint160).max) + 1); bytes32 slot_ownerAtIndex = - bytes32(uint256(0x97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00) + 2); // MUTLI_OWNABLE_STORAGE_LOCATION + 2 + bytes32(uint256(0x97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00) + 2); // MUTLI_OWNABLE_STORAGE_LOCATION + // + 2 bytes32 slot_ownerAtIndex_zeroIndex = bytes32(uint256(keccak256(abi.encodePacked(keccak256(abi.encode(0, slot_ownerAtIndex)))))); vm.store(address(account), slot_ownerAtIndex_zeroIndex, invalidAddress); From 4fcf12e5796b328e2d2d6d274b064b21ebab10cb Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 08:46:14 -0400 Subject: [PATCH 19/42] snapshot --- .gas-snapshot | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 2c15399..5f5f539 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -23,7 +23,7 @@ CoinbaseSmartWalletFactoryTest:test_implementation_returnsExpectedAddress() (gas CoinbaseSmartWalletFactoryTest:test_initCodeHash() (gas: 7912) CoinbaseSmartWalletFactoryTest:test_revertsIfNoOwners() (gas: 29232) ERC1271Test:test_returnsExpectedDomainHashWhenProxy() (gas: 29243) -ERC1271Test:test_static() (gas: 3238027) +ERC1271Test:test_static() (gas: 3240637) MultiOwnableInitializeTest:testRevertsIfLength32ButLargerThanAddress() (gas: 81111) MultiOwnableInitializeTest:testRevertsIfLength32NotAddress() (gas: 81092) MultiOwnableInitializeTest:testRevertsIfLengthNot32Or64() (gas: 103395) @@ -45,29 +45,29 @@ TestCanSkipChainIdValidation:test_approvedSelectorsReturnTrue() (gas: 17781) TestCanSkipChainIdValidation:test_otherSelectorsReturnFalse() (gas: 12579) TestExecuteWithoutChainIdValidation:testExecute() (gas: 424882) TestExecuteWithoutChainIdValidation:testExecuteBatch() (gas: 728942) -TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3590200, ~: 3466169) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49931) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50166) -TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 81983) +TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3608152, ~: 3468946) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49944) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50179) +TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 82007) TestExecuteWithoutChainIdValidation:test_reverts_whenCallerNotEntryPoint() (gas: 11031) TestExecuteWithoutChainIdValidation:test_reverts_whenOneCallReverts() (gas: 467783) TestExecuteWithoutChainIdValidation:test_reverts_whenOneSelectorNotApproved() (gas: 179662) TestExecuteWithoutChainIdValidation:test_reverts_whenSelectorNotApproved() (gas: 106736) -TestExecuteWithoutChainIdValidation:test_succeeds_whenSelectorAllowed() (gas: 423939) +TestExecuteWithoutChainIdValidation:test_succeeds_whenSelectorAllowed() (gas: 423963) TestImplementation:testImplementation() (gas: 12558) TestInitialize:testInitialize() (gas: 21012) -TestInitialize:test_cannotInitImplementation() (gas: 2887326) +TestInitialize:test_cannotInitImplementation() (gas: 2889926) TestIsValidSignature:testReturnsInvalidIfPasskeySigButWrongOwnerLength() (gas: 40165) TestIsValidSignature:testRevertsIfEthereumSignatureButWrongOwnerLength() (gas: 24018) TestIsValidSignature:testRevertsIfOwnerIsInvalidEthereumAddress() (gas: 21999) -TestIsValidSignature:testSmartWalletSigner() (gas: 3168925) +TestIsValidSignature:testSmartWalletSigner() (gas: 3171533) TestIsValidSignature:testValidateSignatureWithEOASigner() (gas: 24900) TestIsValidSignature:testValidateSignatureWithEOASignerFailsWithWrongSigner() (gas: 23855) TestIsValidSignature:testValidateSignatureWithPasskeySigner() (gas: 423216) TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsBadOwnerIndex() (gas: 35642) TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsWithWrongBadSignature() (gas: 430682) TestUpgradeToAndCall:testUpgradeToAndCall() (gas: 25499) -TestValidateUserOp:test_reverts_whenReplayableNonceKeyInvalidForSelector() (gas: 14187) -TestValidateUserOp:test_reverts_whenSelectorInvalidForReplayableNonceKey() (gas: 14452) -TestValidateUserOp:test_succeedsWithEOASigner() (gas: 447938) -TestValidateUserOp:test_succeedsWithPasskeySigner() (gas: 785169) \ No newline at end of file +TestValidateUserOp:test_reverts_whenReplayableNonceKeyInvalidForSelector() (gas: 14211) +TestValidateUserOp:test_reverts_whenSelectorInvalidForReplayableNonceKey() (gas: 14476) +TestValidateUserOp:test_succeedsWithEOASigner() (gas: 448010) +TestValidateUserOp:test_succeedsWithPasskeySigner() (gas: 785193) \ No newline at end of file From 1ef24d599b5a3a907e4265ef744b24645c7d10b4 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 08:47:46 -0400 Subject: [PATCH 20/42] add snapshot to CI --- .github/workflows/test.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fb3a71c..a18596e 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -38,6 +38,11 @@ jobs: forge fmt --check id: fmt + - name: Check snapshot + run: | + forge snapshot --check + id: snapshot + forge-coverage: name: Run Coverage Reporting runs-on: ubuntu-latest From 4bb091e93b625e02097c017aba2e48e0cf963817 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 08:56:00 -0400 Subject: [PATCH 21/42] small fixes --- src/CoinbaseSmartWallet.sol | 2 +- src/MultiOwnable.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/CoinbaseSmartWallet.sol b/src/CoinbaseSmartWallet.sol index 62cffaf..153d915 100644 --- a/src/CoinbaseSmartWallet.sol +++ b/src/CoinbaseSmartWallet.sol @@ -295,7 +295,7 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// @inheritdoc ERC1271 /// - /// @dev Used both for ERC-1271.isValidSignature AND ERC-4337.validateUserOp signature validation. + /// @dev Used by both `ERC1271.isValidSignature` AND `IAccount.validateUserOp` signature validation. /// @dev Reverts if owner at `ownerIndex` is not compatible with `signature` format. /// /// @param signature ABI encoded `SignatureWrapper`. diff --git a/src/MultiOwnable.sol b/src/MultiOwnable.sol index ddb1e08..63818ed 100644 --- a/src/MultiOwnable.sol +++ b/src/MultiOwnable.sol @@ -197,7 +197,7 @@ contract MultiOwnable { /// @notice Tracks the number of owners removed /// - /// @dev used with nextOwnerIndex to avoid removing all owners + /// @dev Used with `this.nextOwnerIndex` to avoid removing all owners /// /// @return The number of owners that have been removed. function removedOwnersCount() public view virtual returns (uint256) { From 6579faa7f7f7a7de75db92f93e92584764ae1aa2 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 09:18:34 -0400 Subject: [PATCH 22/42] more consistency + gas fix --- src/CoinbaseSmartWallet.sol | 15 +++++---------- src/utils/ERC1271InputGenerator.sol | 2 +- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/CoinbaseSmartWallet.sol b/src/CoinbaseSmartWallet.sol index 153d915..652ac83 100644 --- a/src/CoinbaseSmartWallet.sol +++ b/src/CoinbaseSmartWallet.sol @@ -175,7 +175,7 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable return 1; } - /// @notice Execute `calls` on this account (i.e. self call). + /// @notice Executes `calls` on this account (i.e. self call). /// /// @dev Can only be called by the Entrypoint. /// @dev Reverts if the given call is not authorized to skip the chain ID validtion. @@ -197,7 +197,7 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable } } - /// @notice Execute the given call from this account. + /// @notice Executes the given call from this account. /// /// @dev Can only be called by the Entrypoint or an owner of this account (including itself). /// @@ -226,7 +226,7 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// @notice Returns the address of the EntryPoint v0.6. /// - /// @return Address of the EntryPoint v0.6 + /// @return The address of the EntryPoint v0.6 function entryPoint() public view virtual returns (address) { return 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789; } @@ -238,13 +238,8 @@ contract CoinbaseSmartWallet is ERC1271, IAccount, MultiOwnable, UUPSUpgradeable /// /// @param userOp The `UserOperation` to compute the hash for. /// - /// @return userOpHash The `UserOperation` hash, which does not depend on chain ID. - function getUserOpHashWithoutChainId(UserOperation calldata userOp) - public - view - virtual - returns (bytes32 userOpHash) - { + /// @return The `UserOperation` hash, which does not depend on chain ID. + function getUserOpHashWithoutChainId(UserOperation calldata userOp) public view virtual returns (bytes32) { return keccak256(abi.encode(UserOperationLib.hash(userOp), entryPoint())); } diff --git a/src/utils/ERC1271InputGenerator.sol b/src/utils/ERC1271InputGenerator.sol index bfa273d..3f84f3b 100644 --- a/src/utils/ERC1271InputGenerator.sol +++ b/src/utils/ERC1271InputGenerator.sol @@ -49,7 +49,7 @@ contract ERC1271InputGenerator { } /// @notice Helper method to get a replay-safe hash from the given `account` by calling its `replaySafeHash()` - /// method. + /// method. /// /// /// @dev Deploys the account if not already deployed before calling `replaySafeHash` on it. From 121b67915cdff0efca484fc48f849631cbe33554 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 09:23:32 -0400 Subject: [PATCH 23/42] remove TestPlus dep --- .gas-snapshot | 5 ++--- test/CoinbaseSmartWallet/Execute.t.sol | 6 ++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 5f5f539..07b42d2 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -43,12 +43,11 @@ RemoveOwnerAtIndexTest:test_revert_whenWrongOwnerAtIndex() (gas: 36728) RemoveOwnerAtIndexTest:test_reverts_ifIsLastOwner() (gas: 7647492) TestCanSkipChainIdValidation:test_approvedSelectorsReturnTrue() (gas: 17781) TestCanSkipChainIdValidation:test_otherSelectorsReturnFalse() (gas: 12579) -TestExecuteWithoutChainIdValidation:testExecute() (gas: 424882) +TestExecuteWithoutChainIdValidation:testExecute() (gas: 403873) TestExecuteWithoutChainIdValidation:testExecuteBatch() (gas: 728942) TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3608152, ~: 3468946) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 49944) TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50179) -TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 82007) +TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 81941) TestExecuteWithoutChainIdValidation:test_reverts_whenCallerNotEntryPoint() (gas: 11031) TestExecuteWithoutChainIdValidation:test_reverts_whenOneCallReverts() (gas: 467783) TestExecuteWithoutChainIdValidation:test_reverts_whenOneSelectorNotApproved() (gas: 179662) diff --git a/test/CoinbaseSmartWallet/Execute.t.sol b/test/CoinbaseSmartWallet/Execute.t.sol index 514722b..5df077e 100644 --- a/test/CoinbaseSmartWallet/Execute.t.sol +++ b/test/CoinbaseSmartWallet/Execute.t.sol @@ -1,12 +1,10 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "solady/../test/utils/TestPlus.sol"; - import {MockTarget} from "../mocks/MockTarget.sol"; import "./SmartWalletTestBase.sol"; -contract TestExecuteWithoutChainIdValidation is SmartWalletTestBase, TestPlus { +contract TestExecuteWithoutChainIdValidation is SmartWalletTestBase { function setUp() public override { userOpCalldata = abi.encodeWithSelector(CoinbaseSmartWallet.execute.selector); super.setUp(); @@ -32,7 +30,7 @@ contract TestExecuteWithoutChainIdValidation is SmartWalletTestBase, TestPlus { assertEq(MockTarget(target).datahash(), keccak256(data)); assertEq(target.balance, 123); - vm.prank(_randomNonZeroAddress()); + vm.prank(makeAddr("random")); vm.expectRevert(MultiOwnable.Unauthorized.selector); account.execute(target, 123, abi.encodeWithSignature("setData(bytes)", data)); From 376595c3e7b3eb5b42f9d7c1e872be14d22e96b4 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 09:37:22 -0400 Subject: [PATCH 24/42] clean up unnecessary named return args --- src/CoinbaseSmartWalletFactory.sol | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/CoinbaseSmartWalletFactory.sol b/src/CoinbaseSmartWalletFactory.sol index 3b2068a..7d7c770 100644 --- a/src/CoinbaseSmartWalletFactory.sol +++ b/src/CoinbaseSmartWalletFactory.sol @@ -61,15 +61,15 @@ contract CoinbaseSmartWalletFactory { /// @param owners Array of initial owners. Each item should be an ABI encoded address or 64 byte public key. /// @param nonce The nonce provided to `createAccount()`. /// - /// @return predicted The predicted account deployment address. - function getAddress(bytes[] calldata owners, uint256 nonce) external view returns (address predicted) { - predicted = LibClone.predictDeterministicAddress(initCodeHash(), _getSalt(owners, nonce), address(this)); + /// @return The predicted account deployment address. + function getAddress(bytes[] calldata owners, uint256 nonce) external view returns (address) { + return LibClone.predictDeterministicAddress(initCodeHash(), _getSalt(owners, nonce), address(this)); } /// @notice Returns the initialization code hash of the account: /// a ERC1967 proxy that's implementation is `this.implementation`. /// - /// @return result The initialization code hash. + /// @return The initialization code hash. function initCodeHash() public view virtual returns (bytes32) { return LibClone.initCodeHashERC1967(implementation); } @@ -79,7 +79,7 @@ contract CoinbaseSmartWalletFactory { /// @param owners Array of initial owners. Each item should be an ABI encoded address or 64 byte public key. /// @param nonce The nonce provided to `createAccount()`. /// - /// @return salt The computed salt. + /// @return The computed salt. function _getSalt(bytes[] calldata owners, uint256 nonce) internal pure returns (bytes32) { return keccak256(abi.encode(owners, nonce)); } From 65ed8f30f2b59d29d7730758fe76c72f8cfc09ff Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 13:37:59 -0400 Subject: [PATCH 25/42] webauthn-sol @ v1 --- .gitmodules | 6 +++--- lib/webauthn-sol | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitmodules b/.gitmodules index 7d14d19..5b78b74 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,9 +13,9 @@ [submodule "lib/solady"] path = lib/solady url = https://github.com/vectorized/solady -[submodule "lib/webauthn-sol"] - path = lib/webauthn-sol - url = https://github.com/base-org/webauthn-sol [submodule "lib/openzeppelin-contracts"] path = lib/openzeppelin-contracts url = https://github.com/openzeppelin/openzeppelin-contracts +[submodule "lib/webauthn-sol"] + path = lib/webauthn-sol + url = https://github.com/base-org/webauthn-sol diff --git a/lib/webauthn-sol b/lib/webauthn-sol index 3049e12..619f20a 160000 --- a/lib/webauthn-sol +++ b/lib/webauthn-sol @@ -1 +1 @@ -Subproject commit 3049e12c69bb508aa4459d15c27c981c5c994ddc +Subproject commit 619f20ab0f074fef41066ee4ab24849a913263b2 From 7dc60001f6f9d46e4798d60a5219caa53b61bf25 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 13:43:45 -0400 Subject: [PATCH 26/42] forge install: safe-singleton-deployer-sol --- .gitmodules | 3 +++ lib/safe-singleton-deployer-sol | 1 + 2 files changed, 4 insertions(+) create mode 160000 lib/safe-singleton-deployer-sol diff --git a/.gitmodules b/.gitmodules index 5b78b74..79d1da9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,3 +19,6 @@ [submodule "lib/webauthn-sol"] path = lib/webauthn-sol url = https://github.com/base-org/webauthn-sol +[submodule "lib/safe-singleton-deployer-sol"] + path = lib/safe-singleton-deployer-sol + url = https://github.com/wilsoncusack/safe-singleton-deployer-sol diff --git a/lib/safe-singleton-deployer-sol b/lib/safe-singleton-deployer-sol new file mode 160000 index 0000000..70ffde7 --- /dev/null +++ b/lib/safe-singleton-deployer-sol @@ -0,0 +1 @@ +Subproject commit 70ffde7ae1ad0062f293363e961304feaaff895c From d271f255b51423e18275eaf23bbb4c5df2ff4304 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 16:51:08 -0400 Subject: [PATCH 27/42] v1 deployment --- .gas-snapshot | 16 +-- .gitignore | 2 +- .gitmodules | 3 - README.md | 17 ++- .../11155111/run-latest.json | 113 +++++++++++++++++ .../8453/run-1713818220.json | 119 ++++++++++++++++++ .../DeployFactory.s.sol/8453/run-latest.json | 119 ++++++++++++++++++ .../84532/run-1713816554.json | 119 ++++++++++++++++++ .../DeployFactory.s.sol/84532/run-latest.json | 119 ++++++++++++++++++ foundry.toml | 4 + lib/FreshCryptoLib | 1 - lib/safe-singleton-deployer-sol | 2 +- remappings.txt | 10 -- script/DeployERC4337Factory.s.sol | 21 ---- script/DeployFactory.s.sol | 33 +++++ 15 files changed, 650 insertions(+), 48 deletions(-) create mode 100644 broadcast/DeployFactory.s.sol/11155111/run-latest.json create mode 100644 broadcast/DeployFactory.s.sol/8453/run-1713818220.json create mode 100644 broadcast/DeployFactory.s.sol/8453/run-latest.json create mode 100644 broadcast/DeployFactory.s.sol/84532/run-1713816554.json create mode 100644 broadcast/DeployFactory.s.sol/84532/run-latest.json delete mode 160000 lib/FreshCryptoLib delete mode 100644 remappings.txt delete mode 100644 script/DeployERC4337Factory.s.sol create mode 100644 script/DeployFactory.s.sol diff --git a/.gas-snapshot b/.gas-snapshot index 07b42d2..3fd0e65 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -23,7 +23,7 @@ CoinbaseSmartWalletFactoryTest:test_implementation_returnsExpectedAddress() (gas CoinbaseSmartWalletFactoryTest:test_initCodeHash() (gas: 7912) CoinbaseSmartWalletFactoryTest:test_revertsIfNoOwners() (gas: 29232) ERC1271Test:test_returnsExpectedDomainHashWhenProxy() (gas: 29243) -ERC1271Test:test_static() (gas: 3240637) +ERC1271Test:test_static() (gas: 3247131) MultiOwnableInitializeTest:testRevertsIfLength32ButLargerThanAddress() (gas: 81111) MultiOwnableInitializeTest:testRevertsIfLength32NotAddress() (gas: 81092) MultiOwnableInitializeTest:testRevertsIfLengthNot32Or64() (gas: 103395) @@ -45,8 +45,8 @@ TestCanSkipChainIdValidation:test_approvedSelectorsReturnTrue() (gas: 17781) TestCanSkipChainIdValidation:test_otherSelectorsReturnFalse() (gas: 12579) TestExecuteWithoutChainIdValidation:testExecute() (gas: 403873) TestExecuteWithoutChainIdValidation:testExecuteBatch() (gas: 728942) -TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3608152, ~: 3468946) -TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50179) +TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3603267, ~: 3475199) +TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50211) TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 81941) TestExecuteWithoutChainIdValidation:test_reverts_whenCallerNotEntryPoint() (gas: 11031) TestExecuteWithoutChainIdValidation:test_reverts_whenOneCallReverts() (gas: 467783) @@ -55,18 +55,18 @@ TestExecuteWithoutChainIdValidation:test_reverts_whenSelectorNotApproved() (gas: TestExecuteWithoutChainIdValidation:test_succeeds_whenSelectorAllowed() (gas: 423963) TestImplementation:testImplementation() (gas: 12558) TestInitialize:testInitialize() (gas: 21012) -TestInitialize:test_cannotInitImplementation() (gas: 2889926) +TestInitialize:test_cannotInitImplementation() (gas: 2896342) TestIsValidSignature:testReturnsInvalidIfPasskeySigButWrongOwnerLength() (gas: 40165) TestIsValidSignature:testRevertsIfEthereumSignatureButWrongOwnerLength() (gas: 24018) TestIsValidSignature:testRevertsIfOwnerIsInvalidEthereumAddress() (gas: 21999) -TestIsValidSignature:testSmartWalletSigner() (gas: 3171533) +TestIsValidSignature:testSmartWalletSigner() (gas: 3177948) TestIsValidSignature:testValidateSignatureWithEOASigner() (gas: 24900) TestIsValidSignature:testValidateSignatureWithEOASignerFailsWithWrongSigner() (gas: 23855) -TestIsValidSignature:testValidateSignatureWithPasskeySigner() (gas: 423216) +TestIsValidSignature:testValidateSignatureWithPasskeySigner() (gas: 423221) TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsBadOwnerIndex() (gas: 35642) -TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsWithWrongBadSignature() (gas: 430682) +TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsWithWrongBadSignature() (gas: 430687) TestUpgradeToAndCall:testUpgradeToAndCall() (gas: 25499) TestValidateUserOp:test_reverts_whenReplayableNonceKeyInvalidForSelector() (gas: 14211) TestValidateUserOp:test_reverts_whenSelectorInvalidForReplayableNonceKey() (gas: 14476) TestValidateUserOp:test_succeedsWithEOASigner() (gas: 448010) -TestValidateUserOp:test_succeedsWithPasskeySigner() (gas: 785193) \ No newline at end of file +TestValidateUserOp:test_succeedsWithPasskeySigner() (gas: 785198) \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2103fe3..7aa0210 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ out/ /broadcast/*/31337/ /broadcast/**/dry-run/ -/broadcast +/broadcast/DeployERC4337Factory.s.sol # Docs docs/ diff --git a/.gitmodules b/.gitmodules index 79d1da9..f6e778a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,9 +7,6 @@ [submodule "lib/account-abstraction"] path = lib/account-abstraction url = https://github.com/eth-infinitism/account-abstraction -[submodule "lib/FreshCryptoLib"] - path = lib/FreshCryptoLib - url = https://github.com/rdubois-crypto/FreshCryptoLib [submodule "lib/solady"] path = lib/solady url = https://github.com/vectorized/solady diff --git a/README.md b/README.md index bc7cb3e..1bb42eb 100644 --- a/README.md +++ b/README.md @@ -82,10 +82,10 @@ Today, allowed are - UUPSUpgradeable.upgradeToAndCall ## Deployments - -| Network | CoinbaseSmartWalletFactory Address | +Factory and implementation are deployed via [Safe Singleton Factory](https://github.com/safe-global/safe-singleton-factory), which today will give the same address across 248 chains. See "Deploying" below for instructions on how to deploy to new chains. +| Version | Factory Address | |-----------|-----------------------------------------| -| Base Sepolia | [0xeD4EAeBDBBA52DBB37259a2b75AbB87abF3a19E8](https://sepolia.basescan.org/address/0xeD4EAeBDBBA52DBB37259a2b75AbB87abF3a19E8) | +| 1 | [0x0BA5ED0c6AA8c49038F819E587E2633c4A9F428a](https://basescan.org/address/0x0BA5ED0c6AA8c49038F819E587E2633c4A9F428a) | ## Developing @@ -94,5 +94,16 @@ After cloning the repo, run the tests using Forge, from [Foundry](https://github forge test ``` +## Deploying +To deploy on a new chain, in your `.env` set +```bash +FOUNDRY_PROFILE=default +``` + +Then run +``` +forge script script/DeployFactory.s.sol --rpc-url https://... +``` + ## Influences Much of the code in this repository started from Solady's [ERC4337](https://github.com/Vectorized/solady/blob/main/src/accounts/ERC4337.sol) implementation. We were also influenced by [DaimoAccount](https://github.com/daimo-eth/daimo/blob/master/packages/contract/src/DaimoAccount.sol), which pioneered using passkey signers on ERC-4337 accounts, and [LightAccount](https://github.com/alchemyplatform/light-account). diff --git a/broadcast/DeployFactory.s.sol/11155111/run-latest.json b/broadcast/DeployFactory.s.sol/11155111/run-latest.json new file mode 100644 index 0000000..547d445 --- /dev/null +++ b/broadcast/DeployFactory.s.sol/11155111/run-latest.json @@ -0,0 +1,113 @@ +{ + "transactions": [ + { + "hash": "0x88d0b0bdb4111558e8644fca41bb80ae75e867ca4f393b30d631ea5d63f8e0f3", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x6", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xeaec9a1add745bbf1fb318b868b02e86baf2c8ece4385ba3700e13a43cf6b688", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x7", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xabec58", + "logs": [ + { + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "topics": [ + "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xb74e8aa3280ffed9ea0fc261ad595b44e6c0cffaf6cba6f05b08fd39a1d3b94b", + "blockNumber": "0x57d238", + "transactionHash": "0x88d0b0bdb4111558e8644fca41bb80ae75e867ca4f393b30d631ea5d63f8e0f3", + "transactionIndex": "0x2d", + "logIndex": "0x2f", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x88d0b0bdb4111558e8644fca41bb80ae75e867ca4f393b30d631ea5d63f8e0f3", + "transactionIndex": "0x2d", + "blockHash": "0xb74e8aa3280ffed9ea0fc261ad595b44e6c0cffaf6cba6f05b08fd39a1d3b94b", + "blockNumber": "0x57d238", + "gasUsed": "0x3d2e82", + "effectiveGasPrice": "0x3b9aca0c", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xb240d0", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xeaec9a1add745bbf1fb318b868b02e86baf2c8ece4385ba3700e13a43cf6b688", + "transactionIndex": "0x2e", + "blockHash": "0xb74e8aa3280ffed9ea0fc261ad595b44e6c0cffaf6cba6f05b08fd39a1d3b94b", + "blockNumber": "0x57d238", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x3b9aca0c", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1713818321, + "chain": 11155111, + "commit": "7dc6000" +} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/8453/run-1713818220.json b/broadcast/DeployFactory.s.sol/8453/run-1713818220.json new file mode 100644 index 0000000..db73cc1 --- /dev/null +++ b/broadcast/DeployFactory.s.sol/8453/run-1713818220.json @@ -0,0 +1,119 @@ +{ + "transactions": [ + { + "hash": "0x9494912bec8868fb623313c208d42fa427e4c2bd20babc555ab0ba5a6a56b11f", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x32", + "chainId": "0x2105", + "accessList": null, + "type": null + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x5a9387581d2b47ca24d92a923da31d054b1b204629a582d00fab575f3cb2a62c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x33", + "chainId": "0x2105", + "accessList": null, + "type": null + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xe07e60", + "logs": [ + { + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "topics": [ + "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xeeb2b7099dc81e88fd7c7c72f308aefba1e8c66db248f5fccce4bc38dd921c2c", + "blockNumber": "0xce36a7", + "transactionHash": "0x9494912bec8868fb623313c208d42fa427e4c2bd20babc555ab0ba5a6a56b11f", + "transactionIndex": "0x45", + "logIndex": "0xe1", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x9494912bec8868fb623313c208d42fa427e4c2bd20babc555ab0ba5a6a56b11f", + "transactionIndex": "0x45", + "blockHash": "0xeeb2b7099dc81e88fd7c7c72f308aefba1e8c66db248f5fccce4bc38dd921c2c", + "blockNumber": "0xce36a7", + "gasUsed": "0x3d2e82", + "effectiveGasPrice": "0x47d24af", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0x31ee8f0e8b3", + "l1GasPrice": "0x2ac497172", + "l1GasUsed": "0x42468" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xe6d2d8", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x5a9387581d2b47ca24d92a923da31d054b1b204629a582d00fab575f3cb2a62c", + "transactionIndex": "0x46", + "blockHash": "0xeeb2b7099dc81e88fd7c7c72f308aefba1e8c66db248f5fccce4bc38dd921c2c", + "blockNumber": "0xce36a7", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x47d24af", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0x53fb04c037", + "l1GasPrice": "0x2ac497172", + "l1GasUsed": "0x6f78" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1713818220, + "chain": 8453, + "commit": "7dc6000" +} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/8453/run-latest.json b/broadcast/DeployFactory.s.sol/8453/run-latest.json new file mode 100644 index 0000000..db73cc1 --- /dev/null +++ b/broadcast/DeployFactory.s.sol/8453/run-latest.json @@ -0,0 +1,119 @@ +{ + "transactions": [ + { + "hash": "0x9494912bec8868fb623313c208d42fa427e4c2bd20babc555ab0ba5a6a56b11f", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x32", + "chainId": "0x2105", + "accessList": null, + "type": null + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x5a9387581d2b47ca24d92a923da31d054b1b204629a582d00fab575f3cb2a62c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x33", + "chainId": "0x2105", + "accessList": null, + "type": null + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xe07e60", + "logs": [ + { + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "topics": [ + "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xeeb2b7099dc81e88fd7c7c72f308aefba1e8c66db248f5fccce4bc38dd921c2c", + "blockNumber": "0xce36a7", + "transactionHash": "0x9494912bec8868fb623313c208d42fa427e4c2bd20babc555ab0ba5a6a56b11f", + "transactionIndex": "0x45", + "logIndex": "0xe1", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x9494912bec8868fb623313c208d42fa427e4c2bd20babc555ab0ba5a6a56b11f", + "transactionIndex": "0x45", + "blockHash": "0xeeb2b7099dc81e88fd7c7c72f308aefba1e8c66db248f5fccce4bc38dd921c2c", + "blockNumber": "0xce36a7", + "gasUsed": "0x3d2e82", + "effectiveGasPrice": "0x47d24af", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0x31ee8f0e8b3", + "l1GasPrice": "0x2ac497172", + "l1GasUsed": "0x42468" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xe6d2d8", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x5a9387581d2b47ca24d92a923da31d054b1b204629a582d00fab575f3cb2a62c", + "transactionIndex": "0x46", + "blockHash": "0xeeb2b7099dc81e88fd7c7c72f308aefba1e8c66db248f5fccce4bc38dd921c2c", + "blockNumber": "0xce36a7", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x47d24af", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0x53fb04c037", + "l1GasPrice": "0x2ac497172", + "l1GasUsed": "0x6f78" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1713818220, + "chain": 8453, + "commit": "7dc6000" +} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/84532/run-1713816554.json b/broadcast/DeployFactory.s.sol/84532/run-1713816554.json new file mode 100644 index 0000000..3c14dfe --- /dev/null +++ b/broadcast/DeployFactory.s.sol/84532/run-1713816554.json @@ -0,0 +1,119 @@ +{ + "transactions": [ + { + "hash": "0xded8419f995191c3d33c3e9df6118ccebf1d5bb87b0b3c871050c382305c0890", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x70", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xb7f4be38772e2bcb06eaac4c01b91e9c6b6cdf6309e9f9bee5cd523d7a5690a9", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x71", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x4a7702", + "logs": [ + { + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "topics": [ + "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xb44d4049f509f4653af9cca7d652225437cfdd90a6203fe7167e50fc097c1e7c", + "blockNumber": "0x89b283", + "transactionHash": "0xded8419f995191c3d33c3e9df6118ccebf1d5bb87b0b3c871050c382305c0890", + "transactionIndex": "0x7", + "logIndex": "0x3", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xded8419f995191c3d33c3e9df6118ccebf1d5bb87b0b3c871050c382305c0890", + "transactionIndex": "0x7", + "blockHash": "0xb44d4049f509f4653af9cca7d652225437cfdd90a6203fe7167e50fc097c1e7c", + "blockNumber": "0x89b283", + "gasUsed": "0x3d2e82", + "effectiveGasPrice": "0x10415d", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0xe3e06d4571a4", + "l1GasPrice": "0xa", + "l1GasUsed": "0x42468" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x50cb7a", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xb7f4be38772e2bcb06eaac4c01b91e9c6b6cdf6309e9f9bee5cd523d7a5690a9", + "transactionIndex": "0x8", + "blockHash": "0xb44d4049f509f4653af9cca7d652225437cfdd90a6203fe7167e50fc097c1e7c", + "blockNumber": "0x89b283", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x10415d", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0x17f442fb70b5", + "l1GasPrice": "0xa", + "l1GasUsed": "0x6f78" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1713816554, + "chain": 84532, + "commit": "7dc6000" +} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/84532/run-latest.json b/broadcast/DeployFactory.s.sol/84532/run-latest.json new file mode 100644 index 0000000..3c14dfe --- /dev/null +++ b/broadcast/DeployFactory.s.sol/84532/run-latest.json @@ -0,0 +1,119 @@ +{ + "transactions": [ + { + "hash": "0xded8419f995191c3d33c3e9df6118ccebf1d5bb87b0b3c871050c382305c0890", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x70", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xb7f4be38772e2bcb06eaac4c01b91e9c6b6cdf6309e9f9bee5cd523d7a5690a9", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x71", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x4a7702", + "logs": [ + { + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "topics": [ + "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xb44d4049f509f4653af9cca7d652225437cfdd90a6203fe7167e50fc097c1e7c", + "blockNumber": "0x89b283", + "transactionHash": "0xded8419f995191c3d33c3e9df6118ccebf1d5bb87b0b3c871050c382305c0890", + "transactionIndex": "0x7", + "logIndex": "0x3", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xded8419f995191c3d33c3e9df6118ccebf1d5bb87b0b3c871050c382305c0890", + "transactionIndex": "0x7", + "blockHash": "0xb44d4049f509f4653af9cca7d652225437cfdd90a6203fe7167e50fc097c1e7c", + "blockNumber": "0x89b283", + "gasUsed": "0x3d2e82", + "effectiveGasPrice": "0x10415d", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0xe3e06d4571a4", + "l1GasPrice": "0xa", + "l1GasUsed": "0x42468" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x50cb7a", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xb7f4be38772e2bcb06eaac4c01b91e9c6b6cdf6309e9f9bee5cd523d7a5690a9", + "transactionIndex": "0x8", + "blockHash": "0xb44d4049f509f4653af9cca7d652225437cfdd90a6203fe7167e50fc097c1e7c", + "blockNumber": "0x89b283", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x10415d", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0x17f442fb70b5", + "l1GasPrice": "0xa", + "l1GasUsed": "0x6f78" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1713816554, + "chain": 84532, + "commit": "7dc6000" +} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index a8831a5..395c666 100644 --- a/foundry.toml +++ b/foundry.toml @@ -3,6 +3,10 @@ src = "src" out = "out" libs = ["lib"] +[profile.deploy] +optimizer = true +optimizer_runs = 999999 + [fmt] sort_imports = true wrap_comments = true diff --git a/lib/FreshCryptoLib b/lib/FreshCryptoLib deleted file mode 160000 index d9bb3b0..0000000 --- a/lib/FreshCryptoLib +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d9bb3b0fc6b737af2c70dab246cabbc7d05afc3c diff --git a/lib/safe-singleton-deployer-sol b/lib/safe-singleton-deployer-sol index 70ffde7..25f48cc 160000 --- a/lib/safe-singleton-deployer-sol +++ b/lib/safe-singleton-deployer-sol @@ -1 +1 @@ -Subproject commit 70ffde7ae1ad0062f293363e961304feaaff895c +Subproject commit 25f48cc5340ca4350ae2a95937cbb4a2ac4fc8ac diff --git a/remappings.txt b/remappings.txt deleted file mode 100644 index 75adbb7..0000000 --- a/remappings.txt +++ /dev/null @@ -1,10 +0,0 @@ -@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/ -FreshCryptoLib/=lib/FreshCryptoLib/solidity/src/ -account-abstraction/=lib/account-abstraction/contracts/ -ds-test/=lib/forge-std/lib/ds-test/src/ -erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/ -forge-std/=lib/forge-std/src/ -openzeppelin-contracts/=lib/openzeppelin-contracts/ -p256-verifier/=lib/p256-verifier/ -solady/=lib/solady/src/ -webauthn-sol/=lib/webauthn-sol/src/ diff --git a/script/DeployERC4337Factory.s.sol b/script/DeployERC4337Factory.s.sol deleted file mode 100644 index 3662b7f..0000000 --- a/script/DeployERC4337Factory.s.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED -pragma solidity ^0.8.13; - -import {Script, console2} from "forge-std/Script.sol"; - -import {CoinbaseSmartWallet, CoinbaseSmartWalletFactory} from "../src/CoinbaseSmartWalletFactory.sol"; - -contract ERC4337FactoryDeployScript is Script { - function setUp() public {} - - function run() public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - CoinbaseSmartWallet c = new CoinbaseSmartWallet{salt: "0x1"}(); - CoinbaseSmartWalletFactory f = new CoinbaseSmartWalletFactory{salt: "0x1"}(address(c)); - bytes[] memory owners = new bytes[](1); - owners[0] = abi.encode(vm.addr(deployerPrivateKey)); - console2.log("implementation", address(c)); - console2.log("factory", address(f)); - } -} diff --git a/script/DeployFactory.s.sol b/script/DeployFactory.s.sol new file mode 100644 index 0000000..bb4c7cc --- /dev/null +++ b/script/DeployFactory.s.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.13; + +import {Script, console2} from "forge-std/Script.sol"; +import {SafeSingletonDeployer} from "safe-singleton-deployer-sol/src/SafeSingletonDeployer.sol"; + +import {CoinbaseSmartWallet, CoinbaseSmartWalletFactory} from "../src/CoinbaseSmartWalletFactory.sol"; + +contract DeployFactoryScript is Script { + address constant EXPECTED_IMPLEMENTATION = 0x000100abaad02f1cfC8Bbe32bD5a564817339E72; + address constant EXPECTED_FACTORY = 0x0BA5ED0c6AA8c49038F819E587E2633c4A9F428a; + + function run() public { + console2.log("Deploying on chain ID", block.chainid); + uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + address implementation = SafeSingletonDeployer.broadcastDeploy({ + deployerPrivateKey: deployerPrivateKey, + creationCode: type(CoinbaseSmartWallet).creationCode, + args: "", + salt: 0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb + }); + console2.log("implementation", implementation); + assert(implementation == EXPECTED_IMPLEMENTATION); + address factory = SafeSingletonDeployer.broadcastDeploy({ + deployerPrivateKey: deployerPrivateKey, + creationCode: type(CoinbaseSmartWalletFactory).creationCode, + args: abi.encode(implementation), + salt: 0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c + }); + console2.log("factory", factory); + assert(factory == EXPECTED_FACTORY); + } +} From b21450189bf5abe3b28f2df94e9856a825315a5d Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 17:01:48 -0400 Subject: [PATCH 28/42] improve readme --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1bb42eb..59de77e 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ forge test ## Deploying To deploy on a new chain, in your `.env` set ```bash -FOUNDRY_PROFILE=default +FOUNDRY_PROFILE=deploy ``` Then run @@ -105,5 +105,7 @@ Then run forge script script/DeployFactory.s.sol --rpc-url https://... ``` +As written, the script uses a private key that is loaded from env (`PRIVATE_KEY`). However the deployer can configure the deploy key as they wish, see [here](https://book.getfoundry.sh/reference/forge/forge-script?highlight=script#wallet-options---keystore). + ## Influences Much of the code in this repository started from Solady's [ERC4337](https://github.com/Vectorized/solady/blob/main/src/accounts/ERC4337.sol) implementation. We were also influenced by [DaimoAccount](https://github.com/daimo-eth/daimo/blob/master/packages/contract/src/DaimoAccount.sol), which pioneered using passkey signers on ERC-4337 accounts, and [LightAccount](https://github.com/alchemyplatform/light-account). From 9ad8a211957d0637766bac8950a07fee23492c4a Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 20:49:47 -0400 Subject: [PATCH 29/42] fix certora --- .github/workflows/certora.yml | 3 ++- certora/confs/ERC4337Account.conf | 2 +- certora/confs/ERC4337AccountInv.conf | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/certora.yml b/.github/workflows/certora.yml index fd84ac6..24fe5ca 100644 --- a/.github/workflows/certora.yml +++ b/.github/workflows/certora.yml @@ -54,5 +54,6 @@ jobs: max-parallel: 4 matrix: params: - - {name: ERC4337Account, command: 'ERC4337Account.conf'} + - {name: ERC4337Account, command: 'ERC4337Account.conf --rule cantInitTwice'} + - {name: ERC4337Account, command: 'ERC4337Account.conf --exclude_rule cantInitTwice'} - {name: ERC4337AccountInv, command: 'ERC4337AccountInv.conf'} diff --git a/certora/confs/ERC4337Account.conf b/certora/confs/ERC4337Account.conf index b4bee94..4e21d18 100644 --- a/certora/confs/ERC4337Account.conf +++ b/certora/confs/ERC4337Account.conf @@ -9,8 +9,8 @@ "packages": [ "solady=lib/solady/src", "account-abstraction=lib/account-abstraction/contracts", - "FreshCryptoLib=lib/FreshCryptoLib/solidity/src", "webauthn-sol=lib/webauthn-sol/src", + "FreshCryptoLib/=lib/webauthn-sol/lib/FreshCryptoLib/solidity/src/", "openzeppelin-contracts=lib/openzeppelin-contracts" ], "prover_args": [ diff --git a/certora/confs/ERC4337AccountInv.conf b/certora/confs/ERC4337AccountInv.conf index e38f3e6..0257e50 100644 --- a/certora/confs/ERC4337AccountInv.conf +++ b/certora/confs/ERC4337AccountInv.conf @@ -9,8 +9,8 @@ "packages": [ "solady=lib/solady/src", "account-abstraction=lib/account-abstraction/contracts", - "FreshCryptoLib=lib/FreshCryptoLib/solidity/src", "webauthn-sol=lib/webauthn-sol/src", + "FreshCryptoLib/=lib/webauthn-sol/lib/FreshCryptoLib/solidity/src/", "openzeppelin-contracts=lib/openzeppelin-contracts" ], "prover_args": [ From 6551112a39f405bc058781fec3192aa6dbc96981 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 21:03:59 -0400 Subject: [PATCH 30/42] add fuzz seed --- foundry.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/foundry.toml b/foundry.toml index 395c666..36340ef 100644 --- a/foundry.toml +++ b/foundry.toml @@ -11,4 +11,5 @@ optimizer_runs = 999999 sort_imports = true wrap_comments = true -# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options +[fuzz] +seed = "0x1" From 5afb75bf5a518fdd340a838777952d2ec4b1733f Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 22 Apr 2024 21:06:53 -0400 Subject: [PATCH 31/42] remove seed --- foundry.toml | 3 --- 1 file changed, 3 deletions(-) diff --git a/foundry.toml b/foundry.toml index 36340ef..2de3e9f 100644 --- a/foundry.toml +++ b/foundry.toml @@ -10,6 +10,3 @@ optimizer_runs = 999999 [fmt] sort_imports = true wrap_comments = true - -[fuzz] -seed = "0x1" From b5e8ddd4acbeb775cd63d8dbb34d2ff7c635679e Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Tue, 23 Apr 2024 09:22:18 -0400 Subject: [PATCH 32/42] fix snapshot --- .gas-snapshot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gas-snapshot b/.gas-snapshot index 3fd0e65..b656f51 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -45,7 +45,7 @@ TestCanSkipChainIdValidation:test_approvedSelectorsReturnTrue() (gas: 17781) TestCanSkipChainIdValidation:test_otherSelectorsReturnFalse() (gas: 12579) TestExecuteWithoutChainIdValidation:testExecute() (gas: 403873) TestExecuteWithoutChainIdValidation:testExecuteBatch() (gas: 728942) -TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3603267, ~: 3475199) +TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3641324, ~: 3767417) TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50211) TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 81941) TestExecuteWithoutChainIdValidation:test_reverts_whenCallerNotEntryPoint() (gas: 11031) From 5d4daceaa48cfbe9e0bc5dacfb2a56e3d1c24718 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Tue, 23 Apr 2024 09:42:47 -0400 Subject: [PATCH 33/42] add tolerance --- .gas-snapshot | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index b656f51..78acaf7 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -45,7 +45,7 @@ TestCanSkipChainIdValidation:test_approvedSelectorsReturnTrue() (gas: 17781) TestCanSkipChainIdValidation:test_otherSelectorsReturnFalse() (gas: 12579) TestExecuteWithoutChainIdValidation:testExecute() (gas: 403873) TestExecuteWithoutChainIdValidation:testExecuteBatch() (gas: 728942) -TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3641324, ~: 3767417) +TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3640157, ~: 3767417) TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50211) TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 81941) TestExecuteWithoutChainIdValidation:test_reverts_whenCallerNotEntryPoint() (gas: 11031) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a18596e..e1534d3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -40,7 +40,7 @@ jobs: - name: Check snapshot run: | - forge snapshot --check + forge snapshot --check --tolerance 1 id: snapshot forge-coverage: From fb4c0cbbb93475afb2ab0f1351e52b858fe23563 Mon Sep 17 00:00:00 2001 From: wilsoncusack Date: Tue, 23 Apr 2024 10:47:02 -0400 Subject: [PATCH 34/42] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index 59de77e..900ee33 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,3 @@ -> [!IMPORTANT] -> The code in this repository and its dependencies are still under audit. It is not yet recommended for production use. - # Smart Wallet This repository contains code for a new, [ERC-4337](https://eips.ethereum.org/EIPS/eip-4337) compliant smart contract wallet from Coinbase. From 68ad7c5a4353c15fa6aad0e516782924f3a24bb4 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Thu, 25 Apr 2024 21:32:55 -0400 Subject: [PATCH 35/42] arbitrum sepolia deploy --- .../421614/run-latest.json | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 broadcast/DeployFactory.s.sol/421614/run-latest.json diff --git a/broadcast/DeployFactory.s.sol/421614/run-latest.json b/broadcast/DeployFactory.s.sol/421614/run-latest.json new file mode 100644 index 0000000..5a1b81f --- /dev/null +++ b/broadcast/DeployFactory.s.sol/421614/run-latest.json @@ -0,0 +1,57 @@ +{ + "transactions": [ + { + "hash": "0x68bf9b639a1f19296a9408646f046ced382cc222a61d97520b451c4050615fb0", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x85553", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x8", + "chainId": "0x66eee", + "accessList": null, + "type": null + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1f3fd2", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x68bf9b639a1f19296a9408646f046ced382cc222a61d97520b451c4050615fb0", + "transactionIndex": "0x3", + "blockHash": "0xd7c6bd51cfa5634d3ebada2e7996a5caff40ca205646c94cd22c3fbb91574ec8", + "blockNumber": "0x231294e", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x5f5e100", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "gasUsedForL1": "0x0", + "l1BlockNumber": "0x57ec2d" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1713898604, + "chain": 421614, + "commit": "5e5fb8d" +} \ No newline at end of file From a69feac33739bdd3cd9277aefd2cfe477c5b0e86 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Fri, 3 May 2024 16:38:53 -0400 Subject: [PATCH 36/42] deploy OP, Zora, eth mainnet, update readme --- Makefile | 1 + README.md | 12 +- .../DeployFactory.s.sol/1/run-1714757847.json | 61 ++++++++++ .../DeployFactory.s.sol/1/run-latest.json | 109 +++++++++++++++++ .../10/run-1714743977.json | 61 ++++++++++ .../10/run-1714744077.json | 61 ++++++++++ .../DeployFactory.s.sol/10/run-latest.json | 115 ++++++++++++++++++ .../7777777/run-1714757746.json | 115 ++++++++++++++++++ .../7777777/run-latest.json | 115 ++++++++++++++++++ lib/safe-singleton-deployer-sol | 2 +- script/DeployFactory.s.sol | 4 - 11 files changed, 647 insertions(+), 9 deletions(-) create mode 100644 Makefile create mode 100644 broadcast/DeployFactory.s.sol/1/run-1714757847.json create mode 100644 broadcast/DeployFactory.s.sol/1/run-latest.json create mode 100644 broadcast/DeployFactory.s.sol/10/run-1714743977.json create mode 100644 broadcast/DeployFactory.s.sol/10/run-1714744077.json create mode 100644 broadcast/DeployFactory.s.sol/10/run-latest.json create mode 100644 broadcast/DeployFactory.s.sol/7777777/run-1714757746.json create mode 100644 broadcast/DeployFactory.s.sol/7777777/run-latest.json diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9fbaba8 --- /dev/null +++ b/Makefile @@ -0,0 +1 @@ +deploy :; source .env && export FOUNDRY_PROFILE=deploy && forge script script/DeployFactory.s.sol --rpc-url $${RPC_URL} --account fd89 --broadcast --verify diff --git a/README.md b/README.md index 900ee33..86c34d2 100644 --- a/README.md +++ b/README.md @@ -94,15 +94,19 @@ forge test ## Deploying To deploy on a new chain, in your `.env` set ```bash -FOUNDRY_PROFILE=deploy +#`cast wallet` name +ACCOUNT= +# Node RPC URL +RPC_URL= +# Optional Etherscan API key for contract verification +ETHERSCAN_API_KEY= ``` +See [here](https://book.getfoundry.sh/reference/cast/cast-wallet-import) for more details on `cast wallet`. Then run ``` -forge script script/DeployFactory.s.sol --rpc-url https://... +make deploy ``` -As written, the script uses a private key that is loaded from env (`PRIVATE_KEY`). However the deployer can configure the deploy key as they wish, see [here](https://book.getfoundry.sh/reference/forge/forge-script?highlight=script#wallet-options---keystore). - ## Influences Much of the code in this repository started from Solady's [ERC4337](https://github.com/Vectorized/solady/blob/main/src/accounts/ERC4337.sol) implementation. We were also influenced by [DaimoAccount](https://github.com/daimo-eth/daimo/blob/master/packages/contract/src/DaimoAccount.sol), which pioneered using passkey signers on ERC-4337 accounts, and [LightAccount](https://github.com/alchemyplatform/light-account). diff --git a/broadcast/DeployFactory.s.sol/1/run-1714757847.json b/broadcast/DeployFactory.s.sol/1/run-1714757847.json new file mode 100644 index 0000000..7b96a1c --- /dev/null +++ b/broadcast/DeployFactory.s.sol/1/run-1714757847.json @@ -0,0 +1,61 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x4", + "chainId": "0x1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x5", + "chainId": "0x1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1714757847, + "chain": 1, + "commit": "68ad7c5" +} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/1/run-latest.json b/broadcast/DeployFactory.s.sol/1/run-latest.json new file mode 100644 index 0000000..a11599f --- /dev/null +++ b/broadcast/DeployFactory.s.sol/1/run-latest.json @@ -0,0 +1,109 @@ +{ + "transactions": [ + { + "hash": "0xdd4aae47824f66607ab783bb30272578c2443e70f2b9127264e850f3251f7fa9", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x4", + "chainId": "0x1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xfbf9c8150a6c2d19dfb36ae13f3fc2569e39ba511611123b3a90638f178bfd8e", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x5", + "chainId": "0x1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xcc5b8f", + "logs": [ + { + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "topics": [ + "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x1003fce7914ea5bdd8f0ec339e952b5af6abfce0960f56423ac84977d7144a22", + "blockNumber": "0x12dff39", + "transactionHash": "0xdd4aae47824f66607ab783bb30272578c2443e70f2b9127264e850f3251f7fa9", + "transactionIndex": "0x8b", + "logIndex": "0xd9", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xdd4aae47824f66607ab783bb30272578c2443e70f2b9127264e850f3251f7fa9", + "transactionIndex": "0x8b", + "blockHash": "0x1003fce7914ea5bdd8f0ec339e952b5af6abfce0960f56423ac84977d7144a22", + "blockNumber": "0x12dff39", + "gasUsed": "0x3d2e82", + "effectiveGasPrice": "0x133b14699", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xd2b007", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xfbf9c8150a6c2d19dfb36ae13f3fc2569e39ba511611123b3a90638f178bfd8e", + "transactionIndex": "0x8c", + "blockHash": "0x1003fce7914ea5bdd8f0ec339e952b5af6abfce0960f56423ac84977d7144a22", + "blockNumber": "0x12dff39", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x133b14699", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1714764498, + "chain": 1, + "commit": "68ad7c5" +} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/10/run-1714743977.json b/broadcast/DeployFactory.s.sol/10/run-1714743977.json new file mode 100644 index 0000000..d632a58 --- /dev/null +++ b/broadcast/DeployFactory.s.sol/10/run-1714743977.json @@ -0,0 +1,61 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x0", + "chainId": "0xa" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x1", + "chainId": "0xa" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1714743977, + "chain": 10, + "commit": "68ad7c5" +} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/10/run-1714744077.json b/broadcast/DeployFactory.s.sol/10/run-1714744077.json new file mode 100644 index 0000000..f71f8af --- /dev/null +++ b/broadcast/DeployFactory.s.sol/10/run-1714744077.json @@ -0,0 +1,61 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x0", + "chainId": "0xa" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x1", + "chainId": "0xa" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1714744077, + "chain": 10, + "commit": "68ad7c5" +} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/10/run-latest.json b/broadcast/DeployFactory.s.sol/10/run-latest.json new file mode 100644 index 0000000..add4a35 --- /dev/null +++ b/broadcast/DeployFactory.s.sol/10/run-latest.json @@ -0,0 +1,115 @@ +{ + "transactions": [ + { + "hash": "0x9ae7c6ec16b1d29dbac47b5330e476bc3ab0cc31b38c6559cadf3ffd77d6adbd", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x0", + "chainId": "0xa" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x9dc802bef302ec8c0cfe6e39e101c7ca7cf62f3e1c2b63edc33185f585b62d0e", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x1", + "chainId": "0xa" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x6a681e", + "logs": [ + { + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "topics": [ + "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x691a0dd8ab98a8337f30c0d518f4581fab97b6dfffae874284cd2ba925563631", + "blockNumber": "0x7208a13", + "transactionHash": "0x9ae7c6ec16b1d29dbac47b5330e476bc3ab0cc31b38c6559cadf3ffd77d6adbd", + "transactionIndex": "0xa", + "logIndex": "0x4e", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x9ae7c6ec16b1d29dbac47b5330e476bc3ab0cc31b38c6559cadf3ffd77d6adbd", + "transactionIndex": "0xa", + "blockHash": "0x691a0dd8ab98a8337f30c0d518f4581fab97b6dfffae874284cd2ba925563631", + "blockNumber": "0x7208a13", + "gasUsed": "0x3d2e82", + "effectiveGasPrice": "0x1256ec9", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0x3c845182f83", + "l1GasPrice": "0x29b968026", + "l1GasUsed": "0x4243c" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x70bc96", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x9dc802bef302ec8c0cfe6e39e101c7ca7cf62f3e1c2b63edc33185f585b62d0e", + "transactionIndex": "0xb", + "blockHash": "0x691a0dd8ab98a8337f30c0d518f4581fab97b6dfffae874284cd2ba925563631", + "blockNumber": "0x7208a13", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x1256ec9", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0x65ba876db8", + "l1GasPrice": "0x29b968026", + "l1GasUsed": "0x6f64" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1714744805, + "chain": 10, + "commit": "68ad7c5" +} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/7777777/run-1714757746.json b/broadcast/DeployFactory.s.sol/7777777/run-1714757746.json new file mode 100644 index 0000000..6c69012 --- /dev/null +++ b/broadcast/DeployFactory.s.sol/7777777/run-1714757746.json @@ -0,0 +1,115 @@ +{ + "transactions": [ + { + "hash": "0x049cc54a4a4975d48db8f402828c15687dc13e33b1fdbb7c01cb10a69ac2fad0", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x0", + "chainId": "0x76adf1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x9995fc9f3bcef3b3ea044cef06e72db707d606fd8dcfbc2c8db70be6570c0d65", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x1", + "chainId": "0x76adf1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x4c1c70", + "logs": [ + { + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "topics": [ + "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa5d9b2560ca00afd7c597dbb649548adfaa728a7c06ff05ad948deb5f016859c", + "blockNumber": "0xd61c12", + "transactionHash": "0x049cc54a4a4975d48db8f402828c15687dc13e33b1fdbb7c01cb10a69ac2fad0", + "transactionIndex": "0x6", + "logIndex": "0x10", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x049cc54a4a4975d48db8f402828c15687dc13e33b1fdbb7c01cb10a69ac2fad0", + "transactionIndex": "0x6", + "blockHash": "0xa5d9b2560ca00afd7c597dbb649548adfaa728a7c06ff05ad948deb5f016859c", + "blockNumber": "0xd61c12", + "gasUsed": "0x3d2e82", + "effectiveGasPrice": "0x1879c", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0x30713aea5e46", + "l1GasPrice": "0x248bd5536", + "l1GasUsed": "0x42468" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5270e8", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x9995fc9f3bcef3b3ea044cef06e72db707d606fd8dcfbc2c8db70be6570c0d65", + "transactionIndex": "0x7", + "blockHash": "0xa5d9b2560ca00afd7c597dbb649548adfaa728a7c06ff05ad948deb5f016859c", + "blockNumber": "0xd61c12", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x1879c", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0x51826e95822", + "l1GasPrice": "0x248bd5536", + "l1GasUsed": "0x6f84" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1714757746, + "chain": 7777777, + "commit": "68ad7c5" +} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/7777777/run-latest.json b/broadcast/DeployFactory.s.sol/7777777/run-latest.json new file mode 100644 index 0000000..6c69012 --- /dev/null +++ b/broadcast/DeployFactory.s.sol/7777777/run-latest.json @@ -0,0 +1,115 @@ +{ + "transactions": [ + { + "hash": "0x049cc54a4a4975d48db8f402828c15687dc13e33b1fdbb7c01cb10a69ac2fad0", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x0", + "chainId": "0x76adf1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0x9995fc9f3bcef3b3ea044cef06e72db707d606fd8dcfbc2c8db70be6570c0d65", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x1", + "chainId": "0x76adf1" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x4c1c70", + "logs": [ + { + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "topics": [ + "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa5d9b2560ca00afd7c597dbb649548adfaa728a7c06ff05ad948deb5f016859c", + "blockNumber": "0xd61c12", + "transactionHash": "0x049cc54a4a4975d48db8f402828c15687dc13e33b1fdbb7c01cb10a69ac2fad0", + "transactionIndex": "0x6", + "logIndex": "0x10", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x049cc54a4a4975d48db8f402828c15687dc13e33b1fdbb7c01cb10a69ac2fad0", + "transactionIndex": "0x6", + "blockHash": "0xa5d9b2560ca00afd7c597dbb649548adfaa728a7c06ff05ad948deb5f016859c", + "blockNumber": "0xd61c12", + "gasUsed": "0x3d2e82", + "effectiveGasPrice": "0x1879c", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0x30713aea5e46", + "l1GasPrice": "0x248bd5536", + "l1GasUsed": "0x42468" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5270e8", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x9995fc9f3bcef3b3ea044cef06e72db707d606fd8dcfbc2c8db70be6570c0d65", + "transactionIndex": "0x7", + "blockHash": "0xa5d9b2560ca00afd7c597dbb649548adfaa728a7c06ff05ad948deb5f016859c", + "blockNumber": "0xd61c12", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x1879c", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null, + "l1Fee": "0x51826e95822", + "l1GasPrice": "0x248bd5536", + "l1GasUsed": "0x6f84" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1714757746, + "chain": 7777777, + "commit": "68ad7c5" +} \ No newline at end of file diff --git a/lib/safe-singleton-deployer-sol b/lib/safe-singleton-deployer-sol index 25f48cc..cf2b89c 160000 --- a/lib/safe-singleton-deployer-sol +++ b/lib/safe-singleton-deployer-sol @@ -1 +1 @@ -Subproject commit 25f48cc5340ca4350ae2a95937cbb4a2ac4fc8ac +Subproject commit cf2b89c33fed536c4dd6fef2fb84f39053068868 diff --git a/script/DeployFactory.s.sol b/script/DeployFactory.s.sol index bb4c7cc..63a5b1e 100644 --- a/script/DeployFactory.s.sol +++ b/script/DeployFactory.s.sol @@ -12,17 +12,13 @@ contract DeployFactoryScript is Script { function run() public { console2.log("Deploying on chain ID", block.chainid); - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); address implementation = SafeSingletonDeployer.broadcastDeploy({ - deployerPrivateKey: deployerPrivateKey, creationCode: type(CoinbaseSmartWallet).creationCode, - args: "", salt: 0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb }); console2.log("implementation", implementation); assert(implementation == EXPECTED_IMPLEMENTATION); address factory = SafeSingletonDeployer.broadcastDeploy({ - deployerPrivateKey: deployerPrivateKey, creationCode: type(CoinbaseSmartWalletFactory).creationCode, args: abi.encode(implementation), salt: 0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c From 94bf59ff90dd165fe9fad7af53a1433f8007c8ab Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Fri, 3 May 2024 16:52:49 -0400 Subject: [PATCH 37/42] update makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9fbaba8..3691497 100644 --- a/Makefile +++ b/Makefile @@ -1 +1 @@ -deploy :; source .env && export FOUNDRY_PROFILE=deploy && forge script script/DeployFactory.s.sol --rpc-url $${RPC_URL} --account fd89 --broadcast --verify +deploy :; source .env && export FOUNDRY_PROFILE=deploy && forge script script/DeployFactory.s.sol --rpc-url $${RPC_URL} --account $${ACCOUNT} --broadcast --verify From 2de2fc82e3d5ee4c8d3ff7d08c7d017bd8333e17 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Thu, 9 May 2024 11:35:34 -0400 Subject: [PATCH 38/42] deploy on avalanche and bnb --- .../43114/run-1715187553.json | 109 ++++++++++++++++++ .../DeployFactory.s.sol/43114/run-latest.json | 109 ++++++++++++++++++ .../DeployFactory.s.sol/56/run-latest.json | 53 +++++++++ script/DeployFactory.s.sol | 2 +- 4 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 broadcast/DeployFactory.s.sol/43114/run-1715187553.json create mode 100644 broadcast/DeployFactory.s.sol/43114/run-latest.json create mode 100644 broadcast/DeployFactory.s.sol/56/run-latest.json diff --git a/broadcast/DeployFactory.s.sol/43114/run-1715187553.json b/broadcast/DeployFactory.s.sol/43114/run-1715187553.json new file mode 100644 index 0000000..8dcec87 --- /dev/null +++ b/broadcast/DeployFactory.s.sol/43114/run-1715187553.json @@ -0,0 +1,109 @@ +{ + "transactions": [ + { + "hash": "0x0b768d6501ce09908cb4eff33c4dba6c141b071109b7870aa4f669962ce71725", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x0", + "chainId": "0xa86a" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xbf08fd6420d69498e84d6b1e5eb4cd07401e0563feb1c5307528197d897e7f18", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x1", + "chainId": "0xa86a" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x4f8ff0", + "logs": [ + { + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "topics": [ + "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xaebde5ca206ee3e658eb2e45e28a4ba5aacc78be192693627c7e5ed09f731ca0", + "blockNumber": "0x2b18a02", + "transactionHash": "0x0b768d6501ce09908cb4eff33c4dba6c141b071109b7870aa4f669962ce71725", + "transactionIndex": "0x2", + "logIndex": "0x6", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0b768d6501ce09908cb4eff33c4dba6c141b071109b7870aa4f669962ce71725", + "transactionIndex": "0x2", + "blockHash": "0xaebde5ca206ee3e658eb2e45e28a4ba5aacc78be192693627c7e5ed09f731ca0", + "blockNumber": "0x2b18a02", + "gasUsed": "0x3d2e82", + "effectiveGasPrice": "0x63a6c9b80", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x87db0", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xbf08fd6420d69498e84d6b1e5eb4cd07401e0563feb1c5307528197d897e7f18", + "transactionIndex": "0x3", + "blockHash": "0x4fcd306c9320d7cef7404d281aa02bb8aa3e5e3cb4e338d370c305d88b33ba63", + "blockNumber": "0x2b18a03", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x63a6c9b80", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1715187553, + "chain": 43114, + "commit": "39d5c7c" +} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/43114/run-latest.json b/broadcast/DeployFactory.s.sol/43114/run-latest.json new file mode 100644 index 0000000..8dcec87 --- /dev/null +++ b/broadcast/DeployFactory.s.sol/43114/run-latest.json @@ -0,0 +1,109 @@ +{ + "transactions": [ + { + "hash": "0x0b768d6501ce09908cb4eff33c4dba6c141b071109b7870aa4f669962ce71725", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x547b40", + "value": "0x0", + "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", + "nonce": "0x0", + "chainId": "0xa86a" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" + } + ], + "isFixedGasLimit": false + }, + { + "hash": "0xbf08fd6420d69498e84d6b1e5eb4cd07401e0563feb1c5307528197d897e7f18", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x1", + "chainId": "0xa86a" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x4f8ff0", + "logs": [ + { + "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", + "topics": [ + "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xaebde5ca206ee3e658eb2e45e28a4ba5aacc78be192693627c7e5ed09f731ca0", + "blockNumber": "0x2b18a02", + "transactionHash": "0x0b768d6501ce09908cb4eff33c4dba6c141b071109b7870aa4f669962ce71725", + "transactionIndex": "0x2", + "logIndex": "0x6", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0b768d6501ce09908cb4eff33c4dba6c141b071109b7870aa4f669962ce71725", + "transactionIndex": "0x2", + "blockHash": "0xaebde5ca206ee3e658eb2e45e28a4ba5aacc78be192693627c7e5ed09f731ca0", + "blockNumber": "0x2b18a02", + "gasUsed": "0x3d2e82", + "effectiveGasPrice": "0x63a6c9b80", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x87db0", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xbf08fd6420d69498e84d6b1e5eb4cd07401e0563feb1c5307528197d897e7f18", + "transactionIndex": "0x3", + "blockHash": "0x4fcd306c9320d7cef7404d281aa02bb8aa3e5e3cb4e338d370c305d88b33ba63", + "blockNumber": "0x2b18a03", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x63a6c9b80", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1715187553, + "chain": 43114, + "commit": "39d5c7c" +} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/56/run-latest.json b/broadcast/DeployFactory.s.sol/56/run-latest.json new file mode 100644 index 0000000..44e8e89 --- /dev/null +++ b/broadcast/DeployFactory.s.sol/56/run-latest.json @@ -0,0 +1,53 @@ +{ + "transactions": [ + { + "hash": "0xaf7a0464332cd9e89bdbc3593f2fd7294633d71bcaef9327efdb80abff55acd8", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "function": null, + "arguments": null, + "transaction": { + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "gas": "0x8bda5", + "value": "0x0", + "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", + "nonce": "0x1", + "chainId": "0x38" + }, + "additionalContracts": [ + { + "transactionType": "CREATE2", + "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", + "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" + } + ], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x51a3e5", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xaf7a0464332cd9e89bdbc3593f2fd7294633d71bcaef9327efdb80abff55acd8", + "transactionIndex": "0x12", + "blockHash": "0xfffa6159f8ac094ff59c0dd6ede9a36dfd682440c96b4377afaaec02960f2bc9", + "blockNumber": "0x24c285b", + "gasUsed": "0x65478", + "effectiveGasPrice": "0x3b9aca00", + "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", + "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1715180342, + "chain": 56, + "commit": "39d5c7c" +} \ No newline at end of file diff --git a/script/DeployFactory.s.sol b/script/DeployFactory.s.sol index 63a5b1e..2cb9963 100644 --- a/script/DeployFactory.s.sol +++ b/script/DeployFactory.s.sol @@ -20,7 +20,7 @@ contract DeployFactoryScript is Script { assert(implementation == EXPECTED_IMPLEMENTATION); address factory = SafeSingletonDeployer.broadcastDeploy({ creationCode: type(CoinbaseSmartWalletFactory).creationCode, - args: abi.encode(implementation), + args: abi.encode(EXPECTED_IMPLEMENTATION), salt: 0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c }); console2.log("factory", factory); From 0fe87f18488fa89b792896d79de3200242778a68 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 9 Sep 2024 09:54:31 -0400 Subject: [PATCH 39/42] add other audits --- audits/Cantina-April-2024.pdf | Bin 0 -> 523607 bytes ...t Account.pdf => Cantina-December-2023.pdf} | Bin ...ra-report.pdf => Certora-February-2024.pdf} | Bin audits/Code4rena-March-2023.md | 1 + 4 files changed, 1 insertion(+) create mode 100644 audits/Cantina-April-2024.pdf rename audits/{report-Base Paymaster & Smart Account.pdf => Cantina-December-2023.pdf} (100%) rename audits/{Feb-2024-Coinbase-Certora-report.pdf => Certora-February-2024.pdf} (100%) create mode 100644 audits/Code4rena-March-2023.md diff --git a/audits/Cantina-April-2024.pdf b/audits/Cantina-April-2024.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0f82dd8bea8941b88277fc68a47cd1d9149ef9d2 GIT binary patch literal 523607 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�Mpo=Xc!Tlqxb6W_+%872`xqc%+bJMqOa*D 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 z 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 X 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 wEAYluAhxV25%EpSb3?J Date: Mon, 9 Sep 2024 11:54:53 -0400 Subject: [PATCH 40/42] update snapshot --- .gas-snapshot | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.gas-snapshot b/.gas-snapshot index 78acaf7..106e732 100644 --- a/.gas-snapshot +++ b/.gas-snapshot @@ -5,7 +5,7 @@ AddOwnerAddressTest:testRevertsIfCalledByNonOwner() (gas: 11786) AddOwnerAddressTest:testSetsIsOwner() (gas: 90492) AddOwnerAddressTest:testSetsOwnerAtIndex() (gas: 98992) AddOwnerPublicKeyTest:testEmitsAddOwner() (gas: 115559) -AddOwnerPublicKeyTest:testFuzzIsOwnerPublicKey(bytes32,bytes32) (runs: 256, μ: 115372, ~: 115372) +AddOwnerPublicKeyTest:testFuzzIsOwnerPublicKey(bytes32,bytes32) (runs: 257, μ: 115372, ~: 115372) AddOwnerPublicKeyTest:testRevertsIfAlreadyOwner() (gas: 116399) AddOwnerPublicKeyTest:testRevertsIfCalledByNonOwner() (gas: 11776) AddOwnerPublicKeyTest:testSetsIsOwner() (gas: 113813) @@ -15,7 +15,7 @@ CoinbaseSmartWallet1271InputGeneratorTest:testGetReplaySafeHashForUndeployedAcco CoinbaseSmartWalletFactoryTest:testDeployDeterministicPassValues() (gas: 267283) CoinbaseSmartWalletFactoryTest:test_CreateAccount_ReturnsPredeterminedAddress_WhenAccountAlreadyExists() (gas: 286935) CoinbaseSmartWalletFactoryTest:test_RevertsIfLength32ButLargerThanAddress() (gas: 298669) -CoinbaseSmartWalletFactoryTest:test_constructor_setsImplementation(address) (runs: 256, μ: 313355, ~: 313355) +CoinbaseSmartWalletFactoryTest:test_constructor_setsImplementation(address) (runs: 257, μ: 313355, ~: 313355) CoinbaseSmartWalletFactoryTest:test_createAccountDeploysToPredeterminedAddress() (gas: 268634) CoinbaseSmartWalletFactoryTest:test_createAccountSetsOwnersCorrectly() (gas: 277324) CoinbaseSmartWalletFactoryTest:test_exitIfAccountIsAlreadyInitialized() (gas: 267739) @@ -30,14 +30,14 @@ MultiOwnableInitializeTest:testRevertsIfLengthNot32Or64() (gas: 103395) RemoveLastOwnerTest:test_emitsRemoveOwner() (gas: 50363) RemoveLastOwnerTest:test_removesOwner() (gas: 49657) RemoveLastOwnerTest:test_removesOwnerAtIndex() (gas: 49588) -RemoveLastOwnerTest:test_revert_whenCalledByNonOwner(address) (runs: 256, μ: 19094, ~: 19094) +RemoveLastOwnerTest:test_revert_whenCalledByNonOwner(address) (runs: 257, μ: 19094, ~: 19094) RemoveLastOwnerTest:test_revert_whenNoOwnerAtIndex() (gas: 48407) RemoveLastOwnerTest:test_revert_whenWrongOwnerAtIndex() (gas: 34181) RemoveLastOwnerTest:test_reverts_whenNotLastOwner() (gas: 123462) RemoveOwnerAtIndexTest:test_emitsRemoveOwner() (gas: 55549) RemoveOwnerAtIndexTest:test_removesOwner() (gas: 54828) RemoveOwnerAtIndexTest:test_removesOwnerAtIndex() (gas: 54566) -RemoveOwnerAtIndexTest:test_revert_whenCalledByNonOwner(address) (runs: 256, μ: 19145, ~: 19145) +RemoveOwnerAtIndexTest:test_revert_whenCalledByNonOwner(address) (runs: 257, μ: 19145, ~: 19145) RemoveOwnerAtIndexTest:test_revert_whenNoOwnerAtIndex() (gas: 33406) RemoveOwnerAtIndexTest:test_revert_whenWrongOwnerAtIndex() (gas: 36728) RemoveOwnerAtIndexTest:test_reverts_ifIsLastOwner() (gas: 7647492) @@ -45,7 +45,7 @@ TestCanSkipChainIdValidation:test_approvedSelectorsReturnTrue() (gas: 17781) TestCanSkipChainIdValidation:test_otherSelectorsReturnFalse() (gas: 12579) TestExecuteWithoutChainIdValidation:testExecute() (gas: 403873) TestExecuteWithoutChainIdValidation:testExecuteBatch() (gas: 728942) -TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 256, μ: 3640157, ~: 3767417) +TestExecuteWithoutChainIdValidation:testExecuteBatch(uint256) (runs: 257, μ: 3628778, ~: 3584759) TestExecuteWithoutChainIdValidation:test__codesize() (gas: 50211) TestExecuteWithoutChainIdValidation:test_revertsWithReservedNonce() (gas: 81941) TestExecuteWithoutChainIdValidation:test_reverts_whenCallerNotEntryPoint() (gas: 11031) @@ -62,9 +62,9 @@ TestIsValidSignature:testRevertsIfOwnerIsInvalidEthereumAddress() (gas: 21999) TestIsValidSignature:testSmartWalletSigner() (gas: 3177948) TestIsValidSignature:testValidateSignatureWithEOASigner() (gas: 24900) TestIsValidSignature:testValidateSignatureWithEOASignerFailsWithWrongSigner() (gas: 23855) -TestIsValidSignature:testValidateSignatureWithPasskeySigner() (gas: 423221) +TestIsValidSignature:testValidateSignatureWithPasskeySigner() (gas: 437729) TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsBadOwnerIndex() (gas: 35642) -TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsWithWrongBadSignature() (gas: 430687) +TestIsValidSignature:testValidateSignatureWithPasskeySignerFailsWithWrongBadSignature() (gas: 428169) TestUpgradeToAndCall:testUpgradeToAndCall() (gas: 25499) TestValidateUserOp:test_reverts_whenReplayableNonceKeyInvalidForSelector() (gas: 14211) TestValidateUserOp:test_reverts_whenSelectorInvalidForReplayableNonceKey() (gas: 14476) From e69782725cb3af0bec5cf8d014a4e77348b85f66 Mon Sep 17 00:00:00 2001 From: Wilson Cusack Date: Mon, 9 Sep 2024 16:54:17 -0400 Subject: [PATCH 41/42] rename --- audits/{Code4rena-March-2023.md => Code4rena-March-2024.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename audits/{Code4rena-March-2023.md => Code4rena-March-2024.md} (100%) diff --git a/audits/Code4rena-March-2023.md b/audits/Code4rena-March-2024.md similarity index 100% rename from audits/Code4rena-March-2023.md rename to audits/Code4rena-March-2024.md From 26cb5ede49884b98c6a1115f96547f70c8f573d9 Mon Sep 17 00:00:00 2001 From: DatOneJuice <140846919+DatOneJuice@users.noreply.github.com> Date: Fri, 22 Nov 2024 21:10:20 -0600 Subject: [PATCH 42/42] Revert "deploy on avalanche and bnb" --- .../43114/run-1715187553.json | 109 ------------------ .../DeployFactory.s.sol/43114/run-latest.json | 109 ------------------ .../DeployFactory.s.sol/56/run-latest.json | 53 --------- script/DeployFactory.s.sol | 2 +- 4 files changed, 1 insertion(+), 272 deletions(-) delete mode 100644 broadcast/DeployFactory.s.sol/43114/run-1715187553.json delete mode 100644 broadcast/DeployFactory.s.sol/43114/run-latest.json delete mode 100644 broadcast/DeployFactory.s.sol/56/run-latest.json diff --git a/broadcast/DeployFactory.s.sol/43114/run-1715187553.json b/broadcast/DeployFactory.s.sol/43114/run-1715187553.json deleted file mode 100644 index 8dcec87..0000000 --- a/broadcast/DeployFactory.s.sol/43114/run-1715187553.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x0b768d6501ce09908cb4eff33c4dba6c141b071109b7870aa4f669962ce71725", - "transactionType": "CALL", - "contractName": null, - "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "function": null, - "arguments": null, - "transaction": { - "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", - "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "gas": "0x547b40", - "value": "0x0", - "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", - "nonce": "0x0", - "chainId": "0xa86a" - }, - "additionalContracts": [ - { - "transactionType": "CREATE2", - "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", - "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" - } - ], - "isFixedGasLimit": false - }, - { - "hash": "0xbf08fd6420d69498e84d6b1e5eb4cd07401e0563feb1c5307528197d897e7f18", - "transactionType": "CALL", - "contractName": null, - "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "function": null, - "arguments": null, - "transaction": { - "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", - "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "gas": "0x8bda5", - "value": "0x0", - "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", - "nonce": "0x1", - "chainId": "0xa86a" - }, - "additionalContracts": [ - { - "transactionType": "CREATE2", - "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", - "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" - } - ], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x4f8ff0", - "logs": [ - { - "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", - "topics": [ - "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xaebde5ca206ee3e658eb2e45e28a4ba5aacc78be192693627c7e5ed09f731ca0", - "blockNumber": "0x2b18a02", - "transactionHash": "0x0b768d6501ce09908cb4eff33c4dba6c141b071109b7870aa4f669962ce71725", - "transactionIndex": "0x2", - "logIndex": "0x6", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0x0b768d6501ce09908cb4eff33c4dba6c141b071109b7870aa4f669962ce71725", - "transactionIndex": "0x2", - "blockHash": "0xaebde5ca206ee3e658eb2e45e28a4ba5aacc78be192693627c7e5ed09f731ca0", - "blockNumber": "0x2b18a02", - "gasUsed": "0x3d2e82", - "effectiveGasPrice": "0x63a6c9b80", - "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", - "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "contractAddress": null - }, - { - "status": "0x1", - "cumulativeGasUsed": "0x87db0", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0xbf08fd6420d69498e84d6b1e5eb4cd07401e0563feb1c5307528197d897e7f18", - "transactionIndex": "0x3", - "blockHash": "0x4fcd306c9320d7cef7404d281aa02bb8aa3e5e3cb4e338d370c305d88b33ba63", - "blockNumber": "0x2b18a03", - "gasUsed": "0x65478", - "effectiveGasPrice": "0x63a6c9b80", - "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", - "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "contractAddress": null - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1715187553, - "chain": 43114, - "commit": "39d5c7c" -} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/43114/run-latest.json b/broadcast/DeployFactory.s.sol/43114/run-latest.json deleted file mode 100644 index 8dcec87..0000000 --- a/broadcast/DeployFactory.s.sol/43114/run-latest.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "transactions": [ - { - "hash": "0x0b768d6501ce09908cb4eff33c4dba6c141b071109b7870aa4f669962ce71725", - "transactionType": "CALL", - "contractName": null, - "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "function": null, - "arguments": null, - "transaction": { - "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", - "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "gas": "0x547b40", - "value": "0x0", - "input": "0x3438ae5ce1ff7750c1e09c4b28e2a04525da412f91561eb5b57729977f591fbb60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00", - "nonce": "0x0", - "chainId": "0xa86a" - }, - "additionalContracts": [ - { - "transactionType": "CREATE2", - "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", - "initCode": "0x60a0604052306080523480156200001557600080fd5b50604080516001808252818301909252600091816020015b60608152602001906001900390816200002d57905050604080516000602082015291925001604051602081830303815290604052816000815181106200007757620000776200036b565b60209081029190910101526200008d8162000094565b50620005a1565b60008051602062004c16833981519152805460005b83518110156200022357838181518110620000c857620000c86200036b565b602002602001015151602014158015620001005750838181518110620000f257620000f26200036b565b602002602001015151604014155b1562000148578381815181106200011b576200011b6200036b565b60200260200101516040516327755b9160e11b81526004016200013f9190620003a7565b60405180910390fd5b8381815181106200015d576200015d6200036b565b6020026020010151516020148015620001a557506001600160a01b0380168482815181106200019057620001906200036b565b6020026020010151620001a390620003dc565b115b15620001e457838181518110620001c057620001c06200036b565b602002602001015160405163bff1ac6560e01b81526004016200013f9190620003a7565b6200021a848281518110620001fd57620001fd6200036b565b60200260200101518380620002129062000404565b945062000229565b600101620000a9565b50905550565b620002348262000317565b1562000257578160405163468b12ad60e11b81526004016200013f9190620003a7565b60405160008051602062004c16833981519152906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f03906200029d9086906200042c565b9081526040805160209281900383019020805460ff19169315159390931790925560008481526002840190915220620002d78482620004d5565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516200030a9190620003a7565b60405180910390a2505050565b600060008051602062004c16833981519152600301826040516200033c91906200042c565b9081526040519081900360200190205460ff1692915050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60005b838110156200039e57818101518382015260200162000384565b50506000910152565b6020815260008251806020840152620003c881604085016020870162000381565b601f01601f19169190910160400192915050565b80516020808301519190811015620003fe576000198160200360031b1b821691505b50919050565b6000600182016200042557634e487b7160e01b600052601160045260246000fd5b5060010190565b600082516200044081846020870162000381565b9190910192915050565b600181811c908216806200045f57607f821691505b602082108103620003fe57634e487b7160e01b600052602260045260246000fd5b601f821115620004d0576000816000526020600020601f850160051c81016020861015620004ab5750805b601f850160051c820191505b81811015620004cc57828155600101620004b7565b5050505b505050565b81516001600160401b03811115620004f157620004f162000355565b62000509816200050284546200044a565b8462000480565b602080601f831160018114620005415760008415620005285750858301515b600019600386901b1c1916600185901b178555620004cc565b600085815260208120601f198616915b82811015620005725788860151825594840194600190910190840162000551565b5085821015620005915787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b608051614652620005c460003960008181610bbe0152610cf501526146526000f3fe6080604052600436106101b05760003560e01c80635c60da1b116100ec578063a2e1a8d81161008a578063b819736711610064578063b81973671461051d578063ce1506be1461053d578063d948fd2e1461055d578063f698da2514610591576101b7565b8063a2e1a8d8146104c3578063b0d691fe146104e3578063b61d27f61461050a576101b7565b806388ce4c7c116100c657806388ce4c7c1461044057806389625b57146104565780638ea69029146104765780639f9bcb34146104a3576101b7565b80635c60da1b146103b05780636f2de70e1461040557806384b0196e14610418576101b7565b80632c2abd1e116101595780633a871cdd116101335780633a871cdd146103485780634f1ef286146103685780634f6e7f221461037b57806352d1902d1461039b576101b7565b80632c2abd1e146102ee57806334fcd5be1461030157806336d9cf9b14610314576101b7565b80631626ba7e1161018a5780631626ba7e1461025d5780631ca5393f146102ae57806329565e3b146102ce576101b7565b8063066a1eb7146101e55780630db026221461021a5780630f0f3f241461023d576101b7565b366101b757005b60003560e01c63bc197c81811463f23a6e6182141763150b7a02821417156101e357806020526020603cf35b005b3480156101f157600080fd5b5061020561020036600461388d565b6105a6565b60405190151581526020015b60405180910390f35b34801561022657600080fd5b5061022f610633565b604051908152602001610211565b34801561024957600080fd5b506101e36102583660046138d8565b61068a565b34801561026957600080fd5b5061027d61027836600461393c565b610708565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610211565b3480156102ba57600080fd5b506102056102c9366004613acb565b610773565b3480156102da57600080fd5b506101e36102e936600461388d565b6107c0565b6101e36102fc366004613b45565b6107e9565b6101e361030f366004613b45565b610935565b34801561032057600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f015461022f565b34801561035457600080fd5b5061022f610363366004613ba0565b610a34565b6101e3610376366004613bee565b610bbc565b34801561038757600080fd5b5061022f610396366004613c28565b610ca0565b3480156103a757600080fd5b5061022f610cf1565b3480156103bc57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc545b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610211565b6101e3610413366004613b45565b610d51565b34801561042457600080fd5b5061042d610dbc565b6040516102119796959493929190613ccb565b34801561044c57600080fd5b5061022f61210581565b34801561046257600080fd5b506101e361047136600461393c565b610e65565b34801561048257600080fd5b50610496610491366004613d8d565b610eb9565b6040516102119190613da6565b3480156104af57600080fd5b506102056104be366004613db9565b610f7a565b3480156104cf57600080fd5b506102056104de3660046138d8565b611106565b3480156104ef57600080fd5b50735ff137d4b0fdcd49dca30c7cf57e578a026d27896103e0565b6101e3610518366004613dfb565b611189565b34801561052957600080fd5b506101e361053836600461393c565b6111ed565b34801561054957600080fd5b5061022f610558366004613d8d565b61124a565b34801561056957600080fd5b507f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005461022f565b34801561059d57600080fd5b5061022f611255565b60408051602081018490529081018290526000907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261061791613e55565b9081526040519081900360200190205460ff1690505b92915050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f01547f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460009261068491613ea0565b91505090565b610692611341565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015261070591015b6040516020818303038152906040526106ee7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0090565b80549060006106fc83613eb3565b9190505561138d565b50565b600061071d6107168561124a565b84846114b8565b1561074957507f1626ba7e0000000000000000000000000000000000000000000000000000000061076c565b507fffffffff000000000000000000000000000000000000000000000000000000005b9392505050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00600301826040516107a79190613e55565b9081526040519081900360200190205460ff1692915050565b6107c8611341565b60408051602081018490529081018290526107e5906060016106b8565b5050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d278914610836576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b818110156109305736600084848481811061085657610856613eeb565b90506020028101906108689190613f1a565b909250905060006108798284613f7f565b905061088481610f7a565b6108e3576040517f3b06e1460000000000000000000000000000000000000000000000000000000081527fffffffff00000000000000000000000000000000000000000000000000000000821660048201526024015b60405180910390fd5b61092530600085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b505050600101610839565b505050565b33735ff137d4b0fdcd49dca30c7cf57e578a026d27891461095857610958611341565b60005b8181101561093057610a2c83838381811061097857610978613eeb565b905060200281019061098a9190613fc7565b6109989060208101906138d8565b8484848181106109aa576109aa613eeb565b90506020028101906109bc9190613fc7565b602001358585858181106109d2576109d2613eeb565b90506020028101906109e49190613fc7565b6109f2906040810190613f1a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b60010161095b565b600033735ff137d4b0fdcd49dca30c7cf57e578a026d278914610a83576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81602085013560401c7f2c2abd1e00000000000000000000000000000000000000000000000000000000610aba6060880188613f1a565b610ac391613f7f565b7fffffffff000000000000000000000000000000000000000000000000000000001603610b3857610af386610ca0565b94506121058114610b33576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b76565b6121058103610b76576040517f2ef37813000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610b8d85610b88610140890189613f1a565b6114b8565b15610b9c576000925050610ba2565b60019250505b8015610bb45760003860003884335af1505b509392505050565b7f0000000000000000000000000000000000000000000000000000000000000000308103610bf257639f03a0266000526004601cfd5b610bfb84611689565b8360601b60601c93506352d1902d6001527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80602060016004601d895afa5114610c4d576355299b496001526004601dfd5b847fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600038a28490558115610c9a57604051828482376000388483885af4610c98573d6000823e3d81fd5b505b50505050565b6000610cab82611691565b604080516020810192909252735ff137d4b0fdcd49dca30c7cf57e578a026d2789908201526060015b604051602081830303815290604052805190602001209050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000308114610d2957639f03a0266000526004601cfd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc91505b5090565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f005415610daa576040517f5daa87a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107e5610db78284613ffb565b6116aa565b7f0f000000000000000000000000000000000000000000000000000000000000006060806000808083610e53604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b97989097965046955030945091925090565b610e6d611341565b610e75610633565b600103610eae576040517f948bf89700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610930838383611861565b60008181527f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0260205260409020805460609190610ef590614081565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190614081565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b50505050509050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f29565e3b00000000000000000000000000000000000000000000000000000000148061100d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0f0f3f2400000000000000000000000000000000000000000000000000000000145b8061105957507fffffffff0000000000000000000000000000000000000000000000000000000082167f89625b5700000000000000000000000000000000000000000000000000000000145b806110a557507fffffffff0000000000000000000000000000000000000000000000000000000082167fb819736700000000000000000000000000000000000000000000000000000000145b806110f157507fffffffff0000000000000000000000000000000000000000000000000000000082167f4f1ef28600000000000000000000000000000000000000000000000000000000145b156110fe57506001919050565b506000919050565b60007f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f006040805173ffffffffffffffffffffffffffffffffffffffff851660208201526003929092019101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526107a791613e55565b33735ff137d4b0fdcd49dca30c7cf57e578a026d2789146111ac576111ac611341565b610c9a848484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061160c92505050565b6111f5611341565b60006111ff610633565b9050600181111561123f576040517f823f1aa8000000000000000000000000000000000000000000000000000000008152600481018290526024016108da565b610c9a848484611861565b600061062d82611a05565b60008060006112c8604080518082018252601581527f436f696e6261736520536d6172742057616c6c657400000000000000000000006020808301919091528251808401909352600183527f31000000000000000000000000000000000000000000000000000000000000009083015291565b8151602080840191909120825182840120604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f9481019490945283019190915260608201524660808201523060a0820152919350915060c001604051602081830303815290604052805190602001209250505090565b61134a33611106565b8061135457503330145b1561135b57565b6040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139682610773565b156113cf57816040517f8d16255a0000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00906001907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f0390611424908690613e55565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016931515939093179092556000848152600284019091522061147a848261411e565b50817f38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220846040516114ab9190613da6565b60405180910390a2505050565b6000806114c783850185614238565b905060006114d88260000151610eb9565b9050805160200361155d5773ffffffffffffffffffffffffffffffffffffffff611501826142c5565b111561153b57806040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b60006020820151905061155381888560200151611a56565b935050505061076c565b80516040036115d8576000808280602001905181019061157d9190614307565b915091506000846020015180602001905181019061159b9190614370565b90506115cc896040516020016115b391815260200190565b6040516020818303038152906040526000838686611b68565b9550505050505061076c565b806040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b6000808473ffffffffffffffffffffffffffffffffffffffff1684846040516116359190613e55565b60006040518083038185875af1925050503d8060008114611672576040519150601f19603f3d011682016040523d82523d6000602084013e611677565b606091505b509150915081610c9857805160208201fd5b610705611341565b600061169c82611f72565b805190602001209050919050565b7f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00805460005b835181101561185b578381815181106116eb576116eb613eeb565b60200260200101515160201415801561171f575083818151811061171157611711613eeb565b602002602001015151604014155b156117715783818151811061173657611736613eeb565b60200260200101516040517f4eeab7220000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b83818151811061178357611783613eeb565b60200260200101515160201480156117d2575073ffffffffffffffffffffffffffffffffffffffff80168482815181106117bf576117bf613eeb565b60200260200101516117d0906142c5565b115b15611824578381815181106117e9576117e9613eeb565b60200260200101516040517fbff1ac650000000000000000000000000000000000000000000000000000000081526004016108da9190613da6565b61185384828151811061183957611839613eeb565b6020026020010151838061184c90613eb3565b945061138d565b6001016116d0565b50905550565b600061186c84610eb9565b905080516000036118ac576040517f68188e7a000000000000000000000000000000000000000000000000000000008152600481018590526024016108da565b82826040516118bc92919061442c565b604051809103902081805190602001201461190b57838383836040517f781f2e390000000000000000000000000000000000000000000000000000000081526004016108da9493929190614485565b6040517f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00907f97e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f039061195f908690869061442c565b908152604080516020928190038301902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905560008781526002840190925281206119ad91613843565b6001810180549060006119bf83613eb3565b9190505550847fcf95bbfe6f870f8cc40482dc3dccdafd268f0e9ce0a4f24ea1bea9be64e505ff85856040516119f69291906144bc565b60405180910390a25050505050565b6000611a0f611255565b611a1883612052565b6040517f1901000000000000000000000000000000000000000000000000000000000000602082015260228101929092526042820152606201610cd4565b73ffffffffffffffffffffffffffffffffffffffff909216916000831561076c576040518360005260208301516040526040835103611ad3576040830151601b8160ff1c016020528060011b60011c60605250602060016080600060015afa805186183d1517611ad15750600060605260405250600161076c565b505b6041835103611b1957606083015160001a6020526040830151606052602060016080600060015afa805186183d1517611b175750600060605260405250600161076c565b505b600060605280604052631626ba7e60e01b808252846004830152602482016040815284516020018060448501828860045afa505060208160443d01858a5afa9051909114169150509392505050565b6000611b9560027fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516144d0565b8460a001511115611ba857506000611f69565b6060840151600090611bcb90611bbf81601561450b565b6020880151919061208d565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e634818051906020012014611c05576000915050611f69565b6000611c1088612111565b604051602001611c20919061451e565b60405160208183030381529060405290506000611c58876040015183518960400151611c4c919061450b565b60208a0151919061208d565b90508180519060200120818051906020012014611c7b5760009350505050611f69565b865180517f01000000000000000000000000000000000000000000000000000000000000009182916020908110611cb457611cb4613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614611ced5760009350505050611f69565b878015611d595750865180517f04000000000000000000000000000000000000000000000000000000000000009182916020908110611d2e57611d2e613eeb565b0160200151167fff000000000000000000000000000000000000000000000000000000000000001614155b15611d6a5760009350505050611f69565b600060028860200151604051611d809190613e55565b602060405180830381855afa158015611d9d573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611dc0919061458a565b905060006002896000015183604051602001611ddd9291906145a3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611e1591613e55565b602060405180830381855afa158015611e32573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190611e55919061458a565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c001604051602081830303815290604052905060008061010073ffffffffffffffffffffffffffffffffffffffff1683604051611ec89190613e55565b600060405180830381855afa9150503d8060008114611f03576040519150601f19603f3d011682016040523d82523d6000602084013e611f08565b606091505b50805191935091501515828015611f1c5750805b15611f485781806020019051810190611f35919061458a565b6001149950505050505050505050611f69565b611f5d858e608001518f60a001518f8f612137565b99505050505050505050505b95945050505050565b6060813560208301356000611f92611f8d6040870187613f1a565b612286565b90506000611fa6611f8d6060880188613f1a565b9050608086013560a087013560c088013560e08901356101008a01356000611fd5611f8d6101208e018e613f1a565b6040805173ffffffffffffffffffffffffffffffffffffffff9c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b604080517f9b493d222105fee7df163ab5d57f0bf1ffd2da04dd5fafbe10b54c41c1adc6576020820152908101829052600090606001610cd4565b6060835182811161209c578092505b8381116120a7578093505b508183101561076c5750604051828203808252938301937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f820181165b86810151848201528101806120e65750600083830160200152603f9091011681016040529392505050565b606061062d826040518060600160405280604081526020016145dd604091396000612299565b600084158061216657507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518510155b8061216f575083155b8061219a57507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518410155b156121a757506000611f69565b6121b18383612419565b6121bd57506000611f69565b60006121c885612592565b905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551828909905060007fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325518389099050600061222887878585612616565b90507fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325516122758a7fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551613ea0565b8208159a9950505050505050505050565b6000604051828085833790209392505050565b606083516000036122b9575060408051602081019091526000815261076c565b6000826122ea576003855160046122d091906145c5565b6122db90600261450b565b6122e591906144d0565b61230f565b6003855160026122fa919061450b565b61230491906144d0565b61230f9060046145c5565b905060008167ffffffffffffffff81111561232c5761232c613988565b6040519080825280601f01601f191660200182016040528015612356576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156123cc576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f8116870151865350600185019450612371565b90525050851561240d576003885106600181146123f057600281146124035761240b565b603d6001830353603d600283035361240b565b603d60018303535b505b50909695505050505050565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8310158061246a57507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8210155b8061247c57508215801561247c575081155b156124895750600061062d565b60007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409905060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc87097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09090890507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff7f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f60808201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255160a082015260208160c0836005600019fa61260f57600080fd5b5192915050565b600080808060ff81808815801561262b575087155b1561263f576000965050505050505061312c565b61268b7f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d613134565b90925090508115801561269c575080155b1561270d577fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551887fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551038a08985060009750881580156126f9575087155b1561270d576000965050505050505061312c565b600189841c16600189851c1660011b015b806127405760018403935060018a851c1660018a861c1660011b01905061271e565b50600189841c16600189851c1660011b019550600186036127a2577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b600286036127b1578a96508993505b600386036127c0578196508093505b60018303925060019550600194505b827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1115613082577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff846002097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8182097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818a097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82840992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8d087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e08096003097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff89850998507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a840999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838409089a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08820992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff837fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a870908975060018d881c1660018d891c1660011b01905080612aab57877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03975050505050613077565b60018103612afa577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103612b09578e93508d92505b60038103612b18578593508492505b89612b3157509198506001975087965094506130779050565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b8609087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d880908935080612e705783612e70577fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd0994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85860993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848d0992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84860994507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808c7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038e087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8d8f080990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8160030991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a860999507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8b85099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80847fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848509089b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808d7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038508830993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808a8709850898505050505050613077565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8483097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838d099b507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818c099a507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff838e097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff847fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff878809080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80838d097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff03860809089a50505050809a50505050505b6001830392506127cf565b60405186606082015260208152602080820152602060408201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa6130fd57600080fd5b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff815189099750505050505050505b949350505050565b60008080808661314b5785859350935050506131b9565b8461315d5787879350935050506131b9565b858814801561316b57508487145b1561318c5761317d88886001806131c2565b929a50909850925090506131a6565b61319b88886001808a8a61344c565b929a50909850925090505b6131b288888484613711565b9350935050505b94509492505050565b6000806000807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8760020993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84850991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82890990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86830991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff807fffffffff00000001000000000000000000000000ffffffffffffffffffffffff888b087fffffffff00000001000000000000000000000000ffffffffffffffffffffffff897fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038c080960030995507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80827fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8889090893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038308870997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff85840990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff808885097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff0389089250945094509450949050565b6000806000808860000361346b57508492508391506001905080613704565b7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff9889039889818988090894507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a7fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8a89090895507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86870993507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff86850992507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff84890991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff83880990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff848b0997507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80897fffffffff00000001000000000000000000000000fffffffffffffffffffffffd097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff857fffffffff00000001000000000000000000000000ffffffffffffffffffffffff037fffffffff00000001000000000000000000000000ffffffffffffffffffffffff898a09080893507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff80848b097fffffffff00000001000000000000000000000000ffffffffffffffffffffffff877fffffffff00000001000000000000000000000000ffffffffffffffffffffffff887fffffffff00000001000000000000000000000000ffffffffffffffffffffffff038d08090892505b9650965096509692505050565b600080600061371f846137c6565b90507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff818709915060007fffffffff00000001000000000000000000000000ffffffffffffffffffffffff82870990507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff81820991507fffffffff00000001000000000000000000000000ffffffffffffffffffffffff8289099350505094509492505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000001000000000000000000000000fffffffffffffffffffffffd60808201527fffffffff00000001000000000000000000000000ffffffffffffffffffffffff60a082015260208160c0836005600019fa61260f57600080fd5b50805461384f90614081565b6000825580601f1061385f575050565b601f01602090049060005260206000209081019061070591905b80821115610d4d5760008155600101613879565b600080604083850312156138a057600080fd5b50508035926020909101359150565b803573ffffffffffffffffffffffffffffffffffffffff811681146138d357600080fd5b919050565b6000602082840312156138ea57600080fd5b61076c826138af565b60008083601f84011261390557600080fd5b50813567ffffffffffffffff81111561391d57600080fd5b60208301915083602082850101111561393557600080fd5b9250929050565b60008060006040848603121561395157600080fd5b83359250602084013567ffffffffffffffff81111561396f57600080fd5b61397b868287016138f3565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff811182821017156139da576139da613988565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613a2757613a27613988565b604052919050565b600067ffffffffffffffff821115613a4957613a49613988565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613a8657600080fd5b8135613a99613a9482613a2f565b6139e0565b818152846020838601011115613aae57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208284031215613add57600080fd5b813567ffffffffffffffff811115613af457600080fd5b61312c84828501613a75565b60008083601f840112613b1257600080fd5b50813567ffffffffffffffff811115613b2a57600080fd5b6020830191508360208260051b850101111561393557600080fd5b60008060208385031215613b5857600080fd5b823567ffffffffffffffff811115613b6f57600080fd5b613b7b85828601613b00565b90969095509350505050565b60006101608284031215613b9a57600080fd5b50919050565b600080600060608486031215613bb557600080fd5b833567ffffffffffffffff811115613bcc57600080fd5b613bd886828701613b87565b9660208601359650604090950135949350505050565b600080600060408486031215613c0357600080fd5b613c0c846138af565b9250602084013567ffffffffffffffff81111561396f57600080fd5b600060208284031215613c3a57600080fd5b813567ffffffffffffffff811115613c5157600080fd5b61312c84828501613b87565b60005b83811015613c78578181015183820152602001613c60565b50506000910152565b60008151808452613c99816020860160208601613c5d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e06020840152613d0860e084018a613c81565b8381036040850152613d1a818a613c81565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b81811015613d7b57835183529284019291840191600101613d5f565b50909c9b505050505050505050505050565b600060208284031215613d9f57600080fd5b5035919050565b60208152600061076c6020830184613c81565b600060208284031215613dcb57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461076c57600080fd5b60008060008060608587031215613e1157600080fd5b613e1a856138af565b935060208501359250604085013567ffffffffffffffff811115613e3d57600080fd5b613e49878288016138f3565b95989497509550505050565b60008251613e67818460208701613c5d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561062d5761062d613e71565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ee457613ee4613e71565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613f4f57600080fd5b83018035915067ffffffffffffffff821115613f6a57600080fd5b60200191503681900382131561393557600080fd5b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015613fbf5780818660040360031b1b83161692505b505092915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112613e6757600080fd5b600067ffffffffffffffff8084111561401657614016613988565b8360051b6020614028602083016139e0565b8681529185019160208101903684111561404157600080fd5b865b848110156140755780358681111561405b5760008081fd5b61406736828b01613a75565b845250918301918301614043565b50979650505050505050565b600181811c9082168061409557607f821691505b602082108103613b9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f821115610930576000816000526020600020601f850160051c810160208610156140f75750805b601f850160051c820191505b8181101561411657828155600101614103565b505050505050565b815167ffffffffffffffff81111561413857614138613988565b61414c816141468454614081565b846140ce565b602080601f83116001811461419f57600084156141695750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555614116565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156141ec578886015182559484019460019091019084016141cd565b508582101561422857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121561424a57600080fd5b813567ffffffffffffffff8082111561426257600080fd5b908301906040828603121561427657600080fd5b60405160408101818110838211171561429157614291613988565b604052823581526020830135828111156142aa57600080fd5b6142b687828601613a75565b60208301525095945050505050565b80516020808301519190811015613b9a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b6000806040838503121561431a57600080fd5b505080516020909101519092909150565b600082601f83011261433c57600080fd5b815161434a613a9482613a2f565b81815284602083860101111561435f57600080fd5b61312c826020830160208701613c5d565b60006020828403121561438257600080fd5b815167ffffffffffffffff8082111561439a57600080fd5b9083019060c082860312156143ae57600080fd5b6143b66139b7565b8251828111156143c557600080fd5b6143d18782860161432b565b8252506020830151828111156143e657600080fd5b6143f28782860161432b565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b8183823760009101908152919050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b84815260606020820152600061449f60608301858761443c565b82810360408401526144b18185613c81565b979650505050505050565b60208152600061312c60208301848661443c565b600082614506577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561062d5761062d613e71565b7f226368616c6c656e6765223a220000000000000000000000000000000000000081526000825161455681600d850160208701613c5d565b7f2200000000000000000000000000000000000000000000000000000000000000600d939091019283015250600e01919050565b60006020828403121561459c57600080fd5b5051919050565b600083516145b5818460208801613c5d565b9190910191825250602001919050565b808202811582820484141761062d5761062d613e7156fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212208c2ea73863e242a1e00858d0d525af430fe3045920a71b632ca3e728ddc8817d64736f6c6343000817003397e2c6aad4ce5d562ebfaa00db6b9e0fb66ea5d8162ed5b243f51a2e03086f00" - } - ], - "isFixedGasLimit": false - }, - { - "hash": "0xbf08fd6420d69498e84d6b1e5eb4cd07401e0563feb1c5307528197d897e7f18", - "transactionType": "CALL", - "contractName": null, - "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "function": null, - "arguments": null, - "transaction": { - "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", - "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "gas": "0x8bda5", - "value": "0x0", - "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", - "nonce": "0x1", - "chainId": "0xa86a" - }, - "additionalContracts": [ - { - "transactionType": "CREATE2", - "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", - "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" - } - ], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x4f8ff0", - "logs": [ - { - "address": "0x000100abaad02f1cfc8bbe32bd5a564817339e72", - "topics": [ - "0x38109edc26e166b5579352ce56a50813177eb25208fd90d61f2f378386220220", - "0x0000000000000000000000000000000000000000000000000000000000000000" - ], - "data": "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0xaebde5ca206ee3e658eb2e45e28a4ba5aacc78be192693627c7e5ed09f731ca0", - "blockNumber": "0x2b18a02", - "transactionHash": "0x0b768d6501ce09908cb4eff33c4dba6c141b071109b7870aa4f669962ce71725", - "transactionIndex": "0x2", - "logIndex": "0x6", - "removed": false - } - ], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000008000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000080000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0x0b768d6501ce09908cb4eff33c4dba6c141b071109b7870aa4f669962ce71725", - "transactionIndex": "0x2", - "blockHash": "0xaebde5ca206ee3e658eb2e45e28a4ba5aacc78be192693627c7e5ed09f731ca0", - "blockNumber": "0x2b18a02", - "gasUsed": "0x3d2e82", - "effectiveGasPrice": "0x63a6c9b80", - "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", - "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "contractAddress": null - }, - { - "status": "0x1", - "cumulativeGasUsed": "0x87db0", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x2", - "transactionHash": "0xbf08fd6420d69498e84d6b1e5eb4cd07401e0563feb1c5307528197d897e7f18", - "transactionIndex": "0x3", - "blockHash": "0x4fcd306c9320d7cef7404d281aa02bb8aa3e5e3cb4e338d370c305d88b33ba63", - "blockNumber": "0x2b18a03", - "gasUsed": "0x65478", - "effectiveGasPrice": "0x63a6c9b80", - "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", - "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "contractAddress": null - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1715187553, - "chain": 43114, - "commit": "39d5c7c" -} \ No newline at end of file diff --git a/broadcast/DeployFactory.s.sol/56/run-latest.json b/broadcast/DeployFactory.s.sol/56/run-latest.json deleted file mode 100644 index 44e8e89..0000000 --- a/broadcast/DeployFactory.s.sol/56/run-latest.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xaf7a0464332cd9e89bdbc3593f2fd7294633d71bcaef9327efdb80abff55acd8", - "transactionType": "CALL", - "contractName": null, - "contractAddress": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "function": null, - "arguments": null, - "transaction": { - "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", - "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "gas": "0x8bda5", - "value": "0x0", - "input": "0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72", - "nonce": "0x1", - "chainId": "0x38" - }, - "additionalContracts": [ - { - "transactionType": "CREATE2", - "address": "0x0ba5ed0c6aa8c49038f819e587e2633c4a9f428a", - "initCode": "0x60a060405260405161071638038061071683398101604081905261002291610033565b6001600160a01b0316608052610063565b60006020828403121561004557600080fd5b81516001600160a01b038116811461005c57600080fd5b9392505050565b6080516106846100926000396000818160b301528181610139015281816101dc015261027901526106846000f3fe60806040526004361061003f5760003560e01c8063250b1b41146100445780633ffba36f1461008e5780635c60da1b146100a1578063db4c545e146100d5575b600080fd5b34801561005057600080fd5b5061006461005f366004610480565b61017f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b61006461009c366004610480565b610235565b3480156100ad57600080fd5b506100647f000000000000000000000000000000000000000000000000000000000000000081565b3480156100e157600080fd5b50604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600960209081527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212093839052600090915291815201610085565b600061022d61021c604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207683526160096020527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f60212091909252600090915290565b610227868686610344565b3061037a565b949350505050565b6000828103610270576040517f3c776be100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806102a8347f00000000000000000000000000000000000000000000000000000000000000006102a3898989610344565b61039c565b915091508092508161033b576040517f6f2de70e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636f2de70e906103089089908990600401610616565b600060405180830381600087803b15801561032257600080fd5b505af1158015610336573d6000803e3d6000fd5b505050505b50509392505050565b600083838360405160200161035b9392919061062a565b6040516020818303038152906040528051906020012090509392505050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6104485783605f602188f59150816104435763301164256000526004601cfd5b61046e565b60019250851561046e5760003860003889865af161046e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b60008060006040848603121561049557600080fd5b833567ffffffffffffffff808211156104ad57600080fd5b818601915086601f8301126104c157600080fd5b8135818111156104d057600080fd5b8760208260051b85010111156104e557600080fd5b6020928301989097509590910135949350505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000838385526020808601955060208560051b8301018460005b87811015610609577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe085840301895281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18836030181126105bf57600080fd5b8701848101903567ffffffffffffffff8111156105db57600080fd5b8036038213156105ea57600080fd5b6105f58582846104fb565b9a86019a945050509083019060010161055e565b5090979650505050505050565b60208152600061022d602083018486610544565b60408152600061063e604083018587610544565b905082602083015294935050505056fea2646970667358221220e7c6d439c70f2eaafecf93e778d782e7cba05d58eaf254e2d2be4dd98bc1b11464736f6c63430008170033000000000000000000000000000100abaad02f1cfc8bbe32bd5a564817339e72" - } - ], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "status": "0x1", - "cumulativeGasUsed": "0x51a3e5", - "logs": [], - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "type": "0x0", - "transactionHash": "0xaf7a0464332cd9e89bdbc3593f2fd7294633d71bcaef9327efdb80abff55acd8", - "transactionIndex": "0x12", - "blockHash": "0xfffa6159f8ac094ff59c0dd6ede9a36dfd682440c96b4377afaaec02960f2bc9", - "blockNumber": "0x24c285b", - "gasUsed": "0x65478", - "effectiveGasPrice": "0x3b9aca00", - "from": "0xfd896bf5eba7e1b9843b91ef6182de16b547273b", - "to": "0x914d7fec6aac8cd542e72bca78b30650d45643d7", - "contractAddress": null - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1715180342, - "chain": 56, - "commit": "39d5c7c" -} \ No newline at end of file diff --git a/script/DeployFactory.s.sol b/script/DeployFactory.s.sol index 2cb9963..63a5b1e 100644 --- a/script/DeployFactory.s.sol +++ b/script/DeployFactory.s.sol @@ -20,7 +20,7 @@ contract DeployFactoryScript is Script { assert(implementation == EXPECTED_IMPLEMENTATION); address factory = SafeSingletonDeployer.broadcastDeploy({ creationCode: type(CoinbaseSmartWalletFactory).creationCode, - args: abi.encode(EXPECTED_IMPLEMENTATION), + args: abi.encode(implementation), salt: 0x278d06dab87f67bb2d83470a70c8975a2c99872f290058fb43bcc47da5f0390c }); console2.log("factory", factory);

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