@esri/hub-common 9.21.0 → 9.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/es2017/content/_fetch.js +87 -0
  2. package/dist/es2017/content/_fetch.js.map +1 -0
  3. package/dist/es2017/content/_internal.js +75 -3
  4. package/dist/es2017/content/_internal.js.map +1 -1
  5. package/dist/es2017/content/compose.js +20 -10
  6. package/dist/es2017/content/compose.js.map +1 -1
  7. package/dist/es2017/content/fetch.js +78 -0
  8. package/dist/es2017/content/fetch.js.map +1 -0
  9. package/dist/es2017/content/index.js +9 -70
  10. package/dist/es2017/content/index.js.map +1 -1
  11. package/dist/es2017/content/slugs.js +63 -0
  12. package/dist/es2017/content/slugs.js.map +1 -0
  13. package/dist/es2017/content/types.js +1 -0
  14. package/dist/es2017/content/types.js.map +1 -0
  15. package/dist/es2017/items/_enrichments.js +176 -0
  16. package/dist/es2017/items/_enrichments.js.map +1 -0
  17. package/dist/es2017/projects/HubProjects.js +2 -2
  18. package/dist/es2017/projects/HubProjects.js.map +1 -1
  19. package/dist/esm/content/_fetch.js +102 -0
  20. package/dist/esm/content/_fetch.js.map +1 -0
  21. package/dist/esm/content/_internal.js +75 -3
  22. package/dist/esm/content/_internal.js.map +1 -1
  23. package/dist/esm/content/compose.js +20 -10
  24. package/dist/esm/content/compose.js.map +1 -1
  25. package/dist/esm/content/fetch.js +103 -0
  26. package/dist/esm/content/fetch.js.map +1 -0
  27. package/dist/esm/content/index.js +9 -70
  28. package/dist/esm/content/index.js.map +1 -1
  29. package/dist/esm/content/slugs.js +63 -0
  30. package/dist/esm/content/slugs.js.map +1 -0
  31. package/dist/esm/content/types.js +1 -0
  32. package/dist/esm/content/types.js.map +1 -0
  33. package/dist/esm/items/_enrichments.js +177 -0
  34. package/dist/esm/items/_enrichments.js.map +1 -0
  35. package/dist/esm/projects/HubProjects.js +2 -2
  36. package/dist/esm/projects/HubProjects.js.map +1 -1
  37. package/dist/node/content/_fetch.js +90 -0
  38. package/dist/node/content/_fetch.js.map +1 -0
  39. package/dist/node/content/_internal.js +76 -4
  40. package/dist/node/content/_internal.js.map +1 -1
  41. package/dist/node/content/compose.js +19 -9
  42. package/dist/node/content/compose.js.map +1 -1
  43. package/dist/node/content/fetch.js +81 -0
  44. package/dist/node/content/fetch.js.map +1 -0
  45. package/dist/node/content/index.js +11 -76
  46. package/dist/node/content/index.js.map +1 -1
  47. package/dist/node/content/slugs.js +70 -0
  48. package/dist/node/content/slugs.js.map +1 -0
  49. package/dist/node/content/types.js +3 -0
  50. package/dist/node/content/types.js.map +1 -0
  51. package/dist/node/items/_enrichments.js +179 -0
  52. package/dist/node/items/_enrichments.js.map +1 -0
  53. package/dist/node/projects/HubProjects.js +2 -2
  54. package/dist/node/projects/HubProjects.js.map +1 -1
  55. package/dist/types/content/_fetch.d.ts +61 -0
  56. package/dist/types/content/_internal.d.ts +76 -0
  57. package/dist/types/content/compose.d.ts +11 -0
  58. package/dist/types/content/fetch.d.ts +23 -0
  59. package/dist/types/content/index.d.ts +4 -41
  60. package/dist/types/content/slugs.d.ts +34 -0
  61. package/dist/types/content/types.d.ts +7 -0
  62. package/dist/types/items/_enrichments.d.ts +24 -0
  63. package/dist/types/projects/HubProjects.d.ts +1 -1
  64. package/dist/umd/common.umd.js +1923 -680
  65. package/dist/umd/common.umd.js.map +1 -1
  66. package/dist/umd/common.umd.min.js +1 -1
  67. package/dist/umd/common.umd.min.js.map +1 -1
  68. package/package.json +2 -1
@@ -1,5 +1,5 @@
1
1
  /* @preserve
2
- * @esri/hub-common - v9.20.0 - Mon Feb 28 2022 15:56:25 GMT+0000 (Coordinated Universal Time)
2
+ * @esri/hub-common - v9.21.2 - Tue Mar 01 2022 21:10:25 GMT+0000 (Coordinated Universal Time)
3
3
  * Copyright (c) 2022 Environmental Systems Research Institute, Inc.
4
4
  * Apache-2.0
5
5
  */
@@ -860,6 +860,18 @@
860
860
  return __assign.apply(this, arguments);
861
861
  };
862
862
 
863
+ function __rest(s, e) {
864
+ var t = {};
865
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
866
+ t[p] = s[p];
867
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
868
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
869
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
870
+ t[p[i]] = s[p[i]];
871
+ }
872
+ return t;
873
+ }
874
+
863
875
  function __awaiter(thisArg, _arguments, P, generator) {
864
876
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
865
877
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -3350,6 +3362,19 @@
3350
3362
  return createItemInFolder(options);
3351
3363
  }
3352
3364
 
3365
+ // eslint-disable-next-line no-control-regex
3366
+ var CONTROL_CHAR_MATCHER = /[\x00-\x1F\x7F-\x9F\xA0]/g;
3367
+ /**
3368
+ * Returns a new string with all control characters removed.
3369
+ *
3370
+ * Doesn't remove characters from input string.
3371
+ *
3372
+ * @param str - the string to scrub
3373
+ */
3374
+ function scrubControlChars(str) {
3375
+ return str.replace(CONTROL_CHAR_MATCHER, "");
3376
+ }
3377
+
3353
3378
  /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
3354
3379
  * Apache-2.0 */
3355
3380
  /**
@@ -3466,6 +3491,85 @@
3466
3491
  options.params = __assign({ num: 1000 }, options.params);
3467
3492
  return request(url, options);
3468
3493
  }
3494
+ /**
3495
+ * ```js
3496
+ * import { getItemGroups } from "@esri/arcgis-rest-portal";
3497
+ * //
3498
+ * getItemGroups("30e5fe3149c34df1ba922e6f5bbf808f")
3499
+ * .then(response)
3500
+ * ```
3501
+ * Lists the groups of which the item is a part, only showing the groups that the calling user can access. See the [REST Documentation](https://developers.arcgis.com/rest/users-groups-and-items/groups.htm) for more information.
3502
+ *
3503
+ * @param id - The Id of the item to query group association for.
3504
+ * @param requestOptions - Options for the request
3505
+ * @returns A Promise to get some item groups.
3506
+ */
3507
+ function getItemGroups(id, requestOptions) {
3508
+ var url = getItemBaseUrl(id, requestOptions) + "/groups";
3509
+ return request(url, requestOptions);
3510
+ }
3511
+ /**
3512
+ * ```
3513
+ * import { getItemInfo } from "@esri/arcgis-rest-portal";
3514
+ * // get the "Info Card" for the item
3515
+ * getItemInfo("ae7")
3516
+ * .then(itemInfoXml) // XML document as a string
3517
+ * // or get the contents of a specific file
3518
+ * getItemInfo("ae7", { fileName: "form.json", readAs: "json", authentication })
3519
+ * .then(formJson) // JSON document as JSON
3520
+ * ```
3521
+ * Get an info file for an item. See the [REST Documentation](https://developers.arcgis.com/rest/users-groups-and-items/item-info-file.htm) for more information.
3522
+ * @param id - Item Id
3523
+ * @param requestOptions - Options for the request, including the file name which defaults to `iteminfo.xml`.
3524
+ * If the file is not a text file (XML, HTML, etc) you will need to specify the `readAs` parameter
3525
+ * @returns A Promise that will resolve with the contents of the info file for the item.
3526
+ */
3527
+ function getItemInfo(id, requestOptions) {
3528
+ var _a = requestOptions || {}, _b = _a.fileName, fileName = _b === void 0 ? "iteminfo.xml" : _b, _c = _a.readAs, readAs = _c === void 0 ? "text" : _c;
3529
+ var options = __assign({ httpMethod: "GET" }, requestOptions);
3530
+ return getItemFile(id, "/info/" + fileName, readAs, options);
3531
+ }
3532
+ /**
3533
+ * ```
3534
+ * import { getItemMetadata } from "@esri/arcgis-rest-portal";
3535
+ * // get the metadata for the item
3536
+ * getItemMetadata("ae7")
3537
+ * .then(itemMetadataXml) // XML document as a string
3538
+ * // or with additional request options
3539
+ * getItemMetadata("ae7", { authentication })
3540
+ * .then(itemMetadataXml) // XML document as a string
3541
+ * ```
3542
+ * Get the standard formal metadata XML file for an item (`/info/metadata/metadata.xml`)
3543
+ * @param id - Item Id
3544
+ * @param requestOptions - Options for the request
3545
+ * @returns A Promise that will resolve with the contents of the metadata file for the item as a string.
3546
+ */
3547
+ function getItemMetadata(id, requestOptions) {
3548
+ var options = __assign(__assign({}, requestOptions), { fileName: "metadata/metadata.xml" });
3549
+ return getItemInfo(id, options);
3550
+ }
3551
+ // overrides request()'s default behavior for reading the response
3552
+ // which is based on `params.f` and defaults to JSON
3553
+ // Also adds JSON parse error protection by sanitizing out any unescaped control characters before parsing
3554
+ function getItemFile(id,
3555
+ // NOTE: fileName should include any folder/subfolders
3556
+ fileName, readMethod, requestOptions) {
3557
+ var url = "" + getItemBaseUrl(id, requestOptions) + fileName;
3558
+ // preserve escape hatch to let the consumer read the response
3559
+ // and ensure the f param is not appended to the query string
3560
+ var options = __assign({ params: {} }, requestOptions);
3561
+ var justReturnResponse = options.rawResponse;
3562
+ options.rawResponse = true;
3563
+ options.params.f = null;
3564
+ return request(url, options).then(function (response) {
3565
+ if (justReturnResponse) {
3566
+ return response;
3567
+ }
3568
+ return readMethod !== 'json'
3569
+ ? response[readMethod]()
3570
+ : response.text().then(function (text) { return JSON.parse(scrubControlChars(text)); });
3571
+ });
3572
+ }
3469
3573
 
3470
3574
  /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
3471
3575
  * Apache-2.0 */
@@ -5983,6 +6087,47 @@
5983
6087
  return cleanUrl(stripped);
5984
6088
  }
5985
6089
 
6090
+ /**
6091
+ * ```js
6092
+ * import { getAllLayersAndTables } from '@esri/arcgis-rest-feature-layer';
6093
+ * getAllLayersAndTables({
6094
+ * url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/ServiceRequest/FeatureServer/0"
6095
+ * })
6096
+ * .then(response) // { layers: [...], tables: [...] }
6097
+ * ```
6098
+ * Fetches all the layers and tables associated with a given layer service.
6099
+ * Wrapper for https://developers.arcgis.com/rest/services-reference/all-layers-and-tables.htm
6100
+ *
6101
+ * @param options - Request options, including the url for the layer service
6102
+ * @returns A Promise that will resolve with the layers and tables for the given service
6103
+ */
6104
+ // TODO: should we expand this to support other valid params of the endpoint?
6105
+ function getAllLayersAndTables(options) {
6106
+ var url = options.url, requestOptions = __rest(options, ["url"]);
6107
+ var layersUrl = parseServiceUrl(url) + "/layers";
6108
+ return request(layersUrl, requestOptions);
6109
+ }
6110
+
6111
+ /* Copyright (c) 2018 Environmental Systems Research Institute, Inc.
6112
+ * Apache-2.0 */
6113
+ /**
6114
+ * ```js
6115
+ * import { getService } from '@esri/arcgis-rest-feature-layer';
6116
+ * //
6117
+ * getService({
6118
+ * url: "https://sampleserver6.arcgisonline.com/arcgis/rest/services/ServiceRequest/FeatureServer"
6119
+ * })
6120
+ * .then(response) // { name: "311", id: 0, ... }
6121
+ * ```
6122
+ * Feature Service request. See the [REST Documentation](https://developers.arcgis.com/rest/services-reference/feature-service.htm) for more information.
6123
+ *
6124
+ * @param options - Options for the request.
6125
+ * @returns A Promise that will resolve with the getService response.
6126
+ */
6127
+ function getService(options) {
6128
+ return request(cleanUrl(options.url), options);
6129
+ }
6130
+
5986
6131
  function createExtent(xmin, ymin, xmax, ymax, wkid) {
5987
6132
  if (wkid === void 0) { wkid = 4326; }
5988
6133
  return {
@@ -6166,6 +6311,12 @@
6166
6311
  return family;
6167
6312
  }
6168
6313
 
6314
+ /**
6315
+ * get a content's boundary based on the item's boundary property
6316
+ * @param item
6317
+ * @returns
6318
+ * @private
6319
+ */
6169
6320
  // TODO: this needs to be able to handle "automatic"
6170
6321
  var getContentBoundary = function (item) {
6171
6322
  var _a;
@@ -6191,18 +6342,36 @@
6191
6342
  geometry: geometry,
6192
6343
  };
6193
6344
  };
6194
- // when no request options are provided, the underlying
6195
- // request functions assume that we are online in production
6196
- // so we only want use enterprise logic if isPortal is explicitly defined
6345
+ /**
6346
+ * Determine if we are in an enterprise environment
6347
+ * NOTE: when no request options are provided, the underlying
6348
+ * request functions assume that we are online in production
6349
+ * so we only want use enterprise logic if isPortal is explicitly defined
6350
+ * @param requestOptions
6351
+ * @returns
6352
+ * @private
6353
+ */
6197
6354
  var isPortal = function (requestOptions) {
6198
6355
  return requestOptions && requestOptions.isPortal;
6199
6356
  };
6357
+ /**
6358
+ * Determine if we can use the Hub API for an item, i.e.
6359
+ * the item is public and we are not in an enterprise environment
6360
+ * @param item
6361
+ * @param requestOptions
6362
+ * @returns
6363
+ * @private
6364
+ */
6365
+ var canUseHubApiForItem = function (item, requestOptions) {
6366
+ return !!item && item.access === "public" && !isPortal(requestOptions);
6367
+ };
6200
6368
  /**
6201
6369
  * Returns whether or not an item is a proxied csv
6202
6370
  *
6203
6371
  * @param item
6204
6372
  * @param requestOptions Hub Request Options (including whether we're in portal)
6205
6373
  * @returns
6374
+ * @private
6206
6375
  */
6207
6376
  var isProxiedCSV = function (item, requestOptions) {
6208
6377
  return !isPortal(requestOptions) &&
@@ -6210,6 +6379,14 @@
6210
6379
  item.type === "CSV" &&
6211
6380
  item.size <= 5000000;
6212
6381
  };
6382
+ /**
6383
+ * Get the relative URL to use for the item in a hub site
6384
+ * @param type
6385
+ * @param identifier
6386
+ * @param typeKeywords
6387
+ * @returns
6388
+ * @private
6389
+ */
6213
6390
  var getHubRelativeUrl = function (type, identifier, typeKeywords) {
6214
6391
  // solution types have their own logic
6215
6392
  var contentUrl = getSolutionUrl(type, identifier, typeKeywords);
@@ -6242,6 +6419,12 @@
6242
6419
  }
