@imtbl/sdk 0.15.2-alpha → 0.16.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import globalAxios$1 from 'axios';
1
+ import globalAxios$1, { HttpStatusCode as HttpStatusCode$2 } from 'axios';
2
2
  import { ImmutableX, Config, IMXError, createStarkSigner, generateLegacyStarkPrivateKey, TransfersApi, OrdersApi as OrdersApi$1, UsersApi, Contracts, TradesApi, ExchangesApi, WithdrawalsApi, MintsApi, DepositsApi, EncodingApi, TokensApi as TokensApi$1 } from '@imtbl/core-sdk';
3
3
  import { UserManager } from 'oidc-client-ts';
4
4
  import jwt_decode from 'jwt-decode';
@@ -1292,16 +1292,16 @@ const OrdersApiAxiosParamCreator = function (configuration) {
1292
1292
  * Retrieve signed fulfillment data based on the list of order IDs and corresponding fees.
1293
1293
  * @summary Retrieve fulfillment data for orders
1294
1294
  * @param {string} chainName
1295
- * @param {Array<FulfillmentDataRequestInner>} fulfillmentDataRequestInner
1295
+ * @param {Array<FulfillmentDataRequest>} fulfillmentDataRequest
1296
1296
  * @param {*} [options] Override http request option.
1297
1297
  * @throws {RequiredError}
1298
1298
  */
1299
- fulfillmentData: async (chainName, fulfillmentDataRequestInner, options = {}) => {
1299
+ fulfillmentData: async (chainName, fulfillmentDataRequest, options = {}) => {
1300
1300
  // verify required parameter 'chainName' is not null or undefined
1301
1301
  assertParamExists$1('fulfillmentData', 'chainName', chainName);
1302
- // verify required parameter 'fulfillmentDataRequestInner' is not null or undefined
1303
- assertParamExists$1('fulfillmentData', 'fulfillmentDataRequestInner', fulfillmentDataRequestInner);
1304
- const localVarPath = `/v1/chains/{chain_name}/orders/fulfillment_data`
1302
+ // verify required parameter 'fulfillmentDataRequest' is not null or undefined
1303
+ assertParamExists$1('fulfillmentData', 'fulfillmentDataRequest', fulfillmentDataRequest);
1304
+ const localVarPath = `/v1/chains/{chain_name}/orders/fulfillment-data`
1305
1305
  .replace(`{${"chain_name"}}`, encodeURIComponent(String(chainName)));
1306
1306
  // use dummy base URL string because the URL constructor only accepts absolute URLs.
1307
1307
  const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL$1);
@@ -1316,7 +1316,7 @@ const OrdersApiAxiosParamCreator = function (configuration) {
1316
1316
  setSearchParams$1(localVarUrlObj, localVarQueryParameter);
1317
1317
  let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1318
1318
  localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
1319
- localVarRequestOptions.data = serializeDataIfNeeded$1(fulfillmentDataRequestInner, localVarRequestOptions, configuration);
1319
+ localVarRequestOptions.data = serializeDataIfNeeded$1(fulfillmentDataRequest, localVarRequestOptions, configuration);
1320
1320
  return {
1321
1321
  url: toPathString$1(localVarUrlObj),
1322
1322
  options: localVarRequestOptions,
@@ -1355,6 +1355,39 @@ const OrdersApiAxiosParamCreator = function (configuration) {
1355
1355
  options: localVarRequestOptions,
1356
1356
  };
1357
1357
  },
1358
+ /**
1359
+ * Get a single trade by ID
1360
+ * @summary Get a single trade by ID
1361
+ * @param {string} chainName
1362
+ * @param {string} tradeId Global Trade identifier
1363
+ * @param {*} [options] Override http request option.
1364
+ * @throws {RequiredError}
1365
+ */
1366
+ getTrade: async (chainName, tradeId, options = {}) => {
1367
+ // verify required parameter 'chainName' is not null or undefined
1368
+ assertParamExists$1('getTrade', 'chainName', chainName);
1369
+ // verify required parameter 'tradeId' is not null or undefined
1370
+ assertParamExists$1('getTrade', 'tradeId', tradeId);
1371
+ const localVarPath = `/v1/chains/{chain_name}/trades/{trade_id}`
1372
+ .replace(`{${"chain_name"}}`, encodeURIComponent(String(chainName)))
1373
+ .replace(`{${"trade_id"}}`, encodeURIComponent(String(tradeId)));
1374
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
1375
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL$1);
1376
+ let baseOptions;
1377
+ if (configuration) {
1378
+ baseOptions = configuration.baseOptions;
1379
+ }
1380
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };
1381
+ const localVarHeaderParameter = {};
1382
+ const localVarQueryParameter = {};
1383
+ setSearchParams$1(localVarUrlObj, localVarQueryParameter);
1384
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1385
+ localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
1386
+ return {
1387
+ url: toPathString$1(localVarUrlObj),
1388
+ options: localVarRequestOptions,
1389
+ };
1390
+ },
1358
1391
  /**
1359
1392
  * List all listings
1360
1393
  * @summary List all listings
@@ -1416,6 +1449,51 @@ const OrdersApiAxiosParamCreator = function (configuration) {
1416
1449
  options: localVarRequestOptions,
1417
1450
  };
1418
1451
  },
1452
+ /**
1453
+ * List all trades
1454
+ * @summary List all trades
1455
+ * @param {string} chainName
1456
+ * @param {number} [pageSize] Maximum number of trades to return per page
1457
+ * @param {'created_at'} [sortBy] Trade field to sort by
1458
+ * @param {'asc' | 'desc'} [sortDirection] Ascending or descending direction for sort
1459
+ * @param {string} [pageCursor] Page cursor to retrieve previous or next page. Use the value returned in the response.
1460
+ * @param {*} [options] Override http request option.
1461
+ * @throws {RequiredError}
1462
+ */
1463
+ listTrades: async (chainName, pageSize, sortBy, sortDirection, pageCursor, options = {}) => {
1464
+ // verify required parameter 'chainName' is not null or undefined
1465
+ assertParamExists$1('listTrades', 'chainName', chainName);
1466
+ const localVarPath = `/v1/chains/{chain_name}/trades`
1467
+ .replace(`{${"chain_name"}}`, encodeURIComponent(String(chainName)));
1468
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
1469
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL$1);
1470
+ let baseOptions;
1471
+ if (configuration) {
1472
+ baseOptions = configuration.baseOptions;
1473
+ }
1474
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };
1475
+ const localVarHeaderParameter = {};
1476
+ const localVarQueryParameter = {};
1477
+ if (pageSize !== undefined) {
1478
+ localVarQueryParameter['page_size'] = pageSize;
1479
+ }
1480
+ if (sortBy !== undefined) {
1481
+ localVarQueryParameter['sort_by'] = sortBy;
1482
+ }
1483
+ if (sortDirection !== undefined) {
1484
+ localVarQueryParameter['sort_direction'] = sortDirection;
1485
+ }
1486
+ if (pageCursor !== undefined) {
1487
+ localVarQueryParameter['page_cursor'] = pageCursor;
1488
+ }
1489
+ setSearchParams$1(localVarUrlObj, localVarQueryParameter);
1490
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1491
+ localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
1492
+ return {
1493
+ url: toPathString$1(localVarUrlObj),
1494
+ options: localVarRequestOptions,
1495
+ };
1496
+ },
1419
1497
  };
1420
1498
  };
1421
1499
  /**
@@ -1441,12 +1519,12 @@ const OrdersApiFp = function (configuration) {
1441
1519
  * Retrieve signed fulfillment data based on the list of order IDs and corresponding fees.
1442
1520
  * @summary Retrieve fulfillment data for orders
1443
1521
  * @param {string} chainName
1444
- * @param {Array<FulfillmentDataRequestInner>} fulfillmentDataRequestInner
1522
+ * @param {Array<FulfillmentDataRequest>} fulfillmentDataRequest
1445
1523
  * @param {*} [options] Override http request option.
1446
1524
  * @throws {RequiredError}
1447
1525
  */
1448
- async fulfillmentData(chainName, fulfillmentDataRequestInner, options) {
1449
- const localVarAxiosArgs = await localVarAxiosParamCreator.fulfillmentData(chainName, fulfillmentDataRequestInner, options);
1526
+ async fulfillmentData(chainName, fulfillmentDataRequest, options) {
1527
+ const localVarAxiosArgs = await localVarAxiosParamCreator.fulfillmentData(chainName, fulfillmentDataRequest, options);
1450
1528
  return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1451
1529
  },
1452
1530
  /**
@@ -1461,6 +1539,18 @@ const OrdersApiFp = function (configuration) {
1461
1539
  const localVarAxiosArgs = await localVarAxiosParamCreator.getListing(chainName, listingId, options);
1462
1540
  return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1463
1541
  },
1542
+ /**
1543
+ * Get a single trade by ID
1544
+ * @summary Get a single trade by ID
1545
+ * @param {string} chainName
1546
+ * @param {string} tradeId Global Trade identifier
1547
+ * @param {*} [options] Override http request option.
1548
+ * @throws {RequiredError}
1549
+ */
1550
+ async getTrade(chainName, tradeId, options) {
1551
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getTrade(chainName, tradeId, options);
1552
+ return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1553
+ },
1464
1554
  /**
1465
1555
  * List all listings
1466
1556
  * @summary List all listings
@@ -1480,6 +1570,21 @@ const OrdersApiFp = function (configuration) {
1480
1570
  const localVarAxiosArgs = await localVarAxiosParamCreator.listListings(chainName, status, sellItemContractAddress, buyItemContractAddress, sellItemTokenId, pageSize, sortBy, sortDirection, pageCursor, options);
1481
1571
  return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1482
1572
  },
1573
+ /**
1574
+ * List all trades
1575
+ * @summary List all trades
1576
+ * @param {string} chainName
1577
+ * @param {number} [pageSize] Maximum number of trades to return per page
1578
+ * @param {'created_at'} [sortBy] Trade field to sort by
1579
+ * @param {'asc' | 'desc'} [sortDirection] Ascending or descending direction for sort
1580
+ * @param {string} [pageCursor] Page cursor to retrieve previous or next page. Use the value returned in the response.
1581
+ * @param {*} [options] Override http request option.
1582
+ * @throws {RequiredError}
1583
+ */
1584
+ async listTrades(chainName, pageSize, sortBy, sortDirection, pageCursor, options) {
1585
+ const localVarAxiosArgs = await localVarAxiosParamCreator.listTrades(chainName, pageSize, sortBy, sortDirection, pageCursor, options);
1586
+ return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1587
+ },
1483
1588
  };
1484
1589
  };
1485
1590
  /**
@@ -1504,12 +1609,12 @@ const OrdersApiFactory = function (configuration, basePath, axios) {
1504
1609
  * Retrieve signed fulfillment data based on the list of order IDs and corresponding fees.
1505
1610
  * @summary Retrieve fulfillment data for orders
1506
1611
  * @param {string} chainName
1507
- * @param {Array<FulfillmentDataRequestInner>} fulfillmentDataRequestInner
1612
+ * @param {Array<FulfillmentDataRequest>} fulfillmentDataRequest
1508
1613
  * @param {*} [options] Override http request option.
1509
1614
  * @throws {RequiredError}
1510
1615
  */
1511
- fulfillmentData(chainName, fulfillmentDataRequestInner, options) {
1512
- return localVarFp.fulfillmentData(chainName, fulfillmentDataRequestInner, options).then((request) => request(axios, basePath));
1616
+ fulfillmentData(chainName, fulfillmentDataRequest, options) {
1617
+ return localVarFp.fulfillmentData(chainName, fulfillmentDataRequest, options).then((request) => request(axios, basePath));
1513
1618
  },
1514
1619
  /**
1515
1620
  * Get a single listing by ID
@@ -1522,6 +1627,17 @@ const OrdersApiFactory = function (configuration, basePath, axios) {
1522
1627
  getListing(chainName, listingId, options) {
1523
1628
  return localVarFp.getListing(chainName, listingId, options).then((request) => request(axios, basePath));
1524
1629
  },
1630
+ /**
1631
+ * Get a single trade by ID
1632
+ * @summary Get a single trade by ID
1633
+ * @param {string} chainName
1634
+ * @param {string} tradeId Global Trade identifier
1635
+ * @param {*} [options] Override http request option.
1636
+ * @throws {RequiredError}
1637
+ */
1638
+ getTrade(chainName, tradeId, options) {
1639
+ return localVarFp.getTrade(chainName, tradeId, options).then((request) => request(axios, basePath));
1640
+ },
1525
1641
  /**
1526
1642
  * List all listings
1527
1643
  * @summary List all listings
@@ -1540,6 +1656,20 @@ const OrdersApiFactory = function (configuration, basePath, axios) {
1540
1656
  listListings(chainName, status, sellItemContractAddress, buyItemContractAddress, sellItemTokenId, pageSize, sortBy, sortDirection, pageCursor, options) {
1541
1657
  return localVarFp.listListings(chainName, status, sellItemContractAddress, buyItemContractAddress, sellItemTokenId, pageSize, sortBy, sortDirection, pageCursor, options).then((request) => request(axios, basePath));
1542
1658
  },
1659
+ /**
1660
+ * List all trades
1661
+ * @summary List all trades
1662
+ * @param {string} chainName
1663
+ * @param {number} [pageSize] Maximum number of trades to return per page
1664
+ * @param {'created_at'} [sortBy] Trade field to sort by
1665
+ * @param {'asc' | 'desc'} [sortDirection] Ascending or descending direction for sort
1666
+ * @param {string} [pageCursor] Page cursor to retrieve previous or next page. Use the value returned in the response.
1667
+ * @param {*} [options] Override http request option.
1668
+ * @throws {RequiredError}
1669
+ */
1670
+ listTrades(chainName, pageSize, sortBy, sortDirection, pageCursor, options) {
1671
+ return localVarFp.listTrades(chainName, pageSize, sortBy, sortDirection, pageCursor, options).then((request) => request(axios, basePath));
1672
+ },
1543
1673
  };
1544
1674
  };
1545
1675
  /**
@@ -1569,7 +1699,7 @@ class OrdersApi extends BaseAPI$1 {
1569
1699
  * @memberof OrdersApi
1570
1700
  */
1571
1701
  fulfillmentData(requestParameters, options) {
1572
- return OrdersApiFp(this.configuration).fulfillmentData(requestParameters.chainName, requestParameters.fulfillmentDataRequestInner, options).then((request) => request(this.axios, this.basePath));
1702
+ return OrdersApiFp(this.configuration).fulfillmentData(requestParameters.chainName, requestParameters.fulfillmentDataRequest, options).then((request) => request(this.axios, this.basePath));
1573
1703
  }
1574
1704
  /**
1575
1705
  * Get a single listing by ID
@@ -1582,6 +1712,17 @@ class OrdersApi extends BaseAPI$1 {
1582
1712
  getListing(requestParameters, options) {
1583
1713
  return OrdersApiFp(this.configuration).getListing(requestParameters.chainName, requestParameters.listingId, options).then((request) => request(this.axios, this.basePath));
1584
1714
  }
1715
+ /**
1716
+ * Get a single trade by ID
1717
+ * @summary Get a single trade by ID
1718
+ * @param {OrdersApiGetTradeRequest} requestParameters Request parameters.
1719
+ * @param {*} [options] Override http request option.
1720
+ * @throws {RequiredError}
1721
+ * @memberof OrdersApi
1722
+ */
1723
+ getTrade(requestParameters, options) {
1724
+ return OrdersApiFp(this.configuration).getTrade(requestParameters.chainName, requestParameters.tradeId, options).then((request) => request(this.axios, this.basePath));
1725
+ }
1585
1726
  /**
1586
1727
  * List all listings
1587
1728
  * @summary List all listings
@@ -1593,6 +1734,17 @@ class OrdersApi extends BaseAPI$1 {
1593
1734
  listListings(requestParameters, options) {
1594
1735
  return OrdersApiFp(this.configuration).listListings(requestParameters.chainName, requestParameters.status, requestParameters.sellItemContractAddress, requestParameters.buyItemContractAddress, requestParameters.sellItemTokenId, requestParameters.pageSize, requestParameters.sortBy, requestParameters.sortDirection, requestParameters.pageCursor, options).then((request) => request(this.axios, this.basePath));
1595
1736
  }
1737
+ /**
1738
+ * List all trades
1739
+ * @summary List all trades
1740
+ * @param {OrdersApiListTradesRequest} requestParameters Request parameters.
1741
+ * @param {*} [options] Override http request option.
1742
+ * @throws {RequiredError}
1743
+ * @memberof OrdersApi
1744
+ */
1745
+ 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));
1747
+ }
1596
1748
  }
1597
1749
 
1598
1750
  /* tslint:disable */
@@ -1647,6 +1799,38 @@ const PassportApiAxiosParamCreator = function (configuration) {
1647
1799
  options: localVarRequestOptions,
1648
1800
  };
1649
1801
  },
1802
+ /**
1803
+ * Get all the Ethereum linked addresses for a user based on its userId
1804
+ * @summary Get Ethereum linked addresses for a user
1805
+ * @param {string} userId The user\&#39;s userId
1806
+ * @param {*} [options] Override http request option.
1807
+ * @throws {RequiredError}
1808
+ */
1809
+ getLinkedAddresses: async (userId, options = {}) => {
1810
+ // verify required parameter 'userId' is not null or undefined
1811
+ assertParamExists$1('getLinkedAddresses', 'userId', userId);
1812
+ const localVarPath = `/passport-mr/v1/users/{userId}/linked-addresses`
1813
+ .replace(`{${"userId"}}`, encodeURIComponent(String(userId)));
1814
+ // use dummy base URL string because the URL constructor only accepts absolute URLs.
1815
+ const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL$1);
1816
+ let baseOptions;
1817
+ if (configuration) {
1818
+ baseOptions = configuration.baseOptions;
1819
+ }
1820
+ const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options };
1821
+ const localVarHeaderParameter = {};
1822
+ const localVarQueryParameter = {};
1823
+ // authentication BearerAuth required
1824
+ // http bearer authentication required
1825
+ await setBearerAuthToObject$1(localVarHeaderParameter, configuration);
1826
+ setSearchParams$1(localVarUrlObj, localVarQueryParameter);
1827
+ let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
1828
+ localVarRequestOptions.headers = { ...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers };
1829
+ return {
1830
+ url: toPathString$1(localVarUrlObj),
1831
+ options: localVarRequestOptions,
1832
+ };
1833
+ },
1650
1834
  };
1651
1835
  };
1652
1836
  /**
@@ -1667,6 +1851,17 @@ const PassportApiFp = function (configuration) {
1667
1851
  const localVarAxiosArgs = await localVarAxiosParamCreator.createCounterfactualAddress(createCounterfactualAddressRequest, options);
1668
1852
  return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1669
1853
  },
1854
+ /**
1855
+ * Get all the Ethereum linked addresses for a user based on its userId
1856
+ * @summary Get Ethereum linked addresses for a user
1857
+ * @param {string} userId The user\&#39;s userId
1858
+ * @param {*} [options] Override http request option.
1859
+ * @throws {RequiredError}
1860
+ */
1861
+ async getLinkedAddresses(userId, options) {
1862
+ const localVarAxiosArgs = await localVarAxiosParamCreator.getLinkedAddresses(userId, options);
1863
+ return createRequestFunction$1(localVarAxiosArgs, globalAxios$1, BASE_PATH$1, configuration);
1864
+ },
1670
1865
  };
1671
1866
  };
1672
1867
  /**
@@ -1686,6 +1881,16 @@ const PassportApiFactory = function (configuration, basePath, axios) {
1686
1881
  createCounterfactualAddress(createCounterfactualAddressRequest, options) {
1687
1882
  return localVarFp.createCounterfactualAddress(createCounterfactualAddressRequest, options).then((request) => request(axios, basePath));
1688
1883
  },
1884
+ /**
1885
+ * Get all the Ethereum linked addresses for a user based on its userId
1886
+ * @summary Get Ethereum linked addresses for a user
1887
+ * @param {string} userId The user\&#39;s userId
1888
+ * @param {*} [options] Override http request option.
1889
+ * @throws {RequiredError}
1890
+ */
1891
+ getLinkedAddresses(userId, options) {
1892
+ return localVarFp.getLinkedAddresses(userId, options).then((request) => request(axios, basePath));
1893
+ },
1689
1894
  };
1690
1895
  };
1691
1896
  /**
@@ -1706,6 +1911,17 @@ class PassportApi extends BaseAPI$1 {
1706
1911
  createCounterfactualAddress(requestParameters, options) {
1707
1912
  return PassportApiFp(this.configuration).createCounterfactualAddress(requestParameters.createCounterfactualAddressRequest, options).then((request) => request(this.axios, this.basePath));
1708
1913
  }
1914
+ /**
1915
+ * Get all the Ethereum linked addresses for a user based on its userId
1916
+ * @summary Get Ethereum linked addresses for a user
1917
+ * @param {PassportApiGetLinkedAddressesRequest} requestParameters Request parameters.
1918
+ * @param {*} [options] Override http request option.
1919
+ * @throws {RequiredError}
1920
+ * @memberof PassportApi
1921
+ */
1922
+ getLinkedAddresses(requestParameters, options) {
1923
+ return PassportApiFp(this.configuration).getLinkedAddresses(requestParameters.userId, options).then((request) => request(this.axios, this.basePath));
1924
+ }
1709
1925
  }
1710
1926
 
1711
1927
  /* tslint:disable */
@@ -2135,23 +2351,6 @@ const CollectionContractType = {
2135
2351
  Erc721: 'ERC721'
2136
2352
  };
2137
2353
 
2138
- /* tslint:disable */
2139
- /* eslint-disable */
2140
- /**
2141
- * Immutable zkEVM API
2142
- * Immutable Multi Rollup API
2143
- *
2144
- * The version of the OpenAPI document: 1.0.0
2145
- * Contact: support@immutable.com
2146
- *
2147
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
2148
- * https://openapi-generator.tech
2149
- * Do not edit the class manually.
2150
- */
2151
- const CreateOrderProtocolDataOrderTypeEnum = {
2152
- FullRestricted: 'FULL_RESTRICTED'
2153
- };
2154
-
2155
2354
  /* tslint:disable */
2156
2355
  /* eslint-disable */
2157
2356
  /**
@@ -2200,7 +2399,10 @@ const ERC721ItemItemTypeEnum = {
2200
2399
  * Do not edit the class manually.
2201
2400
  */
2202
2401
  const FeeFeeTypeEnum = {
2203
- Royalty: 'ROYALTY'
2402
+ Royalty: 'ROYALTY',
2403
+ MakerMarketplace: 'MAKER_MARKETPLACE',
2404
+ TakerMarketplace: 'TAKER_MARKETPLACE',
2405
+ Protocol: 'PROTOCOL'
2204
2406
  };
2205
2407
 
2206
2408
  /* tslint:disable */
@@ -2269,6 +2471,23 @@ const OrderStatus$1 = {
2269
2471
  Expired: 'EXPIRED'
2270
2472
  };
2271
2473
 
2474
+ /* tslint:disable */
2475
+ /* eslint-disable */
2476
+ /**
2477
+ * Immutable zkEVM API
2478
+ * Immutable Multi Rollup API
2479
+ *
2480
+ * The version of the OpenAPI document: 1.0.0
2481
+ * Contact: support@immutable.com
2482
+ *
2483
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
2484
+ * https://openapi-generator.tech
2485
+ * Do not edit the class manually.
2486
+ */
2487
+ const ProtocolDataOrderTypeEnum = {
2488
+ FullRestricted: 'FULL_RESTRICTED'
2489
+ };
2490
+
2272
2491
  /* tslint:disable */
2273
2492
  /* eslint-disable */
