@imtbl/sdk 0.16.0-alpha.1 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -17,7 +17,7 @@ import { Seaport as Seaport$1 } from '@opensea/seaport-js';
17
17
  import { parseUnits } from '@ethersproject/units';
18
18
  import { BigNumber as BigNumber$2 } from '@ethersproject/bignumber';
19
19
  import detectEthereumProvider from '@metamask/detect-provider';
20
- import { TradeType, Token, Percent, CurrencyAmount } from '@uniswap/sdk-core';
20
+ import { TradeType, Token, CurrencyAmount, Percent } from '@uniswap/sdk-core';
21
21
  import assert from 'assert';
22
22
  import { FeeAmount, Route, SwapQuoter, Pool, Trade, toHex as toHex$1, encodeRouteToPath } from '@uniswap/v3-sdk';
23
23
  import { keccak256 as keccak256$1 } from '@ethersproject/solidity';
@@ -718,6 +718,47 @@ const CollectionsApiAxiosParamCreator = function (configuration) {
718
718
  options: localVarRequestOptions,
719
719
  };
720
720
  },
721
+ /**
722
+ * List collections by NFT owner account address
723
+ * @summary List collections by NFT owner
724
+ * @param {string} accountAddress Account address
725
+ * @param {string} chainName The name of chain
726
+ * @param {string} [pageCursor] Encoded page cursor to retrieve previous or next page. Use the value returned in the response.
727
+ * @param {number} [pageSize] Maximum number of items to return
728
+ * @param {*} [options] Override http request option.
729
+ * @throws {RequiredError}
730
+ */
731
+ listCollectionsByNFTOwner: async (accountAddress, chainName, pageCursor, pageSize, options = {}) => {
732
+ // verify required parameter 'accountAddress' is not null or undefined
733
+ assertParamExists$1('listCollectionsByNFTOwner', 'accountAddress', accountAddress);
734
+ // verify required parameter 'chainName' is not null or undefined
735
+ assertParamExists$1('listCollectionsByNFTOwner', 'chainName', chainName);
736
+ const localVarPath = `/v1/chains/{chain_name}/accounts/{account_address}/collections`
737
+ .replace(`{${"account_address"}}`, encodeURIComponent(String(accountAddress)))
738
+ .replace(`{${"chain_name"}}`, encodeURIComponent(String(chainName)));
739
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
740
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL$1);
741
+ let baseOptions;
742
+ if (configuration) {
743
+ baseOptions = configuration.baseOptions;
744
+ }
745
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };
746
+ const localVarHeaderParameter = {};
747
+ const localVarQueryParameter = {};
748
+ if (pageCursor !== undefined) {
749
+ localVarQueryParameter['page_cursor'] = pageCursor;
750
+ }
751
+ if (pageSize !== undefined) {
752
+ localVarQueryParameter['page_size'] = pageSize;
753
+ }
754
+ setSearchParams$1(localVarUrlObj, localVarQueryParameter);
755
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
756
+ localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
757
+ return {
758
+ url: toPathString$1(localVarUrlObj),
759
+ options: localVarRequestOptions,
760
+ };
761
+ },
721
762
  };
722
763
  };
723
764
  /**
@@ -752,6 +793,20 @@ const CollectionsApiFp = function (configuration) {
752
793
  const localVarAxiosArgs = await localVarAxiosParamCreator.listCollections(chainName, pageCursor, pageSize, options);
753
794
  return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
754
795
  },
796
+ /**
797
+ * List collections by NFT owner account address
798
+ * @summary List collections by NFT owner
799
+ * @param {string} accountAddress Account address
800
+ * @param {string} chainName The name of chain
801
+ * @param {string} [pageCursor] Encoded page cursor to retrieve previous or next page. Use the value returned in the response.
802
+ * @param {number} [pageSize] Maximum number of items to return
803
+ * @param {*} [options] Override http request option.
804
+ * @throws {RequiredError}
805
+ */
806
+ async listCollectionsByNFTOwner(accountAddress, chainName, pageCursor, pageSize, options) {
807
+ const localVarAxiosArgs = await localVarAxiosParamCreator.listCollectionsByNFTOwner(accountAddress, chainName, pageCursor, pageSize, options);
808
+ return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
809
+ },
755
810
  };
756
811
  };
757
812
  /**
@@ -784,6 +839,19 @@ const CollectionsApiFactory = function (configuration, basePath, axios) {
784
839
  listCollections(chainName, pageCursor, pageSize, options) {
785
840
  return localVarFp.listCollections(chainName, pageCursor, pageSize, options).then((request) => request(axios, basePath));
786
841
  },
842
+ /**
843
+ * List collections by NFT owner account address
844
+ * @summary List collections by NFT owner
845
+ * @param {string} accountAddress Account address
846
+ * @param {string} chainName The name of chain
847
+ * @param {string} [pageCursor] Encoded page cursor to retrieve previous or next page. Use the value returned in the response.
848
+ * @param {number} [pageSize] Maximum number of items to return
849
+ * @param {*} [options] Override http request option.
850
+ * @throws {RequiredError}
851
+ */
852
+ listCollectionsByNFTOwner(accountAddress, chainName, pageCursor, pageSize, options) {
853
+ return localVarFp.listCollectionsByNFTOwner(accountAddress, chainName, pageCursor, pageSize, options).then((request) => request(axios, basePath));
854
+ },
787
855
  };
788
856
  };
789
857
  /**
@@ -815,6 +883,17 @@ class CollectionsApi extends BaseAPI$1 {
815
883
  listCollections(requestParameters, options) {
816
884
  return CollectionsApiFp(this.configuration).listCollections(requestParameters.chainName, requestParameters.pageCursor, requestParameters.pageSize, options).then((request) => request(this.axios, this.basePath));
817
885
  }
886
+ /**
887
+ * List collections by NFT owner account address
888
+ * @summary List collections by NFT owner
889
+ * @param {CollectionsApiListCollectionsByNFTOwnerRequest} requestParameters Request parameters.
890
+ * @param {*} [options] Override http request option.
891
+ * @throws {RequiredError}
892
+ * @memberof CollectionsApi
893
+ */
894
+ listCollectionsByNFTOwner(requestParameters, options) {
895
+ return CollectionsApiFp(this.configuration).listCollectionsByNFTOwner(requestParameters.accountAddress, requestParameters.chainName, requestParameters.pageCursor, requestParameters.pageSize, options).then((request) => request(this.axios, this.basePath));
896
+ }
818
897
  }
819
898
 
820
899
  /* tslint:disable */
