@sapui5/sap.fe.test 1.124.2 → 1.126.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.
@@ -8,6 +8,7 @@ import Log from "sap/base/Log";
8
8
  import LoaderExtensions from "sap/base/util/LoaderExtensions";
9
9
  import merge from "sap/base/util/merge";
10
10
  import uid from "sap/base/util/uid";
11
+ import jsx from "sap/fe/base/jsx-runtime/jsx";
11
12
  import AppComponent from "sap/fe/core/AppComponent";
12
13
  import type TemplateComponent from "sap/fe/core/TemplateComponent";
13
14
  import TemplateModel from "sap/fe/core/TemplateModel";
@@ -17,7 +18,6 @@ import type { ListReportManifestSettings, ObjectPageManifestSettings } from "sap
17
18
  import { convertTypes, getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelConverter";
18
19
  import type { IDiagnostics, PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
19
20
  import type { IssueCategory, IssueSeverity } from "sap/fe/core/converters/helpers/IssueManager";
20
- import jsx from "sap/fe/core/jsx-runtime/jsx";
21
21
  import type { SideEffectsService } from "sap/fe/core/services/SideEffectsServiceFactory";
22
22
  import SideEffectsFactory from "sap/fe/core/services/SideEffectsServiceFactory";
23
23
  import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
@@ -86,13 +86,16 @@ const nameSpaceMap: Record<string, string> = {
86
86
  fl: "sap.ui.fl",
87
87
  internalMacro: "sap.fe.macros.internal",
88
88
  mdc: "sap.ui.mdc",
89
- mdcat: "sap.ui.mdc.actiontoolbar",
89
+ actiontoolbar: "sap.ui.mdc.actiontoolbar",
90
90
  mdcField: "sap.ui.mdc.field",
91
91
  mdcTable: "sap.ui.mdc.table",
92
92
  u: "sap.ui.unified",
93
+ uxap: "sap.uxap",
93
94
  macroMicroChart: "sap.fe.macros.microchart",
94
95
  microChart: "sap.suite.ui.microchart",
95
- macroTable: "sap.fe.macros.table"
96
+ macroTable: "sap.fe.macros.table",
97
+ mdcvc: "sap.ui.mdc.valuehelp.content",
98
+ mdcv: "sap.ui.mdc.valuehelp"
96
99
  };
97
100
  const reveseNamespaceMap = Object.keys(nameSpaceMap).reduce((reverseMap: Record<string, string>, currentName) => {
98
101
  reverseMap[nameSpaceMap[currentName]] = currentName;
@@ -691,6 +694,7 @@ export async function processView(
691
694
  export async function processFragment(name: string, testData: { [model: string]: object }): Promise<string> {
692
695
  const inputXml = `<root><core:Fragment fragmentName="${name}" type="XML" xmlns:core="sap.ui.core" /></root>`;
693
696
  const parser = new window.DOMParser();
697
+
694
698
  const inputDoc = parser.parseFromString(inputXml, "text/xml");
695
699
 
696
700
  // build model and bindings for given test data
@@ -724,8 +728,10 @@ export async function processFragment(name: string, testData: { [model: string]:
724
728
  return formatXML(xmlResult);
725
729
  }
726
730
 
727
- export function serializeControl(controlToSerialize?: UI5Element | UI5Element[]) {
731
+ export function serializeControl(controlToSerialize?: UI5Element | UI5Element[], showCustomStyleClasses = false) {
728
732
  let tabCount = 0;
733
+ const UID = /uid--id-\d{13}-\d{1,3}/;
734
+ const CONTROLID = /id-\d{13}-\d{1,3}/;
729
735
  function getTab(toAdd = 0) {
730
736
  let tab = "";
731
737
  for (let i = 0; i < tabCount + toAdd; i++) {
@@ -751,26 +757,50 @@ export function serializeControl(controlToSerialize?: UI5Element | UI5Element[])
751
757
  return "})";
752
758
  },
753
759
  middle: function (control: any) {
754
- const id = control.getId();
760
+ let id = control.getId();
761
+ id = typeof id === "string" ? id?.replace?.(CONTROLID, "id") : id;
755
762
  let data = `{id: ${ManagedObjectMetadata.isGeneratedId(id) ? "__dynamicId" : id}`;
756
763
  for (const oControlKey in control.mProperties) {
757
764
  if (control.mProperties.hasOwnProperty(oControlKey)) {
758
- data += `,\n${getTab()} ${oControlKey}: ${control.mProperties[oControlKey]}`;
765
+ let propertyValue = control.mProperties[oControlKey];
766
+ propertyValue = typeof propertyValue === "string" ? propertyValue?.replace?.(UID, "uid--id") : propertyValue;
767
+ propertyValue = typeof propertyValue === "string" ? propertyValue?.replace?.(CONTROLID, "id") : propertyValue;
768
+ try {
769
+ propertyValue = typeof propertyValue === "object" ? JSON.stringify(propertyValue) : propertyValue;
770
+ } catch (e) {
771
+ // Stringify may fail for circular references but it's not the end of the world
772
+ }
773
+
774
+ data += `,\n${getTab()} ${oControlKey}: ${propertyValue}`;
759
775
  } else if (control.mBindingInfos.hasOwnProperty(oControlKey)) {
760
776
  const bindingDetail = control.mBindingInfos[oControlKey];
777
+ if (bindingDetail.type?.oOutputFormat) {
778
+ delete bindingDetail.type.oOutputFormat;
779
+ }
761
780
  data += `,\n${getTab()} ${oControlKey}: ${JSON.stringify(bindingDetail)}`;
762
781
  }
763
782
  }
764
783
  for (const oControlKey in control.mAssociations) {
765
784
  if (control.mAssociations.hasOwnProperty(oControlKey)) {
766
- data += `,\n${getTab()} ${oControlKey}: ${
767
- (control.mAssociations[oControlKey]?.join?.(",") ?? control.mAssociations[oControlKey]) || undefined
768
- }`;
785
+ let associationValue = control.mAssociations[oControlKey];
786
+ if (!Array.isArray(associationValue)) {
787
+ associationValue = [associationValue];
788
+ }
789
+ associationValue = associationValue.map((associationValueElement: string) => {
790
+ return typeof associationValueElement === "string"
791
+ ? associationValueElement?.replace?.(CONTROLID, "id")
792
+ : associationValueElement;
793
+ });
794
+
795
+ data += `,\n${getTab()} ${oControlKey}: ${(associationValue?.join?.(",") ?? associationValue) || undefined}`;
769
796
  }
770
797
  }
798
+ if (showCustomStyleClasses && control.aCustomStyleClasses?.length > 0) {
799
+ data += `,\n${getTab()} customStyleClasses : ${control.aCustomStyleClasses.join(", ")}`;
800
+ }
771
801
  for (const oControlKey in control.mEventRegistry) {
772
802
  if (control.mEventRegistry.hasOwnProperty(oControlKey)) {
773
- data += `,\n${getTab()} ${oControlKey}: true}`;
803
+ data += `,\n${getTab()} ${oControlKey}: true`;
774
804
  }
775
805
  }
776
806
  data += ``;
@@ -850,18 +880,29 @@ export function registerMockFragments(...fragments: MockFragment[]): jest.SpyIns
850
880
  * @param options.cdsFile The path to the CDS file to use for the appComponent
851
881
  * @param options.mainContextPath The main context path to use for the appComponent
852
882
  * @param options.pageContent The page content to use for the appComponent
883
+ * @param options.content The content to use for the app Component
884
+ * @param name The name to use for the appComponent
885
+ * @param viewLevel The view level to use for the appComponent
853
886
  * @returns The appcomponent and templateComponent to use for testing
854
887
  */
855
- export async function initializeAppComponent(options?: {
856
- cdsFile?: string;
857
- mainContextPath?: string;
858
- pageContent?: Function;
859
- }): Promise<{ appComponent: AppComponent; templateComponent: TemplateComponent }> {
888
+ export async function initializeAppComponent(
889
+ options?: {
890
+ cdsFile?: string;
891
+ componentId?: string;
892
+ mainContextPath?: string;
893
+ pageContent?: Function;
894
+ manifestSettings?: Partial<ListReportManifestSettings | ObjectPageManifestSettings>;
895
+ content?: {};
896
+ },
897
+ name?: string,
898
+ viewLevel?: number
899
+ ): Promise<{ appComponent: AppComponent; templateComponent: TemplateComponent }> {
860
900
  let cdsFile = options?.cdsFile;
861
901
  if (!cdsFile) {
862
902
  cdsFile = compileCDS(path.join(__dirname, "./data/Products.cds"));
863
903
  }
864
904
  const guid = uid();
905
+ const id = options?.componentId ?? `sap.fe.test.${guid}`;
865
906
  const cdsContent = fs.readFileSync(cdsFile).toString();
866
907
  sap.jest.registerFakeFragment(`/sap/fe/core/mock/${guid}/$metadata?sap-language=EN`, cdsContent);
867
908
 
@@ -886,22 +927,23 @@ export async function initializeAppComponent(options?: {
886
927
  models: {
887
928
  "": {
888
929
  dataSource: "mainService",
889
- settings: {
890
- synchronizationMode: "None"
891
- }
930
+ settings: {}
892
931
  }
893
932
  },
894
933
  routing: {
895
934
  targets: {
896
935
  Default: {
897
936
  type: "Component",
898
- name: "sap.fe.core.fpm",
937
+ name: name ?? "sap.fe.core.fpm",
899
938
  id: "Default",
939
+ viewLevel: viewLevel,
900
940
  options: {
901
941
  settings: {
942
+ ...(options?.manifestSettings ?? {}),
902
943
  contextPath: options?.mainContextPath ?? "/Products",
903
944
  viewType: "JSX",
904
- viewContent: options?.pageContent ?? (() => <Page></Page>)
945
+ viewContent: options?.pageContent ?? (() => <Page></Page>),
946
+ content: options?.content
905
947
  }
906
948
  }
907
949
  }
@@ -919,9 +961,26 @@ export async function initializeAppComponent(options?: {
919
961
  }
920
962
  });
921
963
  });
922
- const mockAppComponent = (await Component.create({ name: `sap.fe.test.${guid}` })) as AppComponent;
964
+ const mockAppComponent = (await Component.create({ name: `sap.fe.test.${guid}`, id: id })) as AppComponent;
923
965
 
924
966
  await mockAppComponent.initialized;
925
967
  const v = await (mockAppComponent.getRouter().getTarget("Default") as { load?: Function }).load?.();
926
968
  return { appComponent: mockAppComponent, templateComponent: v.object };
927
969
  }
970
+
971
+ /**
972
+ * Find an element in a collection that matches the given selector.
973
+ *
974
+ * @param collection
975
+ * @param selector
976
+ * @returns The element that matches the selector or undefined if no element matches the selector
977
+ */
978
+ export function findElement(collection: HTMLCollection, selector: (element: HTMLElement) => boolean): HTMLElement | undefined {
979
+ for (let i = 0; i < collection.length; i++) {
980
+ const element = collection.item(i) as HTMLElement;
981
+ if (selector(element)) {
982
+ return element;
983
+ }
984
+ }
985
+ return undefined;
986
+ }
@@ -175,7 +175,7 @@ sap.ui.define(
175
175
  OPHeaderId = "fe::HeaderFacet",
176
176
  OPHeaderContentId = "fe::ObjectPage-OPHeaderContent",
177
177
  OPHeaderContentContainerId = ViewId + "--fe::HeaderContentContainer",
178
- OPFooterId = "fe::FooterBar",
178
+ OPFooterId = "fe::FooterBar::_fc",
179
179
  OPSectionIdPrefix = "fe::FacetSection",
180
180
  OPSubSectionIdPrefix = "fe::FacetSubSection",
181
181
  OPFormIdPrefix = "fe::Form",
@@ -174,7 +174,7 @@ sap.ui.define(["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils"
174
174
  },
175
175
  assertions: {
176
176
  iSeeFlpDashboard: function () {
177
- return OpaBuilder.create(this).hasId("sapUshellDashboardPage").description("Seeing FLP Dashboard").execute();
177
+ return OpaBuilder.create(this).hasId("mainShell").description("Seeing FLP Dashboard").execute();
178
178
  },
179
179
  iShouldSeeTheAppTile: function (sTitle) {
180
180
  return OpaBuilder.create(this)
@@ -185,9 +185,13 @@ sap.ui.define(["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils"
185
185
  .description("Seeing Tile " + sTitle)
186
186
  .execute();
187
187
  },
188
+ iSeeNavigateBack: function () {
189
+ return OpaBuilder.create(this).hasId("backBtn").description("I see the back navigation button").execute();
190
+ },
188
191
  iSeeShellNavHierarchyItem: function (sItemTitle, iItemPosition, iItemNumbers, sItemDesc) {
189
192
  return OpaBuilder.create(this)
190
193
  .viewId(null)
194
+ .hasId("backBtn")
191
195
  .hasId("sapUshellNavHierarchyItems")
192
196
  .hasAggregationLength("items", iItemNumbers)
193
197
  .has(OpaBuilder.Matchers.aggregationAtIndex("items", iItemPosition - 1))
@@ -298,6 +298,8 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/AppComponent",
298
298
  });
299
299
  });
300
300
  mocked.mock.getMetaPath.mockImplementation(sPath => {
301
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
302
+ // @ts-ignore
301
303
  const metamodel = new ODataMetaModel();
302
304
  return sPath ? metamodel.getMetaPath(sPath) : sPath;
303
305
  });
@@ -493,4 +495,4 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/AppComponent",
493
495
  _exports.createMockResourceModel = createMockResourceModel;
494
496
  return _exports;
495
497
  }, false);
496
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNb2NrQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsIm9CaW5kaW5nIiwiaXNJbmFjdGl2ZSIsIm1vY2tlZCIsIm1vY2siLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIkNvbnRleHQiLCJjcmVhdGVOZXdDb250ZXh0IiwiX2lzS2VwdEFsaXZlIiwiX2NvbnRleHREYXRhIiwiX29CaW5kaW5nIiwiX2lzSW5hY3RpdmUiLCJpc0EiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJzQ2xhc3NOYW1lIiwiZ2V0UHJvcGVydHkiLCJrZXkiLCJyZXF1ZXN0UHJvcGVydHkiLCJrZXlPcktleXMiLCJBcnJheSIsImlzQXJyYXkiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm1hcCIsInJlcXVlc3RPYmplY3QiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInJlc3VsdCIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwicmVkdWNlIiwic3VtIiwicGFydCIsImdldFBhdGgiLCJnZXRCaW5kaW5nIiwiZ2V0TW9kZWwiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsIk1vY2tDb250ZXh0IiwiY3JlYXRlTW9ja0V2ZW50IiwicGFyYW1zIiwic291cmNlIiwiRXZlbnQiLCJfcGFyYW1zIiwiZ2V0U291cmNlIiwibW9ja1JldHVyblZhbHVlIiwiZ2V0UGFyYW1ldGVyIiwibmFtZSIsImdldFBhcmFtZXRlcnMiLCJNb2NrRXZlbnQiLCJjcmVhdGVNb2NrTGlzdEJpbmRpbmciLCJhQ29udGV4dERhdGEiLCJvTW9ja01vZGVsIiwiT0RhdGFMaXN0QmluZGluZyIsIl9hTW9ja0NvbnRleHRzIiwiY29udGV4dERhdGEiLCJfbW9ja01vZGVsIiwic2V0TW9kZWwiLCJtb2RlbCIsInJlcXVlc3RDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImdldENvbnRleHRzIiwiZ2V0VXBkYXRlR3JvdXBJZCIsIk1vY2tMaXN0QmluZGluZyIsImNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmciLCJPRGF0YVByb3BlcnR5QmluZGluZyIsIl92YWx1ZSIsIl9wYXRoIiwiZ2V0VmFsdWUiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmciLCJhQmluZGluZ3MiLCJDb21wb3NpdGVCaW5kaW5nIiwiX2FCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb21wb3NpdGVCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIiwib0NvbnRleHQiLCJPRGF0YUNvbnRleHRCaW5kaW5nIiwibW9ja01vZGVsIiwib01vY2tDb250ZXh0IiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIm9Nb2RlbCIsImdldEJvdW5kQ29udGV4dCIsImV4ZWN1dGUiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsIk1vY2tDb250ZXh0QmluZGluZyIsImNyZWF0ZU1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJPRGF0YU1ldGFNb2RlbCIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0Iiwic1BhdGgiLCIkcGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TWV0YVBhdGgiLCJtZXRhbW9kZWwiLCJNb2NrTWV0YU1vZGVsIiwiY3JlYXRlTW9ja01vZGVsIiwib01vY2tMaXN0QmluZGluZyIsIm9Nb2NrQ29udGV4dEJpbmRpbmciLCJPRGF0YU1vZGVsIiwiZm5PcHRpbWlzdGljQmF0Y2hFbmFibGVyIiwibW9ja0xpc3RCaW5kaW5nIiwibW9ja0NvbnRleHRCaW5kaW5nIiwic2V0TWV0YU1vZGVsIiwib01ldGFNb2RlbCIsImJpbmRMaXN0IiwiYmluZENvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJNb2NrTW9kZWwiLCJjcmVhdGVNb2NrTW9kZWxGcm9tTGlzdEJpbmRpbmciLCJjcmVhdGVNb2NrTW9kZWxGcm9tQ29udGV4dEJpbmRpbmciLCJ1bmRlZmluZWQiLCJjcmVhdGVNb2NrVmlldyIsIlZpZXciLCJNb2NrVmlldyIsImNyZWF0ZU1vY2tDb250cm9sbGVyIiwiQ29udHJvbGxlciIsIl9yb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nIiwiX3NpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHMiLCJlZGl0RmxvdyIsIkVkaXRGbG93Iiwic2hhcmUiLCJTaGFyZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsIkNvbGxhYm9yYXRpdmVEcmFmdCIsInJlY29tbWVuZGF0aW9ucyIsIlJlY29tbWVuZGF0aW9ucyIsImdldEFwcENvbXBvbmVudCIsImplc3QiLCJmbiIsIkFwcENvbXBvbmVudCIsImdldFZpZXciLCJNb2NrQ29udHJvbGxlciIsIm1vY2tNVkMiLCJleGlzdGluZyIsInZpZXciLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsImdldFRleHQiLCJ0ZXh0SUQiLCJwYXJhbWV0ZXJzIiwibWV0YVBhdGgiLCJyZXNvdXJjZU1vZGVsIiwiUmVzb3VyY2VNb2RlbCIsImJ1bmRsZU5hbWUiLCJlbmhhbmNlV2l0aCIsImFzeW5jIiwiY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBXaXRoTW9jayB9IGZyb20gXCJAc2FwLXV4L2plc3QtbW9jay11aTUvZGlzdC9nZW5lcmljXCI7XG5pbXBvcnQgeyBtb2NrIH0gZnJvbSBcIkBzYXAtdXgvamVzdC1tb2NrLXVpNS9kaXN0L2dlbmVyaWNcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgQ29sbGFib3JhdGl2ZURyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Db2xsYWJvcmF0aXZlRHJhZnRcIjtcbmltcG9ydCBFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvRWRpdEZsb3dcIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IFJlY29tbWVuZGF0aW9ucyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUmVjb21tZW5kYXRpb25zXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IENvbXBvc2l0ZUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Db21wb3NpdGVCaW5kaW5nXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRleHQgPSBXaXRoTW9jazxDb250ZXh0PiAmIHtcblx0X2lzS2VwdEFsaXZlOiBib29sZWFuO1xuXHRfY29udGV4dERhdGE6IGFueTtcblx0X29CaW5kaW5nOiBhbnk7XG5cdF9pc0luYWN0aXZlOiBib29sZWFuO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRleHQuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0RGF0YSBBIG1hcCBvZiB0aGUgZGlmZmVyZW50IHByb3BlcnRpZXMgb2YgdGhlIGNvbnRleHQuIFRoZSB2YWx1ZSBmb3IgdGhlIGtleSAnJHBhdGgnIHdpbGwgYmUgcmV0dXJuZWQgYnkgdGhlICdnZXRQYXRoJyBtZXRob2RcbiAqIEBwYXJhbSBvQmluZGluZyBUaGUgYmluZGluZyBvZiB0aGUgY29udGV4dFxuICogQHBhcmFtIGlzSW5hY3RpdmUgSXMgdGhlIGNvbnRleHQgaW5pYWN0aXZlIG9yIG5vdFxuICogQHJldHVybnMgQSBuZXcgTW9ja0NvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250ZXh0KG9Db250ZXh0RGF0YT86IGFueSwgb0JpbmRpbmc/OiBhbnksIGlzSW5hY3RpdmU/OiBib29sZWFuKTogTW9ja0NvbnRleHQge1xuXHQvLyBVZ2x5IHdvcmthcm91bmQgdG8gZ2V0IGEgcHJvcGVyIG1vY2sgcGJqZWN0LCBhcyBDb250ZXh0IGlzbid0IHByb3Blcmx5IGV4cG9ydGVkIGZyb20gVUk1XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT2JqZWN0LmdldFByb3RvdHlwZU9mKChDb250ZXh0IGFzIGFueSkuY3JlYXRlTmV3Q29udGV4dChudWxsLCBudWxsLCBcIi9lXCIpKSkgYXMgTW9ja0NvbnRleHQ7XG5cdG1vY2tlZC5faXNLZXB0QWxpdmUgPSBmYWxzZTtcblx0bW9ja2VkLl9jb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YSB8fCB7fTtcblx0bW9ja2VkLl9vQmluZGluZyA9IG9CaW5kaW5nO1xuXHRtb2NrZWQuX2lzSW5hY3RpdmUgPSAhIWlzSW5hY3RpdmU7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV07XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKChrZXlPcktleXM6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoa2V5T3JLZXlzKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXlPcktleXMubWFwKChrZXkpID0+IG1vY2tlZC5fY29udGV4dERhdGFba2V5XSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fY29udGV4dERhdGFba2V5T3JLZXlzXSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0T2JqZWN0Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcblx0XHRyZXR1cm4ga2V5ID8gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fY29udGV4dERhdGFba2V5XSkgOiBtb2NrZWQuX2NvbnRleHREYXRhO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suc2V0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuXHRcdG1vY2tlZC5fY29udGV4dERhdGFba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV07XG5cdH0pO1xuXG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGxldCByZXN1bHQgPSBwYXRoID8gbW9ja2VkLl9jb250ZXh0RGF0YVtwYXRoXSA6IG1vY2tlZC5fY29udGV4dERhdGE7XG5cblx0XHRpZiAoIXJlc3VsdCAmJiBwYXRoICYmIHBhdGguaW5kZXhPZihcIi9cIikgPiAtMSkge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdHJlc3VsdCA9IHBhcnRzLnJlZHVjZSgoc3VtLCBwYXJ0OiBhbnkpID0+IHtcblx0XHRcdFx0c3VtID0gcGFydCA/IHN1bVtwYXJ0XSA6IHN1bTtcblx0XHRcdFx0cmV0dXJuIHN1bTtcblx0XHRcdH0sIG1vY2tlZC5fY29udGV4dERhdGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0pO1xuXG5cdG1vY2tlZC5tb2NrLmdldFBhdGgubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fY29udGV4dERhdGFbXCIkcGF0aFwiXSk7XG5cdG1vY2tlZC5tb2NrLmdldEJpbmRpbmcubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fb0JpbmRpbmcpO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9vQmluZGluZz8uZ2V0TW9kZWwoKSk7XG5cdG1vY2tlZC5tb2NrLnNldEtlZXBBbGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKGJvb2w6IGJvb2xlYW4sIF9mbk9uQmVmb3JlRGVzdHJveT86IGFueSwgX2JSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuKSA9PiB7XG5cdFx0bW9ja2VkLl9pc0tlcHRBbGl2ZSA9IGJvb2w7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5pc0tlZXBBbGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9pc0tlcHRBbGl2ZSk7XG5cdG1vY2tlZC5tb2NrLmlzSW5hY3RpdmUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5faXNJbmFjdGl2ZSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250ZXh0IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dDogbmV3IChvVmFsdWVzPzogYW55LCBvQmluZGluZz86IGFueSwgaXNJbmFjdGl2ZT86IGJvb2xlYW4pID0+IE1vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLmJhc2UuRXZlbnRcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0V2ZW50ID0gV2l0aE1vY2s8RXZlbnQ+ICYge1xuXHRfcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0V2ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgb2YgdGhlIGV2ZW50XG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrRXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tFdmVudChwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSwgc291cmNlPzogRXZlbnRQcm92aWRlcik6IE1vY2tFdmVudCB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soRXZlbnQpIGFzIE1vY2tFdmVudDtcblx0bW9ja2VkLl9wYXJhbXMgPSBwYXJhbXMgfHwge307XG5cblx0aWYgKHNvdXJjZSkge1xuXHRcdG1vY2tlZC5tb2NrLmdldFNvdXJjZS5tb2NrUmV0dXJuVmFsdWUoc291cmNlKTtcblx0fVxuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suZ2V0UGFyYW1ldGVyLm1vY2tJbXBsZW1lbnRhdGlvbigobmFtZSkgPT4gbW9ja2VkLl9wYXJhbXNbbmFtZV0pO1xuXHRtb2NrZWQubW9jay5nZXRQYXJhbWV0ZXJzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fcGFyYW1zO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0V2ZW50IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrRXZlbnQ6IG5ldyAocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gTW9ja0V2ZW50ID0gY3JlYXRlTW9ja0V2ZW50IGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tMaXN0QmluZGluZyA9IFdpdGhNb2NrPE9EYXRhTGlzdEJpbmRpbmc+ICYge1xuXHRfYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblx0X21vY2tNb2RlbD86IE1vY2tNb2RlbDtcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtb2RlbCBvZiB0aGUgTGlzdEJpbmRpbmdcblx0ICovXG5cdHNldE1vZGVsOiAobW9kZWw6IE1vY2tNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tMaXN0QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gYUNvbnRleHREYXRhIEFuIGFycmF5IG9mIG9iamVjdHMgaG9sZGluZyB0aGUgZGlmZmVyZW50IHByb3BlcnRpZXMgb2YgdGhlIGNvbnRleHRzIHJlZmVyZW5jZWQgYnkgdGhlIExpc3RCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIExpc3RCaW5kaW5nXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tMaXN0QmluZGluZyhhQ29udGV4dERhdGE/OiBhbnlbXSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCk6IE1vY2tMaXN0QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFMaXN0QmluZGluZykgYXMgTW9ja0xpc3RCaW5kaW5nO1xuXHRhQ29udGV4dERhdGEgPSBhQ29udGV4dERhdGEgfHwgW107XG5cdG1vY2tlZC5fYU1vY2tDb250ZXh0cyA9IGFDb250ZXh0RGF0YS5tYXAoKGNvbnRleHREYXRhKSA9PiB7XG5cdFx0cmV0dXJuIGNyZWF0ZU1vY2tDb250ZXh0KGNvbnRleHREYXRhLCBtb2NrZWQpO1xuXHR9KTtcblx0bW9ja2VkLl9tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNb2RlbCA9IChtb2RlbDogTW9ja01vZGVsKSA9PiB7XG5cdFx0bW9ja2VkLl9tb2NrTW9kZWwgPSBtb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fYU1vY2tDb250ZXh0cyk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRDdXJyZW50Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hTW9ja0NvbnRleHRzO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QWxsQ3VycmVudENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fbW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0VXBkYXRlR3JvdXBJZC5tb2NrUmV0dXJuVmFsdWUoXCJhdXRvXCIpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tMaXN0QmluZGluZzogbmV3IChhQ29udGV4dHM/OiBhbnlbXSwgbW9ja01vZGVsPzogTW9ja01vZGVsKSA9PiBNb2NrTGlzdEJpbmRpbmcgPSBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tQcm9wZXJ0eUJpbmRpbmcgPSBXaXRoTW9jazxPRGF0YVByb3BlcnR5QmluZGluZz4gJiB7XG5cdF92YWx1ZT86IGFueTtcblx0X3BhdGg/OiBzdHJpbmc7XG5cdF9tb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrUHJvcGVydHlCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgcmV0dXJuZCBieSB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIFByb3BlcnR5QmluZGluZ1xuICogQHJldHVybnMgQSBuZXcgTW9ja1Byb3BlcnR5QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyh2YWx1ZTogYW55LCBwYXRoPzogc3RyaW5nLCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja1Byb3BlcnR5QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFQcm9wZXJ0eUJpbmRpbmcpIGFzIE1vY2tQcm9wZXJ0eUJpbmRpbmc7XG5cdG1vY2tlZC5fbW9ja01vZGVsID0gb01vY2tNb2RlbDtcblx0bW9ja2VkLl92YWx1ZSA9IHZhbHVlO1xuXHRtb2NrZWQuX3BhdGggPSBwYXRoO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX21vY2tNb2RlbDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFZhbHVlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fdmFsdWU7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRQYXRoLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fcGF0aDtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tQcm9wZXJ0eUJpbmRpbmc6IG5ldyAodmFsdWU6IGFueSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCkgPT4gTW9ja1Byb3BlcnR5QmluZGluZyA9IGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbXBvc2l0ZUJpbmRpbmcgPSBXaXRoTW9jazxDb21wb3NpdGVCaW5kaW5nPiAmIHtcblx0X2FCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbXBvc2l0ZUJpbmRpbmcuXG4gKlxuICogQHBhcmFtIGFCaW5kaW5ncyBUaGUgYmluZGluZ3Mgb2YgdGhlIENvbXBvc2l0ZUJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb21wb3NpdGVCaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyhhQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXSk6IE1vY2tDb21wb3NpdGVCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhDb21wb3NpdGVCaW5kaW5nKSBhcyBNb2NrQ29tcG9zaXRlQmluZGluZztcblx0bW9ja2VkLl9hQmluZGluZ3MgPSBhQmluZGluZ3M7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QmluZGluZ3MubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hQmluZGluZ3M7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRWYWx1ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2FCaW5kaW5ncy5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcuZ2V0VmFsdWUoKSk7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbXBvc2l0ZUJpbmRpbmc6IG5ldyAoYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW10pID0+IE1vY2tDb21wb3NpdGVCaW5kaW5nID0gY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRleHRCaW5kaW5nID0gV2l0aE1vY2s8T0RhdGFDb250ZXh0QmluZGluZz4gJiB7XG5cdG9Nb2NrQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdGlzS2VwdEFsaXZlOiBib29sZWFuO1xuXHRtb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG5cblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIGFjY2VzcyB0aGUgaW50ZXJuYWwgTW9ja0NvbnRleHQgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRnZXRJbnRlcm5hbE1vY2tDb250ZXh0OiAoKSA9PiBNb2NrQ29udGV4dDtcblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIHNldCB0aGUgbW9kZWwgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRzZXRNb2RlbDogKG9Nb2RlbDogTW9ja01vZGVsKSA9PiB2b2lkO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEBwYXJhbSBvTW9ja01vZGVsIFRoZSBtb2RlbCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250ZXh0QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nKG9Db250ZXh0PzogYW55LCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja0NvbnRleHRCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YUNvbnRleHRCaW5kaW5nKSBhcyBNb2NrQ29udGV4dEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXHRtb2NrZWQub01vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob0NvbnRleHQgfHwge30sIG1vY2tlZCk7XG5cblx0Ly8gVXRpbGl0eSBBUElcblx0bW9ja2VkLmdldEludGVybmFsTW9ja0NvbnRleHQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH07XG5cdG1vY2tlZC5zZXRNb2RlbCA9IChvTW9kZWw6IE1vY2tNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9kZWw7XG5cdH07XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0Qm91bmRDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZXhlY3V0ZS5tb2NrUmVzb2x2ZWRWYWx1ZSh0cnVlKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dEJpbmRpbmc6IG5ldyAob0NvbnRleHQ/OiBhbnksIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpID0+IE1vY2tDb250ZXh0QmluZGluZyA9IGNyZWF0ZU1vY2tDb250ZXh0QmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja01ldGFNb2RlbCA9IFdpdGhNb2NrPE9EYXRhTWV0YU1vZGVsPiAmIHtcblx0b01ldGFDb250ZXh0OiBNb2NrQ29udGV4dDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNZXRhTW9kZWwuXG4gKlxuICogQHBhcmFtIG9NZXRhRGF0YSBBIG1hcCBvZiB0aGUgZGlmZmVyZW50IG1ldGFkYXRhIHByb3BlcnRpZXMgb2YgdGhlIE1ldGFNb2RlbCAocGF0aCAtPiB2YWx1ZSkuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTWV0YU1vZGVsKG9NZXRhRGF0YT86IGFueSk6IE1vY2tNZXRhTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTWV0YU1vZGVsKSBhcyBNb2NrTWV0YU1vZGVsO1xuXHRtb2NrZWQub01ldGFDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldE1ldGFDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBjcmVhdGVNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9NZXRhQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5jcmVhdGVCaW5kaW5nQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gY3JlYXRlTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNZXRhUGF0aC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCBtZXRhbW9kZWwgPSBuZXcgT0RhdGFNZXRhTW9kZWwoKTtcblx0XHRyZXR1cm4gc1BhdGggPyBtZXRhbW9kZWwuZ2V0TWV0YVBhdGgoc1BhdGgpIDogc1BhdGg7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcIjtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNZXRhTW9kZWwgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tNZXRhTW9kZWw6IG5ldyAob01ldGFEYXRhPzogYW55KSA9PiBNb2NrTWV0YU1vZGVsID0gY3JlYXRlTW9ja01ldGFNb2RlbCBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFxuICovXG5leHBvcnQgdHlwZSBNb2NrTW9kZWwgPSBXaXRoTW9jazxPRGF0YU1vZGVsPiAmIHtcblx0b01ldGFNb2RlbD86IE1vY2tNZXRhTW9kZWw7XG5cdG1vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZztcblx0bW9ja0NvbnRleHRCaW5kaW5nPzogTW9ja0NvbnRleHRCaW5kaW5nO1xuXG5cdC8qKlxuXHQgKiBVdGlsaXR5IG1ldGhvZCB0byBzZXQgdGhlIG1ldGFtb2RlbCBvZiB0aGUgTW9ja01vZGVsXG5cdCAqL1xuXHRzZXRNZXRhTW9kZWw6IChvTWV0YU1vZGVsOiBNb2NrTWV0YU1vZGVsKSA9PiB2b2lkO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsLlxuICpcbiAqIEBwYXJhbSBvTW9ja0xpc3RCaW5kaW5nIEEgbGlzdCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZExpc3QuXG4gKiBAcGFyYW0gb01vY2tDb250ZXh0QmluZGluZyBBIGNvbnRleHQgYmluZGluZyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBjYWxsaW5nIGJpbmRDb250ZXh0LlxuICogQHJldHVybnMgQSBuZXcgTW9ja01vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTW9kZWwob01vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgb01vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFNb2RlbCkgYXMgTW9ja01vZGVsO1xuXHRtb2NrZWQuZm5PcHRpbWlzdGljQmF0Y2hFbmFibGVyID0gbnVsbDtcblx0bW9ja2VkLm1vY2tMaXN0QmluZGluZyA9IG9Nb2NrTGlzdEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrQ29udGV4dEJpbmRpbmcgPSBvTW9ja0NvbnRleHRCaW5kaW5nO1xuXHRpZiAob01vY2tMaXN0QmluZGluZykge1xuXHRcdG9Nb2NrTGlzdEJpbmRpbmcuc2V0TW9kZWwobW9ja2VkKTtcblx0fVxuXHRpZiAob01vY2tDb250ZXh0QmluZGluZykge1xuXHRcdG9Nb2NrQ29udGV4dEJpbmRpbmcuc2V0TW9kZWwobW9ja2VkKTtcblx0fVxuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNZXRhTW9kZWwgPSAob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5vTWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmJpbmRMaXN0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5tb2NrTGlzdEJpbmRpbmc7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5iaW5kQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja0NvbnRleHRCaW5kaW5nO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0TWV0YU1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTWV0YU1vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIjtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja01vZGVsOiBuZXcgKG9Nb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmcsIG9Nb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmcpID0+IE1vY2tNb2RlbCA9XG5cdGNyZWF0ZU1vY2tNb2RlbCBhcyBhbnk7XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNb2RlbCB1c2VkIHdpdGggYSBsaXN0QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gb01vY2tMaXN0QmluZGluZyBBIGxpc3QgYmluZGluZyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBjYWxsaW5nIGJpbmRMaXN0LlxuICogQHJldHVybnMgQSBuZXcgTW9ja01vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTW9kZWxGcm9tTGlzdEJpbmRpbmcob01vY2tMaXN0QmluZGluZzogTW9ja0xpc3RCaW5kaW5nKTogTW9ja01vZGVsIHtcblx0cmV0dXJuIGNyZWF0ZU1vY2tNb2RlbChvTW9ja0xpc3RCaW5kaW5nKTtcbn1cbi8qKlxuICogIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNb2RlbCB1c2VkIHdpdGggYSBjb250ZXh0QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gb01vY2tDb250ZXh0QmluZGluZyBBIGNvbnRleHQgYmluZGluZyB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgd2hlbiBjYWxsaW5nIGJpbmRDb250ZXh0LlxuICogQHJldHVybnMgQSBuZXcgTW9ja01vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTW9kZWxGcm9tQ29udGV4dEJpbmRpbmcob01vY2tDb250ZXh0QmluZGluZzogTW9ja0NvbnRleHRCaW5kaW5nKTogTW9ja01vZGVsIHtcblx0cmV0dXJuIGNyZWF0ZU1vY2tNb2RlbCh1bmRlZmluZWQsIG9Nb2NrQ29udGV4dEJpbmRpbmcpO1xufVxuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLmNvcmUubXZjLlZpZXdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja1ZpZXcgPSBXaXRoTW9jazxGRVZpZXc+O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrVmlldy5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrVmlld1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1ZpZXcoKTogTW9ja1ZpZXcge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKFZpZXcpO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZCBhcyBNb2NrVmlldztcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tWaWV3IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrVmlldzogbmV3ICgpID0+IE1vY2tWaWV3ID0gY3JlYXRlTW9ja1ZpZXcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLmZlLmNvcmUuUGFnZUNvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRyb2xsZXIgPSBXaXRoTW9jazxDb250cm9sbGVyPiAmIHtcblx0X3JvdXRpbmc6IFdpdGhNb2NrPEludGVybmFsUm91dGluZz47XG5cdF9zaWRlRWZmZWN0czogV2l0aE1vY2s8U2lkZUVmZmVjdHM+O1xuXHRlZGl0RmxvdzogV2l0aE1vY2s8RWRpdEZsb3c+O1xuXHRzaGFyZTogV2l0aE1vY2s8U2hhcmU+O1xuXHRyZWNvbW1lbmRhdGlvbnM6IFdpdGhNb2NrPFJlY29tbWVuZGF0aW9ucz47XG5cdGNvbGxhYm9yYXRpdmVEcmFmdDogV2l0aE1vY2s8Q29sbGFib3JhdGl2ZURyYWZ0Pjtcblx0Z2V0QXBwQ29tcG9uZW50OiAoKSA9PiBXaXRoTW9jazxBcHBDb21wb25lbnQ+O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRyb2xsZXIuXG4gKlxuICogQHJldHVybnMgQSBuZXcgTW9ja0NvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250cm9sbGVyKCk6IE1vY2tDb250cm9sbGVyIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhDb250cm9sbGVyKSBhcyBNb2NrQ29udHJvbGxlcjtcblx0bW9ja2VkLl9yb3V0aW5nID0gbW9jayhJbnRlcm5hbFJvdXRpbmcpO1xuXHRtb2NrZWQuX3NpZGVFZmZlY3RzID0gbW9jayhTaWRlRWZmZWN0cyk7XG5cdG1vY2tlZC5lZGl0RmxvdyA9IG1vY2soRWRpdEZsb3cpO1xuXHRtb2NrZWQuc2hhcmUgPSBtb2NrKFNoYXJlKTtcblx0bW9ja2VkLmNvbGxhYm9yYXRpdmVEcmFmdCA9IG1vY2soQ29sbGFib3JhdGl2ZURyYWZ0KTtcblx0bW9ja2VkLnJlY29tbWVuZGF0aW9ucyA9IG1vY2soUmVjb21tZW5kYXRpb25zKTtcblx0bW9ja2VkLmdldEFwcENvbXBvbmVudCA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUobW9jayhBcHBDb21wb25lbnQpKTtcblx0Ly8gRGVmYXVsdCBCZWhhdmlvclxuXHRtb2NrZWQubW9jay5nZXRWaWV3Lm1vY2tSZXR1cm5WYWx1ZShjcmVhdGVNb2NrVmlldygpKTtcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIG1vY2tDb250cm9sbGVyIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udHJvbGxlcjogbmV3ICgpID0+IE1vY2tDb250cm9sbGVyID0gY3JlYXRlTW9ja0NvbnRyb2xsZXIgYXMgYW55O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1WQ01vY2sge1xuXHRtb2RlbDogTW9ja01vZGVsO1xuXHR2aWV3OiBNb2NrVmlldztcblx0Y29udHJvbGxlcjogTW9ja0NvbnRyb2xsZXI7XG59XG4vKipcbiAqIEdlbmVyYXRlIG1vZGVsLCB2aWV3IGFuZCBjb250cm9sbGVyIG1vY2tzIHRoYXQgcmVmZXIgdG8gZWFjaCBvdGhlci5cbiAqXG4gKiBAcGFyYW0gZXhpc3RpbmcgT3B0aW9uYWwgZXhpc3RpbmcgbW9ja2VkIGluc3RhbmNlcyB0aGF0IHNob3VsZCBiZSB1c2VkXG4gKiBAcmV0dXJucyBNb2NrZWQgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgaW5zdGFuY2VzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2NrTVZDKGV4aXN0aW5nPzogUGFydGlhbDxNVkNNb2NrPik6IE1WQ01vY2sge1xuXHRjb25zdCBtb2RlbCA9IGV4aXN0aW5nPy5tb2RlbCB8fCBjcmVhdGVNb2NrTW9kZWwoKTtcblx0Y29uc3QgdmlldyA9IGV4aXN0aW5nPy52aWV3IHx8IGNyZWF0ZU1vY2tWaWV3KCk7XG5cdGNvbnN0IGNvbnRyb2xsZXIgPSBleGlzdGluZz8uY29udHJvbGxlciB8fCBjcmVhdGVNb2NrQ29udHJvbGxlcigpO1xuXG5cdHZpZXcubW9jay5nZXRDb250cm9sbGVyLm1vY2tSZXR1cm5WYWx1ZShjb250cm9sbGVyKTtcblx0dmlldy5tb2NrLmdldE1vZGVsLm1vY2tSZXR1cm5WYWx1ZShtb2RlbCk7XG5cdGNvbnRyb2xsZXIubW9jay5nZXRWaWV3Lm1vY2tSZXR1cm5WYWx1ZSh2aWV3KTtcblxuXHRyZXR1cm4geyBtb2RlbCwgdmlldywgY29udHJvbGxlciB9O1xufVxuXG4vKipcbiAqIFRvIGJlIHVzZWQgdG8gbG9hZCBtZXNzYWdlcyBidW5kbGVzIGZvciB0ZXN0cyB3aXRob3V0IGFwcC9wYWdlIGNvbXBvbmVudC5cbiAqXG4gKiBAcGFyYW0gdGV4dElEIElEIG9mIHRoZSBUZXh0XG4gKiBAcGFyYW0gcGFyYW1ldGVycyBBcnJheSBvZiBwYXJhbWV0ZXJzIHRoYXQgYXJlIHVzZWQgdG8gY3JlYXRlIHRoZSB0ZXh0XG4gKiBAcGFyYW0gbWV0YVBhdGggRW50aXR5IHNldCBuYW1lIG9yIGFjdGlvbiBuYW1lIHRvIG92ZXJsb2FkIGEgdGV4dFxuICogQHJldHVybnMgRGV0ZXJtaW5lZCB0ZXh0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0KHRleHRJRDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogYW55W10sIG1ldGFQYXRoPzogc3RyaW5nKSB7XG5cdGNvbnN0IHJlc291cmNlTW9kZWwgPSBuZXcgUmVzb3VyY2VNb2RlbCh7XG5cdFx0YnVuZGxlTmFtZTogXCJzYXAuZmUuY29yZS5tZXNzYWdlYnVuZGxlXCIsXG5cdFx0ZW5oYW5jZVdpdGg6IFt7IGJ1bmRsZU5hbWU6IFwic2FwLmZlLm1hY3Jvcy5tZXNzYWdlYnVuZGxlXCIgfSwgeyBidW5kbGVOYW1lOiBcInNhcC5mZS50ZW1wbGF0ZXMubWVzc2FnZWJ1bmRsZVwiIH1dLFxuXHRcdGFzeW5jOiBmYWxzZVxuXHR9KTtcblx0cmV0dXJuIHJlc291cmNlTW9kZWwuZ2V0VGV4dCh0ZXh0SUQsIHBhcmFtZXRlcnMsIG1ldGFQYXRoKTtcbn1cblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBSZXNvdXJjZU1vZGVsXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tSZXNvdXJjZU1vZGVsID0gV2l0aE1vY2s8UmVzb3VyY2VNb2RlbD47XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tWaWV3LlxuICpcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tWaWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCgpOiBNb2NrUmVzb3VyY2VNb2RlbCB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soUmVzb3VyY2VNb2RlbCk7XG5cdG1vY2tlZC5nZXRUZXh0ID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbihnZXRUZXh0KTtcblx0cmV0dXJuIG1vY2tlZDtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7O0VBZ0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTQSxpQkFBaUIsQ0FBQ0MsWUFBa0IsRUFBRUMsUUFBYyxFQUFFQyxVQUFvQixFQUFlO0lBQ3hHO0lBQ0EsTUFBTUMsTUFBTSxHQUFHQyxJQUFJLENBQUNDLE1BQU0sQ0FBQ0MsY0FBYyxDQUFFQyxPQUFPLENBQVNDLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBZ0I7SUFDOUdMLE1BQU0sQ0FBQ00sWUFBWSxHQUFHLEtBQUs7SUFDM0JOLE1BQU0sQ0FBQ08sWUFBWSxHQUFHVixZQUFZLElBQUksQ0FBQyxDQUFDO0lBQ3hDRyxNQUFNLENBQUNRLFNBQVMsR0FBR1YsUUFBUTtJQUMzQkUsTUFBTSxDQUFDUyxXQUFXLEdBQUcsQ0FBQyxDQUFDVixVQUFVOztJQUVqQztJQUNBQyxNQUFNLENBQUNDLElBQUksQ0FBQ1MsR0FBRyxDQUFDQyxrQkFBa0IsQ0FBRUMsVUFBa0IsSUFBSztNQUMxRCxPQUFPQSxVQUFVLEtBQUssK0JBQStCO0lBQ3RELENBQUMsQ0FBQztJQUNGWixNQUFNLENBQUNDLElBQUksQ0FBQ1ksV0FBVyxDQUFDRixrQkFBa0IsQ0FBRUcsR0FBVyxJQUFLO01BQzNELE9BQU9kLE1BQU0sQ0FBQ08sWUFBWSxDQUFDTyxHQUFHLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0lBQ0ZkLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDYyxlQUFlLENBQUNKLGtCQUFrQixDQUFFSyxTQUE0QixJQUFLO01BQ2hGLElBQUlDLEtBQUssQ0FBQ0MsT0FBTyxDQUFDRixTQUFTLENBQUMsRUFBRTtRQUM3QixPQUFPRyxPQUFPLENBQUNDLE9BQU8sQ0FBQ0osU0FBUyxDQUFDSyxHQUFHLENB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
498
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjcmVhdGVNb2NrQ29udGV4dCIsIm9Db250ZXh0RGF0YSIsIm9CaW5kaW5nIiwiaXNJbmFjdGl2ZSIsIm1vY2tlZCIsIm1vY2siLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsIkNvbnRleHQiLCJjcmVhdGVOZXdDb250ZXh0IiwiX2lzS2VwdEFsaXZlIiwiX2NvbnRleHREYXRhIiwiX29CaW5kaW5nIiwiX2lzSW5hY3RpdmUiLCJpc0EiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJzQ2xhc3NOYW1lIiwiZ2V0UHJvcGVydHkiLCJrZXkiLCJyZXF1ZXN0UHJvcGVydHkiLCJrZXlPcktleXMiLCJBcnJheSIsImlzQXJyYXkiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm1hcCIsInJlcXVlc3RPYmplY3QiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInJlc3VsdCIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwicmVkdWNlIiwic3VtIiwicGFydCIsImdldFBhdGgiLCJnZXRCaW5kaW5nIiwiZ2V0TW9kZWwiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsIk1vY2tDb250ZXh0IiwiY3JlYXRlTW9ja0V2ZW50IiwicGFyYW1zIiwic291cmNlIiwiRXZlbnQiLCJfcGFyYW1zIiwiZ2V0U291cmNlIiwibW9ja1JldHVyblZhbHVlIiwiZ2V0UGFyYW1ldGVyIiwibmFtZSIsImdldFBhcmFtZXRlcnMiLCJNb2NrRXZlbnQiLCJjcmVhdGVNb2NrTGlzdEJpbmRpbmciLCJhQ29udGV4dERhdGEiLCJvTW9ja01vZGVsIiwiT0RhdGFMaXN0QmluZGluZyIsIl9hTW9ja0NvbnRleHRzIiwiY29udGV4dERhdGEiLCJfbW9ja01vZGVsIiwic2V0TW9kZWwiLCJtb2RlbCIsInJlcXVlc3RDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImdldEFsbEN1cnJlbnRDb250ZXh0cyIsImdldENvbnRleHRzIiwiZ2V0VXBkYXRlR3JvdXBJZCIsIk1vY2tMaXN0QmluZGluZyIsImNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmciLCJPRGF0YVByb3BlcnR5QmluZGluZyIsIl92YWx1ZSIsIl9wYXRoIiwiZ2V0VmFsdWUiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmciLCJhQmluZGluZ3MiLCJDb21wb3NpdGVCaW5kaW5nIiwiX2FCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb21wb3NpdGVCaW5kaW5nIiwiY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIiwib0NvbnRleHQiLCJPRGF0YUNvbnRleHRCaW5kaW5nIiwibW9ja01vZGVsIiwib01vY2tDb250ZXh0IiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIm9Nb2RlbCIsImdldEJvdW5kQ29udGV4dCIsImV4ZWN1dGUiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsIk1vY2tDb250ZXh0QmluZGluZyIsImNyZWF0ZU1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJPRGF0YU1ldGFNb2RlbCIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0Iiwic1BhdGgiLCIkcGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0TWV0YVBhdGgiLCJtZXRhbW9kZWwiLCJNb2NrTWV0YU1vZGVsIiwiY3JlYXRlTW9ja01vZGVsIiwib01vY2tMaXN0QmluZGluZyIsIm9Nb2NrQ29udGV4dEJpbmRpbmciLCJPRGF0YU1vZGVsIiwiZm5PcHRpbWlzdGljQmF0Y2hFbmFibGVyIiwibW9ja0xpc3RCaW5kaW5nIiwibW9ja0NvbnRleHRCaW5kaW5nIiwic2V0TWV0YU1vZGVsIiwib01ldGFNb2RlbCIsImJpbmRMaXN0IiwiYmluZENvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJNb2NrTW9kZWwiLCJjcmVhdGVNb2NrTW9kZWxGcm9tTGlzdEJpbmRpbmciLCJjcmVhdGVNb2NrTW9kZWxGcm9tQ29udGV4dEJpbmRpbmciLCJ1bmRlZmluZWQiLCJjcmVhdGVNb2NrVmlldyIsIlZpZXciLCJNb2NrVmlldyIsImNyZWF0ZU1vY2tDb250cm9sbGVyIiwiQ29udHJvbGxlciIsIl9yb3V0aW5nIiwiSW50ZXJuYWxSb3V0aW5nIiwiX3NpZGVFZmZlY3RzIiwiU2lkZUVmZmVjdHMiLCJlZGl0RmxvdyIsIkVkaXRGbG93Iiwic2hhcmUiLCJTaGFyZSIsImNvbGxhYm9yYXRpdmVEcmFmdCIsIkNvbGxhYm9yYXRpdmVEcmFmdCIsInJlY29tbWVuZGF0aW9ucyIsIlJlY29tbWVuZGF0aW9ucyIsImdldEFwcENvbXBvbmVudCIsImplc3QiLCJmbiIsIkFwcENvbXBvbmVudCIsImdldFZpZXciLCJNb2NrQ29udHJvbGxlciIsIm1vY2tNVkMiLCJleGlzdGluZyIsInZpZXciLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsImdldFRleHQiLCJ0ZXh0SUQiLCJwYXJhbWV0ZXJzIiwibWV0YVBhdGgiLCJyZXNvdXJjZU1vZGVsIiwiUmVzb3VyY2VNb2RlbCIsImJ1bmRsZU5hbWUiLCJlbmhhbmNlV2l0aCIsImFzeW5jIiwiY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBXaXRoTW9jayB9IGZyb20gXCJAc2FwLXV4L2plc3QtbW9jay11aTUvZGlzdC9nZW5lcmljXCI7XG5pbXBvcnQgeyBtb2NrIH0gZnJvbSBcIkBzYXAtdXgvamVzdC1tb2NrLXVpNS9kaXN0L2dlbmVyaWNcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgQ29sbGFib3JhdGl2ZURyYWZ0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Db2xsYWJvcmF0aXZlRHJhZnRcIjtcbmltcG9ydCBFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvRWRpdEZsb3dcIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IFJlY29tbWVuZGF0aW9ucyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUmVjb21tZW5kYXRpb25zXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IENvbXBvc2l0ZUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9Db21wb3NpdGVCaW5kaW5nXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFQcm9wZXJ0eUJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRleHQgPSBXaXRoTW9jazxDb250ZXh0PiAmIHtcblx0X2lzS2VwdEFsaXZlOiBib29sZWFuO1xuXHRfY29udGV4dERhdGE6IGFueTtcblx0X29CaW5kaW5nOiBhbnk7XG5cdF9pc0luYWN0aXZlOiBib29sZWFuO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRleHQuXG4gKlxuICogQHBhcmFtIG9Db250ZXh0RGF0YSBBIG1hcCBvZiB0aGUgZGlmZmVyZW50IHByb3BlcnRpZXMgb2YgdGhlIGNvbnRleHQuIFRoZSB2YWx1ZSBmb3IgdGhlIGtleSAnJHBhdGgnIHdpbGwgYmUgcmV0dXJuZWQgYnkgdGhlICdnZXRQYXRoJyBtZXRob2RcbiAqIEBwYXJhbSBvQmluZGluZyBUaGUgYmluZGluZyBvZiB0aGUgY29udGV4dFxuICogQHBhcmFtIGlzSW5hY3RpdmUgSXMgdGhlIGNvbnRleHQgaW5pYWN0aXZlIG9yIG5vdFxuICogQHJldHVybnMgQSBuZXcgTW9ja0NvbnRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250ZXh0KG9Db250ZXh0RGF0YT86IGFueSwgb0JpbmRpbmc/OiBhbnksIGlzSW5hY3RpdmU/OiBib29sZWFuKTogTW9ja0NvbnRleHQge1xuXHQvLyBVZ2x5IHdvcmthcm91bmQgdG8gZ2V0IGEgcHJvcGVyIG1vY2sgcGJqZWN0LCBhcyBDb250ZXh0IGlzbid0IHByb3Blcmx5IGV4cG9ydGVkIGZyb20gVUk1XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT2JqZWN0LmdldFByb3RvdHlwZU9mKChDb250ZXh0IGFzIGFueSkuY3JlYXRlTmV3Q29udGV4dChudWxsLCBudWxsLCBcIi9lXCIpKSkgYXMgTW9ja0NvbnRleHQ7XG5cdG1vY2tlZC5faXNLZXB0QWxpdmUgPSBmYWxzZTtcblx0bW9ja2VkLl9jb250ZXh0RGF0YSA9IG9Db250ZXh0RGF0YSB8fCB7fTtcblx0bW9ja2VkLl9vQmluZGluZyA9IG9CaW5kaW5nO1xuXHRtb2NrZWQuX2lzSW5hY3RpdmUgPSAhIWlzSW5hY3RpdmU7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV07XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKChrZXlPcktleXM6IHN0cmluZyB8IHN0cmluZ1tdKSA9PiB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoa2V5T3JLZXlzKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXlPcktleXMubWFwKChrZXkpID0+IG1vY2tlZC5fY29udGV4dERhdGFba2V5XSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fY29udGV4dERhdGFba2V5T3JLZXlzXSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0T2JqZWN0Lm1vY2tJbXBsZW1lbnRhdGlvbigoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcblx0XHRyZXR1cm4ga2V5ID8gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fY29udGV4dERhdGFba2V5XSkgOiBtb2NrZWQuX2NvbnRleHREYXRhO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suc2V0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuXHRcdG1vY2tlZC5fY29udGV4dERhdGFba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiBtb2NrZWQuX2NvbnRleHREYXRhW2tleV07XG5cdH0pO1xuXG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGxldCByZXN1bHQgPSBwYXRoID8gbW9ja2VkLl9jb250ZXh0RGF0YVtwYXRoXSA6IG1vY2tlZC5fY29udGV4dERhdGE7XG5cblx0XHRpZiAoIXJlc3VsdCAmJiBwYXRoICYmIHBhdGguaW5kZXhPZihcIi9cIikgPiAtMSkge1xuXHRcdFx0Y29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdHJlc3VsdCA9IHBhcnRzLnJlZHVjZSgoc3VtLCBwYXJ0OiBhbnkpID0+IHtcblx0XHRcdFx0c3VtID0gcGFydCA/IHN1bVtwYXJ0XSA6IHN1bTtcblx0XHRcdFx0cmV0dXJuIHN1bTtcblx0XHRcdH0sIG1vY2tlZC5fY29udGV4dERhdGEpO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0pO1xuXG5cdG1vY2tlZC5tb2NrLmdldFBhdGgubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fY29udGV4dERhdGFbXCIkcGF0aFwiXSk7XG5cdG1vY2tlZC5tb2NrLmdldEJpbmRpbmcubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5fb0JpbmRpbmcpO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9vQmluZGluZz8uZ2V0TW9kZWwoKSk7XG5cdG1vY2tlZC5tb2NrLnNldEtlZXBBbGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKGJvb2w6IGJvb2xlYW4sIF9mbk9uQmVmb3JlRGVzdHJveT86IGFueSwgX2JSZXF1ZXN0TWVzc2FnZXM/OiBib29sZWFuKSA9PiB7XG5cdFx0bW9ja2VkLl9pc0tlcHRBbGl2ZSA9IGJvb2w7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5pc0tlZXBBbGl2ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbW9ja2VkLl9pc0tlcHRBbGl2ZSk7XG5cdG1vY2tlZC5tb2NrLmlzSW5hY3RpdmUubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IG1vY2tlZC5faXNJbmFjdGl2ZSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tDb250ZXh0IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dDogbmV3IChvVmFsdWVzPzogYW55LCBvQmluZGluZz86IGFueSwgaXNJbmFjdGl2ZT86IGJvb2xlYW4pID0+IE1vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLmJhc2UuRXZlbnRcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0V2ZW50ID0gV2l0aE1vY2s8RXZlbnQ+ICYge1xuXHRfcGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0V2ZW50LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgVGhlIHBhcmFtZXRlcnMgb2YgdGhlIGV2ZW50XG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrRXZlbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tFdmVudChwYXJhbXM/OiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSwgc291cmNlPzogRXZlbnRQcm92aWRlcik6IE1vY2tFdmVudCB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soRXZlbnQpIGFzIE1vY2tFdmVudDtcblx0bW9ja2VkLl9wYXJhbXMgPSBwYXJhbXMgfHwge307XG5cblx0aWYgKHNvdXJjZSkge1xuXHRcdG1vY2tlZC5tb2NrLmdldFNvdXJjZS5tb2NrUmV0dXJuVmFsdWUoc291cmNlKTtcblx0fVxuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suZ2V0UGFyYW1ldGVyLm1vY2tJbXBsZW1lbnRhdGlvbigobmFtZSkgPT4gbW9ja2VkLl9wYXJhbXNbbmFtZV0pO1xuXHRtb2NrZWQubW9jay5nZXRQYXJhbWV0ZXJzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fcGFyYW1zO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0V2ZW50IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrRXZlbnQ6IG5ldyAocGFyYW1zPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gTW9ja0V2ZW50ID0gY3JlYXRlTW9ja0V2ZW50IGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tMaXN0QmluZGluZyA9IFdpdGhNb2NrPE9EYXRhTGlzdEJpbmRpbmc+ICYge1xuXHRfYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblx0X21vY2tNb2RlbD86IE1vY2tNb2RlbDtcblxuXHQvKipcblx0ICogVXRpbGl0eSBtZXRob2QgdG8gc2V0IHRoZSBtb2RlbCBvZiB0aGUgTGlzdEJpbmRpbmdcblx0ICovXG5cdHNldE1vZGVsOiAobW9kZWw6IE1vY2tNb2RlbCkgPT4gdm9pZDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tMaXN0QmluZGluZy5cbiAqXG4gKiBAcGFyYW0gYUNvbnRleHREYXRhIEFuIGFycmF5IG9mIG9iamVjdHMgaG9sZGluZyB0aGUgZGlmZmVyZW50IHByb3BlcnRpZXMgb2YgdGhlIGNvbnRleHRzIHJlZmVyZW5jZWQgYnkgdGhlIExpc3RCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIExpc3RCaW5kaW5nXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tMaXN0QmluZGluZyhhQ29udGV4dERhdGE/OiBhbnlbXSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCk6IE1vY2tMaXN0QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFMaXN0QmluZGluZykgYXMgTW9ja0xpc3RCaW5kaW5nO1xuXHRhQ29udGV4dERhdGEgPSBhQ29udGV4dERhdGEgfHwgW107XG5cdG1vY2tlZC5fYU1vY2tDb250ZXh0cyA9IGFDb250ZXh0RGF0YS5tYXAoKGNvbnRleHREYXRhKSA9PiB7XG5cdFx0cmV0dXJuIGNyZWF0ZU1vY2tDb250ZXh0KGNvbnRleHREYXRhLCBtb2NrZWQpO1xuXHR9KTtcblx0bW9ja2VkLl9tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXG5cdC8vIFV0aWxpdHkgQVBJXG5cdG1vY2tlZC5zZXRNb2RlbCA9IChtb2RlbDogTW9ja01vZGVsKSA9PiB7XG5cdFx0bW9ja2VkLl9tb2NrTW9kZWwgPSBtb2RlbDtcblx0fTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5yZXF1ZXN0Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1vY2tlZC5fYU1vY2tDb250ZXh0cyk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRDdXJyZW50Q29udGV4dHMubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hTW9ja0NvbnRleHRzO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QWxsQ3VycmVudENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldENvbnRleHRzLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fYU1vY2tDb250ZXh0cztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE1vZGVsLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fbW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0VXBkYXRlR3JvdXBJZC5tb2NrUmV0dXJuVmFsdWUoXCJhdXRvXCIpO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tMaXN0QmluZGluZzogbmV3IChhQ29udGV4dHM/OiBhbnlbXSwgbW9ja01vZGVsPzogTW9ja01vZGVsKSA9PiBNb2NrTGlzdEJpbmRpbmcgPSBjcmVhdGVNb2NrTGlzdEJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tQcm9wZXJ0eUJpbmRpbmcgPSBXaXRoTW9jazxPRGF0YVByb3BlcnR5QmluZGluZz4gJiB7XG5cdF92YWx1ZT86IGFueTtcblx0X3BhdGg/OiBzdHJpbmc7XG5cdF9tb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrUHJvcGVydHlCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgcmV0dXJuZCBieSB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgUHJvcGVydHlCaW5kaW5nXG4gKiBAcGFyYW0gb01vY2tNb2RlbCBUaGUgbW9kZWwgb2YgdGhlIFByb3BlcnR5QmluZGluZ1xuICogQHJldHVybnMgQSBuZXcgTW9ja1Byb3BlcnR5QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja1Byb3BlcnR5QmluZGluZyh2YWx1ZTogYW55LCBwYXRoPzogc3RyaW5nLCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja1Byb3BlcnR5QmluZGluZyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soT0RhdGFQcm9wZXJ0eUJpbmRpbmcpIGFzIE1vY2tQcm9wZXJ0eUJpbmRpbmc7XG5cdG1vY2tlZC5fbW9ja01vZGVsID0gb01vY2tNb2RlbDtcblx0bW9ja2VkLl92YWx1ZSA9IHZhbHVlO1xuXHRtb2NrZWQuX3BhdGggPSBwYXRoO1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suaXNBLm1vY2tJbXBsZW1lbnRhdGlvbigoc0NsYXNzTmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhUHJvcGVydHlCaW5kaW5nXCI7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX21vY2tNb2RlbDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldFZhbHVlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fdmFsdWU7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRQYXRoLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5fcGF0aDtcblx0fSk7XG5cblx0cmV0dXJuIG1vY2tlZDtcbn1cbi8qKlxuICogRm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucywgd2Uga2VlcCBhIG5ldyBvcGVyYXRvci4gVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tQcm9wZXJ0eUJpbmRpbmc6IG5ldyAodmFsdWU6IGFueSwgb01vY2tNb2RlbD86IE1vY2tNb2RlbCkgPT4gTW9ja1Byb3BlcnR5QmluZGluZyA9IGNyZWF0ZU1vY2tQcm9wZXJ0eUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbXBvc2l0ZUJpbmRpbmcgPSBXaXRoTW9jazxDb21wb3NpdGVCaW5kaW5nPiAmIHtcblx0X2FCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbXBvc2l0ZUJpbmRpbmcuXG4gKlxuICogQHBhcmFtIGFCaW5kaW5ncyBUaGUgYmluZGluZ3Mgb2YgdGhlIENvbXBvc2l0ZUJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb21wb3NpdGVCaW5kaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyhhQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXSk6IE1vY2tDb21wb3NpdGVCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhDb21wb3NpdGVCaW5kaW5nKSBhcyBNb2NrQ29tcG9zaXRlQmluZGluZztcblx0bW9ja2VkLl9hQmluZGluZ3MgPSBhQmluZGluZ3M7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwuQ29tcG9zaXRlQmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0QmluZGluZ3MubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLl9hQmluZGluZ3M7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRWYWx1ZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQuX2FCaW5kaW5ncy5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcuZ2V0VmFsdWUoKSk7XG5cdH0pO1xuXG5cdHJldHVybiBtb2NrZWQ7XG59XG4vKipcbiAqIEZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGtlZXAgYSBuZXcgb3BlcmF0b3IuIFVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBjcmVhdGVNb2NrQ29tcG9zaXRlQmluZGluZyBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja0NvbXBvc2l0ZUJpbmRpbmc6IG5ldyAoYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW10pID0+IE1vY2tDb21wb3NpdGVCaW5kaW5nID0gY3JlYXRlTW9ja0NvbXBvc2l0ZUJpbmRpbmcgYXMgYW55O1xuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIGEgc2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja0NvbnRleHRCaW5kaW5nID0gV2l0aE1vY2s8T0RhdGFDb250ZXh0QmluZGluZz4gJiB7XG5cdG9Nb2NrQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdGlzS2VwdEFsaXZlOiBib29sZWFuO1xuXHRtb2NrTW9kZWw/OiBNb2NrTW9kZWw7XG5cblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIGFjY2VzcyB0aGUgaW50ZXJuYWwgTW9ja0NvbnRleHQgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRnZXRJbnRlcm5hbE1vY2tDb250ZXh0OiAoKSA9PiBNb2NrQ29udGV4dDtcblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIHNldCB0aGUgbW9kZWwgb2YgdGhlIENvbnRleHRCaW5kaW5nXG5cdCAqL1xuXHRzZXRNb2RlbDogKG9Nb2RlbDogTW9ja01vZGVsKSA9PiB2b2lkO1xufTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja0NvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEBwYXJhbSBvTW9ja01vZGVsIFRoZSBtb2RlbCBvZiB0aGUgQ29udGV4dEJpbmRpbmdcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tDb250ZXh0QmluZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nKG9Db250ZXh0PzogYW55LCBvTW9ja01vZGVsPzogTW9ja01vZGVsKTogTW9ja0NvbnRleHRCaW5kaW5nIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YUNvbnRleHRCaW5kaW5nKSBhcyBNb2NrQ29udGV4dEJpbmRpbmc7XG5cdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9ja01vZGVsO1xuXHRtb2NrZWQub01vY2tDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob0NvbnRleHQgfHwge30sIG1vY2tlZCk7XG5cblx0Ly8gVXRpbGl0eSBBUElcblx0bW9ja2VkLmdldEludGVybmFsTW9ja0NvbnRleHQgPSAoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH07XG5cdG1vY2tlZC5zZXRNb2RlbCA9IChvTW9kZWw6IE1vY2tNb2RlbCkgPT4ge1xuXHRcdG1vY2tlZC5tb2NrTW9kZWwgPSBvTW9kZWw7XG5cdH07XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZ2V0Qm91bmRDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5vTW9ja0NvbnRleHQ7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdHJldHVybiBtb2NrZWQubW9ja01vZGVsO1xuXHR9KTtcblx0bW9ja2VkLm1vY2suZXhlY3V0ZS5tb2NrUmVzb2x2ZWRWYWx1ZSh0cnVlKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRleHRCaW5kaW5nIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrQ29udGV4dEJpbmRpbmc6IG5ldyAob0NvbnRleHQ/OiBhbnksIG9Nb2NrTW9kZWw/OiBNb2NrTW9kZWwpID0+IE1vY2tDb250ZXh0QmluZGluZyA9IGNyZWF0ZU1vY2tDb250ZXh0QmluZGluZyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja01ldGFNb2RlbCA9IFdpdGhNb2NrPE9EYXRhTWV0YU1vZGVsPiAmIHtcblx0b01ldGFDb250ZXh0OiBNb2NrQ29udGV4dDtcbn07XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tNZXRhTW9kZWwuXG4gKlxuICogQHBhcmFtIG9NZXRhRGF0YSBBIG1hcCBvZiB0aGUgZGlmZmVyZW50IG1ldGFkYXRhIHByb3BlcnRpZXMgb2YgdGhlIE1ldGFNb2RlbCAocGF0aCAtPiB2YWx1ZSkuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrTWV0YU1vZGVsKG9NZXRhRGF0YT86IGFueSk6IE1vY2tNZXRhTW9kZWwge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKE9EYXRhTWV0YU1vZGVsKSBhcyBNb2NrTWV0YU1vZGVsO1xuXHRtb2NrZWQub01ldGFDb250ZXh0ID0gY3JlYXRlTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblxuXHQvLyBEZWZhdWx0IGJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldE1ldGFDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBjcmVhdGVNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KTtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmdldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9NZXRhQ29udGV4dC5nZXRQcm9wZXJ0eShzUGF0aCk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5jcmVhdGVCaW5kaW5nQ29udGV4dC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gY3JlYXRlTW9ja0NvbnRleHQoeyAkcGF0aDogc1BhdGggfSk7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNZXRhUGF0aC5tb2NrSW1wbGVtZW50YXRpb24oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGNvbnN0IG1ldGFtb2RlbCA9IG5ldyBPRGF0YU1ldGFNb2RlbCgpO1xuXHRcdHJldHVybiBzUGF0aCA/IG1ldGFtb2RlbC5nZXRNZXRhUGF0aChzUGF0aCkgOiBzUGF0aDtcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmlzQS5tb2NrSW1wbGVtZW50YXRpb24oKHNDbGFzc05hbWU6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFwiO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja01ldGFNb2RlbCBpbnN0ZWFkLlxuICovXG5leHBvcnQgY29uc3QgTW9ja01ldGFNb2RlbDogbmV3IChvTWV0YURhdGE/OiBhbnkpID0+IE1vY2tNZXRhTW9kZWwgPSBjcmVhdGVNb2NrTWV0YU1vZGVsIGFzIGFueTtcblxuLyoqXG4gKiBVdGlsaXR5IHR5cGUgdG8gbW9jayBhIHNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXG4gKi9cbmV4cG9ydCB0eXBlIE1vY2tNb2RlbCA9IFdpdGhNb2NrPE9EYXRhTW9kZWw+ICYge1xuXHRvTWV0YU1vZGVsPzogTW9ja01ldGFNb2RlbDtcblx0bW9ja0xpc3RCaW5kaW5nPzogTW9ja0xpc3RCaW5kaW5nO1xuXHRtb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmc7XG5cblx0LyoqXG5cdCAqIFV0aWxpdHkgbWV0aG9kIHRvIHNldCB0aGUgbWV0YW1vZGVsIG9mIHRoZSBNb2NrTW9kZWxcblx0ICovXG5cdHNldE1ldGFNb2RlbDogKG9NZXRhTW9kZWw6IE1vY2tNZXRhTW9kZWwpID0+IHZvaWQ7XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrTW9kZWwuXG4gKlxuICogQHBhcmFtIG9Nb2NrTGlzdEJpbmRpbmcgQSBsaXN0IGJpbmRpbmcgdGhhdCB3aWxsIGJlIHJldHVybmVkIHdoZW4gY2FsbGluZyBiaW5kTGlzdC5cbiAqIEBwYXJhbSBvTW9ja0NvbnRleHRCaW5kaW5nIEEgY29udGV4dCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZENvbnRleHQuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbChvTW9ja0xpc3RCaW5kaW5nPzogTW9ja0xpc3RCaW5kaW5nLCBvTW9ja0NvbnRleHRCaW5kaW5nPzogTW9ja0NvbnRleHRCaW5kaW5nKTogTW9ja01vZGVsIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhPRGF0YU1vZGVsKSBhcyBNb2NrTW9kZWw7XG5cdG1vY2tlZC5mbk9wdGltaXN0aWNCYXRjaEVuYWJsZXIgPSBudWxsO1xuXHRtb2NrZWQubW9ja0xpc3RCaW5kaW5nID0gb01vY2tMaXN0QmluZGluZztcblx0bW9ja2VkLm1vY2tDb250ZXh0QmluZGluZyA9IG9Nb2NrQ29udGV4dEJpbmRpbmc7XG5cdGlmIChvTW9ja0xpc3RCaW5kaW5nKSB7XG5cdFx0b01vY2tMaXN0QmluZGluZy5zZXRNb2RlbChtb2NrZWQpO1xuXHR9XG5cdGlmIChvTW9ja0NvbnRleHRCaW5kaW5nKSB7XG5cdFx0b01vY2tDb250ZXh0QmluZGluZy5zZXRNb2RlbChtb2NrZWQpO1xuXHR9XG5cblx0Ly8gVXRpbGl0eSBBUElcblx0bW9ja2VkLnNldE1ldGFNb2RlbCA9IChvTWV0YU1vZGVsOiBNb2NrTWV0YU1vZGVsKSA9PiB7XG5cdFx0bW9ja2VkLm9NZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHR9O1xuXG5cdC8vIERlZmF1bHQgYmVoYXZpb3Jcblx0bW9ja2VkLm1vY2suYmluZExpc3QubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm1vY2tMaXN0QmluZGluZztcblx0fSk7XG5cdG1vY2tlZC5tb2NrLmJpbmRDb250ZXh0Lm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0cmV0dXJuIG1vY2tlZC5tb2NrQ29udGV4dEJpbmRpbmc7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5nZXRNZXRhTW9kZWwubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHtcblx0XHRyZXR1cm4gbW9ja2VkLm9NZXRhTW9kZWw7XG5cdH0pO1xuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja01vZGVsIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBNb2NrTW9kZWw6IG5ldyAob01vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgb01vY2tDb250ZXh0QmluZGluZz86IE1vY2tDb250ZXh0QmluZGluZykgPT4gTW9ja01vZGVsID1cblx0Y3JlYXRlTW9ja01vZGVsIGFzIGFueTtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsIHVzZWQgd2l0aCBhIGxpc3RCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvTW9ja0xpc3RCaW5kaW5nIEEgbGlzdCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZExpc3QuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbEZyb21MaXN0QmluZGluZyhvTW9ja0xpc3RCaW5kaW5nOiBNb2NrTGlzdEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRyZXR1cm4gY3JlYXRlTW9ja01vZGVsKG9Nb2NrTGlzdEJpbmRpbmcpO1xufVxuLyoqXG4gKiAgRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja01vZGVsIHVzZWQgd2l0aCBhIGNvbnRleHRCaW5kaW5nLlxuICpcbiAqIEBwYXJhbSBvTW9ja0NvbnRleHRCaW5kaW5nIEEgY29udGV4dCBiaW5kaW5nIHRoYXQgd2lsbCBiZSByZXR1cm5lZCB3aGVuIGNhbGxpbmcgYmluZENvbnRleHQuXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrTW9kZWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tNb2RlbEZyb21Db250ZXh0QmluZGluZyhvTW9ja0NvbnRleHRCaW5kaW5nOiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRyZXR1cm4gY3JlYXRlTW9ja01vZGVsKHVuZGVmaW5lZCwgb01vY2tDb250ZXh0QmluZGluZyk7XG59XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAudWkuY29yZS5tdmMuVmlld1xuICovXG5leHBvcnQgdHlwZSBNb2NrVmlldyA9IFdpdGhNb2NrPEZFVmlldz47XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IE1vY2tWaWV3LlxuICpcbiAqIEByZXR1cm5zIEEgbmV3IE1vY2tWaWV3XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2NrVmlldygpOiBNb2NrVmlldyB7XG5cdGNvbnN0IG1vY2tlZCA9IG1vY2soVmlldyk7XG5cblx0Ly8gRGVmYXVsdCBiZWhhdmlvclxuXHRtb2NrZWQubW9jay5pc0EubW9ja0ltcGxlbWVudGF0aW9uKChzQ2xhc3NOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkuY29yZS5tdmMuVmlld1wiO1xuXHR9KTtcblxuXHRyZXR1cm4gbW9ja2VkIGFzIE1vY2tWaWV3O1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlTW9ja1ZpZXcgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tWaWV3OiBuZXcgKCkgPT4gTW9ja1ZpZXcgPSBjcmVhdGVNb2NrVmlldyBhcyBhbnk7XG5cbi8qKlxuICogVXRpbGl0eSB0eXBlIHRvIG1vY2sgYSBzYXAuZmUuY29yZS5QYWdlQ29udHJvbGxlclxuICovXG5leHBvcnQgdHlwZSBNb2NrQ29udHJvbGxlciA9IFdpdGhNb2NrPENvbnRyb2xsZXI+ICYge1xuXHRfcm91dGluZzogV2l0aE1vY2s8SW50ZXJuYWxSb3V0aW5nPjtcblx0X3NpZGVFZmZlY3RzOiBXaXRoTW9jazxTaWRlRWZmZWN0cz47XG5cdGVkaXRGbG93OiBXaXRoTW9jazxFZGl0Rmxvdz47XG5cdHNoYXJlOiBXaXRoTW9jazxTaGFyZT47XG5cdHJlY29tbWVuZGF0aW9uczogV2l0aE1vY2s8UmVjb21tZW5kYXRpb25zPjtcblx0Y29sbGFib3JhdGl2ZURyYWZ0OiBXaXRoTW9jazxDb2xsYWJvcmF0aXZlRHJhZnQ+O1xuXHRnZXRBcHBDb21wb25lbnQ6ICgpID0+IFdpdGhNb2NrPEFwcENvbXBvbmVudD47XG59O1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBNb2NrQ29udHJvbGxlci5cbiAqXG4gKiBAcmV0dXJucyBBIG5ldyBNb2NrQ29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTW9ja0NvbnRyb2xsZXIoKTogTW9ja0NvbnRyb2xsZXIge1xuXHRjb25zdCBtb2NrZWQgPSBtb2NrKENvbnRyb2xsZXIpIGFzIE1vY2tDb250cm9sbGVyO1xuXHRtb2NrZWQuX3JvdXRpbmcgPSBtb2NrKEludGVybmFsUm91dGluZyk7XG5cdG1vY2tlZC5fc2lkZUVmZmVjdHMgPSBtb2NrKFNpZGVFZmZlY3RzKTtcblx0bW9ja2VkLmVkaXRGbG93ID0gbW9jayhFZGl0Rmxvdyk7XG5cdG1vY2tlZC5zaGFyZSA9IG1vY2soU2hhcmUpO1xuXHRtb2NrZWQuY29sbGFib3JhdGl2ZURyYWZ0ID0gbW9jayhDb2xsYWJvcmF0aXZlRHJhZnQpO1xuXHRtb2NrZWQucmVjb21tZW5kYXRpb25zID0gbW9jayhSZWNvbW1lbmRhdGlvbnMpO1xuXHRtb2NrZWQuZ2V0QXBwQ29tcG9uZW50ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShtb2NrKEFwcENvbXBvbmVudCkpO1xuXHQvLyBEZWZhdWx0IEJlaGF2aW9yXG5cdG1vY2tlZC5tb2NrLmdldFZpZXcubW9ja1JldHVyblZhbHVlKGNyZWF0ZU1vY2tWaWV3KCkpO1xuXHRtb2NrZWQubW9jay5pc0EubW9ja1JldHVyblZhbHVlKGZhbHNlKTtcblxuXHRyZXR1cm4gbW9ja2VkO1xufVxuLyoqXG4gKiBGb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLCB3ZSBrZWVwIGEgbmV3IG9wZXJhdG9yLiBVc2UgdGhlIGZhY3RvcnkgZnVuY3Rpb24gbW9ja0NvbnRyb2xsZXIgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1vY2tDb250cm9sbGVyOiBuZXcgKCkgPT4gTW9ja0NvbnRyb2xsZXIgPSBjcmVhdGVNb2NrQ29udHJvbGxlciBhcyBhbnk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTVZDTW9jayB7XG5cdG1vZGVsOiBNb2NrTW9kZWw7XG5cdHZpZXc6IE1vY2tWaWV3O1xuXHRjb250cm9sbGVyOiBNb2NrQ29udHJvbGxlcjtcbn1cbi8qKlxuICogR2VuZXJhdGUgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgbW9ja3MgdGhhdCByZWZlciB0byBlYWNoIG90aGVyLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZyBPcHRpb25hbCBleGlzdGluZyBtb2NrZWQgaW5zdGFuY2VzIHRoYXQgc2hvdWxkIGJlIHVzZWRcbiAqIEByZXR1cm5zIE1vY2tlZCBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBpbnN0YW5jZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tNVkMoZXhpc3Rpbmc/OiBQYXJ0aWFsPE1WQ01vY2s+KTogTVZDTW9jayB7XG5cdGNvbnN0IG1vZGVsID0gZXhpc3Rpbmc/Lm1vZGVsIHx8IGNyZWF0ZU1vY2tNb2RlbCgpO1xuXHRjb25zdCB2aWV3ID0gZXhpc3Rpbmc/LnZpZXcgfHwgY3JlYXRlTW9ja1ZpZXcoKTtcblx0Y29uc3QgY29udHJvbGxlciA9IGV4aXN0aW5nPy5jb250cm9sbGVyIHx8IGNyZWF0ZU1vY2tDb250cm9sbGVyKCk7XG5cblx0dmlldy5tb2NrLmdldENvbnRyb2xsZXIubW9ja1JldHVyblZhbHVlKGNvbnRyb2xsZXIpO1xuXHR2aWV3Lm1vY2suZ2V0TW9kZWwubW9ja1JldHVyblZhbHVlKG1vZGVsKTtcblx0Y29udHJvbGxlci5tb2NrLmdldFZpZXcubW9ja1JldHVyblZhbHVlKHZpZXcpO1xuXG5cdHJldHVybiB7IG1vZGVsLCB2aWV3LCBjb250cm9sbGVyIH07XG59XG5cbi8qKlxuICogVG8gYmUgdXNlZCB0byBsb2FkIG1lc3NhZ2VzIGJ1bmRsZXMgZm9yIHRlc3RzIHdpdGhvdXQgYXBwL3BhZ2UgY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSB0ZXh0SUQgSUQgb2YgdGhlIFRleHRcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFycmF5IG9mIHBhcmFtZXRlcnMgdGhhdCBhcmUgdXNlZCB0byBjcmVhdGUgdGhlIHRleHRcbiAqIEBwYXJhbSBtZXRhUGF0aCBFbnRpdHkgc2V0IG5hbWUgb3IgYWN0aW9uIG5hbWUgdG8gb3ZlcmxvYWQgYSB0ZXh0XG4gKiBAcmV0dXJucyBEZXRlcm1pbmVkIHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHQodGV4dElEOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBhbnlbXSwgbWV0YVBhdGg/OiBzdHJpbmcpIHtcblx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IG5ldyBSZXNvdXJjZU1vZGVsKHtcblx0XHRidW5kbGVOYW1lOiBcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIixcblx0XHRlbmhhbmNlV2l0aDogW3sgYnVuZGxlTmFtZTogXCJzYXAuZmUubWFjcm9zLm1lc3NhZ2VidW5kbGVcIiB9LCB7IGJ1bmRsZU5hbWU6IFwic2FwLmZlLnRlbXBsYXRlcy5tZXNzYWdlYnVuZGxlXCIgfV0sXG5cdFx0YXN5bmM6IGZhbHNlXG5cdH0pO1xuXHRyZXR1cm4gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KHRleHRJRCwgcGFyYW1ldGVycywgbWV0YVBhdGgpO1xufVxuXG4vKipcbiAqIFV0aWxpdHkgdHlwZSB0byBtb2NrIFJlc291cmNlTW9kZWxcbiAqL1xuZXhwb3J0IHR5cGUgTW9ja1Jlc291cmNlTW9kZWwgPSBXaXRoTW9jazxSZXNvdXJjZU1vZGVsPjtcbi8qKlxuICogRmFjdG9yeSBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcgTW9ja1ZpZXcuXG4gKlxuICogQHJldHVybnMgQSBuZXcgTW9ja1ZpZXdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsKCk6IE1vY2tSZXNvdXJjZU1vZGVsIHtcblx0Y29uc3QgbW9ja2VkID0gbW9jayhSZXNvdXJjZU1vZGVsKTtcblx0bW9ja2VkLmdldFRleHQgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKGdldFRleHQpO1xuXHRyZXR1cm4gbW9ja2VkO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7RUFnQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNPLFNBQVNBLGlCQUFpQixDQUFDQyxZQUFrQixFQUFFQyxRQUFjLEVBQUVDLFVBQW9CLEVBQWU7SUFDeEc7SUFDQSxNQUFNQyxNQUFNLEdBQUdDLElBQUksQ0FBQ0MsTUFBTSxDQUFDQyxjQUFjLENBQUVDLE9BQU8sQ0FBU0MsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFnQjtJQUM5R0wsTUFBTSxDQUFDTSxZQUFZLEdBQUcsS0FBSztJQUMzQk4sTUFBTSxDQUFDTyxZQUFZLEdBQUdWLFlBQVksSUFBSSxDQUFDLENBQUM7SUFDeENHLE1BQU0sQ0FBQ1EsU0FBUyxHQUFHVixRQUFRO0lBQzNCRSxNQUFNLENBQUNTLFdBQVcsR0FBRyxDQUFDLENBQUNWLFVBQVU7O0lBRWpDO0lBQ0FDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDUyxHQUFHLENBQUNDLGtCQUFrQixDQUFFQyxVQUFrQixJQUFLO01BQzFELE9BQU9BLFVBQVUsS0FBSywrQkFBK0I7SUFDdEQsQ0FBQyxDQUFDO0lBQ0ZaLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDWSxXQUFXLENBQUNGLGtCQUFrQixDQUFFRyxHQUFXLElBQUs7TUFDM0QsT0FBT2QsTUFBTSxDQUFDTyxZQUFZLENBQUNPLEdBQUcsQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFDRmQsTUFBTSxDQUFDQyxJQUFJLENBQUNjLGVBQWUsQ0FBQ0osa0JBQWtCLENBQUVLLFNBQTRCLElBQUs7TUFDaEYsSUFBSUMsS0FB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
@@ -350,6 +350,8 @@ export function createMockMetaModel(oMetaData?: any): MockMetaModel {
350
350
  return createMockContext({ $path: sPath });
351
351
  });
352
352
  mocked.mock.getMetaPath.mockImplementation((sPath: string) => {
353
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
354
+ // @ts-ignore
353
355
  const metamodel = new ODataMetaModel();
354
356
  return sPath ? metamodel.getMetaPath(sPath) : sPath;
355
357
  });
@@ -19,16 +19,17 @@ sap.ui.define(["sap/fe/test/Utils", "sap/ui/test/OpaBuilder", "sap/fe/test/build
19
19
  FEBuilder.create()
20
20
  .isDialogElement()
21
21
  .hasType("sap.m.Input")
22
- .hasProperties({ id: "bookmarkTitleInput" })
22
+ .hasProperties({ id: "__xmlview1--bookmarkTitleInput" })
23
23
  .doEnterText(sBookmarkTitle)
24
24
  .description(Utils.formatMessage("Enter '{0}' as Bookmark title", sBookmarkTitle))
25
+
25
26
  .success(
26
27
  FEBuilder.create()
27
28
  .isDialogElement()
28
29
  .hasType("sap.m.Button")
29
- .hasProperties({ id: "bookmarkOkBtn" })
30
+ .hasProperties({ id: "bookmarkCancelBtn" })
30
31
  .doPress()
31
- .description("Confirm 'Save as Tile' dialog")
32
+ .description("Cancel 'Save as Tile' dialog")
32
33
  )
33
34
  );
34
35
  },
@@ -177,15 +177,16 @@ sap.ui.define(
177
177
  * @ui5-restricted
178
178
  */
179
179
  HeaderActions.prototype.iExecuteSaveAsTile = function (sBookmarkTitle) {
180
- var oShareProperties = {
181
- icon: "sap-icon://action"
182
- },
183
- oOverflowToolbarBuilder = this.createOverflowToolbarBuilder(this._sObjectPageLayoutId);
180
+ var oShareButtonProperties = {
181
+ icon: "sap-icon://action"
182
+ };
183
+ var oShareBuilder = FEBuilder.create(this.getOpaInstance());
184
184
 
185
185
  return this.prepareResult(
186
- oOverflowToolbarBuilder
187
- .doOnContent(OpaBuilder.Matchers.properties(oShareProperties), OpaBuilder.Actions.press())
188
- .description(Utils.formatMessage("Pressing header '{0}' Share button", this.getIdentifier()))
186
+ oShareBuilder
187
+ .hasProperties(oShareButtonProperties)
188
+ .do(OpaBuilder.Actions.press())
189
+ .description(Utils.formatMessage("Open share menu"))
189
190
  .success(APIHelper.createSaveAsTileExecutorBuilder(sBookmarkTitle))
190
191
  .execute()
191
192
  );
@@ -202,11 +203,12 @@ sap.ui.define(
202
203
  var oShareProperties = {
203
204
  icon: "sap-icon://action"
204
205
  },
205
- oOverflowToolbarBuilder = this.createOverflowToolbarBuilder(this._sObjectPageLayoutId);
206
+ oShareBuilder = FEBuilder.create(this.getOpaInstance());
206
207
 
207
208
  return this.prepareResult(
208
- oOverflowToolbarBuilder
209
- .doOnContent(OpaBuilder.Matchers.properties(oShareProperties), OpaBuilder.Actions.press())
209
+ oShareBuilder
210
+ .hasProperties(oShareProperties)
211
+ .do(OpaBuilder.Actions.press())
210
212
  .description(Utils.formatMessage("Pressing header '{0}' Share button", this.getIdentifier()))
211
213
  .success(APIHelper.createSendEmailExecutorBuilder())
212
214
  .execute()
@@ -53,13 +53,16 @@ sap.ui.define(
53
53
  * @ui5-restricted
54
54
  */
55
55
  HeaderActionsLR.prototype.iExecuteSaveAsTile = function (sBookmarkTitle) {
56
- var sShareId = "fe::Share",
57
- oOverflowToolbarBuilder = this.createOverflowToolbarBuilder(this._sPageId);
56
+ var oShareButtonProperties = {
57
+ icon: "sap-icon://action"
58
+ };
59
+ var oShareBuilder = FEBuilder.create(this.getOpaInstance());
58
60
 
59
61
  return this.prepareResult(
60
- oOverflowToolbarBuilder
61
- .doOnContent(FEBuilder.Matchers.id(new RegExp(Utils.formatMessage("{0}$", sShareId))), OpaBuilder.Actions.press())
62
- .description(Utils.formatMessage("Pressing header '{0}' Share button", this.getIdentifier()))
62
+ oShareBuilder
63
+ .hasProperties(oShareButtonProperties)
64
+ .do(OpaBuilder.Actions.press())
65
+ .description(Utils.formatMessage("Open share menu"))
63
66
  .success(APIHelper.createSaveAsTileExecutorBuilder(sBookmarkTitle))
64
67
  .execute()
65
68
  );
@@ -72,12 +75,15 @@ sap.ui.define(
72
75
  * @ui5-restricted
73
76
  */
74
77
  HeaderActionsLR.prototype.iExecuteSendEmail = function () {
75
- var sShareId = "fe::Share",
76
- oOverflowToolbarBuilder = this.createOverflowToolbarBuilder(this._sPageId);
78
+ var oShareProperties = {
79
+ icon: "sap-icon://action"
80
+ },
81
+ oShareBuilder = FEBuilder.create(this.getOpaInstance());
77
82
 
78
83
  return this.prepareResult(
79
- oOverflowToolbarBuilder
80
- .doOnContent(FEBuilder.Matchers.id(new RegExp(Utils.formatMessage("{0}$", sShareId))), OpaBuilder.Actions.press())
84
+ oShareBuilder
85
+ .hasProperties(oShareProperties)
86
+ .do(OpaBuilder.Actions.press())
81
87
  .description(Utils.formatMessage("Pressing header '{0}' Share button", this.getIdentifier()))
82
88
  .success(APIHelper.createSendEmailExecutorBuilder())
83
89
  .execute()