2274
2493
  /**
@@ -2345,7 +2564,6 @@ var index = /*#__PURE__*/Object.freeze({
2345
2564
  CollectionsApiFactory: CollectionsApiFactory,
2346
2565
  CollectionsApiFp: CollectionsApiFp,
2347
2566
  Configuration: Configuration$2,
2348
- CreateOrderProtocolDataOrderTypeEnum: CreateOrderProtocolDataOrderTypeEnum,
2349
2567
  ERC20ItemItemTypeEnum: ERC20ItemItemTypeEnum,
2350
2568
  ERC721ItemItemTypeEnum: ERC721ItemItemTypeEnum,
2351
2569
  FeeFeeTypeEnum: FeeFeeTypeEnum,
@@ -2368,6 +2586,7 @@ var index = /*#__PURE__*/Object.freeze({
2368
2586
  PassportApiAxiosParamCreator: PassportApiAxiosParamCreator,
2369
2587
  PassportApiFactory: PassportApiFactory,
2370
2588
  PassportApiFp: PassportApiFp,
2589
+ ProtocolDataOrderTypeEnum: ProtocolDataOrderTypeEnum,
2371
2590
  SaleFeeTypeEnum: SaleFeeTypeEnum,
2372
2591
  TokenContractType: TokenContractType,
2373
2592
  TokensApi: TokensApi,
@@ -2398,7 +2617,7 @@ class MultiRollupApiClients {
2398
2617
  }
2399
2618
 
2400
2619
  // eslint-disable-next-line @typescript-eslint/naming-convention
2401
- const defaultHeaders$1 = { 'x-sdk-version': 'ts-immutable-sdk-0.15.2-alpha' };
2620
+ const defaultHeaders$1 = { 'x-sdk-version': 'ts-immutable-sdk-0.16.0-alpha.1' };
2402
2621
  const createConfig = ({ basePath, headers, }) => {
2403
2622
  if (!basePath.trim()) {
2404
2623
  throw Error('basePath can not be empty');
@@ -2458,7 +2677,7 @@ class APIError extends Error {
2458
2677
 
2459
2678
  /* eslint-disable implicit-arrow-linebreak */
2460
2679
  const defaultHeaders = {
2461
- sdkVersion: 'ts-immutable-sdk-multi-rollup-api-client-0.15.2-alpha',
2680
+ sdkVersion: 'ts-immutable-sdk-multi-rollup-api-client-0.16.0-alpha.1',
2462
2681
  };
2463
2682
  /**
2464
2683
  * createAPIConfiguration to create a custom Configuration
@@ -2730,7 +2949,7 @@ const createImmutableXConfiguration = ({ basePath, chainID, coreContractAddress,
2730
2949
  chainID,
2731
2950
  coreContractAddress,
2732
2951
  registrationContractAddress,
2733
- sdkVersion: 'ts-immutable-sdk-0.15.2-alpha',
2952
+ sdkVersion: 'ts-immutable-sdk-0.16.0-alpha.1',
2734
2953
  });
2735
2954
  /**
2736
2955
  * Sets `sdkVersion` at the time of build
@@ -7182,6 +7401,12 @@ class AuthManager {
7182
7401
  userAdminAddress: idTokenPayload?.passport?.imx_user_admin_address,
7183
7402
  };
7184
7403
  }
7404
+ if (idTokenPayload?.passport?.zkevm_eth_address) {
7405
+ user.zkEvm = {
7406
+ ethAddress: idTokenPayload?.passport?.zkevm_eth_address,
7407
+ userAdminAddress: idTokenPayload?.passport?.zkevm_user_admin_address,
7408
+ };
7409
+ }
7185
7410
  return user;
7186
7411
  };
7187
7412
  async login() {
@@ -7325,8 +7550,8 @@ class AuthManager {
7325
7550
  const refreshToken = tokenResponse?.refresh_token ?? null;
7326
7551
  if (refreshToken) {
7327
7552
  // Token is no longer valid, but refresh token can be used to a new one
7328
- const newTokenResponse = await this.refreshToken(refreshToken);
7329
- return AuthManager.mapDeviceTokenResponseToDomainUserModel(newTokenResponse);
7553
+ const user = await this.refreshToken(refreshToken);
7554
+ return user;
7330
7555
  }
7331
7556
  return null;
7332
7557
  }, PassportErrorType.AUTHENTICATION_ERROR);
@@ -7337,7 +7562,8 @@ class AuthManager {
7337
7562
  grant_type: 'refresh_token',
7338
7563
  refresh_token: refreshToken,
7339
7564
  }, formUrlEncodedHeader);
7340
- return response.data;
7565
+ const newTokenResponse = response.data;
7566
+ return AuthManager.mapDeviceTokenResponseToDomainUserModel(newTokenResponse);
7341
7567
  }
7342
7568
  async logout() {
7343
7569
  return withPassportError(async () => {
@@ -8496,7 +8722,7 @@ class RelayerClient {
8496
8722
  }
8497
8723
 
8498
8724
  const MESSAGE_TO_SIGN = 'Only sign this message from Immutable Passport';
8499
- async function registerZkEvmUser({ authManager, magicProvider, multiRollupApiClients, accessToken, }) {
8725
+ async function registerZkEvmUser({ authManager, config, magicProvider, multiRollupApiClients, accessToken, }) {
8500
8726
  const web3Provider = new Web3Provider(magicProvider);
8501
8727
  const ethSigner = web3Provider.getSigner();
8502
8728
  const ethereumAddress = await ethSigner.getAddress();
@@ -8513,7 +8739,17 @@ async function registerZkEvmUser({ authManager, magicProvider, multiRollupApiCli
8513
8739
  catch (error) {
8514
8740
  throw new JsonRpcError(RpcErrorCode.INTERNAL_ERROR, `Failed to create counterfactual address: ${error}`);
8515
8741
  }
8516
- const user = await authManager.loginSilent();
8742
+ let user;
8743
+ if (config.crossSdkBridgeEnabled) {
8744
+ const credentials = authManager.checkStoredDeviceFlowCredentials();
8745
+ if (!credentials || !credentials.refresh_token) {
8746
+ throw new JsonRpcError(RpcErrorCode.INTERNAL_ERROR, 'Cross SDK bridge: Failed to refresh user details');
8747
+ }
8748
+ user = await authManager.refreshToken(credentials.refresh_token);
8749
+ }
8750
+ else {
8751
+ user = await authManager.loginSilent();
8752
+ }
8517
8753
  if (!user?.zkEvm) {
8518
8754
  throw new JsonRpcError(RpcErrorCode.INTERNAL_ERROR, 'Failed to refresh user details');
8519
8755
  }
@@ -8521,7 +8757,7 @@ async function registerZkEvmUser({ authManager, magicProvider, multiRollupApiCli
8521
8757
  }
8522
8758
 
8523
8759
  const loginZkEvmUser = async ({ authManager, config, magicAdapter, multiRollupApiClients, }) => {
8524
- const user = await authManager.getUser() || await authManager.login();
8760
+ const user = await authManager.getUser() || await authManager.getUserDeviceFlow() || await authManager.login();
8525
8761
  if (!user.idToken) {
8526
8762
  throw new Error('User is missing idToken');
8527
8763
  }
@@ -8530,6 +8766,7 @@ const loginZkEvmUser = async ({ authManager, config, magicAdapter, multiRollupAp
8530
8766
  // Generate counterfactual address and retrieve updated Auth0 user
8531
8767
  const userZkevm = await registerZkEvmUser({
8532
8768
  authManager,
8769
+ config,
8533
8770
  magicProvider,
8534
8771
  multiRollupApiClients,
8535
8772
  accessToken: user.accessToken,
@@ -8928,6 +9165,17 @@ class Passport {
8928
9165
  const user = await this.authManager.getUser();
8929
9166
  return user?.accessToken;
8930
9167
  }
9168
+ async getLinkedAddresses() {
9169
+ const user = await this.authManager.getUser();
9170
+ if (!user?.profile.sub) {
9171
+ return [];
9172
+ }
9173
+ const headers = { Authorization: `Bearer ${user.accessToken}` };
9174
+ const linkedAddressesResult = await this.multiRollupApiClients.passportApi.getLinkedAddresses({
9175
+ userId: user?.profile.sub,
9176
+ }, { headers });
9177
+ return linkedAddressesResult.data.linkedAddresses;
9178
+ }
8931
9179
  }
8932
9180
 
8933
9181
  var passport = /*#__PURE__*/Object.freeze({
@@ -9425,6 +9673,54 @@ class OrdersService {
9425
9673
  },
9426
9674
  });
9427
9675
  }
9676
+ /**
9677
+ * List all trades
9678
+ * List all trades
9679
+ * @returns ListTradeResult OK response.
9680
+ * @throws ApiError
9681
+ */
9682
+ listTrades({ chainName, accountAddress, pageSize, sortBy, sortDirection, pageCursor, }) {
9683
+ return this.httpRequest.request({
9684
+ method: 'GET',
9685
+ url: '/v1/chains/{chain_name}/trades',
9686
+ path: {
9687
+ 'chain_name': chainName,
9688
+ },
9689
+ query: {
9690
+ 'account_address': accountAddress,
9691
+ 'page_size': pageSize,
9692
+ 'sort_by': sortBy,
9693
+ 'sort_direction': sortDirection,
9694
+ 'page_cursor': pageCursor,
9695
+ },
9696
+ errors: {
9697
+ 400: `Bad Request (400)`,
9698
+ 404: `The specified resource was not found (404)`,
9699
+ 500: `Internal Server Error (500)`,
9700
+ },
9701
+ });
9702
+ }
9703
+ /**
9704
+ * Get a single trade by ID
9705
+ * Get a single trade by ID
9706
+ * @returns TradeResult OK response.
9707
+ * @throws ApiError
9708
+ */
9709
+ getTrade({ chainName, tradeId, }) {
9710
+ return this.httpRequest.request({
9711
+ method: 'GET',
9712
+ url: '/v1/chains/{chain_name}/trades/{trade_id}',
9713
+ path: {
9714
+ 'chain_name': chainName,
9715
+ 'trade_id': tradeId,
9716
+ },
9717
+ errors: {
9718
+ 400: `Bad Request (400)`,
9719
+ 404: `The specified resource was not found (404)`,
9720
+ 500: `Internal Server Error (500)`,
9721
+ },
9722
+ });
9723
+ }
9428
9724
  }
9429
9725
 
9430
9726
  class OrderBookClient {
@@ -9561,6 +9857,57 @@ function mapFromOpenApiOrder(order) {
9561
9857
  updateTime: order.update_time,
9562
9858
  };
9563
9859
  }
9860
+ function mapFromOpenApiTrade(trade) {
9861
+ const buyItems = trade.buy.map((item) => {
9862
+ if (item.item_type === 'ERC20') {
9863
+ return {
9864
+ type: 'ERC20',
9865
+ contractAddress: item.contract_address,
9866
+ amount: item.start_amount,
9867
+ };
9868
+ }
9869
+ if (item.item_type === 'NATIVE') {
9870
+ return {
9871
+ type: 'NATIVE',
9872
+ amount: item.start_amount,
9873
+ };
9874
+ }
9875
+ throw new Error('Buy items must be either ERC20 or NATIVE');
9876
+ });
9877
+ const sellItems = trade.sell.map((item) => {
9878
+ if (item.item_type === 'ERC721') {
9879
+ return {
9880
+ type: 'ERC721',
9881
+ contractAddress: item.contract_address,
9882
+ tokenId: item.token_id,
9883
+ };
9884
+ }
9885
+ throw new Error('Sell items must ERC721');
9886
+ });
9887
+ return {
9888
+ id: trade.id,
9889
+ orderId: trade.order_id,
9890
+ buy: buyItems,
9891
+ sell: sellItems,
9892
+ buyerFees: trade.buyer_fees.map((fee) => ({
9893
+ amount: fee.amount,
9894
+ recipient: fee.recipient,
9895
+ type: fee.fee_type,
9896
+ })),
9897
+ chain: trade.chain,
9898
+ indexedAt: trade.indexed_at,
9899
+ blockchainMetadata: {
9900
+ blockNumber: trade.blockchain_metadata.block_number,
9901
+ logIndex: trade.blockchain_metadata.log_index,
9902
+ transactionHash: trade.blockchain_metadata.transaction_hash,
9903
+ transactionIndex: trade.blockchain_metadata.transaction_index,
9904
+ },
9905
+ buyerAddress: trade.buyer_address,
9906
+ makerAddress: trade.maker_address,
9907
+ sellerAddress: trade.seller_address,
9908
+ takerAddress: trade.taker_address,
9909
+ };
9910
+ }
9564
9911
  function mapFromOpenApiPage(page) {
9565
9912
  return {
9566
9913
  nextCursor: page.next_cursor,
@@ -9890,12 +10237,24 @@ class ImmutableApiClient {
9890
10237
  listingId,
9891
10238
  });
9892
10239
  }
10240
+ async getTrade(tradeId) {
10241
+ return this.orderbookService.getTrade({
10242
+ chainName: this.chainName,
10243
+ tradeId,
10244
+ });
10245
+ }
9893
10246
  async listListings(listOrderParams) {
9894
10247
  return this.orderbookService.listListings({
9895
10248
  chainName: this.chainName,
9896
10249
  ...listOrderParams,
9897
10250
  });
9898
10251
  }
10252
+ async listTrades(listTradesParams) {
10253
+ return this.orderbookService.listTrades({
10254
+ chainName: this.chainName,
10255
+ ...listTradesParams,
10256
+ });
10257
+ }
9899
10258
  async createListing({ orderHash, orderComponents, orderSignature, makerFee, }) {
9900
10259
  if (orderComponents.offer.length !== 1) {
9901
10260
  throw new Error('Only one item can be listed at a time');
@@ -10061,6 +10420,17 @@ class Orderbook {
10061
10420
  result: mapFromOpenApiOrder(apiListing.result),
10062
10421
  };
10063
10422
  }
10423
+ /**
10424
+ * Get a trade by ID
10425
+ * @param {string} tradeId - The tradeId to find.
10426
+ * @return {TradeResult} The returned order result.
10427
+ */
10428
+ async getTrade(tradeId) {
10429
+ const apiListing = await this.apiClient.getTrade(tradeId);
10430
+ return {
10431
+ result: mapFromOpenApiTrade(apiListing.result),
10432
+ };
10433
+ }
10064
10434
  /**
10065
10435
  * List orders. This method is used to get a list of orders filtered by conditions specified
10066
10436
  * in the params object.
@@ -10074,6 +10444,19 @@ class Orderbook {
10074
10444
  result: apiListings.result.map(mapFromOpenApiOrder),
10075
10445
  };
10076
10446
  }
10447
+ /**
10448
+ * List trades. This method is used to get a list of trades filtered by conditions specified
10449
+ * in the params object
10450
+ * @param {ListTradesParams} listTradesParams - Filtering, ordering and page parameters.
10451
+ * @return {ListTradesResult} The paged trades.
10452
+ */
10453
+ async listTrades(listTradesParams) {
10454
+ const apiListings = await this.apiClient.listTrades(listTradesParams);
10455
+ return {
10456
+ page: mapFromOpenApiPage(apiListings.page),
10457
+ result: apiListings.result.map(mapFromOpenApiTrade),
10458
+ };
10459
+ }
10077
10460
  /**
10078
10461
  * Get required transactions and messages for signing prior to creating a listing
10079
10462
  * through the createListing method
@@ -11255,8 +11638,7 @@ const ETH_MAINNET_CHAIN_ID = '1';
11255
11638
  /**
11256
11639
  * @constant {string} ZKEVM_DEVNET_CHAIN_ID - The chain ID for the zkEVM devnet (EIP-155 compatible format).
11257
11640
  */
11258
- const ZKEVM_DEVNET_CHAIN_ID = '13433';
11259
- /**
11641
+ const ZKEVM_DEVNET_CHAIN_ID = '13473';
11260
11642
  /**
11261
11643
  * @constant {string} ZKEVM_TESTNET_CHAIN_ID - The chain ID for the zkEVM testnet (EIP-155 compatible format).
11262
11644
  */
@@ -23537,10 +23919,10 @@ const SUPPORTED_BRIDGES_FOR_ENVIRONMENT = {
23537
23919
  */
23538
23920
  const CONTRACTS_FOR_BRIDGE = new Map()
23539
23921
  .set(ETH_SEPOLIA_TO_ZKEVM_DEVNET, {
23540
- rootChainERC20Predicate: '0xAC0f2096732D40096B3356AD76ba60a2f02366c8',
23541
- rootChainStateSender: '0xeA76fcCdD791A9c231CAda787ae7535c8a5E55B5',
23542
- rootChainCheckpointManager: '0x321A466aa78F5957C6E2375114915EcD14DAdE44',
23543
- rootChainExitHelper: '0x55cA8C418bbB0aC87414F9ea6FFC6a33860Cf967',
23922
+ rootChainERC20Predicate: '0x75E468cF088F947B96422996132FbE71160F21F1',
23923
+ rootChainStateSender: '0xbdC11416f01b122b7621855e61c99C7ED986F894',
23924
+ rootChainCheckpointManager: '0x0721b564a96466b864A998D31846Ba409d21092B',
23925
+ rootChainExitHelper: '0x0a2cb3f90aE65429E5c516af500F59d8fed51844',
23544
23926
  childChainERC20Predicate: '0x0000000000000000000000000000000000001004',
23545
23927
  childChainStateReceiver: '0x0000000000000000000000000000000000001001',
23546
23928
  })
@@ -26935,6 +27317,9 @@ const $d85ad1457a3f1a83$export$161d4a74df65fc08 = {
26935
27317
  [(Environment$1).SANDBOX]: "https://checkout-api.sandbox.immutable.com",
26936
27318
  [(Environment$1).PRODUCTION]: "https://checkout-api.immutable.com"
26937
27319
  };
27320
+ const $d85ad1457a3f1a83$export$fc55ed5a42b458ba = {
27321
+ [($0472f23319457bfb$export$c06e1e7429de6283).IMTBL_ZKEVM_TESTNET]: "https://explorer.testnet.immutable.com"
27322
+ };
26938
27323
  const $d85ad1457a3f1a83$export$6f24f3cef7d501c4 = new Map([
26939
27324
  [
26940
27325
  ($0472f23319457bfb$export$c06e1e7429de6283).ETHEREUM,
@@ -27267,6 +27652,7 @@ var $4b58188d47aafe8d$export$537fa3efd10ed435;
27267
27652
  CheckoutErrorType["DEFAULT_PROVIDER_ERROR"] = "DEFAULT_PROVIDER_ERROR";
27268
27653
  CheckoutErrorType["CONNECT_PROVIDER_ERROR"] = "CONNECT_PROVIDER_ERROR";
27269
27654
  CheckoutErrorType["GET_BALANCE_ERROR"] = "GET_BALANCE_ERROR";
27655
+ CheckoutErrorType["GET_INDEXER_BALANCE_ERROR"] = "GET_INDEXER_BALANCE_ERROR";
27270
27656
  CheckoutErrorType["GET_ERC20_BALANCE_ERROR"] = "GET_ERC20_BALANCE_ERROR";
27271
27657
  CheckoutErrorType["GET_ERC721_BALANCE_ERROR"] = "GET_ERC721_BALANCE_ERROR";
27272
27658
  CheckoutErrorType["GET_NETWORK_INFO_ERROR"] = "GET_NETWORK_INFO_ERROR";
@@ -27282,6 +27668,7 @@ var $4b58188d47aafe8d$export$537fa3efd10ed435;
27282
27668
  CheckoutErrorType["UNSUPPORTED_TOKEN_TYPE_ERROR"] = "UNSUPPORTED_TOKEN_TYPE_ERROR";
27283
27669
  CheckoutErrorType["UNSUPPORTED_BALANCE_REQUIREMENT_ERROR"] = "UNSUPPORTED_BALANCE_REQUIREMENT_ERROR";
27284
27670
  CheckoutErrorType["GET_ORDER_LISTING_ERROR"] = "GET_ORDER_LISTING_ERROR";
27671
+ CheckoutErrorType["PREPARE_ORDER_LISTING_ERROR"] = "PREPARE_ORDER_LISTING_ERROR";
27285
27672
  CheckoutErrorType["SWITCH_NETWORK_UNSUPPORTED"] = "SWITCH_NETWORK_UNSUPPORTED";
27286
27673
  CheckoutErrorType["GET_ERC20_ALLOWANCE_ERROR"] = "GET_ERC20_ALLOWANCE_ERROR";
27287
27674
  CheckoutErrorType["GET_ERC721_ALLOWANCE_ERROR"] = "GET_ERC721_ALLOWANCE_ERROR";
@@ -27472,7 +27859,7 @@ const $efe60cea83bfc4e8$export$473cec51305fdae8 = async (config, { type: type =
27472
27859
  case ($08d5ddc39acd6833$export$fd9b17d87f4121d2).BRIDGE:
27473
27860
  case ($08d5ddc39acd6833$export$fd9b17d87f4121d2).ALL:
27474
27861
  default:
27475
- tokens = await config.remote.getTokens(chainId);
27862
+ tokens = (await config.remote.getTokensConfig(chainId)).allowed;
27476
27863
  }
27477
27864
  if (!exclude || exclude?.length === 0) return {
27478
27865
  tokens: tokens
@@ -27485,6 +27872,90 @@ const $efe60cea83bfc4e8$export$473cec51305fdae8 = async (config, { type: type =
27485
27872
 
27486
27873
 
27487
27874
 
27875
+
27876
+
27877
+ const $fd8a8472dcc3ec2b$var$CACHE_DATA_TTL = 60; // seconds
27878
+ class $fd8a8472dcc3ec2b$export$ef140a6b05dfc786 {
27879
+ url;
27880
+ ttl;
27881
+ chainId;
27882
+ cacheMap;
27883
+ static async makeHttpRequest(url) {
27884
+ return (globalAxios$1).get(url);
27885
+ }
27886
+ setCache(key, data) {
27887
+ this.cacheMap[key] = {
27888
+ data: data,
27889
+ ttl: new Date().getTime() + this.ttl * 1000
27890
+ };
27891
+ }
27892
+ getCache(key) {
27893
+ const d = this.cacheMap[key];
27894
+ if (!d || d.ttl <= new Date().getTime()) return null;
27895
+ return d.data;
27896
+ }
27897
+ /**
27898
+ * Blockscout constructor
27899
+ * @param chainId target chain
27900
+ * @param ttl cache TTL
27901
+ */ constructor(params){
27902
+ this.chainId = params.chainId;
27903
+ this.url = ($d85ad1457a3f1a83$export$fc55ed5a42b458ba)[this.chainId];
27904
+ this.cacheMap = {};
27905
+ this.ttl = params.ttl !== undefined ? params.ttl : $fd8a8472dcc3ec2b$var$CACHE_DATA_TTL;
27906
+ }
27907
+ /**
27908
+ * isChainSupported verifies if the chain is supported by Blockscout
27909
+ * @param chainId
27910
+ */ static isChainSupported = (chainId)=>Boolean(($d85ad1457a3f1a83$export$fc55ed5a42b458ba)[chainId]);
27911
+ /**
27912
+ * isBlockscoutError verifies if the error is a Blockscout client error
27913
+ * @param err error to evaluate
27914
+ */ static isBlockscoutError = (err)=>"code" in err;
27915
+ /**
27916
+ * getAddressTokens fetches the list of tokens (by type) owned by the wallet address.
27917
+ * @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
27920
+ * @returns list of tokens given the wallet address and the token types
27921
+ */ async getAddressTokens(params) {
27922
+ try {
27923
+ let url = `${this.url}/api/v2/addresses/${params.walletAddress}/tokens?type=${params.tokenType.join(",")}`;
27924
+ if (params.nextPage) url += `&${new URLSearchParams(params.nextPage)}`;
27925
+ // Cache response data to prevent unnecessary requests
27926
+ const cached = this.getCache(url);
27927
+ if (cached && cached.status < 400) return Promise.resolve(cached.data);
27928
+ const response = await $fd8a8472dcc3ec2b$export$ef140a6b05dfc786.makeHttpRequest(url);
27929
+ if (response.status >= 400) return Promise.reject({
27930
+ code: response.status,
27931
+ message: response.statusText
27932
+ });
27933
+ this.setCache(url, response);
27934
+ return Promise.resolve(response.data);
27935
+ } catch (err) {
27936
+ let code = (HttpStatusCode$2).InternalServerError;
27937
+ let message = "InternalServerError";
27938
+ if ((globalAxios$1).isAxiosError(err)) {
27939
+ code = err.response?.status || code;
27940
+ message = err.message;
27941
+ }
27942
+ return Promise.reject({
27943
+ code: code,
27944
+ message: message
27945
+ });
27946
+ }
27947
+ }
27948
+ }
27949
+
27950
+
27951
+ /* eslint @typescript-eslint/naming-convention: off */ var $887a00f8f72d61f0$export$5bd1ea2b3d18210;
27952
+ (function(BlockscoutTokenType) {
27953
+ BlockscoutTokenType["ERC20"] = "ERC-20";
27954
+ })($887a00f8f72d61f0$export$5bd1ea2b3d18210 || ($887a00f8f72d61f0$export$5bd1ea2b3d18210 = {}));
27955
+
27956
+
27957
+
27958
+
27488
27959
  const $1564e43dde50bb61$export$df96cd8d56be0ab1 = async (config, web3Provider, walletAddress)=>await ($a8bc256d81a5e2c1$export$bacc563de539c6c3)(async ()=>{
27489
27960
  const networkInfo = await ($de192de6ef100f9f$export$79f13b4cfaaf0d09)(config, web3Provider);
27490
27961
  if (!networkInfo.isSupported) throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(`Chain:${networkInfo.chainId} is not a supported chain`, ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).CHAIN_NOT_SUPPORTED_ERROR, {
@@ -27524,6 +27995,59 @@ async function $1564e43dde50bb61$export$60e0fe116a0e6ed0(web3Provider, walletAdd
27524
27995
  type: ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_ERC20_BALANCE_ERROR
27525
27996
  });
27526
27997
  }
27998
+ // Blockscout client singleton
27999
+ let $1564e43dde50bb61$var$blockscoutClient;
28000
+ const $1564e43dde50bb61$export$8c978679845804d4 = async (walletAddress, chainId, rename)=>{
28001
+ // Shuffle the mapping of the tokens configuration so it is a hashmap
28002
+ // for faster access to tokens config objects.
28003
+ const mapRename = Object.assign({}, ...rename.map((t)=>({
28004
+ [t.address || ""]: t
28005
+ })));
28006
+ // Ensure singleton is present and match the selected chain
28007
+ if (!$1564e43dde50bb61$var$blockscoutClient || $1564e43dde50bb61$var$blockscoutClient.chainId !== chainId) $1564e43dde50bb61$var$blockscoutClient = new ($fd8a8472dcc3ec2b$export$ef140a6b05dfc786)({
28008
+ chainId: chainId
28009
+ });
28010
+ // Hold the items in an array for post-fetching processing
28011
+ const items = [];
28012
+ const tokenType = [
28013
+ ($887a00f8f72d61f0$export$5bd1ea2b3d18210).ERC20
28014
+ ];
28015
+ // Given that the widgets aren't yet designed to support pagination,
28016
+ // fetch all the possible tokens associated to a given wallet address.
28017
+ let resp;
28018
+ try {
28019
+ do {
28020
+ // eslint-disable-next-line no-await-in-loop
28021
+ resp = await $1564e43dde50bb61$var$blockscoutClient.getAddressTokens({
28022
+ walletAddress: walletAddress,
28023
+ tokenType: tokenType,
28024
+ nextPage: resp?.next_page_params
28025
+ });
28026
+ items.push(...resp.items);
28027
+ }while (resp.next_page_params);
28028
+ } catch (err) {
28029
+ throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)(err.message || "InternalServerError", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_INDEXER_BALANCE_ERROR, err);
28030
+ }
28031
+ return {
28032
+ balances: items.map((item)=>{
28033
+ const tokenData = item.token || {};
28034
+ const balance = (BigNumber$1).from(item.value);
28035
+ const renamed = mapRename[tokenData.address] || {};
28036
+ const token = {
28037
+ ...tokenData,
28038
+ name: renamed.name ?? tokenData.name,
28039
+ symbol: renamed.symbol ?? tokenData.symbol,
28040
+ decimals: parseInt(tokenData.decimals, 10)
28041
+ };
28042
+ const formattedBalance = (utils$1).formatUnits(item.value, token.decimals);
28043
+ return {
28044
+ balance: balance,
28045
+ formattedBalance: formattedBalance,
28046
+ token: token
28047
+ };
28048
+ })
28049
+ };
28050
+ };
27527
28051
  const $1564e43dde50bb61$export$a3238cee431627c6 = async (config, web3Provider, walletAddress, tokens)=>{
27528
28052
  const allBalancePromises = [];
27529
28053
  tokens.forEach((token)=>{
@@ -27542,6 +28066,17 @@ const $1564e43dde50bb61$export$fee49741664a4d7e = async (config, web3Provider, w
27542
28066
  type: ($08d5ddc39acd6833$export$fd9b17d87f4121d2).ALL,
27543
28067
  chainId: chainId
27544
28068
  });
28069
+ // In order to prevent unnecessary RPC calls
28070
+ // let's use the Indexer if available for the
28071
+ // given chain.
28072
+ let flag = false;
28073
+ try {
28074
+ flag = (await config.remote.getTokensConfig(chainId)).blockscout || flag;
28075
+ } catch (err) {
28076
+ // eslint-disable-next-line no-console
28077
+ console.error(err);
28078
+ }
28079
+ if (flag && ($fd8a8472dcc3ec2b$export$ef140a6b05dfc786).isChainSupported(chainId)) return await $1564e43dde50bb61$export$8c978679845804d4(walletAddress, chainId, tokens);
27545
28080
  return await $1564e43dde50bb61$export$a3238cee431627c6(config, web3Provider, walletAddress, tokens);
27546
28081
  };
27547
28082
 
@@ -27840,10 +28375,10 @@ class $a492ee374ae7b613$export$d902b56530cd5f87 {
27840
28375
  if (!key) return config;
27841
28376
  return config[key];
27842
28377
  }
27843
- async getTokens(chainId) {
28378
+ async getTokensConfig(chainId) {
27844
28379
  const config = await this.loadConfigTokens();
27845
- if (!config) return [];
27846
- return config[chainId]?.allowed ?? [];
28380
+ if (!config || !config[chainId]) return {};
28381
+ return config[chainId] ?? [];
27847
28382
  }
27848
28383
  }
27849
28384
 
@@ -28166,7 +28701,9 @@ const $35c3fc7013888ba5$export$90366d6b714c6f69 = async (provider, ownerAddress,
28166
28701
  return await contract.isApprovedForAll(ownerAddress, spenderAddress);
28167
28702
  } catch (err) {
28168
28703
  throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("Failed to check approval for all ERC721s of collection", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_ERC721_ALLOWANCE_ERROR, {
28169
- contractAddress: contractAddress
28704
+ ownerAddress: ownerAddress,
28705
+ contractAddress: contractAddress,
28706
+ spenderAddress: spenderAddress
28170
28707
  });
28171
28708
  }
28172
28709
  };
@@ -28178,7 +28715,10 @@ const $35c3fc7013888ba5$export$ebb2a35f2b4cf5f6 = async (provider, ownerAddress,
28178
28715
  return transaction;
28179
28716
  } catch (err) {
28180
28717
  throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("Failed to get the approval transaction for ERC721", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_ERC721_ALLOWANCE_ERROR, {
28181
- contractAddress: contractAddress
28718
+ id: id.toString(),
28719
+ contractAddress: contractAddress,
28720
+ spenderAddress: spenderAddress,
28721
+ ownerAddress: ownerAddress
28182
28722
  });
28183
28723
  }
28184
28724
  };
@@ -28188,6 +28728,7 @@ const $35c3fc7013888ba5$export$c4605a8dd415eeea = async (provider, contractAddre
28188
28728
  return await contract.getApproved(id);
28189
28729
  } catch (err) {
28190
28730
  throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("Failed to get approved address for ERC721", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).GET_ERC721_ALLOWANCE_ERROR, {
28731
+ id: id.toString(),
28191
28732
  contractAddress: contractAddress
28192
28733
  });
28193
28734
  }
@@ -28777,6 +29318,81 @@ const $64863c39386de592$export$7f8e2b98eca5a7f0 = async (config, provider, order
28777
29318
 
28778
29319
 
28779
29320
 
29321
+
29322
+ const $9085b221b72ac69e$export$af768ccdf17d5c04 = (id, contractAddress, spenderAddress)=>({
29323
+ type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC721,
29324
+ id: id,
29325
+ contractAddress: contractAddress,
29326
+ spenderAddress: spenderAddress
29327
+ });
29328
+ const $9085b221b72ac69e$export$d2da5a4d143c85e5 = (buyToken)=>{
29329
+ if (buyToken.type === ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE) return {
29330
+ type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).NATIVE,
29331
+ amount: buyToken.amount.toString()
29332
+ };
29333
+ return {
29334
+ type: ($4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC20,
29335
+ amount: buyToken.amount.toString(),
29336
+ contractAddress: buyToken.contractAddress
29337
+ };
29338
+ };
29339
+ const $9085b221b72ac69e$export$e761f9e0703de895 = async (config, provider, id, contractAddress, buyToken)=>{
29340
+ let orderbook;
29341
+ let listing;
29342
+ let spenderAddress = "";
29343
+ try {
29344
+ const walletAddress = await provider.getSigner().getAddress();
29345
+ orderbook = await $67fc622a2b913d5f$export$c60ce6c6a92bc2ff(config);
29346
+ const { seaportContractAddress: seaportContractAddress } = orderbook.config();
29347
+ spenderAddress = seaportContractAddress;
29348
+ listing = await orderbook.prepareListing({
29349
+ makerAddress: walletAddress,
29350
+ buy: $9085b221b72ac69e$export$d2da5a4d143c85e5(buyToken),
29351
+ sell: {
29352
+ type: (0, $4b58188d47aafe8d$export$1fc8f52ad1810e52).ERC721,
29353
+ contractAddress: contractAddress,
29354
+ tokenId: id
29355
+ }
29356
+ });
29357
+ } catch (err) {
29358
+ throw new ($a8bc256d81a5e2c1$export$b722478a3cbfa3bc)("An error occurred while preparing the listing", ($a8bc256d81a5e2c1$export$e3dc0620abde7f5a).PREPARE_ORDER_LISTING_ERROR, {
29359
+ message: err.message,
29360
+ id: id,
29361
+ collectionAddress: contractAddress
29362
+ });
29363
+ }
29364
+ const itemRequirements = [
29365
+ $9085b221b72ac69e$export$af768ccdf17d5c04(id, contractAddress, spenderAddress)
29366
+ ];
29367
+ // eslint-disable-next-line no-console
29368
+ console.log(listing); // TODO: Get order signature, provider.getSigner()._signTypedData to sign
29369
+ const smartCheckoutResult = await ($0e7419077c373b24$export$9e073f9ada8c81e6)(config, provider, itemRequirements, {
29370
+ type: ($4b58188d47aafe8d$export$65c64e46348ee3c1).GAS,
29371
+ gasToken: {
29372
+ type: ($4b58188d47aafe8d$export$537fa3efd10ed435).NATIVE,
29373
+ limit: (BigNumber$1).from((constants).estimatedFulfillmentGasGwei)
29374
+ }
29375
+ });
29376
+ // eslint-disable-next-line no-console
29377
+ console.log("transactionRequirements", smartCheckoutResult);
29378
+ return {
29379
+ itemRequirements: itemRequirements,
29380
+ gasToken: {
29381
+ type: ($4b58188d47aafe8d$export$537fa3efd10ed435).NATIVE,
29382
+ limit: (BigNumber$1).from((constants).estimatedFulfillmentGasGwei)
29383
+ },
29384
+ smartCheckoutResult: smartCheckoutResult
29385
+ };
29386
+ };
29387
+
29388
+
29389
+
29390
+
29391
+
29392
+
29393
+
29394
+
29395
+
28780
29396
  async function $0e0060cb42e136d2$export$339cb2be73677b30(config, existingReadOnlyProviders) {
28781
29397
  if (config.isProduction && existingReadOnlyProviders?.has(($0472f23319457bfb$export$c06e1e7429de6283).ETHEREUM)) return existingReadOnlyProviders;
28782
29398
  if (existingReadOnlyProviders?.has(($0472f23319457bfb$export$c06e1e7429de6283).SEPOLIA)) return existingReadOnlyProviders;
@@ -28921,6 +29537,16 @@ class $a8cb37a3fc8eb863$export$1f60ba4ec72508a0 {
28921
29537
  await $64863c39386de592$export$7f8e2b98eca5a7f0(this.config, web3Provider, params.orderId);
28922
29538
  }
28923
29539
  /**
29540
+ * Determines the requirements for performing a sell.
29541
+ * @param {SellParams} params - The parameters for the sell.
29542
+ */ async sell(params) {
29543
+ if (this.config.isProduction) throw new Error("This endpoint is not currently available.");
29544
+ // eslint-disable-next-line no-console
29545
+ console.warn("This endpoint is currently under construction.");
29546
+ const web3Provider = await $bb88265fe45a0393$export$9e1fd9cc88c637a0(this.config, params.provider);
29547
+ await $9085b221b72ac69e$export$e761f9e0703de895(this.config, web3Provider, params.id, params.collectionAddress, params.buyToken);
29548
+ }
29549
+ /**
28924
29550
  * Determines the transaction requirements to complete a purchase.
28925
29551
  * @params {SmartCheckoutParams} params - The parameters for smart checkout.
28926
29552
  */ async smartCheckout(params) {
@@ -28967,7 +29593,7 @@ var checkout_sdk = /*#__PURE__*/Object.freeze({
28967
29593
  function $parcel$export(e, n, v, s) {
28968
29594
  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
28969
29595
  }
28970
- const $d663162fd5a0853f$export$38a083d9fb5551ca = "0.15.2-alpha";
29596
+ const $d663162fd5a0853f$export$38a083d9fb5551ca = "0.16.0-alpha.1";
28971
29597
  const $d663162fd5a0853f$export$83bf90b30cdfd29f = ()=>false;
28972
29598
  const $d663162fd5a0853f$export$1169f5475725171b = ()=>$d663162fd5a0853f$export$38a083d9fb5551ca;
28973
29599
 
@@ -29660,7 +30286,7 @@ const _abi$2 = [
29660
30286
  },
29661
30287
  {
29662
30288
  internalType: "address",
29663
- name: "royaltyAllowlist_",
30289
+ name: "operatorAllowlist_",
29664
30290
  type: "address",
29665
30291
  },
29666
30292
  {
@@ -29677,6 +30303,11 @@ const _abi$2 = [
29677
30303
  stateMutability: "nonpayable",
29678
30304
  type: "constructor",
29679
30305
  },
30306
+ {
30307
+ inputs: [],
30308
+ name: "AllowlistDoesNotImplementIOperatorAllowlist",
30309
+ type: "error",
30310
+ },
29680
30311
  {
29681
30312
  inputs: [
29682
30313
  {
@@ -29769,11 +30400,6 @@ const _abi$2 = [
29769
30400
  name: "IImmutableERC721TokenAlreadyBurned",
29770
30401
  type: "error",
29771
30402
  },
29772
- {
29773
- inputs: [],
29774
- name: "RoyaltyEnforcementDoesNotImplementRequiredInterface",
29775
- type: "error",
29776
- },
29777
30403
  {
29778
30404
  inputs: [
29779
30405
  {
@@ -29846,6 +30472,25 @@ const _abi$2 = [
29846
30472
  name: "ApprovalForAll",
29847
30473
  type: "event",
29848
30474
  },
30475
+ {
30476
+ anonymous: false,
30477
+ inputs: [
30478
+ {
30479
+ indexed: false,
30480
+ internalType: "address",
30481
+ name: "oldRegistry",
30482
+ type: "address",
30483
+ },
30484
+ {
30485
+ indexed: false,
30486
+ internalType: "address",
30487
+ name: "newRegistry",
30488
+ type: "address",
30489
+ },
30490
+ ],
30491
+ name: "OperatorAllowlistRegistryUpdated",
30492
+ type: "event",
30493
+ },
29849
30494
  {
29850
30495
  anonymous: false,
29851
30496
  inputs: [
@@ -29921,25 +30566,6 @@ const _abi$2 = [
29921
30566
  name: "RoleRevoked",
29922
30567
  type: "event",
29923
30568
  },
29924
- {
29925
- anonymous: false,
29926
- inputs: [
29927
- {
29928
- indexed: false,
29929
- internalType: "address",
29930
- name: "oldRegistry",
29931
- type: "address",
29932
- },
29933
- {
29934
- indexed: false,
29935
- internalType: "address",
29936
- name: "newRegistry",
29937
- type: "address",
29938
- },
29939
- ],
29940
- name: "RoyaltyAllowlistRegistryUpdated",
29941
- type: "event",
29942
- },
29943
30569
  {
29944
30570
  anonymous: false,
29945
30571
  inputs: [
@@ -30384,6 +31010,19 @@ const _abi$2 = [
30384
31010
  stateMutability: "view",
30385
31011
  type: "function",
30386
31012
  },
31013
+ {
31014
+ inputs: [],
31015
+ name: "operatorAllowlist",
31016
+ outputs: [
31017
+ {
31018
+ internalType: "contract IOperatorAllowlist",
31019
+ name: "",
31020
+ type: "address",
31021
+ },
31022
+ ],
31023
+ stateMutability: "view",
31024
+ type: "function",
31025
+ },
30387
31026
  {
30388
31027
  inputs: [
30389
31028
  {
@@ -30452,19 +31091,6 @@ const _abi$2 = [
30452
31091
  stateMutability: "nonpayable",
30453
31092
  type: "function",
30454
31093
  },
30455
- {
30456
- inputs: [],
30457
- name: "royaltyAllowlist",
30458
- outputs: [
30459
- {
30460
- internalType: "contract IRoyaltyAllowlist",
30461
- name: "",
30462
- type: "address",
30463
- },
30464
- ],
30465
- stateMutability: "view",
30466
- type: "function",
30467
- },
30468
31094
  {
30469
31095
  inputs: [
30470
31096
  {
@@ -30816,11 +31442,11 @@ const _abi$2 = [
30816
31442
  inputs: [
30817
31443
  {
30818
31444
  internalType: "address",
30819
- name: "_royaltyAllowlist",
31445
+ name: "_operatorAllowlist",
30820
31446
  type: "address",
30821
31447
  },
30822
31448
  ],
30823
- name: "setRoyaltyAllowlistRegistry",
31449
+ name: "setOperatorAllowlistRegistry",
30824
31450
  outputs: [],
30825
31451
  stateMutability: "nonpayable",
30826
31452
  type: "function",
@@ -30913,7 +31539,7 @@ const _abi$2 = [
30913
31539
  type: "function",
30914
31540
  },
30915
31541
  ];
30916
- const _bytecode$2 = "0x608060405260006013553480156200001657600080fd5b50604051620052f1380380620052f18339810160408190526200003991620007cd565b8787878787878787868681818181600662000055838262000960565b50600762000064828262000960565b50506801000000000000000060095550600d62000082838262000960565b50600e62000091828262000960565b50620000a69350600092508b915050620000f1565b620000b2828262000134565b620000bd8362000239565b6016620000cb868262000960565b506015620000da858262000960565b505050505050505050505050505050505062000b74565b6200010882826200025560201b620011e11760201c565b60008281526001602090815260409091206200012f91839062001265620002f5821b17901c565b505050565b6127106001600160601b0382161115620001a85760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620002005760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016200019f565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600355565b6000620002468162000315565b620002518262000324565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000251576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002b13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200030c836001600160a01b0384166200041d565b90505b92915050565b6200032181336200046f565b50565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000396919062000a2c565b620003b457604051631353be1160e11b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527ff499b54d61d3fcb40299e3299af3ffe9ef1ee6e47194240f3cc5b6e09f7f6796910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260018301602052604081205462000466575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200030f565b5060006200030f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200025157620004ae81620004ff60201b6200127a1760201c565b620004c48360206200128c62000512821b17811c565b604051602001620004d792919062000a50565b60408051601f198184030181529082905262461bcd60e51b82526200019f9160040162000ac9565b60606200030f6001600160a01b03831660145b606060006200052383600262000b14565b6200053090600262000b2e565b6001600160401b038111156200054a576200054a620006e8565b6040519080825280601f01601f19166020018201604052801562000575576020820181803683370190505b509050600360fc1b8160008151811062000593576200059362000b44565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620005c557620005c562000b44565b60200101906001600160f81b031916908160001a9053506000620005eb84600262000b14565b620005f890600162000b2e565b90505b60018111156200067a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811062000630576200063062000b44565b1a60f81b82828151811062000649576200064962000b44565b60200101906001600160f81b031916908160001a90535060049490941c93620006728162000b5a565b9050620005fb565b5083156200030c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016200019f565b80516001600160a01b0381168114620006e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200071b57818101518382015260200162000701565b50506000910152565b600082601f8301126200073657600080fd5b81516001600160401b0380821115620007535762000753620006e8565b604051601f8301601f19908116603f011681019082821181831017156200077e576200077e620006e8565b816040528381528660208588010111156200079857600080fd5b620007ab846020830160208901620006fe565b9695505050505050565b80516001600160601b0381168114620006e357600080fd5b600080600080600080600080610100898b031215620007eb57600080fd5b620007f689620006cb565b60208a01519098506001600160401b03808211156200081457600080fd5b620008228c838d0162000724565b985060408b01519150808211156200083957600080fd5b620008478c838d0162000724565b975060608b01519150808211156200085e57600080fd5b6200086c8c838d0162000724565b965060808b01519150808211156200088357600080fd5b50620008928b828c0162000724565b945050620008a360a08a01620006cb565b9250620008b360c08a01620006cb565b9150620008c360e08a01620007b5565b90509295985092959890939650565b600181811c90821680620008e757607f821691505b6020821081036200090857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200012f57600081815260208120601f850160051c81016020861015620009375750805b601f850160051c820191505b81811015620009585782815560010162000943565b505050505050565b81516001600160401b038111156200097c576200097c620006e8565b62000994816200098d8454620008d2565b846200090e565b602080601f831160018114620009cc5760008415620009b35750858301515b600019600386901b1c1916600185901b17855562000958565b600085815260208120601f198616915b82811015620009fd57888601518255948401946001909101908401620009dc565b508582101562000a1c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a3f57600080fd5b815180151581146200030c57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835162000a8a816017850160208801620006fe565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000abd816028840160208801620006fe565b01602801949350505050565b602081526000825180602084015262000aea816040850160208701620006fe565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200030f576200030f62000afe565b808201808211156200030f576200030f62000afe565b634e487b7160e01b600052603260045260246000fd5b60008162000b6c5762000b6c62000afe565b506000190190565b61476d8062000b846000396000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c806369e2f0fb1161019d578063a217fddf116100e9578063d5391393116100a2578063e4623c1b1161007c578063e4623c1b146106af578063e8a3d485146106c2578063e985e9c5146106ca578063eea98768146106dd57600080fd5b8063d539139314610674578063d547741f14610689578063e19278591461069c57600080fd5b8063a217fddf1461060d578063a22cb46514610615578063a701281614610628578063b88d4fde1461063b578063c87b56dd1461064e578063ca15c8731461066157600080fd5b80639010d07c1161015657806395d89b411161013057806395d89b41146105cc5780639e2641a3146105d45780639f15d700146105e7578063a1448194146105fa57600080fd5b80639010d07c1461059357806391d14854146105a6578063938e3d7b146105b957600080fd5b806369e2f0fb1461052c5780636b3a06321461053f5780636c0360eb1461055257806370a082311461055a57806374f16a811461056d578063885e7a081461058057600080fd5b80632f2ff15d1161025c57806342966c681161021557806355f804b3116101ef57806355f804b3146104e0578063567e4075146104f35780636352211e146105065780636588962a1461051957600080fd5b806342966c68146104a7578063439aed34146104ba5780634f558e79146104cd57600080fd5b80632f2ff15d1461043357806331ae450b1461044657806336568abe1461045b5780633dd1eb611461046e57806340c10f191461048157806342842e0e1461049457600080fd5b80631f8ebbd1116102ae5780631f8ebbd11461039b578063234af046146103a557806323b872dd146103b8578063248a9ca3146103cb5780632a55205a146103ee5780632d2c5a8b1461042057600080fd5b80628ad946146102f557806301ffc9a71461030a57806306fdde0314610332578063081812fc14610347578063095ea7b31461037257806318160ddd14610385575b600080fd5b61030861030336600461391b565b6106f0565b005b61031d61031836600461396b565b6107c6565b60405190151581526020015b60405180910390f35b61033a6107d7565b60405161032991906139d8565b61035a6103553660046139eb565b6107e6565b6040516001600160a01b039091168152602001610329565b610308610380366004613a1b565b610806565b61038d610961565b604051908152602001610329565b600160401b61038d565b6103086103b3366004613be7565b610978565b6103086103c6366004613c2f565b610999565b61038d6103d93660046139eb565b60009081526020819052604090206001015490565b6104016103fc366004613c6b565b6109bb565b604080516001600160a01b039093168352602083019190915201610329565b61030861042e366004613c8d565b610a69565b610308610441366004613d49565b610a8a565b61044e610aaf565b6040516103299190613d75565b610308610469366004613d49565b610b5d565b61030861047c366004613dc2565b610bd7565b61030861048f366004613a1b565b610bfa565b6103086104a2366004613c2f565b610c1c565b6103086104b53660046139eb565b610c37565b6103086104c8366004613df4565b610c6e565b61031d6104db3660046139eb565b610c97565b6103086104ee366004613e87565b610ca2565b610308610501366004613a1b565b610cb9565b61035a6105143660046139eb565b610cdb565b610308610527366004613dc2565b610cfb565b61030861053a366004613dc2565b610d0f565b60025461035a906001600160a01b031681565b61033a610d32565b61038d610568366004613dc2565b610dc0565b61030861057b366004613be7565b610dde565b61030861058e366004613ecf565b610de7565b61035a6105a1366004613c6b565b610dfc565b61031d6105b4366004613d49565b610e1b565b6103086105c7366004613e87565b610e44565b61033a610e5b565b6103086105e2366004613be7565b610e65565b6103086105f5366004613a1b565b610e86565b610308610608366004613a1b565b610ee0565b61038d600081565b610308610623366004613f07565b610f02565b610308610636366004613f82565b611053565b610308610649366004613fe6565b6110b3565b61033a61065c3660046139eb565b6110dc565b61038d61066f3660046139eb565b6110e7565b61038d6a4d494e5445525f524f4c4560a81b81565b610308610697366004613d49565b6110fe565b6103086106aa366004613c8d565b611123565b6103086106bd366004614061565b611144565b61033a611182565b61031d6106d83660046140a2565b61118f565b6103086106eb366004613a1b565b6111bf565b6106fd60208201826140cc565b905061070c60408301836140cc565b90501461072c5760405163359a1bc360e01b815260040160405180910390fd5b60005b61073c60408301836140cc565b90508110156107c2576107b06107556020840184613dc2565b61076260208501856140cc565b8481811061077257610772614115565b90506020020160208101906107879190613dc2565b61079460408601866140cc565b858181106107a4576107a4614115565b90506020020135610c1c565b806107ba81614141565b91505061072f565b5050565b60006107d182611427565b92915050565b60606107e1611432565b905090565b6000600160401b8210156107fd576107d1826114c4565b6107d1826114eb565b81333b1580159061088057506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa15801561085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e919061415a565b155b156108a55760405163f6fa4cbd60e01b81523360048201526024015b60405180910390fd5b6001600160a01b0381163b1580159061092957506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610903573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610927919061415a565b155b15610952576040516341b8d58160e11b81526001600160a01b038216600482015260240161089c565b61095c8383611576565b505050565b600060135461096e611596565b6107e19190614177565b6a4d494e5445525f524f4c4560a81b610990816115b2565b6107c2826115bc565b600160401b8110156109b05761095c83838361160b565b61095c83838361163b565b60008281526004602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a305750604080518082019091526003546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a4f906001600160601b03168761418a565b610a5991906141a1565b91519350909150505b9250929050565b6a4d494e5445525f524f4c4560a81b610a81816115b2565b6107c282611660565b600082815260208190526040902060010154610aa5816115b2565b61095c83836116af565b60606000610abc816110e7565b90506000816001600160401b03811115610ad857610ad8613a45565b604051908082528060200260200182016040528015610b01578160200160208202803683370190505b50905060005b82811015610b5657610b1a600082610dfc565b828281518110610b2c57610b2c614115565b6001600160a01b039092166020928302919091019091015280610b4e81614141565b915050610b07565b5092915050565b6001600160a01b0381163314610bcd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161089c565b6107c282826116d1565b6000610be2816115b2565b6107c26a4d494e5445525f524f4c4560a81b83610a8a565b6a4d494e5445525f524f4c4560a81b610c12816115b2565b61095c83836116f3565b61095c838383604051806020016040528060008152506110b3565b610c42335b8261177a565b610c6257604051630247e3a960e01b81526004810182905260240161089c565b610c6b816117a3565b50565b6a4d494e5445525f524f4c4560a81b610c86816115b2565b610c918484846117f6565b50505050565b60006107d1826118c1565b6000610cad816115b2565b601661095c8382614243565b6a4d494e5445525f524f4c4560a81b610cd1816115b2565b61095c838361191e565b6000600160401b821015610cf2576107d182611928565b6107d182611988565b6000610d06816115b2565b6107c28261199c565b6000610d1a816115b2565b6107c26a4d494e5445525f524f4c4560a81b836110fe565b60168054610d3f906141c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6b906141c3565b8015610db85780601f10610d8d57610100808354040283529160200191610db8565b820191906000526020600020905b815481529060010190602001808311610d9b57829003601f168201915b505050505081565b6000610dcb82611a91565b610dd483611b5c565b6107d19190614177565b610c6b81611be2565b6000610df2816115b2565b61095c8383611c6e565b6000828152600160205260408120610e149083611d28565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610e4f816115b2565b601561095c8382614243565b60606107e1611d34565b6a4d494e5445525f524f4c4560a81b610e7d816115b2565b6107c282611d43565b6000610e9182610cdb565b9050826001600160a01b0316816001600160a01b031614610ed757604051634fefd56160e01b8152600481018390526001600160a01b038216602482015260440161089c565b61095c82610c37565b6a4d494e5445525f524f4c4560a81b610ef8816115b2565b61095c8383611d92565b81333b15801590610f7c57506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa158015610f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7a919061415a565b155b15610f9c5760405163f6fa4cbd60e01b815233600482015260240161089c565b6001600160a01b0381163b1580159061102057506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101e919061415a565b155b15611049576040516341b8d58160e11b81526001600160a01b038216600482015260240161089c565b61095c8383611e00565b6a4d494e5445525f524f4c4560a81b61106b816115b2565b60005b848110156110ab5761109986868381811061108b5761108b614115565b9050602002013585856117f6565b806110a381614141565b91505061106e565b505050505050565b600160401b8210156110d0576110cb84848484611e0a565b610c91565b610c9184848484611e3d565b60606107d182611e62565b60008181526001602052604081206107d190611ec8565b600082815260208190526040902060010154611119816115b2565b61095c83836116d1565b6a4d494e5445525f524f4c4560a81b61113b816115b2565b6107c282611ed2565b60005b8181101561095c5761117083838381811061116457611164614115565b90506020020135610c37565b8061117a81614141565b915050611147565b60158054610d3f906141c3565b6001600160a01b03808316600090815260126020908152604080832093851683529290529081205460ff16610e14565b6a4d494e5445525f524f4c4560a81b6111d7816115b2565b61095c8383611f21565b6111eb8282610e1b565b6107c2576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556112213390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e14836001600160a01b038416611f2b565b60606107d16001600160a01b03831660145b6060600061129b83600261418a565b6112a6906002614177565b6001600160401b038111156112bd576112bd613a45565b6040519080825280601f01601f1916602001820160405280156112e7576020820181803683370190505b509050600360fc1b8160008151811061130257611302614115565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061133157611331614115565b60200101906001600160f81b031916908160001a905350600061135584600261418a565b611360906001614177565b90505b60018111156113d8576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061139457611394614115565b1a60f81b8282815181106113aa576113aa614115565b60200101906001600160f81b031916908160001a90535060049490941c936113d181614302565b9050611363565b508315610e145760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161089c565b60006107d182611f7a565b6060600d8054611441906141c3565b80601f016020809104026020016040519081016040528092919081815260200182805461146d906141c3565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b5050505050905090565b60006114cf82611fba565b506000908152601160205260409020546001600160a01b031690565b60006114f6826118c1565b61155a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732315073693a20617070726f76656420717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161089c565b506000908152600a60205260409020546001600160a01b031690565b600160401b81101561158c576107c2828261200a565b6107c2828261211a565b60006115a0612222565b6115a861228c565b6107e19190614319565b610c6b81336122a0565b60005b81518110156107c25760008282815181106115dc576115dc614115565b602002602001015190506115f8816000015182602001516122f9565b508061160381614141565b9150506115bf565b61161433610c3c565b6116305760405162461bcd60e51b815260040161089c9061432c565b61095c83838361233a565b61164433610c3c565b6116305760405162461bcd60e51b815260040161089c90614379565b60005b81518110156107c257600082828151811061168057611680614115565b6020026020010151905061169c8160000151826020015161191e565b50806116a781614141565b915050611663565b6116b982826111e1565b600082815260016020526040902061095c9082611265565b6116db8282612541565b600082815260016020526040902061095c90826125a6565b600160401b811061171a5760405163b73c99f560e01b81526004810182905260240161089c565b600881901c600090815260146020526040902054600160ff83161b1615611757576040516305dcda1160e51b81526004810182905260240161089c565b61176182826125bb565b6013805490600061177183614141565b91905055505050565b6000600160401b821015611799576117928383612716565b90506107d1565b610e148383612775565b600160401b8110156117ed576117b88161283a565b600881901c60009081526014602052604081208054600160ff85161b17905560138054916117e583614302565b919050555050565b610c6b816128bd565b6127106001600160601b03821611156118215760405162461bcd60e51b815260040161089c906143cd565b6001600160a01b0382166118775760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d65746572730000000000604482015260640161089c565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600490529190942093519051909116600160a01b029116179055565b6000600160401b821015611915576000828152600f60205260409020546001600160a01b0316158015906107d15750600882901c600090815260146020526040902054600160ff84161b1615151592915050565b6107d1826128ff565b6107c28282612934565b6000818152600f60205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089c565b6000806119948361294e565b509392505050565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156119e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a0b919061415a565b611a2857604051631353be1160e11b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527ff499b54d61d3fcb40299e3299af3ffe9ef1ee6e47194240f3cc5b6e09f7f6796910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b038216611aff5760405162461bcd60e51b815260206004820152602d60248201527f4552433732315073693a2062616c616e636520717565727920666f722074686560448201526c207a65726f206164647265737360981b606482015260840161089c565b6000600160401b5b600954811015610b5657611b1a816118c1565b15611b4c57611b2881610cdb565b6001600160a01b0316846001600160a01b031603611b4c57611b4982614141565b91505b611b5581614141565b9050611b07565b60006001600160a01b038216611bc65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161089c565b506001600160a01b031660009081526010602052604090205490565b60005b81518110156107c2576000828281518110611c0257611c02614115565b6020026020010151905060005b816020015151811015611c5957611c47826000015183602001518381518110611c3a57611c3a614115565b6020026020010151610e86565b80611c5181614141565b915050611c0f565b50508080611c6690614141565b915050611be5565b6127106001600160601b0382161115611c995760405162461bcd60e51b815260040161089c906143cd565b6001600160a01b038216611cef5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640161089c565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600355565b6000610e1483836129e5565b6060600e8054611441906141c3565b60005b81518110156107c2576000828281518110611d6357611d63614115565b60200260200101519050611d7f81600001518260200151612a0f565b5080611d8a81614141565b915050611d46565b600160401b8110611db95760405163b73c99f560e01b81526004810182905260240161089c565b600881901c600090815260146020526040902054600160ff83161b1615611df6576040516305dcda1160e51b81526004810182905260240161089c565b6117618282612a50565b6107c28282612a6a565b611e15335b8361177a565b611e315760405162461bcd60e51b815260040161089c9061432c565b610c9184848484612a75565b611e4633611e0f565b611e315760405162461bcd60e51b815260040161089c90614379565b6060611e6d82611fba565b6000611e77612a99565b90506000815111611e975760405180602001604052806000815250610e14565b80611ea184612aa8565b604051602001611eb2929190614417565b6040516020818303038152906040529392505050565b60006107d1825490565b60005b81518110156107c2576000828281518110611ef257611ef2614115565b60200260200101519050611f0e81600001518260200151611f21565b5080611f1981614141565b915050611ed5565b6107c28282612b3a565b6000818152600183016020526040812054611f72575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b60006001600160e01b031982166380ac58cd60e01b1480611fab57506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612cb3565b611fc3816118c1565b610c6b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089c565b600061201582611928565b9050806001600160a01b0316836001600160a01b0316036120825760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161089c565b336001600160a01b038216148061209e575061209e813361118f565b6121105760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161089c565b61095c8383612cf3565b600061212582610cdb565b9050806001600160a01b0316836001600160a01b0316036121945760405162461bcd60e51b8152602060048201526024808201527f4552433732315073693a20617070726f76616c20746f2063757272656e74206f6044820152633bb732b960e11b606482015260840161089c565b336001600160a01b03821614806121b057506121b0813361118f565b6121105760405162461bcd60e51b815260206004820152603b60248201527f4552433732315073693a20617070726f76652063616c6c6572206973206e6f7460448201527f206f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000606482015260840161089c565b6009546000906701000000000000009082906122429060081c6001614177565b9050815b81811015612286576000818152600c602052604090205461226681612d13565b6122709086614177565b945050808061227e90614141565b915050612246565b50505090565b6000600160401b6009546107e19190614319565b6122aa8282610e1b565b6107c2576122b78161127a565b6122c283602061128c565b6040516020016122d3929190614446565b60408051601f198184030181529082905262461bcd60e51b825261089c916004016139d8565b60005b815181101561095c576123288383838151811061231b5761231b614115565b6020026020010151611d92565b8061233281614141565b9150506122fc565b82823332148015906123b557506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa15801561238f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b3919061415a565b155b156123d55760405163937db65f60e01b815233600482015260240161089c565b6001600160a01b0382163b1580159061245957506002546040516305a3b80960e01b81526001600160a01b038481166004830152909116906305a3b80990602401602060405180830381865afa158015612433573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612457919061415a565b155b156124825760405163f934453160e01b81526001600160a01b038316600482015260240161089c565b6001600160a01b0381163b1580159061250657506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa1580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612504919061415a565b155b1561252f57604051632a67242160e11b81526001600160a01b038216600482015260240161089c565b61253a858585612d32565b5050505050565b61254b8282610e1b565b156107c2576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e14836001600160a01b038416612d54565b6001600160a01b0382166126115760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161089c565b61261a816118c1565b156126675760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161089c565b612670816118c1565b156126bd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161089c565b6001600160a01b038216600081815260106020908152604080832080546001019055848352600f90915280822080546001600160a01b031916841790555183929190600080516020614618833981519152908290a45050565b60008061272283611928565b9050806001600160a01b0316846001600160a01b031614806127495750612749818561118f565b8061276d5750836001600160a01b0316612762846107e6565b6001600160a01b0316145b949350505050565b6000612780826118c1565b6127e45760405162461bcd60e51b815260206004820152602f60248201527f4552433732315073693a206f70657261746f7220717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161089c565b60006127ef83610cdb565b9050806001600160a01b0316846001600160a01b0316148061282a5750836001600160a01b031661281f846107e6565b6001600160a01b0316145b8061276d575061276d818561118f565b600061284582611928565b905061285082611928565b600083815260116020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552601084528285208054600019019055878552600f90935281842080549091169055519293508492600080516020614618833981519152908390a45050565b60006128c882610cdb565b90506128d5600c83612e47565b60405182906000906001600160a01b03841690600080516020614618833981519152908390a45050565b600881901c6000908152600c6020526040812054600160ff1b60ff84161c161561292b57506000919050565b6107d182612e73565b6107c2828260405180602001604052806000815250612e92565b60008061295a836118c1565b6129bb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732315073693a206f776e657220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161089c565b6129c483612ed3565b6000818152600860205260409020546001600160a01b031694909350915050565b60008260000182815481106129fc576129fc614115565b9060005260206000200154905092915050565b60005b815181101561095c57612a3e83838381518110612a3157612a31614115565b60200260200101516116f3565b80612a4881614141565b915050612a12565b6107c2828260405180602001604052806000815250612ee0565b6107c2338383612eeb565b600160401b821015612a8d576110cb84848484612fb9565b610c9184848484612fec565b606060168054611441906141c3565b60606000612ab583613005565b60010190506000816001600160401b03811115612ad457612ad4613a45565b6040519080825280601f01601f191660200182016040528015612afe576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612b0857509392505050565b6000612b4560095490565b905060008211612ba55760405162461bcd60e51b815260206004820152602560248201527f4552433732315073693a207175616e74697479206d7573742062652067726561604482015264074657220360dc1b606482015260840161089c565b6001600160a01b038316612c075760405162461bcd60e51b815260206004820152602360248201527f4552433732315073693a206d696e7420746f20746865207a65726f206164647260448201526265737360e81b606482015260840161089c565b8160096000828254612c199190614177565b9091555050600081815260086020526040902080546001600160a01b0319166001600160a01b038516179055612c50600582612e47565b600080612c5d8484614177565b90506001600160a01b038516915082826000600080516020614618833981519152600080a4600183015b818114612cad5780836000600080516020614618833981519152600080a4600101612c87565b5061253a565b60006001600160e01b031982166380ac58cd60e01b1480612ce457506001600160e01b03198216635b5e139f60e01b145b806107d157506107d1826130dd565b600160401b811015612d09576107c28282613102565b6107c28282613170565b60005b8115612d2d57600019820190911690600101612d16565b919050565b600160401b811015612d495761095c8383836131a5565b61095c8383836132f7565b60008181526001830160205260408120548015612e3d576000612d78600183614319565b8554909150600090612d8c90600190614319565b9050818114612df1576000866000018281548110612dac57612dac614115565b9060005260206000200154905080876000018481548110612dcf57612dcf614115565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e0257612e026144bb565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b600881901c600090815260209290925260409091208054600160ff1b60ff9093169290921c9091179055565b6000612e7e60095490565b821080156107d1575050600160401b111590565b6000612e9d60095490565b9050612ea98484612b3a565b612eb76000858386866134cf565b610c915760405162461bcd60e51b815260040161089c906144d1565b60006107d1600583613606565b61095c8383836136fe565b816001600160a01b0316836001600160a01b031603612f4c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161089c565b6001600160a01b03838116600081815260126020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612fc484848461233a565b612fd084848484613731565b610c915760405162461bcd60e51b815260040161089c90614526565b612ff784848461233a565b612eb78484846001856134cf565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106130445772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613070576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061308e57662386f26fc10000830492506010015b6305f5e10083106130a6576305f5e100830492506008015b61271083106130ba57612710830492506004015b606483106130cc576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b0319821663152a902d60e11b14806107d157506107d18261382a565b600081815260116020526040902080546001600160a01b0319166001600160a01b038416908117909155819061313782611928565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600a6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061313782610cdb565b826001600160a01b03166131b882611928565b6001600160a01b0316146131de5760405162461bcd60e51b815260040161089c90614578565b6001600160a01b0382166132405760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161089c565b826001600160a01b031661325382611928565b6001600160a01b0316146132795760405162461bcd60e51b815260040161089c90614578565b600081815260116020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260108552838620805460001901905590871680865283862080546001019055868652600f909452828520805490921684179091559051849360008051602061461883398151915291a4505050565b6000806133038361294e565b91509150846001600160a01b0316826001600160a01b03161461337d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732315073693a207472616e73666572206f6620746f6b656e2074686160448201526b3a1034b9903737ba1037bbb760a11b606482015260840161089c565b6001600160a01b0384166133e35760405162461bcd60e51b815260206004820152602760248201527f4552433732315073693a207472616e7366657220746f20746865207a65726f206044820152666164647265737360c81b606482015260840161089c565b6133ee600084612cf3565b60006133fb846001614177565b600881901c600090815260056020526040902054909150600160ff1b60ff83161c1615801561342b575060095481105b1561346257600081815260086020526040902080546001600160a01b0319166001600160a01b038816179055613462600582612e47565b600084815260086020526040902080546001600160a01b0319166001600160a01b03871617905581841461349b5761349b600585612e47565b83856001600160a01b0316876001600160a01b031660008051602061461883398151915260405160405180910390a46110ab565b60006001600160a01b0385163b156135f957506001835b6134f08486614177565b8110156135f357604051630a85bd0160e11b81526001600160a01b0387169063150b7a02906135299033908b90869089906004016145bd565b6020604051808303816000875af1925050508015613564575060408051601f3d908101601f19168201909252613561918101906145fa565b60015b6135c1573d808015613592576040519150601f19603f3d011682016040523d82523d6000602084013e613597565b606091505b5080516000036135b95760405162461bcd60e51b815260040161089c906144d1565b805181602001fd5b8280156135de57506001600160e01b03198116630a85bd0160e11b145b925050806135eb81614141565b9150506134e6565b506135fd565b5060015b95945050505050565b600881901c60008181526020849052604081205490919060ff808516919082181c80156136485761363681613835565b60ff168203600884901b1793506136f5565b600083116136b55760405162461bcd60e51b815260206004820152603460248201527f4269744d6170733a205468652073657420626974206265666f7265207468652060448201527334b73232bc103237b2b9b713ba1032bc34b9ba1760611b606482015260840161089c565b5060001990910160008181526020869052604090205490919080156136f0576136dd81613835565b60ff0360ff16600884901b1793506136f5565b613648565b50505092915050565b613708838361389f565b6137156000848484613731565b61095c5760405162461bcd60e51b815260040161089c90614526565b60006001600160a01b0384163b1561381f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906137759033908990889088906004016145bd565b6020604051808303816000875af19250505080156137b0575060408051601f3d908101601f191682019092526137ad918101906145fa565b60015b613805573d8080156137de576040519150601f19603f3d011682016040523d82523d6000602084013e6137e3565b606091505b5080516000036135b95760405162461bcd60e51b815260040161089c90614526565b6001600160e01b031916630a85bd0160e11b14905061276d565b506001949350505050565b60006107d1826138a9565b60006040518061012001604052806101008152602001614638610100913960f87e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff61387e856138ce565b02901c8151811061389157613891614115565b016020015160f81c92915050565b6107c282826125bb565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d1826138e6565b60008082116138dc57600080fd5b5060008190031690565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b60006020828403121561392d57600080fd5b81356001600160401b0381111561394357600080fd5b820160608185031215610e1457600080fd5b6001600160e01b031981168114610c6b57600080fd5b60006020828403121561397d57600080fd5b8135610e1481613955565b60005b838110156139a357818101518382015260200161398b565b50506000910152565b600081518084526139c4816020860160208601613988565b601f01601f19169290920160200192915050565b602081526000610e1460208301846139ac565b6000602082840312156139fd57600080fd5b5035919050565b80356001600160a01b0381168114612d2d57600080fd5b60008060408385031215613a2e57600080fd5b613a3783613a04565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a7d57613a7d613a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613aab57613aab613a45565b604052919050565b60006001600160401b03821115613acc57613acc613a45565b5060051b60200190565b6000613ae9613ae484613ab3565b613a83565b8381529050602080820190600585811b850187811115613b0857600080fd5b855b81811015613bdb5780356001600160401b0380821115613b2a5760008081fd5b908801906040828c031215613b3f5760008081fd5b613b47613a5b565b613b5083613a04565b81528683013582811115613b645760008081fd5b8084019350508b601f840112613b7c57600091508182fd5b82359150613b8c613ae483613ab3565b82815291861b8301870191878101908d841115613ba95760008081fd5b938801935b83851015613bc757843582529388019390880190613bae565b828901525087525050938301938301613b0a565b50505050509392505050565b600060208284031215613bf957600080fd5b81356001600160401b03811115613c0f57600080fd5b8201601f81018413613c2057600080fd5b61276d84823560208401613ad6565b600080600060608486031215613c4457600080fd5b613c4d84613a04565b9250613c5b60208501613a04565b9150604084013590509250925092565b60008060408385031215613c7e57600080fd5b50508035926020909101359150565b60006020808385031215613ca057600080fd5b82356001600160401b03811115613cb657600080fd5b8301601f81018513613cc757600080fd5b8035613cd5613ae482613ab3565b81815260069190911b82018301908381019087831115613cf457600080fd5b928401925b82841015613d3e5760408489031215613d125760008081fd5b613d1a613a5b565b613d2385613a04565b81528486013586820152825260409093019290840190613cf9565b979650505050505050565b60008060408385031215613d5c57600080fd5b82359150613d6c60208401613a04565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613db65783516001600160a01b031683529284019291840191600101613d91565b50909695505050505050565b600060208284031215613dd457600080fd5b610e1482613a04565b80356001600160601b0381168114612d2d57600080fd5b600080600060608486031215613e0957600080fd5b83359250613e1960208501613a04565b9150613e2760408501613ddd565b90509250925092565b60006001600160401b03831115613e4957613e49613a45565b613e5c601f8401601f1916602001613a83565b9050828152838383011115613e7057600080fd5b828260208301376000602084830101529392505050565b600060208284031215613e9957600080fd5b81356001600160401b03811115613eaf57600080fd5b8201601f81018413613ec057600080fd5b61276d84823560208401613e30565b60008060408385031215613ee257600080fd5b613eeb83613a04565b9150613d6c60208401613ddd565b8015158114610c6b57600080fd5b60008060408385031215613f1a57600080fd5b613f2383613a04565b91506020830135613f3381613ef9565b809150509250929050565b60008083601f840112613f5057600080fd5b5081356001600160401b03811115613f6757600080fd5b6020830191508360208260051b8501011115610a6257600080fd5b60008060008060608587031215613f9857600080fd5b84356001600160401b03811115613fae57600080fd5b613fba87828801613f3e565b9095509350613fcd905060208601613a04565b9150613fdb60408601613ddd565b905092959194509250565b60008060008060808587031215613ffc57600080fd5b61400585613a04565b935061401360208601613a04565b92506040850135915060608501356001600160401b0381111561403557600080fd5b8501601f8101871361404657600080fd5b61405587823560208401613e30565b91505092959194509250565b6000806020838503121561407457600080fd5b82356001600160401b0381111561408a57600080fd5b61409685828601613f3e565b90969095509350505050565b600080604083850312156140b557600080fd5b6140be83613a04565b9150613d6c60208401613a04565b6000808335601e198436030181126140e357600080fd5b8301803591506001600160401b038211156140fd57600080fd5b6020019150600581901b3603821315610a6257600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016141535761415361412b565b5060010190565b60006020828403121561416c57600080fd5b8151610e1481613ef9565b808201808211156107d1576107d161412b565b80820281158282048414176107d1576107d161412b565b6000826141be57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806141d757607f821691505b6020821081036141f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561095c57600081815260208120601f850160051c810160208610156142245750805b601f850160051c820191505b818110156110ab57828155600101614230565b81516001600160401b0381111561425c5761425c613a45565b6142708161426a84546141c3565b846141fd565b602080601f8311600181146142a5576000841561428d5750858301515b600019600386901b1c1916600185901b1785556110ab565b600085815260208120601f198616915b828110156142d4578886015182559484019460019091019084016142b5565b50858210156142f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000816143115761431161412b565b506000190190565b818103818111156107d1576107d161412b565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526034908201527f4552433732315073693a207472616e736665722063616c6c6572206973206e6f6040820152731d081bdddb995c881b9bdc88185c1c1c9bdd995960621b606082015260800190565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60008351614429818460208801613988565b83519083019061443d818360208801613988565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161447e816017850160208801613988565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516144af816028840160208801613988565b01602801949350505050565b634e487b7160e01b600052603160045260246000fd5b60208082526035908201527f4552433732315073693a207472616e7366657220746f206e6f6e20455243373260408201527418a932b1b2b4bb32b91034b6b83632b6b2b73a32b960591b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906145f0908301846139ac565b9695505050505050565b60006020828403121561460c57600080fd5b8151610e148161395556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0001020903110a19042112290b311a3905412245134d2a550c5d32651b6d3a7506264262237d468514804e8d2b95569d0d495ea533a966b11c886eb93bc176c9071727374353637324837e9b47af86c7155181ad4fd18ed32c9096db57d59ee30e2e4a6a5f92a6be3498aae067ddb2eb1d5989b56fd7baf33ca0c2ee77e5caf7ff0810182028303840444c545c646c7425617c847f8c949c48a4a8b087b8c0c816365272829aaec650acd0d28fdad4e22d6991bd97dfdcea58b4d6f29fede4f6fe0f1f2f3f4b5b6b607b8b93a3a7b7bf357199c5abcfd9e168bcdee9b3f1ecf5fd1e3e5a7a8aa2b670c4ced8bbe8f0f4fc3d79a1c3cde7effb78cce6facbf9f8a2646970667358221220f8fc88cc156435797aa3d9dc642f5ee1307c4e518ce35c0cb8a9c26fb3f4f44064736f6c63430008110033";
31542
+ const _bytecode$2 = "0x608060405260006013553480156200001657600080fd5b50604051620052f1380380620052f18339810160408190526200003991620007cd565b8787878787878787868681818181600662000055838262000960565b50600762000064828262000960565b50506801000000000000000060095550600d62000082838262000960565b50600e62000091828262000960565b50620000a69350600092508b915050620000f1565b620000b2828262000134565b620000bd8362000239565b6016620000cb868262000960565b506015620000da858262000960565b505050505050505050505050505050505062000b74565b6200010882826200025560201b620011e11760201c565b60008281526001602090815260409091206200012f91839062001265620002f5821b17901c565b505050565b6127106001600160601b0382161115620001a85760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620002005760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016200019f565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600355565b6000620002468162000315565b620002518262000324565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000251576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002b13390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200030c836001600160a01b0384166200041d565b90505b92915050565b6200032181336200046f565b50565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa15801562000370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000396919062000a2c565b620003b45760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b600081815260018301602052604081205462000466575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200030f565b5060006200030f565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200025157620004ae81620004ff60201b6200127a1760201c565b620004c48360206200128c62000512821b17811c565b604051602001620004d792919062000a50565b60408051601f198184030181529082905262461bcd60e51b82526200019f9160040162000ac9565b60606200030f6001600160a01b03831660145b606060006200052383600262000b14565b6200053090600262000b2e565b6001600160401b038111156200054a576200054a620006e8565b6040519080825280601f01601f19166020018201604052801562000575576020820181803683370190505b509050600360fc1b8160008151811062000593576200059362000b44565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620005c557620005c562000b44565b60200101906001600160f81b031916908160001a9053506000620005eb84600262000b14565b620005f890600162000b2e565b90505b60018111156200067a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811062000630576200063062000b44565b1a60f81b82828151811062000649576200064962000b44565b60200101906001600160f81b031916908160001a90535060049490941c93620006728162000b5a565b9050620005fb565b5083156200030c5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016200019f565b80516001600160a01b0381168114620006e357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200071b57818101518382015260200162000701565b50506000910152565b600082601f8301126200073657600080fd5b81516001600160401b0380821115620007535762000753620006e8565b604051601f8301601f19908116603f011681019082821181831017156200077e576200077e620006e8565b816040528381528660208588010111156200079857600080fd5b620007ab846020830160208901620006fe565b9695505050505050565b80516001600160601b0381168114620006e357600080fd5b600080600080600080600080610100898b031215620007eb57600080fd5b620007f689620006cb565b60208a01519098506001600160401b03808211156200081457600080fd5b620008228c838d0162000724565b985060408b01519150808211156200083957600080fd5b620008478c838d0162000724565b975060608b01519150808211156200085e57600080fd5b6200086c8c838d0162000724565b965060808b01519150808211156200088357600080fd5b50620008928b828c0162000724565b945050620008a360a08a01620006cb565b9250620008b360c08a01620006cb565b9150620008c360e08a01620007b5565b90509295985092959890939650565b600181811c90821680620008e757607f821691505b6020821081036200090857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200012f57600081815260208120601f850160051c81016020861015620009375750805b601f850160051c820191505b81811015620009585782815560010162000943565b505050505050565b81516001600160401b038111156200097c576200097c620006e8565b62000994816200098d8454620008d2565b846200090e565b602080601f831160018114620009cc5760008415620009b35750858301515b600019600386901b1c1916600185901b17855562000958565b600085815260208120601f198616915b82811015620009fd57888601518255948401946001909101908401620009dc565b508582101562000a1c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a3f57600080fd5b815180151581146200030c57600080fd5b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835162000a8a816017850160208801620006fe565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000abd816028840160208801620006fe565b01602801949350505050565b602081526000825180602084015262000aea816040850160208701620006fe565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200030f576200030f62000afe565b808201808211156200030f576200030f62000afe565b634e487b7160e01b600052603260045260246000fd5b60008162000b6c5762000b6c62000afe565b506000190190565b61476d8062000b846000396000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c806369e2f0fb1161019d578063a22cb465116100e9578063d547741f116100a2578063e4e18f6d1161007c578063e4e18f6d146106af578063e8a3d485146106c2578063e985e9c5146106ca578063eea98768146106dd57600080fd5b8063d547741f14610676578063e192785914610689578063e4623c1b1461069c57600080fd5b8063a22cb46514610602578063a701281614610615578063b88d4fde14610628578063c87b56dd1461063b578063ca15c8731461064e578063d53913931461066157600080fd5b806391d14854116101565780639e2641a3116101305780639e2641a3146105c15780639f15d700146105d4578063a1448194146105e7578063a217fddf146105fa57600080fd5b806391d1485414610593578063938e3d7b146105a657806395d89b41146105b957600080fd5b806369e2f0fb1461052c5780636c0360eb1461053f57806370a082311461054757806374f16a811461055a578063885e7a081461056d5780639010d07c1461058057600080fd5b80632d2c5a8b1161025c57806342842e0e116102155780634f558e79116101ef5780634f558e79146104e057806355f804b3146104f3578063567e4075146105065780636352211e1461051957600080fd5b806342842e0e146104a757806342966c68146104ba578063439aed34146104cd57600080fd5b80632d2c5a8b146104335780632f2ff15d1461044657806331ae450b1461045957806336568abe1461046e5780633dd1eb611461048157806340c10f191461049457600080fd5b80631f8ebbd1116102ae5780631f8ebbd11461039b578063234af046146103a557806323b872dd146103b8578063248a9ca3146103cb57806329326f29146103ee5780632a55205a1461040157600080fd5b80628ad946146102f557806301ffc9a71461030a57806306fdde0314610332578063081812fc14610347578063095ea7b31461037257806318160ddd14610385575b600080fd5b61030861030336600461391b565b6106f0565b005b61031d61031836600461396b565b6107c6565b60405190151581526020015b60405180910390f35b61033a6107d7565b60405161032991906139d8565b61035a6103553660046139eb565b6107e6565b6040516001600160a01b039091168152602001610329565b610308610380366004613a1b565b610806565b61038d610961565b604051908152602001610329565b600160401b61038d565b6103086103b3366004613be7565b610978565b6103086103c6366004613c2f565b610999565b61038d6103d93660046139eb565b60009081526020819052604090206001015490565b60025461035a906001600160a01b031681565b61041461040f366004613c6b565b6109bb565b604080516001600160a01b039093168352602083019190915201610329565b610308610441366004613c8d565b610a69565b610308610454366004613d49565b610a8a565b610461610aaf565b6040516103299190613d75565b61030861047c366004613d49565b610b5d565b61030861048f366004613dc2565b610bd7565b6103086104a2366004613a1b565b610bfa565b6103086104b5366004613c2f565b610c1c565b6103086104c83660046139eb565b610c37565b6103086104db366004613df4565b610c6e565b61031d6104ee3660046139eb565b610c97565b610308610501366004613e87565b610ca2565b610308610514366004613a1b565b610cb9565b61035a6105273660046139eb565b610cdb565b61030861053a366004613dc2565b610cfb565b61033a610d1e565b61038d610555366004613dc2565b610dac565b610308610568366004613be7565b610dca565b61030861057b366004613ecf565b610dd3565b61035a61058e366004613c6b565b610de8565b61031d6105a1366004613d49565b610e07565b6103086105b4366004613e87565b610e30565b61033a610e47565b6103086105cf366004613be7565b610e51565b6103086105e2366004613a1b565b610e72565b6103086105f5366004613a1b565b610ecc565b61038d600081565b610308610610366004613f07565b610eee565b610308610623366004613f82565b61103f565b610308610636366004613fe6565b61109f565b61033a6106493660046139eb565b6110c8565b61038d61065c3660046139eb565b6110d3565b61038d6a4d494e5445525f524f4c4560a81b81565b610308610684366004613d49565b6110ea565b610308610697366004613c8d565b61110f565b6103086106aa366004614061565b611130565b6103086106bd366004613dc2565b61116e565b61033a611182565b61031d6106d83660046140a2565b61118f565b6103086106eb366004613a1b565b6111bf565b6106fd60208201826140cc565b905061070c60408301836140cc565b90501461072c5760405163359a1bc360e01b815260040160405180910390fd5b60005b61073c60408301836140cc565b90508110156107c2576107b06107556020840184613dc2565b61076260208501856140cc565b8481811061077257610772614115565b90506020020160208101906107879190613dc2565b61079460408601866140cc565b858181106107a4576107a4614115565b90506020020135610c1c565b806107ba81614141565b91505061072f565b5050565b60006107d182611427565b92915050565b60606107e1611432565b905090565b6000600160401b8210156107fd576107d1826114c4565b6107d1826114eb565b81333b1580159061088057506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa15801561085a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087e919061415a565b155b156108a55760405163f6fa4cbd60e01b81523360048201526024015b60405180910390fd5b6001600160a01b0381163b1580159061092957506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610903573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610927919061415a565b155b15610952576040516341b8d58160e11b81526001600160a01b038216600482015260240161089c565b61095c8383611576565b505050565b600060135461096e611596565b6107e19190614177565b6a4d494e5445525f524f4c4560a81b610990816115b2565b6107c2826115bc565b600160401b8110156109b05761095c83838361160b565b61095c83838361163b565b60008281526004602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a305750604080518082019091526003546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a4f906001600160601b03168761418a565b610a5991906141a1565b91519350909150505b9250929050565b6a4d494e5445525f524f4c4560a81b610a81816115b2565b6107c282611660565b600082815260208190526040902060010154610aa5816115b2565b61095c83836116af565b60606000610abc816110d3565b90506000816001600160401b03811115610ad857610ad8613a45565b604051908082528060200260200182016040528015610b01578160200160208202803683370190505b50905060005b82811015610b5657610b1a600082610de8565b828281518110610b2c57610b2c614115565b6001600160a01b039092166020928302919091019091015280610b4e81614141565b915050610b07565b5092915050565b6001600160a01b0381163314610bcd5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b606482015260840161089c565b6107c282826116d1565b6000610be2816115b2565b6107c26a4d494e5445525f524f4c4560a81b83610a8a565b6a4d494e5445525f524f4c4560a81b610c12816115b2565b61095c83836116f3565b61095c8383836040518060200160405280600081525061109f565b610c42335b8261177a565b610c6257604051630247e3a960e01b81526004810182905260240161089c565b610c6b816117a3565b50565b6a4d494e5445525f524f4c4560a81b610c86816115b2565b610c918484846117f6565b50505050565b60006107d1826118c1565b6000610cad816115b2565b601661095c8382614243565b6a4d494e5445525f524f4c4560a81b610cd1816115b2565b61095c838361191e565b6000600160401b821015610cf2576107d182611928565b6107d182611988565b6000610d06816115b2565b6107c26a4d494e5445525f524f4c4560a81b836110ea565b60168054610d2b906141c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d57906141c3565b8015610da45780601f10610d7957610100808354040283529160200191610da4565b820191906000526020600020905b815481529060010190602001808311610d8757829003601f168201915b505050505081565b6000610db78261199c565b610dc083611a67565b6107d19190614177565b610c6b81611aed565b6000610dde816115b2565b61095c8383611b79565b6000828152600160205260408120610e009083611c33565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610e3b816115b2565b601561095c8382614243565b60606107e1611c3f565b6a4d494e5445525f524f4c4560a81b610e69816115b2565b6107c282611c4e565b6000610e7d82610cdb565b9050826001600160a01b0316816001600160a01b031614610ec357604051634fefd56160e01b8152600481018390526001600160a01b038216602482015260440161089c565b61095c82610c37565b6a4d494e5445525f524f4c4560a81b610ee4816115b2565b61095c8383611c9d565b81333b15801590610f6857506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f66919061415a565b155b15610f885760405163f6fa4cbd60e01b815233600482015260240161089c565b6001600160a01b0381163b1580159061100c57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100a919061415a565b155b15611035576040516341b8d58160e11b81526001600160a01b038216600482015260240161089c565b61095c8383611d0b565b6a4d494e5445525f524f4c4560a81b611057816115b2565b60005b848110156110975761108586868381811061107757611077614115565b9050602002013585856117f6565b8061108f81614141565b91505061105a565b505050505050565b600160401b8210156110bc576110b784848484611d15565b610c91565b610c9184848484611d48565b60606107d182611d6d565b60008181526001602052604081206107d190611dd3565b600082815260208190526040902060010154611105816115b2565b61095c83836116d1565b6a4d494e5445525f524f4c4560a81b611127816115b2565b6107c282611ddd565b60005b8181101561095c5761115c83838381811061115057611150614115565b90506020020135610c37565b8061116681614141565b915050611133565b6000611179816115b2565b6107c282611e2c565b60158054610d2b906141c3565b6001600160a01b03808316600090815260126020908152604080832093851683529290529081205460ff16610e00565b6a4d494e5445525f524f4c4560a81b6111d7816115b2565b61095c8383611f21565b6111eb8282610e07565b6107c2576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556112213390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610e00836001600160a01b038416611f2b565b60606107d16001600160a01b03831660145b6060600061129b83600261418a565b6112a6906002614177565b6001600160401b038111156112bd576112bd613a45565b6040519080825280601f01601f1916602001820160405280156112e7576020820181803683370190505b509050600360fc1b8160008151811061130257611302614115565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061133157611331614115565b60200101906001600160f81b031916908160001a905350600061135584600261418a565b611360906001614177565b90505b60018111156113d8576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061139457611394614115565b1a60f81b8282815181106113aa576113aa614115565b60200101906001600160f81b031916908160001a90535060049490941c936113d181614302565b9050611363565b508315610e005760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640161089c565b60006107d182611f7a565b6060600d8054611441906141c3565b80601f016020809104026020016040519081016040528092919081815260200182805461146d906141c3565b80156114ba5780601f1061148f576101008083540402835291602001916114ba565b820191906000526020600020905b81548152906001019060200180831161149d57829003601f168201915b5050505050905090565b60006114cf82611fba565b506000908152601160205260409020546001600160a01b031690565b60006114f6826118c1565b61155a5760405162461bcd60e51b815260206004820152602f60248201527f4552433732315073693a20617070726f76656420717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161089c565b506000908152600a60205260409020546001600160a01b031690565b600160401b81101561158c576107c2828261200a565b6107c2828261211a565b60006115a0612222565b6115a861228c565b6107e19190614319565b610c6b81336122a0565b60005b81518110156107c25760008282815181106115dc576115dc614115565b602002602001015190506115f8816000015182602001516122f9565b508061160381614141565b9150506115bf565b61161433610c3c565b6116305760405162461bcd60e51b815260040161089c9061432c565b61095c83838361233a565b61164433610c3c565b6116305760405162461bcd60e51b815260040161089c90614379565b60005b81518110156107c257600082828151811061168057611680614115565b6020026020010151905061169c8160000151826020015161191e565b50806116a781614141565b915050611663565b6116b982826111e1565b600082815260016020526040902061095c9082611265565b6116db8282612541565b600082815260016020526040902061095c90826125a6565b600160401b811061171a5760405163b73c99f560e01b81526004810182905260240161089c565b600881901c600090815260146020526040902054600160ff83161b1615611757576040516305dcda1160e51b81526004810182905260240161089c565b61176182826125bb565b6013805490600061177183614141565b91905055505050565b6000600160401b821015611799576117928383612716565b90506107d1565b610e008383612775565b600160401b8110156117ed576117b88161283a565b600881901c60009081526014602052604081208054600160ff85161b17905560138054916117e583614302565b919050555050565b610c6b816128bd565b6127106001600160601b03821611156118215760405162461bcd60e51b815260040161089c906143cd565b6001600160a01b0382166118775760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d65746572730000000000604482015260640161089c565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600490529190942093519051909116600160a01b029116179055565b6000600160401b821015611915576000828152600f60205260409020546001600160a01b0316158015906107d15750600882901c600090815260146020526040902054600160ff84161b1615151592915050565b6107d1826128ff565b6107c28282612934565b6000818152600f60205260408120546001600160a01b0316806107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089c565b6000806119948361294e565b509392505050565b60006001600160a01b038216611a0a5760405162461bcd60e51b815260206004820152602d60248201527f4552433732315073693a2062616c616e636520717565727920666f722074686560448201526c207a65726f206164647265737360981b606482015260840161089c565b6000600160401b5b600954811015610b5657611a25816118c1565b15611a5757611a3381610cdb565b6001600160a01b0316846001600160a01b031603611a5757611a5482614141565b91505b611a6081614141565b9050611a12565b60006001600160a01b038216611ad15760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b606482015260840161089c565b506001600160a01b031660009081526010602052604090205490565b60005b81518110156107c2576000828281518110611b0d57611b0d614115565b6020026020010151905060005b816020015151811015611b6457611b52826000015183602001518381518110611b4557611b45614115565b6020026020010151610e72565b80611b5c81614141565b915050611b1a565b50508080611b7190614141565b915050611af0565b6127106001600160601b0382161115611ba45760405162461bcd60e51b815260040161089c906143cd565b6001600160a01b038216611bfa5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640161089c565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600355565b6000610e0083836129e5565b6060600e8054611441906141c3565b60005b81518110156107c2576000828281518110611c6e57611c6e614115565b60200260200101519050611c8a81600001518260200151612a0f565b5080611c9581614141565b915050611c51565b600160401b8110611cc45760405163b73c99f560e01b81526004810182905260240161089c565b600881901c600090815260146020526040902054600160ff83161b1615611d01576040516305dcda1160e51b81526004810182905260240161089c565b6117618282612a50565b6107c28282612a6a565b611d20335b8361177a565b611d3c5760405162461bcd60e51b815260040161089c9061432c565b610c9184848484612a75565b611d5133611d1a565b611d3c5760405162461bcd60e51b815260040161089c90614379565b6060611d7882611fba565b6000611d82612a99565b90506000815111611da25760405180602001604052806000815250610e00565b80611dac84612aa8565b604051602001611dbd929190614417565b6040516020818303038152906040529392505050565b60006107d1825490565b60005b81518110156107c2576000828281518110611dfd57611dfd614115565b60200260200101519050611e1981600001518260200151611f21565b5080611e2481614141565b915050611de0565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611e77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9b919061415a565b611eb85760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6107c28282612b3a565b6000818152600183016020526040812054611f72575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107d1565b5060006107d1565b60006001600160e01b031982166380ac58cd60e01b1480611fab57506001600160e01b03198216635b5e139f60e01b145b806107d157506107d182612cb3565b611fc3816118c1565b610c6b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161089c565b600061201582611928565b9050806001600160a01b0316836001600160a01b0316036120825760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b606482015260840161089c565b336001600160a01b038216148061209e575061209e813361118f565b6121105760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161089c565b61095c8383612cf3565b600061212582610cdb565b9050806001600160a01b0316836001600160a01b0316036121945760405162461bcd60e51b8152602060048201526024808201527f4552433732315073693a20617070726f76616c20746f2063757272656e74206f6044820152633bb732b960e11b606482015260840161089c565b336001600160a01b03821614806121b057506121b0813361118f565b6121105760405162461bcd60e51b815260206004820152603b60248201527f4552433732315073693a20617070726f76652063616c6c6572206973206e6f7460448201527f206f776e6572206e6f7220617070726f76656420666f7220616c6c0000000000606482015260840161089c565b6009546000906701000000000000009082906122429060081c6001614177565b9050815b81811015612286576000818152600c602052604090205461226681612d13565b6122709086614177565b945050808061227e90614141565b915050612246565b50505090565b6000600160401b6009546107e19190614319565b6122aa8282610e07565b6107c2576122b78161127a565b6122c283602061128c565b6040516020016122d3929190614446565b60408051601f198184030181529082905262461bcd60e51b825261089c916004016139d8565b60005b815181101561095c576123288383838151811061231b5761231b614115565b6020026020010151611c9d565b8061233281614141565b9150506122fc565b82823332148015906123b557506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa15801561238f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b3919061415a565b155b156123d55760405163937db65f60e01b815233600482015260240161089c565b6001600160a01b0382163b1580159061245957506002546040516305a3b80960e01b81526001600160a01b038481166004830152909116906305a3b80990602401602060405180830381865afa158015612433573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612457919061415a565b155b156124825760405163f934453160e01b81526001600160a01b038316600482015260240161089c565b6001600160a01b0381163b1580159061250657506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa1580156124e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612504919061415a565b155b1561252f57604051632a67242160e11b81526001600160a01b038216600482015260240161089c565b61253a858585612d32565b5050505050565b61254b8282610e07565b156107c2576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610e00836001600160a01b038416612d54565b6001600160a01b0382166126115760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640161089c565b61261a816118c1565b156126675760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161089c565b612670816118c1565b156126bd5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640161089c565b6001600160a01b038216600081815260106020908152604080832080546001019055848352600f90915280822080546001600160a01b031916841790555183929190600080516020614618833981519152908290a45050565b60008061272283611928565b9050806001600160a01b0316846001600160a01b031614806127495750612749818561118f565b8061276d5750836001600160a01b0316612762846107e6565b6001600160a01b0316145b949350505050565b6000612780826118c1565b6127e45760405162461bcd60e51b815260206004820152602f60248201527f4552433732315073693a206f70657261746f7220717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b606482015260840161089c565b60006127ef83610cdb565b9050806001600160a01b0316846001600160a01b0316148061282a5750836001600160a01b031661281f846107e6565b6001600160a01b0316145b8061276d575061276d818561118f565b600061284582611928565b905061285082611928565b600083815260116020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552601084528285208054600019019055878552600f90935281842080549091169055519293508492600080516020614618833981519152908390a45050565b60006128c882610cdb565b90506128d5600c83612e47565b60405182906000906001600160a01b03841690600080516020614618833981519152908390a45050565b600881901c6000908152600c6020526040812054600160ff1b60ff84161c161561292b57506000919050565b6107d182612e73565b6107c2828260405180602001604052806000815250612e92565b60008061295a836118c1565b6129bb5760405162461bcd60e51b815260206004820152602c60248201527f4552433732315073693a206f776e657220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b606482015260840161089c565b6129c483612ed3565b6000818152600860205260409020546001600160a01b031694909350915050565b60008260000182815481106129fc576129fc614115565b9060005260206000200154905092915050565b60005b815181101561095c57612a3e83838381518110612a3157612a31614115565b60200260200101516116f3565b80612a4881614141565b915050612a12565b6107c2828260405180602001604052806000815250612ee0565b6107c2338383612eeb565b600160401b821015612a8d576110b784848484612fb9565b610c9184848484612fec565b606060168054611441906141c3565b60606000612ab583613005565b60010190506000816001600160401b03811115612ad457612ad4613a45565b6040519080825280601f01601f191660200182016040528015612afe576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612b0857509392505050565b6000612b4560095490565b905060008211612ba55760405162461bcd60e51b815260206004820152602560248201527f4552433732315073693a207175616e74697479206d7573742062652067726561604482015264074657220360dc1b606482015260840161089c565b6001600160a01b038316612c075760405162461bcd60e51b815260206004820152602360248201527f4552433732315073693a206d696e7420746f20746865207a65726f206164647260448201526265737360e81b606482015260840161089c565b8160096000828254612c199190614177565b9091555050600081815260086020526040902080546001600160a01b0319166001600160a01b038516179055612c50600582612e47565b600080612c5d8484614177565b90506001600160a01b038516915082826000600080516020614618833981519152600080a4600183015b818114612cad5780836000600080516020614618833981519152600080a4600101612c87565b5061253a565b60006001600160e01b031982166380ac58cd60e01b1480612ce457506001600160e01b03198216635b5e139f60e01b145b806107d157506107d1826130dd565b600160401b811015612d09576107c28282613102565b6107c28282613170565b60005b8115612d2d57600019820190911690600101612d16565b919050565b600160401b811015612d495761095c8383836131a5565b61095c8383836132f7565b60008181526001830160205260408120548015612e3d576000612d78600183614319565b8554909150600090612d8c90600190614319565b9050818114612df1576000866000018281548110612dac57612dac614115565b9060005260206000200154905080876000018481548110612dcf57612dcf614115565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e0257612e026144bb565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107d1565b60009150506107d1565b600881901c600090815260209290925260409091208054600160ff1b60ff9093169290921c9091179055565b6000612e7e60095490565b821080156107d1575050600160401b111590565b6000612e9d60095490565b9050612ea98484612b3a565b612eb76000858386866134cf565b610c915760405162461bcd60e51b815260040161089c906144d1565b60006107d1600583613606565b61095c8383836136fe565b816001600160a01b0316836001600160a01b031603612f4c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015260640161089c565b6001600160a01b03838116600081815260126020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612fc484848461233a565b612fd084848484613731565b610c915760405162461bcd60e51b815260040161089c90614526565b612ff784848461233a565b612eb78484846001856134cf565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106130445772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613070576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061308e57662386f26fc10000830492506010015b6305f5e10083106130a6576305f5e100830492506008015b61271083106130ba57612710830492506004015b606483106130cc576064830492506002015b600a83106107d15760010192915050565b60006001600160e01b0319821663152a902d60e11b14806107d157506107d18261382a565b600081815260116020526040902080546001600160a01b0319166001600160a01b038416908117909155819061313782611928565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600a6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061313782610cdb565b826001600160a01b03166131b882611928565b6001600160a01b0316146131de5760405162461bcd60e51b815260040161089c90614578565b6001600160a01b0382166132405760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161089c565b826001600160a01b031661325382611928565b6001600160a01b0316146132795760405162461bcd60e51b815260040161089c90614578565b600081815260116020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260108552838620805460001901905590871680865283862080546001019055868652600f909452828520805490921684179091559051849360008051602061461883398151915291a4505050565b6000806133038361294e565b91509150846001600160a01b0316826001600160a01b03161461337d5760405162461bcd60e51b815260206004820152602c60248201527f4552433732315073693a207472616e73666572206f6620746f6b656e2074686160448201526b3a1034b9903737ba1037bbb760a11b606482015260840161089c565b6001600160a01b0384166133e35760405162461bcd60e51b815260206004820152602760248201527f4552433732315073693a207472616e7366657220746f20746865207a65726f206044820152666164647265737360c81b606482015260840161089c565b6133ee600084612cf3565b60006133fb846001614177565b600881901c600090815260056020526040902054909150600160ff1b60ff83161c1615801561342b575060095481105b1561346257600081815260086020526040902080546001600160a01b0319166001600160a01b038816179055613462600582612e47565b600084815260086020526040902080546001600160a01b0319166001600160a01b03871617905581841461349b5761349b600585612e47565b83856001600160a01b0316876001600160a01b031660008051602061461883398151915260405160405180910390a4611097565b60006001600160a01b0385163b156135f957506001835b6134f08486614177565b8110156135f357604051630a85bd0160e11b81526001600160a01b0387169063150b7a02906135299033908b90869089906004016145bd565b6020604051808303816000875af1925050508015613564575060408051601f3d908101601f19168201909252613561918101906145fa565b60015b6135c1573d808015613592576040519150601f19603f3d011682016040523d82523d6000602084013e613597565b606091505b5080516000036135b95760405162461bcd60e51b815260040161089c906144d1565b805181602001fd5b8280156135de57506001600160e01b03198116630a85bd0160e11b145b925050806135eb81614141565b9150506134e6565b506135fd565b5060015b95945050505050565b600881901c60008181526020849052604081205490919060ff808516919082181c80156136485761363681613835565b60ff168203600884901b1793506136f5565b600083116136b55760405162461bcd60e51b815260206004820152603460248201527f4269744d6170733a205468652073657420626974206265666f7265207468652060448201527334b73232bc103237b2b9b713ba1032bc34b9ba1760611b606482015260840161089c565b5060001990910160008181526020869052604090205490919080156136f0576136dd81613835565b60ff0360ff16600884901b1793506136f5565b613648565b50505092915050565b613708838361389f565b6137156000848484613731565b61095c5760405162461bcd60e51b815260040161089c90614526565b60006001600160a01b0384163b1561381f57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906137759033908990889088906004016145bd565b6020604051808303816000875af19250505080156137b0575060408051601f3d908101601f191682019092526137ad918101906145fa565b60015b613805573d8080156137de576040519150601f19603f3d011682016040523d82523d6000602084013e6137e3565b606091505b5080516000036135b95760405162461bcd60e51b815260040161089c90614526565b6001600160e01b031916630a85bd0160e11b14905061276d565b506001949350505050565b60006107d1826138a9565b60006040518061012001604052806101008152602001614638610100913960f87e818283848586878898a8b8c8d8e8f929395969799a9b9d9e9faaeb6bedeeff61387e856138ce565b02901c8151811061389157613891614115565b016020015160f81c92915050565b6107c282826125bb565b60006001600160e01b03198216635a05180f60e01b14806107d157506107d1826138e6565b60008082116138dc57600080fd5b5060008190031690565b60006001600160e01b03198216637965db0b60e01b14806107d157506301ffc9a760e01b6001600160e01b03198316146107d1565b60006020828403121561392d57600080fd5b81356001600160401b0381111561394357600080fd5b820160608185031215610e0057600080fd5b6001600160e01b031981168114610c6b57600080fd5b60006020828403121561397d57600080fd5b8135610e0081613955565b60005b838110156139a357818101518382015260200161398b565b50506000910152565b600081518084526139c4816020860160208601613988565b601f01601f19169290920160200192915050565b602081526000610e0060208301846139ac565b6000602082840312156139fd57600080fd5b5035919050565b80356001600160a01b0381168114612d2d57600080fd5b60008060408385031215613a2e57600080fd5b613a3783613a04565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613a7d57613a7d613a45565b60405290565b604051601f8201601f191681016001600160401b0381118282101715613aab57613aab613a45565b604052919050565b60006001600160401b03821115613acc57613acc613a45565b5060051b60200190565b6000613ae9613ae484613ab3565b613a83565b8381529050602080820190600585811b850187811115613b0857600080fd5b855b81811015613bdb5780356001600160401b0380821115613b2a5760008081fd5b908801906040828c031215613b3f5760008081fd5b613b47613a5b565b613b5083613a04565b81528683013582811115613b645760008081fd5b8084019350508b601f840112613b7c57600091508182fd5b82359150613b8c613ae483613ab3565b82815291861b8301870191878101908d841115613ba95760008081fd5b938801935b83851015613bc757843582529388019390880190613bae565b828901525087525050938301938301613b0a565b50505050509392505050565b600060208284031215613bf957600080fd5b81356001600160401b03811115613c0f57600080fd5b8201601f81018413613c2057600080fd5b61276d84823560208401613ad6565b600080600060608486031215613c4457600080fd5b613c4d84613a04565b9250613c5b60208501613a04565b9150604084013590509250925092565b60008060408385031215613c7e57600080fd5b50508035926020909101359150565b60006020808385031215613ca057600080fd5b82356001600160401b03811115613cb657600080fd5b8301601f81018513613cc757600080fd5b8035613cd5613ae482613ab3565b81815260069190911b82018301908381019087831115613cf457600080fd5b928401925b82841015613d3e5760408489031215613d125760008081fd5b613d1a613a5b565b613d2385613a04565b81528486013586820152825260409093019290840190613cf9565b979650505050505050565b60008060408385031215613d5c57600080fd5b82359150613d6c60208401613a04565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015613db65783516001600160a01b031683529284019291840191600101613d91565b50909695505050505050565b600060208284031215613dd457600080fd5b610e0082613a04565b80356001600160601b0381168114612d2d57600080fd5b600080600060608486031215613e0957600080fd5b83359250613e1960208501613a04565b9150613e2760408501613ddd565b90509250925092565b60006001600160401b03831115613e4957613e49613a45565b613e5c601f8401601f1916602001613a83565b9050828152838383011115613e7057600080fd5b828260208301376000602084830101529392505050565b600060208284031215613e9957600080fd5b81356001600160401b03811115613eaf57600080fd5b8201601f81018413613ec057600080fd5b61276d84823560208401613e30565b60008060408385031215613ee257600080fd5b613eeb83613a04565b9150613d6c60208401613ddd565b8015158114610c6b57600080fd5b60008060408385031215613f1a57600080fd5b613f2383613a04565b91506020830135613f3381613ef9565b809150509250929050565b60008083601f840112613f5057600080fd5b5081356001600160401b03811115613f6757600080fd5b6020830191508360208260051b8501011115610a6257600080fd5b60008060008060608587031215613f9857600080fd5b84356001600160401b03811115613fae57600080fd5b613fba87828801613f3e565b9095509350613fcd905060208601613a04565b9150613fdb60408601613ddd565b905092959194509250565b60008060008060808587031215613ffc57600080fd5b61400585613a04565b935061401360208601613a04565b92506040850135915060608501356001600160401b0381111561403557600080fd5b8501601f8101871361404657600080fd5b61405587823560208401613e30565b91505092959194509250565b6000806020838503121561407457600080fd5b82356001600160401b0381111561408a57600080fd5b61409685828601613f3e565b90969095509350505050565b600080604083850312156140b557600080fd5b6140be83613a04565b9150613d6c60208401613a04565b6000808335601e198436030181126140e357600080fd5b8301803591506001600160401b038211156140fd57600080fd5b6020019150600581901b3603821315610a6257600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016141535761415361412b565b5060010190565b60006020828403121561416c57600080fd5b8151610e0081613ef9565b808201808211156107d1576107d161412b565b80820281158282048414176107d1576107d161412b565b6000826141be57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806141d757607f821691505b6020821081036141f757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561095c57600081815260208120601f850160051c810160208610156142245750805b601f850160051c820191505b8181101561109757828155600101614230565b81516001600160401b0381111561425c5761425c613a45565b6142708161426a84546141c3565b846141fd565b602080601f8311600181146142a5576000841561428d5750858301515b600019600386901b1c1916600185901b178555611097565b600085815260208120601f198616915b828110156142d4578886015182559484019460019091019084016142b5565b50858210156142f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000816143115761431161412b565b506000190190565b818103818111156107d1576107d161412b565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526034908201527f4552433732315073693a207472616e736665722063616c6c6572206973206e6f6040820152731d081bdddb995c881b9bdc88185c1c1c9bdd995960621b606082015260800190565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60008351614429818460208801613988565b83519083019061443d818360208801613988565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161447e816017850160208801613988565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516144af816028840160208801613988565b01602801949350505050565b634e487b7160e01b600052603160045260246000fd5b60208082526035908201527f4552433732315073693a207472616e7366657220746f206e6f6e20455243373260408201527418a932b1b2b4bb32b91034b6b83632b6b2b73a32b960591b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906145f0908301846139ac565b9695505050505050565b60006020828403121561460c57600080fd5b8151610e008161395556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0001020903110a19042112290b311a3905412245134d2a550c5d32651b6d3a7506264262237d468514804e8d2b95569d0d495ea533a966b11c886eb93bc176c9071727374353637324837e9b47af86c7155181ad4fd18ed32c9096db57d59ee30e2e4a6a5f92a6be3498aae067ddb2eb1d5989b56fd7baf33ca0c2ee77e5caf7ff0810182028303840444c545c646c7425617c847f8c949c48a4a8b087b8c0c816365272829aaec650acd0d28fdad4e22d6991bd97dfdcea58b4d6f29fede4f6fe0f1f2f3f4b5b6b607b8b93a3a7b7bf357199c5abcfd9e168bcdee9b3f1ecf5fd1e3e5a7a8aa2b670c4ced8bbe8f0f4fc3d79a1c3cde7effb78cce6facbf9f8a264697066735822122069f1e7de30c125031cf14dee918b767ccf0b99363cb74ee4a00c68cea975db1b64736f6c63430008110033";
30917
31543
  const isSuperArgs$2 = (xs) => xs.length > 1;
30918
31544
  class ImmutableERC721__factory extends ContractFactory {
30919
31545
  constructor(...args) {
@@ -30924,11 +31550,11 @@ class ImmutableERC721__factory extends ContractFactory {
30924
31550
  super(_abi$2, _bytecode$2, args[0]);
30925
31551
  }
30926
31552
  }
30927
- deploy(owner_, name_, symbol_, baseURI_, contractURI_, royaltyAllowlist_, royaltyReceiver_, feeNumerator_, overrides) {
30928
- return super.deploy(owner_, name_, symbol_, baseURI_, contractURI_, royaltyAllowlist_, royaltyReceiver_, feeNumerator_, overrides || {});
31553
+ deploy(owner_, name_, symbol_, baseURI_, contractURI_, operatorAllowlist_, royaltyReceiver_, feeNumerator_, overrides) {
31554
+ return super.deploy(owner_, name_, symbol_, baseURI_, contractURI_, operatorAllowlist_, royaltyReceiver_, feeNumerator_, overrides || {});
30929
31555
  }
30930
- getDeployTransaction(owner_, name_, symbol_, baseURI_, contractURI_, royaltyAllowlist_, royaltyReceiver_, feeNumerator_, overrides) {
30931
- return super.getDeployTransaction(owner_, name_, symbol_, baseURI_, contractURI_, royaltyAllowlist_, royaltyReceiver_, feeNumerator_, overrides || {});
31556
+ getDeployTransaction(owner_, name_, symbol_, baseURI_, contractURI_, operatorAllowlist_, royaltyReceiver_, feeNumerator_, overrides) {
31557
+ return super.getDeployTransaction(owner_, name_, symbol_, baseURI_, contractURI_, operatorAllowlist_, royaltyReceiver_, feeNumerator_, overrides || {});
30932
31558
  }
30933
31559
  attach(address) {
30934
31560
  return super.attach(address);
@@ -30979,7 +31605,7 @@ const _abi$1 = [
30979
31605
  },
30980
31606
  {
30981
31607
  internalType: "address",
30982
- name: "_royaltyAllowlist",
31608
+ name: "_operatorAllowlist",
30983
31609
  type: "address",
30984
31610
  },
30985
31611
  {
@@ -30996,6 +31622,11 @@ const _abi$1 = [
30996
31622
  stateMutability: "nonpayable",
30997
31623
  type: "constructor",
30998
31624
  },
31625
+ {
31626
+ inputs: [],
31627
+ name: "AllowlistDoesNotImplementIOperatorAllowlist",
31628
+ type: "error",
31629
+ },
30999
31630
  {
31000
31631
  inputs: [
31001
31632
  {
@@ -31088,11 +31719,6 @@ const _abi$1 = [
31088
31719
  name: "IImmutableERC721TokenAlreadyBurned",
31089
31720
  type: "error",
31090
31721
  },
31091
- {
31092
- inputs: [],
31093
- name: "RoyaltyEnforcementDoesNotImplementRequiredInterface",
31094
- type: "error",
31095
- },
31096
31722
  {
31097
31723
  inputs: [
31098
31724
  {
@@ -31165,6 +31791,25 @@ const _abi$1 = [
31165
31791
  name: "ApprovalForAll",
31166
31792
  type: "event",
31167
31793
  },
31794
+ {
31795
+ anonymous: false,
31796
+ inputs: [
31797
+ {
31798
+ indexed: false,
31799
+ internalType: "address",
31800
+ name: "oldRegistry",
31801
+ type: "address",
31802
+ },
31803
+ {
31804
+ indexed: false,
31805
+ internalType: "address",
31806
+ name: "newRegistry",
31807
+ type: "address",
31808
+ },
31809
+ ],
31810
+ name: "OperatorAllowlistRegistryUpdated",
31811
+ type: "event",
31812
+ },
31168
31813
  {
31169
31814
  anonymous: false,
31170
31815
  inputs: [
@@ -31240,25 +31885,6 @@ const _abi$1 = [
31240
31885
  name: "RoleRevoked",
31241
31886
  type: "event",
31242
31887
  },
31243
- {
31244
- anonymous: false,
31245
- inputs: [
31246
- {
31247
- indexed: false,
31248
- internalType: "address",
31249
- name: "oldRegistry",
31250
- type: "address",
31251
- },
31252
- {
31253
- indexed: false,
31254
- internalType: "address",
31255
- name: "newRegistry",
31256
- type: "address",
31257
- },
31258
- ],
31259
- name: "RoyaltyAllowlistRegistryUpdated",
31260
- type: "event",
31261
- },
31262
31888
  {
31263
31889
  anonymous: false,
31264
31890
  inputs: [
@@ -31666,6 +32292,19 @@ const _abi$1 = [
31666
32292
  stateMutability: "view",
31667
32293
  type: "function",
31668
32294
  },
32295
+ {
32296
+ inputs: [],
32297
+ name: "operatorAllowlist",
32298
+ outputs: [
32299
+ {
32300
+ internalType: "contract IOperatorAllowlist",
32301
+ name: "",
32302
+ type: "address",
32303
+ },
32304
+ ],
32305
+ stateMutability: "view",
32306
+ type: "function",
32307
+ },
31669
32308
  {
31670
32309
  inputs: [
31671
32310
  {
@@ -31734,19 +32373,6 @@ const _abi$1 = [
31734
32373
  stateMutability: "nonpayable",
31735
32374
  type: "function",
31736
32375
  },
31737
- {
31738
- inputs: [],
31739
- name: "royaltyAllowlist",
31740
- outputs: [
31741
- {
31742
- internalType: "contract IRoyaltyAllowlist",
31743
- name: "",
31744
- type: "address",
31745
- },
31746
- ],
31747
- stateMutability: "view",
31748
- type: "function",
31749
- },
31750
32376
  {
31751
32377
  inputs: [
31752
32378
  {
@@ -32055,11 +32681,11 @@ const _abi$1 = [
32055
32681
  inputs: [
32056
32682
  {
32057
32683
  internalType: "address",
32058
- name: "_royaltyAllowlist",
32684
+ name: "_operatorAllowlist",
32059
32685
  type: "address",
32060
32686
  },
32061
32687
  ],
32062
- name: "setRoyaltyAllowlistRegistry",
32688
+ name: "setOperatorAllowlistRegistry",
32063
32689
  outputs: [],
32064
32690
  stateMutability: "nonpayable",
32065
32691
  type: "function",
@@ -32152,7 +32778,7 @@ const _abi$1 = [
32152
32778
  type: "function",
32153
32779
  },
32154
32780
  ];
32155
- const _bytecode$1 = "0x60806040523480156200001157600080fd5b5060405162003c7938038062003c79833981016040819052620000349162000506565b8787878787878787868660036200004c838262000699565b5060046200005b828262000699565b506200006d91506000905089620000b8565b620000798282620000fb565b620000848362000200565b600c62000092868262000699565b50600b620000a1858262000699565b505050505050505050505050505050505062000790565b620000cf8282620002f960201b6200135e1760201c565b6000828152600160209081526040909120620000f6918390620013e26200039a821b17901c565b505050565b6127106001600160601b03821611156200016f5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620001c75760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000166565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200024c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000272919062000765565b6200029057604051631353be1160e11b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527ff499b54d61d3fcb40299e3299af3ffe9ef1ee6e47194240f3cc5b6e09f7f6796910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000396576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620003553390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620003b1836001600160a01b038416620003ba565b90505b92915050565b60008181526001830160205260408120546200040357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003b4565b506000620003b4565b80516001600160a01b03811681146200042457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200045157600080fd5b81516001600160401b03808211156200046e576200046e62000429565b604051601f8301601f19908116603f0116810190828211818310171562000499576200049962000429565b81604052838152602092508683858801011115620004b657600080fd5b600091505b83821015620004da5785820183015181830184015290820190620004bb565b600093810190920192909252949350505050565b80516001600160601b03811681146200042457600080fd5b600080600080600080600080610100898b0312156200052457600080fd5b6200052f896200040c565b60208a01519098506001600160401b03808211156200054d57600080fd5b6200055b8c838d016200043f565b985060408b01519150808211156200057257600080fd5b620005808c838d016200043f565b975060608b01519150808211156200059757600080fd5b620005a58c838d016200043f565b965060808b0151915080821115620005bc57600080fd5b50620005cb8b828c016200043f565b945050620005dc60a08a016200040c565b9250620005ec60c08a016200040c565b9150620005fc60e08a01620004ee565b90509295985092959890939650565b600181811c908216806200062057607f821691505b6020821081036200064157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620000f657600081815260208120601f850160051c81016020861015620006705750805b601f850160051c820191505b8181101562000691578281556001016200067c565b505050505050565b81516001600160401b03811115620006b557620006b562000429565b620006cd81620006c684546200060b565b8462000647565b602080601f831160018114620007055760008415620006ec5750858301515b600019600386901b1c1916600185901b17855562000691565b600085815260208120601f198616915b82811015620007365788860151825594840194600190910190840162000715565b5085821015620007555787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200077857600080fd5b815180151581146200078957600080fd5b9392505050565b6134d980620007a06000396000f3fe608060405234801561001057600080fd5b50600436106102945760003560e01c806369e2f0fb11610167578063a1448194116100ce578063ca15c87311610087578063ca15c873146105da578063d5391393146105ed578063d547741f14610602578063e4623c1b14610615578063e8a3d48514610628578063e985e9c51461063057600080fd5b8063a144819414610573578063a217fddf14610586578063a22cb4651461058e578063a7012816146105a1578063b88d4fde146105b4578063c87b56dd146105c757600080fd5b80639010d07c116101205780639010d07c1461050c57806391d148541461051f578063938e3d7b1461053257806395d89b41146105455780639e2641a31461054d5780639f15d7001461056057600080fd5b806369e2f0fb146104a55780636b3a0632146104b85780636c0360eb146104cb57806370a08231146104d357806374f16a81146104e6578063885e7a08146104f957600080fd5b806331ae450b1161020b57806342842e0e116101c457806342842e0e1461043357806342966c6814610446578063439aed341461045957806355f804b31461046c5780636352211e1461047f5780636588962a1461049257600080fd5b806331ae450b146103c957806336568abe146103de5780633dd1eb61146103f15780633e769acd146104045780633eaaf86b1461041757806340c10f191461042057600080fd5b806318160ddd1161025d57806318160ddd14610329578063234af0461461033b57806323b872dd1461034e578063248a9ca3146103615780632a55205a146103845780632f2ff15d146103b657600080fd5b80628ad9461461029957806301ffc9a7146102ae57806306fdde03146102d6578063081812fc146102eb578063095ea7b314610316575b600080fd5b6102ac6102a7366004612907565b61066c565b005b6102c16102bc366004612957565b610742565b60405190151581526020015b60405180910390f35b6102de610753565b6040516102cd91906129c4565b6102fe6102f93660046129d7565b6107e5565b6040516001600160a01b0390911681526020016102cd565b6102ac610324366004612a0c565b61080c565b600d545b6040519081526020016102cd565b6102ac610349366004612bd8565b610967565b6102ac61035c366004612c20565b6109bf565b61032d61036f3660046129d7565b60009081526020819052604090206001015490565b610397610392366004612c5c565b6109f1565b604080516001600160a01b0390931683526020830191909152016102cd565b6102ac6103c4366004612c7e565b610a9f565b6103d1610ac4565b6040516102cd9190612caa565b6102ac6103ec366004612c7e565b610b72565b6102ac6103ff366004612cf7565b610bec565b6102ac610412366004612bd8565b610c0f565b61032d600d5481565b6102ac61042e366004612a0c565b610c9b565b6102ac610441366004612c20565b610cd7565b6102ac6104543660046129d7565b610cf2565b6102ac610467366004612d29565b610d30565b6102ac61047a366004612dbc565b610d59565b6102fe61048d3660046129d7565b610d70565b6102ac6104a0366004612cf7565b610dd0565b6102ac6104b3366004612cf7565b610de4565b6002546102fe906001600160a01b031681565b6102de610e07565b61032d6104e1366004612cf7565b610e95565b6102ac6104f4366004612bd8565b610f1b565b6102ac610507366004612e04565b610f27565b6102fe61051a366004612c5c565b610f3c565b6102c161052d366004612c7e565b610f5b565b6102ac610540366004612dbc565b610f84565b6102de610f9b565b6102ac61055b366004612bd8565b610faa565b6102ac61056e366004612a0c565b611002565b6102ac610581366004612a0c565b61105c565b61032d600081565b6102ac61059c366004612e3c565b61108e565b6102ac6105af366004612eb7565b6111df565b6102ac6105c2366004612f1b565b61123f565b6102de6105d53660046129d7565b611271565b61032d6105e83660046129d7565b6112d7565b61032d6a4d494e5445525f524f4c4560a81b81565b6102ac610610366004612c7e565b6112ee565b6102ac610623366004612f96565b611313565b6102de611351565b6102c161063e366004612fd7565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6106796020820182613001565b90506106886040830183613001565b9050146106a85760405163359a1bc360e01b815260040160405180910390fd5b60005b6106b86040830183613001565b905081101561073e5761072c6106d16020840184612cf7565b6106de6020850185613001565b848181106106ee576106ee61304a565b90506020020160208101906107039190612cf7565b6107106040860186613001565b858181106107205761072061304a565b90506020020135610cd7565b8061073681613076565b9150506106ab565b5050565b600061074d826113f7565b92915050565b6060600380546107629061308f565b80601f016020809104026020016040519081016040528092919081815260200182805461078e9061308f565b80156107db5780601f106107b0576101008083540402835291602001916107db565b820191906000526020600020905b8154815290600101906020018083116107be57829003601f168201915b5050505050905090565b60006107f082611402565b506000908152600760205260409020546001600160a01b031690565b81333b1580159061088657506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa158015610860573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088491906130c9565b155b156108ab5760405163f6fa4cbd60e01b81523360048201526024015b60405180910390fd5b6001600160a01b0381163b1580159061092f57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d91906130c9565b155b15610958576040516341b8d58160e11b81526001600160a01b03821660048201526024016108a2565b6109628383611461565b505050565b6a4d494e5445525f524f4c4560a81b61097f81611571565b60005b8251811015610962576109ad8382815181106109a0576109a061304a565b602002602001015161157b565b806109b781613076565b915050610982565b6109ca335b8261160a565b6109e65760405162461bcd60e51b81526004016108a2906130e6565b610962838383611689565b6000828152600a602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a665750604080518082019091526009546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a85906001600160601b031687613133565b610a8f919061314a565b91519350909150505b9250929050565b600082815260208190526040902060010154610aba81611571565b6109628383611890565b60606000610ad1816112d7565b90506000816001600160401b03811115610aed57610aed612a36565b604051908082528060200260200182016040528015610b16578160200160208202803683370190505b50905060005b82811015610b6b57610b2f600082610f3c565b828281518110610b4157610b4161304a565b6001600160a01b039092166020928302919091019091015280610b6381613076565b915050610b1c565b5092915050565b6001600160a01b0381163314610be25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108a2565b61073e82826118b2565b6000610bf781611571565b61073e6a4d494e5445525f524f4c4560a81b83610a9f565b60005b815181101561073e576000828281518110610c2f57610c2f61304a565b6020026020010151905060005b816020015151811015610c8657610c74826000015183602001518381518110610c6757610c6761304a565b6020026020010151611002565b80610c7e81613076565b915050610c3c565b50508080610c9390613076565b915050610c12565b6a4d494e5445525f524f4c4560a81b610cb381611571565b610cbd83836118d4565b600d8054906000610ccd83613076565b9190505550505050565b6109628383836040518060200160405280600081525061123f565b610cfb8161191b565b600881901c6000908152600e602052604081208054600160ff85161b179055600d805491610d288361316c565b919050555050565b6a4d494e5445525f524f4c4560a81b610d4881611571565b610d53848484611949565b50505050565b6000610d6481611571565b600c61096283826131c9565b6000818152600560205260408120546001600160a01b03168061074d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a2565b6000610ddb81611571565b61073e82611a14565b6000610def81611571565b61073e6a4d494e5445525f524f4c4560a81b836112ee565b600c8054610e149061308f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e409061308f565b8015610e8d5780601f10610e6257610100808354040283529160200191610e8d565b820191906000526020600020905b815481529060010190602001808311610e7057829003601f168201915b505050505081565b60006001600160a01b038216610eff5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108a2565b506001600160a01b031660009081526006602052604090205490565b610f2481610c0f565b50565b6000610f3281611571565b6109628383611b09565b6000828152600160205260408120610f549083611bc3565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610f8f81611571565b600b61096283826131c9565b6060600480546107629061308f565b6a4d494e5445525f524f4c4560a81b610fc281611571565b60005b825181101561096257610ff0838281518110610fe357610fe361304a565b6020026020010151611bcf565b80610ffa81613076565b915050610fc5565b600061100d82610d70565b9050826001600160a01b0316816001600160a01b03161461105357604051634fefd56160e01b8152600481018390526001600160a01b03821660248201526044016108a2565b61096282610cf2565b6a4d494e5445525f524f4c4560a81b61107481611571565b610cbd838360405180602001604052806000815250611c45565b81333b1580159061110857506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110691906130c9565b155b156111285760405163f6fa4cbd60e01b81523360048201526024016108a2565b6001600160a01b0381163b158015906111ac57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015611186573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111aa91906130c9565b155b156111d5576040516341b8d58160e11b81526001600160a01b03821660048201526024016108a2565b6109628383611c78565b6a4d494e5445525f524f4c4560a81b6111f781611571565b60005b84811015611237576112258686838181106112175761121761304a565b905060200201358585611949565b8061122f81613076565b9150506111fa565b505050505050565b611249338361160a565b6112655760405162461bcd60e51b81526004016108a2906130e6565b610d5384848484611c83565b606061127c82611402565b6000611286611cb6565b905060008151116112a65760405180602001604052806000815250610f54565b806112b084611cc5565b6040516020016112c1929190613288565b6040516020818303038152906040529392505050565b600081815260016020526040812061074d90611d57565b60008281526020819052604090206001015461130981611571565b61096283836118b2565b60005b818110156109625761133f8383838181106113335761133361304a565b90506020020135610cf2565b8061134981613076565b915050611316565b600b8054610e149061308f565b6113688282610f5b565b61073e576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561139e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f54836001600160a01b038416611d61565b600061074d82611db0565b6000818152600560205260409020546001600160a01b0316610f245760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a2565b600061146c82610d70565b9050806001600160a01b0316836001600160a01b0316036114d95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108a2565b336001600160a01b03821614806114f557506114f5813361063e565b6115675760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108a2565b6109628383611dd5565b610f248133611e43565b80516001600160a01b03166115a3576040516331c3e52960e11b815260040160405180910390fd5b60005b8160200151518110156115f0576115de8260000151836020015183815181106115d1576115d161304a565b6020026020010151611e9c565b806115e881613076565b9150506115a6565b50806020015151600d5461160491906132b7565b600d5550565b60008061161683610d70565b9050806001600160a01b0316846001600160a01b0316148061165d57506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b806116815750836001600160a01b0316611676846107e5565b6001600160a01b0316145b949350505050565b828233321480159061170457506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa1580156116de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061170291906130c9565b155b156117245760405163937db65f60e01b81523360048201526024016108a2565b6001600160a01b0382163b158015906117a857506002546040516305a3b80960e01b81526001600160a01b038481166004830152909116906305a3b80990602401602060405180830381865afa158015611782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a691906130c9565b155b156117d15760405163f934453160e01b81526001600160a01b03831660048201526024016108a2565b6001600160a01b0381163b1580159061185557506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa15801561182f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185391906130c9565b155b1561187e57604051632a67242160e11b81526001600160a01b03821660048201526024016108a2565b611889858585611ee3565b5050505050565b61189a828261135e565b600082815260016020526040902061096290826113e2565b6118bc8282612047565b600082815260016020526040902061096290826120ac565b600881901c6000908152600e6020526040902054600160ff83161b1615611911576040516305dcda1160e51b8152600481018290526024016108a2565b61073e82826120c1565b611924336109c4565b6119405760405162461bcd60e51b81526004016108a2906130e6565b610f248161224c565b6127106001600160601b03821611156119745760405162461bcd60e51b81526004016108a2906132ca565b6001600160a01b0382166119ca5760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d6574657273000000000060448201526064016108a2565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600a90529190942093519051909116600160a01b029116179055565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611a5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8391906130c9565b611aa057604051631353be1160e11b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527ff499b54d61d3fcb40299e3299af3ffe9ef1ee6e47194240f3cc5b6e09f7f6796910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6127106001600160601b0382161115611b345760405162461bcd60e51b81526004016108a2906132ca565b6001600160a01b038216611b8a5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016108a2565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b6000610f5483836122e1565b80516001600160a01b031615611bf8576040516331c3e52960e11b815260040160405180910390fd5b60005b8160200151518110156115f057611c33826000015183602001518381518110611c2657611c2661304a565b60200260200101516118d4565b80611c3d81613076565b915050611bfb565b611c4f83836118d4565b611c5c600084848461230b565b6109625760405162461bcd60e51b81526004016108a290613314565b61073e33838361240c565b611c8e848484611689565b611c9a8484848461230b565b610d535760405162461bcd60e51b81526004016108a290613314565b6060600c80546107629061308f565b60606000611cd2836124da565b60010190506000816001600160401b03811115611cf157611cf1612a36565b6040519080825280601f01601f191660200182016040528015611d1b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611d2557509392505050565b600061074d825490565b6000818152600183016020526040812054611da85750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561074d565b50600061074d565b60006001600160e01b0319821663152a902d60e11b148061074d575061074d826125b2565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e0a82610d70565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e4d8282610f5b565b61073e57611e5a816125f2565b611e65836020612604565b604051602001611e76929190613366565b60408051601f198184030181529082905262461bcd60e51b82526108a2916004016129c4565b600881901c6000908152600e6020526040902054600160ff83161b1615611ed9576040516305dcda1160e51b8152600481018290526024016108a2565b61073e828261279f565b826001600160a01b0316611ef682610d70565b6001600160a01b031614611f1c5760405162461bcd60e51b81526004016108a2906133db565b6001600160a01b038216611f7e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108a2565b826001600160a01b0316611f9182610d70565b6001600160a01b031614611fb75760405162461bcd60e51b81526004016108a2906133db565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6120518282610f5b565b1561073e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f54836001600160a01b0384166127b9565b6001600160a01b0382166121175760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108a2565b6000818152600560205260409020546001600160a01b03161561217c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a2565b6000818152600560205260409020546001600160a01b0316156121e15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a2565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061225782610d70565b905061226282610d70565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008260000182815481106122f8576122f861304a565b9060005260206000200154905092915050565b60006001600160a01b0384163b1561240157604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061234f903390899088908890600401613420565b6020604051808303816000875af192505050801561238a575060408051601f3d908101601f191682019092526123879181019061345d565b60015b6123e7573d8080156123b8576040519150601f19603f3d011682016040523d82523d6000602084013e6123bd565b606091505b5080516000036123df5760405162461bcd60e51b81526004016108a290613314565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611681565b506001949350505050565b816001600160a01b0316836001600160a01b03160361246d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108a2565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106125195772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612545576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061256357662386f26fc10000830492506010015b6305f5e100831061257b576305f5e100830492506008015b612710831061258f57612710830492506004015b606483106125a1576064830492506002015b600a831061074d5760010192915050565b60006001600160e01b031982166380ac58cd60e01b14806125e357506001600160e01b03198216635b5e139f60e01b145b8061074d575061074d826128ac565b606061074d6001600160a01b03831660145b60606000612613836002613133565b61261e9060026132b7565b6001600160401b0381111561263557612635612a36565b6040519080825280601f01601f19166020018201604052801561265f576020820181803683370190505b509050600360fc1b8160008151811061267a5761267a61304a565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106126a9576126a961304a565b60200101906001600160f81b031916908160001a90535060006126cd846002613133565b6126d89060016132b7565b90505b6001811115612750576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061270c5761270c61304a565b1a60f81b8282815181106127225761272261304a565b60200101906001600160f81b031916908160001a90535060049490941c936127498161316c565b90506126db565b508315610f545760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108a2565b61073e828260405180602001604052806000815250611c45565b600081815260018301602052604081205480156128a25760006127dd60018361347a565b85549091506000906127f19060019061347a565b90508181146128565760008660000182815481106128115761281161304a565b90600052602060002001549050808760000184815481106128345761283461304a565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806128675761286761348d565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061074d565b600091505061074d565b600061074d8260006001600160e01b03198216635a05180f60e01b148061074d575061074d8260006001600160e01b03198216637965db0b60e01b148061074d57506301ffc9a760e01b6001600160e01b031983161461074d565b60006020828403121561291957600080fd5b81356001600160401b0381111561292f57600080fd5b820160608185031215610f5457600080fd5b6001600160e01b031981168114610f2457600080fd5b60006020828403121561296957600080fd5b8135610f5481612941565b60005b8381101561298f578181015183820152602001612977565b50506000910152565b600081518084526129b0816020860160208601612974565b601f01601f19169290920160200192915050565b602081526000610f546020830184612998565b6000602082840312156129e957600080fd5b5035919050565b80356001600160a01b0381168114612a0757600080fd5b919050565b60008060408385031215612a1f57600080fd5b612a28836129f0565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612a6e57612a6e612a36565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612a9c57612a9c612a36565b604052919050565b60006001600160401b03821115612abd57612abd612a36565b5060051b60200190565b6000612ada612ad584612aa4565b612a74565b8381529050602080820190600585811b850187811115612af957600080fd5b855b81811015612bcc5780356001600160401b0380821115612b1b5760008081fd5b908801906040828c031215612b305760008081fd5b612b38612a4c565b612b41836129f0565b81528683013582811115612b555760008081fd5b8084019350508b601f840112612b6d57600091508182fd5b82359150612b7d612ad583612aa4565b82815291861b8301870191878101908d841115612b9a5760008081fd5b938801935b83851015612bb857843582529388019390880190612b9f565b828901525087525050938301938301612afb565b50505050509392505050565b600060208284031215612bea57600080fd5b81356001600160401b03811115612c0057600080fd5b8201601f81018413612c1157600080fd5b61168184823560208401612ac7565b600080600060608486031215612c3557600080fd5b612c3e846129f0565b9250612c4c602085016129f0565b9150604084013590509250925092565b60008060408385031215612c6f57600080fd5b50508035926020909101359150565b60008060408385031215612c9157600080fd5b82359150612ca1602084016129f0565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612ceb5783516001600160a01b031683529284019291840191600101612cc6565b50909695505050505050565b600060208284031215612d0957600080fd5b610f54826129f0565b80356001600160601b0381168114612a0757600080fd5b600080600060608486031215612d3e57600080fd5b83359250612d4e602085016129f0565b9150612d5c60408501612d12565b90509250925092565b60006001600160401b03831115612d7e57612d7e612a36565b612d91601f8401601f1916602001612a74565b9050828152838383011115612da557600080fd5b828260208301376000602084830101529392505050565b600060208284031215612dce57600080fd5b81356001600160401b03811115612de457600080fd5b8201601f81018413612df557600080fd5b61168184823560208401612d65565b60008060408385031215612e1757600080fd5b612e20836129f0565b9150612ca160208401612d12565b8015158114610f2457600080fd5b60008060408385031215612e4f57600080fd5b612e58836129f0565b91506020830135612e6881612e2e565b809150509250929050565b60008083601f840112612e8557600080fd5b5081356001600160401b03811115612e9c57600080fd5b6020830191508360208260051b8501011115610a9857600080fd5b60008060008060608587031215612ecd57600080fd5b84356001600160401b03811115612ee357600080fd5b612eef87828801612e73565b9095509350612f029050602086016129f0565b9150612f1060408601612d12565b905092959194509250565b60008060008060808587031215612f3157600080fd5b612f3a856129f0565b9350612f48602086016129f0565b92506040850135915060608501356001600160401b03811115612f6a57600080fd5b8501601f81018713612f7b57600080fd5b612f8a87823560208401612d65565b91505092959194509250565b60008060208385031215612fa957600080fd5b82356001600160401b03811115612fbf57600080fd5b612fcb85828601612e73565b90969095509350505050565b60008060408385031215612fea57600080fd5b612ff3836129f0565b9150612ca1602084016129f0565b6000808335601e1984360301811261301857600080fd5b8301803591506001600160401b0382111561303257600080fd5b6020019150600581901b3603821315610a9857600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161308857613088613060565b5060010190565b600181811c908216806130a357607f821691505b6020821081036130c357634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156130db57600080fd5b8151610f5481612e2e565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b808202811582820484141761074d5761074d613060565b60008261316757634e487b7160e01b600052601260045260246000fd5b500490565b60008161317b5761317b613060565b506000190190565b601f82111561096257600081815260208120601f850160051c810160208610156131aa5750805b601f850160051c820191505b81811015611237578281556001016131b6565b81516001600160401b038111156131e2576131e2612a36565b6131f6816131f0845461308f565b84613183565b602080601f83116001811461322b57600084156132135750858301515b600019600386901b1c1916600185901b178555611237565b600085815260208120601f198616915b8281101561325a5788860151825594840194600190910190840161323b565b50858210156132785787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000835161329a818460208801612974565b8351908301906132ae818360208801612974565b01949350505050565b8082018082111561074d5761074d613060565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161339e816017850160208801612974565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516133cf816028840160208801612974565b01602801949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061345390830184612998565b9695505050505050565b60006020828403121561346f57600080fd5b8151610f5481612941565b8181038181111561074d5761074d613060565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220b011c76f17319aab20d598a27be80ad3891d73e102d2a5a5fca6210f067ce45564736f6c63430008110033";
32781
+ const _bytecode$1 = "0x60806040523480156200001157600080fd5b5060405162003c7338038062003c73833981016040819052620000349162000506565b8787878787878787868660036200004c838262000699565b5060046200005b828262000699565b506200006d91506000905089620000b8565b620000798282620000fb565b620000848362000200565b600c62000092868262000699565b50600b620000a1858262000699565b505050505050505050505050505050505062000790565b620000cf8282620002f960201b6200135e1760201c565b6000828152600160209081526040909120620000f6918390620013e26200039a821b17901c565b505050565b6127106001600160601b03821611156200016f5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620001c75760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000166565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa1580156200024c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000272919062000765565b620002905760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000396576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620003553390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000620003b1836001600160a01b038416620003ba565b90505b92915050565b60008181526001830160205260408120546200040357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620003b4565b506000620003b4565b80516001600160a01b03811681146200042457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200045157600080fd5b81516001600160401b03808211156200046e576200046e62000429565b604051601f8301601f19908116603f0116810190828211818310171562000499576200049962000429565b81604052838152602092508683858801011115620004b657600080fd5b600091505b83821015620004da5785820183015181830184015290820190620004bb565b600093810190920192909252949350505050565b80516001600160601b03811681146200042457600080fd5b600080600080600080600080610100898b0312156200052457600080fd5b6200052f896200040c565b60208a01519098506001600160401b03808211156200054d57600080fd5b6200055b8c838d016200043f565b985060408b01519150808211156200057257600080fd5b620005808c838d016200043f565b975060608b01519150808211156200059757600080fd5b620005a58c838d016200043f565b965060808b0151915080821115620005bc57600080fd5b50620005cb8b828c016200043f565b945050620005dc60a08a016200040c565b9250620005ec60c08a016200040c565b9150620005fc60e08a01620004ee565b90509295985092959890939650565b600181811c908216806200062057607f821691505b6020821081036200064157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620000f657600081815260208120601f850160051c81016020861015620006705750805b601f850160051c820191505b8181101562000691578281556001016200067c565b505050505050565b81516001600160401b03811115620006b557620006b562000429565b620006cd81620006c684546200060b565b8462000647565b602080601f831160018114620007055760008415620006ec5750858301515b600019600386901b1c1916600185901b17855562000691565b600085815260208120601f198616915b82811015620007365788860151825594840194600190910190840162000715565b5085821015620007555787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200077857600080fd5b815180151581146200078957600080fd5b9392505050565b6134d380620007a06000396000f3fe608060405234801561001057600080fd5b50600436106102945760003560e01c806369e2f0fb11610167578063a217fddf116100ce578063d539139311610087578063d5391393146105da578063d547741f146105ef578063e4623c1b14610602578063e4e18f6d14610615578063e8a3d48514610628578063e985e9c51461063057600080fd5b8063a217fddf14610573578063a22cb4651461057b578063a70128161461058e578063b88d4fde146105a1578063c87b56dd146105b4578063ca15c873146105c757600080fd5b806391d148541161012057806391d148541461050c578063938e3d7b1461051f57806395d89b41146105325780639e2641a31461053a5780639f15d7001461054d578063a14481941461056057600080fd5b806369e2f0fb146104a55780636c0360eb146104b857806370a08231146104c057806374f16a81146104d3578063885e7a08146104e65780639010d07c146104f957600080fd5b80632f2ff15d1161020b57806340c10f19116101c457806340c10f191461043357806342842e0e1461044657806342966c6814610459578063439aed341461046c57806355f804b31461047f5780636352211e1461049257600080fd5b80632f2ff15d146103c957806331ae450b146103dc57806336568abe146103f15780633dd1eb61146104045780633e769acd146104175780633eaaf86b1461042a57600080fd5b806318160ddd1161025d57806318160ddd14610329578063234af0461461033b57806323b872dd1461034e578063248a9ca31461036157806329326f29146103845780632a55205a1461039757600080fd5b80628ad9461461029957806301ffc9a7146102ae57806306fdde03146102d6578063081812fc146102eb578063095ea7b314610316575b600080fd5b6102ac6102a7366004612901565b61066c565b005b6102c16102bc366004612951565b610742565b60405190151581526020015b60405180910390f35b6102de610753565b6040516102cd91906129be565b6102fe6102f93660046129d1565b6107e5565b6040516001600160a01b0390911681526020016102cd565b6102ac610324366004612a06565b61080c565b600d545b6040519081526020016102cd565b6102ac610349366004612bd2565b610967565b6102ac61035c366004612c1a565b6109bf565b61032d61036f3660046129d1565b60009081526020819052604090206001015490565b6002546102fe906001600160a01b031681565b6103aa6103a5366004612c56565b6109f1565b604080516001600160a01b0390931683526020830191909152016102cd565b6102ac6103d7366004612c78565b610a9f565b6103e4610ac4565b6040516102cd9190612ca4565b6102ac6103ff366004612c78565b610b72565b6102ac610412366004612cf1565b610bec565b6102ac610425366004612bd2565b610c0f565b61032d600d5481565b6102ac610441366004612a06565b610c9b565b6102ac610454366004612c1a565b610cd7565b6102ac6104673660046129d1565b610cf2565b6102ac61047a366004612d23565b610d30565b6102ac61048d366004612db6565b610d59565b6102fe6104a03660046129d1565b610d70565b6102ac6104b3366004612cf1565b610dd0565b6102de610df3565b61032d6104ce366004612cf1565b610e81565b6102ac6104e1366004612bd2565b610f07565b6102ac6104f4366004612dfe565b610f13565b6102fe610507366004612c56565b610f28565b6102c161051a366004612c78565b610f47565b6102ac61052d366004612db6565b610f70565b6102de610f87565b6102ac610548366004612bd2565b610f96565b6102ac61055b366004612a06565b610fee565b6102ac61056e366004612a06565b611048565b61032d600081565b6102ac610589366004612e36565b61107a565b6102ac61059c366004612eb1565b6111cb565b6102ac6105af366004612f15565b61122b565b6102de6105c23660046129d1565b61125d565b61032d6105d53660046129d1565b6112c3565b61032d6a4d494e5445525f524f4c4560a81b81565b6102ac6105fd366004612c78565b6112da565b6102ac610610366004612f90565b6112ff565b6102ac610623366004612cf1565b61133d565b6102de611351565b6102c161063e366004612fd1565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b6106796020820182612ffb565b90506106886040830183612ffb565b9050146106a85760405163359a1bc360e01b815260040160405180910390fd5b60005b6106b86040830183612ffb565b905081101561073e5761072c6106d16020840184612cf1565b6106de6020850185612ffb565b848181106106ee576106ee613044565b90506020020160208101906107039190612cf1565b6107106040860186612ffb565b8581811061072057610720613044565b90506020020135610cd7565b8061073681613070565b9150506106ab565b5050565b600061074d826113f7565b92915050565b60606003805461076290613089565b80601f016020809104026020016040519081016040528092919081815260200182805461078e90613089565b80156107db5780601f106107b0576101008083540402835291602001916107db565b820191906000526020600020905b8154815290600101906020018083116107be57829003601f168201915b5050505050905090565b60006107f08261141c565b506000908152600760205260409020546001600160a01b031690565b81333b1580159061088657506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa158015610860573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088491906130c3565b155b156108ab5760405163f6fa4cbd60e01b81523360048201526024015b60405180910390fd5b6001600160a01b0381163b1580159061092f57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015610909573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092d91906130c3565b155b15610958576040516341b8d58160e11b81526001600160a01b03821660048201526024016108a2565b610962838361147b565b505050565b6a4d494e5445525f524f4c4560a81b61097f8161158b565b60005b8251811015610962576109ad8382815181106109a0576109a0613044565b6020026020010151611595565b806109b781613070565b915050610982565b6109ca335b82611624565b6109e65760405162461bcd60e51b81526004016108a2906130e0565b6109628383836116a3565b6000828152600a602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610a665750604080518082019091526009546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610a85906001600160601b03168761312d565b610a8f9190613144565b91519350909150505b9250929050565b600082815260208190526040902060010154610aba8161158b565b61096283836118aa565b60606000610ad1816112c3565b90506000816001600160401b03811115610aed57610aed612a30565b604051908082528060200260200182016040528015610b16578160200160208202803683370190505b50905060005b82811015610b6b57610b2f600082610f28565b828281518110610b4157610b41613044565b6001600160a01b039092166020928302919091019091015280610b6381613070565b915050610b1c565b5092915050565b6001600160a01b0381163314610be25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108a2565b61073e82826118cc565b6000610bf78161158b565b61073e6a4d494e5445525f524f4c4560a81b83610a9f565b60005b815181101561073e576000828281518110610c2f57610c2f613044565b6020026020010151905060005b816020015151811015610c8657610c74826000015183602001518381518110610c6757610c67613044565b6020026020010151610fee565b80610c7e81613070565b915050610c3c565b50508080610c9390613070565b915050610c12565b6a4d494e5445525f524f4c4560a81b610cb38161158b565b610cbd83836118ee565b600d8054906000610ccd83613070565b9190505550505050565b6109628383836040518060200160405280600081525061122b565b610cfb81611935565b600881901c6000908152600e602052604081208054600160ff85161b179055600d805491610d2883613166565b919050555050565b6a4d494e5445525f524f4c4560a81b610d488161158b565b610d53848484611963565b50505050565b6000610d648161158b565b600c61096283826131c3565b6000818152600560205260408120546001600160a01b03168061074d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a2565b6000610ddb8161158b565b61073e6a4d494e5445525f524f4c4560a81b836112da565b600c8054610e0090613089565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2c90613089565b8015610e795780601f10610e4e57610100808354040283529160200191610e79565b820191906000526020600020905b815481529060010190602001808311610e5c57829003601f168201915b505050505081565b60006001600160a01b038216610eeb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016108a2565b506001600160a01b031660009081526006602052604090205490565b610f1081610c0f565b50565b6000610f1e8161158b565b6109628383611a2e565b6000828152600160205260408120610f409083611ae8565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610f7b8161158b565b600b61096283826131c3565b60606004805461076290613089565b6a4d494e5445525f524f4c4560a81b610fae8161158b565b60005b825181101561096257610fdc838281518110610fcf57610fcf613044565b6020026020010151611af4565b80610fe681613070565b915050610fb1565b6000610ff982610d70565b9050826001600160a01b0316816001600160a01b03161461103f57604051634fefd56160e01b8152600481018390526001600160a01b03821660248201526044016108a2565b61096282610cf2565b6a4d494e5445525f524f4c4560a81b6110608161158b565b610cbd838360405180602001604052806000815250611b6a565b81333b158015906110f457506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa1580156110ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f291906130c3565b155b156111145760405163f6fa4cbd60e01b81523360048201526024016108a2565b6001600160a01b0381163b1580159061119857506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015611172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119691906130c3565b155b156111c1576040516341b8d58160e11b81526001600160a01b03821660048201526024016108a2565b6109628383611b9d565b6a4d494e5445525f524f4c4560a81b6111e38161158b565b60005b848110156112235761121186868381811061120357611203613044565b905060200201358585611963565b8061121b81613070565b9150506111e6565b505050505050565b6112353383611624565b6112515760405162461bcd60e51b81526004016108a2906130e0565b610d5384848484611ba8565b60606112688261141c565b6000611272611bdb565b905060008151116112925760405180602001604052806000815250610f40565b8061129c84611bea565b6040516020016112ad929190613282565b6040516020818303038152906040529392505050565b600081815260016020526040812061074d90611c7c565b6000828152602081905260409020600101546112f58161158b565b61096283836118cc565b60005b818110156109625761132b83838381811061131f5761131f613044565b90506020020135610cf2565b8061133581613070565b915050611302565b60006113488161158b565b61073e82611c86565b600b8054610e0090613089565b6113688282610f47565b61073e576000828152602081815260408083206001600160a01b03851684529091529020805460ff1916600117905561139e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610f40836001600160a01b038416611d7b565b60006001600160e01b0319821663152a902d60e11b148061074d575061074d82611dca565b6000818152600560205260409020546001600160a01b0316610f105760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016108a2565b600061148682610d70565b9050806001600160a01b0316836001600160a01b0316036114f35760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016108a2565b336001600160a01b038216148061150f575061150f813361063e565b6115815760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c00000060648201526084016108a2565b6109628383611e0a565b610f108133611e78565b80516001600160a01b03166115bd576040516331c3e52960e11b815260040160405180910390fd5b60005b81602001515181101561160a576115f88260000151836020015183815181106115eb576115eb613044565b6020026020010151611ed1565b8061160281613070565b9150506115c0565b50806020015151600d5461161e91906132b1565b600d5550565b60008061163083610d70565b9050806001600160a01b0316846001600160a01b0316148061167757506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b8061169b5750836001600160a01b0316611690846107e5565b6001600160a01b0316145b949350505050565b828233321480159061171e57506002546040516305a3b80960e01b81523360048201526001600160a01b03909116906305a3b80990602401602060405180830381865afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c91906130c3565b155b1561173e5760405163937db65f60e01b81523360048201526024016108a2565b6001600160a01b0382163b158015906117c257506002546040516305a3b80960e01b81526001600160a01b038481166004830152909116906305a3b80990602401602060405180830381865afa15801561179c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c091906130c3565b155b156117eb5760405163f934453160e01b81526001600160a01b03831660048201526024016108a2565b6001600160a01b0381163b1580159061186f57506002546040516305a3b80960e01b81526001600160a01b038381166004830152909116906305a3b80990602401602060405180830381865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d91906130c3565b155b1561189857604051632a67242160e11b81526001600160a01b03821660048201526024016108a2565b6118a3858585611f18565b5050505050565b6118b4828261135e565b600082815260016020526040902061096290826113e2565b6118d6828261207c565b600082815260016020526040902061096290826120e1565b600881901c6000908152600e6020526040902054600160ff83161b161561192b576040516305dcda1160e51b8152600481018290526024016108a2565b61073e82826120f6565b61193e336109c4565b61195a5760405162461bcd60e51b81526004016108a2906130e0565b610f1081612281565b6127106001600160601b038216111561198e5760405162461bcd60e51b81526004016108a2906132c4565b6001600160a01b0382166119e45760405162461bcd60e51b815260206004820152601b60248201527f455243323938313a20496e76616c696420706172616d6574657273000000000060448201526064016108a2565b6040805180820182526001600160a01b0393841681526001600160601b0392831660208083019182526000968752600a90529190942093519051909116600160a01b029116179055565b6127106001600160601b0382161115611a595760405162461bcd60e51b81526004016108a2906132c4565b6001600160a01b038216611aaf5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016108a2565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600955565b6000610f408383612316565b80516001600160a01b031615611b1d576040516331c3e52960e11b815260040160405180910390fd5b60005b81602001515181101561160a57611b58826000015183602001518381518110611b4b57611b4b613044565b60200260200101516118ee565b80611b6281613070565b915050611b20565b611b7483836118ee565b611b816000848484612340565b6109625760405162461bcd60e51b81526004016108a29061330e565b61073e338383612441565b611bb38484846116a3565b611bbf84848484612340565b610d535760405162461bcd60e51b81526004016108a29061330e565b6060600c805461076290613089565b60606000611bf78361250f565b60010190506000816001600160401b03811115611c1657611c16612a30565b6040519080825280601f01601f191660200182016040528015611c40576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611c4a57509392505050565b600061074d825490565b6040516301ffc9a760e01b81526305a3b80960e01b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611cd1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf591906130c3565b611d125760405163d6f93fb760e01b815260040160405180910390fd5b600254604080516001600160a01b03928316815291831660208301527f3edc37a14cc8047c7c8a3f354311efe86c14848efd4e3765a3e1e57eea04ea76910160405180910390a1600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152600183016020526040812054611dc25750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561074d565b50600061074d565b60006001600160e01b031982166380ac58cd60e01b1480611dfb57506001600160e01b03198216635b5e139f60e01b145b8061074d575061074d826125e7565b600081815260076020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611e3f82610d70565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e828282610f47565b61073e57611e8f816125f2565b611e9a836020612604565b604051602001611eab929190613360565b60408051601f198184030181529082905262461bcd60e51b82526108a2916004016129be565b600881901c6000908152600e6020526040902054600160ff83161b1615611f0e576040516305dcda1160e51b8152600481018290526024016108a2565b61073e828261279f565b826001600160a01b0316611f2b82610d70565b6001600160a01b031614611f515760405162461bcd60e51b81526004016108a2906133d5565b6001600160a01b038216611fb35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016108a2565b826001600160a01b0316611fc682610d70565b6001600160a01b031614611fec5760405162461bcd60e51b81526004016108a2906133d5565b600081815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260068552838620805460001901905590871680865283862080546001019055868652600590945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6120868282610f47565b1561073e576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610f40836001600160a01b0384166127b9565b6001600160a01b03821661214c5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016108a2565b6000818152600560205260409020546001600160a01b0316156121b15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a2565b6000818152600560205260409020546001600160a01b0316156122165760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016108a2565b6001600160a01b038216600081815260066020908152604080832080546001019055848352600590915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061228c82610d70565b905061229782610d70565b600083815260076020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526006845282852080546000190190558785526005909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600082600001828154811061232d5761232d613044565b9060005260206000200154905092915050565b60006001600160a01b0384163b1561243657604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061238490339089908890889060040161341a565b6020604051808303816000875af19250505080156123bf575060408051601f3d908101601f191682019092526123bc91810190613457565b60015b61241c573d8080156123ed576040519150601f19603f3d011682016040523d82523d6000602084013e6123f2565b606091505b5080516000036124145760405162461bcd60e51b81526004016108a29061330e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061169b565b506001949350505050565b816001600160a01b0316836001600160a01b0316036124a25760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016108a2565b6001600160a01b03838116600081815260086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061254e5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061257a576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061259857662386f26fc10000830492506010015b6305f5e10083106125b0576305f5e100830492506008015b61271083106125c457612710830492506004015b606483106125d6576064830492506002015b600a831061074d5760010192915050565b600061074d826128ac565b606061074d6001600160a01b03831660145b6060600061261383600261312d565b61261e9060026132b1565b6001600160401b0381111561263557612635612a30565b6040519080825280601f01601f19166020018201604052801561265f576020820181803683370190505b509050600360fc1b8160008151811061267a5761267a613044565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106126a9576126a9613044565b60200101906001600160f81b031916908160001a90535060006126cd84600261312d565b6126d89060016132b1565b90505b6001811115612750576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061270c5761270c613044565b1a60f81b82828151811061272257612722613044565b60200101906001600160f81b031916908160001a90535060049490941c9361274981613166565b90506126db565b508315610f405760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108a2565b61073e828260405180602001604052806000815250611b6a565b600081815260018301602052604081205480156128a25760006127dd600183613474565b85549091506000906127f190600190613474565b905081811461285657600086600001828154811061281157612811613044565b906000526020600020015490508087600001848154811061283457612834613044565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061286757612867613487565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061074d565b600091505061074d565b60006001600160e01b03198216635a05180f60e01b148061074d575061074d8260006001600160e01b03198216637965db0b60e01b148061074d57506301ffc9a760e01b6001600160e01b031983161461074d565b60006020828403121561291357600080fd5b81356001600160401b0381111561292957600080fd5b820160608185031215610f4057600080fd5b6001600160e01b031981168114610f1057600080fd5b60006020828403121561296357600080fd5b8135610f408161293b565b60005b83811015612989578181015183820152602001612971565b50506000910152565b600081518084526129aa81602086016020860161296e565b601f01601f19169290920160200192915050565b602081526000610f406020830184612992565b6000602082840312156129e357600080fd5b5035919050565b80356001600160a01b0381168114612a0157600080fd5b919050565b60008060408385031215612a1957600080fd5b612a22836129ea565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715612a6857612a68612a30565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612a9657612a96612a30565b604052919050565b60006001600160401b03821115612ab757612ab7612a30565b5060051b60200190565b6000612ad4612acf84612a9e565b612a6e565b8381529050602080820190600585811b850187811115612af357600080fd5b855b81811015612bc65780356001600160401b0380821115612b155760008081fd5b908801906040828c031215612b2a5760008081fd5b612b32612a46565b612b3b836129ea565b81528683013582811115612b4f5760008081fd5b8084019350508b601f840112612b6757600091508182fd5b82359150612b77612acf83612a9e565b82815291861b8301870191878101908d841115612b945760008081fd5b938801935b83851015612bb257843582529388019390880190612b99565b828901525087525050938301938301612af5565b50505050509392505050565b600060208284031215612be457600080fd5b81356001600160401b03811115612bfa57600080fd5b8201601f81018413612c0b57600080fd5b61169b84823560208401612ac1565b600080600060608486031215612c2f57600080fd5b612c38846129ea565b9250612c46602085016129ea565b9150604084013590509250925092565b60008060408385031215612c6957600080fd5b50508035926020909101359150565b60008060408385031215612c8b57600080fd5b82359150612c9b602084016129ea565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015612ce55783516001600160a01b031683529284019291840191600101612cc0565b50909695505050505050565b600060208284031215612d0357600080fd5b610f40826129ea565b80356001600160601b0381168114612a0157600080fd5b600080600060608486031215612d3857600080fd5b83359250612d48602085016129ea565b9150612d5660408501612d0c565b90509250925092565b60006001600160401b03831115612d7857612d78612a30565b612d8b601f8401601f1916602001612a6e565b9050828152838383011115612d9f57600080fd5b828260208301376000602084830101529392505050565b600060208284031215612dc857600080fd5b81356001600160401b03811115612dde57600080fd5b8201601f81018413612def57600080fd5b61169b84823560208401612d5f565b60008060408385031215612e1157600080fd5b612e1a836129ea565b9150612c9b60208401612d0c565b8015158114610f1057600080fd5b60008060408385031215612e4957600080fd5b612e52836129ea565b91506020830135612e6281612e28565b809150509250929050565b60008083601f840112612e7f57600080fd5b5081356001600160401b03811115612e9657600080fd5b6020830191508360208260051b8501011115610a9857600080fd5b60008060008060608587031215612ec757600080fd5b84356001600160401b03811115612edd57600080fd5b612ee987828801612e6d565b9095509350612efc9050602086016129ea565b9150612f0a60408601612d0c565b905092959194509250565b60008060008060808587031215612f2b57600080fd5b612f34856129ea565b9350612f42602086016129ea565b92506040850135915060608501356001600160401b03811115612f6457600080fd5b8501601f81018713612f7557600080fd5b612f8487823560208401612d5f565b91505092959194509250565b60008060208385031215612fa357600080fd5b82356001600160401b03811115612fb957600080fd5b612fc585828601612e6d565b90969095509350505050565b60008060408385031215612fe457600080fd5b612fed836129ea565b9150612c9b602084016129ea565b6000808335601e1984360301811261301257600080fd5b8301803591506001600160401b0382111561302c57600080fd5b6020019150600581901b3603821315610a9857600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016130825761308261305a565b5060010190565b600181811c9082168061309d57607f821691505b6020821081036130bd57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156130d557600080fd5b8151610f4081612e28565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b808202811582820484141761074d5761074d61305a565b60008261316157634e487b7160e01b600052601260045260246000fd5b500490565b6000816131755761317561305a565b506000190190565b601f82111561096257600081815260208120601f850160051c810160208610156131a45750805b601f850160051c820191505b81811015611223578281556001016131b0565b81516001600160401b038111156131dc576131dc612a30565b6131f0816131ea8454613089565b8461317d565b602080601f831160018114613225576000841561320d5750858301515b600019600386901b1c1916600185901b178555611223565b600085815260208120601f198616915b8281101561325457888601518255948401946001909101908401613235565b50858210156132725787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000835161329481846020880161296e565b8351908301906132a881836020880161296e565b01949350505050565b8082018082111561074d5761074d61305a565b6020808252602a908201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646040820152692073616c65507269636560b01b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835161339881601785016020880161296e565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516133c981602884016020880161296e565b01602801949350505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061344d90830184612992565b9695505050505050565b60006020828403121561346957600080fd5b8151610f408161293b565b8181038181111561074d5761074d61305a565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220db78f674a75be30e896244d83179c8c4f1b45519e52de44c0f337b384795efbc64736f6c63430008110033";
32156
32782
  const isSuperArgs$1 = (xs) => xs.length > 1;
32157
32783
  class ImmutableERC721MintByID__factory extends ContractFactory {
32158
32784
  constructor(...args) {
@@ -32163,11 +32789,11 @@ class ImmutableERC721MintByID__factory extends ContractFactory {
32163
32789
  super(_abi$1, _bytecode$1, args[0]);
32164
32790
  }
32165
32791
  }
32166
- deploy(owner, name_, symbol_, baseURI_, contractURI_, _royaltyAllowlist, _receiver, _feeNumerator, overrides) {
32167
- return super.deploy(owner, name_, symbol_, baseURI_, contractURI_, _royaltyAllowlist, _receiver, _feeNumerator, overrides || {});
32792
+ deploy(owner, name_, symbol_, baseURI_, contractURI_, _operatorAllowlist, _receiver, _feeNumerator, overrides) {
32793
+ return super.deploy(owner, name_, symbol_, baseURI_, contractURI_, _operatorAllowlist, _receiver, _feeNumerator, overrides || {});
32168
32794
  }
32169
- getDeployTransaction(owner, name_, symbol_, baseURI_, contractURI_, _royaltyAllowlist, _receiver, _feeNumerator, overrides) {
32170
- return super.getDeployTransaction(owner, name_, symbol_, baseURI_, contractURI_, _royaltyAllowlist, _receiver, _feeNumerator, overrides || {});
32795
+ getDeployTransaction(owner, name_, symbol_, baseURI_, contractURI_, _operatorAllowlist, _receiver, _feeNumerator, overrides) {
32796
+ return super.getDeployTransaction(owner, name_, symbol_, baseURI_, contractURI_, _operatorAllowlist, _receiver, _feeNumerator, overrides || {});
32171
32797
  }
32172
32798
  attach(address) {
32173
32799
  return super.attach(address);
@@ -32283,9 +32909,7 @@ class ERC721 {
32283
32909
  * @returns the approved address for a token ID, or zero if no address set.
32284
32910
  */
32285
32911
  async getApproved(provider, tokenId, overrides = {}) {
32286
- return await this.contract
32287
- .connect(provider)
32288
- .getApproved(tokenId, overrides);
32912
+ return await this.contract.connect(provider).getApproved(tokenId, overrides);
32289
32913
  }
32290
32914
  /**
32291
32915
  * @returns the role admin address.
@@ -32297,33 +32921,25 @@ class ERC721 {
32297
32921
  * @returns the role member address at a particular index.
32298
32922
  */
32299
32923
  async getRoleMember(provider, role, index, overrides = {}) {
32300
- return await this.contract
32301
- .connect(provider)
32302
- .getRoleMember(role, index, overrides);
32924
+ return await this.contract.connect(provider).getRoleMember(role, index, overrides);
32303
32925
  }
32304
32926
  /**
32305
32927
  * @returns the role member count as a BigNumber.
32306
32928
  */
32307
32929
  async getRoleMemberCount(provider, role, overrides = {}) {
32308
- return await this.contract
32309
- .connect(provider)
32310
- .getRoleMemberCount(role, overrides);
32930
+ return await this.contract.connect(provider).getRoleMemberCount(role, overrides);
32311
32931
  }
32312
32932
  /**
32313
32933
  * @returns a boolean for whether an account has a particular role.
32314
32934
  */
32315
32935
  async hasRole(provider, role, account, overrides = {}) {
32316
- return await this.contract
32317
- .connect(provider)
32318
- .hasRole(role, account, overrides);
32936
+ return await this.contract.connect(provider).hasRole(role, account, overrides);
32319
32937
  }
32320
32938
  /**
32321
32939
  * @returns a booolean that tells whether an operator is approved by a given owner.
32322
32940
  */
32323
32941
  async isApprovedForAll(provider, owner, operator, overrides = {}) {
32324
- return await this.contract
32325
- .connect(provider)
32326
- .isApprovedForAll(owner, operator, overrides);
32942
+ return await this.contract.connect(provider).isApprovedForAll(owner, operator, overrides);
32327
32943
  }
32328
32944
  /**
32329
32945
  * @returns the name of the contract as a string.
@@ -32338,18 +32954,16 @@ class ERC721 {
32338
32954
  return await this.contract.connect(provider).ownerOf(tokenId, overrides);
32339
32955
  }
32340
32956
  /**
32341
- * @returns the royalty allowlist as a string.
32957
+ * @returns the operator allowlist as a string.
32342
32958
  */
32343
- async royaltyAllowlist(provider, overrides = {}) {
32344
- return await this.contract.connect(provider).royaltyAllowlist(overrides);
32959
+ async operatorAllowlist(provider, overrides = {}) {
32960
+ return await this.contract.connect(provider).operatorAllowlist(overrides);
32345
32961
  }
32346
32962
  /**
32347
32963
  * @returns the royalty information for a particular tokenId.
32348
32964
  */
32349
32965
  async royaltyInfo(provider, _tokenId, _salePrice, overrides = {}) {
32350
- return await this.contract
32351
- .connect(provider)
32352
- .royaltyInfo(_tokenId, _salePrice, overrides);
32966
+ return await this.contract.connect(provider).royaltyInfo(_tokenId, _salePrice, overrides);
32353
32967
  }
32354
32968
  /**
32355
32969
  * @returns the symbol of the contract as a string.
@@ -32535,10 +33149,10 @@ class ERC721 {
32535
33149
  return await this.contract.populateTransaction.setNFTRoyaltyReceiverBatch(tokenIds, receiver, feeNumerator, overrides);
32536
33150
  }
32537
33151
  /**
32538
- * @returns a populated transaction for the setRoyaltyAllowlistRegistry contract function
33152
+ * @returns a populated transaction for the setOperatorAllowlistRegistry contract function
32539
33153
  */
32540
- async populateSetRoyaltyAllowlistRegistry(_royaltyAllowlist, overrides = {}) {
32541
- return await this.contract.populateTransaction.setRoyaltyAllowlistRegistry(_royaltyAllowlist, overrides);
33154
+ async populateSetOperatorAllowlistRegistry(_operatorAllowlist, overrides = {}) {
33155
+ return await this.contract.populateTransaction.setOperatorAllowlistRegistry(_operatorAllowlist, overrides);
32542
33156
  }
32543
33157
  }
32544
33158
 
@@ -32651,10 +33265,10 @@ class ERC721MintByID {
32651
33265
  return await this.contract.connect(provider).ownerOf(tokenId, overrides);
32652
33266
  }
32653
33267
  /**
32654
- * @returns the royalty allowlist as a string.
33268
+ * @returns the operator allowlist as a string.
32655
33269
  */
32656
- async royaltyAllowlist(provider, overrides = {}) {
32657
- return await this.contract.connect(provider).royaltyAllowlist(overrides);
33270
+ async operatorAllowlist(provider, overrides = {}) {
33271
+ return await this.contract.connect(provider).operatorAllowlist(overrides);
32658
33272
  }
32659
33273
  /**
32660
33274
  * @returns the royalty information for a particular tokenId.
@@ -32812,10 +33426,10 @@ class ERC721MintByID {
32812
33426
  return await this.contract.populateTransaction.setNFTRoyaltyReceiverBatch(tokenIds, receiver, feeNumerator, overrides);
32813
33427
  }
32814
33428
  /**
32815
- * @returns a populated transaction for the setRoyaltyAllowlistRegistry contract function
33429
+ * @returns a populated transaction for the setOperatorAllowlistRegistry contract function
32816
33430
  */
32817
- async populateSetRoyaltyAllowlistRegistry(_royaltyAllowlist, overrides = {}) {
32818
- return await this.contract.populateTransaction.setRoyaltyAllowlistRegistry(_royaltyAllowlist, overrides);
33431
+ async populateSetOperatorAllowlistRegistry(_operatorAllowlist, overrides = {}) {
33432
+ return await this.contract.populateTransaction.setOperatorAllowlistRegistry(_operatorAllowlist, overrides);
32819
33433
  }
32820
33434
  }
32821
33435