6243
6420
  return contentUrl;
6244
6421
  };
6422
+ /**
6423
+ * Is this content type a page?
6424
+ * @param type
6425
+ * @returns
6426
+ * @private
6427
+ */
6245
6428
  var isPageType = function (type) {
6246
6429
  return ["Hub Page", "Site Page"].includes(type);
6247
6430
  };
@@ -6260,6 +6443,12 @@
6260
6443
  }
6261
6444
  return hubUrl;
6262
6445
  };
6446
+ /**
6447
+ * Get the path to a well known metadata value
6448
+ * @param identifier identifier for well known metadata value
6449
+ * @returns path to be used like get(metadata, path)
6450
+ * @private
6451
+ */
6263
6452
  function getMetadataPath(identifier) {
6264
6453
  // NOTE: i have verified that this will work regardless of the "Metadata Style" set on the org
6265
6454
  var metadataPaths = {
@@ -6272,10 +6461,20 @@
6272
6461
  };
6273
6462
  return metadataPaths[identifier];
6274
6463
  }
6464
+ /**
6465
+ * Get a well known value from metadata
6466
+ * @param metadata
6467
+ * @param identifier identifier for well known metadata value
6468
+ * @returns
6469
+ * @private
6470
+ */
6275
6471
  function getValueFromMetadata(metadata, identifier) {
6276
6472
  var path = getMetadataPath(identifier);
6277
6473
  return path && getProp(metadata, path);
6278
6474
  }
6475
+ /**
6476
+ * Date precisions
6477
+ */
6279
6478
  var DatePrecision;
6280
6479
  (function (DatePrecision) {
6281
6480
  DatePrecision["Year"] = "year";
@@ -6293,6 +6492,7 @@
6293
6492
  *
6294
6493
  * @param {string} isoString
6295
6494
  * @return { date: Date, precision: DatePrecision }
6495
+ * @private
6296
6496
  */
6297
6497
  function parseISODateString(isoString) {
6298
6498
  isoString = "" + isoString;
@@ -6324,6 +6524,13 @@
6324
6524
  }
6325
6525
  return date && precision && { date: date, precision: precision };
6326
6526
  }
6527
+ /**
6528
+ * Get the spatial reference from layer or server info
6529
+ * @param server
6530
+ * @param layer
6531
+ * @returns
6532
+ * @private
6533
+ */
6327
6534
  var getServerSpatialReference = function (server, layer) {
6328
6535
  var _a;
6329
6536
  var layerSpatialReference = (_a = layer === null || layer === void 0 ? void 0 : layer.extent) === null || _a === void 0 ? void 0 : _a.spatialReference;
@@ -6334,6 +6541,12 @@
6334
6541
  // that is always either WKID like "102100" or
6335
6542
  // WKT like "NAD_1983_HARN_StatePlane_Hawaii_3_FIPS_5103_Feet"
6336
6543
  // so we coerce those string into a ISpatialReference object
6544
+ /**
6545
+ * Get the spatial reference as an object for an item
6546
+ * @param item
6547
+ * @returns spatial reference object
6548
+ * @private
6549
+ */
6337
6550
  var getItemSpatialReference = function (item) {
6338
6551
  var spatialReference = item.spatialReference;
6339
6552
  if (!spatialReference || typeof spatialReference === "object") {
@@ -6359,6 +6572,7 @@
6359
6572
  * @param item
6360
6573
  * @param metadata formal metadata
6361
6574
  * @returns
6575
+ * @private
6362
6576
  */
6363
6577
  var getAdditionalResources = function (item, metadata, requestOptions) {
6364
6578
  var rawResources = getProp(metadata, "metadata.distInfo.distTranOps.onLineSrc") || null;
@@ -6381,6 +6595,7 @@
6381
6595
  * @param resource raw additional resource of an item
6382
6596
  * @param item
6383
6597
  * @returns
6598
+ * @private
6384
6599
  */
6385
6600
  var isDataSourceOfItem = function (resource, item) {
6386
6601
  var serviceUrl = item.url && parseServiceUrl(item.url);
@@ -6396,6 +6611,7 @@
6396
6611
  * @param item
6397
6612
  * @param requestOptions IHubRequestOptions, including authentication
6398
6613
  * @returns
6614
+ * @private
6399
6615
  */
6400
6616
  var getAdditionalResourceUrl = function (resource, item, requestOptions) {
6401
6617
  var result = resource.linkage;
@@ -7107,7 +7323,7 @@
7107
7323
  */
7108
7324
  var composeContent = function (item, options) {
7109
7325
  // extract enrichments and context out of the options
7110
- var _a = options || {}, slug = _a.slug, requestOptions = _a.requestOptions, data = _a.data, metadata = _a.metadata, groupIds = _a.groupIds, ownerUser = _a.ownerUser, org = _a.org, errors = _a.errors, server = _a.server, layers = _a.layers, recordCount = _a.recordCount, boundary = _a.boundary, statistics = _a.statistics;
7326
+ var _a = options || {}, slug = _a.slug, requestOptions = _a.requestOptions, data = _a.data, metadata = _a.metadata, groupIds = _a.groupIds, ownerUser = _a.ownerUser, org = _a.org, errors = _a.errors, server = _a.server, layers = _a.layers, recordCount = _a.recordCount, boundary = _a.boundary, extent = _a.extent, searchDescription = _a.searchDescription, statistics = _a.statistics;
7111
7327
  // set common variables that we will use in the derived properties below
7112
7328
  // if item refers to a layer we always want to use that layer id
7113
7329
  // otherwise use the layer id that was passed in (if any)
@@ -7122,8 +7338,7 @@
7122
7338
  : // for feature servers with a single layer always show the layer
7123
7339
  isFeatureService(item.type) && getOnlyQueryLayer(layers));
7124
7340
  // NOTE: we only set hubId for public items in online
7125
- var _canUseHubApi = !isPortal(requestOptions) && item.access === "public";
7126
- var hubId = _canUseHubApi
7341
+ var hubId = canUseHubApiForItem(item, requestOptions)
7127
7342
  ? layer
7128
7343
  ? item.id + "_" + layer.id
7129
7344
  : getItemHubId(item)
@@ -7181,7 +7396,7 @@
7181
7396
  return name;
7182
7397
  },
7183
7398
  get description() {
7184
- return _layerDescription || item.description;
7399
+ return searchDescription || _layerDescription || item.description;
7185
7400
  }, type: type, get family() {
7186
7401
  return getFamily(type);
7187
7402
  }, get url() {
@@ -7211,6 +7426,17 @@
7211
7426
  control: item.itemControl || "view",
7212
7427
  };
7213
7428
  },
7429
+ // TODO: do we want to add dataset extent logic as a getter here?
7430
+ get extent() {
7431
+ return !isBBox(item.extent) && extent && isBBox(extent.coordinates)
7432
+ ? // we fall back to the extent derived by the Hub API
7433
+ // which prefers layer or service extents and ultimately
7434
+ // falls back to the org's extent
7435
+ extent.coordinates
7436
+ : // prefer item extent
7437
+ item.extent;
7438
+ },
7439
+ // would require us to do client-side projection of server/layer extent
7214
7440
  get boundary() {
7215
7441
  // TODO: need to be able to handle automatic w/ additional enrichment
7216
7442
  // that could for example fetch the concave hull from the Hub API or resources
@@ -7292,11 +7518,10 @@
7292
7518
  return (getItemSpatialReference(item) ||
7293
7519
  getServerSpatialReference(server, layer) ||
7294
7520
  null);
7295
- },
7296
- get orgId() {
7521
+ }, get orgId() {
7297
7522
  // NOTE: it's undocumented, but the portal API will return orgId for items... sometimes
7298
- return org ? org.id : item.orgId;
7299
- },
7523
+ return org ? org.id : item.orgId || (ownerUser === null || ownerUser === void 0 ? void 0 : ownerUser.orgId);
7524
+ },
7300
7525
  // deprecated properties
7301
7526
  // TODO: should we add these in legacy wrappers
7302
7527
  // like itemToContent or datasetToContent instead?
@@ -7324,121 +7549,6 @@
7324
7549
  } });
7325
7550
  };
7326
7551
 
7327
- // TODO: remove this at next breaking version
7328
- /**
7329
- * ```js
7330
- * import { getCategory } from "@esri/hub-common";
7331
- * //
7332
- * getCategory('Feature Layer')
7333
- * > 'dataset'
7334
- * ```
7335
- * **DEPRECATED: Use getCollection() instead**
7336
- * returns the Hub category for a given item type
7337
- * @param itemType The ArcGIS [item type](https://developers.arcgis.com/rest/users-groups-and-items/items-and-item-types.htm).
7338
- * @returns the category of a given item type.
7339
- */
7340
- function getCategory(itemType) {
7341
- if (itemType === void 0) { itemType = ""; }
7342
- /* tslint:disable no-console */
7343
- console.warn("DEPRECATED: Use getCollection() instead. getCategory will be removed at v10.0.0");
7344
- /* tslint:enable no-console */
7345
- var collection = getCollection(itemType);
7346
- // for backwards compatibility
7347
- return collection === "feedback" ? "app" : collection;
7348
- }
7349
- /**
7350
- * ```js
7351
- * import { getTypes } from "@esri/hub-common";
7352
- * //
7353
- * getTypes('site')
7354
- * > [ 'hub site application' ]
7355
- * ```
7356
- * To do.
7357
- * @param category The ArcGIS Hub category.
7358
- * @returns all the item types for the given category.
7359
- *
7360
- */
7361
- function getTypes(category) {
7362
- if (category === void 0) { category = ""; }
7363
- return categories[category.toLowerCase()];
7364
- }
7365
- /**
7366
- * ```js
7367
- * import { getTypeCategories } from "@esri/hub-common";
7368
- * //
7369
- * getTypeCategories(item)
7370
- * > [ 'Hub Site Application' ]
7371
- * ```
7372
- * @param item Item object.
7373
- * @returns typeCategory of the input item.
7374
- *
7375
- */
7376
- function getTypeCategories(item) {
7377
- if (item === void 0) { item = {}; }
7378
- var type = normalizeItemType(item);
7379
- var category = getCategory(type);
7380
- if (category) {
7381
- // upper case first letter and return as element in array for backwards compatibility
7382
- var chars = Array.from(category);
7383
- chars[0] = chars[0].toUpperCase();
7384
- return [chars.join("")];
7385
- }
7386
- else {
7387
- return ["Other"];
7388
- }
7389
- }
7390
- /**
7391
- * ```js
7392
- * import { getContentIdentifier } from "@esri/hub-common";
7393
- * //
7394
- * getContentIdentifier(content, site)
7395
- * > 'f12hhjk32' // id
7396
- * // OR
7397
- * > 'content-slug' // human-readable slug
7398
- * ```
7399
- * Returns the preferred identifier for a piece of content (determined by content type):
7400
- * - Content from the 'template' and 'feedback' families return the standard id field
7401
- * - Pages that are linked to the site parameter will return the slug defined by the site. Otherwise, the page id will be returned
7402
- * - All other content will return the highest available item in the following hierarchy:
7403
- * 1. slug - includes org prefix if the site parameter is a portal or has an orgKey different from the slug prefix
7404
- * 2. hubId
7405
- * 3. id
7406
- * @param content The IHubContent item
7407
- * @param site The site to compare content against
7408
- * @returns the preferred id for the given content.
7409
- */
7410
- function getContentIdentifier(content, site) {
7411
- // We don't currently support slugs for hub initiative templates, solutions or surveys
7412
- if (includes(["template", "feedback"], content.family)) {
7413
- return content.id;
7414
- }
7415
- // If it is a hub page linked to a site, return the page slug at the
7416
- // site data instead. Because this one is the original one that was used
7417
- // to create the page url (not mutable once created) and the slug (below)
7418
- // generated by the hub-indexer could simply change with page name.
7419
- if (isPageType(content.type)) {
7420
- // check if the page is linked to the current site
7421
- var pages = getProp(site, "data.values.pages") || [];
7422
- // if so, return the page slug otherwise the page id
7423
- var page = pages.find(function (p) { return p.id === content.id; });
7424
- return page ? page.slug : content.id;
7425
- }
7426
- // If a slug is present, always return it
7427
- if (content.slug) {
7428
- var slug = void 0;
7429
- var orgKey = getProp(site, "domainInfo.orgKey");
7430
- // Use namespaced slug when on the umbrella site
7431
- if (getProp(site, "data.values.isUmbrella")) {
7432
- slug = content.slug;
7433
- }
7434
- else {
7435
- // Use shortened slug if the slug's namespace is the same as the orgKey
7436
- slug = removeContextFromSlug(content.slug, orgKey);
7437
- }
7438
- return slug;
7439
- }
7440
- return content.hubId || content.id;
7441
- }
7442
7552
  //////////////////////
7443
7553
  // Slug Helpers
7444
7554
  //////////////////////
@@ -7500,36 +7610,1498 @@
7500
7610
  return slug;
7501
7611
  }
7502
7612
  }