@@ -1453,6 +1532,7 @@ const OrdersApiAxiosParamCreator = function (configuration) {
1453
1532
  * List all trades
1454
1533
  * @summary List all trades
1455
1534
  * @param {string} chainName
1535
+ * @param {string} [accountAddress]
1456
1536
  * @param {number} [pageSize] Maximum number of trades to return per page
1457
1537
  * @param {'created_at'} [sortBy] Trade field to sort by
1458
1538
  * @param {'asc' | 'desc'} [sortDirection] Ascending or descending direction for sort
@@ -1460,7 +1540,7 @@ const OrdersApiAxiosParamCreator = function (configuration) {
1460
1540
  * @param {*} [options] Override http request option.
1461
1541
  * @throws {RequiredError}
1462
1542
  */
1463
- listTrades: async (chainName, pageSize, sortBy, sortDirection, pageCursor, options = {}) => {
1543
+ listTrades: async (chainName, accountAddress, pageSize, sortBy, sortDirection, pageCursor, options = {}) => {
1464
1544
  // verify required parameter 'chainName' is not null or undefined
1465
1545
  assertParamExists$1('listTrades', 'chainName', chainName);
1466
1546
  const localVarPath = `/v1/chains/{chain_name}/trades`
@@ -1474,6 +1554,9 @@ const OrdersApiAxiosParamCreator = function (configuration) {
1474
1554
  const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };
1475
1555
  const localVarHeaderParameter = {};
1476
1556
  const localVarQueryParameter = {};
1557
+ if (accountAddress !== undefined) {
1558
+ localVarQueryParameter['account_address'] = accountAddress;
1559
+ }
1477
1560
  if (pageSize !== undefined) {
1478
1561
  localVarQueryParameter['page_size'] = pageSize;
1479
1562
  }
@@ -1574,6 +1657,7 @@ const OrdersApiFp = function (configuration) {
1574
1657
  * List all trades
1575
1658
  * @summary List all trades
1576
1659
  * @param {string} chainName
1660
+ * @param {string} [accountAddress]
1577
1661
  * @param {number} [pageSize] Maximum number of trades to return per page
1578
1662
  * @param {'created_at'} [sortBy] Trade field to sort by
1579
1663
  * @param {'asc' | 'desc'} [sortDirection] Ascending or descending direction for sort
@@ -1581,8 +1665,8 @@ const OrdersApiFp = function (configuration) {
1581
1665
  * @param {*} [options] Override http request option.
1582
1666
  * @throws {RequiredError}
1583
1667
  */
1584
- async listTrades(chainName, pageSize, sortBy, sortDirection, pageCursor, options) {
1585
- const localVarAxiosArgs = await localVarAxiosParamCreator.listTrades(chainName, pageSize, sortBy, sortDirection, pageCursor, options);
1668
+ async listTrades(chainName, accountAddress, pageSize, sortBy, sortDirection, pageCursor, options) {
1669
+ const localVarAxiosArgs = await localVarAxiosParamCreator.listTrades(chainName, accountAddress, pageSize, sortBy, sortDirection, pageCursor, options);
1586
1670
  return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1587
1671
  },
1588
1672
  };
@@ -1660,6 +1744,7 @@ const OrdersApiFactory = function (configuration, basePath, axios) {
1660
1744
  * List all trades
1661
1745
  * @summary List all trades
1662
1746
  * @param {string} chainName
1747
+ * @param {string} [accountAddress]
1663
1748
  * @param {number} [pageSize] Maximum number of trades to return per page
1664
1749
  * @param {'created_at'} [sortBy] Trade field to sort by
1665
1750
  * @param {'asc' | 'desc'} [sortDirection] Ascending or descending direction for sort
@@ -1667,8 +1752,8 @@ const OrdersApiFactory = function (configuration, basePath, axios) {
1667
1752
  * @param {*} [options] Override http request option.
1668
1753
  * @throws {RequiredError}
1669
1754
  */
1670
- listTrades(chainName, pageSize, sortBy, sortDirection, pageCursor, options) {
1671
- return localVarFp.listTrades(chainName, pageSize, sortBy, sortDirection, pageCursor, options).then((request) => request(axios, basePath));
1755
+ listTrades(chainName, accountAddress, pageSize, sortBy, sortDirection, pageCursor, options) {
1756
+ return localVarFp.listTrades(chainName, accountAddress, pageSize, sortBy, sortDirection, pageCursor, options).then((request) => request(axios, basePath));
1672
1757
  },
1673
1758
  };
1674
1759
  };
@@ -1743,7 +1828,7 @@ class OrdersApi extends BaseAPI$1 {
1743
1828
  * @memberof OrdersApi
1744
1829
  */
1745
1830
  listTrades(requestParameters, options) {
1746
- return OrdersApiFp(this.configuration).listTrades(requestParameters.chainName, requestParameters.pageSize, requestParameters.sortBy, requestParameters.sortDirection, requestParameters.pageCursor, options).then((request) => request(this.axios, this.basePath));
1831
+ return OrdersApiFp(this.configuration).listTrades(requestParameters.chainName, requestParameters.accountAddress, requestParameters.pageSize, requestParameters.sortBy, requestParameters.sortDirection, requestParameters.pageCursor, options).then((request) => request(this.axios, this.basePath));
1747
1832
  }
1748
1833
  }
1749
1834
 
@@ -2617,7 +2702,7 @@ class MultiRollupApiClients {
2617
2702
  }
2618
2703
 
2619
2704
  // eslint-disable-next-line @typescript-eslint/naming-convention
2620
- const defaultHeaders$1 = { 'x-sdk-version': 'ts-immutable-sdk-0.16.0-alpha.1' };
2705
+ const defaultHeaders$1 = { 'x-sdk-version': 'ts-immutable-sdk-0.0.0' };
2621
2706
  const createConfig = ({ basePath, headers, }) => {
2622
2707
  if (!basePath.trim()) {
2623
2708
  throw Error('basePath can not be empty');
@@ -2677,7 +2762,7 @@ class APIError extends Error {
2677
2762
 
2678
2763
  /* eslint-disable implicit-arrow-linebreak */
2679
2764
  const defaultHeaders = {
2680
- sdkVersion: 'ts-immutable-sdk-multi-rollup-api-client-0.16.0-alpha.1',
2765
+ sdkVersion: 'ts-immutable-sdk-multi-rollup-api-client-0.0.0',
2681
2766
  };
2682
2767
  /**
2683
2768
  * createAPIConfiguration to create a custom Configuration
@@ -2834,6 +2919,20 @@ class BlockchainData {
2834
2919
  throw formatError(err);
2835
2920
  });
2836
2921
  }
2922
+ /**
2923
+ * List collections by NFT owner
2924
+ * @param request - the request object containing the parameters to be provided in the API request
2925
+ * @returns a promise that resolves with a list of collections
2926
+ * @throws {@link index.APIError}
2927
+ */
2928
+ async listCollectionsByNFTOwner(request) {
2929
+ return await this.collections
2930
+ .listCollectionsByNFTOwner(request)
2931
+ .then((res) => res.data)
2932
+ .catch((err) => {
2933
+ throw formatError(err);
2934
+ });
2935
+ }
2837
2936
  /**
2838
2937
  * Get collection by contract address
2839
2938
  * @param request - the request object containing the parameters to be provided in the API request
@@ -2949,7 +3048,7 @@ const createImmutableXConfiguration = ({ basePath, chainID, coreContractAddress,
2949
3048
  chainID,
2950
3049
  coreContractAddress,
2951
3050
  registrationContractAddress,
2952
- sdkVersion: 'ts-immutable-sdk-0.16.0-alpha.1',
3051
+ sdkVersion: 'ts-immutable-sdk-0.0.0',
2953
3052
  });
2954
3053
  /**
2955
3054
  * Sets `sdkVersion` at the time of build
@@ -24094,38 +24193,6 @@ class AlreadyApprovedError extends ExchangeError {
24094
24193
  }
24095
24194
  }
24096
24195
 
24097
- /**
24098
- * Determines whether or not the chain supports EIP-1559 by checking for the existence
24099
- * of {@link FeeData.maxFeePerGas} and {@link FeeData.maxPriorityFeePerGas}
24100
- *
24101
- * @param {FeeData} fee - The fee data for the chain
24102
- */
24103
- const doesChainSupportEIP1559 = (fee) => {
24104
- const supportsEIP1559 = !!fee.maxFeePerGas && !!fee.maxPriorityFeePerGas;
24105
- return supportsEIP1559;
24106
- };
24107
- /**
24108
- * Fetch the current gas price estimate. Supports both EIP-1559 and non-EIP1559 chains
24109
- * @param {JsonRpcProvider} provider - The JSON RPC provider used to fetch fee data
24110
- * @returns {BigNumber | null} - The gas price in the smallest denomination of the chain's currency,
24111
- * or null if no gas price is available
24112
- */
24113
- const fetchGasPrice = async (provider) => {
24114
- const feeData = await provider.getFeeData().catch(() => null);
24115
- if (!feeData) {
24116
- return null;
24117
- }
24118
- return doesChainSupportEIP1559(feeData) ? feeData.maxFeePerGas.add(feeData.maxPriorityFeePerGas) : feeData.gasPrice;
24119
- };
24120
- /**
24121
- * Calculate the gas fee from the gas price and gas units used for the transaction
24122
- *
24123
- * @param {BigNumber} gasPriceInWei - The price of gas in wei
24124
- * @param {BigNumber} gasUsed - The total gas units that will be used for the transaction
24125
- * @returns - The cost of the transaction in the gas token's smallest denomination (e.g. WEI)
24126
- */
24127
- const calculateGasFee = (gasPriceInWei, gasUsed) => gasUsed.mul(gasPriceInWei);
24128
-
24129
24196
  /* Autogenerated file. Do not edit manually. */
24130
24197
  /* tslint:disable */
24131
24198
  /* eslint-disable */
@@ -24361,179 +24428,6 @@ let ERC20__factory$1 = class ERC20__factory {
24361
24428
  }
24362
24429
  };
24363
24430
 
24364
- /**
24365
- * Get the amount of an ERC20 token that needs to be approved by
24366
- * checking the existing allowance for the spender
24367
- *
24368
- * @param provider - The provider to use for the call
24369
- * @param ownerAddress - The address of the owner of the token
24370
- * @param tokenAmount - The amount of the token to approve
24371
- * @param spenderAddress - The address of the spender
24372
- * @returns - The amount of the token that needs to be approved
24373
- */
24374
- const getERC20AmountToApprove = async (provider, ownerAddress, tokenAddress, tokenAmount, spenderAddress) => {
24375
- // create an instance of the ERC20 token contract
24376
- const erc20Contract = ERC20__factory$1.connect(tokenAddress, provider);
24377
- // get the allowance for the token spender
24378
- // minimum is 0 - no allowance
24379
- let allowance;
24380
- try {
24381
- allowance = await erc20Contract.allowance(ownerAddress, spenderAddress);
24382
- }
24383
- catch (e) {
24384
- const message = e instanceof Error ? e.message : 'Unknown Error';
24385
- throw new ApproveError(`failed to get allowance: ${message}`);
24386
- }
24387
- // get the amount that needs to be approved
24388
- const requiredAmount = BigNumber$2.from(tokenAmount).sub(allowance);
24389
- if (requiredAmount.isNegative() || requiredAmount.isZero()) {
24390
- throw new AlreadyApprovedError(tokenAmount.toString(), tokenAddress, spenderAddress);
24391
- }
24392
- return requiredAmount;
24393
- };
24394
- /**
24395
- * Get an unsigned ERC20 approve transaction
24396
- *
24397
- * @param ownerAddress - The address of the owner of the token
24398
- * @param tokenAmount - The amount of the token to approve
24399
- * @param spenderAddress - The address of the spender
24400
- * @returns - The unsigned ERC20 approve transaction
24401
- */
24402
- const getUnsignedERC20ApproveTransaction = (ownerAddress, tokenAddress, tokenAmount, spenderAddress) => {
24403
- if (ownerAddress === spenderAddress) {
24404
- throw new ApproveError('owner and spender addresses are the same');
24405
- }
24406
- const erc20Contract = ERC20__factory$1.createInterface();
24407
- const callData = erc20Contract.encodeFunctionData('approve', [spenderAddress, tokenAmount]);
24408
- return {
24409
- data: callData,
24410
- to: tokenAddress,
24411
- value: 0,
24412
- from: ownerAddress,
24413
- };
24414
- };
24415
- const prepareApproval = (tradeType, amountSpecified, amountWithSlippage, routingContracts, secondaryFees) => {
24416
- const amount = tradeType === TradeType.EXACT_INPUT ? amountSpecified : amountWithSlippage;
24417
- const spender = secondaryFees.length === 0
24418
- ? routingContracts.peripheryRouterAddress
24419
- : routingContracts.secondaryFeeAddress;
24420
- return { spender, amount };
24421
- };
24422
- /**
24423
- * Get an unsigned approval transaction if needed
24424
- *
24425
- * @param provider The provider to use for the call
24426
- * @param ownerAddress The address of the owner of the token
24427
- * @param tokenAddress The address of the token to approve
24428
- * @param tokenAmount The amount of the token to approve
24429
- * @param spenderAddress The address of the spender
24430
- * @returns The unsigned ERC20 approve transaction, or null if no approval is needed
24431
- */
24432
- const getApproveTransaction = async (provider, ownerAddress, tokenAddress, tokenAmount, spenderAddress) => {
24433
- let amountToApprove;
24434
- try {
24435
- amountToApprove = await getERC20AmountToApprove(provider, ownerAddress, tokenAddress, BigNumber$2.from(tokenAmount), spenderAddress);
24436
- }
24437
- catch (e) {
24438
- if (e instanceof AlreadyApprovedError) {
24439
- // already approved for the required amount, nothing to do
24440
- return null;
24441
- }
24442
- throw e;
24443
- }
24444
- return getUnsignedERC20ApproveTransaction(ownerAddress, tokenAddress, amountToApprove, spenderAddress);
24445
- };
24446
- async function getApproveGasEstimate(provider, ownerAddress, spenderAddress, tokenAddress) {
24447
- const erc20Contract = ERC20__factory$1.connect(tokenAddress, provider);
24448
- return await erc20Contract.estimateGas.approve(spenderAddress, ethers.constants.MaxUint256, {
24449
- from: ownerAddress,
24450
- });
24451
- }
24452
- const getApproval = async (nativeToken, provider, ownerAddress, tokenAddress, preparedApproval, gasPrice) => {
24453
- const approveTransaction = await getApproveTransaction(provider, ownerAddress, tokenAddress, preparedApproval.amount, preparedApproval.spender);
24454
- if (!approveTransaction) {
24455
- return null;
24456
- }
24457
- const gasEstimate = await getApproveGasEstimate(provider, ownerAddress, preparedApproval.spender, tokenAddress);
24458
- const gasFeeEstimate = gasPrice ? {
24459
- token: nativeToken,
24460
- value: calculateGasFee(gasPrice, gasEstimate),
24461
- } : null;
24462
- return {
24463
- transaction: approveTransaction,
24464
- gasFeeEstimate,
24465
- };
24466
- };
24467
-
24468
- // slippageToPercent takes the slippage as a percentage (e.g. 0.1) and
24469
- // converts it to the Uniswap equivalent type
24470
- const slippageToFraction = (slippage) => {
24471
- // If we receive a whole number, we can return slippage/100
24472
- const noDecimals = slippage.toString().split('.').length === 1;
24473
- if (noDecimals) {
24474
- return new Percent(slippage, 100);
24475
- }
24476
- // Divide the slippage number by 100 to get the decimal
24477
- const slippageDecimal = slippage / 100;
24478
- // Split into two parts by the decimal place
24479
- const parts = slippageDecimal.toString().split('.');
24480
- // Get the numerator by adding the two parts together
24481
- const numerator = parts[0] + parts[1];
24482
- // Get the denominator by multiplying decimals^10
24483
- const denominator = 10 ** parts[1].length;
24484
- return new Percent(numerator, denominator);
24485
- };
24486
-
24487
- function getQuoteAmountFromTradeType(tradeInfo) {
24488
- if (tradeInfo.tradeType === TradeType.EXACT_INPUT) {
24489
- return tradeInfo.amountOut;
24490
- }
24491
- return tradeInfo.amountIn;
24492
- }
24493
- function applySlippage(tradeType, amount, slippage) {
24494
- const slippageTolerance = slippageToFraction(slippage);
24495
- const slippagePlusOne = slippageTolerance.add(1);
24496
- const maybeInverted = tradeType === TradeType.EXACT_INPUT ? slippagePlusOne.invert() : slippagePlusOne;
24497
- const amountWithSlippage = maybeInverted.multiply(amount.toString()).quotient;
24498
- return ethers.BigNumber.from(amountWithSlippage.toString());
24499
- }
24500
- function prepareUserQuote(otherToken, tradeInfo, slippage, fees) {
24501
- const quote = getQuoteAmountFromTradeType(tradeInfo);
24502
- const amountWithSlippage = applySlippage(tradeInfo.tradeType, quote.value, slippage);
24503
- return {
24504
- amount: quote,
24505
- amountWithMaxSlippage: {
24506
- token: otherToken,
24507
- value: amountWithSlippage,
24508
- },
24509
- slippage,
24510
- fees: fees.withAmounts(),
24511
- };
24512
- }
24513
- function getOurQuoteReqAmount(amount, fees, tradeType) {
24514
- if (tradeType === TradeType.EXACT_OUTPUT) {
24515
- // For an exact output swap, we do not need to subtract fees from the given amount
24516
- return amount;
24517
- }
24518
- fees.addAmount(amount);
24519
- return fees.amountLessFees();
24520
- }
24521
-
24522
- // 0.1% default slippage
24523
- const DEFAULT_SLIPPAGE = 0.1;
24524
- // 15 minutes from the current Unix time
24525
- const DEFAULT_DEADLINE = Math.floor(Date.now() / 1000) + 60 * 15;
24526
- // most swaps will be able to resolve with 2 hops
24527
- const DEFAULT_MAX_HOPS = 2;
24528
- // after 10 hops, it is very unlikely a route will be available
24529
- const MAX_MAX_HOPS = 10;
24530
- // a max hop of 1 will require a direct swap with no intermediary pools
24531
- const MIN_MAX_HOPS = 1;
24532
- // precision used to calculate percentage from basis points
24533
- const BASIS_POINT_PRECISION = 10000;
24534
- // 10% maximum secondary fee
24535
- const MAX_SECONDARY_FEE_BASIS_POINTS = 10000;
24536
-
24537
24431
  /* Autogenerated file. Do not edit manually. */
24538
24432
  /* tslint:disable */
24539
24433
  /* eslint-disable */
@@ -26826,6 +26720,212 @@ startTokenIn = tokenIn) => {
26826
26720
  return routes;
26827
26721
  };
26828
26722
 
26723
+ /**
26724
+ * Determines whether or not the chain supports EIP-1559 by checking for the existence
26725
+ * of {@link FeeData.maxFeePerGas} and {@link FeeData.maxPriorityFeePerGas}
26726
+ *
26727
+ * @param {FeeData} fee - The fee data for the chain
26728
+ */
26729
+ const doesChainSupportEIP1559 = (fee) => {
26730
+ const supportsEIP1559 = !!fee.maxFeePerGas && !!fee.maxPriorityFeePerGas;
26731
+ return supportsEIP1559;
26732
+ };
26733
+ /**
26734
+ * Fetch the current gas price estimate. Supports both EIP-1559 and non-EIP1559 chains
26735
+ * @param {JsonRpcProvider} provider - The JSON RPC provider used to fetch fee data
26736
+ * @returns {Amount | null} - The gas price in the smallest denomination of the chain's currency,
26737
+ * or null if no gas price is available
26738
+ */
26739
+ const fetchGasPrice = async (provider, nativeToken) => {
26740
+ const feeData = await provider.getFeeData().catch(() => null);
26741
+ if (!feeData)
26742
+ return null;
26743
+ if (doesChainSupportEIP1559(feeData)) {
26744
+ return newAmount(feeData.maxFeePerGas.add(feeData.maxPriorityFeePerGas), nativeToken);
26745
+ }
26746
+ return feeData.gasPrice ? newAmount(feeData.gasPrice, nativeToken) : null;
26747
+ };
26748
+ /**
26749
+ * Calculate the gas fee from the gas price and gas units used for the transaction
26750
+ *
26751
+ * @param {Amount} gasPriceInWei - The price of gas
26752
+ * @param {BigNumber} gasUsed - The total gas units that will be used for the transaction
26753
+ * @returns - The cost of the transaction in the gas token's smallest denomination (e.g. WEI)
26754
+ */
26755
+ const calculateGasFee = (gasPrice, gasEstimate) =>
26756
+ // eslint-disable-next-line implicit-arrow-linebreak
26757
+ newAmount(gasEstimate.mul(gasPrice.value), gasPrice.token);
26758
+
26759
+ /**
26760
+ * Get the amount of an ERC20 token that needs to be approved by
26761
+ * checking the existing allowance for the spender
26762
+ *
26763
+ * @param provider - The provider to use for the call
26764
+ * @param ownerAddress - The address of the owner of the token
26765
+ * @param tokenAmount - The amount of the token to approve
26766
+ * @param spenderAddress - The address of the spender
26767
+ * @returns - The amount of the token that needs to be approved
26768
+ */
26769
+ const getERC20AmountToApprove = async (provider, ownerAddress, tokenAmount, spenderAddress) => {
26770
+ // create an instance of the ERC20 token contract
26771
+ const erc20Contract = ERC20__factory$1.connect(tokenAmount.token.address, provider);
26772
+ // get the allowance for the token spender
26773
+ // minimum is 0 - no allowance
26774
+ let allowance;
26775
+ try {
26776
+ allowance = await erc20Contract.allowance(ownerAddress, spenderAddress);
26777
+ }
26778
+ catch (e) {
26779
+ const message = e instanceof Error ? e.message : 'Unknown Error';
26780
+ throw new ApproveError(`failed to get allowance: ${message}`);
26781
+ }
26782
+ // get the amount that needs to be approved
26783
+ const requiredAmount = tokenAmount.value.sub(allowance);
26784
+ if (requiredAmount.isNegative() || requiredAmount.isZero()) {
26785
+ throw new AlreadyApprovedError(tokenAmount.toString(), tokenAmount.token.address, spenderAddress);
26786
+ }
26787
+ return newAmount(requiredAmount, tokenAmount.token);
26788
+ };
26789
+ /**
26790
+ * Get an unsigned ERC20 approve transaction
26791
+ *
26792
+ * @param ownerAddress - The address of the owner of the token
26793
+ * @param tokenAmount - The amount of the token to approve
26794
+ * @param spenderAddress - The address of the spender
26795
+ * @returns - The unsigned ERC20 approve transaction
26796
+ */
26797
+ const getUnsignedERC20ApproveTransaction = (ownerAddress, tokenAmount, spenderAddress) => {
26798
+ if (ownerAddress === spenderAddress) {
26799
+ throw new ApproveError('owner and spender addresses are the same');
26800
+ }
26801
+ const erc20Contract = ERC20__factory$1.createInterface();
26802
+ const callData = erc20Contract.encodeFunctionData('approve', [spenderAddress, tokenAmount.value]);
26803
+ return {
26804
+ data: callData,
26805
+ to: tokenAmount.token.address,
26806
+ value: 0,
26807
+ from: ownerAddress,
26808
+ };
26809
+ };
26810
+ const prepareApproval = (tradeType, amountSpecified, amountWithSlippage, routingContracts, secondaryFees) => {
26811
+ const amountOfTokenIn = tradeType === TradeType.EXACT_INPUT ? amountSpecified : amountWithSlippage;
26812
+ const spender = secondaryFees.length === 0
26813
+ ? routingContracts.peripheryRouterAddress
26814
+ : routingContracts.secondaryFeeAddress;
26815
+ return { spender, amount: amountOfTokenIn };
26816
+ };
26817
+ /**
26818
+ * Get an unsigned approval transaction if needed
26819
+ *
26820
+ * @param provider The provider to use for the call
26821
+ * @param ownerAddress The address of the owner of the token
26822
+ * @param tokenAddress The address of the token to approve
26823
+ * @param tokenAmount The amount of the token to approve
26824
+ * @param spenderAddress The address of the spender
26825
+ * @returns The unsigned ERC20 approve transaction, or null if no approval is needed
26826
+ */
26827
+ const getApproveTransaction = async (provider, ownerAddress, tokenAmount, spenderAddress) => {
26828
+ let amountToApprove;
26829
+ try {
26830
+ amountToApprove = await getERC20AmountToApprove(provider, ownerAddress, tokenAmount, spenderAddress);
26831
+ }
26832
+ catch (e) {
26833
+ if (e instanceof AlreadyApprovedError) {
26834
+ // already approved for the required amount, nothing to do
26835
+ return null;
26836
+ }
26837
+ throw e;
26838
+ }
26839
+ return getUnsignedERC20ApproveTransaction(ownerAddress, amountToApprove, spenderAddress);
26840
+ };
26841
+ async function getApproveGasEstimate(provider, ownerAddress, spenderAddress, tokenAddress) {
26842
+ const erc20Contract = ERC20__factory$1.connect(tokenAddress, provider);
26843
+ return await erc20Contract.estimateGas.approve(spenderAddress, ethers.constants.MaxUint256, {
26844
+ from: ownerAddress,
26845
+ });
26846
+ }
26847
+ const getApproval = async (provider, ownerAddress, preparedApproval, gasPrice) => {
26848
+ const approveTransaction = await getApproveTransaction(provider, ownerAddress, preparedApproval.amount, preparedApproval.spender);
26849
+ if (!approveTransaction) {
26850
+ return null;
26851
+ }
26852
+ const gasEstimate = await getApproveGasEstimate(provider, ownerAddress, preparedApproval.spender, preparedApproval.amount.token.address);
26853
+ const gasFeeEstimate = gasPrice ? calculateGasFee(gasPrice, gasEstimate) : null;
26854
+ return {
26855
+ transaction: approveTransaction,
26856
+ gasFeeEstimate,
26857
+ };
26858
+ };
26859
+
26860
+ // slippageToPercent takes the slippage as a percentage (e.g. 0.1) and
26861
+ // converts it to the Uniswap equivalent type
26862
+ const slippageToFraction = (slippage) => {
26863
+ // If we receive a whole number, we can return slippage/100
26864
+ const noDecimals = slippage.toString().split('.').length === 1;
26865
+ if (noDecimals) {
26866
+ return new Percent(slippage, 100);
26867
+ }
26868
+ // Divide the slippage number by 100 to get the decimal
26869
+ const slippageDecimal = slippage / 100;
26870
+ // Split into two parts by the decimal place
26871
+ const parts = slippageDecimal.toString().split('.');
26872
+ // Get the numerator by adding the two parts together
26873
+ const numerator = parts[0] + parts[1];
26874
+ // Get the denominator by multiplying decimals^10
26875
+ const denominator = 10 ** parts[1].length;
26876
+ return new Percent(numerator, denominator);
26877
+ };
26878
+
26879
+ function getQuoteAmountFromTradeType(tradeInfo) {
26880
+ if (tradeInfo.tradeType === TradeType.EXACT_INPUT) {
26881
+ return tradeInfo.amountOut;
26882
+ }
26883
+ return tradeInfo.amountIn;
26884
+ }
26885
+ function applySlippage(tradeType, amount, slippage) {
26886
+ const slippageTolerance = slippageToFraction(slippage);
26887
+ const slippagePlusOne = slippageTolerance.add(1);
26888
+ const maybeInverted = tradeType === TradeType.EXACT_INPUT ? slippagePlusOne.invert() : slippagePlusOne;
26889
+ const amountWithSlippage = maybeInverted.multiply(amount.toString()).quotient;
26890
+ return ethers.BigNumber.from(amountWithSlippage.toString());
26891
+ }
26892
+ function prepareUserQuote(otherToken, tradeInfo, slippage, fees) {
26893
+ const quote = getQuoteAmountFromTradeType(tradeInfo);
26894
+ const amountWithSlippage = applySlippage(tradeInfo.tradeType, quote.value, slippage);
26895
+ return {
26896
+ amount: quote,
26897
+ amountWithMaxSlippage: {
26898
+ token: otherToken,
26899
+ value: amountWithSlippage,
26900
+ },
26901
+ slippage,
26902
+ fees: fees.withAmounts(),
26903
+ };
26904
+ }
26905
+ function getOurQuoteReqAmount(amount, fees, tradeType) {
26906
+ if (tradeType === TradeType.EXACT_OUTPUT) {
26907
+ // For an exact output swap, we do not need to subtract fees from the given amount
26908
+ return amount;
26909
+ }
26910
+ fees.addAmount(amount);
26911
+ return fees.amountLessFees();
26912
+ }
26913
+
26914
+ // 0.1% default slippage
26915
+ const DEFAULT_SLIPPAGE = 0.1;
26916
+ // 15 minutes from the current Unix time
26917
+ const DEFAULT_DEADLINE = Math.floor(Date.now() / 1000) + 60 * 15;
26918
+ // most swaps will be able to resolve with 2 hops
26919
+ const DEFAULT_MAX_HOPS = 2;
26920
+ // after 10 hops, it is very unlikely a route will be available
26921
+ const MAX_MAX_HOPS = 10;
26922
+ // a max hop of 1 will require a direct swap with no intermediary pools
26923
+ const MIN_MAX_HOPS = 1;
26924
+ // precision used to calculate percentage from basis points
26925
+ const BASIS_POINT_PRECISION = 10000;
26926
+ // 10% maximum secondary fee
26927
+ const MAX_SECONDARY_FEE_BASIS_POINTS = 10000;
26928
+
26829
26929
  class Fees {
26830
26930
  secondaryFees;
26831
26931
  amount;
@@ -26973,13 +27073,10 @@ function createSwapParameters(adjustedQuote, fromAddress, slippage, deadline, se
26973
27073
  }
26974
27074
  return createSwapCallParametersWithFees(uncheckedTrade, fromAddress, options, secondaryFees);
26975
27075
  }
26976
- function getSwap(nativeToken, adjustedQuote, fromAddress, slippage, deadline, peripheryRouterAddress, secondaryFeesAddress, gasPrice, secondaryFees) {
27076
+ function getSwap(adjustedQuote, fromAddress, slippage, deadline, peripheryRouterAddress, secondaryFeesAddress, gasPrice, secondaryFees) {
26977
27077
  const calldata = createSwapParameters(adjustedQuote, fromAddress, slippage, deadline, secondaryFees);
26978
27078
  // TODO: Add additional gas fee estimates for secondary fees
26979
- const gasFeeEstimate = gasPrice ? {
26980
- token: nativeToken,
26981
- value: calculateGasFee(gasPrice, adjustedQuote.gasEstimate),
26982
- } : null;
27079
+ const gasFeeEstimate = gasPrice ? calculateGasFee(gasPrice, adjustedQuote.gasEstimate) : null;
26983
27080
  return {
26984
27081
  transaction: {
26985
27082
  data: calldata,
@@ -27163,14 +27260,14 @@ class Exchange {
27163
27260
  // get quote and gas details
27164
27261
  const [ourQuote, gasPrice] = await Promise.all([
27165
27262
  this.router.findOptimalRoute(ourQuoteReqAmount, otherToken, tradeType, maxHops),
27166
- fetchGasPrice(this.provider),
27263
+ fetchGasPrice(this.provider, this.nativeToken),
27167
27264
  ]);
27168
27265
  const adjustedQuote = prepareSwap(ourQuote, amountSpecified, fees);
27169
- const swap = getSwap(this.nativeToken, adjustedQuote, fromAddress, slippagePercent, deadline, this.router.routingContracts.peripheryRouterAddress, this.router.routingContracts.secondaryFeeAddress, gasPrice, secondaryFees);
27266
+ const swap = getSwap(adjustedQuote, fromAddress, slippagePercent, deadline, this.router.routingContracts.peripheryRouterAddress, this.router.routingContracts.secondaryFeeAddress, gasPrice, secondaryFees);
27170
27267
  const userQuote = prepareUserQuote(otherToken, adjustedQuote, slippagePercent, fees);
27171
- const preparedApproval = prepareApproval(tradeType, amount, userQuote.amountWithMaxSlippage.value, this.router.routingContracts, secondaryFees);
27172
- // we always use the tokenIn address because we are always selling the tokenIn
27173
- const approval = await getApproval(this.nativeToken, this.provider, fromAddress, tokenInAddress, preparedApproval, gasPrice);
27268
+ const preparedApproval = prepareApproval(tradeType, amountSpecified, userQuote.amountWithMaxSlippage, this.router.routingContracts, secondaryFees);
27269
+ // preparedApproval always uses the tokenIn address because we are always selling the tokenIn
27270
+ const approval = await getApproval(this.provider, fromAddress, preparedApproval, gasPrice);
27174
27271
  return {
27175
27272
  approval,
27176
27273
  swap,
@@ -27215,6 +27312,18 @@ class Exchange {
27215
27312
 
27216
27313
 
27217
27314
 
27315
+ var $aa144554f9ef124b$export$226b052ecb8ca80;
27316
+ (function(BuyStatusType) {
27317
+ BuyStatusType["SUCCESS"] = "SUCCESS";
27318
+ BuyStatusType["FAILED"] = "FAILED";
27319
+ })($aa144554f9ef124b$export$226b052ecb8ca80 || ($aa144554f9ef124b$export$226b052ecb8ca80 = {}));
27320
+
27321
+
27322
+ var $1e6b81bbd98b3a91$export$c0189a8c30039654;
27323
+ (function(CancelStatusType) {
27324
+ CancelStatusType["SUCCESS"] = "SUCCESS";
27325
+ CancelStatusType["FAILED"] = "FAILED";
27326
+ })($1e6b81bbd98b3a91$export$c0189a8c30039654 || ($1e6b81bbd98b3a91$export$c0189a8c30039654 = {}));
27218
27327
 
27219
27328
 
27220
27329
  /**
@@ -27262,6 +27371,13 @@ var $a47e48dd2c04791b$export$1f05a55fe0680cc7;
27262
27371
 
27263
27372
 
27264
27373
 
27374
+ var $c2874b006e92b115$export$a9780122aaa0801a;
27375
+ (function(SellStatusType) {
27376
+ SellStatusType["SUCCESS"] = "SUCCESS";
27377
+ SellStatusType["FAILED"] = "FAILED";
27378
+ })($c2874b006e92b115$export$a9780122aaa0801a || ($c2874b006e92b115$export$a9780122aaa0801a = {}));
27379
+
27380
+
27265
27381
  var $08d5ddc39acd6833$export$fd9b17d87f4121d2;
27266
27382
  (function(TokenFilterTypes) {
27267
27383
  TokenFilterTypes["ALL"] = "all";
@@ -27312,13 +27428,25 @@ const $e768639828688ca3$export$44dde05038008549 = {
27312
27428
  const $d85ad1457a3f1a83$export$7d3a9eeba384fa59 = "development";
27313
27429
  const $d85ad1457a3f1a83$export$b80040cb173ba6e9 = "0x0000000000000000000000000000000000001010";
27314
27430
  const $d85ad1457a3f1a83$export$903389470ba9433c = 18;
27431
+ const $d85ad1457a3f1a83$var$ZKEVM_NATIVE_TOKEN = {
27432
+ name: "IMX",
27433
+ symbol: "IMX",
27434
+ decimals: $d85ad1457a3f1a83$export$903389470ba9433c,
27435
+ address: $d85ad1457a3f1a83$export$b80040cb173ba6e9
27436
+ };
27315
27437
  const $d85ad1457a3f1a83$export$161d4a74df65fc08 = {
27316
27438
  [$d85ad1457a3f1a83$export$7d3a9eeba384fa59]: "https://checkout-api.dev.immutable.com",
27317
27439
  [(Environment$1).SANDBOX]: "https://checkout-api.sandbox.immutable.com",
27318
27440
  [(Environment$1).PRODUCTION]: "https://checkout-api.immutable.com"
27319
27441
  };
27442
+ const $d85ad1457a3f1a83$export$72176e2233d7d5d = true;
27443
+ const $d85ad1457a3f1a83$export$566b5975cc83d6b4 = true;
27444
+ const $d85ad1457a3f1a83$export$261cde2078dba35b = true;
27320
27445
  const $d85ad1457a3f1a83$export$fc55ed5a42b458ba = {
27321
- [($0472f23319457bfb$export$c06e1e7429de6283).IMTBL_ZKEVM_TESTNET]: "https://explorer.testnet.immutable.com"
27446
+ [($0472f23319457bfb$export$c06e1e7429de6283).IMTBL_ZKEVM_TESTNET]: {
27447
+ url: "https://explorer.testnet.immutable.com",
27448
+ nativeToken: $d85ad1457a3f1a83$var$ZKEVM_NATIVE_TOKEN
27449
+ }
27322
27450
  };
27323
27451
  const $d85ad1457a3f1a83$export$6f24f3cef7d501c4 = new Map([
27324
27452
  [
@@ -27347,12 +27475,7 @@ const $d85ad1457a3f1a83$export$6f24f3cef7d501c4 = new Map([
27347
27475
  rpcUrls: [
27348
27476
  "https://rpc.immutable.com"
27349
27477
  ],
27350
- nativeCurrency: {
27351
- name: "IMX",
27352
- symbol: "IMX",
27353
- decimals: 18,
27354
- address: $d85ad1457a3f1a83$export$b80040cb173ba6e9
27355
- }
27478
+ nativeCurrency: $d85ad1457a3f1a83$var$ZKEVM_NATIVE_TOKEN
27356
27479
  }
27357
27480
  ]
27358
27481
  ]);
@@ -27383,12 +27506,7 @@ const $d85ad1457a3f1a83$export$3e81fc0987227f10 = new Map([
27383
27506
  rpcUrls: [
27384
27507
  "https://rpc.testnet.immutable.com"
27385
27508
  ],
27386
- nativeCurrency: {
27387
- name: "IMX",
27388
- symbol: "IMX",
27389
- decimals: 18,
27390
- address: $d85ad1457a3f1a83$export$b80040cb173ba6e9
27391
- }
27509
+ nativeCurrency: $d85ad1457a3f1a83$var$ZKEVM_NATIVE_TOKEN
27392
27510
  }
27393
27511
  ]
27394
27512
  ]);
@@ -27419,12 +27537,7 @@ const $d85ad1457a3f1a83$export$3a9ebede6a150274 = new Map([
27419
27537
  rpcUrls: [
27420
27538
  "https://rpc.dev.immutable.com"
27421
27539
  ],
27422
- nativeCurrency: {
27423
- name: "IMX",
27424
- symbol: "IMX",
27425
- decimals: 18,
27426
- address: $d85ad1457a3f1a83$export$b80040cb173ba6e9
27427
- }
27540
+ nativeCurrency: $d85ad1457a3f1a83$var$ZKEVM_NATIVE_TOKEN
27428
27541
  }
27429
27542
  ]
27430
27543
  ]);
@@ -27668,10 +27781,15 @@ var $4b58188d47aafe8d$export$537fa3efd10ed435;
27668
27781
  CheckoutErrorType["UNSUPPORTED_TOKEN_TYPE_ERROR"] = "UNSUPPORTED_TOKEN_TYPE_ERROR";
27669
27782
  CheckoutErrorType["UNSUPPORTED_BALANCE_REQUIREMENT_ERROR"] = "UNSUPPORTED_BALANCE_REQUIREMENT_ERROR";
27670
27783
  CheckoutErrorType["GET_ORDER_LISTING_ERROR"] = "GET_ORDER_LISTING_ERROR";
27784
+ CheckoutErrorType["CANCEL_ORDER_LISTING_ERROR"] = "CANCEL_ORDER_LISTING_ERROR";
27671
27785
  CheckoutErrorType["PREPARE_ORDER_LISTING_ERROR"] = "PREPARE_ORDER_LISTING_ERROR";
27786
+ CheckoutErrorType["CREATE_ORDER_LISTING_ERROR"] = "CREATE_ORDER_LISTING_ERROR";
27672
27787
  CheckoutErrorType["SWITCH_NETWORK_UNSUPPORTED"] = "SWITCH_NETWORK_UNSUPPORTED";
27673
27788
  CheckoutErrorType["GET_ERC20_ALLOWANCE_ERROR"] = "GET_ERC20_ALLOWANCE_ERROR";
27674
27789
  CheckoutErrorType["GET_ERC721_ALLOWANCE_ERROR"] = "GET_ERC721_ALLOWANCE_ERROR";
27790
+ CheckoutErrorType["EXECUTE_APPROVAL_TRANSACTION_ERROR"] = "EXECUTE_APPROVAL_TRANSACTION_ERROR";
27791
+ CheckoutErrorType["EXECUTE_FULFILMENT_TRANSACTION_ERROR"] = "EXECUTE_FULFILMENT_TRANSACTION_ERROR";
27792
+ CheckoutErrorType["SIGN_MESSAGE_ERROR"] = "SIGN_MESSAGE_ERROR";
27675
27793
  })($a8bc256d81a5e2c1$export$e3dc0620abde7f5a || ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a = {}));
27676
27794
  class $a8bc256d81a5e2c1$export$b722478a3cbfa3bc extends Error {
27677
27795
  message;
@@ -27877,6 +27995,7 @@ const $efe60cea83bfc4e8$export$473cec51305fdae8 = async (config, { type: type =
27877
27995
  const $fd8a8472dcc3ec2b$var$CACHE_DATA_TTL = 60; // seconds
27878
27996
  class $fd8a8472dcc3ec2b$export$ef140a6b05dfc786 {
27879
27997
  url;
27998
+ nativeToken;
27880
27999
  ttl;
27881
28000
  chainId;
27882
28001
  cacheMap;
@@ -27900,7 +28019,14 @@ class $fd8a8472dcc3ec2b$export$ef140a6b05dfc786 {
27900
28019
  * @param ttl cache TTL
27901
28020
  */ constructor(params){
27902
28021
  this.chainId = params.chainId;
27903
- this.url = ($d85ad1457a3f1a83$export$fc55ed5a42b458ba)[this.chainId];
28022
+ this.url = ($d85ad1457a3f1a83$export$fc55ed5a42b458ba)[this.chainId].url;
28023
+ const native = ($d85ad1457a3f1a83$export$fc55ed5a42b458ba)[this.chainId].nativeToken;
28024
+ this.nativeToken = {
28025
+ address: native.address ?? "",
28026
+ decimals: native.decimals.toString(),
28027
+ name: native.name,
28028
+ symbol: native.symbol
28029
+ };
27904
28030
  this.cacheMap = {};
27905
28031
  this.ttl = params.ttl !== undefined ? params.ttl : $fd8a8472dcc3ec2b$var$CACHE_DATA_TTL;
27906
28032
  }
@@ -27913,14 +28039,14 @@ class $fd8a8472dcc3ec2b$export$ef140a6b05dfc786 {
27913
28039
  * @param err error to evaluate
27914
28040
  */ static isBlockscoutError = (err)=>"code" in err;
27915
28041
  /**
27916
- * getAddressTokens fetches the list of tokens (by type) owned by the wallet address.
28042
+ * getTokensByWalletAddress fetches the list of tokens (by type) owned by the wallet address.
27917
28043
  * @param walletAddress wallet address
27918
- * @param tokenType token types
27919
- * @param nextPage parameters for the next page, to be provided along side walletAddress and tokenType
28044
+ * @param tokenType token type
28045
+ * @param nextPage parameters for the next page, to be provided alongside walletAddress and tokenType
27920
28046
  * @returns list of tokens given the wallet address and the token types
27921
- */ async getAddressTokens(params) {
28047
+ */ async getTokensByWalletAddress(params) {
27922
28048
  try {
27923
- let url = `${this.url}/api/v2/addresses/${params.walletAddress}/tokens?type=${params.tokenType.join(",")}`;
28049
+ let url = `${this.url}/api/v2/addresses/${params.walletAddress}/tokens?type=${params.tokenType}`;
27924
28050
  if (params.nextPage) url += `&${new URLSearchParams(params.nextPage)}`;
27925
28051
  // Cache response data to prevent unnecessary requests
27926
28052
  const cached = this.getCache(url);
@@ -27930,8 +28056,51 @@ class $fd8a8472dcc3ec2b$export$ef140a6b05dfc786 {
27930
28056
  code: response.status,
27931
28057
  message: response.statusText
27932
28058
  });
27933
- this.setCache(url, response);
27934
- return Promise.resolve(response.data);
28059
+ // To get around an issue with native tokens being an ERC-20, there is the need
28060
+ // to remove IMX from `resp` and add it back in using getNativeTokenByWalletAddress.
28061
+ // This has affected some of the early wallets, and it might not be an issue in mainnet
28062
+ // however, let's enforce it.
28063
+ const data = {
28064
+ items: response.data?.items?.filter((token)=>token.token.address && token.token.address !== this.nativeToken.address),
28065
+ // eslint-disable-next-line @typescript-eslint/naming-convention
28066
+ next_page_params: response.data?.next_page_params
28067
+ };
28068
+ this.setCache(url, data);
28069
+ return Promise.resolve(data);
28070
+ } catch (err) {
28071
+ let code = (HttpStatusCode$2).InternalServerError;
28072
+ let message = "InternalServerError";
28073
+ if ((globalAxios$1).isAxiosError(err)) {
28074
+ code = err.response?.status || code;
28075
+ message = err.message;
28076
+ }
28077
+ return Promise.reject({
28078
+ code: code,
28079
+ message: message
28080
+ });
28081
+ }
28082
+ }
28083
+ /**
28084
+ * getNativeTokenByWalletAddress fetches the native token owned by the wallet address.
28085
+ * @param walletAddress wallet address
28086
+ * @returns list of tokens given the wallet address and the token types
28087
+ */ async getNativeTokenByWalletAddress(params) {
28088
+ try {
28089
+ const url = `${this.url}/api/v2/addresses/${params.walletAddress}`;
28090
+ // Cache response data to prevent unnecessary requests
28091
+ const cached = this.getCache(url);
28092
+ if (cached && cached.status < 400) return Promise.resolve(cached.data);
28093
+ const response = await $fd8a8472dcc3ec2b$export$ef140a6b05dfc786.makeHttpRequest(url);
28094
+ if (response.status >= 400) return Promise.reject({
28095
+ code: response.status,
28096
+ message: response.statusText
28097
+ });
28098
+ const data = {
28099
+ token: this.nativeToken,
28100
+ value: response.data.coin_balance
28101
+ };
28102
+ this.setCache(url, data);
28103
+ return Promise.resolve(data);
27935
28104
  } catch (err) {
27936
28105
  let code = (HttpStatusCode$2).InternalServerError;
27937
28106
  let message = "InternalServerError";
@@ -28009,16 +28178,14 @@ const $1564e43dde50bb61$export$8c978679845804d4 = async (walletAddress, chainId,
28009
28178
  });
28010
28179
  // Hold the items in an array for post-fetching processing
28011
28180
  const items = [];
28012
- const tokenType = [
28013
- ($887a00f8f72d61f0$export$5bd1ea2b3d18210).ERC20
28014
- ];
28181
+ const tokenType = ($887a00f8f72d61f0$export$5bd1ea2b3d18210).ERC20;
28015
28182
  // Given that the widgets aren't yet designed to support pagination,
28016
28183
  // fetch all the possible tokens associated to a given wallet address.
28017
28184
  let resp;
28018
28185
  try {
28019
28186
  do {
28020
28187
  // eslint-disable-next-line no-await-in-loop
28021
- resp = await $1564e43dde50bb61$var$blockscoutClient.getAddressTokens({
28188
+ resp = await $1564e43dde50bb61$var$blockscoutClient.getTokensByWalletAddress({
28022
28189
  walletAddress: walletAddress,
28023
28190
  tokenType: tokenType,
28024
28191
  nextPage: resp?.next_page_params
@@ -28026,7 +28193,15 @@ const $1564e43dde50bb61$export$8c978679845804d4 = async (walletAddress, chainId,
28026
28193
  items.push(...resp.items);
28027
28194
  }while (resp.next_page_params);
28028
28195
  } catch (err) {
28029
- throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(err.message || "InternalServerError", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_INDEXER_BALANCE_ERROR, err);
28196
+ throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(err.message || "InternalServerError | getTokensByWalletAddress", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_INDEXER_BALANCE_ERROR, err);
28197
+ }
28198
+ try {
28199
+ const respNative = await $1564e43dde50bb61$var$blockscoutClient.getNativeTokenByWalletAddress({
28200
+ walletAddress: walletAddress
28201
+ });
28202
+ items.push(respNative);
28203
+ } catch (err) {
28204
+ throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(err.message || "InternalServerError | getNativeTokenByWalletAddress", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_INDEXER_BALANCE_ERROR, err);
28030
28205
  }
28031
28206
  return {
28032
28207
  balances: items.map((item)=>{
@@ -28056,7 +28231,7 @@ const $1564e43dde50bb61$export$a3238cee431627c6 = async (config, web3Provider, w
28056
28231
  else allBalancePromises.push($1564e43dde50bb61$export$60e0fe116a0e6ed0(web3Provider, walletAddress, token.address));
28057
28232
  });
28058
28233
  const balanceResults = await Promise.allSettled(allBalancePromises);
28059
- const balances = balanceResults.filter((result)=>result.status === "fulfilled").map((fulfilledResult)=>fulfilledResult.value);
28234
+ const balances = balanceResults.filter((result)=>result.status === "fulfilled").map((result)=>result.value);
28060
28235
  return {
28061
28236
  balances: balances
28062
28237
  };
@@ -28077,6 +28252,9 @@ const $1564e43dde50bb61$export$fee49741664a4d7e = async (config, web3Provider, w
28077
28252
  console.error(err);
28078
28253
  }
28079
28254
  if (flag && ($fd8a8472dcc3ec2b$export$ef140a6b05dfc786).isChainSupported(chainId)) return await $1564e43dde50bb61$export$8c978679845804d4(walletAddress, chainId, tokens);
28255
+ // This fallback to use ERC20s calls which is a best effort solution
28256
+ // Fails in fetching data from the RCP calls might result in some
28257
+ // missing data.
28080
28258
  return await $1564e43dde50bb61$export$a3238cee431627c6(config, web3Provider, walletAddress, tokens);
28081
28259
  };
28082
28260
 
@@ -28412,6 +28590,9 @@ class $4013c5c91bb535f6$export$4823433c4a67bbc6 {
28412
28590
  // Environment.DEVELOPMENT
28413
28591
  isDevelopment = false;
28414
28592
  isProduction;
28593
+ isOnRampEnabled;
28594
+ isSwapEnabled;
28595
+ isBridgeEnabled;
28415
28596
  remote;
28416
28597
  environment;
28417
28598
  networkMap;
@@ -28420,6 +28601,9 @@ class $4013c5c91bb535f6$export$4823433c4a67bbc6 {
28420
28601
  this.environment = config.baseConfig.environment;
28421
28602
  // Developer mode will super set any environment configuration
28422
28603
  this.isProduction = !this.isDevelopment && this.environment === (Environment$1).PRODUCTION;
28604
+ this.isOnRampEnabled = config.isOnRampEnabled ?? ($d85ad1457a3f1a83$export$72176e2233d7d5d);
28605
+ this.isSwapEnabled = config.isSwapEnabled ?? ($d85ad1457a3f1a83$export$566b5975cc83d6b4);
28606
+ this.isBridgeEnabled = config.isBridgeEnabled ?? ($d85ad1457a3f1a83$export$261cde2078dba35b);
28423
28607
  this.networkMap = $4013c5c91bb535f6$var$networkMap(this.isProduction, this.isDevelopment);
28424
28608
  this.remote = new ($a492ee374ae7b613$export$d902b56530cd5f87)({
28425
28609
  isDevelopment: this.isDevelopment,
@@ -28531,6 +28715,7 @@ async function $2e7bf45a7c9a9570$export$942c8de7174809fc(params, readOnlyProvide
28531
28715
 
28532
28716
 
28533
28717
 
28718
+
28534
28719
  const $ddc6bcd0896481e5$export$2fbfa41a4de56a89 = (erc20allowances, erc721allowances)=>{
28535
28720
  const aggregatedAllowances = [];
28536
28721
  if (!erc20allowances.sufficient) {
@@ -29178,6 +29363,164 @@ const $7d1bfafb81e64d74$export$3a4140bd9e983e4e = async (provider, insufficientI
29178
29363
 
29179
29364
 
29180
29365
 
29366
+ const $1fda5c40669a566d$export$1fac8e857d728583 = async ()=>true;
29367
+ const $1fda5c40669a566d$export$2e83e9eeaf217e20 = async ()=>true;
29368
+
29369
+
29370
+ const $7f2e17f026d4fc8d$var$isPassportProvider = (provider)=>(provider.provider?.isPassport === true) ?? false;
29371
+ const $7f2e17f026d4fc8d$export$f1ca3744c025ab81 = async (config, provider)=>{
29372
+ const availableRoutingOptions = {
29373
+ onRamp: config.isOnRampEnabled,
29374
+ swap: config.isSwapEnabled,
29375
+ bridge: config.isBridgeEnabled
29376
+ };
29377
+ // Geo-blocking checks
29378
+ const geoBlockingChecks = [];
29379
+ if (availableRoutingOptions.onRamp) geoBlockingChecks.push({
29380
+ id: "onRamp",
29381
+ promise: ($1fda5c40669a566d$export$1fac8e857d728583)()
29382
+ });
29383
+ if (availableRoutingOptions.swap) geoBlockingChecks.push({
29384
+ id: "swap",
29385
+ promise: ($1fda5c40669a566d$export$2e83e9eeaf217e20)()
29386
+ });
29387
+ if (geoBlockingChecks.length > 0) {
29388
+ const promises = geoBlockingChecks.map((geoBlockingCheck)=>geoBlockingCheck.promise);
29389
+ const geoBlockingStatus = await Promise.allSettled(promises);
29390
+ geoBlockingStatus.forEach((result, index)=>{
29391
+ const statusId = geoBlockingChecks[index].id;
29392
+ availableRoutingOptions[statusId] = availableRoutingOptions[statusId] && result.status === "fulfilled" && !result.value;
29393
+ });
29394
+ }
29395
+ // Bridge not available if passport provider
29396
+ availableRoutingOptions.bridge = availableRoutingOptions.bridge && !$7f2e17f026d4fc8d$var$isPassportProvider(provider);
29397
+ return availableRoutingOptions;
29398
+ };
29399
+
29400
+
29401
+
29402
+
29403
+
29404
+
29405
+
29406
+
29407
+
29408
+ async function $0e0060cb42e136d2$export$339cb2be73677b30(config, existingReadOnlyProviders) {
29409
+ if (config.isProduction && existingReadOnlyProviders?.has(($0472f23319457bfb$export$c06e1e7429de6283).ETHEREUM)) return existingReadOnlyProviders;
29410
+ if (existingReadOnlyProviders?.has(($0472f23319457bfb$export$c06e1e7429de6283).SEPOLIA)) return existingReadOnlyProviders;
29411
+ const readOnlyProviders = new Map();
29412
+ const allowedNetworks = await $de192de6ef100f9f$export$3043f6442a9ef563(config, {
29413
+ type: ($a47e48dd2c04791b$export$1f05a55fe0680cc7).ALL
29414
+ });
29415
+ allowedNetworks.networks.forEach((networkInfo)=>{
29416
+ const rpcUrl = config.networkMap.get(networkInfo.chainId)?.rpcUrls[0];
29417
+ const provider = new (JsonRpcProvider)(rpcUrl);
29418
+ readOnlyProviders.set(networkInfo.chainId, provider);
29419
+ });
29420
+ return readOnlyProviders;
29421
+ }
29422
+
29423
+
29424
+
29425
+
29426
+ const $33acec7b4a26c053$export$23ddeb2642d2f9d = async (config, ownerAddress, availableRoutingOptions)=>{
29427
+ const chainBalances = new Map();
29428
+ const chainBalancePromises = new Map();
29429
+ let readOnlyProviders = new Map();
29430
+ let providerError;
29431
+ try {
29432
+ readOnlyProviders = await (0, $0e0060cb42e136d2$export$339cb2be73677b30)(config);
29433
+ } catch (error) {
29434
+ providerError = error;
29435
+ }
29436
+ if (readOnlyProviders.size === 0) {
29437
+ const noProviderResult = {
29438
+ success: false,
29439
+ error: providerError || new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("Provider failed", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).PROVIDER_ERROR),
29440
+ balances: []
29441
+ };
29442
+ chainBalances.set(($4013c5c91bb535f6$export$9b794d067cdd1af6)(config), noProviderResult);
29443
+ chainBalances.set(($4013c5c91bb535f6$export$c9af4e4b001c6476)(config), noProviderResult);
29444
+ return chainBalances;
29445
+ }
29446
+ // Only get L1 Balances if we can bridge
29447
+ if (availableRoutingOptions.bridge) {
29448
+ const chainId = ($4013c5c91bb535f6$export$9b794d067cdd1af6)(config);
29449
+ if (readOnlyProviders.has(chainId)) chainBalancePromises.set(chainId, ($1564e43dde50bb61$export$fee49741664a4d7e)(config, readOnlyProviders.get(chainId), ownerAddress, chainId));
29450
+ else chainBalances.set(($4013c5c91bb535f6$export$9b794d067cdd1af6)(config), {
29451
+ success: false,
29452
+ error: new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(`No L1 provider available for ${chainId}`, ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).PROVIDER_ERROR),
29453
+ balances: []
29454
+ });
29455
+ }
29456
+ const chainId = ($4013c5c91bb535f6$export$c9af4e4b001c6476)(config);
29457
+ if (readOnlyProviders.has(chainId)) chainBalancePromises.set(chainId, ($1564e43dde50bb61$export$fee49741664a4d7e)(config, readOnlyProviders.get(chainId), ownerAddress, chainId));
29458
+ else chainBalances.set(($4013c5c91bb535f6$export$c9af4e4b001c6476)(config), {
29459
+ success: false,
29460
+ error: new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(`No L2 provider available for ${chainId}`, ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).PROVIDER_ERROR),
29461
+ balances: []
29462
+ });
29463
+ if (chainBalancePromises.size > 0) {
29464
+ const chainIds = Array.from(chainBalancePromises.keys());
29465
+ const balanceSettledResults = await Promise.allSettled(chainBalancePromises.values());
29466
+ balanceSettledResults.forEach((balanceSettledResult, index)=>{
29467
+ const balanceChainId = chainIds[index];
29468
+ if (balanceSettledResult.status === "fulfilled") chainBalances.set(balanceChainId, {
29469
+ success: true,
29470
+ balances: balanceSettledResult.value.balances
29471
+ });
29472
+ else chainBalances.set(balanceChainId, {
29473
+ success: false,
29474
+ error: new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(`Error getting ${chainId} balances`, ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_BALANCE_ERROR),
29475
+ balances: []
29476
+ });
29477
+ });
29478
+ }
29479
+ return chainBalances;
29480
+ };
29481
+
29482
+
29483
+ const $c16168a9c28ae4fd$export$92606e71d0a264ff = async (config, ownerAddress, balanceRequirements, availableRoutingOptions)=>{
29484
+ // eslint-disable-next-line no-console
29485
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
29486
+ await ($33acec7b4a26c053$export$23ddeb2642d2f9d)(config, ownerAddress, availableRoutingOptions);
29487
+ // Get allowed tokens?
29488
+ // Check bridging routes
29489
+ // Check on-ramp routes
29490
+ // Check swap routes
29491
+ // > Could bridge first
29492
+ // > Could on-ramp first
29493
+ // > Could double swap
29494
+ return {
29495
+ availableOptions: [],
29496
+ response: {
29497
+ type: "ROUTES_FOUND",
29498
+ message: "Routes found"
29499
+ },
29500
+ fundingRoutes: [
29501
+ {
29502
+ priority: 1,
29503
+ steps: [
29504
+ {
29505
+ type: "bridge",
29506
+ chainId: 1,
29507
+ asset: {
29508
+ balance: (BigNumber$1).from(0),
29509
+ formattedBalance: "0",
29510
+ token: {
29511
+ name: "ETH",
29512
+ symbol: "ETH",
29513
+ decimals: 18
29514
+ }
29515
+ }
29516
+ }
29517
+ ]
29518
+ }
29519
+ ]
29520
+ };
29521
+ };
29522
+
29523
+
29181
29524
  const $0e7419077c373b24$export$4a2a19d99fef3b1b = (balanceCheckResult)=>{
29182
29525
  let sufficient = true;
29183
29526
  const transactionRequirements = [];
@@ -29208,12 +29551,123 @@ const $0e7419077c373b24$export$9e073f9ada8c81e6 = async (config, provider, itemR
29208
29551
  aggregatedItems = ($074f75878f618031$export$c804c9ade5c28607)(aggregatedItems);
29209
29552
  }
29210
29553
  const balanceRequirements = await ($beb896e098e41faf$export$ddfc885f43c3cb6e)(config, provider, ownerAddress, aggregatedItems);
29554
+ // Determine which services are available
29555
+ const availableRoutingOptions = await ($7f2e17f026d4fc8d$export$f1ca3744c025ab81)(config, provider);
29556
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
29557
+ await ($c16168a9c28ae4fd$export$92606e71d0a264ff)(config, ownerAddress, balanceRequirements, availableRoutingOptions);
29211
29558
  return $0e7419077c373b24$export$4a2a19d99fef3b1b(balanceRequirements);
29212
29559
  };
29213
29560
 
29214
29561
 
29215
29562
 
29216
29563
 
29564
+
29565
+ var $d855a5ba32004345$export$f51b97f3aaf2d5a8;
29566
+ (function(SignTransactionStatusType) {
29567
+ SignTransactionStatusType["SUCCESS"] = "SUCCESS";
29568
+ SignTransactionStatusType["FAILED"] = "FAILED";
29569
+ })($d855a5ba32004345$export$f51b97f3aaf2d5a8 || ($d855a5ba32004345$export$f51b97f3aaf2d5a8 = {}));
29570
+
29571
+
29572
+ const $25ac589234c10b67$export$19693ca396db083e = async (provider, approvalTransactions)=>{
29573
+ let receipts = [];
29574
+ try {
29575
+ const response = await Promise.all(approvalTransactions.map((transaction)=>provider.getSigner().sendTransaction(transaction)));
29576
+ receipts = await Promise.all(response.map((transaction)=>transaction.wait()));
29577
+ } catch (err) {
29578
+ throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("An error occurred while executing the approval transaction", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).EXECUTE_APPROVAL_TRANSACTION_ERROR, {
29579
+ message: err.message
29580
+ });
29581
+ }
29582
+ for (const receipt of receipts){
29583
+ if (receipt.status === 0) return {
29584
+ type: ($d855a5ba32004345$export$f51b97f3aaf2d5a8).FAILED,
29585
+ transactionHash: receipt.transactionHash,
29586
+ reason: "Approval transaction failed and was reverted"
29587
+ };
29588
+ }
29589
+ return {
29590
+ type: ($d855a5ba32004345$export$f51b97f3aaf2d5a8).SUCCESS
29591
+ };
29592
+ };
29593
+ const $25ac589234c10b67$export$2161274619257102 = async (provider, fulfilmentTransactions)=>{
29594
+ let receipts = [];
29595
+ try {
29596
+ const response = await Promise.all(fulfilmentTransactions.map((transaction)=>provider.getSigner().sendTransaction(transaction)));
29597
+ receipts = await Promise.all(response.map((transaction)=>transaction.wait()));
29598
+ } catch (err) {
29599
+ throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("An error occurred while executing the fulfilment transaction", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).EXECUTE_FULFILMENT_TRANSACTION_ERROR, {
29600
+ message: err.message
29601
+ });
29602
+ }
29603
+ for (const receipt of receipts){
29604
+ if (receipt.status === 0) return {
29605
+ type: ($d855a5ba32004345$export$f51b97f3aaf2d5a8).FAILED,
29606
+ transactionHash: receipt.transactionHash,
29607
+ reason: "Fulfilment transaction failed and was reverted"
29608
+ };
29609
+ }
29610
+ return {
29611
+ type: ($d855a5ba32004345$export$f51b97f3aaf2d5a8).SUCCESS
29612
+ };
29613
+ };
29614
+ const $25ac589234c10b67$export$1d9a7a8a40780de = async (provider, unsignedMessage)=>{
29615
+ try {
29616
+ // eslint-disable-next-line no-underscore-dangle
29617
+ const signedMessage = await provider.getSigner()._signTypedData(unsignedMessage.unsignedMessage.domain, unsignedMessage.unsignedMessage.types, unsignedMessage.unsignedMessage.value);
29618
+ return {
29619
+ orderComponents: unsignedMessage.orderComponents,
29620
+ orderHash: unsignedMessage.orderHash,
29621
+ signedMessage: signedMessage
29622
+ };
29623
+ } catch (err) {
29624
+ throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("An error occurred while signing the message", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).SIGN_MESSAGE_ERROR, {
29625
+ message: err.message
29626
+ });
29627
+ }
29628
+ };
29629
+
29630
+
29631
+
29632
+ const $a7367d01c6e76b1c$export$b087719c36e0f2dc = async (actions)=>{
29633
+ let approvalTransactions = [];
29634
+ let fulfilmentTransactions = [];
29635
+ const approvalPromises = [];
29636
+ const fulfilmentPromises = [];
29637
+ for (const action of actions){
29638
+ if (action.type !== (ActionType).TRANSACTION) continue;
29639
+ if (action.purpose === (TransactionPurpose).APPROVAL) approvalPromises.push(action.buildTransaction());
29640
+ if (action.purpose === (TransactionPurpose).FULFILL_ORDER) fulfilmentPromises.push(action.buildTransaction());
29641
+ }
29642
+ approvalTransactions = await Promise.all(approvalPromises);
29643
+ fulfilmentTransactions = await Promise.all(fulfilmentPromises);
29644
+ return {
29645
+ approvalTransactions: approvalTransactions,
29646
+ fulfilmentTransactions: fulfilmentTransactions
29647
+ };
29648
+ };
29649
+ const $a7367d01c6e76b1c$export$d62081fac18000c2 = (orderHash, orderComponents, actions)=>{
29650
+ let unsignedMessage;
29651
+ for (const action of actions){
29652
+ if (action.type !== (ActionType).SIGNABLE) continue;
29653
+ if (action.purpose === (SignablePurpose).CREATE_LISTING) unsignedMessage = {
29654
+ domain: action.message.domain,
29655
+ types: action.message.types,
29656
+ value: action.message.value
29657
+ };
29658
+ }
29659
+ if (!unsignedMessage) return undefined;
29660
+ return {
29661
+ orderHash: orderHash,
29662
+ orderComponents: orderComponents,
29663
+ unsignedMessage: unsignedMessage
29664
+ };
29665
+ };
29666
+
29667
+
29668
+
29669
+
29670
+
29217
29671
  const $64863c39386de592$export$4249179755829904 = (type, contractAddress, amount, spenderAddress)=>{
29218
29672
  switch(type){
29219
29673
  case ($4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC20:
@@ -29231,17 +29685,10 @@ const $64863c39386de592$export$4249179755829904 = (type, contractAddress, amount
29231
29685
  };
29232
29686
  }
29233
29687
  };
29234
- const $64863c39386de592$export$e0cb3ec5326d496b = async (actions)=>{
29235
- for (const action of actions){
29236
- if (action.type === (ActionType).TRANSACTION && action.purpose === (TransactionPurpose).FULFILL_ORDER) // eslint-disable-next-line no-await-in-loop
29237
- return await action.buildTransaction();
29238
- }
29239
- return undefined;
29240
- };
29241
- const $64863c39386de592$export$8f2ff92ab8657f0b = (gasLimit, transaction)=>{
29242
- if (transaction) return {
29688
+ const $64863c39386de592$export$8f2ff92ab8657f0b = (gasLimit, unsignedTransactions)=>{
29689
+ if (unsignedTransactions.fulfilmentTransactions.length > 0) return {
29243
29690
  type: ($4b58188d47aafe8d$export$65c64e46348ee3c1).TRANSACTION,
29244
- transaction: transaction
29691
+ transaction: unsignedTransactions.fulfilmentTransactions[0]
29245
29692
  };
29246
29693
  return {
29247
29694
  type: ($4b58188d47aafe8d$export$65c64e46348ee3c1).GAS,
@@ -29267,12 +29714,18 @@ const $64863c39386de592$export$7f8e2b98eca5a7f0 = async (config, provider, order
29267
29714
  message: err.message
29268
29715
  });
29269
29716
  }
29270
- let unsignedTransaction;
29717
+ let unsignedTransactions = {
29718
+ approvalTransactions: [],
29719
+ fulfilmentTransactions: []
29720
+ };
29271
29721
  try {
29272
29722
  const fulfillerAddress = await provider.getSigner().getAddress();
29273
29723
  const { actions: actions } = await orderbook.fulfillOrder(orderId, fulfillerAddress);
29274
- unsignedTransaction = await $64863c39386de592$export$e0cb3ec5326d496b(actions);
29275
- } catch {}
29724
+ unsignedTransactions = await (0, $a7367d01c6e76b1c$export$b087719c36e0f2dc)(actions);
29725
+ } catch {
29726
+ // Silently ignore error as this is usually thrown if user does not have enough balance
29727
+ // todo: if balance error - can we determine if its the balance error otherwise throw?
29728
+ }
29276
29729
  let amount = (BigNumber$1).from("0");
29277
29730
  let type = ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE;
29278
29731
  let contractAddress = "";
@@ -29300,12 +29753,78 @@ const $64863c39386de592$export$7f8e2b98eca5a7f0 = async (config, provider, order
29300
29753
  const itemRequirements = [
29301
29754
  $64863c39386de592$export$4249179755829904(type, contractAddress, amount, spenderAddress)
29302
29755
  ];
29303
- await ($0e7419077c373b24$export$9e073f9ada8c81e6)(config, provider, itemRequirements, $64863c39386de592$export$8f2ff92ab8657f0b(gasLimit, unsignedTransaction));
29756
+ const smartCheckoutResult = await ($0e7419077c373b24$export$9e073f9ada8c81e6)(config, provider, itemRequirements, $64863c39386de592$export$8f2ff92ab8657f0b(gasLimit, unsignedTransactions));
29757
+ if (smartCheckoutResult.sufficient) {
29758
+ const approvalResult = await ($25ac589234c10b67$export$19693ca396db083e)(provider, unsignedTransactions.approvalTransactions);
29759
+ if (approvalResult.type === ($d855a5ba32004345$export$f51b97f3aaf2d5a8).FAILED) return {
29760
+ smartCheckoutResult: smartCheckoutResult,
29761
+ orderId: orderId,
29762
+ status: {
29763
+ type: ($aa144554f9ef124b$export$226b052ecb8ca80).FAILED,
29764
+ transactionHash: approvalResult.transactionHash,
29765
+ reason: approvalResult.reason
29766
+ }
29767
+ };
29768
+ const fulfilmentResult = await ($25ac589234c10b67$export$2161274619257102)(provider, unsignedTransactions.fulfilmentTransactions);
29769
+ if (fulfilmentResult.type === ($d855a5ba32004345$export$f51b97f3aaf2d5a8).FAILED) return {
29770
+ smartCheckoutResult: smartCheckoutResult,
29771
+ orderId: orderId,
29772
+ status: {
29773
+ type: ($aa144554f9ef124b$export$226b052ecb8ca80).FAILED,
29774
+ transactionHash: fulfilmentResult.transactionHash,
29775
+ reason: fulfilmentResult.reason
29776
+ }
29777
+ };
29778
+ return {
29779
+ smartCheckoutResult: smartCheckoutResult,
29780
+ orderId: orderId,
29781
+ status: {
29782
+ type: ($aa144554f9ef124b$export$226b052ecb8ca80).SUCCESS
29783
+ }
29784
+ };
29785
+ }
29304
29786
  return {
29305
- itemRequirements: itemRequirements,
29306
- gasToken: {
29307
- type: ($4b58188d47aafe8d$export$537fa3efd10ed435).NATIVE,
29308
- limit: (BigNumber$1).from(gasLimit)
29787
+ smartCheckoutResult: smartCheckoutResult,
29788
+ orderId: orderId
29789
+ };
29790
+ };
29791
+
29792
+
29793
+
29794
+
29795
+
29796
+
29797
+
29798
+
29799
+
29800
+ const $9c3db1bb9c8b69d3$export$70b61ad426ddbe54 = async (config, provider, orderId)=>{
29801
+ let unsignedCancelOrderTransaction;
29802
+ try {
29803
+ const offererAddress = await provider.getSigner().getAddress();
29804
+ const orderbook = await $67fc622a2b913d5f$export$c60ce6c6a92bc2ff(config);
29805
+ const cancelOrderResponse = await orderbook.cancelOrder(orderId, offererAddress);
29806
+ unsignedCancelOrderTransaction = cancelOrderResponse.unsignedCancelOrderTransaction;
29807
+ } catch (err) {
29808
+ throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("An error occurred while cancelling the order listing", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).CANCEL_ORDER_LISTING_ERROR, {
29809
+ orderId: orderId,
29810
+ message: err.message
29811
+ });
29812
+ }
29813
+ const result = await ($25ac589234c10b67$export$2161274619257102)(provider, [
29814
+ unsignedCancelOrderTransaction
29815
+ ]);
29816
+ if (result.type === ($d855a5ba32004345$export$f51b97f3aaf2d5a8).FAILED) return {
29817
+ orderId: orderId,
29818
+ status: {
29819
+ type: ($1e6b81bbd98b3a91$export$c0189a8c30039654).FAILED,
29820
+ transactionHash: result.transactionHash,
29821
+ reason: result.reason
29822
+ }
29823
+ };
29824
+ return {
29825
+ orderId: orderId,
29826
+ status: {
29827
+ type: ($1e6b81bbd98b3a91$export$c0189a8c30039654).SUCCESS
29309
29828
  }
29310
29829
  };
29311
29830
  };
@@ -29319,13 +29838,16 @@ const $64863c39386de592$export$7f8e2b98eca5a7f0 = async (config, provider, order
29319
29838
 
29320
29839
 
29321
29840
 
29841
+
29842
+
29843
+
29322
29844
  const $9085b221b72ac69e$export$af768ccdf17d5c04 = (id, contractAddress, spenderAddress)=>({
29323
29845
  type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC721,
29324
29846
  id: id,
29325
29847
  contractAddress: contractAddress,
29326
29848
  spenderAddress: spenderAddress
29327
29849
  });
29328
- const $9085b221b72ac69e$export$d2da5a4d143c85e5 = (buyToken)=>{
29850
+ const $9085b221b72ac69e$export$586d02673c66d423 = (buyToken)=>{
29329
29851
  if (buyToken.type === ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE) return {
29330
29852
  type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE,
29331
29853
  amount: buyToken.amount.toString()
@@ -29347,7 +29869,7 @@ const $9085b221b72ac69e$export$e761f9e0703de895 = async (config, provider, id, c
29347
29869
  spenderAddress = seaportContractAddress;
29348
29870
  listing = await orderbook.prepareListing({
29349
29871
  makerAddress: walletAddress,
29350
- buy: $9085b221b72ac69e$export$d2da5a4d143c85e5(buyToken),
29872
+ buy: $9085b221b72ac69e$export$586d02673c66d423(buyToken),
29351
29873
  sell: {
29352
29874
  type: (0, $4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC721,
29353
29875
  contractAddress: contractAddress,
@@ -29364,8 +29886,6 @@ const $9085b221b72ac69e$export$e761f9e0703de895 = async (config, provider, id, c
29364
29886
  const itemRequirements = [
29365
29887
  $9085b221b72ac69e$export$af768ccdf17d5c04(id, contractAddress, spenderAddress)
29366
29888
  ];
29367
- // eslint-disable-next-line no-console
29368
- console.log(listing); // TODO: Get order signature, provider.getSigner()._signTypedData to sign
29369
29889
  const smartCheckoutResult = await ($0e7419077c373b24$export$9e073f9ada8c81e6)(config, provider, itemRequirements, {
29370
29890
  type: ($4b58188d47aafe8d$export$65c64e46348ee3c1).GAS,
29371
29891
  gasToken: {
@@ -29373,14 +29893,55 @@ const $9085b221b72ac69e$export$e761f9e0703de895 = async (config, provider, id, c
29373
29893
  limit: (BigNumber$1).from((constants).estimatedFulfillmentGasGwei)
29374
29894
  }
29375
29895
  });
29376
- // eslint-disable-next-line no-console
29377
- console.log("transactionRequirements", smartCheckoutResult);
29896
+ if (smartCheckoutResult.sufficient) {
29897
+ const unsignedMessage = ($a7367d01c6e76b1c$export$d62081fac18000c2)(listing.orderHash, listing.orderComponents, listing.actions);
29898
+ if (!unsignedMessage) // For sell it is expected the orderbook will always return an unsigned message
29899
+ // If for some reason it is missing then we cannot proceed with the create listing
29900
+ throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("The unsigned message is missing after preparing the listing", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).SIGN_MESSAGE_ERROR, {
29901
+ id: id,
29902
+ collectionAddress: contractAddress
29903
+ });
29904
+ const signedMessage = await ($25ac589234c10b67$export$1d9a7a8a40780de)(provider, unsignedMessage);
29905
+ const unsignedTransactions = await ($a7367d01c6e76b1c$export$b087719c36e0f2dc)(listing.actions);
29906
+ const approvalResult = await ($25ac589234c10b67$export$19693ca396db083e)(provider, unsignedTransactions.approvalTransactions);
29907
+ if (approvalResult.type === ($d855a5ba32004345$export$f51b97f3aaf2d5a8).FAILED) return {
29908
+ id: id,
29909
+ collectionAddress: contractAddress,
29910
+ smartCheckoutResult: smartCheckoutResult,
29911
+ status: {
29912
+ type: ($c2874b006e92b115$export$a9780122aaa0801a).FAILED,
29913
+ transactionHash: approvalResult.transactionHash,
29914
+ reason: approvalResult.reason
29915
+ }
29916
+ };
29917
+ let orderId = "";
29918
+ try {
29919
+ const order = await orderbook.createListing({
29920
+ orderComponents: signedMessage.orderComponents,
29921
+ orderHash: signedMessage.orderHash,
29922
+ orderSignature: signedMessage.signedMessage
29923
+ });
29924
+ orderId = order.result.id;
29925
+ } catch (err) {
29926
+ throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("An error occurred while creating the listing", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).CREATE_ORDER_LISTING_ERROR, {
29927
+ message: err.message,
29928
+ id: id,
29929
+ collectionAddress: contractAddress
29930
+ });
29931
+ }
29932
+ return {
29933
+ id: id,
29934
+ collectionAddress: contractAddress,
29935
+ smartCheckoutResult: smartCheckoutResult,
29936
+ status: {
29937
+ type: ($c2874b006e92b115$export$a9780122aaa0801a).SUCCESS,
29938
+ orderId: orderId
29939
+ }
29940
+ };
29941
+ }
29378
29942
  return {
29379
- itemRequirements: itemRequirements,
29380
- gasToken: {
29381
- type: ($4b58188d47aafe8d$export$537fa3efd10ed435).NATIVE,
29382
- limit: (BigNumber$1).from((constants).estimatedFulfillmentGasGwei)
29383
- },
29943
+ id: id,
29944
+ collectionAddress: contractAddress,
29384
29945
  smartCheckoutResult: smartCheckoutResult
29385
29946
  };
29386
29947
  };
@@ -29391,24 +29952,6 @@ const $9085b221b72ac69e$export$e761f9e0703de895 = async (config, provider, id, c
29391
29952
 
29392
29953
 
29393
29954
 
29394
-
29395
-
29396
- async function $0e0060cb42e136d2$export$339cb2be73677b30(config, existingReadOnlyProviders) {
29397
- if (config.isProduction && existingReadOnlyProviders?.has(($0472f23319457bfb$export$c06e1e7429de6283).ETHEREUM)) return existingReadOnlyProviders;
29398
- if (existingReadOnlyProviders?.has(($0472f23319457bfb$export$c06e1e7429de6283).SEPOLIA)) return existingReadOnlyProviders;
29399
- const readOnlyProviders = new Map();
29400
- const allowedNetworks = await $de192de6ef100f9f$export$3043f6442a9ef563(config, {
29401
- type: ($a47e48dd2c04791b$export$1f05a55fe0680cc7).ALL
29402
- });
29403
- allowedNetworks.networks.forEach((networkInfo)=>{
29404
- const rpcUrl = config.networkMap.get(networkInfo.chainId)?.rpcUrls[0];
29405
- const provider = new (JsonRpcProvider)(rpcUrl);
29406
- readOnlyProviders.set(networkInfo.chainId, provider);
29407
- });
29408
- return readOnlyProviders;
29409
- }
29410
-
29411
-
29412
29955
  const $a8cb37a3fc8eb863$var$SANDBOX_CONFIGURATION = {
29413
29956
  baseConfig: {
29414
29957
  environment: (Environment$1).SANDBOX
@@ -29547,6 +30090,16 @@ class $a8cb37a3fc8eb863$export$1f60ba4ec72508a0 {
29547
30090
  await $9085b221b72ac69e$export$e761f9e0703de895(this.config, web3Provider, params.id, params.collectionAddress, params.buyToken);
29548
30091
  }
29549
30092
  /**
30093
+ * Cancels a sell.
30094
+ * @param {CancelParams} params - The parameters for the cancel.
30095
+ */ async cancel(params) {
30096
+ if (this.config.isProduction) throw new Error("This endpoint is not currently available.");
30097
+ // eslint-disable-next-line no-console
30098
+ console.warn("This endpoint is currently under construction.");
30099
+ const web3Provider = await $bb88265fe45a0393$export$9e1fd9cc88c637a0(this.config, params.provider);
30100
+ await $9c3db1bb9c8b69d3$export$70b61ad426ddbe54(this.config, web3Provider, params.orderId);
30101
+ }
30102
+ /**
29550
30103
  * Determines the transaction requirements to complete a purchase.
29551
30104
  * @params {SmartCheckoutParams} params - The parameters for smart checkout.
29552
30105
  */ async smartCheckout(params) {
@@ -29554,6 +30107,7 @@ class $a8cb37a3fc8eb863$export$1f60ba4ec72508a0 {
29554
30107
  // eslint-disable-next-line no-console
29555
30108
  console.warn("This endpoint is currently under construction.");
29556
30109
  const web3Provider = await $bb88265fe45a0393$export$9e1fd9cc88c637a0(this.config, params.provider);
30110
+ // console.log('Smart Checkout Params ::', params);
29557
30111
  await $0e7419077c373b24$export$9e073f9ada8c81e6(this.config, web3Provider, params.itemRequirements, params.transactionOrGasAmount);
29558
30112
  }
29559
30113
  /**
@@ -29593,7 +30147,7 @@ var checkout_sdk = /*#__PURE__*/Object.freeze({
29593
30147
  function $parcel$export(e, n, v, s) {
29594
30148
  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
29595
30149
  }
29596
- const $d663162fd5a0853f$export$38a083d9fb5551ca = "0.16.0-alpha.1";
30150
+ const $d663162fd5a0853f$export$38a083d9fb5551ca = "0.0.0";
29597
30151
  const $d663162fd5a0853f$export$83bf90b30cdfd29f = ()=>false;
29598
30152
  const $d663162fd5a0853f$export$1169f5475725171b = ()=>$d663162fd5a0853f$export$38a083d9fb5551ca;
29599
30153
 
@@ -30400,6 +30954,37 @@ const _abi$2 = [
30400
30954
  name: "IImmutableERC721TokenAlreadyBurned",
30401
30955
  type: "error",
30402
30956
  },
30957
+ {
30958
+ inputs: [],
30959
+ name: "InvalidShortString",
30960
+ type: "error",
30961
+ },
30962
+ {
30963
+ inputs: [],
30964
+ name: "InvalidSignature",
30965
+ type: "error",
30966
+ },
30967
+ {
30968
+ inputs: [],
30969
+ name: "PermitExpired",
30970
+ type: "error",
30971
+ },
30972
+ {
30973
+ inputs: [],
30974
+ name: "SignerCannotBeZerothAddress",
30975
+ type: "error",
30976
+ },
30977
+ {
30978
+ inputs: [
30979
+ {
30980
+ internalType: "string",
30981
+ name: "str",
30982
+ type: "string",
30983
+ },
30984
+ ],
30985
+ name: "StringTooLong",
30986
+ type: "error",
30987
+ },
30403
30988
  {
30404
30989
  inputs: [
30405
30990
  {
@@ -30472,6 +31057,12 @@ const _abi$2 = [
30472
31057
  name: "ApprovalForAll",
30473
31058
  type: "event",
30474
31059
  },
31060
+ {
31061
+ anonymous: false,
31062
+ inputs: [],
31063
+ name: "EIP712DomainChanged",
31064
+ type: "event",
31065
+ },
30475
31066
  {
30476
31067
  anonymous: false,
30477
31068
  inputs: [
@@ -30604,6 +31195,19 @@ const _abi$2 = [
30604
31195
  stateMutability: "view",
30605
31196
  type: "function",
30606
31197
  },
31198
+ {
31199
+ inputs: [],
31200
+ name: "DOMAIN_SEPARATOR",
31201
+ outputs: [
31202
+ {
31203
+ internalType: "bytes32",
31204
+ name: "",
31205
+ type: "bytes32",
31206
+ },
31207
+ ],
31208
+ stateMutability: "view",
31209
+ type: "function",
31210
+ },
30607
31211
  {
30608
31212
  inputs: [],
30609
31213
  name: "MINTER_ROLE",
@@ -30719,6 +31323,49 @@ const _abi$2 = [
30719
31323
  stateMutability: "view",
30720
31324
  type: "function",
30721
31325
  },
31326
+ {
31327
+ inputs: [],
31328
+ name: "eip712Domain",
31329
+ outputs: [
31330
+ {
31331
+ internalType: "bytes1",
31332
+ name: "fields",
31333
+ type: "bytes1",
31334
+ },
31335
+ {
31336
+ internalType: "string",
31337
+ name: "name",
31338
+ type: "string",
31339
+ },
31340
+ {
31341
+ internalType: "string",
31342
+ name: "version",
31343
+ type: "string",
31344
+ },
31345
+ {
31346
+ internalType: "uint256",
31347
+ name: "chainId",
31348
+ type: "uint256",
31349
+ },
31350
+ {
31351
+ internalType: "address",
31352
+ name: "verifyingContract",
31353
+ type: "address",
31354
+ },
31355
+ {
31356
+ internalType: "bytes32",
31357
+ name: "salt",
31358
+ type: "bytes32",
31359
+ },
31360
+ {
31361
+ internalType: "uint256[]",
31362
+ name: "extensions",
31363
+ type: "uint256[]",
31364
+ },
31365
+ ],
31366
+ stateMutability: "view",
31367
+ type: "function",
31368
+ },
30722
31369
  {
30723
31370
  inputs: [
30724
31371
  {
@@ -31010,6 +31657,25 @@ const _abi$2 = [
31010
31657
  stateMutability: "view",
31011
31658
  type: "function",
31012
31659
  },
31660
+ {
31661
+ inputs: [
31662
+ {
31663
+ internalType: "uint256",
31664
+ name: "tokenId",
31665
+ type: "uint256",
31666
+ },
31667
+ ],
31668
+ name: "nonces",
31669
+ outputs: [
31670
+ {
31671
+ internalType: "uint256",
31672
+ name: "",
31673
+ type: "uint256",
31674
+ },
31675
+ ],
31676
+ stateMutability: "view",
31677
+ type: "function",
31678
+ },
31013
31679
  {
31014
31680
  inputs: [],
31015
31681
  name: "operatorAllowlist",
@@ -31042,6 +31708,34 @@ const _abi$2 = [
31042
31708
  stateMutability: "view",
31043
31709
  type: "function",
31044
31710
  },
31711
+ {
31712
+ inputs: [
31713
+ {
31714
+ internalType: "address",
31715
+ name: "spender",
31716
+ type: "address",
31717
+ },
31718
+ {
31719
+ internalType: "uint256",
31720
+ name: "tokenId",
31721
+ type: "uint256",
31722
+ },
31723
+ {
31724
+ internalType: "uint256",
31725
+ name: "deadline",
31726
+ type: "uint256",
31727
+ },
31728
+ {
31729
+ internalType: "bytes",
31730
+ name: "sig",
31731
+ type: "bytes",
31732
+ },
31733
+ ],
31734
+ name: "permit",
31735
+ outputs: [],
31736
+ stateMutability: "nonpayable",
31737
+ type: "function",
31738
+ },
31045
31739
  {
31046
31740
  inputs: [
31047
31741
  {
@@ -31539,7 +32233,7 @@ const _abi$2 = [
31539
32233
  type: "function",
31540
32234
  },
31541
32235
  ];
31542
- const _bytecode$2 = "0x608060405260006013553480156200001657600080fd5b50604051620052f1380380620052f18339810160408190526200003991620007cd565b8787878787878787868681818181600662000055838262000960565b50600762000064828262000960565b50506801000000000000000060095550600d62000082838262000960565b50600e62000091828262000960565b50620000a69350600092508b915050620000f1565b620000b2828262000134565b620000bd8362000239565b6016620000cb868262000960565b506015620000da858262000960565b505050505050505050505050505050505062000b74565b6200010882826200025560201b620011e11760201c565b60008281526001602090815260409091206200012f91839062001265620002f5821b17901c565b505050565b6127106001600160601b0382161115620001a85760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620002005760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016200019f565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600355565b6000620002468162000315565b620002518262000324565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000251576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002b13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200030c836001600160a01b0384166200041d565b90505b92915050565b6200032181336200046f565b50565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000396919062000a2c565b620003b45760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260018301602052604081205462000466575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200030f565b5060006200030f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200025157620004ae81620004ff60201b6200127a1760201c565b620004c48360206200128c62000512821b17811c565b604051602001620004d792919062000a50565b60408051601f198184030181529082905262461bcd60e51b82526200019f9160040162000ac9565b60606200030f6001600160a01b03831660145b606060006200052383600262000b14565b6200053090600262000b2e565b6001600160401b038111156200054a576200054a620006e8565b6040519080825280601f01601f19166020018201604052801562000575576020820181803683370190505b509050600360fc1b8160008151811062000593576200059362000b44565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620005c557620005c562000b44565b60200101906001600160f81b031916908160001a9053506000620005eb84600262000b14565b620005f890600162000b2e565b90505b60018111156200067a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811062000630576200063062000b44565b1a60f81b82828151811062000649576200064962000b44565b60200101906001600160f81b031916908160001a90535060049490941c93620006728162000b5a565b9050620005fb565b5083156200030c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016200019f565b80516001600160a01b0381168114620006e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200071b57818101518382015260200162000701565b50506000910152565b600082601f8301126200073657600080fd5b81516001600160401b0380821115620007535762000753620006e8565b604051601f8301601f19908116603f011681019082821181831017156200077e576200077e620006e8565b816040528381528660208588010111156200079857600080fd5b620007ab846020830160208901620006fe565b9695505050505050565b80516001600160601b0381168114620006e357600080fd5b600080600080600080600080610100898b031215620007eb57600080fd5b620007f689620006cb565b60208a01519098506001600160401b03808211156200081457600080fd5b620008228c838d0162000724565b985060408b01519150808211156200083957600080fd5b620008478c838d0162000724565b975060608b01519150808211156200085e57600080fd5b6200086c8c838d0162000724565b965060808b01519150808211156200088357600080fd5b50620008928b828c0162000724565b945050620008a360a08a01620006cb565b9250620008b360c08a01620006cb565b9150620008c360e08a01620007b5565b90509295985092959890939650565b600181811c90821680620008e757607f821691505b6020821081036200090857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200012f57600081815260208120601f850160051c81016020861015620009375750805b601f850160051c820191505b81811015620009585782815560010162000943565b505050505050565b81516001600160401b038111156200097c576200097c620006e8565b62000994816200098d8454620008d2565b846200090e565b602080601f831160018114620009cc5760008415620009b35750858301515b600019600386901b1c1916600185901b17855562000958565b600085815260208120601f198616915b82811015620009fd57888601518255948401946001909101908401620009dc565b508582101562000a1c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a3f57600080fd5b815180151581146200030c57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835162000a8a816017850160208801620006fe565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000abd816028840160208801620006fe565b01602801949350505050565b602081526000825180602084015262000aea816040850160208701620006fe565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200030f576200030f62000afe565b808201808211156200030f576200030f62000afe565b634e487b7160e01b600052603260045260246000fd5b60008162000b6c5762000b6c62000afe565b506000190190565b61476d8062000b846000396000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c806369e2f0fb1161019d578063a22cb465116100e9578063d547741f116100a2578063e4e18f6d1161007c578063e4e18f6d146106af578063e8a3d485146106c2578063e985e9c5146106ca578063eea98768146106dd57600080fd5b8063d547741f14610676578063e192785914610689578063e4623c1b1461069c57600080fd5b8063a22cb46514610602578063a701281614610615578063b88d4fde14610628578063c87b56dd1461063b578063ca15c8731461064e578063d53913931461066157600080fd5b806391d14854116101565780639e2641a3116101305780639e2641a3146105c15780639f15d700146105d4578063a1448194146105e7578063a217fddf146105fa57600080fd5b806391d1485414610593578063938e3d7b146105a657806395d89b41146105b957600080fd5b806369e2f0fb1461052c5780636c0360eb1461053f57806370a082311461054757806374f16a811461055a578063885e7a081461056d5780639010d07c1461058057600080fd5b80632d2c5a8b1161025c57806342842e0e116102155780634f558e79116101ef5780634f558e79146104e057806355f804b3146104f3578063567e4075146105065780636352211e1461051957600080fd5b806342842e0e146104a757806342966c68146104ba578063439aed34146104cd57600080fd5b80632d2c5a8b146104335780632f2ff15d1461044657806331ae450b1461045957806336568abe1461046e5780633dd1eb611461048157806340c10f191461049457600080fd5b80631f8ebbd1116102ae5780631f8ebbd11461039b578063234af046146103a557806323b872dd146103b8578063248a9ca3146103cb57806329326f29146103ee5780632a55205a1461040157600080fd5b80628ad946146102f557806301ffc9a71461030a57806306fdde0314610332578063081812fc14610347578063095ea7b31461037257806318160ddd14610385575b600080fd5b61030861030336600461391b565b6106f0565b005b61031d61031836600461396b565b6107c6565b60405190151581526020015b60405180910390f35b61033a6107d7565b60405161032991906139d8565b61035a6103553660046139eb565b6107e6565b6040516001600160a01b039091168152602001610329565b610308610380366004613a1b565b610806565b61038d610961565b604051908152602001610329565b600160401b61038d565b6103086103b3366004613be7565b610978565b6103086103c6366004613c2f565b610999565b61038d6103d93660046139eb565b60009081526020819052604090206001015490565b60025461035a906001600160a01b031681565b61041461040f366004613c6b565b6109bb565b604080516001600160a01b039093168352602083019190915201610329565b610308610441366004613c8d565b610a69565b610308610454366004613d49565b610a8a565b610461610aaf565b6040516103299190613d75565b61030861047c366004613d49565b610b5d565b61030861048f366004613dc2565b610bd7565b6103086104a2366004613a1b565b610bfa565b6103086104b5366004613c2f565b610c1c565b6103086104c83660046139eb565b610c37565b6103086104db366004613df4565b610c6e565b61031d6104ee3660046139eb565b610c97565b610308610501366004613e87565b610ca2565b610308610514366004613a1b565b610cb9565b61035a6105273660046139eb565b610cdb565b61030861053a366004613dc2565b610cfb565b61033a610d1e565b61038d610555366004613dc2565b610dac565b610308610568366004613be7565b610dca565b61030861057b366004613ecf565b610dd3565b61035a61058e366004613c6b565b610de8565b61031d6105a1366004613d49565b610e07565b6103086105b4366004613e87565b610e30565b61033a610e47565b6103086105cf366004613be7565b610e51565b6103086105e2366004613a1b565b610e72565b6103086105f5366004613a1b565b610ecc565b61038d600081565b610308610610366004613f07565b610eee565b610308610623366004613f82565b61103f565b610308610636366004613fe6565b61109f565b61033a6106493660046139eb565b6110c8565b61038d61065c3660046139eb565b6110d3565b61038d6a4d494e5445525f524f4c4560a81b81565b610308610684366004613d49565b6110ea565b610308610697366004613c8d565b61110f565b6103086106aa366004614061565b611130565b6103086106bd366004613dc2565b61116e565b61033a611182565b61031d6106d83660046140a2565b61118f565b6103086106eb366004613a1b565b6111bf565b6106fd60208201826140cc565b905061070c60408301836140cc565b90501461072c5760405163359a1bc360e01b815260040160405180910390fd5b60005b61073c60408301836140cc565b90508110156107c2576107b06107556020840184613dc2565b61076260208501856140cc565b8481811061077257610772614115565b90506020020160208101906107879190613dc2565b61079460408601866140cc565b858181106107a4576107a4614115565b90506020020135610c1c565b806107ba81614141565b91505061072f565b5050565b60006107d182611427565b92915050565b60606107e1611432565b905090565b6000600160401b8210156107fd576107d1826114c4565b6107d1826114eb565b81333b1580159061088057506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa15801561085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e919061415a565b155b156108a55760405163f6fa4cbd60e01b81523360048201526024015b60405180910390fd5b6001600160a01b0381163b1580159061092957506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610903573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610927919061415a565b155b15610952576040516341b8d58160e11b81526001600160a01b038216600482015260240161089c565b61095c8383611576565b505050565b600060135461096e611596565b6107e19190614177565b6a4d494e5445525f524f4c4560a81b610990816115b2565b6107c2826115bc565b600160401b8110156109b05761095c83838361160b565b61095c83838361163b565b60008281526004602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a305750604080518082019091526003546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a4f906001600160601b03168761418a565b610a5991906141a1565b91519350909150505b9250929050565b6a4d494e5445525f524f4c4560a81b610a81816115b2565b6107c282611660565b600082815260208190526040902060010154610aa5816115b2565b61095c83836116af565b60606000610abc816110d3565b90506000816001600160401b03811115610ad857610ad8613a45565b604051908082528060200260200182016040528015610b01578160200160208202803683370190505b50905060005b82811015610b5657610b1a600082610de8565b828281518110610b2c57610b2c614115565b6001600160a01b039092166020928302919091019091015280610b4e81614141565b915050610b07565b5092915050565b6001600160a01b0381163314610bcd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161089c565b6107c282826116d1565b6000610be2816115b2565b6107c26a4d494e5445525f524f4c4560a81b83610a8a565b6a4d494e5445525f524f4c4560a81b610c12816115b2565b61095c83836116f3565b61095c8383836040518060200160405280600081525061109f565b610c42335b8261177a565b610c6257604051630247e3a960e01b81526004810182905260240161089c565b610c6b816117a3565b50565b6a4d494e5445525f524f4c4560a81b610c86816115b2565b610c918484846117f6565b50505050565b60006107d1826118c1565b6000610cad816115b2565b601661095c8382614243565b6a4d494e5445525f524f4c4560a81b610cd1816115b2565b61095c838361191e565b6000600160401b821015610cf2576107d182611928565b6107d182611988565b6000610d06816115b2565b6107c26a4d494e5445525f524f4c4560a81b836110ea565b60168054610d2b906141c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d57906141c3565b8015610da45780601f10610d7957610100808354040283529160200191610da4565b820191906000526020600020905b815481529060010190602001808311610d8757829003601f168201915b505050505081565b6000610db78261199c565b610dc083611a67565b6107d19190614177565b610c6b81611aed565b6000610dde816115b2565b61095c8383611b79565b6000828152600160205260408120610e009083611c33565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610e3b816115b2565b601561095c8382614243565b60606107e1611c3f565b6a4d494e5445525f524f4c4560a81b610e69816115b2565b6107c282611c4e565b6000610e7d82610cdb565b9050826001600160a01b0316816001600160a01b031614610ec357604051634fefd56160e01b8152600481018390526001600160a01b038216602482015260440161089c565b61095c82610c37565b6a4d494e5445525f524f4c4560a81b610ee4816115b2565b61095c8383611c9d565b81333b15801590610f6857506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f66919061415a565b155b15610f885760405163f6fa4cbd60e01b815233600482015260240161089c565b6001600160a01b0381163b1580159061100c57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100a919061415a565b155b15611035576040516341b8d58160e11b81526001600160a01b038216600482015260240161089c565b61095c8383611d0b565b6a4d494e5445525f524f4c4560a81b611057816115b2565b60005b848110156110975761108586868381811061107757611077614115565b9050602002013585856117f6565b8061108f81614141565b91505061105a565b505050505050565b600160401b8210156110bc576110b784848484611d15565b610c91565b610c9184848484611d48565b60606107d182611d6d565b60008181526001602052604081206107d190611dd3565b600082815260208190526040902060010154611105816115b2565b61095c83836116d1565b6a4d494e5445525f524f4c4560a81b611127816115b2565b6107c282611ddd565b60005b8181101561095c5761115c83838381811061115057611150614115565b90506020020135610c37565b8061116681614141565b915050611133565b6000611179816115b2565b6107c282611e2c565b60158054610d2b906141c3565b6001600160a01b03808316600090815260126020908152604080832093851683529290529081205460ff16610e00565b6a4d494e5445525f524f4c4560a81b6111d7816115b2565b61095c8383611f21565b6111eb8282610e07565b6107c2576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556112213390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e00836001600160a01b038416611f2b565b60606107d16001600160a01b03831660145b6060600061129b83600261418a565b6112a6906002614177565b6001600160401b038111156112bd576112bd613a45565b6040519080825280601f01601f1916602001820160405280156112e7576020820181803683370190505b509050600360fc1b8160008151811061130257611302614115565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061133157611331614115565b60200101906001600160f81b031916908160001a905350600061135584600261418a565b611360906001614177565b90505b60018111156113d8576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061139457611394614115565b1a60f81b8282815181106113aa576113aa614115565b60200101906001600160f81b031916908160001a90535060049490941c936113d181614302565b9050611363565b508315610e005760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161089c565b60006107d182611f7a565b6060600d8054611441906141c3565b80601f016020809104026020016040519081016040528092919081815260200182805461146d906141c3565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b5050505050905090565b60006114cf82611fba565b506000908152601160205260409020546001600160a01b031690565b60006114f6826118c1565b61155a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732315073693a20617070726f76656420717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161089c565b506000908152600a60205260409020546001600160a01b031690565b600160401b81101561158c576107c2828261200a565b6107c2828261211a565b60006115a0612222565b6115a861228c565b6107e19190614319565b610c6b81336122a0565b60005b81518110156107c25760008282815181106115dc576115dc614115565b602002602001015190506115f8816000015182602001516122f9565b508061160381614141565b9150506115bf565b61161433610c3c565b6116305760405162461bcd60e51b815260040161089c9061432c565b61095c83838361233a565b61164433610c3c565b6116305760405162461bcd60e51b815260040161089c90614379565b60005b81518110156107c257600082828151811061168057611680614115565b6020026020010151905061169c8160000151826020015161191e565b50806116a781614141565b915050611663565b6116b982826111e1565b600082815260016020526040902061095c9082611265565b6116db8282612541565b600082815260016020526040902061095c90826125a6565b600160401b811061171a5760405163b73c99f560e01b81526004810182905260240161089c565b600881901c600090815260146020526040902054600160ff83161b1615611757576040516305dcda1160e51b81526004810182905260240161089c565b61176182826125bb565b6013805490600061177183614141565b91905055505050565b6000600160401b821015611799576117928383612716565b90506107d1565b610e008383612775565b600160401b8110156117ed576117b88161283a565b600881901c60009081526014602052604081208054600160ff85161b17905560138054916117e583614302565b919050555050565b610c6b816128bd565b6127106001600160601b03821611156118215760405162461bcd60e51b815260040161089c906143cd565b6001600160a01b0382166118775760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d65746572730000000000604482015260640161089c565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600490529190942093519051909116600160a01b029116179055565b6000600160401b821015611915576000828152600f60205260409020546001600160a01b0316158015906107d15750600882901c600090815260146020526040902054600160ff84161b1615151592915050565b6107d1826128ff565b6107c28282612934565b6000818152600f60205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089c565b6000806119948361294e565b509392505050565b60006001600160a01b038216611a0a5760405162461bcd60e51b815260206004820152602d60248201527f4552433732315073693a2062616c616e636520717565727920666f722074686560448201526c207a65726f206164647265737360981b606482015260840161089c565b6000600160401b5b600954811015610b5657611a25816118c1565b15611a5757611a3381610cdb565b6001600160a01b0316846001600160a01b031603611a5757611a5482614141565b91505b611a6081614141565b9050611a12565b60006001600160a01b038216611ad15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161089c565b506001600160a01b031660009081526010602052604090205490565b60005b81518110156107c2576000828281518110611b0d57611b0d614115565b6020026020010151905060005b816020015151811015611b6457611b52826000015183602001518381518110611b4557611b45614115565b6020026020010151610e72565b80611b5c81614141565b915050611b1a565b50508080611b7190614141565b915050611af0565b6127106001600160601b0382161115611ba45760405162461bcd60e51b815260040161089c906143cd565b6001600160a01b038216611bfa5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640161089c565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600355565b6000610e0083836129e5565b6060600e8054611441906141c3565b60005b81518110156107c2576000828281518110611c6e57611c6e614115565b60200260200101519050611c8a81600001518260200151612a0f565b5080611c9581614141565b915050611c51565b600160401b8110611cc45760405163b73c99f560e01b81526004810182905260240161089c565b600881901c600090815260146020526040902054600160ff83161b1615611d01576040516305dcda1160e51b81526004810182905260240161089c565b6117618282612a50565b6107c28282612a6a565b611d20335b8361177a565b611d3c5760405162461bcd60e51b815260040161089c9061432c565b610c9184848484612a75565b611d5133611d1a565b611d3c5760405162461bcd60e51b815260040161089c90614379565b6060611d7882611fba565b6000611d82612a99565b90506000815111611da25760405180602001604052806000815250610e00565b80611dac84612aa8565b604051602001611dbd929190614417565b6040516020818303038152906040529392505050565b60006107d1825490565b60005b81518110156107c2576000828281518110611dfd57611dfd614115565b60200260200101519050611e1981600001518260200151611f21565b5080611e2481614141565b915050611de0565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611e77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9b919061415a565b611eb85760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6107c28282612b3a565b6000818152600183016020526040812054611f72575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b60006001600160e01b031982166380ac58cd60e01b1480611fab57506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612cb3565b611fc3816118c1565b610c6b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089c565b600061201582611928565b9050806001600160a01b0316836001600160a01b0316036120825760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161089c565b336001600160a01b038216148061209e575061209e813361118f565b6121105760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161089c565b61095c8383612cf3565b600061212582610cdb565b9050806001600160a01b0316836001600160a01b0316036121945760405162461bcd60e51b8152602060048201526024808201527f4552433732315073693a20617070726f76616c20746f2063757272656e74206f6044820152633bb732b960e11b606482015260840161089c565b336001600160a01b03821614806121b057506121b0813361118f565b6121105760405162461bcd60e51b815260206004820152603b60248201527f4552433732315073693a20617070726f76652063616c6c6572206973206e6f7460448201527f206f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000606482015260840161089c565b6009546000906701000000000000009082906122429060081c6001614177565b9050815b81811015612286576000818152600c602052604090205461226681612d13565b6122709086614177565b945050808061227e90614141565b915050612246565b50505090565b6000600160401b6009546107e19190614319565b6122aa8282610e07565b6107c2576122b78161127a565b6122c283602061128c565b6040516020016122d3929190614446565b60408051601f198184030181529082905262461bcd60e51b825261089c916004016139d8565b60005b815181101561095c576123288383838151811061231b5761231b614115565b6020026020010151611c9d565b8061233281614141565b9150506122fc565b82823332148015906123b557506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa15801561238f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b3919061415a565b155b156123d55760405163937db65f60e01b815233600482015260240161089c565b6001600160a01b0382163b1580159061245957506002546040516305a3b80960e01b81526001600160a01b038481166004830152909116906305a3b80990602401602060405180830381865afa158015612433573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612457919061415a565b155b156124825760405163f934453160e01b81526001600160a01b038316600482015260240161089c565b6001600160a01b0381163b1580159061250657506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa1580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612504919061415a565b155b1561252f57604051632a67242160e11b81526001600160a01b038216600482015260240161089c565b61253a858585612d32565b5050505050565b61254b8282610e07565b156107c2576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e00836001600160a01b038416612d54565b6001600160a01b0382166126115760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161089c565b61261a816118c1565b156126675760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161089c565b612670816118c1565b156126bd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161089c565b6001600160a01b038216600081815260106020908152604080832080546001019055848352600f90915280822080546001600160a01b031916841790555183929190600080516020614618833981519152908290a45050565b60008061272283611928565b9050806001600160a01b0316846001600160a01b031614806127495750612749818561118f565b8061276d5750836001600160a01b0316612762846107e6565b6001600160a01b0316145b949350505050565b6000612780826118c1565b6127e45760405162461bcd60e51b815260206004820152602f60248201527f4552433732315073693a206f70657261746f7220717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161089c565b60006127ef83610cdb565b9050806001600160a01b0316846001600160a01b0316148061282a5750836001600160a01b031661281f846107e6565b6001600160a01b0316145b8061276d575061276d818561118f565b600061284582611928565b905061285082611928565b600083815260116020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552601084528285208054600019019055878552600f90935281842080549091169055519293508492600080516020614618833981519152908390a45050565b60006128c882610cdb565b90506128d5600c83612e47565b60405182906000906001600160a01b03841690600080516020614618833981519152908390a45050565b600881901c6000908152600c6020526040812054600160ff1b60ff84161c161561292b57506000919050565b6107d182612e73565b6107c2828260405180602001604052806000815250612e92565b60008061295a836118c1565b6129bb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732315073693a206f776e657220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161089c565b6129c483612ed3565b6000818152600860205260409020546001600160a01b031694909350915050565b60008260000182815481106129fc576129fc614115565b9060005260206000200154905092915050565b60005b815181101561095c57612a3e83838381518110612a3157612a31614115565b60200260200101516116f3565b80612a4881614141565b915050612a12565b6107c2828260405180602001604052806000815250612ee0565b6107c2338383612eeb565b600160401b821015612a8d576110b784848484612fb9565b610c9184848484612fec565b606060168054611441906141c3565b60606000612ab583613005565b60010190506000816001600160401b03811115612ad457612ad4613a45565b6040519080825280601f01601f191660200182016040528015612afe576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612b0857509392505050565b6000612b4560095490565b905060008211612ba55760405162461bcd60e51b815260206004820152602560248201527f4552433732315073693a207175616e74697479206d7573742062652067726561604482015264074657220360dc1b606482015260840161089c565b6001600160a01b038316612c075760405162461bcd60e51b815260206004820152602360248201527f4552433732315073693a206d696e7420746f20746865207a65726f206164647260448201526265737360e81b606482015260840161089c565b8160096000828254612c199190614177565b9091555050600081815260086020526040902080546001600160a01b0319166001600160a01b038516179055612c50600582612e47565b600080612c5d8484614177565b90506001600160a01b038516915082826000600080516020614618833981519152600080a4600183015b818114612cad5780836000600080516020614618833981519152600080a4600101612c87565b5061253a565b60006001600160e01b031982166380ac58cd60e01b1480612ce457506001600160e01b03198216635b5e139f60e01b145b806107d157506107d1826130dd565b600160401b811015612d09576107c28282613102565b6107c28282613170565b60005b8115612d2d57600019820190911690600101612d16565b919050565b600160401b811015612d495761095c8383836131a5565b61095c8383836132f7565b60008181526001830160205260408120548015612e3d576000612d78600183614319565b8554909150600090612d8c90600190614319565b9050818114612df1576000866000018281548110612dac57612dac614115565b9060005260206000200154905080876000018481548110612dcf57612dcf614115565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e0257612e026144bb565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b600881901c600090815260209290925260409091208054600160ff1b60ff9093169290921c9091179055565b6000612e7e60095490565b821080156107d1575050600160401b111590565b6000612e9d60095490565b9050612ea98484612b3a565b612eb76000858386866134cf565b610c915760405162461bcd60e51b815260040161089c906144d1565b60006107d1600583613606565b61095c8383836136fe565b816001600160a01b0316836001600160a01b031603612f4c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161089c565b6001600160a01b03838116600081815260126020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612fc484848461233a565b612fd084848484613731565b610c915760405162461bcd60e51b815260040161089c90614526565b612ff784848461233a565b612eb78484846001856134cf565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106130445772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613070576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061308e57662386f26fc10000830492506010015b6305f5e10083106130a6576305f5e100830492506008015b61271083106130ba57612710830492506004015b606483106130cc576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b0319821663152a902d60e11b14806107d157506107d18261382a565b600081815260116020526040902080546001600160a01b0319166001600160a01b038416908117909155819061313782611928565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600a6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061313782610cdb565b826001600160a01b03166131b882611928565b6001600160a01b0316146131de5760405162461bcd60e51b815260040161089c90614578565b6001600160a01b0382166132405760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161089c565b826001600160a01b031661325382611928565b6001600160a01b0316146132795760405162461bcd60e51b815260040161089c90614578565b600081815260116020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260108552838620805460001901905590871680865283862080546001019055868652600f909452828520805490921684179091559051849360008051602061461883398151915291a4505050565b6000806133038361294e565b91509150846001600160a01b0316826001600160a01b03161461337d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732315073693a207472616e73666572206f6620746f6b656e2074686160448201526b3a1034b9903737ba1037bbb760a11b606482015260840161089c565b6001600160a01b0384166133e35760405162461bcd60e51b815260206004820152602760248201527f4552433732315073693a207472616e7366657220746f20746865207a65726f206044820152666164647265737360c81b606482015260840161089c565b6133ee600084612cf3565b60006133fb846001614177565b600881901c600090815260056020526040902054909150600160ff1b60ff83161c1615801561342b575060095481105b1561346257600081815260086020526040902080546001600160a01b0319166001600160a01b038816179055613462600582612e47565b600084815260086020526040902080546001600160a01b0319166001600160a01b03871617905581841461349b5761349b600585612e47565b83856001600160a01b0316876001600160a01b031660008051602061461883398151915260405160405180910390a4611097565b60006001600160a01b0385163b156135f957506001835b6134f08486614177565b8110156135f357604051630a85bd0160e11b81526001600160a01b0387169063150b7a02906135299033908b90869089906004016145bd565b6020604051808303816000875af1925050508015613564575060408051601f3d908101601f19168201909252613561918101906145fa565b60015b6135c1573d808015613592576040519150601f19603f3d011682016040523d82523d6000602084013e613597565b606091505b5080516000036135b95760405162461bcd60e51b815260040161089c906144d1565b805181602001fd5b8280156135de57506001600160e01b03198116630a85bd0160e11b145b925050806135eb81614141565b9150506134e6565b506135fd565b5060015b95945050505050565b600881901c60008181526020849052604081205490919060ff808516919082181c80156136485761363681613835565b60ff168203600884901b1793506136f5565b600083116136b55760405162461bcd60e51b815260206004820152603460248201527f4269744d6170733a205468652073657420626974206265666f7265207468652060448201527334b73232bc103237b2b9b713ba1032bc34b9ba1760611b606482015260840161089c565b5060001990910160008181526020869052604090205490919080156136f0576136dd81613835565b60ff0360ff16600884901b1793506136f5565b613648565b50505092915050565b613708838361389f565b6137156000848484613731565b61095c5760405162461bcd60e51b815260040161089c90614526565b60006001600160a01b0384163b1561381f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906137759033908990889088906004016145bd565b6020604051808303816000875af19250505080156137b0575060408051601f3d908101601f191682019092526137ad918101906145fa565b60015b613805573d8080156137de576040519150601f19603f3d011682016040523d82523d6000602084013e6137e3565b606091505b5080516000036135b95760405162461bcd60e51b815260040161089c90614526565b6001600160e01b031916630a85bd0160e11b14905061276d565b506001949350505050565b60006107d1826138a9565b60006040518061012001604052806101008152602001614638610100913960f87e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff61387e856138ce565b02901c8151811061389157613891614115565b016020015160f81c92915050565b6107c282826125bb565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d1826138e6565b60008082116138dc57600080fd5b5060008190031690565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b60006020828403121561392d57600080fd5b81356001600160401b0381111561394357600080fd5b820160608185031215610e0057600080fd5b6001600160e01b031981168114610c6b57600080fd5b60006020828403121561397d57600080fd5b8135610e0081613955565b60005b838110156139a357818101518382015260200161398b565b50506000910152565b600081518084526139c4816020860160208601613988565b601f01601f19169290920160200192915050565b602081526000610e0060208301846139ac565b6000602082840312156139fd57600080fd5b5035919050565b80356001600160a01b0381168114612d2d57600080fd5b60008060408385031215613a2e57600080fd5b613a3783613a04565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a7d57613a7d613a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613aab57613aab613a45565b604052919050565b60006001600160401b03821115613acc57613acc613a45565b5060051b60200190565b6000613ae9613ae484613ab3565b613a83565b8381529050602080820190600585811b850187811115613b0857600080fd5b855b81811015613bdb5780356001600160401b0380821115613b2a5760008081fd5b908801906040828c031215613b3f5760008081fd5b613b47613a5b565b613b5083613a04565b81528683013582811115613b645760008081fd5b8084019350508b601f840112613b7c57600091508182fd5b82359150613b8c613ae483613ab3565b82815291861b8301870191878101908d841115613ba95760008081fd5b938801935b83851015613bc757843582529388019390880190613bae565b828901525087525050938301938301613b0a565b50505050509392505050565b600060208284031215613bf957600080fd5b81356001600160401b03811115613c0f57600080fd5b8201601f81018413613c2057600080fd5b61276d84823560208401613ad6565b600080600060608486031215613c4457600080fd5b613c4d84613a04565b9250613c5b60208501613a04565b9150604084013590509250925092565b60008060408385031215613c7e57600080fd5b50508035926020909101359150565b60006020808385031215613ca057600080fd5b82356001600160401b03811115613cb657600080fd5b8301601f81018513613cc757600080fd5b8035613cd5613ae482613ab3565b81815260069190911b82018301908381019087831115613cf457600080fd5b928401925b82841015613d3e5760408489031215613d125760008081fd5b613d1a613a5b565b613d2385613a04565b81528486013586820152825260409093019290840190613cf9565b979650505050505050565b60008060408385031215613d5c57600080fd5b82359150613d6c60208401613a04565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613db65783516001600160a01b031683529284019291840191600101613d91565b50909695505050505050565b600060208284031215613dd457600080fd5b610e0082613a04565b80356001600160601b0381168114612d2d57600080fd5b600080600060608486031215613e0957600080fd5b83359250613e1960208501613a04565b9150613e2760408501613ddd565b90509250925092565b60006001600160401b03831115613e4957613e49613a45565b613e5c601f8401601f1916602001613a83565b9050828152838383011115613e7057600080fd5b828260208301376000602084830101529392505050565b600060208284031215613e9957600080fd5b81356001600160401b03811115613eaf57600080fd5b8201601f81018413613ec057600080fd5b61276d84823560208401613e30565b60008060408385031215613ee257600080fd5b613eeb83613a04565b9150613d6c60208401613ddd565b8015158114610c6b57600080fd5b60008060408385031215613f1a57600080fd5b613f2383613a04565b91506020830135613f3381613ef9565b809150509250929050565b60008083601f840112613f5057600080fd5b5081356001600160401b03811115613f6757600080fd5b6020830191508360208260051b8501011115610a6257600080fd5b60008060008060608587031215613f9857600080fd5b84356001600160401b03811115613fae57600080fd5b613fba87828801613f3e565b9095509350613fcd905060208601613a04565b9150613fdb60408601613ddd565b905092959194509250565b60008060008060808587031215613ffc57600080fd5b61400585613a04565b935061401360208601613a04565b92506040850135915060608501356001600160401b0381111561403557600080fd5b8501601f8101871361404657600080fd5b61405587823560208401613e30565b91505092959194509250565b6000806020838503121561407457600080fd5b82356001600160401b0381111561408a57600080fd5b61409685828601613f3e565b90969095509350505050565b600080604083850312156140b557600080fd5b6140be83613a04565b9150613d6c60208401613a04565b6000808335601e198436030181126140e357600080fd5b8301803591506001600160401b038211156140fd57600080fd5b6020019150600581901b3603821315610a6257600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016141535761415361412b565b5060010190565b60006020828403121561416c57600080fd5b8151610e0081613ef9565b808201808211156107d1576107d161412b565b80820281158282048414176107d1576107d161412b565b6000826141be57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806141d757607f821691505b6020821081036141f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561095c57600081815260208120601f850160051c810160208610156142245750805b601f850160051c820191505b8181101561109757828155600101614230565b81516001600160401b0381111561425c5761425c613a45565b6142708161426a84546141c3565b846141fd565b602080601f8311600181146142a5576000841561428d5750858301515b600019600386901b1c1916600185901b178555611097565b600085815260208120601f198616915b828110156142d4578886015182559484019460019091019084016142b5565b50858210156142f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000816143115761431161412b565b506000190190565b818103818111156107d1576107d161412b565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526034908201527f4552433732315073693a207472616e736665722063616c6c6572206973206e6f6040820152731d081bdddb995c881b9bdc88185c1c1c9bdd995960621b606082015260800190565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60008351614429818460208801613988565b83519083019061443d818360208801613988565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161447e816017850160208801613988565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516144af816028840160208801613988565b01602801949350505050565b634e487b7160e01b600052603160045260246000fd5b60208082526035908201527f4552433732315073693a207472616e7366657220746f206e6f6e20455243373260408201527418a932b1b2b4bb32b91034b6b83632b6b2b73a32b960591b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906145f0908301846139ac565b9695505050505050565b60006020828403121561460c57600080fd5b8151610e008161395556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0001020903110a19042112290b311a3905412245134d2a550c5d32651b6d3a7506264262237d468514804e8d2b95569d0d495ea533a966b11c886eb93bc176c9071727374353637324837e9b47af86c7155181ad4fd18ed32c9096db57d59ee30e2e4a6a5f92a6be3498aae067ddb2eb1d5989b56fd7baf33ca0c2ee77e5caf7ff0810182028303840444c545c646c7425617c847f8c949c48a4a8b087b8c0c816365272829aaec650acd0d28fdad4e22d6991bd97dfdcea58b4d6f29fede4f6fe0f1f2f3f4b5b6b607b8b93a3a7b7bf357199c5abcfd9e168bcdee9b3f1ecf5fd1e3e5a7a8aa2b670c4ced8bbe8f0f4fc3d79a1c3cde7effb78cce6facbf9f8a264697066735822122069f1e7de30c125031cf14dee918b767ccf0b99363cb74ee4a00c68cea975db1b64736f6c63430008110033";
32236
+ const _bytecode$2 = "0x61016060405260006013553480156200001757600080fd5b5060405162005dfc38038062005dfc8339810160408190526200003a91620006cb565b8787878787878787868681604051806040016040528060018152602001603160f81b81525083838181838381600690816200007691906200085e565b5060076200008582826200085e565b50506801000000000000000060095550600d620000a383826200085e565b50600e620000b282826200085e565b5050505050620000d2601583620001e160201b620012111790919060201c565b61012052620000ef816016620001e1602090811b6200121117901c565b61014052815160208084019190912060e052815190820120610100524660a0526200017d60e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0525062000196905060008962000231565b620001a2828262000274565b620001ad8362000379565b6019620001bb86826200085e565b506018620001ca85826200085e565b5050505050505050505050505050505050620009a8565b60006020835110156200020157620001f98362000472565b90506200022b565b826200021883620004b560201b620012421760201c565b906200022590826200085e565b5060ff90505b92915050565b620002488282620004b860201b620012451760201c565b60008281526001602090815260409091206200026f918390620012c962000559821b17901c565b505050565b6127106001600160601b0382161115620002e85760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620003405760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401620002df565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600355565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015620003c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003eb91906200092a565b620004095760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b600080829050601f81511115620004a0578260405163305a27a960e01b8152600401620002df91906200094e565b8051620004ad8262000983565b179392505050565b90565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000555576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620005143390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000570836001600160a01b03841662000577565b9392505050565b6000818152600183016020526040812054620005c0575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200022b565b5060006200022b565b80516001600160a01b0381168114620005e157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000619578181015183820152602001620005ff565b50506000910152565b600082601f8301126200063457600080fd5b81516001600160401b0380821115620006515762000651620005e6565b604051601f8301601f19908116603f011681019082821181831017156200067c576200067c620005e6565b816040528381528660208588010111156200069657600080fd5b620006a9846020830160208901620005fc565b9695505050505050565b80516001600160601b0381168114620005e157600080fd5b600080600080600080600080610100898b031215620006e957600080fd5b620006f489620005c9565b60208a01519098506001600160401b03808211156200071257600080fd5b620007208c838d0162000622565b985060408b01519150808211156200073757600080fd5b620007458c838d0162000622565b975060608b01519150808211156200075c57600080fd5b6200076a8c838d0162000622565b965060808b01519150808211156200078157600080fd5b50620007908b828c0162000622565b945050620007a160a08a01620005c9565b9250620007b160c08a01620005c9565b9150620007c160e08a01620006b3565b90509295985092959890939650565b600181811c90821680620007e557607f821691505b6020821081036200080657634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026f57600081815260208120601f850160051c81016020861015620008355750805b601f850160051c820191505b81811015620008565782815560010162000841565b505050505050565b81516001600160401b038111156200087a576200087a620005e6565b62000892816200088b8454620007d0565b846200080c565b602080601f831160018114620008ca5760008415620008b15750858301515b600019600386901b1c1916600185901b17855562000856565b600085815260208120601f198616915b82811015620008fb57888601518255948401946001909101908401620008da565b50858210156200091a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200093d57600080fd5b815180151581146200057057600080fd5b60208152600082518060208401526200096f816040850160208701620005fc565b601f01601f19169190910160400192915050565b80516020808301519190811015620008065760001960209190910360031b1b16919050565b60805160a05160c05160e0516101005161012051610140516153f962000a036000396000610db301526000610d88015260006118740152600061184c015260006117a7015260006117d1015260006117fb01526153f96000f3fe608060405234801561001057600080fd5b506004361061035c5760003560e01c806369e2f0fb116101d3578063a217fddf11610104578063d547741f116100a2578063e4e18f6d1161007c578063e4e18f6d14610771578063e8a3d48514610784578063e985e9c51461078c578063eea987681461079f57600080fd5b8063d547741f14610738578063e19278591461074b578063e4623c1b1461075e57600080fd5b8063b88d4fde116100de578063b88d4fde146106ea578063c87b56dd146106fd578063ca15c87314610710578063d53913931461072357600080fd5b8063a217fddf146106bc578063a22cb465146106c4578063a7012816146106d757600080fd5b80639010d07c1161017157806395d89b411161014b57806395d89b411461067b5780639e2641a3146106835780639f15d70014610696578063a1448194146106a957600080fd5b80639010d07c1461064257806391d1485414610655578063938e3d7b1461066857600080fd5b8063745a41bc116101ad578063745a41bc146105ee57806374f16a811461060157806384b0196e14610614578063885e7a081461062f57600080fd5b806369e2f0fb146105c05780636c0360eb146105d357806370a08231146105db57600080fd5b80632d2c5a8b116102ad57806342842e0e1161024b5780634f558e79116102255780634f558e791461057457806355f804b314610587578063567e40751461059a5780636352211e146105ad57600080fd5b806342842e0e1461053b57806342966c681461054e578063439aed341461056157600080fd5b80633644e515116102875780633644e515146104fa57806336568abe146105025780633dd1eb611461051557806340c10f191461052857600080fd5b80632d2c5a8b146104bf5780632f2ff15d146104d257806331ae450b146104e557600080fd5b806318160ddd1161031a57806323b872dd116102f457806323b872dd14610444578063248a9ca31461045757806329326f291461047a5780632a55205a1461048d57600080fd5b806318160ddd1461041f5780631f8ebbd114610427578063234af0461461043157600080fd5b80628ad9461461036157806301ffc9a71461037657806306fdde031461039e578063081812fc146103b3578063095ea7b3146103de578063141a468c146103f1575b600080fd5b61037461036f36600461444e565b6107b2565b005b61038961038436600461449e565b610888565b60405190151581526020015b60405180910390f35b6103a6610899565b604051610395919061450b565b6103c66103c136600461451e565b6108a8565b6040516001600160a01b039091168152602001610395565b6103746103ec36600461454e565b6108c8565b6104116103ff36600461451e565b60009081526017602052604090205490565b604051908152602001610395565b6104116108e8565b600160401b610411565b61037461043f36600461471a565b6108ff565b610374610452366004614762565b610920565b61041161046536600461451e565b60009081526020819052604090206001015490565b6002546103c6906001600160a01b031681565b6104a061049b36600461479e565b610947565b604080516001600160a01b039093168352602083019190915201610395565b6103746104cd3660046147c0565b6109f5565b6103746104e036600461487c565b610a16565b6104ed610a3b565b60405161039591906148a8565b610411610ae9565b61037461051036600461487c565b610af3565b6103746105233660046148f5565b610b72565b61037461053636600461454e565b610b95565b610374610549366004614762565b610bb7565b61037461055c36600461451e565b610bd2565b61037461056f366004614927565b610c09565b61038961058236600461451e565b610c32565b6103746105953660046149ba565b610c3d565b6103746105a836600461454e565b610c54565b6103c66105bb36600461451e565b610c76565b6103746105ce3660046148f5565b610c96565b6103a6610cb9565b6104116105e93660046148f5565b610d47565b6103746105fc366004614a22565b610d65565b61037461060f36600461471a565b610d71565b61061c610d7a565b6040516103959796959493929190614a82565b61037461063d366004614b18565b610e03565b6103c661065036600461479e565b610e18565b61038961066336600461487c565b610e37565b6103746106763660046149ba565b610e60565b6103a6610e77565b61037461069136600461471a565b610e81565b6103746106a436600461454e565b610ea2565b6103746106b736600461454e565b610efc565b610411600081565b6103746106d2366004614b50565b610f1e565b6103746106e5366004614bcb565b61106f565b6103746106f8366004614c2f565b6110cf565b6103a661070b36600461451e565b6110f8565b61041161071e36600461451e565b611103565b6104116a4d494e5445525f524f4c4560a81b81565b61037461074636600461487c565b61111a565b6103746107593660046147c0565b61113f565b61037461076c366004614c7e565b611160565b61037461077f3660046148f5565b61119e565b6103a66111b2565b61038961079a366004614cbf565b6111bf565b6103746107ad36600461454e565b6111ef565b6107bf6020820182614ce9565b90506107ce6040830183614ce9565b9050146107ee5760405163359a1bc360e01b815260040160405180910390fd5b60005b6107fe6040830183614ce9565b90508110156108845761087261081760208401846148f5565b6108246020850185614ce9565b8481811061083457610834614d32565b905060200201602081019061084991906148f5565b6108566040860186614ce9565b8581811061086657610866614d32565b90506020020135610bb7565b8061087c81614d5e565b9150506107f1565b5050565b6000610893826112de565b92915050565b60606108a3611303565b905090565b6000600160401b8210156108bf5761089382611395565b610893826113bc565b600160401b8110156108de576108848282611447565b6108848282611557565b60006013546108f561165f565b6108a39190614d77565b6a4d494e5445525f524f4c4560a81b6109178161167b565b61088482611685565b600160401b81101561093c576109378383836116d4565b505050565b610937838383611704565b60008281526004602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282019290925282916109bc5750604080518082019091526003546001600160a01b0381168252600160a01b90046001600160601b031660208201525b6020810151600090612710906109db906001600160601b031687614d8a565b6109e59190614da1565b91519350909150505b9250929050565b6a4d494e5445525f524f4c4560a81b610a0d8161167b565b61088482611729565b600082815260208190526040902060010154610a318161167b565b6109378383611778565b60606000610a4881611103565b90506000816001600160401b03811115610a6457610a64614578565b604051908082528060200260200182016040528015610a8d578160200160208202803683370190505b50905060005b82811015610ae257610aa6600082610e18565b828281518110610ab857610ab8614d32565b6001600160a01b039092166020928302919091019091015280610ada81614d5e565b915050610a93565b5092915050565b60006108a361179a565b6001600160a01b0381163314610b685760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b61088482826118c5565b6000610b7d8161167b565b6108846a4d494e5445525f524f4c4560a81b83610a16565b6a4d494e5445525f524f4c4560a81b610bad8161167b565b61093783836118e7565b610937838383604051806020016040528060008152506110cf565b610bdd335b8261196e565b610bfd57604051630247e3a960e01b815260048101829052602401610b5f565b610c0681611990565b50565b6a4d494e5445525f524f4c4560a81b610c218161167b565b610c2c8484846119e3565b50505050565b600061089382611aae565b6000610c488161167b565b60196109378382614e43565b6a4d494e5445525f524f4c4560a81b610c6c8161167b565b6109378383611b0b565b6000600160401b821015610c8d5761089382611b15565b61089382611b75565b6000610ca18161167b565b6108846a4d494e5445525f524f4c4560a81b8361111a565b60198054610cc690614dc3565b80601f0160208091040260200160405190810160405280929190818152602001828054610cf290614dc3565b8015610d3f5780601f10610d1457610100808354040283529160200191610d3f565b820191906000526020600020905b815481529060010190602001808311610d2257829003601f168201915b505050505081565b6000610d5282611b89565b610d5b83611c54565b6108939190614d77565b610c2c84848484611cda565b610c0681611dc3565b600060608082808083610dae7f00000000000000000000000000000000000000000000000000000000000000006015611e4f565b610dd97f00000000000000000000000000000000000000000000000000000000000000006016611e4f565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000610e0e8161167b565b6109378383611ef3565b6000828152600160205260408120610e309083611fad565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610e6b8161167b565b60186109378382614e43565b60606108a3611fb9565b6a4d494e5445525f524f4c4560a81b610e998161167b565b61088482611fc8565b6000610ead82610c76565b9050826001600160a01b0316816001600160a01b031614610ef357604051634fefd56160e01b8152600481018390526001600160a01b0382166024820152604401610b5f565b61093782610bd2565b6a4d494e5445525f524f4c4560a81b610f148161167b565b6109378383612017565b81333b15801590610f9857506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa158015610f72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f969190614f02565b155b15610fb85760405163f6fa4cbd60e01b8152336004820152602401610b5f565b6001600160a01b0381163b1580159061103c57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015611016573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103a9190614f02565b155b15611065576040516341b8d58160e11b81526001600160a01b0382166004820152602401610b5f565b6109378383612085565b6a4d494e5445525f524f4c4560a81b6110878161167b565b60005b848110156110c7576110b58686838181106110a7576110a7614d32565b9050602002013585856119e3565b806110bf81614d5e565b91505061108a565b505050505050565b600160401b8210156110ec576110e78484848461208f565b610c2c565b610c2c848484846120c2565b6060610893826120e7565b60008181526001602052604081206108939061214d565b6000828152602081905260409020600101546111358161167b565b61093783836118c5565b6a4d494e5445525f524f4c4560a81b6111578161167b565b61088482612157565b60005b818110156109375761118c83838381811061118057611180614d32565b90506020020135610bd2565b8061119681614d5e565b915050611163565b60006111a98161167b565b610884826121a6565b60188054610cc690614dc3565b6001600160a01b03808316600090815260126020908152604080832093851683529290529081205460ff16610e30565b6a4d494e5445525f524f4c4560a81b6112078161167b565b610937838361229b565b600060208351101561122d57611226836122a5565b9050610893565b816112388482614e43565b5060ff9050610893565b90565b61124f8282610e37565b610884576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556112853390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e30836001600160a01b0384166122e3565b60006001600160e01b03198216635604e22560e01b1480610893575061089382612332565b6060600d805461131290614dc3565b80601f016020809104026020016040519081016040528092919081815260200182805461133e90614dc3565b801561138b5780601f106113605761010080835404028352916020019161138b565b820191906000526020600020905b81548152906001019060200180831161136e57829003601f168201915b5050505050905090565b60006113a08261233d565b506000908152601160205260409020546001600160a01b031690565b60006113c782611aae565b61142b5760405162461bcd60e51b815260206004820152602f60248201527f4552433732315073693a20617070726f76656420717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610b5f565b506000908152600a60205260409020546001600160a01b031690565b600061145282611b15565b9050806001600160a01b0316836001600160a01b0316036114bf5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610b5f565b336001600160a01b03821614806114db57506114db81336111bf565b61154d5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610b5f565b610937838361238d565b600061156282610c76565b9050806001600160a01b0316836001600160a01b0316036115d15760405162461bcd60e51b8152602060048201526024808201527f4552433732315073693a20617070726f76616c20746f2063757272656e74206f6044820152633bb732b960e11b6064820152608401610b5f565b336001600160a01b03821614806115ed57506115ed81336111bf565b61154d5760405162461bcd60e51b815260206004820152603b60248201527f4552433732315073693a20617070726f76652063616c6c6572206973206e6f7460448201527f206f776e6572206e6f7220617070726f76656420666f7220616c6c00000000006064820152608401610b5f565b60006116696124de565b611671612548565b6108a39190614f1f565b610c06813361255c565b60005b81518110156108845760008282815181106116a5576116a5614d32565b602002602001015190506116c1816000015182602001516125b5565b50806116cc81614d5e565b915050611688565b6116dd33610bd7565b6116f95760405162461bcd60e51b8152600401610b5f90614f32565b6109378383836125f6565b61170d33610bd7565b6116f95760405162461bcd60e51b8152600401610b5f90614f7f565b60005b815181101561088457600082828151811061174957611749614d32565b6020026020010151905061176581600001518260200151611b0b565b508061177081614d5e565b91505061172c565b6117828282611245565b600082815260016020526040902061093790826112c9565b6000306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480156117f357507f000000000000000000000000000000000000000000000000000000000000000046145b1561181d57507f000000000000000000000000000000000000000000000000000000000000000090565b6108a3604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6118cf82826127fd565b60008281526001602052604090206109379082612862565b600160401b811061190e5760405163b73c99f560e01b815260048101829052602401610b5f565b600881901c600090815260146020526040902054600160ff83161b161561194b576040516305dcda1160e51b815260048101829052602401610b5f565b6119558282612877565b6013805490600061196583614d5e565b91905055505050565b6000600160401b8210156119865761122683836129d2565b610e308383612a31565b600160401b8110156119da576119a581612af6565b600881901c60009081526014602052604081208054600160ff85161b17905560138054916119d283614fd3565b919050555050565b610c0681612b79565b6127106001600160601b0382161115611a0e5760405162461bcd60e51b8152600401610b5f90614fea565b6001600160a01b038216611a645760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610b5f565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600490529190942093519051909116600160a01b029116179055565b6000600160401b821015611b02576000828152600f60205260409020546001600160a01b0316158015906108935750600882901c600090815260146020526040902054600160ff84161b1615151592915050565b61089382612bbb565b6108848282612bf0565b6000818152600f60205260408120546001600160a01b0316806108935760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b5f565b600080611b8183612c0a565b509392505050565b60006001600160a01b038216611bf75760405162461bcd60e51b815260206004820152602d60248201527f4552433732315073693a2062616c616e636520717565727920666f722074686560448201526c207a65726f206164647265737360981b6064820152608401610b5f565b6000600160401b5b600954811015610ae257611c1281611aae565b15611c4457611c2081610c76565b6001600160a01b0316846001600160a01b031603611c4457611c4182614d5e565b91505b611c4d81614d5e565b9050611bff565b60006001600160a01b038216611cbe5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610b5f565b506001600160a01b031660009081526010602052604090205490565b42821015611cfb5760405163068568f360e21b815260040160405180910390fd5b6000611d08858585612ca1565b9050611d1d611d1685610c76565b8284612d7a565b15611d3257611d2c858561238d565b50610c2c565b60008251604003611d7957611d7282611d4e8560006020612e84565b611d5790615034565b611d648660206040612e84565b611d6d90615034565b612f91565b9050611da5565b8251604103611d8c57611d728284612fae565b604051638baa579f60e01b815260040160405180910390fd5b611daf8186612fca565b15611d8c57611dbe868661238d565b6110c7565b60005b8151811015610884576000828281518110611de357611de3614d32565b6020026020010151905060005b816020015151811015611e3a57611e28826000015183602001518381518110611e1b57611e1b614d32565b6020026020010151610ea2565b80611e3281614d5e565b915050611df0565b50508080611e4790614d5e565b915050611dc6565b606060ff8314611e625761122683612fe9565b818054611e6e90614dc3565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9a90614dc3565b8015611ee75780601f10611ebc57610100808354040283529160200191611ee7565b820191906000526020600020905b815481529060010190602001808311611eca57829003601f168201915b50505050509050610893565b6127106001600160601b0382161115611f1e5760405162461bcd60e51b8152600401610b5f90614fea565b6001600160a01b038216611f745760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610b5f565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600355565b6000610e308383613028565b6060600e805461131290614dc3565b60005b8151811015610884576000828281518110611fe857611fe8614d32565b6020026020010151905061200481600001518260200151613052565b508061200f81614d5e565b915050611fcb565b600160401b811061203e5760405163b73c99f560e01b815260048101829052602401610b5f565b600881901c600090815260146020526040902054600160ff83161b161561207b576040516305dcda1160e51b815260048101829052602401610b5f565b6119558282613093565b61088482826130ad565b61209a335b8361196e565b6120b65760405162461bcd60e51b8152600401610b5f90614f32565b610c2c848484846130b8565b6120cb33612094565b6120b65760405162461bcd60e51b8152600401610b5f90614f7f565b60606120f28261233d565b60006120fc6130dc565b9050600081511161211c5760405180602001604052806000815250610e30565b80612126846130eb565b604051602001612137929190615058565b6040516020818303038152906040529392505050565b6000610893825490565b60005b815181101561088457600082828151811061217757612177614d32565b602002602001015190506121938160000151826020015161229b565b508061219e81614d5e565b91505061215a565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156121f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122159190614f02565b6122325760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b610884828261317d565b600080829050601f815111156122d0578260405163305a27a960e01b8152600401610b5f919061450b565b80516122db82615034565b179392505050565b600081815260018301602052604081205461232a57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610893565b506000610893565b6000610893826132f6565b61234681611aae565b610c065760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610b5f565b81333b1580159061240757506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa1580156123e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124059190614f02565b155b156124275760405163f6fa4cbd60e01b8152336004820152602401610b5f565b6001600160a01b0381163b158015906124ab57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015612485573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124a99190614f02565b155b156124d4576040516341b8d58160e11b81526001600160a01b0382166004820152602401610b5f565b6109378383613336565b6009546000906701000000000000009082906124fe9060081c6001614d77565b9050815b81811015612542576000818152600c602052604090205461252281613356565b61252c9086614d77565b945050808061253a90614d5e565b915050612502565b50505090565b6000600160401b6009546108a39190614f1f565b6125668282610e37565b6108845761257381613375565b61257e836020613387565b60405160200161258f929190615087565b60408051601f198184030181529082905262461bcd60e51b8252610b5f9160040161450b565b60005b8151811015610937576125e4838383815181106125d7576125d7614d32565b6020026020010151612017565b806125ee81614d5e565b9150506125b8565b828233321480159061267157506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa15801561264b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266f9190614f02565b155b156126915760405163937db65f60e01b8152336004820152602401610b5f565b6001600160a01b0382163b1580159061271557506002546040516305a3b80960e01b81526001600160a01b038481166004830152909116906305a3b80990602401602060405180830381865afa1580156126ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127139190614f02565b155b1561273e5760405163f934453160e01b81526001600160a01b0383166004820152602401610b5f565b6001600160a01b0381163b158015906127c257506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa15801561279c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127c09190614f02565b155b156127eb57604051632a67242160e11b81526001600160a01b0382166004820152602401610b5f565b6127f6858585613522565b5050505050565b6128078282610e37565b15610884576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e30836001600160a01b03841661354c565b6001600160a01b0382166128cd5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b5f565b6128d681611aae565b156129235760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b5f565b61292c81611aae565b156129795760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b5f565b6001600160a01b038216600081815260106020908152604080832080546001019055848352600f90915280822080546001600160a01b0319168417905551839291906000805160206152a4833981519152908290a45050565b6000806129de83611b15565b9050806001600160a01b0316846001600160a01b03161480612a055750612a0581856111bf565b80612a295750836001600160a01b0316612a1e846108a8565b6001600160a01b0316145b949350505050565b6000612a3c82611aae565b612aa05760405162461bcd60e51b815260206004820152602f60248201527f4552433732315073693a206f70657261746f7220717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610b5f565b6000612aab83610c76565b9050806001600160a01b0316846001600160a01b03161480612ae65750836001600160a01b0316612adb846108a8565b6001600160a01b0316145b80612a295750612a2981856111bf565b6000612b0182611b15565b9050612b0c82611b15565b600083815260116020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552601084528285208054600019019055878552600f909352818420805490911690555192935084926000805160206152a4833981519152908390a45050565b6000612b8482610c76565b9050612b91600c8361363f565b60405182906000906001600160a01b038416906000805160206152a4833981519152908390a45050565b600881901c6000908152600c6020526040812054600160ff1b60ff84161c1615612be757506000919050565b6108938261366b565b61088482826040518060200160405280600081525061368a565b600080612c1683611aae565b612c775760405162461bcd60e51b815260206004820152602c60248201527f4552433732315073693a206f776e657220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b5f565b612c80836136cb565b6000818152600860205260409020546001600160a01b031694909350915050565b6000612a29604051602001612d0f90660a0cae4dad2e8560cb1b81527f61646472657373207370656e6465722c75696e7432353620746f6b656e49642c60078201527f75696e74323536206e6f6e63652c75696e7432353620646561646c696e652900602782015260460190565b60408051808303601f19018152828252805160209182012060008881526017835283902054918401526001600160a01b0388169183019190915260608201869052608082015260a0810184905260c001604051602081830303815290604052805190602001206136d8565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401612da49291906150fc565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612de29190615115565b600060405180830381855afa9150503d8060008114612e1d576040519150601f19603f3d011682016040523d82523d6000602084013e612e22565b606091505b5091509150818015612e35575080516020145b15612e7857600081806020019051810190612e509190615131565b90506374eca2c160e11b6001600160e01b0319821601612e765760019350505050610e30565b505b50600095945050505050565b606081612e9281601f614d77565b1015612ed15760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610b5f565b612edb8284614d77565b84511015612f1f5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610b5f565b606082158015612f3e5760405191506000825260208201604052612f88565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612f77578051835260209283019201612f5f565b5050858452601f01601f1916604052505b50949350505050565b6000806000612fa1868686613705565b91509150612f888161373e565b6000806000612fbd8585613888565b91509150611b818161373e565b60006001600160a01b03831615801590610e305750610e30838361196e565b60606000612ff6836138ca565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b600082600001828154811061303f5761303f614d32565b9060005260206000200154905092915050565b60005b8151811015610937576130818383838151811061307457613074614d32565b60200260200101516118e7565b8061308b81614d5e565b915050613055565b6108848282604051806020016040528060008152506138f2565b6108843383836138fd565b600160401b8210156130d0576110e7848484846139cb565b610c2c848484846139fe565b60606019805461131290614dc3565b606060006130f883613a17565b60010190506000816001600160401b0381111561311757613117614578565b6040519080825280601f01601f191660200182016040528015613141576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461314b57509392505050565b600061318860095490565b9050600082116131e85760405162461bcd60e51b815260206004820152602560248201527f4552433732315073693a207175616e74697479206d7573742062652067726561604482015264074657220360dc1b6064820152608401610b5f565b6001600160a01b03831661324a5760405162461bcd60e51b815260206004820152602360248201527f4552433732315073693a206d696e7420746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b5f565b816009600082825461325c9190614d77565b9091555050600081815260086020526040902080546001600160a01b0319166001600160a01b03851617905561329360058261363f565b6000806132a08484614d77565b90506001600160a01b0385169150828260006000805160206152a4833981519152600080a4600183015b8181146132f057808360006000805160206152a4833981519152600080a46001016132ca565b506127f6565b60006001600160e01b031982166380ac58cd60e01b148061332757506001600160e01b03198216635b5e139f60e01b145b80610893575061089382613aef565b600160401b81101561334c576108848282613b2f565b6108848282613b9d565b60005b811561337057600019820190911690600101613359565b919050565b60606108936001600160a01b03831660145b60606000613396836002614d8a565b6133a1906002614d77565b6001600160401b038111156133b8576133b8614578565b6040519080825280601f01601f1916602001820160405280156133e2576020820181803683370190505b509050600360fc1b816000815181106133fd576133fd614d32565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061342c5761342c614d32565b60200101906001600160f81b031916908160001a9053506000613450846002614d8a565b61345b906001614d77565b90505b60018111156134d3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061348f5761348f614d32565b1a60f81b8282815181106134a5576134a5614d32565b60200101906001600160f81b031916908160001a90535060049490941c936134cc81614fd3565b905061345e565b508315610e305760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610b5f565b600081815260176020526040812080549161353c83614d5e565b9190505550610937838383613bd2565b60008181526001830160205260408120548015613635576000613570600183614f1f565b855490915060009061358490600190614f1f565b90508181146135e95760008660000182815481106135a4576135a4614d32565b90600052602060002001549050808760000184815481106135c7576135c7614d32565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806135fa576135fa61514e565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610893565b6000915050610893565b600881901c600090815260209290925260409091208054600160ff1b60ff9093169290921c9091179055565b600061367660095490565b82108015610893575050600160401b111590565b600061369560095490565b90506136a1848461317d565b6136af600085838686613bf4565b610c2c5760405162461bcd60e51b8152600401610b5f90615164565b6000610893600583613d2b565b60006108936136e561179a565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806001600160ff1b0383168161372260ff86901c601b614d77565b905061373087828885613e23565b935093505050935093915050565b6000816004811115613752576137526151b9565b0361375a5750565b600181600481111561376e5761376e6151b9565b036137bb5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610b5f565b60028160048111156137cf576137cf6151b9565b0361381c5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610b5f565b6003816004811115613830576138306151b9565b03610c065760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610b5f565b60008082516041036138be5760208301516040840151606085015160001a6138b287828585613e23565b945094505050506109ee565b506000905060026109ee565b600060ff8216601f81111561089357604051632cd44ac360e21b815260040160405180910390fd5b610937838383613ee7565b816001600160a01b0316836001600160a01b03160361395e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b5f565b6001600160a01b03838116600081815260126020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6139d68484846125f6565b6139e284848484613f1a565b610c2c5760405162461bcd60e51b8152600401610b5f906151cf565b613a098484846125f6565b6136af848484600185613bf4565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310613a565772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613a82576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613aa057662386f26fc10000830492506010015b6305f5e1008310613ab8576305f5e100830492506008015b6127108310613acc57612710830492506004015b60648310613ade576064830492506002015b600a83106108935760010192915050565b60006001600160e01b031982166380ac58cd60e01b1480613b2057506001600160e01b03198216635b5e139f60e01b145b80610893575061089382614013565b600081815260116020526040902080546001600160a01b0319166001600160a01b0384169081179091558190613b6482611b15565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600a6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190613b6482610c76565b600160401b811015613be957610937838383614038565b61093783838361418a565b60006001600160a01b0385163b15613d1e57506001835b613c158486614d77565b811015613d1857604051630a85bd0160e11b81526001600160a01b0387169063150b7a0290613c4e9033908b9086908990600401615221565b6020604051808303816000875af1925050508015613c89575060408051601f3d908101601f19168201909252613c8691810190615131565b60015b613ce6573d808015613cb7576040519150601f19603f3d011682016040523d82523d6000602084013e613cbc565b606091505b508051600003613cde5760405162461bcd60e51b8152600401610b5f90615164565b805181602001fd5b828015613d0357506001600160e01b03198116630a85bd0160e11b145b92505080613d1081614d5e565b915050613c0b565b50613d22565b5060015b95945050505050565b600881901c60008181526020849052604081205490919060ff808516919082181c8015613d6d57613d5b81614362565b60ff168203600884901b179350613e1a565b60008311613dda5760405162461bcd60e51b815260206004820152603460248201527f4269744d6170733a205468652073657420626974206265666f7265207468652060448201527334b73232bc103237b2b9b713ba1032bc34b9ba1760611b6064820152608401610b5f565b506000199091016000818152602086905260409020549091908015613e1557613e0281614362565b60ff0360ff16600884901b179350613e1a565b613d6d565b50505092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613e5a5750600090506003613ede565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613eae573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613ed757600060019250925050613ede565b9150600090505b94509492505050565b613ef183836143cc565b613efe6000848484613f1a565b6109375760405162461bcd60e51b8152600401610b5f906151cf565b60006001600160a01b0384163b1561400857604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613f5e903390899088908890600401615221565b6020604051808303816000875af1925050508015613f99575060408051601f3d908101601f19168201909252613f9691810190615131565b60015b613fee573d808015613fc7576040519150601f19603f3d011682016040523d82523d6000602084013e613fcc565b606091505b508051600003613cde5760405162461bcd60e51b8152600401610b5f906151cf565b6001600160e01b031916630a85bd0160e11b149050612a29565b506001949350505050565b60006001600160e01b0319821663152a902d60e11b14806108935750610893826143d6565b826001600160a01b031661404b82611b15565b6001600160a01b0316146140715760405162461bcd60e51b8152600401610b5f9061525e565b6001600160a01b0382166140d35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b5f565b826001600160a01b03166140e682611b15565b6001600160a01b03161461410c5760405162461bcd60e51b8152600401610b5f9061525e565b600081815260116020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260108552838620805460001901905590871680865283862080546001019055868652600f90945282852080549092168417909155905184936000805160206152a483398151915291a4505050565b60008061419683612c0a565b91509150846001600160a01b0316826001600160a01b0316146142105760405162461bcd60e51b815260206004820152602c60248201527f4552433732315073693a207472616e73666572206f6620746f6b656e2074686160448201526b3a1034b9903737ba1037bbb760a11b6064820152608401610b5f565b6001600160a01b0384166142765760405162461bcd60e51b815260206004820152602760248201527f4552433732315073693a207472616e7366657220746f20746865207a65726f206044820152666164647265737360c81b6064820152608401610b5f565b61428160008461238d565b600061428e846001614d77565b600881901c600090815260056020526040902054909150600160ff1b60ff83161c161580156142be575060095481105b156142f557600081815260086020526040902080546001600160a01b0319166001600160a01b0388161790556142f560058261363f565b600084815260086020526040902080546001600160a01b0319166001600160a01b03871617905581841461432e5761432e60058561363f565b83856001600160a01b0316876001600160a01b03166000805160206152a483398151915260405160405180910390a46110c7565b600060405180610120016040528061010081526020016152c4610100913960f87e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff6143ab856143e1565b02901c815181106143be576143be614d32565b016020015160f81c92915050565b6108848282612877565b6000610893826143f9565b60008082116143ef57600080fd5b5060008190031690565b60006001600160e01b03198216635a05180f60e01b148061089357506108938260006001600160e01b03198216637965db0b60e01b148061089357506301ffc9a760e01b6001600160e01b0319831614610893565b60006020828403121561446057600080fd5b81356001600160401b0381111561447657600080fd5b820160608185031215610e3057600080fd5b6001600160e01b031981168114610c0657600080fd5b6000602082840312156144b057600080fd5b8135610e3081614488565b60005b838110156144d65781810151838201526020016144be565b50506000910152565b600081518084526144f78160208601602086016144bb565b601f01601f19169290920160200192915050565b602081526000610e3060208301846144df565b60006020828403121561453057600080fd5b5035919050565b80356001600160a01b038116811461337057600080fd5b6000806040838503121561456157600080fd5b61456a83614537565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156145b0576145b0614578565b60405290565b604051601f8201601f191681016001600160401b03811182821017156145de576145de614578565b604052919050565b60006001600160401b038211156145ff576145ff614578565b5060051b60200190565b600061461c614617846145e6565b6145b6565b8381529050602080820190600585811b85018781111561463b57600080fd5b855b8181101561470e5780356001600160401b038082111561465d5760008081fd5b908801906040828c0312156146725760008081fd5b61467a61458e565b61468383614537565b815286830135828111156146975760008081fd5b8084019350508b601f8401126146af57600091508182fd5b823591506146bf614617836145e6565b82815291861b8301870191878101908d8411156146dc5760008081fd5b938801935b838510156146fa578435825293880193908801906146e1565b82890152508752505093830193830161463d565b50505050509392505050565b60006020828403121561472c57600080fd5b81356001600160401b0381111561474257600080fd5b8201601f8101841361475357600080fd5b612a2984823560208401614609565b60008060006060848603121561477757600080fd5b61478084614537565b925061478e60208501614537565b9150604084013590509250925092565b600080604083850312156147b157600080fd5b50508035926020909101359150565b600060208083850312156147d357600080fd5b82356001600160401b038111156147e957600080fd5b8301601f810185136147fa57600080fd5b8035614808614617826145e6565b81815260069190911b8201830190838101908783111561482757600080fd5b928401925b8284101561487157604084890312156148455760008081fd5b61484d61458e565b61485685614537565b8152848601358682015282526040909301929084019061482c565b979650505050505050565b6000806040838503121561488f57600080fd5b8235915061489f60208401614537565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156148e95783516001600160a01b0316835292840192918401916001016148c4565b50909695505050505050565b60006020828403121561490757600080fd5b610e3082614537565b80356001600160601b038116811461337057600080fd5b60008060006060848603121561493c57600080fd5b8335925061494c60208501614537565b915061495a60408501614910565b90509250925092565b60006001600160401b0383111561497c5761497c614578565b61498f601f8401601f19166020016145b6565b90508281528383830111156149a357600080fd5b828260208301376000602084830101529392505050565b6000602082840312156149cc57600080fd5b81356001600160401b038111156149e257600080fd5b8201601f810184136149f357600080fd5b612a2984823560208401614963565b600082601f830112614a1357600080fd5b610e3083833560208501614963565b60008060008060808587031215614a3857600080fd5b614a4185614537565b9350602085013592506040850135915060608501356001600160401b03811115614a6a57600080fd5b614a7687828801614a02565b91505092959194509250565b60ff60f81b881681526000602060e081840152614aa260e084018a6144df565b8381036040850152614ab4818a6144df565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015614b0657835183529284019291840191600101614aea565b50909c9b505050505050505050505050565b60008060408385031215614b2b57600080fd5b614b3483614537565b915061489f60208401614910565b8015158114610c0657600080fd5b60008060408385031215614b6357600080fd5b614b6c83614537565b91506020830135614b7c81614b42565b809150509250929050565b60008083601f840112614b9957600080fd5b5081356001600160401b03811115614bb057600080fd5b6020830191508360208260051b85010111156109ee57600080fd5b60008060008060608587031215614be157600080fd5b84356001600160401b03811115614bf757600080fd5b614c0387828801614b87565b9095509350614c16905060208601614537565b9150614c2460408601614910565b905092959194509250565b60008060008060808587031215614c4557600080fd5b614c4e85614537565b9350614c5c60208601614537565b92506040850135915060608501356001600160401b03811115614a6a57600080fd5b60008060208385031215614c9157600080fd5b82356001600160401b03811115614ca757600080fd5b614cb385828601614b87565b90969095509350505050565b60008060408385031215614cd257600080fd5b614cdb83614537565b915061489f60208401614537565b6000808335601e19843603018112614d0057600080fd5b8301803591506001600160401b03821115614d1a57600080fd5b6020019150600581901b36038213156109ee57600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614d7057614d70614d48565b5060010190565b8082018082111561089357610893614d48565b808202811582820484141761089357610893614d48565b600082614dbe57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680614dd757607f821691505b602082108103614df757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561093757600081815260208120601f850160051c81016020861015614e245750805b601f850160051c820191505b818110156110c757828155600101614e30565b81516001600160401b03811115614e5c57614e5c614578565b614e7081614e6a8454614dc3565b84614dfd565b602080601f831160018114614ea55760008415614e8d5750858301515b600019600386901b1c1916600185901b1785556110c7565b600085815260208120601f198616915b82811015614ed457888601518255948401946001909101908401614eb5565b5085821015614ef25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215614f1457600080fd5b8151610e3081614b42565b8181038181111561089357610893614d48565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526034908201527f4552433732315073693a207472616e736665722063616c6c6572206973206e6f6040820152731d081bdddb995c881b9bdc88185c1c1c9bdd995960621b606082015260800190565b600081614fe257614fe2614d48565b506000190190565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b80516020808301519190811015614df75760001960209190910360031b1b16919050565b6000835161506a8184602088016144bb565b83519083019061507e8183602088016144bb565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516150bf8160178501602088016144bb565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516150f08160288401602088016144bb565b01602801949350505050565b828152604060208201526000612a2960408301846144df565b600082516151278184602087016144bb565b9190910192915050565b60006020828403121561514357600080fd5b8151610e3081614488565b634e487b7160e01b600052603160045260246000fd5b60208082526035908201527f4552433732315073693a207472616e7366657220746f206e6f6e20455243373260408201527418a932b1b2b4bb32b91034b6b83632b6b2b73a32b960591b606082015260800190565b634e487b7160e01b600052602160045260246000fd5b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090615254908301846144df565b9695505050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b60608201526080019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0001020903110a19042112290b311a3905412245134d2a550c5d32651b6d3a7506264262237d468514804e8d2b95569d0d495ea533a966b11c886eb93bc176c9071727374353637324837e9b47af86c7155181ad4fd18ed32c9096db57d59ee30e2e4a6a5f92a6be3498aae067ddb2eb1d5989b56fd7baf33ca0c2ee77e5caf7ff0810182028303840444c545c646c7425617c847f8c949c48a4a8b087b8c0c816365272829aaec650acd0d28fdad4e22d6991bd97dfdcea58b4d6f29fede4f6fe0f1f2f3f4b5b6b607b8b93a3a7b7bf357199c5abcfd9e168bcdee9b3f1ecf5fd1e3e5a7a8aa2b670c4ced8bbe8f0f4fc3d79a1c3cde7effb78cce6facbf9f8a26469706673582212207c1340e2d1c7a6af058cbb35c7f1065a255bd81a470929fa89ee68ccabc5922664736f6c63430008110033";
31543
32237
  const isSuperArgs$2 = (xs) => xs.length > 1;
31544
32238
  class ImmutableERC721__factory extends ContractFactory {
31545
32239
  constructor(...args) {
@@ -31719,6 +32413,37 @@ const _abi$1 = [
31719
32413
  name: "IImmutableERC721TokenAlreadyBurned",
31720
32414
  type: "error",
31721
32415
  },
32416
+ {
32417
+ inputs: [],
32418
+ name: "InvalidShortString",
32419
+ type: "error",
32420
+ },
32421
+ {
32422
+ inputs: [],
32423
+ name: "InvalidSignature",
32424
+ type: "error",
32425
+ },
32426
+ {
32427
+ inputs: [],
32428
+ name: "PermitExpired",
32429
+ type: "error",
32430
+ },
32431
+ {
32432
+ inputs: [],
32433
+ name: "SignerCannotBeZerothAddress",
32434
+ type: "error",
32435
+ },
32436
+ {
32437
+ inputs: [
32438
+ {
32439
+ internalType: "string",
32440
+ name: "str",
32441
+ type: "string",
32442
+ },
32443
+ ],
32444
+ name: "StringTooLong",
32445
+ type: "error",
32446
+ },
31722
32447
  {
31723
32448
  inputs: [
31724
32449
  {
@@ -31791,6 +32516,12 @@ const _abi$1 = [
31791
32516
  name: "ApprovalForAll",
31792
32517
  type: "event",
31793
32518
  },
32519
+ {
32520
+ anonymous: false,
32521
+ inputs: [],
32522
+ name: "EIP712DomainChanged",
32523
+ type: "event",
32524
+ },
31794
32525
  {
31795
32526
  anonymous: false,
31796
32527
  inputs: [
@@ -31923,6 +32654,19 @@ const _abi$1 = [
31923
32654
  stateMutability: "view",
31924
32655
  type: "function",
31925
32656
  },
32657
+ {
32658
+ inputs: [],
32659
+ name: "DOMAIN_SEPARATOR",
32660
+ outputs: [
32661
+ {
32662
+ internalType: "bytes32",
32663
+ name: "",
32664
+ type: "bytes32",
32665
+ },
32666
+ ],
32667
+ stateMutability: "view",
32668
+ type: "function",
32669
+ },
31926
32670
  {
31927
32671
  inputs: [],
31928
32672
  name: "MINTER_ROLE",
@@ -32063,6 +32807,49 @@ const _abi$1 = [
32063
32807
  stateMutability: "view",
32064
32808
  type: "function",
32065
32809
  },
32810
+ {
32811
+ inputs: [],
32812
+ name: "eip712Domain",
32813
+ outputs: [
32814
+ {
32815
+ internalType: "bytes1",
32816
+ name: "fields",
32817
+ type: "bytes1",
32818
+ },
32819
+ {
32820
+ internalType: "string",
32821
+ name: "name",
32822
+ type: "string",
32823
+ },
32824
+ {
32825
+ internalType: "string",
32826
+ name: "version",
32827
+ type: "string",
32828
+ },
32829
+ {
32830
+ internalType: "uint256",
32831
+ name: "chainId",
32832
+ type: "uint256",
32833
+ },
32834
+ {
32835
+ internalType: "address",
32836
+ name: "verifyingContract",
32837
+ type: "address",
32838
+ },
32839
+ {
32840
+ internalType: "bytes32",
32841
+ name: "salt",
32842
+ type: "bytes32",
32843
+ },
32844
+ {
32845
+ internalType: "uint256[]",
32846
+ name: "extensions",
32847
+ type: "uint256[]",
32848
+ },
32849
+ ],
32850
+ stateMutability: "view",
32851
+ type: "function",
32852
+ },
32066
32853
  {
32067
32854
  inputs: [],
32068
32855
  name: "getAdmins",
@@ -32292,6 +33079,25 @@ const _abi$1 = [
32292
33079
  stateMutability: "view",
32293
33080
  type: "function",
32294
33081
  },
33082
+ {
33083
+ inputs: [
33084
+ {
33085
+ internalType: "uint256",
33086
+ name: "tokenId",
33087
+ type: "uint256",
33088
+ },
33089
+ ],
33090
+ name: "nonces",
33091
+ outputs: [
33092
+ {
33093
+ internalType: "uint256",
33094
+ name: "",
33095
+ type: "uint256",
33096
+ },
33097
+ ],
33098
+ stateMutability: "view",
33099
+ type: "function",
33100
+ },
32295
33101
  {
32296
33102
  inputs: [],
32297
33103
  name: "operatorAllowlist",
@@ -32324,6 +33130,34 @@ const _abi$1 = [
32324
33130
  stateMutability: "view",
32325
33131
  type: "function",
32326
33132
  },
33133
+ {
33134
+ inputs: [
33135
+ {
33136
+ internalType: "address",
33137
+ name: "spender",
33138
+ type: "address",
33139
+ },
33140
+ {
33141
+ internalType: "uint256",
33142
+ name: "tokenId",
33143
+ type: "uint256",
33144
+ },
33145
+ {
33146
+ internalType: "uint256",
33147
+ name: "deadline",
33148
+ type: "uint256",
33149
+ },
33150
+ {
33151
+ internalType: "bytes",
33152
+ name: "sig",
33153
+ type: "bytes",
33154
+ },
33155
+ ],
33156
+ name: "permit",
33157
+ outputs: [],
33158
+ stateMutability: "nonpayable",
33159
+ type: "function",
33160
+ },
32327
33161
  {
32328
33162
  inputs: [
32329
33163
  {
@@ -32778,7 +33612,7 @@ const _abi$1 = [
32778
33612
  type: "function",
32779
33613
  },
32780
33614
  ];
32781
- const _bytecode$1 = "0x60806040523480156200001157600080fd5b5060405162003c7338038062003c73833981016040819052620000349162000506565b8787878787878787868660036200004c838262000699565b5060046200005b828262000699565b506200006d91506000905089620000b8565b620000798282620000fb565b620000848362000200565b600c62000092868262000699565b50600b620000a1858262000699565b505050505050505050505050505050505062000790565b620000cf8282620002f960201b6200135e1760201c565b6000828152600160209081526040909120620000f6918390620013e26200039a821b17901c565b505050565b6127106001600160601b03821611156200016f5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620001c75760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000166565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200024c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000272919062000765565b620002905760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000396576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620003553390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620003b1836001600160a01b038416620003ba565b90505b92915050565b60008181526001830160205260408120546200040357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003b4565b506000620003b4565b80516001600160a01b03811681146200042457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200045157600080fd5b81516001600160401b03808211156200046e576200046e62000429565b604051601f8301601f19908116603f0116810190828211818310171562000499576200049962000429565b81604052838152602092508683858801011115620004b657600080fd5b600091505b83821015620004da5785820183015181830184015290820190620004bb565b600093810190920192909252949350505050565b80516001600160601b03811681146200042457600080fd5b600080600080600080600080610100898b0312156200052457600080fd5b6200052f896200040c565b60208a01519098506001600160401b03808211156200054d57600080fd5b6200055b8c838d016200043f565b985060408b01519150808211156200057257600080fd5b620005808c838d016200043f565b975060608b01519150808211156200059757600080fd5b620005a58c838d016200043f565b965060808b0151915080821115620005bc57600080fd5b50620005cb8b828c016200043f565b945050620005dc60a08a016200040c565b9250620005ec60c08a016200040c565b9150620005fc60e08a01620004ee565b90509295985092959890939650565b600181811c908216806200062057607f821691505b6020821081036200064157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620000f657600081815260208120601f850160051c81016020861015620006705750805b601f850160051c820191505b8181101562000691578281556001016200067c565b505050505050565b81516001600160401b03811115620006b557620006b562000429565b620006cd81620006c684546200060b565b8462000647565b602080601f831160018114620007055760008415620006ec5750858301515b600019600386901b1c1916600185901b17855562000691565b600085815260208120601f198616915b82811015620007365788860151825594840194600190910190840162000715565b5085821015620007555787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200077857600080fd5b815180151581146200078957600080fd5b9392505050565b6134d380620007a06000396000f3fe608060405234801561001057600080fd5b50600436106102945760003560e01c806369e2f0fb11610167578063a217fddf116100ce578063d539139311610087578063d5391393146105da578063d547741f146105ef578063e4623c1b14610602578063e4e18f6d14610615578063e8a3d48514610628578063e985e9c51461063057600080fd5b8063a217fddf14610573578063a22cb4651461057b578063a70128161461058e578063b88d4fde146105a1578063c87b56dd146105b4578063ca15c873146105c757600080fd5b806391d148541161012057806391d148541461050c578063938e3d7b1461051f57806395d89b41146105325780639e2641a31461053a5780639f15d7001461054d578063a14481941461056057600080fd5b806369e2f0fb146104a55780636c0360eb146104b857806370a08231146104c057806374f16a81146104d3578063885e7a08146104e65780639010d07c146104f957600080fd5b80632f2ff15d1161020b57806340c10f19116101c457806340c10f191461043357806342842e0e1461044657806342966c6814610459578063439aed341461046c57806355f804b31461047f5780636352211e1461049257600080fd5b80632f2ff15d146103c957806331ae450b146103dc57806336568abe146103f15780633dd1eb61146104045780633e769acd146104175780633eaaf86b1461042a57600080fd5b806318160ddd1161025d57806318160ddd14610329578063234af0461461033b57806323b872dd1461034e578063248a9ca31461036157806329326f29146103845780632a55205a1461039757600080fd5b80628ad9461461029957806301ffc9a7146102ae57806306fdde03146102d6578063081812fc146102eb578063095ea7b314610316575b600080fd5b6102ac6102a7366004612901565b61066c565b005b6102c16102bc366004612951565b610742565b60405190151581526020015b60405180910390f35b6102de610753565b6040516102cd91906129be565b6102fe6102f93660046129d1565b6107e5565b6040516001600160a01b0390911681526020016102cd565b6102ac610324366004612a06565b61080c565b600d545b6040519081526020016102cd565b6102ac610349366004612bd2565b610967565b6102ac61035c366004612c1a565b6109bf565b61032d61036f3660046129d1565b60009081526020819052604090206001015490565b6002546102fe906001600160a01b031681565b6103aa6103a5366004612c56565b6109f1565b604080516001600160a01b0390931683526020830191909152016102cd565b6102ac6103d7366004612c78565b610a9f565b6103e4610ac4565b6040516102cd9190612ca4565b6102ac6103ff366004612c78565b610b72565b6102ac610412366004612cf1565b610bec565b6102ac610425366004612bd2565b610c0f565b61032d600d5481565b6102ac610441366004612a06565b610c9b565b6102ac610454366004612c1a565b610cd7565b6102ac6104673660046129d1565b610cf2565b6102ac61047a366004612d23565b610d30565b6102ac61048d366004612db6565b610d59565b6102fe6104a03660046129d1565b610d70565b6102ac6104b3366004612cf1565b610dd0565b6102de610df3565b61032d6104ce366004612cf1565b610e81565b6102ac6104e1366004612bd2565b610f07565b6102ac6104f4366004612dfe565b610f13565b6102fe610507366004612c56565b610f28565b6102c161051a366004612c78565b610f47565b6102ac61052d366004612db6565b610f70565b6102de610f87565b6102ac610548366004612bd2565b610f96565b6102ac61055b366004612a06565b610fee565b6102ac61056e366004612a06565b611048565b61032d600081565b6102ac610589366004612e36565b61107a565b6102ac61059c366004612eb1565b6111cb565b6102ac6105af366004612f15565b61122b565b6102de6105c23660046129d1565b61125d565b61032d6105d53660046129d1565b6112c3565b61032d6a4d494e5445525f524f4c4560a81b81565b6102ac6105fd366004612c78565b6112da565b6102ac610610366004612f90565b6112ff565b6102ac610623366004612cf1565b61133d565b6102de611351565b6102c161063e366004612fd1565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6106796020820182612ffb565b90506106886040830183612ffb565b9050146106a85760405163359a1bc360e01b815260040160405180910390fd5b60005b6106b86040830183612ffb565b905081101561073e5761072c6106d16020840184612cf1565b6106de6020850185612ffb565b848181106106ee576106ee613044565b90506020020160208101906107039190612cf1565b6107106040860186612ffb565b8581811061072057610720613044565b90506020020135610cd7565b8061073681613070565b9150506106ab565b5050565b600061074d826113f7565b92915050565b60606003805461076290613089565b80601f016020809104026020016040519081016040528092919081815260200182805461078e90613089565b80156107db5780601f106107b0576101008083540402835291602001916107db565b820191906000526020600020905b8154815290600101906020018083116107be57829003601f168201915b5050505050905090565b60006107f08261141c565b506000908152600760205260409020546001600160a01b031690565b81333b1580159061088657506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa158015610860573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088491906130c3565b155b156108ab5760405163f6fa4cbd60e01b81523360048201526024015b60405180910390fd5b6001600160a01b0381163b1580159061092f57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d91906130c3565b155b15610958576040516341b8d58160e11b81526001600160a01b03821660048201526024016108a2565b610962838361147b565b505050565b6a4d494e5445525f524f4c4560a81b61097f8161158b565b60005b8251811015610962576109ad8382815181106109a0576109a0613044565b6020026020010151611595565b806109b781613070565b915050610982565b6109ca335b82611624565b6109e65760405162461bcd60e51b81526004016108a2906130e0565b6109628383836116a3565b6000828152600a602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a665750604080518082019091526009546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a85906001600160601b03168761312d565b610a8f9190613144565b91519350909150505b9250929050565b600082815260208190526040902060010154610aba8161158b565b61096283836118aa565b60606000610ad1816112c3565b90506000816001600160401b03811115610aed57610aed612a30565b604051908082528060200260200182016040528015610b16578160200160208202803683370190505b50905060005b82811015610b6b57610b2f600082610f28565b828281518110610b4157610b41613044565b6001600160a01b039092166020928302919091019091015280610b6381613070565b915050610b1c565b5092915050565b6001600160a01b0381163314610be25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108a2565b61073e82826118cc565b6000610bf78161158b565b61073e6a4d494e5445525f524f4c4560a81b83610a9f565b60005b815181101561073e576000828281518110610c2f57610c2f613044565b6020026020010151905060005b816020015151811015610c8657610c74826000015183602001518381518110610c6757610c67613044565b6020026020010151610fee565b80610c7e81613070565b915050610c3c565b50508080610c9390613070565b915050610c12565b6a4d494e5445525f524f4c4560a81b610cb38161158b565b610cbd83836118ee565b600d8054906000610ccd83613070565b9190505550505050565b6109628383836040518060200160405280600081525061122b565b610cfb81611935565b600881901c6000908152600e602052604081208054600160ff85161b179055600d805491610d2883613166565b919050555050565b6a4d494e5445525f524f4c4560a81b610d488161158b565b610d53848484611963565b50505050565b6000610d648161158b565b600c61096283826131c3565b6000818152600560205260408120546001600160a01b03168061074d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a2565b6000610ddb8161158b565b61073e6a4d494e5445525f524f4c4560a81b836112da565b600c8054610e0090613089565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2c90613089565b8015610e795780601f10610e4e57610100808354040283529160200191610e79565b820191906000526020600020905b815481529060010190602001808311610e5c57829003601f168201915b505050505081565b60006001600160a01b038216610eeb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108a2565b506001600160a01b031660009081526006602052604090205490565b610f1081610c0f565b50565b6000610f1e8161158b565b6109628383611a2e565b6000828152600160205260408120610f409083611ae8565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610f7b8161158b565b600b61096283826131c3565b60606004805461076290613089565b6a4d494e5445525f524f4c4560a81b610fae8161158b565b60005b825181101561096257610fdc838281518110610fcf57610fcf613044565b6020026020010151611af4565b80610fe681613070565b915050610fb1565b6000610ff982610d70565b9050826001600160a01b0316816001600160a01b03161461103f57604051634fefd56160e01b8152600481018390526001600160a01b03821660248201526044016108a2565b61096282610cf2565b6a4d494e5445525f524f4c4560a81b6110608161158b565b610cbd838360405180602001604052806000815250611b6a565b81333b158015906110f457506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa1580156110ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f291906130c3565b155b156111145760405163f6fa4cbd60e01b81523360048201526024016108a2565b6001600160a01b0381163b1580159061119857506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119691906130c3565b155b156111c1576040516341b8d58160e11b81526001600160a01b03821660048201526024016108a2565b6109628383611b9d565b6a4d494e5445525f524f4c4560a81b6111e38161158b565b60005b848110156112235761121186868381811061120357611203613044565b905060200201358585611963565b8061121b81613070565b9150506111e6565b505050505050565b6112353383611624565b6112515760405162461bcd60e51b81526004016108a2906130e0565b610d5384848484611ba8565b60606112688261141c565b6000611272611bdb565b905060008151116112925760405180602001604052806000815250610f40565b8061129c84611bea565b6040516020016112ad929190613282565b6040516020818303038152906040529392505050565b600081815260016020526040812061074d90611c7c565b6000828152602081905260409020600101546112f58161158b565b61096283836118cc565b60005b818110156109625761132b83838381811061131f5761131f613044565b90506020020135610cf2565b8061133581613070565b915050611302565b60006113488161158b565b61073e82611c86565b600b8054610e0090613089565b6113688282610f47565b61073e576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561139e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f40836001600160a01b038416611d7b565b60006001600160e01b0319821663152a902d60e11b148061074d575061074d82611dca565b6000818152600560205260409020546001600160a01b0316610f105760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a2565b600061148682610d70565b9050806001600160a01b0316836001600160a01b0316036114f35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108a2565b336001600160a01b038216148061150f575061150f813361063e565b6115815760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108a2565b6109628383611e0a565b610f108133611e78565b80516001600160a01b03166115bd576040516331c3e52960e11b815260040160405180910390fd5b60005b81602001515181101561160a576115f88260000151836020015183815181106115eb576115eb613044565b6020026020010151611ed1565b8061160281613070565b9150506115c0565b50806020015151600d5461161e91906132b1565b600d5550565b60008061163083610d70565b9050806001600160a01b0316846001600160a01b0316148061167757506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b8061169b5750836001600160a01b0316611690846107e5565b6001600160a01b0316145b949350505050565b828233321480159061171e57506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c91906130c3565b155b1561173e5760405163937db65f60e01b81523360048201526024016108a2565b6001600160a01b0382163b158015906117c257506002546040516305a3b80960e01b81526001600160a01b038481166004830152909116906305a3b80990602401602060405180830381865afa15801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c091906130c3565b155b156117eb5760405163f934453160e01b81526001600160a01b03831660048201526024016108a2565b6001600160a01b0381163b1580159061186f57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d91906130c3565b155b1561189857604051632a67242160e11b81526001600160a01b03821660048201526024016108a2565b6118a3858585611f18565b5050505050565b6118b4828261135e565b600082815260016020526040902061096290826113e2565b6118d6828261207c565b600082815260016020526040902061096290826120e1565b600881901c6000908152600e6020526040902054600160ff83161b161561192b576040516305dcda1160e51b8152600481018290526024016108a2565b61073e82826120f6565b61193e336109c4565b61195a5760405162461bcd60e51b81526004016108a2906130e0565b610f1081612281565b6127106001600160601b038216111561198e5760405162461bcd60e51b81526004016108a2906132c4565b6001600160a01b0382166119e45760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d6574657273000000000060448201526064016108a2565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600a90529190942093519051909116600160a01b029116179055565b6127106001600160601b0382161115611a595760405162461bcd60e51b81526004016108a2906132c4565b6001600160a01b038216611aaf5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016108a2565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b6000610f408383612316565b80516001600160a01b031615611b1d576040516331c3e52960e11b815260040160405180910390fd5b60005b81602001515181101561160a57611b58826000015183602001518381518110611b4b57611b4b613044565b60200260200101516118ee565b80611b6281613070565b915050611b20565b611b7483836118ee565b611b816000848484612340565b6109625760405162461bcd60e51b81526004016108a29061330e565b61073e338383612441565b611bb38484846116a3565b611bbf84848484612340565b610d535760405162461bcd60e51b81526004016108a29061330e565b6060600c805461076290613089565b60606000611bf78361250f565b60010190506000816001600160401b03811115611c1657611c16612a30565b6040519080825280601f01601f191660200182016040528015611c40576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611c4a57509392505050565b600061074d825490565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf591906130c3565b611d125760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600183016020526040812054611dc25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561074d565b50600061074d565b60006001600160e01b031982166380ac58cd60e01b1480611dfb57506001600160e01b03198216635b5e139f60e01b145b8061074d575061074d826125e7565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e3f82610d70565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e828282610f47565b61073e57611e8f816125f2565b611e9a836020612604565b604051602001611eab929190613360565b60408051601f198184030181529082905262461bcd60e51b82526108a2916004016129be565b600881901c6000908152600e6020526040902054600160ff83161b1615611f0e576040516305dcda1160e51b8152600481018290526024016108a2565b61073e828261279f565b826001600160a01b0316611f2b82610d70565b6001600160a01b031614611f515760405162461bcd60e51b81526004016108a2906133d5565b6001600160a01b038216611fb35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108a2565b826001600160a01b0316611fc682610d70565b6001600160a01b031614611fec5760405162461bcd60e51b81526004016108a2906133d5565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6120868282610f47565b1561073e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f40836001600160a01b0384166127b9565b6001600160a01b03821661214c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108a2565b6000818152600560205260409020546001600160a01b0316156121b15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a2565b6000818152600560205260409020546001600160a01b0316156122165760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a2565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061228c82610d70565b905061229782610d70565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600082600001828154811061232d5761232d613044565b9060005260206000200154905092915050565b60006001600160a01b0384163b1561243657604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061238490339089908890889060040161341a565b6020604051808303816000875af19250505080156123bf575060408051601f3d908101601f191682019092526123bc91810190613457565b60015b61241c573d8080156123ed576040519150601f19603f3d011682016040523d82523d6000602084013e6123f2565b606091505b5080516000036124145760405162461bcd60e51b81526004016108a29061330e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061169b565b506001949350505050565b816001600160a01b0316836001600160a01b0316036124a25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108a2565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061254e5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061257a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061259857662386f26fc10000830492506010015b6305f5e10083106125b0576305f5e100830492506008015b61271083106125c457612710830492506004015b606483106125d6576064830492506002015b600a831061074d5760010192915050565b600061074d826128ac565b606061074d6001600160a01b03831660145b6060600061261383600261312d565b61261e9060026132b1565b6001600160401b0381111561263557612635612a30565b6040519080825280601f01601f19166020018201604052801561265f576020820181803683370190505b509050600360fc1b8160008151811061267a5761267a613044565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106126a9576126a9613044565b60200101906001600160f81b031916908160001a90535060006126cd84600261312d565b6126d89060016132b1565b90505b6001811115612750576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061270c5761270c613044565b1a60f81b82828151811061272257612722613044565b60200101906001600160f81b031916908160001a90535060049490941c9361274981613166565b90506126db565b508315610f405760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108a2565b61073e828260405180602001604052806000815250611b6a565b600081815260018301602052604081205480156128a25760006127dd600183613474565b85549091506000906127f190600190613474565b905081811461285657600086600001828154811061281157612811613044565b906000526020600020015490508087600001848154811061283457612834613044565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061286757612867613487565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061074d565b600091505061074d565b60006001600160e01b03198216635a05180f60e01b148061074d575061074d8260006001600160e01b03198216637965db0b60e01b148061074d57506301ffc9a760e01b6001600160e01b031983161461074d565b60006020828403121561291357600080fd5b81356001600160401b0381111561292957600080fd5b820160608185031215610f4057600080fd5b6001600160e01b031981168114610f1057600080fd5b60006020828403121561296357600080fd5b8135610f408161293b565b60005b83811015612989578181015183820152602001612971565b50506000910152565b600081518084526129aa81602086016020860161296e565b601f01601f19169290920160200192915050565b602081526000610f406020830184612992565b6000602082840312156129e357600080fd5b5035919050565b80356001600160a01b0381168114612a0157600080fd5b919050565b60008060408385031215612a1957600080fd5b612a22836129ea565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612a6857612a68612a30565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612a9657612a96612a30565b604052919050565b60006001600160401b03821115612ab757612ab7612a30565b5060051b60200190565b6000612ad4612acf84612a9e565b612a6e565b8381529050602080820190600585811b850187811115612af357600080fd5b855b81811015612bc65780356001600160401b0380821115612b155760008081fd5b908801906040828c031215612b2a5760008081fd5b612b32612a46565b612b3b836129ea565b81528683013582811115612b4f5760008081fd5b8084019350508b601f840112612b6757600091508182fd5b82359150612b77612acf83612a9e565b82815291861b8301870191878101908d841115612b945760008081fd5b938801935b83851015612bb257843582529388019390880190612b99565b828901525087525050938301938301612af5565b50505050509392505050565b600060208284031215612be457600080fd5b81356001600160401b03811115612bfa57600080fd5b8201601f81018413612c0b57600080fd5b61169b84823560208401612ac1565b600080600060608486031215612c2f57600080fd5b612c38846129ea565b9250612c46602085016129ea565b9150604084013590509250925092565b60008060408385031215612c6957600080fd5b50508035926020909101359150565b60008060408385031215612c8b57600080fd5b82359150612c9b602084016129ea565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612ce55783516001600160a01b031683529284019291840191600101612cc0565b50909695505050505050565b600060208284031215612d0357600080fd5b610f40826129ea565b80356001600160601b0381168114612a0157600080fd5b600080600060608486031215612d3857600080fd5b83359250612d48602085016129ea565b9150612d5660408501612d0c565b90509250925092565b60006001600160401b03831115612d7857612d78612a30565b612d8b601f8401601f1916602001612a6e565b9050828152838383011115612d9f57600080fd5b828260208301376000602084830101529392505050565b600060208284031215612dc857600080fd5b81356001600160401b03811115612dde57600080fd5b8201601f81018413612def57600080fd5b61169b84823560208401612d5f565b60008060408385031215612e1157600080fd5b612e1a836129ea565b9150612c9b60208401612d0c565b8015158114610f1057600080fd5b60008060408385031215612e4957600080fd5b612e52836129ea565b91506020830135612e6281612e28565b809150509250929050565b60008083601f840112612e7f57600080fd5b5081356001600160401b03811115612e9657600080fd5b6020830191508360208260051b8501011115610a9857600080fd5b60008060008060608587031215612ec757600080fd5b84356001600160401b03811115612edd57600080fd5b612ee987828801612e6d565b9095509350612efc9050602086016129ea565b9150612f0a60408601612d0c565b905092959194509250565b60008060008060808587031215612f2b57600080fd5b612f34856129ea565b9350612f42602086016129ea565b92506040850135915060608501356001600160401b03811115612f6457600080fd5b8501601f81018713612f7557600080fd5b612f8487823560208401612d5f565b91505092959194509250565b60008060208385031215612fa357600080fd5b82356001600160401b03811115612fb957600080fd5b612fc585828601612e6d565b90969095509350505050565b60008060408385031215612fe457600080fd5b612fed836129ea565b9150612c9b602084016129ea565b6000808335601e1984360301811261301257600080fd5b8301803591506001600160401b0382111561302c57600080fd5b6020019150600581901b3603821315610a9857600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016130825761308261305a565b5060010190565b600181811c9082168061309d57607f821691505b6020821081036130bd57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156130d557600080fd5b8151610f4081612e28565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b808202811582820484141761074d5761074d61305a565b60008261316157634e487b7160e01b600052601260045260246000fd5b500490565b6000816131755761317561305a565b506000190190565b601f82111561096257600081815260208120601f850160051c810160208610156131a45750805b601f850160051c820191505b81811015611223578281556001016131b0565b81516001600160401b038111156131dc576131dc612a30565b6131f0816131ea8454613089565b8461317d565b602080601f831160018114613225576000841561320d5750858301515b600019600386901b1c1916600185901b178555611223565b600085815260208120601f198616915b8281101561325457888601518255948401946001909101908401613235565b50858210156132725787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000835161329481846020880161296e565b8351908301906132a881836020880161296e565b01949350505050565b8082018082111561074d5761074d61305a565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161339881601785016020880161296e565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516133c981602884016020880161296e565b01602801949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061344d90830184612992565b9695505050505050565b60006020828403121561346957600080fd5b8151610f408161293b565b8181038181111561074d5761074d61305a565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220db78f674a75be30e896244d83179c8c4f1b45519e52de44c0f337b384795efbc64736f6c63430008110033";
33615
+ const _bytecode$1 = "0x6101606040523480156200001257600080fd5b5060405162004b3738038062004b37833981016040819052620000359162000693565b8787878787878787868681604051806040016040528060018152602001603160f81b815250838381600390816200006d919062000826565b5060046200007c828262000826565b5050506200009a600983620001a960201b620014771790919060201c565b61012052620000b781600a620001a9602090811b6200147717901c565b61014052815160208084019190912060e052815190820120610100524660a0526200014560e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506200015e9050600089620001f9565b6200016a82826200023c565b620001758362000341565b600f62000183868262000826565b50600e62000192858262000826565b505050505050505050505050505050505062000970565b6000602083511015620001c957620001c1836200043a565b9050620001f3565b82620001e0836200047d60201b620014a81760201c565b90620001ed908262000826565b5060ff90505b92915050565b6200021082826200048060201b620014ab1760201c565b6000828152600160209081526040909120620002379183906200152f62000521821b17901c565b505050565b6127106001600160601b0382161115620002b05760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620003085760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401620002a7565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600c55565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200038d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b39190620008f2565b620003d15760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b600080829050601f8151111562000468578260405163305a27a960e01b8152600401620002a7919062000916565b805162000475826200094b565b179392505050565b90565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200051d576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620004dc3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600062000538836001600160a01b0384166200053f565b9392505050565b60008181526001830160205260408120546200058857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620001f3565b506000620001f3565b80516001600160a01b0381168114620005a957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620005e1578181015183820152602001620005c7565b50506000910152565b600082601f830112620005fc57600080fd5b81516001600160401b0380821115620006195762000619620005ae565b604051601f8301601f19908116603f01168101908282118183101715620006445762000644620005ae565b816040528381528660208588010111156200065e57600080fd5b62000671846020830160208901620005c4565b9695505050505050565b80516001600160601b0381168114620005a957600080fd5b600080600080600080600080610100898b031215620006b157600080fd5b620006bc8962000591565b60208a01519098506001600160401b0380821115620006da57600080fd5b620006e88c838d01620005ea565b985060408b0151915080821115620006ff57600080fd5b6200070d8c838d01620005ea565b975060608b01519150808211156200072457600080fd5b620007328c838d01620005ea565b965060808b01519150808211156200074957600080fd5b50620007588b828c01620005ea565b9450506200076960a08a0162000591565b92506200077960c08a0162000591565b91506200078960e08a016200067b565b90509295985092959890939650565b600181811c90821680620007ad57607f821691505b602082108103620007ce57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023757600081815260208120601f850160051c81016020861015620007fd5750805b601f850160051c820191505b818110156200081e5782815560010162000809565b505050505050565b81516001600160401b03811115620008425762000842620005ae565b6200085a8162000853845462000798565b84620007d4565b602080601f831160018114620008925760008415620008795750858301515b600019600386901b1c1916600185901b1785556200081e565b600085815260208120601f198616915b82811015620008c357888601518255948401946001909101908401620008a2565b5085821015620008e25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200090557600080fd5b815180151581146200053857600080fd5b602081526000825180602084015262000937816040850160208701620005c4565b601f01601f19169190910160400192915050565b80516020808301519190811015620007ce5760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161416c620009cb6000396000610fdc01526000610fb101526000611b3401526000611b0c01526000611a6701526000611a9101526000611abb015261416c6000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c806369e2f0fb1161019d578063a1448194116100e9578063ca15c873116100a2578063e4623c1b1161007c578063e4623c1b146106b8578063e4e18f6d146106cb578063e8a3d485146106de578063e985e9c5146106e657600080fd5b8063ca15c8731461067d578063d539139314610690578063d547741f146106a557600080fd5b8063a144819414610616578063a217fddf14610629578063a22cb46514610631578063a701281614610644578063b88d4fde14610657578063c87b56dd1461066a57600080fd5b8063885e7a0811610156578063938e3d7b11610130578063938e3d7b146105d557806395d89b41146105e85780639e2641a3146105f05780639f15d7001461060357600080fd5b8063885e7a081461059c5780639010d07c146105af57806391d14854146105c257600080fd5b806369e2f0fb1461052d5780636c0360eb1461054057806370a0823114610548578063745a41bc1461055b57806374f16a811461056e57806384b0196e1461058157600080fd5b80632f2ff15d1161025c5780633eaaf86b1161021557806342966c68116101ef57806342966c68146104e1578063439aed34146104f457806355f804b3146105075780636352211e1461051a57600080fd5b80633eaaf86b146104b257806340c10f19146104bb57806342842e0e146104ce57600080fd5b80632f2ff15d1461044957806331ae450b1461045c5780633644e5151461047157806336568abe146104795780633dd1eb611461048c5780633e769acd1461049f57600080fd5b806318160ddd116102ae57806318160ddd146103b3578063234af046146103bb57806323b872dd146103ce578063248a9ca3146103e157806329326f29146104045780632a55205a1461041757600080fd5b80628ad946146102f557806301ffc9a71461030a57806306fdde0314610332578063081812fc14610347578063095ea7b314610372578063141a468c14610385575b600080fd5b610308610303366004613441565b610722565b005b61031d610318366004613491565b6107f8565b60405190151581526020015b60405180910390f35b61033a610809565b60405161032991906134fe565b61035a610355366004613511565b61089b565b6040516001600160a01b039091168152602001610329565b610308610380366004613546565b6108c2565b6103a5610393366004613511565b6000908152600b602052604090205490565b604051908152602001610329565b6010546103a5565b6103086103c9366004613712565b6109dc565b6103086103dc36600461375a565b610a34565b6103a56103ef366004613511565b60009081526020819052604090206001015490565b60025461035a906001600160a01b031681565b61042a610425366004613796565b610a66565b604080516001600160a01b039093168352602083019190915201610329565b6103086104573660046137b8565b610b14565b610464610b39565b60405161032991906137e4565b6103a5610be7565b6103086104873660046137b8565b610bf6565b61030861049a366004613831565b610c70565b6103086104ad366004613712565b610c93565b6103a560105481565b6103086104c9366004613546565b610d1f565b6103086104dc36600461375a565b610d5b565b6103086104ef366004613511565b610d76565b610308610502366004613863565b610db4565b6103086105153660046138f6565b610ddd565b61035a610528366004613511565b610df4565b61030861053b366004613831565b610e54565b61033a610e77565b6103a5610556366004613831565b610f05565b61030861056936600461395e565b610f8b565b61030861057c366004613712565b610f97565b610589610fa3565b60405161032997969594939291906139be565b6103086105aa366004613a54565b61102c565b61035a6105bd366004613796565b611041565b61031d6105d03660046137b8565b611060565b6103086105e33660046138f6565b611089565b61033a6110a0565b6103086105fe366004613712565b6110af565b610308610611366004613546565b611107565b610308610624366004613546565b611161565b6103a5600081565b61030861063f366004613a8c565b611193565b610308610652366004613b07565b6112e4565b610308610665366004613b6b565b611344565b61033a610678366004613511565b611376565b6103a561068b366004613511565b6113dc565b6103a56a4d494e5445525f524f4c4560a81b81565b6103086106b33660046137b8565b6113f3565b6103086106c6366004613bba565b611418565b6103086106d9366004613831565b611456565b61033a61146a565b61031d6106f4366004613bfb565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b61072f6020820182613c25565b905061073e6040830183613c25565b90501461075e5760405163359a1bc360e01b815260040160405180910390fd5b60005b61076e6040830183613c25565b90508110156107f4576107e26107876020840184613831565b6107946020850185613c25565b848181106107a4576107a4613c6e565b90506020020160208101906107b99190613831565b6107c66040860186613c25565b858181106107d6576107d6613c6e565b90506020020135610d5b565b806107ec81613c9a565b915050610761565b5050565b600061080382611544565b92915050565b60606003805461081890613cb3565b80601f016020809104026020016040519081016040528092919081815260200182805461084490613cb3565b80156108915780601f1061086657610100808354040283529160200191610891565b820191906000526020600020905b81548152906001019060200180831161087457829003601f168201915b5050505050905090565b60006108a682611569565b506000908152600760205260409020546001600160a01b031690565b60006108cd82610df4565b9050806001600160a01b0316836001600160a01b03160361093f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061095b575061095b81336106f4565b6109cd5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610936565b6109d783836115c8565b505050565b6a4d494e5445525f524f4c4560a81b6109f481611719565b60005b82518110156109d757610a22838281518110610a1557610a15613c6e565b6020026020010151611723565b80610a2c81613c9a565b9150506109f7565b610a3f335b826117b2565b610a5b5760405162461bcd60e51b815260040161093690613ced565b6109d7838383611831565b6000828152600d602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610adb575060408051808201909152600c546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610afa906001600160601b031687613d3a565b610b049190613d51565b91519350909150505b9250929050565b600082815260208190526040902060010154610b2f81611719565b6109d78383611a38565b60606000610b46816113dc565b90506000816001600160401b03811115610b6257610b62613570565b604051908082528060200260200182016040528015610b8b578160200160208202803683370190505b50905060005b82811015610be057610ba4600082611041565b828281518110610bb657610bb6613c6e565b6001600160a01b039092166020928302919091019091015280610bd881613c9a565b915050610b91565b5092915050565b6000610bf1611a5a565b905090565b6001600160a01b0381163314610c665760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610936565b6107f48282611b85565b6000610c7b81611719565b6107f46a4d494e5445525f524f4c4560a81b83610b14565b60005b81518110156107f4576000828281518110610cb357610cb3613c6e565b6020026020010151905060005b816020015151811015610d0a57610cf8826000015183602001518381518110610ceb57610ceb613c6e565b6020026020010151611107565b80610d0281613c9a565b915050610cc0565b50508080610d1790613c9a565b915050610c96565b6a4d494e5445525f524f4c4560a81b610d3781611719565b610d418383611ba7565b60108054906000610d5183613c9a565b9190505550505050565b6109d783838360405180602001604052806000815250611344565b610d7f81611bee565b600881901c60009081526011602052604081208054600160ff85161b1790556010805491610dac83613d73565b919050555050565b6a4d494e5445525f524f4c4560a81b610dcc81611719565b610dd7848484611c1c565b50505050565b6000610de881611719565b600f6109d78382613dd0565b6000818152600560205260408120546001600160a01b0316806108035760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610936565b6000610e5f81611719565b6107f46a4d494e5445525f524f4c4560a81b836113f3565b600f8054610e8490613cb3565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb090613cb3565b8015610efd5780601f10610ed257610100808354040283529160200191610efd565b820191906000526020600020905b815481529060010190602001808311610ee057829003601f168201915b505050505081565b60006001600160a01b038216610f6f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610936565b506001600160a01b031660009081526006602052604090205490565b610dd784848484611ce7565b610fa081610c93565b50565b600060608082808083610fd77f00000000000000000000000000000000000000000000000000000000000000006009611dd0565b6110027f0000000000000000000000000000000000000000000000000000000000000000600a611dd0565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061103781611719565b6109d78383611e74565b60008281526001602052604081206110599083611f2e565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b600061109481611719565b600e6109d78382613dd0565b60606004805461081890613cb3565b6a4d494e5445525f524f4c4560a81b6110c781611719565b60005b82518110156109d7576110f58382815181106110e8576110e8613c6e565b6020026020010151611f3a565b806110ff81613c9a565b9150506110ca565b600061111282610df4565b9050826001600160a01b0316816001600160a01b03161461115857604051634fefd56160e01b8152600481018390526001600160a01b0382166024820152604401610936565b6109d782610d76565b6a4d494e5445525f524f4c4560a81b61117981611719565b610d41838360405180602001604052806000815250611fb0565b81333b1580159061120d57506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa1580156111e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120b9190613e8f565b155b1561122d5760405163f6fa4cbd60e01b8152336004820152602401610936565b6001600160a01b0381163b158015906112b157506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af9190613e8f565b155b156112da576040516341b8d58160e11b81526001600160a01b0382166004820152602401610936565b6109d78383611fe3565b6a4d494e5445525f524f4c4560a81b6112fc81611719565b60005b8481101561133c5761132a86868381811061131c5761131c613c6e565b905060200201358585611c1c565b8061133481613c9a565b9150506112ff565b505050505050565b61134e33836117b2565b61136a5760405162461bcd60e51b815260040161093690613ced565b610dd784848484611fee565b606061138182611569565b600061138b612021565b905060008151116113ab5760405180602001604052806000815250611059565b806113b584612030565b6040516020016113c6929190613eac565b6040516020818303038152906040529392505050565b6000818152600160205260408120610803906120c2565b60008281526020819052604090206001015461140e81611719565b6109d78383611b85565b60005b818110156109d75761144483838381811061143857611438613c6e565b90506020020135610d76565b8061144e81613c9a565b91505061141b565b600061146181611719565b6107f4826120cc565b600e8054610e8490613cb3565b60006020835110156114935761148c836121c1565b9050610803565b8161149e8482613dd0565b5060ff9050610803565b90565b6114b58282611060565b6107f4576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556114eb3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611059836001600160a01b0384166121ff565b60006001600160e01b0319821663152a902d60e11b148061080357506108038261224e565b6000818152600560205260409020546001600160a01b0316610fa05760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610936565b81333b1580159061164257506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa15801561161c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116409190613e8f565b155b156116625760405163f6fa4cbd60e01b8152336004820152602401610936565b6001600160a01b0381163b158015906116e657506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa1580156116c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e49190613e8f565b155b1561170f576040516341b8d58160e11b81526001600160a01b0382166004820152602401610936565b6109d78383612273565b610fa081336122e1565b80516001600160a01b031661174b576040516331c3e52960e11b815260040160405180910390fd5b60005b8160200151518110156117985761178682600001518360200151838151811061177957611779613c6e565b602002602001015161233a565b8061179081613c9a565b91505061174e565b508060200151516010546117ac9190613edb565b60105550565b6000806117be83610df4565b9050806001600160a01b0316846001600160a01b0316148061180557506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806118295750836001600160a01b031661181e8461089b565b6001600160a01b0316145b949350505050565b82823332148015906118ac57506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa158015611886573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118aa9190613e8f565b155b156118cc5760405163937db65f60e01b8152336004820152602401610936565b6001600160a01b0382163b1580159061195057506002546040516305a3b80960e01b81526001600160a01b038481166004830152909116906305a3b80990602401602060405180830381865afa15801561192a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194e9190613e8f565b155b156119795760405163f934453160e01b81526001600160a01b0383166004820152602401610936565b6001600160a01b0381163b158015906119fd57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa1580156119d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119fb9190613e8f565b155b15611a2657604051632a67242160e11b81526001600160a01b0382166004820152602401610936565b611a31858585612381565b5050505050565b611a4282826114ab565b60008281526001602052604090206109d7908261152f565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611ab357507f000000000000000000000000000000000000000000000000000000000000000046145b15611add57507f000000000000000000000000000000000000000000000000000000000000000090565b610bf1604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b611b8f82826123ab565b60008281526001602052604090206109d79082612410565b600881901c600090815260116020526040902054600160ff83161b1615611be4576040516305dcda1160e51b815260048101829052602401610936565b6107f48282612425565b611bf733610a39565b611c135760405162461bcd60e51b815260040161093690613ced565b610fa0816125b0565b6127106001600160601b0382161115611c475760405162461bcd60e51b815260040161093690613eee565b6001600160a01b038216611c9d5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606401610936565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600d90529190942093519051909116600160a01b029116179055565b42821015611d085760405163068568f360e21b815260040160405180910390fd5b6000611d15858585612645565b9050611d2a611d2385610df4565b828461271e565b15611d3f57611d3985856115c8565b50610dd7565b60008251604003611d8657611d7f82611d5b8560006020612828565b611d6490613f38565b611d718660206040612828565b611d7a90613f38565b612935565b9050611db2565b8251604103611d9957611d7f8284612952565b604051638baa579f60e01b815260040160405180910390fd5b611dbc8186612976565b15611d9957611dcb86866115c8565b61133c565b606060ff8314611de35761148c83612995565b818054611def90613cb3565b80601f0160208091040260200160405190810160405280929190818152602001828054611e1b90613cb3565b8015611e685780601f10611e3d57610100808354040283529160200191611e68565b820191906000526020600020905b815481529060010190602001808311611e4b57829003601f168201915b50505050509050610803565b6127106001600160601b0382161115611e9f5760405162461bcd60e51b815260040161093690613eee565b6001600160a01b038216611ef55760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610936565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600c55565b600061105983836129d4565b80516001600160a01b031615611f63576040516331c3e52960e11b815260040160405180910390fd5b60005b81602001515181101561179857611f9e826000015183602001518381518110611f9157611f91613c6e565b6020026020010151611ba7565b80611fa881613c9a565b915050611f66565b611fba8383611ba7565b611fc760008484846129fe565b6109d75760405162461bcd60e51b815260040161093690613f5c565b6107f4338383612aff565b611ff9848484611831565b612005848484846129fe565b610dd75760405162461bcd60e51b815260040161093690613f5c565b6060600f805461081890613cb3565b6060600061203d83612bcd565b60010190506000816001600160401b0381111561205c5761205c613570565b6040519080825280601f01601f191660200182016040528015612086576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461209057509392505050565b6000610803825490565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015612117573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213b9190613e8f565b6121585760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b600080829050601f815111156121ec578260405163305a27a960e01b815260040161093691906134fe565b80516121f782613f38565b179392505050565b600081815260018301602052604081205461224657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610803565b506000610803565b60006001600160e01b03198216635604e22560e01b1480610803575061080382612ca5565b600081815260076020526040902080546001600160a01b0319166001600160a01b03841690811790915581906122a882610df4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6122eb8282611060565b6107f4576122f881612ce5565b612303836020612cf7565b604051602001612314929190613fae565b60408051601f198184030181529082905262461bcd60e51b8252610936916004016134fe565b600881901c600090815260116020526040902054600160ff83161b1615612377576040516305dcda1160e51b815260048101829052602401610936565b6107f48282612e92565b6000818152600b6020526040812080549161239b83613c9a565b91905055506109d7838383612eac565b6123b58282611060565b156107f4576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611059836001600160a01b038416613010565b6001600160a01b03821661247b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610936565b6000818152600560205260409020546001600160a01b0316156124e05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610936565b6000818152600560205260409020546001600160a01b0316156125455760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610936565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006125bb82610df4565b90506125c682610df4565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006118296040516020016126b390660a0cae4dad2e8560cb1b81527f61646472657373207370656e6465722c75696e7432353620746f6b656e49642c60078201527f75696e74323536206e6f6e63652c75696e7432353620646561646c696e652900602782015260460190565b60408051808303601f1901815282825280516020918201206000888152600b835283902054918401526001600160a01b0388169183019190915260608201869052608082015260a0810184905260c00160405160208183030381529060405280519060200120613103565b6000806000856001600160a01b0316631626ba7e60e01b8686604051602401612748929190614023565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612786919061403c565b600060405180830381855afa9150503d80600081146127c1576040519150601f19603f3d011682016040523d82523d6000602084013e6127c6565b606091505b50915091508180156127d9575080516020145b1561281c576000818060200190518101906127f49190614058565b90506374eca2c160e11b6001600160e01b031982160161281a5760019350505050611059565b505b50600095945050505050565b60608161283681601f613edb565b10156128755760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610936565b61287f8284613edb565b845110156128c35760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610936565b6060821580156128e2576040519150600082526020820160405261292c565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561291b578051835260209283019201612903565b5050858452601f01601f1916604052505b50949350505050565b6000806000612945868686613130565b9150915061292c81613169565b600080600061296185856132b3565b9150915061296e81613169565b509392505050565b60006001600160a01b03831615801590611059575061105983836117b2565b606060006129a2836132f5565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b60008260000182815481106129eb576129eb613c6e565b9060005260206000200154905092915050565b60006001600160a01b0384163b15612af457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612a42903390899088908890600401614075565b6020604051808303816000875af1925050508015612a7d575060408051601f3d908101601f19168201909252612a7a91810190614058565b60015b612ada573d808015612aab576040519150601f19603f3d011682016040523d82523d6000602084013e612ab0565b606091505b508051600003612ad25760405162461bcd60e51b815260040161093690613f5c565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611829565b506001949350505050565b816001600160a01b0316836001600160a01b031603612b605760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610936565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612c0c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612c38576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612c5657662386f26fc10000830492506010015b6305f5e1008310612c6e576305f5e100830492506008015b6127108310612c8257612710830492506004015b60648310612c94576064830492506002015b600a83106108035760010192915050565b60006001600160e01b031982166380ac58cd60e01b1480612cd657506001600160e01b03198216635b5e139f60e01b145b8061080357506108038261331d565b60606108036001600160a01b03831660145b60606000612d06836002613d3a565b612d11906002613edb565b6001600160401b03811115612d2857612d28613570565b6040519080825280601f01601f191660200182016040528015612d52576020820181803683370190505b509050600360fc1b81600081518110612d6d57612d6d613c6e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d9c57612d9c613c6e565b60200101906001600160f81b031916908160001a9053506000612dc0846002613d3a565b612dcb906001613edb565b90505b6001811115612e43576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612dff57612dff613c6e565b1a60f81b828281518110612e1557612e15613c6e565b60200101906001600160f81b031916908160001a90535060049490941c93612e3c81613d73565b9050612dce565b5083156110595760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610936565b6107f4828260405180602001604052806000815250611fb0565b826001600160a01b0316612ebf82610df4565b6001600160a01b031614612ee55760405162461bcd60e51b8152600401610936906140b2565b6001600160a01b038216612f475760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610936565b826001600160a01b0316612f5a82610df4565b6001600160a01b031614612f805760405162461bcd60e51b8152600401610936906140b2565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600081815260018301602052604081205480156130f95760006130346001836140f7565b8554909150600090613048906001906140f7565b90508181146130ad57600086600001828154811061306857613068613c6e565b906000526020600020015490508087600001848154811061308b5761308b613c6e565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806130be576130be61410a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610803565b6000915050610803565b6000610803613110611a5a565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806001600160ff1b0383168161314d60ff86901c601b613edb565b905061315b87828885613328565b935093505050935093915050565b600081600481111561317d5761317d614120565b036131855750565b600181600481111561319957613199614120565b036131e65760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610936565b60028160048111156131fa576131fa614120565b036132475760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610936565b600381600481111561325b5761325b614120565b03610fa05760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610936565b60008082516041036132e95760208301516040840151606085015160001a6132dd87828585613328565b94509450505050610b0d565b50600090506002610b0d565b600060ff8216601f81111561080357604051632cd44ac360e21b815260040160405180910390fd5b6000610803826133ec565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561335f57506000905060036133e3565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156133b3573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166133dc576000600192509250506133e3565b9150600090505b94509492505050565b60006001600160e01b03198216635a05180f60e01b148061080357506108038260006001600160e01b03198216637965db0b60e01b148061080357506301ffc9a760e01b6001600160e01b0319831614610803565b60006020828403121561345357600080fd5b81356001600160401b0381111561346957600080fd5b82016060818503121561105957600080fd5b6001600160e01b031981168114610fa057600080fd5b6000602082840312156134a357600080fd5b81356110598161347b565b60005b838110156134c95781810151838201526020016134b1565b50506000910152565b600081518084526134ea8160208601602086016134ae565b601f01601f19169290920160200192915050565b60208152600061105960208301846134d2565b60006020828403121561352357600080fd5b5035919050565b80356001600160a01b038116811461354157600080fd5b919050565b6000806040838503121561355957600080fd5b6135628361352a565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156135a8576135a8613570565b60405290565b604051601f8201601f191681016001600160401b03811182821017156135d6576135d6613570565b604052919050565b60006001600160401b038211156135f7576135f7613570565b5060051b60200190565b600061361461360f846135de565b6135ae565b8381529050602080820190600585811b85018781111561363357600080fd5b855b818110156137065780356001600160401b03808211156136555760008081fd5b908801906040828c03121561366a5760008081fd5b613672613586565b61367b8361352a565b8152868301358281111561368f5760008081fd5b8084019350508b601f8401126136a757600091508182fd5b823591506136b761360f836135de565b82815291861b8301870191878101908d8411156136d45760008081fd5b938801935b838510156136f2578435825293880193908801906136d9565b828901525087525050938301938301613635565b50505050509392505050565b60006020828403121561372457600080fd5b81356001600160401b0381111561373a57600080fd5b8201601f8101841361374b57600080fd5b61182984823560208401613601565b60008060006060848603121561376f57600080fd5b6137788461352a565b92506137866020850161352a565b9150604084013590509250925092565b600080604083850312156137a957600080fd5b50508035926020909101359150565b600080604083850312156137cb57600080fd5b823591506137db6020840161352a565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156138255783516001600160a01b031683529284019291840191600101613800565b50909695505050505050565b60006020828403121561384357600080fd5b6110598261352a565b80356001600160601b038116811461354157600080fd5b60008060006060848603121561387857600080fd5b833592506138886020850161352a565b91506138966040850161384c565b90509250925092565b60006001600160401b038311156138b8576138b8613570565b6138cb601f8401601f19166020016135ae565b90508281528383830111156138df57600080fd5b828260208301376000602084830101529392505050565b60006020828403121561390857600080fd5b81356001600160401b0381111561391e57600080fd5b8201601f8101841361392f57600080fd5b6118298482356020840161389f565b600082601f83011261394f57600080fd5b6110598383356020850161389f565b6000806000806080858703121561397457600080fd5b61397d8561352a565b9350602085013592506040850135915060608501356001600160401b038111156139a657600080fd5b6139b28782880161393e565b91505092959194509250565b60ff60f81b881681526000602060e0818401526139de60e084018a6134d2565b83810360408501526139f0818a6134d2565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015613a4257835183529284019291840191600101613a26565b50909c9b505050505050505050505050565b60008060408385031215613a6757600080fd5b613a708361352a565b91506137db6020840161384c565b8015158114610fa057600080fd5b60008060408385031215613a9f57600080fd5b613aa88361352a565b91506020830135613ab881613a7e565b809150509250929050565b60008083601f840112613ad557600080fd5b5081356001600160401b03811115613aec57600080fd5b6020830191508360208260051b8501011115610b0d57600080fd5b60008060008060608587031215613b1d57600080fd5b84356001600160401b03811115613b3357600080fd5b613b3f87828801613ac3565b9095509350613b5290506020860161352a565b9150613b606040860161384c565b905092959194509250565b60008060008060808587031215613b8157600080fd5b613b8a8561352a565b9350613b986020860161352a565b92506040850135915060608501356001600160401b038111156139a657600080fd5b60008060208385031215613bcd57600080fd5b82356001600160401b03811115613be357600080fd5b613bef85828601613ac3565b90969095509350505050565b60008060408385031215613c0e57600080fd5b613c178361352a565b91506137db6020840161352a565b6000808335601e19843603018112613c3c57600080fd5b8301803591506001600160401b03821115613c5657600080fd5b6020019150600581901b3603821315610b0d57600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201613cac57613cac613c84565b5060010190565b600181811c90821680613cc757607f821691505b602082108103613ce757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b808202811582820484141761080357610803613c84565b600082613d6e57634e487b7160e01b600052601260045260246000fd5b500490565b600081613d8257613d82613c84565b506000190190565b601f8211156109d757600081815260208120601f850160051c81016020861015613db15750805b601f850160051c820191505b8181101561133c57828155600101613dbd565b81516001600160401b03811115613de957613de9613570565b613dfd81613df78454613cb3565b84613d8a565b602080601f831160018114613e325760008415613e1a5750858301515b600019600386901b1c1916600185901b17855561133c565b600085815260208120601f198616915b82811015613e6157888601518255948401946001909101908401613e42565b5085821015613e7f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215613ea157600080fd5b815161105981613a7e565b60008351613ebe8184602088016134ae565b835190830190613ed28183602088016134ae565b01949350505050565b8082018082111561080357610803613c84565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b80516020808301519190811015613ce75760001960209190910360031b1b16919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613fe68160178501602088016134ae565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516140178160288401602088016134ae565b01602801949350505050565b82815260406020820152600061182960408301846134d2565b6000825161404e8184602087016134ae565b9190910192915050565b60006020828403121561406a57600080fd5b81516110598161347b565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906140a8908301846134d2565b9695505050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b8181038181111561080357610803613c84565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fdfea2646970667358221220c47aea78e02adda7e8a36138892c3ed2fc9b754ce58545603813e5750b053f0764736f6c63430008110033";
32782
33616
  const isSuperArgs$1 = (xs) => xs.length > 1;
32783
33617
  class ImmutableERC721MintByID__factory extends ContractFactory {
32784
33618
  constructor(...args) {
@@ -32875,6 +33709,13 @@ class ERC721 {
32875
33709
  async DEFAULT_ADMIN_ROLE(provider, overrides = {}) {
32876
33710
  return await this.contract.connect(provider).DEFAULT_ADMIN_ROLE(overrides);
32877
33711
  }
33712
+ /**
33713
+ * Returns the domain separator used in the encoding of the signature for permits, as defined by EIP-712
33714
+ * @return the bytes32 domain separator
33715
+ */
33716
+ async DOMAIN_SEPARATOR(provider, overrides) {
33717
+ return await this.contract.connect(provider).DOMAIN_SEPARATOR(overrides);
33718
+ }
32878
33719
  /**
32879
33720
  * @returns the MINTER_ROLE as a string.
32880
33721
  */
@@ -32899,6 +33740,13 @@ class ERC721 {
32899
33740
  async contractURI(provider, overrides = {}) {
32900
33741
  return await this.contract.connect(provider).contractURI(overrides);
32901
33742
  }
33743
+ /**
33744
+ * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712
33745
+ * signature.
33746
+ */
33747
+ async eip712Domain(provider, overrides) {
33748
+ return await this.contract.eip712Domain(overrides);
33749
+ }
32902
33750
  /**
32903
33751
  * @returns admin addresses as an array of strings.
32904
33752
  */
@@ -32953,6 +33801,14 @@ class ERC721 {
32953
33801
  async ownerOf(provider, tokenId, overrides = {}) {
32954
33802
  return await this.contract.connect(provider).ownerOf(tokenId, overrides);
32955
33803
  }
33804
+ /**
33805
+ * Returns the current nonce of a given token ID.
33806
+ * @param tokenId The ID of the token for which to retrieve the nonce.
33807
+ * @return Current nonce of the given token.
33808
+ */
33809
+ async nonces(provider, tokenId, overrides) {
33810
+ return await this.contract.connect(provider).nonces(tokenId, overrides);
33811
+ }
32956
33812
  /**
32957
33813
  * @returns the operator allowlist as a string.
32958
33814
  */
@@ -32992,6 +33848,16 @@ class ERC721 {
32992
33848
  async populateApprove(to, tokenId, overrides = {}) {
32993
33849
  return await this.contract.populateTransaction.approve(to, tokenId, overrides);
32994
33850
  }
33851
+ /**
33852
+ * Function to approve by way of owner signature
33853
+ * @param spender the address to approve
33854
+ * @param tokenId the index of the NFT to approve the spender on
33855
+ * @param deadline a timestamp expiry for the permit
33856
+ * @param sig a traditional or EIP-2098 signature
33857
+ */
33858
+ async populatePermit(spender, tokenId, deadline, sig, overrides = {}) {
33859
+ return await this.contract.populateTransaction.permit(spender, tokenId, deadline, sig, overrides);
33860
+ }
32995
33861
  /**
32996
33862
  * @returns a populated transaction for the burn contract function
32997
33863
  */
@@ -33210,9 +34076,7 @@ class ERC721MintByID {
33210
34076
  * @returns the approved address for a token ID, or zero if no address set.
33211
34077
  */
33212
34078
  async getApproved(provider, tokenId, overrides = {}) {
33213
- return await this.contract
33214
- .connect(provider)
33215
- .getApproved(tokenId, overrides);
34079
+ return await this.contract.connect(provider).getApproved(tokenId, overrides);
33216
34080
  }
33217
34081
  /**
33218
34082
  * @returns the role admin address.
@@ -33224,33 +34088,25 @@ class ERC721MintByID {
33224
34088
  * @returns the role member address at a particular index.
33225
34089
  */
33226
34090
  async getRoleMember(provider, role, index, overrides = {}) {
33227
- return await this.contract
33228
- .connect(provider)
33229
- .getRoleMember(role, index, overrides);
34091
+ return await this.contract.connect(provider).getRoleMember(role, index, overrides);
33230
34092
  }
33231
34093
  /**
33232
34094
  * @returns the role member count as a BigNumber.
33233
34095
  */
33234
34096
  async getRoleMemberCount(provider, role, overrides = {}) {
33235
- return await this.contract
33236
- .connect(provider)
33237
- .getRoleMemberCount(role, overrides);
34097
+ return await this.contract.connect(provider).getRoleMemberCount(role, overrides);
33238
34098
  }
33239
34099
  /**
33240
34100
  * @returns a boolean for whether an account has a particular role.
33241
34101
  */
33242
34102
  async hasRole(provider, role, account, overrides = {}) {
33243
- return await this.contract
33244
- .connect(provider)
33245
- .hasRole(role, account, overrides);
34103
+ return await this.contract.connect(provider).hasRole(role, account, overrides);
33246
34104
  }
33247
34105
  /**
33248
34106
  * @returns a booolean that tells whether an operator is approved by a given owner.
33249
34107
  */
33250
34108
  async isApprovedForAll(provider, owner, operator, overrides = {}) {
33251
- return await this.contract
33252
- .connect(provider)
33253
- .isApprovedForAll(owner, operator, overrides);
34109
+ return await this.contract.connect(provider).isApprovedForAll(owner, operator, overrides);
33254
34110
  }
33255
34111
  /**
33256
34112
  * @returns the name of the contract as a string.
@@ -33264,6 +34120,14 @@ class ERC721MintByID {
33264
34120
  async ownerOf(provider, tokenId, overrides = {}) {
33265
34121
  return await this.contract.connect(provider).ownerOf(tokenId, overrides);
33266
34122
  }
34123
+ /**
34124
+ * Returns the current nonce of a given token ID.
34125
+ * @param tokenId The ID of the token for which to retrieve the nonce.
34126
+ * @return Current nonce of the given token.
34127
+ */
34128
+ async nonces(provider, tokenId, overrides) {
34129
+ return await this.contract.connect(provider).nonces(tokenId, overrides);
34130
+ }
33267
34131
  /**
33268
34132
  * @returns the operator allowlist as a string.
33269
34133
  */
@@ -33274,9 +34138,7 @@ class ERC721MintByID {
33274
34138
  * @returns the royalty information for a particular tokenId.
33275
34139
  */
33276
34140
  async royaltyInfo(provider, _tokenId, _salePrice, overrides = {}) {
33277
- return await this.contract
33278
- .connect(provider)
33279
- .royaltyInfo(_tokenId, _salePrice, overrides);
34141
+ return await this.contract.connect(provider).royaltyInfo(_tokenId, _salePrice, overrides);
33280
34142
  }
33281
34143
  /**
33282
34144
  * @returns the symbol of the contract as a string.
@@ -33305,6 +34167,16 @@ class ERC721MintByID {
33305
34167
  async populateApprove(to, tokenId, overrides = {}) {
33306
34168
  return await this.contract.populateTransaction.approve(to, tokenId, overrides);
33307
34169
  }
34170
+ /**
34171
+ * Function to approve by way of owner signature
34172
+ * @param spender the address to approve
34173
+ * @param tokenId the index of the NFT to approve the spender on
34174
+ * @param deadline a timestamp expiry for the permit
34175
+ * @param sig a traditional or EIP-2098 signature
34176
+ */
34177
+ async populatePermit(spender, tokenId, deadline, sig, overrides = {}) {
34178
+ return await this.contract.populateTransaction.permit(spender, tokenId, deadline, sig, overrides);
34179
+ }
33308
34180
  /**
33309
34181
  * @returns a populated transaction for the burn contract function
33310
34182
  */