7613
+
7614
+ /* Copyright (c) 2018-2020 Environmental Systems Research Institute, Inc.
7615
+ * Apache-2.0 */
7503
7616
  /**
7504
- * DEPRECATED: Use getFamily() instead.
7505
- *
7506
- * get the HubType for a given item or item type
7617
+ * Allows an application to track a series of operations, storing information
7618
+ * about the arguments passes in and the results returned
7507
7619
  *
7508
- * @param itemOrType an item or item.type
7509
- */
7510
- function getItemHubType(itemOrType) {
7511
- /* tslint:disable no-console */
7512
- console.warn("DEPRECATED: Use getFamily() instead. getItemHubType() will be removed at v10.0.0");
7513
- /* tslint:enable no-console */
7514
- if (typeof itemOrType === "string") {
7515
- itemOrType = { type: itemOrType };
7516
- }
7517
- var itemType = normalizeItemType(itemOrType);
7518
- // TODO: not all categories are Hub types, may need to validate
7519
- return getCollection(itemType);
7520
- }
7521
- /**
7522
- * Convert a Portal item to Hub content
7620
+ * ```js
7621
+ * import { OperationStack } from '@esri/solution-common';
7523
7622
  *
7524
- * @param item Portal Item
7525
- * @returns Hub content
7526
- * @export
7527
- */
7528
- function itemToContent(item) {
7529
- return composeContent(item);
7530
- }
7531
- /**
7532
- * Convert a Hub API dataset resource to Hub Content
7623
+ * const stack = new OperationStack();
7624
+ *
7625
+ * // start an operation by type
7626
+ * const id = stack.start('getItem');
7627
+ * //.. work happens...
7628
+ * stack.finish(id);
7629
+ *
7630
+ * // start an operation with an Operation object
7631
+ * stack.start({
7632
+ * id: 'createItem_1',
7633
+ * type: 'createItem',
7634
+ * inputs: {
7635
+ * item: {...truncated...},
7636
+ * portal: 'https://www.arcgis.com',
7637
+ * username: 'jsmith'
7638
+ * },
7639
+ * });
7640
+ * // make the call
7641
+ * stack.finish('createItem_1', {newItemId: '00cf213'});
7642
+ *
7643
+ * // later you can get that information back out of the stack
7644
+ * const prevOp = stack.getOperation('createItem_1);
7645
+ *
7646
+ * // and if you need to roll back you can use the
7647
+ * // .cleanup and .output properties to help orchestrate
7648
+ *
7649
+ * ```
7650
+ *
7651
+ *
7652
+ * Can be used to implement "atomic" operations in an environment that does not
7653
+ * have this as a core feature
7654
+ */
7655
+ var OperationStack = /** @class */ (function () {
7656
+ /**
7657
+ * Creates an instance of OperationStack.
7658
+ * @memberof OperationStack
7659
+ */
7660
+ function OperationStack() {
7661
+ this.operations = [];
7662
+ }
7663
+ /**
7664
+ * Start an Operation
7665
+ *
7666
+ * ```js
7667
+ * const stack = new OperationStack();
7668
+ * stack.startOperation({
7669
+ * id: 'get-bc3',
7670
+ * type: 'getItem',
7671
+ * cleanup: 'n/a',
7672
+ * inputs: {
7673
+ * id: 'bc3',
7674
+ * owner: 'vader'
7675
+ * }
7676
+ * });
7677
+ * // do work
7678
+ * stack.finish('get-bc3');
7679
+ * ```
7680
+ *
7681
+ *
7682
+ * @param {IOperation} operation
7683
+ * @memberof OperationStack
7684
+ */
7685
+ OperationStack.prototype.startOperation = function (operation) {
7686
+ var op = cloneObject$1(operation);
7687
+ op.startedAt = new Date().getTime();
7688
+ op.state = "working";
7689
+ this.operations.push(op);
7690
+ };
7691
+ /**
7692
+ * Start an operation without requiring a full operation
7693
+ *
7694
+ * ```js
7695
+ * const opId = stack.start('getItems');
7696
+ * //...work happens
7697
+ * stack.finish(opId);
7698
+ * ```
7699
+ *
7700
+ * @param {string} type Type of the operation. i.e. getItem
7701
+ * @param {Record<string, unknown>} [params] optionally pass in id, inputs, cleanup
7702
+ * @returns {string} Identifier of the new stack entry
7703
+ * @memberof OperationStack
7704
+ */
7705
+ OperationStack.prototype.start = function (type, params) {
7706
+ var op = {
7707
+ type: type,
7708
+ id: getWithDefault$1(params, "id", createId(type + "_")),
7709
+ inputs: getWithDefault$1(params, "inputs", {}),
7710
+ cleanup: getWithDefault$1(params, "cleanup", "n/a"),
7711
+ startedAt: new Date().getTime(),
7712
+ state: "working"
7713
+ };
7714
+ this.operations.push(op);
7715
+ return op.id;
7716
+ };
7717
+ /**
7718
+ * Returns a reference to an Operation
7719
+ *
7720
+ * @param {string} id Unique Identifier
7721
+ * @returns {Operation}
7722
+ * @memberof OperationStack
7723
+ */
7724
+ OperationStack.prototype.getOperation = function (id) {
7725
+ return this.operations.find(function (o) { return o.id === id; });
7726
+ };
7727
+ /**
7728
+ * Returns reference to the operations array
7729
+ *
7730
+ * @returns {Operation[]}
7731
+ * @memberof OperationStack
7732
+ */
7733
+ OperationStack.prototype.getOperations = function () {
7734
+ return this.operations;
7735
+ };
7736
+ /**
7737
+ * Inform the stack that an operation has finished.
7738
+ *
7739
+ * This will append in a duration property, and mark
7740
+ * the state as 'completed'.
7741
+ *
7742
+ * @param {string} id Unique identifier of the Operation
7743
+ * @param {Record<string, unknown>} [options] outputs
7744
+ * @memberof OperationStack
7745
+ */
7746
+ OperationStack.prototype.finish = function (id, options) {
7747
+ var op = this.getOperation(id);
7748
+ if (op) {
7749
+ op.duration = new Date().getTime() - op.startedAt;
7750
+ op.state = "completed";
7751
+ if (options) {
7752
+ op.output = cloneObject$1(options);
7753
+ }
7754
+ }
7755
+ else {
7756
+ throw new Error("No operation with id " + id + " present in stack");
7757
+ }
7758
+ };
7759
+ /**
7760
+ * Merge a serialized operation stack into
7761
+ * a stack instance
7762
+ *
7763
+ * ```js
7764
+ * import { OperationStack } from '@esri/solution-common';
7765
+ * function someFunction() {
7766
+ * const stack = new OperationStack();
7767
+ * stack.start('getItem', {id: 'get-bc3'});
7768
+ * // do some work...
7769
+ * stack.finish('get-bc3');
7770
+ *
7771
+ * const itm = {title: 'Fake Item', type: 'Web Map'};
7772
+ * // create an entry for the function we are about to call...
7773
+ * stack.start('createItem', {id: 'createItem_01', inputs: {item: itm}});
7774
+ * // call a function that does work, and has it's own stack
7775
+ * // and returns a serialized version as part of it's results
7776
+ * return createItem(itm)
7777
+ * .then((result) => {
7778
+ * // tell the stack the last operation finished...
7779
+ * stack.finish('createItem_01');
7780
+ * // merge in the stack from the function we called
7781
+ * stack.merge(result.stack);
7782
+ * // > stack.getCompleted().length === 3
7783
+ * });
7784
+ * }
7785
+ *
7786
+ * function createItem (itm) {
7787
+ * const otherStack = new OperationStack();
7788
+ * const id = otherStack.start('createItem');
7789
+ * // make calls to create item etc
7790
+ * otherStack.finish(id, {itemId: newItem.id});
7791
+ * otherStack.start('protectItem', {id: 'protect-00c'});
7792
+ * // make call to protect item...
7793
+ * otherStack.finish('protect-00c');
7794
+ * // all done... return a result with a stack
7795
+ * return Promise.resolve({
7796
+ * success:true,
7797
+ * stack: otherStack.serialize()
7798
+ * });
7799
+ * }
7800
+ * ```
7801
+ *
7802
+ * Typically used to create a comprehensive list of operations
7803
+ * when a function returns a `SerializedOperationStack` as part of
7804
+ * it's response
7805
+ *
7806
+ *
7807
+ * @param {ISerializedOperationStack} stack
7808
+ * @memberof OperationStack
7809
+ */
7810
+ OperationStack.prototype.merge = function (stack) {
7811
+ this.operations = __spreadArrays(this.operations, stack.operations);
7812
+ };
7813
+ /**
7814
+ * Get a list of the completed operations
7815
+ *
7816
+ * @returns {IOperation[]}
7817
+ * @memberof OperationStack
7818
+ */
7819
+ OperationStack.prototype.getCompleted = function () {
7820
+ return cloneObject$1(this.operations.filter(function (e) { return e.state === "completed"; }));
7821
+ };
7822
+ /**
7823
+ * Return an array of working operations
7824
+ *
7825
+ * @returns {IOperation[]}
7826
+ * @memberof OperationStack
7827
+ */
7828
+ OperationStack.prototype.getWorking = function () {
7829
+ return cloneObject$1(this.operations.filter(function (e) { return e.state === "working"; }));
7830
+ };
7831
+ /**
7832
+ * Serialize the completed operations into a set of
7833
+ * human readable messages, sorted by the startedAt timestamp
7834
+ *
7835
+ *
7836
+ * @returns {string}
7837
+ * @memberof IOperationStack
7838
+ */
7839
+ OperationStack.prototype.toString = function () {
7840
+ // sort the operations by StartedAt
7841
+ var allOps = this.operations.sort(function (a, b) {
7842
+ if (a.startedAt < b.startedAt) {
7843
+ return -1;
7844
+ }
7845
+ if (b.startedAt < a.startedAt) {
7846
+ return 1;
7847
+ }
7848
+ return 0;
7849
+ });
7850
+ return allOps.map(getOperationMessage).join("\n");
7851
+ };
7852
+ /**
7853
+ * Serialize the stack into simple objects
7854
+ *
7855
+ * @returns {ISerializedOperationStack}
7856
+ * @memberof OperationStack
7857
+ */
7858
+ OperationStack.prototype.serialize = function () {
7859
+ return {
7860
+ operations: cloneObject$1(this.getOperations())
7861
+ };
7862
+ };
7863
+ return OperationStack;
7864
+ }());
7865
+ function getOperationMessage(op) {
7866
+ var msg = op.startedAt + " : Operation " + op.id + " started with inputs " + JSON.stringify(op.inputs) + " but was not completed";
7867
+ if (op.state === "completed") {
7868
+ msg = op.startedAt + " : Operation " + op.id + " took " + op.duration + " ms with inputs " + JSON.stringify(op.inputs) + " and output " + (op.output ? JSON.stringify(op.output) : "n/a");
7869
+ }
7870
+ return msg;
7871
+ }
7872
+
7873
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
7874
+
7875
+ function createCommonjsModule(fn, basedir, module) {
7876
+ return module = {
7877
+ path: basedir,
7878
+ exports: {},
7879
+ require: function (path, base) {
7880
+ return commonjsRequire(path, (base === undefined || base === null) ? module.path : base);
7881
+ }
7882
+ }, fn(module, module.exports), module.exports;
7883
+ }
7884
+
7885
+ function commonjsRequire () {
7886
+ throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs');
7887
+ }
7888
+
7889
+ var util = createCommonjsModule(function (module, exports) {
7890
+ var getAllMatches = function(string, regex) {
7891
+ var matches = [];
7892
+ var match = regex.exec(string);
7893
+ while (match) {
7894
+ var allmatches = [];
7895
+ var len = match.length;
7896
+ for (var index = 0; index < len; index++) {
7897
+ allmatches.push(match[index]);
7898
+ }
7899
+ matches.push(allmatches);
7900
+ match = regex.exec(string);
7901
+ }
7902
+ return matches;
7903
+ };
7904
+
7905
+
7906
+ var doesMatch = function(string,regex){
7907
+ var match = regex.exec(string);
7908
+ if(match === null || typeof match === "undefined") return false;
7909
+ else return true;
7910
+ };
7911
+
7912
+ var doesNotMatch = function(string,regex){
7913
+ return !doesMatch(string,regex);
7914
+ };
7915
+
7916
+
7917
+ exports.isExist= function(v){
7918
+ return typeof v !== "undefined";
7919
+ };
7920
+
7921
+ exports.isEmptyObject= function(obj) {
7922
+ return Object.keys(obj).length === 0
7923
+ };
7924
+
7925
+ /**
7926
+ * Copy all the properties of a into b.
7927
+ * @param {*} target
7928
+ * @param {*} a
7929
+ */
7930
+ exports.merge =function (target,a){
7931
+ if(a){
7932
+ var keys = Object.keys(a); // will return an array of own properties
7933
+ var len = keys.length; //don't make it inline
7934
+ for(var i = 0; i < len; i++){
7935
+ target[keys[i]] = a[keys[i]] ;
7936
+ }
7937
+ }
7938
+ };
7939
+ /* exports.merge =function (b,a){
7940
+ return Object.assign(b,a);
7941
+ } */
7942
+
7943
+ exports.getValue = function (v){
7944
+ if(exports.isExist(v)){
7945
+ return v;
7946
+ }else {
7947
+ return "";
7948
+ }
7949
+ };
7950
+
7951
+ exports.doesMatch = doesMatch;
7952
+ exports.doesNotMatch = doesNotMatch;
7953
+ exports.getAllMatches = getAllMatches;
7954
+ });
7955
+
7956
+ var xmlNode = function(tagname,parent,val){
7957
+ this.tagname = tagname;
7958
+ this.parent = parent;
7959
+ this.child = [];//child tags
7960
+ this.attrsMap;//attributes map
7961
+ this.val = val;//text only
7962
+ this.addChild = function (child){
7963
+ this.child.push(child);
7964
+ };
7965
+ };
7966
+
7967
+ var he = createCommonjsModule(function (module, exports) {
7968
+ (function(root) {
7969
+
7970
+ // Detect free variables `exports`.
7971
+ var freeExports = exports;
7972
+
7973
+ // Detect free variable `module`.
7974
+ var freeModule = module &&
7975
+ module.exports == freeExports && module;
7976
+
7977
+ // Detect free variable `global`, from Node.js or Browserified code,
7978
+ // and use it as `root`.
7979
+ var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal;
7980
+ if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
7981
+ root = freeGlobal;
7982
+ }
7983
+
7984
+ /*--------------------------------------------------------------------------*/
7985
+
7986
+ // All astral symbols.
7987
+ var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
7988
+ // All ASCII symbols (not just printable ASCII) except those listed in the
7989
+ // first column of the overrides table.
7990
+ // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
7991
+ var regexAsciiWhitelist = /[\x01-\x7F]/g;
7992
+ // All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
7993
+ // code points listed in the first column of the overrides table on
7994
+ // https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.
7995
+ var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;
7996
+
7997
+ var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
7998
+ var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'};
7999
+
8000
+ var regexEscape = /["&'<>`]/g;
8001
+ var escapeMap = {
8002
+ '"': '&quot;',
8003
+ '&': '&amp;',
8004
+ '\'': '&#x27;',
8005
+ '<': '&lt;',
8006
+ // See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
8007
+ // following is not strictly necessary unless it’s part of a tag or an
8008
+ // unquoted attribute value. We’re only escaping it to support those
8009
+ // situations, and for XML support.
8010
+ '>': '&gt;',
8011
+ // In Internet Explorer ≤ 8, the backtick character can be used
8012
+ // to break out of (un)quoted attribute values or HTML comments.
8013
+ // See http://html5sec.org/#102, http://html5sec.org/#108, and
8014
+ // http://html5sec.org/#133.
8015
+ '`': '&#x60;'
8016
+ };
8017
+
8018
+ var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
8019
+ var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
8020
+ var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)([=a-zA-Z0-9])?/g;
8021
+ var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'};
8022
+ var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'};
8023
+ var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'};
8024
+ var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];
8025
+
8026
+ /*--------------------------------------------------------------------------*/
8027
+
8028
+ var stringFromCharCode = String.fromCharCode;
8029
+
8030
+ var object = {};
8031
+ var hasOwnProperty = object.hasOwnProperty;
8032
+ var has = function(object, propertyName) {
8033
+ return hasOwnProperty.call(object, propertyName);
8034
+ };
8035
+
8036
+ var contains = function(array, value) {
8037
+ var index = -1;
8038
+ var length = array.length;
8039
+ while (++index < length) {
8040
+ if (array[index] == value) {
8041
+ return true;
8042
+ }
8043
+ }
8044
+ return false;
8045
+ };
8046
+
8047
+ var merge = function(options, defaults) {
8048
+ if (!options) {
8049
+ return defaults;
8050
+ }
8051
+ var result = {};
8052
+ var key;
8053
+ for (key in defaults) {
8054
+ // A `hasOwnProperty` check is not needed here, since only recognized
8055
+ // option names are used anyway. Any others are ignored.
8056
+ result[key] = has(options, key) ? options[key] : defaults[key];
8057
+ }
8058
+ return result;
8059
+ };
8060
+
8061
+ // Modified version of `ucs2encode`; see https://mths.be/punycode.
8062
+ var codePointToSymbol = function(codePoint, strict) {
8063
+ var output = '';
8064
+ if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
8065
+ // See issue #4:
8066
+ // “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
8067
+ // greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
8068
+ // REPLACEMENT CHARACTER.”
8069
+ if (strict) {
8070
+ parseError('character reference outside the permissible Unicode range');
8071
+ }
8072
+ return '\uFFFD';
8073
+ }
8074
+ if (has(decodeMapNumeric, codePoint)) {
8075
+ if (strict) {
8076
+ parseError('disallowed character reference');
8077
+ }
8078
+ return decodeMapNumeric[codePoint];
8079
+ }
8080
+ if (strict && contains(invalidReferenceCodePoints, codePoint)) {
8081
+ parseError('disallowed character reference');
8082
+ }
8083
+ if (codePoint > 0xFFFF) {
8084
+ codePoint -= 0x10000;
8085
+ output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
8086
+ codePoint = 0xDC00 | codePoint & 0x3FF;
8087
+ }
8088
+ output += stringFromCharCode(codePoint);
8089
+ return output;
8090
+ };
8091
+
8092
+ var hexEscape = function(codePoint) {
8093
+ return '&#x' + codePoint.toString(16).toUpperCase() + ';';
8094
+ };
8095
+
8096
+ var decEscape = function(codePoint) {
8097
+ return '&#' + codePoint + ';';
8098
+ };
8099
+
8100
+ var parseError = function(message) {
8101
+ throw Error('Parse error: ' + message);
8102
+ };
8103
+
8104
+ /*--------------------------------------------------------------------------*/
8105
+
8106
+ var encode = function(string, options) {
8107
+ options = merge(options, encode.options);
8108
+ var strict = options.strict;
8109
+ if (strict && regexInvalidRawCodePoint.test(string)) {
8110
+ parseError('forbidden code point');
8111
+ }
8112
+ var encodeEverything = options.encodeEverything;
8113
+ var useNamedReferences = options.useNamedReferences;
8114
+ var allowUnsafeSymbols = options.allowUnsafeSymbols;
8115
+ var escapeCodePoint = options.decimal ? decEscape : hexEscape;
8116
+
8117
+ var escapeBmpSymbol = function(symbol) {
8118
+ return escapeCodePoint(symbol.charCodeAt(0));
8119
+ };
8120
+
8121
+ if (encodeEverything) {
8122
+ // Encode ASCII symbols.
8123
+ string = string.replace(regexAsciiWhitelist, function(symbol) {
8124
+ // Use named references if requested & possible.
8125
+ if (useNamedReferences && has(encodeMap, symbol)) {
8126
+ return '&' + encodeMap[symbol] + ';';
8127
+ }
8128
+ return escapeBmpSymbol(symbol);
8129
+ });
8130
+ // Shorten a few escapes that represent two symbols, of which at least one
8131
+ // is within the ASCII range.
8132
+ if (useNamedReferences) {
8133
+ string = string
8134
+ .replace(/&gt;\u20D2/g, '&nvgt;')
8135
+ .replace(/&lt;\u20D2/g, '&nvlt;')
8136
+ .replace(/&#x66;&#x6A;/g, '&fjlig;');
8137
+ }
8138
+ // Encode non-ASCII symbols.
8139
+ if (useNamedReferences) {
8140
+ // Encode non-ASCII symbols that can be replaced with a named reference.
8141
+ string = string.replace(regexEncodeNonAscii, function(string) {
8142
+ // Note: there is no need to check `has(encodeMap, string)` here.
8143
+ return '&' + encodeMap[string] + ';';
8144
+ });
8145
+ }
8146
+ // Note: any remaining non-ASCII symbols are handled outside of the `if`.
8147
+ } else if (useNamedReferences) {
8148
+ // Apply named character references.
8149
+ // Encode `<>"'&` using named character references.
8150
+ if (!allowUnsafeSymbols) {
8151
+ string = string.replace(regexEscape, function(string) {
8152
+ return '&' + encodeMap[string] + ';'; // no need to check `has()` here
8153
+ });
8154
+ }
8155
+ // Shorten escapes that represent two symbols, of which at least one is
8156
+ // `<>"'&`.
8157
+ string = string
8158
+ .replace(/&gt;\u20D2/g, '&nvgt;')
8159
+ .replace(/&lt;\u20D2/g, '&nvlt;');
8160
+ // Encode non-ASCII symbols that can be replaced with a named reference.
8161
+ string = string.replace(regexEncodeNonAscii, function(string) {
8162
+ // Note: there is no need to check `has(encodeMap, string)` here.
8163
+ return '&' + encodeMap[string] + ';';
8164
+ });
8165
+ } else if (!allowUnsafeSymbols) {
8166
+ // Encode `<>"'&` using hexadecimal escapes, now that they’re not handled
8167
+ // using named character references.
8168
+ string = string.replace(regexEscape, escapeBmpSymbol);
8169
+ }
8170
+ return string
8171
+ // Encode astral symbols.
8172
+ .replace(regexAstralSymbols, function($0) {
8173
+ // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
8174
+ var high = $0.charCodeAt(0);
8175
+ var low = $0.charCodeAt(1);
8176
+ var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
8177
+ return escapeCodePoint(codePoint);
8178
+ })
8179
+ // Encode any remaining BMP symbols that are not printable ASCII symbols
8180
+ // using a hexadecimal escape.
8181
+ .replace(regexBmpWhitelist, escapeBmpSymbol);
8182
+ };
8183
+ // Expose default options (so they can be overridden globally).
8184
+ encode.options = {
8185
+ 'allowUnsafeSymbols': false,
8186
+ 'encodeEverything': false,
8187
+ 'strict': false,
8188
+ 'useNamedReferences': false,
8189
+ 'decimal' : false
8190
+ };
8191
+
8192
+ var decode = function(html, options) {
8193
+ options = merge(options, decode.options);
8194
+ var strict = options.strict;
8195
+ if (strict && regexInvalidEntity.test(html)) {
8196
+ parseError('malformed character reference');
8197
+ }
8198
+ return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) {
8199
+ var codePoint;
8200
+ var semicolon;
8201
+ var decDigits;
8202
+ var hexDigits;
8203
+ var reference;
8204
+ var next;
8205
+ if ($1) {
8206
+ // Decode decimal escapes, e.g. `&#119558;`.
8207
+ decDigits = $1;
8208
+ semicolon = $2;
8209
+ if (strict && !semicolon) {
8210
+ parseError('character reference was not terminated by a semicolon');
8211
+ }
8212
+ codePoint = parseInt(decDigits, 10);
8213
+ return codePointToSymbol(codePoint, strict);
8214
+ }
8215
+ if ($3) {
8216
+ // Decode hexadecimal escapes, e.g. `&#x1D306;`.
8217
+ hexDigits = $3;
8218
+ semicolon = $4;
8219
+ if (strict && !semicolon) {
8220
+ parseError('character reference was not terminated by a semicolon');
8221
+ }
8222
+ codePoint = parseInt(hexDigits, 16);
8223
+ return codePointToSymbol(codePoint, strict);
8224
+ }
8225
+ if ($5) {
8226
+ // Decode named character references with trailing `;`, e.g. `&copy;`.
8227
+ reference = $5;
8228
+ if (has(decodeMap, reference)) {
8229
+ return decodeMap[reference];
8230
+ } else {
8231
+ // Ambiguous ampersand. https://mths.be/notes/ambiguous-ampersands
8232
+ if (strict) {
8233
+ parseError(
8234
+ 'named character reference was not terminated by a semicolon'
8235
+ );
8236
+ }
8237
+ return $0;
8238
+ }
8239
+ }
8240
+ // If we’re still here, it’s a legacy reference for sure. No need for an
8241
+ // extra `if` check.
8242
+ // Decode named character references without trailing `;`, e.g. `&amp`
8243
+ // This is only a parse error if it gets converted to `&`, or if it is
8244
+ // followed by `=` in an attribute context.
8245
+ reference = $6;
8246
+ next = $7;
8247
+ if (next && options.isAttributeValue) {
8248
+ if (strict && next == '=') {
8249
+ parseError('`&` did not start a character reference');
8250
+ }
8251
+ return $0;
8252
+ } else {
8253
+ if (strict) {
8254
+ parseError(
8255
+ 'named character reference was not terminated by a semicolon'
8256
+ );
8257
+ }
8258
+ // Note: there is no need to check `has(decodeMapLegacy, reference)`.
8259
+ return decodeMapLegacy[reference] + (next || '');
8260
+ }
8261
+ });
8262
+ };
8263
+ // Expose default options (so they can be overridden globally).
8264
+ decode.options = {
8265
+ 'isAttributeValue': false,
8266
+ 'strict': false
8267
+ };
8268
+
8269
+ var escape = function(string) {
8270
+ return string.replace(regexEscape, function($0) {
8271
+ // Note: there is no need to check `has(escapeMap, $0)` here.
8272
+ return escapeMap[$0];
8273
+ });
8274
+ };
8275
+
8276
+ /*--------------------------------------------------------------------------*/
8277
+
8278
+ var he = {
8279
+ 'version': '1.1.1',
8280
+ 'encode': encode,
8281
+ 'decode': decode,
8282
+ 'escape': escape,
8283
+ 'unescape': decode
8284
+ };
8285
+
8286
+ // Some AMD build optimizers, like r.js, check for specific condition patterns
8287
+ // like the following:
8288
+ if (freeExports && !freeExports.nodeType) {
8289
+ if (freeModule) { // in Node.js, io.js, or RingoJS v0.8.0+
8290
+ freeModule.exports = he;
8291
+ } else { // in Narwhal or RingoJS v0.7.0-
8292
+ for (var key in he) {
8293
+ has(he, key) && (freeExports[key] = he[key]);
8294
+ }
8295
+ }
8296
+ } else { // in Rhino or a web browser
8297
+ root.he = he;
8298
+ }
8299
+
8300
+ }(commonjsGlobal));
8301
+ });
8302
+
8303
+ var TagType = {"OPENING":1, "CLOSING":2, "SELF":3, "CDATA": 4};
8304
+
8305
+ //var tagsRegx = new RegExp("<(\\/?[\\w:\\-\._]+)([^>]*)>(\\s*"+cdataRegx+")*([^<]+)?","g");
8306
+ //var tagsRegx = new RegExp("<(\\/?)((\\w*:)?([\\w:\\-\._]+))([^>]*)>([^<]*)("+cdataRegx+"([^<]*))*([^<]+)?","g");
8307
+
8308
+ //treat cdata as a tag
8309
+
8310
+
8311
+ var defaultOptions = {
8312
+ attributeNamePrefix : "@_",
8313
+ attrNodeName: false,
8314
+ textNodeName : "#text",
8315
+ ignoreAttributes : true,
8316
+ ignoreNameSpace : false,
8317
+ allowBooleanAttributes : false, //a tag can have attributes without any value
8318
+ //ignoreRootElement : false,
8319
+ parseNodeValue : true,
8320
+ parseAttributeValue : false,
8321
+ arrayMode : false,
8322
+ trimValues: true, //Trim string values of tag and attributes
8323
+ decodeHTMLchar: false,
8324
+ cdataTagName: false,
8325
+ cdataPositionChar: "\\c"
8326
+ //decodeStrict: false,
8327
+ };
8328
+
8329
+ var getTraversalObj =function (xmlData,options){
8330
+ //options = buildOptions(options);
8331
+ options = Object.assign({},defaultOptions,options);
8332
+ //xmlData = xmlData.replace(/\r?\n/g, " ");//make it single line
8333
+ xmlData = xmlData.replace(/<!--[\s\S]*?-->/g, "");//Remove comments
8334
+
8335
+ var xmlObj = new xmlNode('!xml');
8336
+ var currentNode = xmlObj;
8337
+
8338
+ var tagsRegx = new RegExp("<((!\\[CDATA\\[([\\s\\S]*?)(\\]\\]>))|(([\\w:\\-\\._]*:)?([\\w:\\-\\._]+))([^>]*)>|((\\/)(([\\w:\\-\\._]*:)?([\\w:\\-\\._]+))>))([^<]*)","g");
8339
+ var tag = tagsRegx.exec(xmlData);
8340
+ var nextTag = tagsRegx.exec(xmlData);
8341
+ while (tag) {
8342
+ var tagType = checkForTagType(tag);
8343
+
8344
+ if(tagType === TagType.CLOSING){
8345
+ //add parsed data to parent node
8346
+ if(currentNode.parent && tag[14]){
8347
+ currentNode.parent.val = util.getValue(currentNode.parent.val) + "" + processTagValue(tag[14],options);
8348
+ }
8349
+
8350
+ currentNode = currentNode.parent;
8351
+ }else if(tagType === TagType.CDATA){
8352
+ if(options.cdataTagName){
8353
+ //add cdata node
8354
+ var childNode = new xmlNode( options.cdataTagName,currentNode,tag[3]);
8355
+ childNode.attrsMap = buildAttributesMap(tag[8],options);
8356
+ currentNode.addChild(childNode);
8357
+ //for backtracking
8358
+ currentNode.val = util.getValue(currentNode.val) + options.cdataPositionChar;
8359
+ //add rest value to parent node
8360
+ if(tag[14]){
8361
+ currentNode.val += processTagValue(tag[14],options);
8362
+ }
8363
+ }else {
8364
+ currentNode.val = (currentNode.val || "") + (tag[3] || "") + processTagValue(tag[14],options);
8365
+ }
8366
+ }else if(tagType === TagType.SELF){
8367
+ var childNode = new xmlNode( options.ignoreNameSpace ? tag[7] : tag[5],currentNode, "");
8368
+ if(tag[8] && tag[8].length > 1){
8369
+ tag[8] = tag[8].substr(0,tag[8].length -1);
8370
+ }
8371
+ childNode.attrsMap = buildAttributesMap(tag[8],options);
8372
+ currentNode.addChild(childNode);
8373
+ }else {//TagType.OPENING
8374
+ var childNode = new xmlNode( options.ignoreNameSpace ? tag[7] : tag[5],currentNode,processTagValue(tag[14],options));
8375
+ childNode.attrsMap = buildAttributesMap(tag[8],options);
8376
+ currentNode.addChild(childNode);
8377
+ currentNode = childNode;
8378
+ }
8379
+
8380
+ tag = nextTag;
8381
+ nextTag = tagsRegx.exec(xmlData);
8382
+ }
8383
+
8384
+ return xmlObj;
8385
+ };
8386
+
8387
+ function processTagValue(val,options){
8388
+ if(val){
8389
+ if(options.trimValues){
8390
+ val = val.trim();
8391
+ }
8392
+ if(options.decodeHTMLchar){
8393
+ val = he.decode(val);
8394
+ }
8395
+ val = parseValue(val,options.parseNodeValue);
8396
+ }
8397
+
8398
+ return val;
8399
+ }
8400
+
8401
+ function checkForTagType(match){
8402
+ if(match[4] === "]]>"){
8403
+ return TagType.CDATA;
8404
+ }else if(match[10] === "/"){
8405
+ return TagType.CLOSING;
8406
+ }else if(typeof match[8] !== "undefined" && match[8].substr(match[8].length-1) === "/"){
8407
+ return TagType.SELF;
8408
+ }else {
8409
+ return TagType.OPENING;
8410
+ }
8411
+ }
8412
+
8413
+ var xml2json = function (xmlData,options){
8414
+ options = Object.assign({},defaultOptions,options);
8415
+ return convertToJson(getTraversalObj(xmlData,options), options);
8416
+ };
8417
+
8418
+ function resolveNameSpace(tagname,options){
8419
+ if(options.ignoreNameSpace ){
8420
+ var tags = tagname.split(":");
8421
+ var prefix = tagname.charAt(0) === "/" ? "/" : "";
8422
+ if(tags[0] === "xmlns") {
8423
+ return "";
8424
+ }
8425
+ if(tags.length === 2) {
8426
+ tagname = prefix + tags[1];
8427
+ }
8428
+ }
8429
+ return tagname;
8430
+ }
8431
+
8432
+ function parseValue(val,shouldParse){
8433
+ if(shouldParse && typeof val === "string"){
8434
+ if(val.trim() === "" || isNaN(val)){
8435
+ val = val === "true" ? true : val === "false" ? false : val;
8436
+ }else {
8437
+ if(val.indexOf(".") !== -1){
8438
+ val = Number.parseFloat(val);
8439
+ }else {
8440
+ val = Number.parseInt(val,10);
8441
+ }
8442
+ }
8443
+ return val;
8444
+ }else {
8445
+ if(util.isExist(val)) return val;
8446
+ else return "";
8447
+ }
8448
+ }
8449
+
8450
+ //TODO: change regex to capture NS
8451
+ //var attrsRegx = new RegExp("([\\w\\-\\.\\:]+)\\s*=\\s*(['\"])((.|\n)*?)\\2","gm");
8452
+ var attrsRegx = new RegExp("([^\\s=]+)\\s*(=\\s*(['\"])(.*?)\\3)?","g");
8453
+ function buildAttributesMap(attrStr,options){
8454
+ if( !options.ignoreAttributes && typeof attrStr === "string" ){
8455
+ attrStr = attrStr.replace(/\r?\n/g, " ");
8456
+ //attrStr = attrStr || attrStr.trim();
8457
+
8458
+ var matches = util.getAllMatches(attrStr,attrsRegx);
8459
+ var len = matches.length; //don't make it inline
8460
+ var attrs = {};
8461
+ for (var i = 0; i < len ; i++) {
8462
+ var attrName = resolveNameSpace(matches[i][1],options);
8463
+ if(attrName.length) {
8464
+ if(matches[i][4] !== undefined){
8465
+ if(options.trimValues){
8466
+ matches[i][4] = matches[i][4].trim();
8467
+ }
8468
+ if(options.decodeHTMLchar){
8469
+ matches[i][4] = he.decode(matches[i][4], {isAttributeValue : true});
8470
+ }
8471
+ attrs[options.attributeNamePrefix + attrName] = parseValue(matches[i][4],options.parseAttributeValue);
8472
+ }else if(options.allowBooleanAttributes){
8473
+ attrs[options.attributeNamePrefix + attrName] = true;
8474
+ }
8475
+
8476
+ }
8477
+ }
8478
+ if(!Object.keys(attrs).length){
8479
+ return;
8480
+ }
8481
+ if(options.attrNodeName){
8482
+ var attrCollection = {};
8483
+ attrCollection[options.attrNodeName] = attrs;
8484
+ return attrCollection;
8485
+ }
8486
+ return attrs;
8487
+ }
8488
+ }
8489
+
8490
+ var convertToJson = function (node, options){
8491
+ var jObj = {};
8492
+
8493
+ //traver through all the children
8494
+ for (var index = 0; index < node.child.length; index++) {
8495
+ var prop = node.child[index].tagname;
8496
+ var obj = convertToJson(node.child[index],options);
8497
+ if(typeof jObj[prop] !== "undefined"){
8498
+ if(!Array.isArray(jObj[prop])){
8499
+ var swap = jObj[prop];
8500
+ jObj[prop] = [];
8501
+ jObj[prop].push(swap);
8502
+ }
8503
+ jObj[prop].push(obj);
8504
+ }else {
8505
+ jObj[prop] = options.arrayMode ? [obj] : obj;
8506
+ }
8507
+ }
8508
+ util.merge(jObj,node.attrsMap);
8509
+ //add attrsMap as new children
8510
+ if(util.isEmptyObject(jObj)){
8511
+ return util.isExist(node.val)? node.val : "";
8512
+ }else {
8513
+ if(util.isExist(node.val)){
8514
+ if(!(typeof node.val === "string" && (node.val === "" || node.val === options.cdataPositionChar))){
8515
+ jObj[options.textNodeName] = node.val;
8516
+ }
8517
+ }
8518
+ }
8519
+ //add value
8520
+ return jObj;
8521
+ };
8522
+
8523
+ var parse$1 = xml2json;
8524
+ var getTraversalObj_1 = getTraversalObj;
8525
+ var convertToJson_1 = convertToJson;
8526
+
8527
+ var x2j = {
8528
+ parse: parse$1,
8529
+ getTraversalObj: getTraversalObj_1,
8530
+ convertToJson: convertToJson_1
8531
+ };
8532
+
8533
+ var parse = x2j.parse;
8534
+
8535
+ function parseMetadataXml(metadataXml) {
8536
+ var opts = {
8537
+ // options for fastXmlParser to read tag attrs
8538
+ ignoreAttributes: false,
8539
+ attributeNamePrefix: "@_",
8540
+ textNodeName: "#value",
8541
+ };
8542
+ return parse(metadataXml, opts);
8543
+ }
8544
+ /**
8545
+ * Fetch an [item's metadata](https://doc.arcgis.com/en/arcgis-online/manage-data/metadata.htm) from a portal
8546
+ * and parse and return it as JSON
8547
+ * @param id item id
8548
+ * @param requestOptions
8549
+ */
8550
+ function fetchContentMetadata(id, requestOptions) {
8551
+ return getItemMetadata(id, requestOptions)
8552
+ .then(function (metadataXml) { return parseMetadataXml(metadataXml); })
8553
+ .catch(function () {
8554
+ // many items don't have metadata and the request will 404
8555
+ // in these cases we don't want to treat it as an error
8556
+ // content.metadata === null signals to consumers that
8557
+ // we attempted to fetch the metadata, but it doesn't exist
8558
+ // TODO: we should probably still throw the error if it's not a 404
8559
+ return null;
8560
+ });
8561
+ }
8562
+ var enrichGroupIds = function (input) {
8563
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8564
+ var opId = stack.start("enrichGroupIds");
8565
+ return getItemGroups(data.item.id, requestOptions)
8566
+ .then(function (response) {
8567
+ var admin = response.admin, member = response.member, other = response.other;
8568
+ var groupIds = __spreadArrays(admin, member, other).map(function (group) { return group.id; });
8569
+ stack.finish(opId);
8570
+ return {
8571
+ data: __assign(__assign({}, data), { groupIds: groupIds }),
8572
+ stack: stack,
8573
+ requestOptions: requestOptions,
8574
+ };
8575
+ })
8576
+ .catch(function (error) { return handleEnrichmentError(error, input, opId); });
8577
+ };
8578
+ var enrichMetadata = function (input) {
8579
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8580
+ var opId = stack.start("enrichMetadata");
8581
+ return fetchContentMetadata(data.item.id, requestOptions).then(function (metadata) {
8582
+ stack.finish(opId);
8583
+ return {
8584
+ data: __assign(__assign({}, data), { metadata: metadata }),
8585
+ stack: stack,
8586
+ requestOptions: requestOptions,
8587
+ };
8588
+ });
8589
+ // TODO: currently fetchContentMetadata will never throw, but
8590
+ // if we update it to throw for non-404 errors, need to uncomment this:
8591
+ // .catch((error) => handleEnrichmentError(error, input, opId));
8592
+ };
8593
+ var enrichOwnerUser = function (input) {
8594
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8595
+ var opId = stack.start("enrichOwner");
8596
+ // w/o the : any here, I get a compile error about
8597
+ // .authentication being incompatible w/ UserSession
8598
+ var options = __assign({ username: data.item.owner }, requestOptions);
8599
+ return getUser(options)
8600
+ .then(function (ownerUser) {
8601
+ stack.finish(opId);
8602
+ return {
8603
+ data: __assign(__assign({}, data), { ownerUser: ownerUser }),
8604
+ stack: stack,
8605
+ requestOptions: requestOptions,
8606
+ };
8607
+ })
8608
+ .catch(function (error) { return handleEnrichmentError(error, input, opId); });
8609
+ };
8610
+ var enrichData = function (input) {
8611
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8612
+ var opId = stack.start("enrichData");
8613
+ return getItemData(data.item.id, requestOptions)
8614
+ .then(function (itemData) {
8615
+ stack.finish(opId);
8616
+ return { data: __assign(__assign({}, data), { data: itemData }), stack: stack, requestOptions: requestOptions };
8617
+ })
8618
+ .catch(function (error) { return handleEnrichmentError(error, input, opId); });
8619
+ };
8620
+ var enrichServer = function (input) {
8621
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8622
+ var opId = stack.start("enrichServer");
8623
+ var url = data.item.url;
8624
+ var options = __assign(__assign({}, requestOptions), { url: url });
8625
+ return getService(options)
8626
+ .then(function (server) {
8627
+ stack.finish(opId);
8628
+ return { data: __assign(__assign({}, data), { server: server }), stack: stack, requestOptions: requestOptions };
8629
+ })
8630
+ .catch(function (error) { return handleEnrichmentError(error, input, opId); });
8631
+ };
8632
+ var enrichLayers = function (input) {
8633
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8634
+ var opId = stack.start("enrichLayers");
8635
+ var url = data.item.url;
8636
+ var options = __assign(__assign({}, requestOptions), { url: url });
8637
+ return (getAllLayersAndTables(options)
8638
+ // merge layers and tables into a single array
8639
+ // and filter out any group layers
8640
+ .then(function (response) {
8641
+ var merged = __spreadArrays(response.layers, response.tables);
8642
+ return merged.filter(function (layer) { return layer.type !== "Group Layer"; });
8643
+ })
8644
+ .then(function (layers) {
8645
+ stack.finish(opId);
8646
+ return { data: __assign(__assign({}, data), { layers: layers }), stack: stack, requestOptions: requestOptions };
8647
+ })
8648
+ .catch(function (error) { return handleEnrichmentError(error, input, opId); }));
8649
+ };
8650
+ // add the error to the content.errors,
8651
+ // log current stack operation as finished with an error
8652
+ // and return output that can be piped into the next operation
8653
+ var handleEnrichmentError = function (error, input, opId) {
8654
+ var data = input.data, stack = input.stack, requestOptions = input.requestOptions;
8655
+ stack.finish(opId, { error: error });
8656
+ var message = typeof error === "string"
8657
+ ? /* istanbul ignore next our tests only throw Error objects */
8658
+ error
8659
+ : error.message;
8660
+ var errors = data.errors || [];
8661
+ errors.push({
8662
+ // NOTE: for now we just return the message and type "Other"
8663
+ // but we could later introspect for HTTP or AGO errors
8664
+ // and/or return the status code if available
8665
+ type: "Other",
8666
+ message: message,
8667
+ });
8668
+ return { data: __assign(__assign({}, data), { errors: errors }), stack: stack, requestOptions: requestOptions };
8669
+ };
8670
+ var enrichmentOperations = {
8671
+ groupIds: enrichGroupIds,
8672
+ metadata: enrichMetadata,
8673
+ ownerUser: enrichOwnerUser,
8674
+ // TOOD: org
8675
+ data: enrichData,
8676
+ server: enrichServer,
8677
+ layers: enrichLayers,
8678
+ };
8679
+ /**
8680
+ * Fetch enrichments for an item
8681
+ * @param item
8682
+ * @param enrichments the list of enrichments to fetch
8683
+ * @param requestOptions
8684
+ * @returns an object with the item and enrichments
8685
+ * @private
8686
+ */
8687
+ var fetchItemEnrichments = function (item, enrichments, requestOptions) {
8688
+ // create a pipeline of enrichment operations
8689
+ var operations = enrichments.reduce(function (ops, enrichment) {
8690
+ var operation = enrichmentOperations[enrichment];
8691
+ // only include the enrichments that we know how to fetch
8692
+ operation && ops.push(operation);
8693
+ return ops;
8694
+ }, []);
8695
+ var pipeline = createOperationPipeline(operations);
8696
+ // execute pipeline and return the item and enrichments
8697
+ return pipeline({
8698
+ data: { item: item },
8699
+ stack: new OperationStack(),
8700
+ requestOptions: requestOptions,
8701
+ }).then(function (output) { return output.data; });
8702
+ };
8703
+
8704
+ /**
8705
+ * remote server error
8706
+ */
8707
+ var RemoteServerError = /** @class */ (function (_super) {
8708
+ __extends(RemoteServerError, _super);
8709
+ function RemoteServerError(message, url, status) {
8710
+ var _this = _super.call(this, message) || this;
8711
+ _this.status = status;
8712
+ _this.url = url;
8713
+ return _this;
8714
+ }
8715
+ return RemoteServerError;
8716
+ }(Error));
8717
+ /**
8718
+ * ```js
8719
+ * import { hubApiRequest } from "@esri/hub-common";
8720
+ * //
8721
+ * hubApiRequest(
8722
+ * "/datasets",
8723
+ * requestOptions
8724
+ * })
8725
+ * .then(response);
8726
+ * ```
8727
+ * make a request to the Hub API
8728
+ * @param route API route
8729
+ * @param requestOptions request options
8730
+ */
8731
+ function hubApiRequest(route, requestOptions) {
8732
+ // merge in default request options
8733
+ var options = __assign({
8734
+ // why do we default to GET w/ our API?
8735
+ httpMethod: "GET" }, requestOptions);
8736
+ // use fetch override if any
8737
+ var _fetch = options.fetch || fetch;
8738
+ // merge in default headers
8739
+ var headers = __assign({ "Content-Type": "application/json" }, options.headers);
8740
+ // build query params/body based on requestOptions.params
8741
+ var query;
8742
+ var body;
8743
+ if (options.httpMethod === "GET") {
8744
+ // pass params in query string
8745
+ query = options.params;
8746
+ }
8747
+ else {
8748
+ // pass params in request body
8749
+ body = JSON.stringify(options.params);
8750
+ }
8751
+ // build Hub API URL
8752
+ var url = buildUrl({
8753
+ host: getHubApiUrl(options),
8754
+ path: ("/api/v3/" + route).replace(/\/\//g, "/"),
8755
+ query: query,
8756
+ });
8757
+ return _fetch(url, {
8758
+ method: options.httpMethod,
8759
+ headers: headers,
8760
+ body: body,
8761
+ }).then(function (resp) {
8762
+ if (resp.ok) {
8763
+ return resp.json();
8764
+ }
8765
+ else {
8766
+ throw new RemoteServerError(resp.statusText, url, resp.status);
8767
+ }
8768
+ });
8769
+ }
8770
+
8771
+ // TODO: need to fetch data for client-side layer views as well
8772
+ // determine if we should fetch data for an item
8773
+ var shouldFetchData = function (item) {
8774
+ var type = normalizeItemType(item);
8775
+ var family = getFamily(type);
8776
+ var dataFamilies = ["template", "solution"];
8777
+ var dataTypes = ["Web Map", "Web Scene"];
8778
+ return includes(dataFamilies, family) || includes(dataTypes, type);
8779
+ };
8780
+ /**
8781
+ * get the default list of enrichments to fetch for content
8782
+ * @param item
8783
+ * @returns the default list of enrichments to fetch for content
8784
+ * @private
8785
+ */
8786
+ var getContentEnrichments = function (item) {
8787
+ // we fetch these enrichments for all content types
8788
+ var enrichments = [
8789
+ "groupIds",
8790
+ "metadata",
8791
+ "ownerUser",
8792
+ "org",
8793
+ ];
8794
+ // we only fetch data for certain content
8795
+ if (shouldFetchData(item)) {
8796
+ enrichments.push("data");
8797
+ }
8798
+ // we fetch server and layers for map and feature services
8799
+ return isMapOrFeatureServerUrl(item.url)
8800
+ ? enrichments.concat("server", "layers")
8801
+ : enrichments;
8802
+ };
8803
+ // build up request options to only include the above enrichments
8804
+ // that we fetch from the Hub API, and to optionally filter by slug
8805
+ var getHubEnrichmentsOptions = function (requestOptions, slug) {
8806
+ var opts = cloneObject$1(requestOptions);
8807
+ opts.params = __assign(__assign({}, opts.params), { "fields[datasets]": "slug,boundary,extent,searchDescription,statistics" });
8808
+ if (slug) {
8809
+ opts.params["filter[slug]"] = slug;
8810
+ }
8811
+ return opts;
8812
+ };
8813
+ // extract the ids and enrichments from the Hub API response
8814
+ var getDatasetEnrichments = function (dataset) {
8815
+ var _a = parseDatasetId(dataset.id), itemId = _a.itemId, layerIdString = _a.layerId;
8816
+ var layerId = layerIdString && parseInt(layerIdString, 10);
8817
+ var _b = dataset.attributes, slug = _b.slug, boundary = _b.boundary, extent = _b.extent, searchDescription = _b.searchDescription, statistics = _b.statistics;
8818
+ return {
8819
+ itemId: itemId,
8820
+ layerId: layerId,
8821
+ slug: slug,
8822
+ boundary: boundary,
8823
+ extent: extent,
8824
+ searchDescription: searchDescription,
8825
+ statistics: statistics,
8826
+ };
8827
+ };
8828
+ /**
8829
+ * fetch enrichment from the Hub API by slug
8830
+ * @param slug
8831
+ * @param requestOptions
8832
+ * @returns enrichments from the Hub API (slug, boundary, statistic, etc)
8833
+ * @private
8834
+ */
8835
+ var fetchHubEnrichmentsBySlug = function (slug, requestOptions) { return __awaiter(void 0, void 0, void 0, function () {
8836
+ var response;
8837
+ return __generator(this, function (_a) {
8838
+ switch (_a.label) {
8839
+ case 0: return [4 /*yield*/, hubApiRequest("/datasets", getHubEnrichmentsOptions(requestOptions, slug))];
8840
+ case 1:
8841
+ response = _a.sent();
8842
+ return [2 /*return*/, getDatasetEnrichments(response.data[0])];
8843
+ }
8844
+ });
8845
+ }); };
8846
+ /**
8847
+ * fetch enrichment from the Hub API by id
8848
+ * @param slug
8849
+ * @param requestOptions
8850
+ * @returns enrichments from the Hub API (slug, boundary, statistic, etc)
8851
+ * @private
8852
+ */
8853
+ var fetchHubEnrichmentsById = function (hubId, requestOptions) { return __awaiter(void 0, void 0, void 0, function () {
8854
+ var response;
8855
+ return __generator(this, function (_a) {
8856
+ switch (_a.label) {
8857
+ case 0: return [4 /*yield*/, hubApiRequest("/datasets/" + hubId, getHubEnrichmentsOptions(requestOptions))];
8858
+ case 1:
8859
+ response = _a.sent();
8860
+ return [2 /*return*/, getDatasetEnrichments(response.data)];
8861
+ }
8862
+ });
8863
+ }); };
8864
+
8865
+ var fetchItemAndEnrichments = function (itemId, options) { return __awaiter(void 0, void 0, void 0, function () {
8866
+ var item, enrichmentsToFetch, enrichments;
8867
+ return __generator(this, function (_a) {
8868
+ switch (_a.label) {
8869
+ case 0: return [4 /*yield*/, getItem(itemId, options)];
8870
+ case 1:
8871
+ item = _a.sent();
8872
+ enrichmentsToFetch = (options === null || options === void 0 ? void 0 : options.enrichments) || getContentEnrichments(item);
8873
+ return [4 /*yield*/, fetchItemEnrichments(item, enrichmentsToFetch, options)];
8874
+ case 2:
8875
+ enrichments = _a.sent();
8876
+ return [2 /*return*/, __assign(__assign({}, enrichments), { item: item })];
8877
+ }
8878
+ });
8879
+ }); };
8880
+ var fetchContentById = function (hubId, options) { return __awaiter(void 0, void 0, void 0, function () {
8881
+ var itemId, _a, item, itemEnrichments, specifiedLayerId, _b, slug, layerId, boundary, extent, searchDescription, statistics, _c;
8882
+ return __generator(this, function (_d) {
8883
+ switch (_d.label) {
8884
+ case 0:
8885
+ itemId = parseDatasetId(hubId).itemId;
8886
+ return [4 /*yield*/, fetchItemAndEnrichments(itemId, options)];
8887
+ case 1:
8888
+ _a = _d.sent(), item = _a.item, itemEnrichments = __rest(_a, ["item"]);
8889
+ specifiedLayerId = options && !isNil(options.layerId) && options.layerId;
8890
+ if (!canUseHubApiForItem(item, options)) return [3 /*break*/, 3];
8891
+ return [4 /*yield*/, fetchHubEnrichmentsById(hubId, options)];
8892
+ case 2:
8893
+ _c = _d.sent();
8894
+ return [3 /*break*/, 4];
8895
+ case 3:
8896
+ _c = {};
8897
+ _d.label = 4;
8898
+ case 4:
8899
+ _b = _c, slug = _b.slug, layerId = _b.layerId, boundary = _b.boundary, extent = _b.extent, searchDescription = _b.searchDescription, statistics = _b.statistics;
8900
+ // return a new content object composed from the item and enrichments we fetched
8901
+ return [2 /*return*/, composeContent(item, __assign(__assign({ requestOptions: options }, itemEnrichments), { slug: slug, layerId: specifiedLayerId || layerId, boundary: boundary,
8902
+ extent: extent,
8903
+ searchDescription: searchDescription,
8904
+ statistics: statistics }))];
8905
+ }
8906
+ });
8907
+ }); };
8908
+ var fetchContentBySlug = function (fullyQualifiedSlug, options) { return __awaiter(void 0, void 0, void 0, function () {
8909
+ var hubEnrichments, itemId, layerId, _a, item, itemEnrichments, specifiedLayerId, slug, boundary, extent, searchDescription, statistics;
8910
+ return __generator(this, function (_b) {
8911
+ switch (_b.label) {
8912
+ case 0: return [4 /*yield*/, fetchHubEnrichmentsBySlug(fullyQualifiedSlug, options)];
8913
+ case 1:
8914
+ hubEnrichments = _b.sent();
8915
+ itemId = hubEnrichments.itemId;
8916
+ layerId = hubEnrichments.layerId;
8917
+ return [4 /*yield*/, fetchItemAndEnrichments(itemId, options)];
8918
+ case 2:
8919
+ _a = _b.sent(), item = _a.item, itemEnrichments = __rest(_a, ["item"]);
8920
+ specifiedLayerId = options && !isNil(options.layerId) && options.layerId;
8921
+ if (!(specifiedLayerId && specifiedLayerId !== layerId)) return [3 /*break*/, 4];
8922
+ // we fetched Hub enrichments by slug for another dataset,
8923
+ // most likely for the parent service of this layer,
8924
+ // we need to fetch them for the specified layer instead
8925
+ layerId = specifiedLayerId;
8926
+ return [4 /*yield*/, fetchHubEnrichmentsById(itemId + "_" + layerId, options)];
8927
+ case 3:
8928
+ hubEnrichments = _b.sent();
8929
+ _b.label = 4;
8930
+ case 4:
8931
+ slug = hubEnrichments.slug, boundary = hubEnrichments.boundary, extent = hubEnrichments.extent, searchDescription = hubEnrichments.searchDescription, statistics = hubEnrichments.statistics;
8932
+ // return a new content object composed from the item and enrichments we fetched
8933
+ return [2 /*return*/, composeContent(item, __assign(__assign({ requestOptions: options }, itemEnrichments), { layerId: layerId,
8934
+ slug: slug,
8935
+ boundary: boundary,
8936
+ extent: extent,
8937
+ searchDescription: searchDescription,
8938
+ statistics: statistics }))];
8939
+ }
8940
+ });
8941
+ }); };
8942
+ /**
8943
+ * Fetch enriched content from the Portal and Hub APIs.
8944
+ * @param identifier content slug or id
8945
+ * @param options Request options with additional options to control how the content or enrichments are fetched
8946
+ * @returns A content object composed of the backing item and enrichments
8947
+ *
8948
+ * ```js
8949
+ * import { fetchContent } from '@esri/hub-common'
8950
+ * // fetch content by slug
8951
+ * const content = await fetchContent('my-org::item-name')
8952
+ * ```
8953
+ */
8954
+ var fetchContent = function (identifier, options) {
8955
+ return isSlug(identifier)
8956
+ ? fetchContentBySlug(addContextToSlug(identifier, options === null || options === void 0 ? void 0 : options.siteOrgKey), options)
8957
+ : fetchContentById(identifier, options);
8958
+ };
8959
+
8960
+ // TODO: remove this at next breaking version
8961
+ /**
8962
+ * ```js
8963
+ * import { getCategory } from "@esri/hub-common";
8964
+ * //
8965
+ * getCategory('Feature Layer')
8966
+ * > 'dataset'
8967
+ * ```
8968
+ * **DEPRECATED: Use getCollection() instead**
8969
+ * returns the Hub category for a given item type
8970
+ * @param itemType The ArcGIS [item type](https://developers.arcgis.com/rest/users-groups-and-items/items-and-item-types.htm).
8971
+ * @returns the category of a given item type.
8972
+ */
8973
+ function getCategory(itemType) {
8974
+ if (itemType === void 0) { itemType = ""; }
8975
+ /* tslint:disable no-console */
8976
+ console.warn("DEPRECATED: Use getCollection() instead. getCategory will be removed at v10.0.0");
8977
+ /* tslint:enable no-console */
8978
+ var collection = getCollection(itemType);
8979
+ // for backwards compatibility
8980
+ return collection === "feedback" ? "app" : collection;
8981
+ }
8982
+ /**
8983
+ * ```js
8984
+ * import { getTypes } from "@esri/hub-common";
8985
+ * //
8986
+ * getTypes('site')
8987
+ * > [ 'hub site application' ]
8988
+ * ```
8989
+ * To do.
8990
+ * @param category The ArcGIS Hub category.
8991
+ * @returns all the item types for the given category.
8992
+ *
8993
+ */
8994
+ function getTypes(category) {
8995
+ if (category === void 0) { category = ""; }
8996
+ return categories[category.toLowerCase()];
8997
+ }
8998
+ /**
8999
+ * ```js
9000
+ * import { getTypeCategories } from "@esri/hub-common";
9001
+ * //
9002
+ * getTypeCategories(item)
9003
+ * > [ 'Hub Site Application' ]
9004
+ * ```
9005
+ * @param item Item object.
9006
+ * @returns typeCategory of the input item.
9007
+ *
9008
+ */
9009
+ function getTypeCategories(item) {
9010
+ if (item === void 0) { item = {}; }
9011
+ var type = normalizeItemType(item);
9012
+ var category = getCategory(type);
9013
+ if (category) {
9014
+ // upper case first letter and return as element in array for backwards compatibility
9015
+ var chars = Array.from(category);
9016
+ chars[0] = chars[0].toUpperCase();
9017
+ return [chars.join("")];
9018
+ }
9019
+ else {
9020
+ return ["Other"];
9021
+ }
9022
+ }
9023
+ /**
9024
+ * ```js
9025
+ * import { getContentIdentifier } from "@esri/hub-common";
9026
+ * //
9027
+ * getContentIdentifier(content, site)
9028
+ * > 'f12hhjk32' // id
9029
+ * // OR
9030
+ * > 'content-slug' // human-readable slug
9031
+ * ```
9032
+ * Returns the preferred identifier for a piece of content (determined by content type):
9033
+ * - Content from the 'template' and 'feedback' families return the standard id field
9034
+ * - Pages that are linked to the site parameter will return the slug defined by the site. Otherwise, the page id will be returned
9035
+ * - All other content will return the highest available item in the following hierarchy:
9036
+ * 1. slug - includes org prefix if the site parameter is a portal or has an orgKey different from the slug prefix
9037
+ * 2. hubId
9038
+ * 3. id
9039
+ * @param content The IHubContent item
9040
+ * @param site The site to compare content against
9041
+ * @returns the preferred id for the given content.
9042
+ */
9043
+ function getContentIdentifier(content, site) {
9044
+ // We don't currently support slugs for hub initiative templates, solutions or surveys
9045
+ if (includes(["template", "feedback"], content.family)) {
9046
+ return content.id;
9047
+ }
9048
+ // If it is a hub page linked to a site, return the page slug at the
9049
+ // site data instead. Because this one is the original one that was used
9050
+ // to create the page url (not mutable once created) and the slug (below)
9051
+ // generated by the hub-indexer could simply change with page name.
9052
+ if (isPageType(content.type)) {
9053
+ // check if the page is linked to the current site
9054
+ var pages = getProp(site, "data.values.pages") || [];
9055
+ // if so, return the page slug otherwise the page id
9056
+ var page = pages.find(function (p) { return p.id === content.id; });
9057
+ return page ? page.slug : content.id;
9058
+ }
9059
+ // If a slug is present, always return it
9060
+ if (content.slug) {
9061
+ var slug = void 0;
9062
+ var orgKey = getProp(site, "domainInfo.orgKey");
9063
+ // Use namespaced slug when on the umbrella site
9064
+ if (getProp(site, "data.values.isUmbrella")) {
9065
+ slug = content.slug;
9066
+ }
9067
+ else {
9068
+ // Use shortened slug if the slug's namespace is the same as the orgKey
9069
+ slug = removeContextFromSlug(content.slug, orgKey);
9070
+ }
9071
+ return slug;
9072
+ }
9073
+ return content.hubId || content.id;
9074
+ }
9075
+ /**
9076
+ * DEPRECATED: Use getFamily() instead.
9077
+ *
9078
+ * get the HubType for a given item or item type
9079
+ *
9080
+ * @param itemOrType an item or item.type
9081
+ */
9082
+ function getItemHubType(itemOrType) {
9083
+ /* tslint:disable no-console */
9084
+ console.warn("DEPRECATED: Use getFamily() instead. getItemHubType() will be removed at v10.0.0");
9085
+ /* tslint:enable no-console */
9086
+ if (typeof itemOrType === "string") {
9087
+ itemOrType = { type: itemOrType };
9088
+ }
9089
+ var itemType = normalizeItemType(itemOrType);
9090
+ // TODO: not all categories are Hub types, may need to validate
9091
+ return getCollection(itemType);
9092
+ }
9093
+ /**
9094
+ * Convert a Portal item to Hub content
9095
+ *
9096
+ * @param item Portal Item
9097
+ * @returns Hub content
9098
+ * @export
9099
+ */
9100
+ function itemToContent(item) {
9101
+ return composeContent(item);
9102
+ }
9103
+ /**
9104
+ * Convert a Hub API dataset resource to Hub Content
7533
9105
  *
7534
9106
  * @param {DatasetResource} Dataset resource
7535
9107
  * @returns {IHubContent} Hub content object
@@ -7545,7 +9117,7 @@
7545
9117
  // map and feature server enrichments
7546
9118
  server = _a.server, layers = _a.layers, layer = _a.layer, recordCount = _a.recordCount, statistics = _a.statistics,
7547
9119
  // additional attributes needed
7548
- searchDescription = _a.searchDescription;
9120
+ extent = _a.extent, searchDescription = _a.searchDescription;
7549
9121
  // get the layerId from the layer
7550
9122
  var layerId = layer && layer.id;
7551
9123
  // re-assemble the org as an enrichment
@@ -7555,7 +9127,7 @@
7555
9127
  extent: orgExtent,
7556
9128
  };
7557
9129
  // compose a content out of the above
7558
- var content = composeContent(item, {
9130
+ return composeContent(item, {
7559
9131
  layerId: layerId,
7560
9132
  slug: slug,
7561
9133
  errors: errors,
@@ -7567,14 +9139,10 @@
7567
9139
  layers: layers,
7568
9140
  recordCount: recordCount,
7569
9141
  boundary: boundary,
9142
+ extent: extent,
9143
+ searchDescription: searchDescription,
7570
9144
  statistics: statistics,
7571
9145
  });
7572
- // TODO: need to add searchDescription logic to composeContent()
7573
- if (searchDescription) {
7574
- // overwrite default summary (from snippet) w/ search description
7575
- content.summary = searchDescription;
7576
- }
7577
- return content;
7578
9146
  }
7579
9147
  /**
7580
9148
  * Convert a Hub API dataset resource to a portal item
@@ -9772,14 +11340,14 @@
9772
11340
  return clone;
9773
11341
  }
9774
11342
 
9775
- var HUB_PROJECT_ITEM_TYPE = "Web Mapping Application";
11343
+ var HUB_PROJECT_ITEM_TYPE = "Hub Project";
9776
11344
  /**
9777
11345
  * Default values of a IHubProject
9778
11346
  */
9779
11347
  var DEFAULT_PROJECT = {
9780
11348
  name: "No title provided",
9781
11349
  tags: [],
9782
- typeKeywords: ["IHubProject", "HubProject"],
11350
+ typeKeywords: ["Hub Project"],
9783
11351
  status: "inactive",
9784
11352
  };
9785
11353
  /**
@@ -10251,73 +11819,6 @@
10251
11819
  return HubProjectManager;
10252
11820
  }());
10253
11821
 
10254
- /**
10255
- * remote server error
10256
- */
10257
- var RemoteServerError = /** @class */ (function (_super) {
10258
- __extends(RemoteServerError, _super);
10259
- function RemoteServerError(message, url, status) {
10260
- var _this = _super.call(this, message) || this;
10261
- _this.status = status;
10262
- _this.url = url;
10263
- return _this;
10264
- }
10265
- return RemoteServerError;
10266
- }(Error));
10267
- /**
10268
- * ```js
10269
- * import { hubApiRequest } from "@esri/hub-common";
10270
- * //
10271
- * hubApiRequest(
10272
- * "/datasets",
10273
- * requestOptions
10274
- * })
10275
- * .then(response);
10276
- * ```
10277
- * make a request to the Hub API
10278
- * @param route API route
10279
- * @param requestOptions request options
10280
- */
10281
- function hubApiRequest(route, requestOptions) {
10282
- // merge in default request options
10283
- var options = __assign({
10284
- // why do we default to GET w/ our API?
10285
- httpMethod: "GET" }, requestOptions);
10286
- // use fetch override if any
10287
- var _fetch = options.fetch || fetch;
10288
- // merge in default headers
10289
- var headers = __assign({ "Content-Type": "application/json" }, options.headers);
10290
- // build query params/body based on requestOptions.params
10291
- var query;
10292
- var body;
10293
- if (options.httpMethod === "GET") {
10294
- // pass params in query string
10295
- query = options.params;
10296
- }
10297
- else {
10298
- // pass params in request body
10299
- body = JSON.stringify(options.params);
10300
- }
10301
- // build Hub API URL
10302
- var url = buildUrl({
10303
- host: getHubApiUrl(options),
10304
- path: ("/api/v3/" + route).replace(/\/\//g, "/"),
10305
- query: query,
10306
- });
10307
- return _fetch(url, {
10308
- method: options.httpMethod,
10309
- headers: headers,
10310
- body: body,
10311
- }).then(function (resp) {
10312
- if (resp.ok) {
10313
- return resp.json();
10314
- }
10315
- else {
10316
- throw new RemoteServerError(resp.statusText, url, resp.status);
10317
- }
10318
- });
10319
- }
10320
-
10321
11822
  /**
10322
11823
  * Add a token to the resource request if the request is to the portal
10323
11824
  * @param {string} url Resource Url
@@ -12575,475 +14076,216 @@
12575
14076
  /**
12576
14077
  * Gets the primary input Feature Service for the given
12577
14078
  * Form ID. This will be the Fieldworker view, if it exists,
12578
- * otherwise the source Feature Service.
12579
- * @param {string} formId The Form ID
12580
- * @param requestOptions The request options
12581
- * @returns {Promise<IModel>}
12582
- */
12583
- var getInputFeatureServiceModel = function (formId, requestOptions) {
12584
- return getRelatedItems(__assign({ id: formId, relationshipType: "Survey2Service", direction: "forward" }, requestOptions)).then(function (_a) {
12585
- var featureService = _a.relatedItems[0];
12586
- var model;
12587
- if (featureService) {
12588
- model = { item: featureService };
12589
- }
12590
- return model;
12591
- });
12592
- };
12593
-
12594
- /* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
12595
- * Apache-2.0 */
12596
- /**
12597
- * Fetches a Survey's source Feature Service from a given
12598
- * Fieldworker View ID
12599
- * @param {string} fieldworkerId The Fieldworker View ID
12600
- * @param {IRequestOptions} requestOptions The request options
12601
- * @returns {Promise<IModel>}
12602
- */
12603
- var getSourceFeatureServiceModelFromFieldworker = function (fieldworkerId, requestOptions) {
12604
- return getRelatedItems(__assign({ id: fieldworkerId, relationshipType: "Service2Data", direction: "forward" }, requestOptions)).then(function (_a) {
12605
- var featureService = _a.relatedItems[0];
12606
- var model;
12607
- if (featureService) {
12608
- model = { item: featureService };
12609
- }
12610
- return model;
12611
- });
12612
- };
12613
-
12614
- /* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
12615
- * Apache-2.0 */
12616
- /**
12617
- * Fetches a Survey's Stakeholder View for a given
12618
- * Form ID
12619
- * @param {string} formId A Form ID
12620
- * @param {IRequestOptions} requestOptions The request options
12621
- * @returns {Promise<IModel>}
12622
- */
12623
- var getStakeholderModel = function (formId, requestOptions) {
12624
- return getRelatedItems(__assign({ id: formId, relationshipType: "Survey2Data", direction: "forward" }, requestOptions)).then(function (_a) {
12625
- var stakeholderView = _a.relatedItems[0];
12626
- var model;
12627
- if (stakeholderView) {
12628
- model = { item: stakeholderView };
12629
- }
12630
- return model;
12631
- });
12632
- };
12633
-
12634
- /**
12635
- * Determines if the provided Feature Service item is a
12636
- * Fieldworker View
12637
- * @param {IItem} featureServiceItem
12638
- * @returns {boolean}
12639
- */
12640
- function isFieldworkerView(featureServiceItem) {
12641
- var hasTypekeyword = function (typeKeyword) {
12642
- return featureServiceItem.typeKeywords.indexOf(typeKeyword) > -1;
12643
- };
12644
- // Survey123 only recently added the "FieldworkerView" typekeyword
12645
- var isFieldworker = hasTypekeyword("FieldworkerView");
12646
- // we should support previously created fieldworkers too
12647
- if (!isFieldworker) {
12648
- var hasExpectedTypeKeywords = [
12649
- "Survey123",
12650
- "Feature Service",
12651
- "View Service",
12652
- ].every(hasTypekeyword);
12653
- isFieldworker =
12654
- hasExpectedTypeKeywords && !hasTypekeyword("StakeholderView");
12655
- }
12656
- return isFieldworker;
12657
- }
12658
-
12659
- /* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
12660
- * Apache-2.0 */
12661
- /**
12662
- * Builds a dictionary of Survey items for the given Form model
12663
- * @param {string} formId The Form ID of the survey
12664
- * @param {IRequestOptions} requestOptions The request options
12665
- * @returns {Promise<IGetSurveyModelsResponse>}
12666
- */
12667
- var getSurveyModels = function (formItemOrId, requestOptions) {
12668
- var fieldworker;
12669
- var stakeholder;
12670
- var getForm = function () {
12671
- return typeof formItemOrId === "string"
12672
- ? getItem(formItemOrId, requestOptions)
12673
- : Promise.resolve(formItemOrId);
12674
- };
12675
- return getForm().then(function (form) {
12676
- var promises = [
12677
- // the primary input will be the fieldworker (if it exists), otherwise
12678
- // the source feature service.
12679
- getInputFeatureServiceModel(form.id, requestOptions),
12680
- getStakeholderModel(form.id, requestOptions),
12681
- ];
12682
- return Promise.all(promises)
12683
- .then(function (_a) {
12684
- var featureServiceOrFieldworkerModelResult = _a[0], stakeholderResult = _a[1];
12685
- stakeholder = stakeholderResult;
12686
- if (featureServiceOrFieldworkerModelResult &&
12687
- isFieldworkerView(featureServiceOrFieldworkerModelResult.item)) {
12688
- fieldworker = featureServiceOrFieldworkerModelResult;
12689
- // if the primary input is the fieldworker, fetch
12690
- // the source feature service
12691
- return getSourceFeatureServiceModelFromFieldworker(fieldworker.item.id, requestOptions);
12692
- }
12693
- else {
12694
- return featureServiceOrFieldworkerModelResult;
12695
- }
12696
- })
12697
- .then(function (featureService) {
12698
- return {
12699
- form: { item: form },
12700
- featureService: featureService,
12701
- fieldworker: fieldworker,
12702
- stakeholder: stakeholder,
12703
- };
12704
- });
14079
+ * otherwise the source Feature Service.
14080
+ * @param {string} formId The Form ID
14081
+ * @param requestOptions The request options
14082
+ * @returns {Promise<IModel>}
14083
+ */
14084
+ var getInputFeatureServiceModel = function (formId, requestOptions) {
14085
+ return getRelatedItems(__assign({ id: formId, relationshipType: "Survey2Service", direction: "forward" }, requestOptions)).then(function (_a) {
14086
+ var featureService = _a.relatedItems[0];
14087
+ var model;
14088
+ if (featureService) {
14089
+ model = { item: featureService };
14090
+ }
14091
+ return model;
12705
14092
  });
12706
14093
  };
12707
14094
 
14095
+ /* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
14096
+ * Apache-2.0 */
12708
14097
  /**
12709
- * Hub class can be used as an entry point to managing
12710
- * content, teams, sites, projects etc, in an organization's Hub.
12711
- *
12712
- * ```js
12713
- * import {Hub} from '@esri/hub-common';
12714
- * // create a Hub instance, authenticating as a specific user
12715
- * // working against arcgis online
12716
- * const myHub = await Hub.create({authOptions: {username: "casey", password: "jones"}});
12717
- *
12718
- * myHub.context.currentUser //=> {username: "casey", ...} as IUser
12719
- *
12720
- * const pavingProject = await myHub.projects.create({name: "12th Street Paving"});
12721
- * pavingProject.summary = "This is the 2024 planned paving of 12th Street, between 8th and 11th Ave";
12722
- * await myHub.projects.update(pavingProject);
12723
- * ```
12724
- *
12725
- * This is a convenience class. Hub Managers can be created
12726
- * directly, or the underlying functions can be imported an used
12727
- * as need for scenarios where these class structures introduce
12728
- * unwanted complexity
14098
+ * Fetches a Survey's source Feature Service from a given
14099
+ * Fieldworker View ID
14100
+ * @param {string} fieldworkerId The Fieldworker View ID
14101
+ * @param {IRequestOptions} requestOptions The request options
14102
+ * @returns {Promise<IModel>}
12729
14103
  */
12730
- var Hub = /** @class */ (function () {
12731
- /**
12732
- * Private so we can employ a factory function to do
12733
- * async work during creation
12734
- * @param contextManager
12735
- */
12736
- function Hub(contextManager) {
12737
- this._contextManager = contextManager;
12738
- }
12739
- /**
12740
- * Factory function to construct a new Hub instance.
12741
- * @param contextManager
12742
- * @returns
12743
- */
12744
- Hub.create = function (options) {
12745
- return __awaiter(this, void 0, void 0, function () {
12746
- var opts, mgr;
12747
- return __generator(this, function (_a) {
12748
- switch (_a.label) {
12749
- case 0:
12750
- if (!options.contextManager) return [3 /*break*/, 1];
12751
- return [2 /*return*/, new Hub(options.contextManager)];
12752
- case 1:
12753
- opts = options.managerOptions || {};
12754
- return [4 /*yield*/, ArcGISContextManager.create(opts)];
12755
- case 2:
12756
- mgr = _a.sent();
12757
- return [2 /*return*/, new Hub(mgr)];
12758
- }
12759
- });
12760
- });
12761
- };
12762
- Object.defineProperty(Hub.prototype, "context", {
12763
- /**
12764
- * Getter to abstract the context manager
12765
- */
12766
- get: function () {
12767
- return this._contextManager.context;
12768
- },
12769
- enumerable: false,
12770
- configurable: true
12771
- });
12772
- Object.defineProperty(Hub.prototype, "projects", {
12773
- /**
12774
- * HubProjectManager for the current Hub
12775
- * @returns
12776
- */
12777
- get: function () {
12778
- if (!this._projectManager) {
12779
- this._projectManager = HubProjectManager.init(this._contextManager);
12780
- }
12781
- return this._projectManager;
12782
- },
12783
- enumerable: false,
12784
- configurable: true
14104
+ var getSourceFeatureServiceModelFromFieldworker = function (fieldworkerId, requestOptions) {
14105
+ return getRelatedItems(__assign({ id: fieldworkerId, relationshipType: "Service2Data", direction: "forward" }, requestOptions)).then(function (_a) {
14106
+ var featureService = _a.relatedItems[0];
14107
+ var model;
14108
+ if (featureService) {
14109
+ model = { item: featureService };
14110
+ }
14111
+ return model;
12785
14112
  });
12786
- return Hub;
12787
- }());
14113
+ };
12788
14114
 
12789
- /* Copyright (c) 2018-2020 Environmental Systems Research Institute, Inc.
14115
+ /* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
12790
14116
  * Apache-2.0 */
12791
14117
  /**
12792
- * Allows an application to track a series of operations, storing information
12793
- * about the arguments passes in and the results returned
12794
- *
12795
- * ```js
12796
- * import { OperationStack } from '@esri/solution-common';
12797
- *
12798
- * const stack = new OperationStack();
12799
- *
12800
- * // start an operation by type
12801
- * const id = stack.start('getItem');
12802
- * //.. work happens...
12803
- * stack.finish(id);
12804
- *
12805
- * // start an operation with an Operation object
12806
- * stack.start({
12807
- * id: 'createItem_1',
12808
- * type: 'createItem',
12809
- * inputs: {
12810
- * item: {...truncated...},
12811
- * portal: 'https://www.arcgis.com',
12812
- * username: 'jsmith'
12813
- * },
12814
- * });
12815
- * // make the call
12816
- * stack.finish('createItem_1', {newItemId: '00cf213'});
12817
- *
12818
- * // later you can get that information back out of the stack
12819
- * const prevOp = stack.getOperation('createItem_1);
12820
- *
12821
- * // and if you need to roll back you can use the
12822
- * // .cleanup and .output properties to help orchestrate
12823
- *
12824
- * ```
12825
- *
12826
- *
12827
- * Can be used to implement "atomic" operations in an environment that does not
12828
- * have this as a core feature
14118
+ * Fetches a Survey's Stakeholder View for a given
14119
+ * Form ID
14120
+ * @param {string} formId A Form ID
14121
+ * @param {IRequestOptions} requestOptions The request options
14122
+ * @returns {Promise<IModel>}
12829
14123
  */
12830
- var OperationStack = /** @class */ (function () {
12831
- /**
12832
- * Creates an instance of OperationStack.
12833
- * @memberof OperationStack
12834
- */
12835
- function OperationStack() {
12836
- this.operations = [];
12837
- }
12838
- /**
12839
- * Start an Operation
12840
- *
12841
- * ```js
12842
- * const stack = new OperationStack();
12843
- * stack.startOperation({
12844
- * id: 'get-bc3',
12845
- * type: 'getItem',
12846
- * cleanup: 'n/a',
12847
- * inputs: {
12848
- * id: 'bc3',
12849
- * owner: 'vader'
12850
- * }
12851
- * });
12852
- * // do work
12853
- * stack.finish('get-bc3');
12854
- * ```
12855
- *
12856
- *
12857
- * @param {IOperation} operation
12858
- * @memberof OperationStack
12859
- */
12860
- OperationStack.prototype.startOperation = function (operation) {
12861
- var op = cloneObject$1(operation);
12862
- op.startedAt = new Date().getTime();
12863
- op.state = "working";
12864
- this.operations.push(op);
12865
- };
12866
- /**
12867
- * Start an operation without requiring a full operation
12868
- *
12869
- * ```js
12870
- * const opId = stack.start('getItems');
12871
- * //...work happens
12872
- * stack.finish(opId);
12873
- * ```
12874
- *
12875
- * @param {string} type Type of the operation. i.e. getItem
12876
- * @param {Record<string, unknown>} [params] optionally pass in id, inputs, cleanup
12877
- * @returns {string} Identifier of the new stack entry
12878
- * @memberof OperationStack
12879
- */
12880
- OperationStack.prototype.start = function (type, params) {
12881
- var op = {
12882
- type: type,
12883
- id: getWithDefault$1(params, "id", createId(type + "_")),
12884
- inputs: getWithDefault$1(params, "inputs", {}),
12885
- cleanup: getWithDefault$1(params, "cleanup", "n/a"),
12886
- startedAt: new Date().getTime(),
12887
- state: "working"
12888
- };
12889
- this.operations.push(op);
12890
- return op.id;
12891
- };
12892
- /**
12893
- * Returns a reference to an Operation
12894
- *
12895
- * @param {string} id Unique Identifier
12896
- * @returns {Operation}
12897
- * @memberof OperationStack
12898
- */
12899
- OperationStack.prototype.getOperation = function (id) {
12900
- return this.operations.find(function (o) { return o.id === id; });
12901
- };
12902
- /**
12903
- * Returns reference to the operations array
12904
- *
12905
- * @returns {Operation[]}
12906
- * @memberof OperationStack
12907
- */
12908
- OperationStack.prototype.getOperations = function () {
12909
- return this.operations;
12910
- };
12911
- /**
12912
- * Inform the stack that an operation has finished.
12913
- *
12914
- * This will append in a duration property, and mark
12915
- * the state as 'completed'.
12916
- *
12917
- * @param {string} id Unique identifier of the Operation
12918
- * @param {Record<string, unknown>} [options] outputs
12919
- * @memberof OperationStack
12920
- */
12921
- OperationStack.prototype.finish = function (id, options) {
12922
- var op = this.getOperation(id);
12923
- if (op) {
12924
- op.duration = new Date().getTime() - op.startedAt;
12925
- op.state = "completed";
12926
- if (options) {
12927
- op.output = cloneObject$1(options);
12928
- }
12929
- }
12930
- else {
12931
- throw new Error("No operation with id " + id + " present in stack");
14124
+ var getStakeholderModel = function (formId, requestOptions) {
14125
+ return getRelatedItems(__assign({ id: formId, relationshipType: "Survey2Data", direction: "forward" }, requestOptions)).then(function (_a) {
14126
+ var stakeholderView = _a.relatedItems[0];
14127
+ var model;
14128
+ if (stakeholderView) {
14129
+ model = { item: stakeholderView };
12932
14130
  }
14131
+ return model;
14132
+ });
14133
+ };
14134
+
14135
+ /**
14136
+ * Determines if the provided Feature Service item is a
14137
+ * Fieldworker View
14138
+ * @param {IItem} featureServiceItem
14139
+ * @returns {boolean}
14140
+ */
14141
+ function isFieldworkerView(featureServiceItem) {
14142
+ var hasTypekeyword = function (typeKeyword) {
14143
+ return featureServiceItem.typeKeywords.indexOf(typeKeyword) > -1;
12933
14144
  };
12934
- /**
12935
- * Merge a serialized operation stack into
12936
- * a stack instance
12937
- *
12938
- * ```js
12939
- * import { OperationStack } from '@esri/solution-common';
12940
- * function someFunction() {
12941
- * const stack = new OperationStack();
12942
- * stack.start('getItem', {id: 'get-bc3'});
12943
- * // do some work...
12944
- * stack.finish('get-bc3');
12945
- *
12946
- * const itm = {title: 'Fake Item', type: 'Web Map'};
12947
- * // create an entry for the function we are about to call...
12948
- * stack.start('createItem', {id: 'createItem_01', inputs: {item: itm}});
12949
- * // call a function that does work, and has it's own stack
12950
- * // and returns a serialized version as part of it's results
12951
- * return createItem(itm)
12952
- * .then((result) => {
12953
- * // tell the stack the last operation finished...
12954
- * stack.finish('createItem_01');
12955
- * // merge in the stack from the function we called
12956
- * stack.merge(result.stack);
12957
- * // > stack.getCompleted().length === 3
12958
- * });
12959
- * }
12960
- *
12961
- * function createItem (itm) {
12962
- * const otherStack = new OperationStack();
12963
- * const id = otherStack.start('createItem');
12964
- * // make calls to create item etc
12965
- * otherStack.finish(id, {itemId: newItem.id});
12966
- * otherStack.start('protectItem', {id: 'protect-00c'});
12967
- * // make call to protect item...
12968
- * otherStack.finish('protect-00c');
12969
- * // all done... return a result with a stack
12970
- * return Promise.resolve({
12971
- * success:true,
12972
- * stack: otherStack.serialize()
12973
- * });
12974
- * }
12975
- * ```
12976
- *
12977
- * Typically used to create a comprehensive list of operations
12978
- * when a function returns a `SerializedOperationStack` as part of
12979
- * it's response
12980
- *
12981
- *
12982
- * @param {ISerializedOperationStack} stack
12983
- * @memberof OperationStack
12984
- */
12985
- OperationStack.prototype.merge = function (stack) {
12986
- this.operations = __spreadArrays(this.operations, stack.operations);
12987
- };
12988
- /**
12989
- * Get a list of the completed operations
12990
- *
12991
- * @returns {IOperation[]}
12992
- * @memberof OperationStack
12993
- */
12994
- OperationStack.prototype.getCompleted = function () {
12995
- return cloneObject$1(this.operations.filter(function (e) { return e.state === "completed"; }));
12996
- };
12997
- /**
12998
- * Return an array of working operations
12999
- *
13000
- * @returns {IOperation[]}
13001
- * @memberof OperationStack
13002
- */
13003
- OperationStack.prototype.getWorking = function () {
13004
- return cloneObject$1(this.operations.filter(function (e) { return e.state === "working"; }));
14145
+ // Survey123 only recently added the "FieldworkerView" typekeyword
14146
+ var isFieldworker = hasTypekeyword("FieldworkerView");
14147
+ // we should support previously created fieldworkers too
14148
+ if (!isFieldworker) {
14149
+ var hasExpectedTypeKeywords = [
14150
+ "Survey123",
14151
+ "Feature Service",
14152
+ "View Service",
14153
+ ].every(hasTypekeyword);
14154
+ isFieldworker =
14155
+ hasExpectedTypeKeywords && !hasTypekeyword("StakeholderView");
14156
+ }
14157
+ return isFieldworker;
14158
+ }
14159
+
14160
+ /* Copyright (c) 2020 Environmental Systems Research Institute, Inc.
14161
+ * Apache-2.0 */
14162
+ /**
14163
+ * Builds a dictionary of Survey items for the given Form model
14164
+ * @param {string} formId The Form ID of the survey
14165
+ * @param {IRequestOptions} requestOptions The request options
14166
+ * @returns {Promise<IGetSurveyModelsResponse>}
14167
+ */
14168
+ var getSurveyModels = function (formItemOrId, requestOptions) {
14169
+ var fieldworker;
14170
+ var stakeholder;
14171
+ var getForm = function () {
14172
+ return typeof formItemOrId === "string"
14173
+ ? getItem(formItemOrId, requestOptions)
14174
+ : Promise.resolve(formItemOrId);
13005
14175
  };
13006
- /**
13007
- * Serialize the completed operations into a set of
13008
- * human readable messages, sorted by the startedAt timestamp
13009
- *
13010
- *
13011
- * @returns {string}
13012
- * @memberof IOperationStack
13013
- */
13014
- OperationStack.prototype.toString = function () {
13015
- // sort the operations by StartedAt
13016
- var allOps = this.operations.sort(function (a, b) {
13017
- if (a.startedAt < b.startedAt) {
13018
- return -1;
14176
+ return getForm().then(function (form) {
14177
+ var promises = [
14178
+ // the primary input will be the fieldworker (if it exists), otherwise
14179
+ // the source feature service.
14180
+ getInputFeatureServiceModel(form.id, requestOptions),
14181
+ getStakeholderModel(form.id, requestOptions),
14182
+ ];
14183
+ return Promise.all(promises)
14184
+ .then(function (_a) {
14185
+ var featureServiceOrFieldworkerModelResult = _a[0], stakeholderResult = _a[1];
14186
+ stakeholder = stakeholderResult;
14187
+ if (featureServiceOrFieldworkerModelResult &&
14188
+ isFieldworkerView(featureServiceOrFieldworkerModelResult.item)) {
14189
+ fieldworker = featureServiceOrFieldworkerModelResult;
14190
+ // if the primary input is the fieldworker, fetch
14191
+ // the source feature service
14192
+ return getSourceFeatureServiceModelFromFieldworker(fieldworker.item.id, requestOptions);
13019
14193
  }
13020
- if (b.startedAt < a.startedAt) {
13021
- return 1;
14194
+ else {
14195
+ return featureServiceOrFieldworkerModelResult;
13022
14196
  }
13023
- return 0;
14197
+ })
14198
+ .then(function (featureService) {
14199
+ return {
14200
+ form: { item: form },
14201
+ featureService: featureService,
14202
+ fieldworker: fieldworker,
14203
+ stakeholder: stakeholder,
14204
+ };
13024
14205
  });
13025
- return allOps.map(getOperationMessage).join("\n");
13026
- };
14206
+ });
14207
+ };
14208
+
14209
+ /**
14210
+ * Hub class can be used as an entry point to managing
14211
+ * content, teams, sites, projects etc, in an organization's Hub.
14212
+ *
14213
+ * ```js
14214
+ * import {Hub} from '@esri/hub-common';
14215
+ * // create a Hub instance, authenticating as a specific user
14216
+ * // working against arcgis online
14217
+ * const myHub = await Hub.create({authOptions: {username: "casey", password: "jones"}});
14218
+ *
14219
+ * myHub.context.currentUser //=> {username: "casey", ...} as IUser
14220
+ *
14221
+ * const pavingProject = await myHub.projects.create({name: "12th Street Paving"});
14222
+ * pavingProject.summary = "This is the 2024 planned paving of 12th Street, between 8th and 11th Ave";
14223
+ * await myHub.projects.update(pavingProject);
14224
+ * ```
14225
+ *
14226
+ * This is a convenience class. Hub Managers can be created
14227
+ * directly, or the underlying functions can be imported an used
14228
+ * as need for scenarios where these class structures introduce
14229
+ * unwanted complexity
14230
+ */
14231
+ var Hub = /** @class */ (function () {
13027
14232
  /**
13028
- * Serialize the stack into simple objects
13029
- *
13030
- * @returns {ISerializedOperationStack}
13031
- * @memberof OperationStack
14233
+ * Private so we can employ a factory function to do
14234
+ * async work during creation
14235
+ * @param contextManager
13032
14236
  */
13033
- OperationStack.prototype.serialize = function () {
13034
- return {
13035
- operations: cloneObject$1(this.getOperations())
13036
- };
14237
+ function Hub(contextManager) {
14238
+ this._contextManager = contextManager;
14239
+ }
14240
+ /**
14241
+ * Factory function to construct a new Hub instance.
14242
+ * @param contextManager
14243
+ * @returns
14244
+ */
14245
+ Hub.create = function (options) {
14246
+ return __awaiter(this, void 0, void 0, function () {
14247
+ var opts, mgr;
14248
+ return __generator(this, function (_a) {
14249
+ switch (_a.label) {
14250
+ case 0:
14251
+ if (!options.contextManager) return [3 /*break*/, 1];
14252
+ return [2 /*return*/, new Hub(options.contextManager)];
14253
+ case 1:
14254
+ opts = options.managerOptions || {};
14255
+ return [4 /*yield*/, ArcGISContextManager.create(opts)];
14256
+ case 2:
14257
+ mgr = _a.sent();
14258
+ return [2 /*return*/, new Hub(mgr)];
14259
+ }
14260
+ });
14261
+ });
13037
14262
  };
13038
- return OperationStack;
14263
+ Object.defineProperty(Hub.prototype, "context", {
14264
+ /**
14265
+ * Getter to abstract the context manager
14266
+ */
14267
+ get: function () {
14268
+ return this._contextManager.context;
14269
+ },
14270
+ enumerable: false,
14271
+ configurable: true
14272
+ });
14273
+ Object.defineProperty(Hub.prototype, "projects", {
14274
+ /**
14275
+ * HubProjectManager for the current Hub
14276
+ * @returns
14277
+ */
14278
+ get: function () {
14279
+ if (!this._projectManager) {
14280
+ this._projectManager = HubProjectManager.init(this._contextManager);
14281
+ }
14282
+ return this._projectManager;
14283
+ },
14284
+ enumerable: false,
14285
+ configurable: true
14286
+ });
14287
+ return Hub;
13039
14288
  }());
13040
- function getOperationMessage(op) {
13041
- var msg = op.startedAt + " : Operation " + op.id + " started with inputs " + JSON.stringify(op.inputs) + " but was not completed";
13042
- if (op.state === "completed") {
13043
- msg = op.startedAt + " : Operation " + op.id + " took " + op.duration + " ms with inputs " + JSON.stringify(op.inputs) + " and output " + (op.output ? JSON.stringify(op.output) : "n/a");
13044
- }
13045
- return msg;
13046
- }
13047
14289
 
13048
14290
  /**
13049
14291
  * Generic Hub Error with an Error stack as well
@@ -13202,6 +14444,7 @@
13202
14444
  exports.fetchAllPages = fetchAllPages;
13203
14445
  exports.fetchAndUploadResource = fetchAndUploadResource;
13204
14446
  exports.fetchAndUploadThumbnail = fetchAndUploadThumbnail;
14447
+ exports.fetchContent = fetchContent;
13205
14448
  exports.fetchHubTranslation = fetchHubTranslation;
13206
14449
  exports.fetchImageAsBlob = fetchImageAsBlob;
13207
14450
  exports.fetchModelFromItem = fetchModelFromItem;