@datagrok-libraries/statistics 1.12.0 → 1.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # statistics changelog
2
2
 
3
+ ## 1.12.2 (2026-03-26)
4
+
5
+ * MPO: Add profile versioning
6
+
7
+ ## 1.12.1 (2026-03-19)
8
+
9
+ * MPO: Added resize support for the line editor
10
+ * EDA: Fixed MPO line editor lookup issue in newer statistics library versions
11
+
3
12
  ## 1.4.0 (2024-08-23)
4
13
 
5
14
  ### Features
package/css/styles.css CHANGED
@@ -94,6 +94,11 @@
94
94
  padding: 0 !important;
95
95
  }
96
96
 
97
+ .statistics-mpo-editor-fill {
98
+ width: 100%;
99
+ height: 100%;
100
+ }
101
+
97
102
  .statistics-mpo-cat-editor {
98
103
  width: 280px;
99
104
  margin-left: 30px;
@@ -133,7 +138,7 @@
133
138
 
134
139
  .statistics-mpo-weight-toggle {
135
140
  cursor: pointer;
136
- color: var(--grey-3);
141
+ color: var(--grey-4);
137
142
  font-size: 12px;
138
143
  }
139
144
 
@@ -142,11 +147,11 @@
142
147
  }
143
148
 
144
149
  .statistics-mpo-weight-toggle-active {
145
- color: var(--blue-1);
150
+ color: var(--grey-4);
146
151
  }
147
152
 
148
153
  .statistics-mpo-weight-toggle-active:hover {
149
- color: var(--blue-2);
154
+ color: var(--grey-5);
150
155
  }
151
156
 
152
157
  .statistics-mpo-hidden {
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "friendlyName": "statistics",
7
- "version": "1.12.0",
7
+ "version": "1.12.2",
8
8
  "description": "Statistics utilities",
9
9
  "author": {
10
10
  "name": "Dmytro Kovalyov",
@@ -6,6 +6,7 @@ export interface DesirabilityEditor<T = any> {
6
6
  root: HTMLElement;
7
7
  onChanged: Subject<T>;
8
8
  redrawAll(): void;
9
+ resize?(width: number, height: number): void;
9
10
  setRange?(min: number, max: number): void;
10
11
  setColumn?(col: DG.Column | null): void;
11
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"desirability-editor-factory.d.ts","sourceRoot":"","sources":["desirability-editor-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAC,oBAAoB,EAAc,MAAM,QAAQ,CAAC;AAIzD,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACzC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACtB,SAAS,IAAI,IAAI,CAAC;IAClB,QAAQ,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;CACzC;AAED,qBAAa,yBAAyB;IACpC,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,oBAAoB,EAC1B,KAAK,SAAM,EACX,MAAM,SAAK,EACX,MAAM,UAAQ,GACb,kBAAkB;CAMtB"}
1
+ {"version":3,"file":"desirability-editor-factory.d.ts","sourceRoot":"","sources":["desirability-editor-factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAC,oBAAoB,EAAc,MAAM,QAAQ,CAAC;AAIzD,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,GAAG;IACzC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACtB,SAAS,IAAI,IAAI,CAAC;IAClB,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;CACzC;AAED,qBAAa,yBAAyB;IACpC,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,oBAAoB,EAC1B,KAAK,SAAM,EACX,MAAM,SAAK,EACX,MAAM,UAAQ,GACb,kBAAkB;CAMtB"}
@@ -8,4 +8,4 @@ export class DesirabilityEditorFactory {
8
8
  return new MpoCategoricalEditor(prop, design, false);
9
9
  }
10
10
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaXJhYmlsaXR5LWVkaXRvci1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVzaXJhYmlsaXR5LWVkaXRvci1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBdUIsV0FBVyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBVzVELE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsTUFBTSxDQUFDLE1BQU0sQ0FDWCxJQUEwQixFQUMxQixLQUFLLEdBQUcsR0FBRyxFQUNYLE1BQU0sR0FBRyxFQUFFLEVBQ1gsTUFBTSxHQUFHLEtBQUs7UUFFZCxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxJQUFJLHlCQUF5QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFNUQsT0FBTyxJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtQcm9wZXJ0eURlc2lyYWJpbGl0eSwgaXNOdW1lcmljYWx9IGZyb20gJy4uL21wbyc7XG5pbXBvcnQge01wb0NhdGVnb3JpY2FsRWRpdG9yfSBmcm9tICcuL21wby1jYXRlZ29yaWNhbC1lZGl0b3InO1xuaW1wb3J0IHtNcG9EZXNpcmFiaWxpdHlMaW5lRWRpdG9yfSBmcm9tICcuL21wby1saW5lLWVkaXRvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzaXJhYmlsaXR5RWRpdG9yPFQgPSBhbnk+IHtcbiAgc3VwcG9ydHNNb2RlRGlhbG9nOiBib29sZWFuO1xuICByb290OiBIVE1MRWxlbWVudDtcbiAgb25DaGFuZ2VkOiBTdWJqZWN0PFQ+O1xuICByZWRyYXdBbGwoKTogdm9pZDtcbiAgc2V0UmFuZ2U/KG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IHZvaWQ7XG4gIHNldENvbHVtbj8oY29sOiBERy5Db2x1bW4gfCBudWxsKTogdm9pZDtcbn1cblxuZXhwb3J0IGNsYXNzIERlc2lyYWJpbGl0eUVkaXRvckZhY3Rvcnkge1xuICBzdGF0aWMgY3JlYXRlKFxuICAgIHByb3A6IFByb3BlcnR5RGVzaXJhYmlsaXR5LFxuICAgIHdpZHRoID0gMzAwLFxuICAgIGhlaWdodCA9IDgwLFxuICAgIGRlc2lnbiA9IGZhbHNlLFxuICApOiBEZXNpcmFiaWxpdHlFZGl0b3Ige1xuICAgIGlmIChpc051bWVyaWNhbChwcm9wKSlcbiAgICAgIHJldHVybiBuZXcgTXBvRGVzaXJhYmlsaXR5TGluZUVkaXRvcihwcm9wLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHJldHVybiBuZXcgTXBvQ2F0ZWdvcmljYWxFZGl0b3IocHJvcCwgZGVzaWduLCBmYWxzZSk7XG4gIH1cbn1cblxuIl19
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaXJhYmlsaXR5LWVkaXRvci1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGVzaXJhYmlsaXR5LWVkaXRvci1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBdUIsV0FBVyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3pELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBWTVELE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsTUFBTSxDQUFDLE1BQU0sQ0FDWCxJQUEwQixFQUMxQixLQUFLLEdBQUcsR0FBRyxFQUNYLE1BQU0sR0FBRyxFQUFFLEVBQ1gsTUFBTSxHQUFHLEtBQUs7UUFFZCxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDbkIsT0FBTyxJQUFJLHlCQUF5QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFNUQsT0FBTyxJQUFJLG9CQUFvQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtQcm9wZXJ0eURlc2lyYWJpbGl0eSwgaXNOdW1lcmljYWx9IGZyb20gJy4uL21wbyc7XG5pbXBvcnQge01wb0NhdGVnb3JpY2FsRWRpdG9yfSBmcm9tICcuL21wby1jYXRlZ29yaWNhbC1lZGl0b3InO1xuaW1wb3J0IHtNcG9EZXNpcmFiaWxpdHlMaW5lRWRpdG9yfSBmcm9tICcuL21wby1saW5lLWVkaXRvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzaXJhYmlsaXR5RWRpdG9yPFQgPSBhbnk+IHtcbiAgc3VwcG9ydHNNb2RlRGlhbG9nOiBib29sZWFuO1xuICByb290OiBIVE1MRWxlbWVudDtcbiAgb25DaGFuZ2VkOiBTdWJqZWN0PFQ+O1xuICByZWRyYXdBbGwoKTogdm9pZDtcbiAgcmVzaXplPyh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQ7XG4gIHNldFJhbmdlPyhtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiB2b2lkO1xuICBzZXRDb2x1bW4/KGNvbDogREcuQ29sdW1uIHwgbnVsbCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBEZXNpcmFiaWxpdHlFZGl0b3JGYWN0b3J5IHtcbiAgc3RhdGljIGNyZWF0ZShcbiAgICBwcm9wOiBQcm9wZXJ0eURlc2lyYWJpbGl0eSxcbiAgICB3aWR0aCA9IDMwMCxcbiAgICBoZWlnaHQgPSA4MCxcbiAgICBkZXNpZ24gPSBmYWxzZSxcbiAgKTogRGVzaXJhYmlsaXR5RWRpdG9yIHtcbiAgICBpZiAoaXNOdW1lcmljYWwocHJvcCkpXG4gICAgICByZXR1cm4gbmV3IE1wb0Rlc2lyYWJpbGl0eUxpbmVFZGl0b3IocHJvcCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICByZXR1cm4gbmV3IE1wb0NhdGVnb3JpY2FsRWRpdG9yKHByb3AsIGRlc2lnbiwgZmFsc2UpO1xuICB9XG59XG5cbiJdfQ==
@@ -36,6 +36,7 @@ export declare class MpoDesirabilityLineEditor {
36
36
  getDefaultX0(): number;
37
37
  getDefaultK(): number;
38
38
  redrawAll(notify?: boolean): void;
39
+ resize(width: number, height: number): void;
39
40
  drawBars(values?: number[]): void;
40
41
  private enableCurveDrag;
41
42
  private addSpecialHandle;
@@ -1 +1 @@
1
- {"version":3,"file":"mpo-line-editor.d.ts","sourceRoot":"","sources":["mpo-line-editor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EAAC,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,QAAQ,CAAC;AAC/D,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AA2D7B,qBAAa,yBAAyB;IACpC,IAAI,iBAAY;IAChB,SAAS,4BAAmC;IAC5C,kBAAkB,EAAE,OAAO,CAAQ;IAEnC,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,SAAS,CAAC,CAAc;IAChC,OAAO,CAAC,gBAAgB,CAAC,CAAW;IAEpC,OAAO,CAAC,KAAK,CAAC,CAAc;IAC5B,OAAO,CAAC,KAAK,CAAC,CAAc;IAE5B,OAAO,CAAC,SAAS,CAAC,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,SAAS,CAAC,CAAW;IAE7B,OAAO,CAAC,QAAQ,CAA8B;IAE9C,OAAO,CAAC,aAAa,CAAC,CAAe;IACrC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAGxD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAYtE,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,YAAY;YASN,SAAS;IAkPvB,IAAI,IAAI,IAAI,gBAAgB,CAE3B;IAED,OAAO,CAAC,WAAW;IAoCnB,OAAO,CAAC,QAAQ;IAkBhB,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,eAAe,IAAI,MAAM;IAIzB,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,MAAM;IAIrB,SAAS,CAAC,MAAM,GAAE,OAAc,GAAG,IAAI;IAqBvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE;IAgE1B,OAAO,CAAC,eAAe;IAoEvB,OAAO,CAAC,gBAAgB;IA2DxB,OAAO,CAAC,eAAe;IAoCvB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAkCxC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI;CAOvC"}
1
+ {"version":3,"file":"mpo-line-editor.d.ts","sourceRoot":"","sources":["mpo-line-editor.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGtC,OAAO,EAAC,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,QAAQ,CAAC;AAC/D,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AA2D7B,qBAAa,yBAAyB;IACpC,IAAI,iBAA4C;IAChD,SAAS,4BAAmC;IAC5C,kBAAkB,EAAE,OAAO,CAAQ;IAEnC,OAAO,CAAC,KAAK,CAAwB;IACrC,OAAO,CAAC,SAAS,CAAC,CAAc;IAChC,OAAO,CAAC,gBAAgB,CAAC,CAAW;IAEpC,OAAO,CAAC,KAAK,CAAC,CAAc;IAC5B,OAAO,CAAC,KAAK,CAAC,CAAc;IAE5B,OAAO,CAAC,SAAS,CAAC,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,SAAS,CAAC,CAAW;IAE7B,OAAO,CAAC,QAAQ,CAA8B;IAE9C,OAAO,CAAC,aAAa,CAAC,CAAe;IACrC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAGxD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAYtE,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,YAAY;YASN,SAAS;IAwPvB,IAAI,IAAI,IAAI,gBAAgB,CAE3B;IAED,OAAO,CAAC,WAAW;IAoCnB,OAAO,CAAC,QAAQ;IAkBhB,OAAO,IAAI,MAAM;IAIjB,OAAO,IAAI,MAAM;IAIjB,cAAc,IAAI,MAAM;IAIxB,eAAe,IAAI,MAAM;IAIzB,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,MAAM;IAIrB,SAAS,CAAC,MAAM,GAAE,OAAc,GAAG,IAAI;IAqBvC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAe3C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE;IAgE1B,OAAO,CAAC,eAAe;IAoEvB,OAAO,CAAC,gBAAgB;IA2DxB,OAAO,CAAC,eAAe;IAoCvB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAkCxC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI;CAOvC"}
@@ -44,7 +44,7 @@ class CoordMapper {
44
44
  }
45
45
  export class MpoDesirabilityLineEditor {
46
46
  constructor(prop, width, height) {
47
- this.root = ui.div();
47
+ this.root = ui.div([], 'statistics-mpo-line-editor');
48
48
  this.onChanged = new Subject();
49
49
  this.supportsModeDialog = true;
50
50
  // Flag to prevent touchpad right-click from adding a new point
@@ -124,7 +124,7 @@ export class MpoDesirabilityLineEditor {
124
124
  }
125
125
  this.pointsGroup.destroyChildren();
126
126
  const konvaPoints = [];
127
- const mapper = new CoordMapper(minX, maxX, width, height);
127
+ const mapper = new CoordMapper(minX, maxX, this._width, this._height);
128
128
  const sortedIndices = [...this._prop.line.keys()]
129
129
  .sort((a, b) => this._prop.line[a][0] - this._prop.line[b][0]);
130
130
  const sortedLine = sortedIndices.map((idx) => this._prop.line[idx]);
@@ -161,7 +161,7 @@ export class MpoDesirabilityLineEditor {
161
161
  const maxCanvasX = mapper.toCanvasCoords([nextX - (sortedPos < sortedIndices.length - 1 ? buffer : 0), 0]).x;
162
162
  pos.x = Math.max(minCanvasX, Math.min(maxCanvasX, pos.x));
163
163
  const plotTop = EDITOR_PADDING.top;
164
- const plotBottom = height - EDITOR_PADDING.bottom;
164
+ const plotBottom = this._height - EDITOR_PADDING.bottom;
165
165
  pos.y = Math.max(plotTop, Math.min(plotBottom, pos.y));
166
166
  circle.position(pos);
167
167
  const dataCoords = mapper.toDataCoords(pos.x, pos.y);
@@ -226,7 +226,7 @@ export class MpoDesirabilityLineEditor {
226
226
  this.konvaLine.points(konvaPoints);
227
227
  this.layer.batchDraw();
228
228
  // --- Add special handle (Gaussian peak / Sigmoid inflection) ---
229
- this.addSpecialHandle(width, height);
229
+ this.addSpecialHandle(this._width, this._height);
230
230
  if (notify)
231
231
  this.onChanged.next(this._prop.line);
232
232
  };
@@ -260,7 +260,7 @@ export class MpoDesirabilityLineEditor {
260
260
  if (!pos)
261
261
  return;
262
262
  if (this._prop.mode !== 'freeform') {
263
- if (this.isInPlotArea(pos, width, height))
263
+ if (this.isInPlotArea(pos, this._width, this._height))
264
264
  this.stage.container().style.cursor = 'grab';
265
265
  else
266
266
  this.stage.container().style.cursor = 'default';
@@ -268,8 +268,13 @@ export class MpoDesirabilityLineEditor {
268
268
  });
269
269
  this.stage.on('mouseout', () => ui.tooltip.hide());
270
270
  // Enable curve drag (smooth)
271
- this.enableCurveDrag(width, height);
271
+ this.enableCurveDrag();
272
272
  this.updateDragScales();
273
+ ui.onSizeChanged(this.root).subscribe((_) => {
274
+ const { clientWidth: w, clientHeight: h } = this.root;
275
+ if (w > 0 && h > 0)
276
+ this.resize(w, h);
277
+ });
273
278
  // Initial draw
274
279
  if (this.pendingBarValues) {
275
280
  this.drawBars(this.pendingBarValues);
@@ -357,6 +362,18 @@ export class MpoDesirabilityLineEditor {
357
362
  if (this.barValues)
358
363
  this.drawBars();
359
364
  }
365
+ resize(width, height) {
366
+ if (width === this._width && height === this._height)
367
+ return;
368
+ this._width = width;
369
+ this._height = height;
370
+ if (this.stage) {
371
+ this.stage.width(width);
372
+ this.stage.height(height);
373
+ this.updateDragScales();
374
+ this.redrawAll(false);
375
+ }
376
+ }
360
377
  drawBars(values) {
361
378
  var _a;
362
379
  if (values)
@@ -407,7 +424,7 @@ export class MpoDesirabilityLineEditor {
407
424
  });
408
425
  this.barsLayer.batchDraw();
409
426
  }
410
- enableCurveDrag(width, height) {
427
+ enableCurveDrag() {
411
428
  if (!this.stage)
412
429
  return;
413
430
  let dragging = false;
@@ -425,7 +442,7 @@ export class MpoDesirabilityLineEditor {
425
442
  const pos = this.stage.getPointerPosition();
426
443
  if (!pos)
427
444
  return;
428
- if (!this.isInPlotArea(pos, width, height))
445
+ if (!this.isInPlotArea(pos, this._width, this._height))
429
446
  return;
430
447
  dragging = true;
431
448
  startPointer = pos;
@@ -580,4 +597,4 @@ export class MpoDesirabilityLineEditor {
580
597
  this.drawBars(values);
581
598
  }
582
599
  }
583
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBvLWxpbmUtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibXBvLWxpbmUtZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl0QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLElBQUksTUFBZ0MsQ0FBQztBQUVyQyxLQUFLLFVBQVUsUUFBUTtJQUNyQixJQUFJLENBQUMsTUFBTTtRQUNULE1BQU0sR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzNDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFJRCxrQ0FBa0M7QUFDbEMsTUFBTSxjQUFjLEdBQUcsRUFBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFDLENBQUM7QUFDbEUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRXZCLE1BQU0sTUFBTSxHQUFHO0lBQ2IsSUFBSSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQzVDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztJQUM5QyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDL0MsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxL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R0FBRyxHQUFHLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFxQjtRQUM3QixJQUFJLENBQUMsR0FBRztZQUNOLE9BQU87UUFFVCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5pbXBvcnQgdHlwZSBLb252YSBmcm9tICdrb252YSc7XG5pbXBvcnQge0Rlc2lyYWJpbGl0eUxpbmUsIE51bWVyaWNhbERlc2lyYWJpbGl0eX0gZnJvbSAnLi4vbXBvJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmxldCBfa29udmE6IHR5cGVvZiBLb252YSB8IHVuZGVmaW5lZDtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0S29udmEoKTogUHJvbWlzZTx0eXBlb2YgS29udmE+IHtcbiAgaWYgKCFfa29udmEpXG4gICAgX2tvbnZhID0gKGF3YWl0IGltcG9ydCgna29udmEnKSkuZGVmYXVsdDtcbiAgcmV0dXJuIF9rb252YTtcbn1cblxudHlwZSBQb2ludCA9IFtudW1iZXIsIG51bWJlcl07XG5cbi8vIENvbnN0YW50cyBmb3IgdGhlIGVkaXRvciBsYXlvdXRcbmNvbnN0IEVESVRPUl9QQURESU5HID0ge3RvcDogMTAsIHJpZ2h0OiAxMCwgYm90dG9tOiAyMCwgbGVmdDogMzB9O1xuY29uc3QgUE9JTlRfUkFESVVTID0gMztcblxuY29uc3QgQ09MT1JTID0ge1xuICBsaW5lOiBERy5Db2xvci50b0h0bWwoREcuQ29sb3IuZmlsdGVyZWRSb3dzKSxcbiAgaGFuZGxlOiBERy5Db2xvci50b0h0bWwoREcuQ29sb3Iuc2VsZWN0ZWRSb3dzKSxcbiAgYmFyRmlsbDogREcuQ29sb3IudG9IdG1sKERHLkNvbG9yLmhpc3RvZ3JhbUJhciksXG4gIGJhclN0cm9rZTogREcuQ29sb3IudG9IdG1sKERHLkNvbG9yLmxpZ2h0R3JheSksXG59O1xuXG5jbGFzcyBDb29yZE1hcHBlciB7XG4gIHByaXZhdGUgcGxvdFdpZHRoOiBudW1iZXI7XG4gIHByaXZhdGUgcGxvdEhlaWdodDogbnVtYmVyO1xuICBwcml2YXRlIHNjYWxlWDogbnVtYmVyO1xuICBwcml2YXRlIHNjYWxlWTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbWluWDogbnVtYmVyLFxuICAgIHByaXZhdGUgbWF4WDogbnVtYmVyLFxuICAgIHByaXZhdGUgd2lkdGg6IG51bWJlcixcbiAgICBwcml2YXRlIGhlaWdodDogbnVtYmVyLFxuICApIHtcbiAgICB0aGlzLnBsb3RXaWR0aCA9IHdpZHRoIC0gRURJVE9SX1BBRERJTkcubGVmdCAtIEVESVRPUl9QQURESU5HLnJpZ2h0O1xuICAgIHRoaXMucGxvdEhlaWdodCA9IGhlaWdodCAtIEVESVRPUl9QQURESU5HLnRvcCAtIEVESVRPUl9QQURESU5HLmJvdHRvbTtcbiAgICB0aGlzLnNjYWxlWCA9ICh0aGlzLm1heFggLSB0aGlzLm1pblggPT09IDApID8gMSA6IHRoaXMucGxvdFdpZHRoIC8gKHRoaXMubWF4WCAtIHRoaXMubWluWCk7XG4gICAgdGhpcy5zY2FsZVkgPSB0aGlzLnBsb3RIZWlnaHQ7XG4gIH1cblxuICB0b0NhbnZhc0Nvb3JkcyhwOiBQb2ludCk6IHt4OiBudW1iZXIsIHk6IG51bWJlcn0ge1xuICAgIGNvbnN0IGNhbnZhc1ggPSBFRElUT1JfUEFERElORy5sZWZ0ICsgKHBbMF0gLSB0aGlzLm1pblgpICogdGhpcy5zY2FsZVg7XG4gICAgY29uc3QgY2FudmFzWSA9IEVESVRPUl9QQURESU5HLnRvcCArIHRoaXMucGxvdEhlaWdodCAtIChwWzFdICogdGhpcy5zY2FsZVkpO1xuXG4gICAgcmV0dXJuIHt4OiBjYW52YXNYLCB5OiBjYW52YXNZfTtcbiAgfVxuXG4gIHRvRGF0YUNvb3JkcyhjYW52YXNYOiBudW1iZXIsIGNhbnZhc1k6IG51bWJlcik6IHt4OiBudW1iZXIsIHk6IG51bWJlcn0ge1xuICAgIGxldCBkYXRhWCA9IHRoaXMubWluWCArIChjYW52YXNYIC0gRURJVE9SX1BBRERJTkcubGVmdCkgLyB0aGlzLnNjYWxlWDtcbiAgICBsZXQgZGF0YVkgPSAoRURJVE9SX1BBRERJTkcudG9wICsgdGhpcy5wbG90SGVpZ2h0IC0gY2FudmFzWSkgLyB0aGlzLnNjYWxlWTtcblxuICAgIGRhdGFYID0gTWF0aC5tYXgodGhpcy5taW5YLCBNYXRoLm1pbih0aGlzLm1heFgsIGRhdGFYKSk7XG4gICAgZGF0YVkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBkYXRhWSkpO1xuXG4gICAgcmV0dXJuIHt4OiBkYXRhWCwgeTogZGF0YVl9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNcG9EZXNpcmFiaWxpdHlMaW5lRWRpdG9yIHtcbiAgcm9vdCA9IHVpLmRpdigpO1xuICBvbkNoYW5nZWQgPSBuZXcgU3ViamVjdDxEZXNpcmFiaWxpdHlMaW5lPigpO1xuICBzdXBwb3J0c01vZGVEaWFsb2c6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHByaXZhdGUgX3Byb3A6IE51bWVyaWNhbERlc2lyYWJpbGl0eTtcbiAgcHJpdmF0ZSBiYXJzTGF5ZXI/OiBLb252YS5MYXllcjtcbiAgcHJpdmF0ZSBwZW5kaW5nQmFyVmFsdWVzPzogbnVtYmVyW107XG5cbiAgcHJpdmF0ZSBzdGFnZT86IEtvbnZhLlN0YWdlO1xuICBwcml2YXRlIGxheWVyPzogS29udmEuTGF5ZXI7XG5cbiAgcHJpdmF0ZSBrb252YUxpbmU/OiBLb252YS5MaW5lO1xuICBwcml2YXRlIHBvaW50c0dyb3VwPzogS29udmEuR3JvdXA7XG4gIHByaXZhdGUgYmFyVmFsdWVzPzogbnVtYmVyW107XG5cbiAgcHJpdmF0ZSByZWRyYXdGbiE6IChub3RpZnk/OiBib29sZWFuKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgc3BlY2lhbEhhbmRsZT86IEtvbnZhLkNpcmNsZTtcbiAgb25QYXJhbXNDaGFuZ2VkPzogKHByb3A6IE51bWVyaWNhbERlc2lyYWJpbGl0eSkgPT4gdm9pZDtcblxuICAvLyBGbGFnIHRvIHByZXZlbnQgdG91Y2hwYWQgcmlnaHQtY2xpY2sgZnJvbSBhZGRpbmcgYSBuZXcgcG9pbnRcbiAgcHJpdmF0ZSBpZ25vcmVOZXh0Q2xpY2sgPSBmYWxzZTtcbiAgcHJpdmF0ZSBkcmFnU2NhbGVYID0gMDtcbiAgcHJpdmF0ZSBkcmFnU2NhbGVZID0gMDtcbiAgcHJpdmF0ZSBfd2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfaGVpZ2h0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IocHJvcDogTnVtZXJpY2FsRGVzaXJhYmlsaXR5LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMuX3Byb3AgPSBwcm9wO1xuICAgIHRoaXMuX3dpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5faGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHRoaXMuZW5zdXJlRGVmYXVsdExpbmUoKTtcbiAgICB0aGlzLnJvb3Quc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgdGhpcy5yb290LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgdGhpcy5yb290LnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcblxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmluaXRLb252YSh3aWR0aCwgaGVpZ2h0KSk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZURlZmF1bHRMaW5lKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wcm9wLmxpbmUubGVuZ3RoID4gMClcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IG1pbiA9IHRoaXMuX3Byb3AubWluID8/IDA7XG4gICAgY29uc3QgbWF4ID0gdGhpcy5fcHJvcC5tYXggPz8gMTtcbiAgICB0aGlzLl9wcm9wLmxpbmUgPSBbW21pbiwgMC41XSwgW21heCwgMC41XV07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZURyYWdTY2FsZXMoKTogdm9pZCB7XG4gICAgY29uc3QgcGxvdFdpZHRoID0gdGhpcy5fd2lkdGggLSBFRElUT1JfUEFERElORy5sZWZ0IC0gRURJVE9SX1BBRERJTkcucmlnaHQ7XG4gICAgY29uc3QgcGxvdEhlaWdodCA9IHRoaXMuX2hlaWdodCAtIEVESVRPUl9QQURESU5HLnRvcCAtIEVESVRPUl9QQURESU5HLmJvdHRvbTtcbiAgICB0aGlzLmRyYWdTY2FsZVggPSAodGhpcy5nZXRNYXhYKCkgLSB0aGlzLmdldE1pblgoKSkgLyBwbG90V2lkdGg7XG4gICAgdGhpcy5kcmFnU2NhbGVZID0gMSAvIHBsb3RIZWlnaHQ7XG4gIH1cblxuICBwcml2YXRlIGlzSW5QbG90QXJlYShwb3M6IHt4OiBudW1iZXIsIHk6IG51bWJlcn0sIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHBvcy54ID49IEVESVRPUl9QQURESU5HLmxlZnQgJiZcbiAgICAgIHBvcy54IDw9IHdpZHRoIC0gRURJVE9SX1BBRERJTkcucmlnaHQgJiZcbiAgICAgIHBvcy55ID49IEVESVRPUl9QQURESU5HLnRvcCAmJlxuICAgICAgcG9zLnkgPD0gaGVpZ2h0IC0gRURJVE9SX1BBRERJTkcuYm90dG9tXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdEtvbnZhKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLnJvb3QucGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc29sZS53YXJuKCdLb252YSBjb250YWluZXIgbm90IGF0dGFjaGVkIHRvIERPTSB5ZXQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgS29udmEgPSBhd2FpdCBnZXRLb252YSgpO1xuICAgIHRoaXMuYmFyc0xheWVyID0gbmV3IEtvbnZhLkxheWVyKCk7XG5cbiAgICB0aGlzLnN0YWdlID0gbmV3IEtvbnZhLlN0YWdlKHtcbiAgICAgIGNvbnRhaW5lcjogdGhpcy5yb290LFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YWdlLmFkZCh0aGlzLmJhcnNMYXllcik7XG4gICAgdGhpcy5sYXllciA9IG5ldyBLb252YS5MYXllcigpO1xuICAgIHRoaXMuc3RhZ2UuYWRkKHRoaXMubGF5ZXIpO1xuXG4gICAgY29uc3QgbWluWCA9IHRoaXMuZ2V0TWluWCgpO1xuICAgIGNvbnN0IG1heFggPSB0aGlzLmdldE1heFgoKTtcblxuICAgIC8vIC0tLSBEcmF3IEF4ZXMgLS0tXG4gICAgdGhpcy5kcmF3QXhlcyhtaW5YLCBtYXhYLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIC8vIC0tLSBEcmF3IExpbmUgYW5kIFBvaW50cyAtLS1cbiAgICB0aGlzLmtvbnZhTGluZSA9IG5ldyBLb252YS5MaW5lKHtcbiAgICAgIHBvaW50czogW10sXG4gICAgICBzdHJva2U6IENPTE9SUy5saW5lLFxuICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICBsaW5lQ2FwOiAncm91bmQnLFxuICAgICAgbGluZUpvaW46ICdyb3VuZCcsXG4gICAgfSk7XG4gICAgdGhpcy5sYXllci5hZGQodGhpcy5rb252YUxpbmUpO1xuXG4gICAgdGhpcy5wb2ludHNHcm91cCA9IG5ldyBLb252YS5Hcm91cCgpO1xuICAgIHRoaXMubGF5ZXIuYWRkKHRoaXMucG9pbnRzR3JvdXApO1xuXG4gICAgLy8gLS0tIFJlZHJhdyBGdW5jdGlvbiAtLS1cbiAgICB0aGlzLnJlZHJhd0ZuID0gKG5vdGlmeTogYm9vbGVhbiA9IHRydWUpID0+IHtcbiAgICAgIGNvbnN0IG1pblggPSB0aGlzLmdldE1pblgoKTtcbiAgICAgIGNvbnN0IG1heFggPSB0aGlzLmdldE1heFgoKTtcblxuICAgICAgaWYgKHRoaXMuX3Byb3AubW9kZSA9PT0gJ2ZyZWVmb3JtJyAmJiB0aGlzLl9wcm9wLmZyZWVmb3JtTGluZSlcbiAgICAgICAgdGhpcy5fcHJvcC5saW5lID0gdGhpcy5fcHJvcC5mcmVlZm9ybUxpbmU7XG5cbiAgICAgIGlmICh0aGlzLl9wcm9wLm1vZGUgIT09ICdmcmVlZm9ybScpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9wcm9wLmZyZWVmb3JtTGluZSlcbiAgICAgICAgICB0aGlzLl9wcm9wLmZyZWVmb3JtTGluZSA9IFsuLi50aGlzLl9wcm9wLmxpbmVdO1xuICAgICAgICB0aGlzLl9wcm9wLmxpbmUgPSB0aGlzLmNvbXB1dGVMaW5lKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9pbnRzR3JvdXAhLmRlc3Ryb3lDaGlsZHJlbigpO1xuICAgICAgY29uc3Qga29udmFQb2ludHM6IG51bWJlcltdID0gW107XG5cbiAgICAgIGNvbnN0IG1hcHBlciA9IG5ldyBDb29yZE1hcHBlcihtaW5YLCBtYXhYLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IHNvcnRlZEluZGljZXMgPSBbLi4udGhpcy5fcHJvcC5saW5lLmtleXMoKV1cbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IHRoaXMuX3Byb3AubGluZVthXVswXSAtIHRoaXMuX3Byb3AubGluZVtiXVswXSk7XG4gICAgICBjb25zdCBzb3J0ZWRMaW5lID0gc29ydGVkSW5kaWNlcy5tYXAoKGlkeCkgPT4gdGhpcy5fcHJvcC5saW5lW2lkeF0pO1xuXG4gICAgICBzb3J0ZWRMaW5lLmZvckVhY2goKHAsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IG1hcHBlci50b0NhbnZhc0Nvb3JkcyhbcFswXSwgcFsxXV0pO1xuICAgICAgICBrb252YVBvaW50cy5wdXNoKGNvb3Jkcy54LCBjb29yZHMueSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3Byb3AubW9kZSAhPT0gJ2ZyZWVmb3JtJylcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcG9pbnRDaXJjbGUgPSBuZXcgS29udmEuQ2lyY2xlKHtcbiAgICAgICAgICB4OiBjb29yZHMueCxcbiAgICAgICAgICB5OiBjb29yZHMueSxcbiAgICAgICAgICByYWRpdXM6IFBPSU5UX1JBRElVUyxcbiAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgIHN0cm9rZTogQ09MT1JTLmxpbmUsXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgZHJhZ2dhYmxlOiB0cnVlLFxuICAgICAgICAgIGhpdFN0cm9rZVdpZHRoOiA1LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBTdG9yZSBpbmRleCBkaXJlY3RseSBvbiB0aGUgbm9kZSBmb3IgZWFzeSBhY2Nlc3NcbiAgICAgICAgcG9pbnRDaXJjbGUuc2V0QXR0cignX2RhdGFJbmRleCcsIHNvcnRlZEluZGljZXNbaW5kZXhdKTtcblxuICAgICAgICBwb2ludENpcmNsZS5vbignZHJhZ21vdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgY29uc3QgY2lyY2xlID0gZXZ0LnRhcmdldCBhcyBLb252YS5DaXJjbGU7XG4gICAgICAgICAgY29uc3QgcG9zID0gY2lyY2xlLnBvc2l0aW9uKCk7XG4gICAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gY2lyY2xlLmdldEF0dHIoJ19kYXRhSW5kZXgnKTtcbiAgICAgICAgICBjb25zdCBzb3J0ZWRQb3MgPSBzb3J0ZWRJbmRpY2VzLmluZGV4T2YoZGF0YUluZGV4KTtcblxuICAgICAgICAgIC8vIENvbnN0cmFpbiBkcmFnZ2luZyBob3Jpem9udGFsbHkgYmV0d2VlbiBuZWlnaGJvcnMgKG9yIGJvdW5kcylcbiAgICAgICAgICBjb25zdCBwcmV2WCA9IHNvcnRlZFBvcyA+IDAgPyB0aGlzLl9wcm9wLmxpbmVbc29ydGVkSW5kaWNlc1tzb3J0ZWRQb3MgLSAxXV1bMF0gOiBtaW5YO1xuICAgICAgICAgIGNvbnN0IG5leHRYID0gc29ydGVkUG9zIDwgc29ydGVkSW5kaWNlcy5sZW5ndGggLSAxID9cbiAgICAgICAgICAgIHRoaXMuX3Byb3AubGluZVtzb3J0ZWRJbmRpY2VzW3NvcnRlZFBvcyArIDFdXVswXSA6XG4gICAgICAgICAgICBtYXhYO1xuXG4gICAgICAgICAgLy8gQWRkIGEgc21hbGwgYnVmZmVyIHRvIGF2b2lkIHBvaW50cyBvdmVybGFwcGluZyBleGFjdGx5XG4gICAgICAgICAgY29uc3QgYnVmZmVyID0gKG1heFggLSBtaW5YID09PSAwKSA/IDAgOiAwLjAwMSAqIChtYXhYIC0gbWluWCk7IC8vIEF2b2lkIE5hTiBpZiBtaW5YID09PSBtYXhYXG4gICAgICAgICAgY29uc3QgbWluQ2FudmFzWCA9IG1hcHBlci50b0NhbnZhc0Nvb3JkcyhbcHJldlggKyAoc29ydGVkUG9zID4gMCA/IGJ1ZmZlciA6IDApLCAwXSkueDtcbiAgICAgICAgICBjb25zdCBtYXhDYW52YXNYID0gbWFwcGVyLnRvQ2FudmFzQ29vcmRzKFtuZXh0WCAtIChzb3J0ZWRQb3MgPCBzb3J0ZWRJbmRpY2VzLmxlbmd0aCAtIDEgPyBidWZmZXIgOiAwKSwgMF0pLng7XG5cbiAgICAgICAgICBwb3MueCA9IE1hdGgubWF4KG1pbkNhbnZhc1gsIE1hdGgubWluKG1heENhbnZhc1gsIHBvcy54KSk7XG5cbiAgICAgICAgICBjb25zdCBwbG90VG9wID0gRURJVE9SX1BBRERJTkcudG9wO1xuICAgICAgICAgIGNvbnN0IHBsb3RCb3R0b20gPSBoZWlnaHQgLSBFRElUT1JfUEFERElORy5ib3R0b207XG4gICAgICAgICAgcG9zLnkgPSBNYXRoLm1heChwbG90VG9wLCBNYXRoLm1pbihwbG90Qm90dG9tLCBwb3MueSkpO1xuXG4gICAgICAgICAgY2lyY2xlLnBvc2l0aW9uKHBvcyk7XG5cbiAgICAgICAgICBjb25zdCBkYXRhQ29vcmRzID0gbWFwcGVyLnRvRGF0YUNvb3Jkcyhwb3MueCwgcG9zLnkpO1xuICAgICAgICAgIHRoaXMuX3Byb3AubGluZVtkYXRhSW5kZXhdWzBdID0gZGF0YUNvb3Jkcy54O1xuICAgICAgICAgIHRoaXMuX3Byb3AubGluZVtkYXRhSW5kZXhdWzFdID0gZGF0YUNvb3Jkcy55O1xuXG4gICAgICAgICAgY29uc3QgY3VycmVudEtvbnZhUG9pbnRzID0gdGhpcy5fcHJvcC5saW5lLm1hcCgocERhdGEsIGlkeCkgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIGRyYWdnZWQgY2lyY2xlIHBvc2l0aW9uIGRpcmVjdGx5IGZvciB0aGUgcG9pbnQgYmVpbmcgZHJhZ2dlZFxuICAgICAgICAgICAgaWYgKGlkeCA9PT0gZGF0YUluZGV4KVxuICAgICAgICAgICAgICByZXR1cm4gW3Bvcy54LCBwb3MueV07XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgYyA9IG1hcHBlci50b0NhbnZhc0Nvb3JkcyhbcERhdGFbMF0sIHBEYXRhWzFdXSk7XG4gICAgICAgICAgICAgIHJldHVybiBbYy54LCBjLnldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLmZsYXQoKTtcblxuICAgICAgICAgIHRoaXMua29udmFMaW5lIS5wb2ludHMoY3VycmVudEtvbnZhUG9pbnRzKTtcbiAgICAgICAgICB0aGlzLmxheWVyIS5iYXRjaERyYXcoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcG9pbnRDaXJjbGUub24oJ2RyYWdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcHJvcC5saW5lLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKTtcbiAgICAgICAgICB0aGlzLnJlZHJhd0ZuPy4oKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcG9pbnRDaXJjbGUub24oJ2NvbnRleHRtZW51JywgKGV2dCkgPT4ge1xuICAgICAgICAgIGV2dC5ldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBpZiAodGhpcy5fcHJvcC5saW5lLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICBncm9rLnNoZWxsLndhcm5pbmcoJ0Nhbm5vdCByZW1vdmUgcG9pbnRzLCBtaW5pbXVtIG9mIDIgcmVxdWlyZWQuJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5pZ25vcmVOZXh0Q2xpY2sgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IGNpcmNsZSA9IGV2dC50YXJnZXQgYXMgS29udmEuQ2lyY2xlO1xuICAgICAgICAgIGNvbnN0IGRhdGFJbmRleCA9IGNpcmNsZS5nZXRBdHRyKCdfZGF0YUluZGV4JykgYXMgbnVtYmVyO1xuXG4gICAgICAgICAgaWYgKGRhdGFJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fcHJvcC5taW4gPT0gbnVsbClcbiAgICAgICAgICAgICAgdGhpcy5fcHJvcC5taW4gPSB0aGlzLmdldE1pblgoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wcm9wLm1heCA9PSBudWxsKVxuICAgICAgICAgICAgICB0aGlzLl9wcm9wLm1heCA9IHRoaXMuZ2V0TWF4WCgpO1xuICAgICAgICAgICAgdGhpcy5fcHJvcC5saW5lLnNwbGljZShkYXRhSW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5yZWRyYXdGbj8uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBwb2ludENpcmNsZS5vbignbW91c2VlbnRlcicsIChldnQpID0+IHtcbiAgICAgICAgICB0aGlzLnN0YWdlIS5jb250YWluZXIoKS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgICAgICAgY29uc3QgY2lyY2xlID0gZXZ0LnRhcmdldCBhcyBLb252YS5DaXJjbGU7XG4gICAgICAgICAgY29uc3QgcG9zID0gY2lyY2xlLnBvc2l0aW9uKCk7XG4gICAgICAgICAgY29uc3QgZGF0YUNvb3JkcyA9IG1hcHBlci50b0RhdGFDb29yZHMocG9zLngsIHBvcy55KTtcbiAgICAgICAgICBjb25zdCB0b29sdGlwVGV4dCA9IGBYOiAke2RhdGFDb29yZHMueC50b0ZpeGVkKDIpfSwgWTogJHtkYXRhQ29vcmRzLnkudG9GaXhlZCgyKX08YnI+PGJyPkRyYWcgdG8gbW92ZSwgZG91YmxlLWNsaWNrIHRvIGVkaXQsIHJpZ2h0LWNsaWNrIHRvIGRlbGV0ZWA7XG4gICAgICAgICAgdWkudG9vbHRpcC5zaG93KHRvb2x0aXBUZXh0LCBldnQuZXZ0LmNsaWVudFgsIGV2dC5ldnQuY2xpZW50WSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBvaW50Q2lyY2xlLm9uKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc3RhZ2UhLmNvbnRhaW5lcigpLnN0eWxlLmN1cnNvciA9ICdkZWZhdWx0JztcbiAgICAgICAgICB1aS50b29sdGlwLmhpZGUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcG9pbnRDaXJjbGUub24oJ2RibGNsaWNrIGRibHRhcCcsIChldnQpID0+IHtcbiAgICAgICAgICB0aGlzLmlnbm9yZU5leHRDbGljayA9IHRydWU7XG4gICAgICAgICAgdWkudG9vbHRpcC5oaWRlKCk7XG4gICAgICAgICAgY29uc3QgZGF0YUluZGV4ID0gKGV2dC50YXJnZXQgYXMgS29udmEuQ2lyY2xlKS5nZXRBdHRyKCdfZGF0YUluZGV4JykgYXMgbnVtYmVyO1xuICAgICAgICAgIHRoaXMuc2hvd1BvaW50RWRpdG9yKGRhdGFJbmRleCwgZXZ0LmV2dC5jbGllbnRYLCBldnQuZXZ0LmNsaWVudFkpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnBvaW50c0dyb3VwIS5hZGQocG9pbnRDaXJjbGUpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMua29udmFMaW5lIS5wb2ludHMoa29udmFQb2ludHMpO1xuICAgICAgdGhpcy5sYXllciEuYmF0Y2hEcmF3KCk7XG5cbiAgICAgIC8vIC0tLSBBZGQgc3BlY2lhbCBoYW5kbGUgKEdhdXNzaWFuIHBlYWsgLyBTaWdtb2lkIGluZmxlY3Rpb24pIC0tLVxuICAgICAgdGhpcy5hZGRTcGVjaWFsSGFuZGxlKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICBpZiAobm90aWZ5KVxuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHRoaXMuX3Byb3AubGluZSk7XG4gICAgfTtcblxuICAgIC8vIC0tLSBMZWZ0LWNsaWNrIHRvIEFkZCBQb2ludCAtLS1cbiAgICB0aGlzLnN0YWdlLm9uKCdjbGljayB0YXAnLCAoZXZ0KSA9PiB7XG4gICAgICBpZiAodGhpcy5pZ25vcmVOZXh0Q2xpY2spIHtcbiAgICAgICAgdGhpcy5pZ25vcmVOZXh0Q2xpY2sgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZ0LnRhcmdldCBpbnN0YW5jZW9mIEtvbnZhLkNpcmNsZSB8fCBldnQuZXZ0LmJ1dHRvbiAhPT0gMClcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjb25zdCBwb3MgPSB0aGlzLnN0YWdlPy5nZXRQb2ludGVyUG9zaXRpb24oKTtcbiAgICAgIGlmICghcG9zKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIGNvbnN0IG1pblggPSB0aGlzLmdldE1pblgoKTtcbiAgICAgIGNvbnN0IG1heFggPSB0aGlzLmdldE1heFgoKTtcblxuICAgICAgaWYgKCF0aGlzLmlzSW5QbG90QXJlYShwb3MsIHRoaXMuc3RhZ2UhLndpZHRoKCksIHRoaXMuc3RhZ2UhLmhlaWdodCgpKSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjb25zdCBtYXBwZXIgPSBuZXcgQ29vcmRNYXBwZXIobWluWCwgbWF4WCwgdGhpcy5zdGFnZSEud2lkdGgoKSwgdGhpcy5zdGFnZSEuaGVpZ2h0KCkpO1xuICAgICAgY29uc3QgZGF0YUNvb3JkcyA9IG1hcHBlci50b0RhdGFDb29yZHMocG9zLngsIHBvcy55KTtcblxuICAgICAgdGhpcy5fcHJvcC5saW5lLnB1c2goW2RhdGFDb29yZHMueCwgZGF0YUNvb3Jkcy55XSk7XG4gICAgICB0aGlzLl9wcm9wLmxpbmUuc29ydCgoYSwgYikgPT4gYVswXSAtIGJbMF0pO1xuICAgICAgdGhpcy5yZWRyYXdGbj8uKCk7XG4gICAgfSk7XG5cbiAgICAvLyBDdXJzb3IgY2hhbmdlXG4gICAgdGhpcy5zdGFnZS5vbignbW91c2Vtb3ZlJywgKGV2dCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnN0YWdlKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCBwb3MgPSB0aGlzLnN0YWdlLmdldFBvaW50ZXJQb3NpdGlvbigpO1xuICAgICAgaWYgKCFwb3MpXG4gICAgICAgIHJldHVybjtcblxuICAgICAgaWYgKHRoaXMuX3Byb3AubW9kZSAhPT0gJ2ZyZWVmb3JtJykge1xuICAgICAgICBpZiAodGhpcy5pc0luUGxvdEFyZWEocG9zLCB3aWR0aCwgaGVpZ2h0KSlcbiAgICAgICAgICB0aGlzLnN0YWdlLmNvbnRhaW5lcigpLnN0eWxlLmN1cnNvciA9ICdncmFiJztcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMuc3RhZ2UuY29udGFpbmVyKCkuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5zdGFnZS5vbignbW91c2VvdXQnLCAoKSA9PiB1aS50b29sdGlwLmhpZGUoKSk7XG5cbiAgICAvLyBFbmFibGUgY3VydmUgZHJhZyAoc21vb3RoKVxuICAgIHRoaXMuZW5hYmxlQ3VydmVEcmFnKHdpZHRoLCBoZWlnaHQpO1xuICAgIHRoaXMudXBkYXRlRHJhZ1NjYWxlcygpO1xuXG4gICAgLy8gSW5pdGlhbCBkcmF3XG4gICAgaWYgKHRoaXMucGVuZGluZ0JhclZhbHVlcykge1xuICAgICAgdGhpcy5kcmF3QmFycyh0aGlzLnBlbmRpbmdCYXJWYWx1ZXMpO1xuICAgICAgdGhpcy5wZW5kaW5nQmFyVmFsdWVzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLnJlZHJhd0ZuPy4oZmFsc2UpO1xuICB9XG5cbiAgZ2V0IGxpbmUoKTogRGVzaXJhYmlsaXR5TGluZSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3AubGluZTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUxpbmUoKTogRGVzaXJhYmlsaXR5TGluZSB7XG4gICAgaWYgKHRoaXMuX3Byb3AubW9kZSA9PT0gJ2ZyZWVmb3JtJylcbiAgICAgIHJldHVybiB0aGlzLl9wcm9wLmxpbmU7XG5cbiAgICBjb25zdCBtaW5YID0gdGhpcy5nZXRNaW5YKCk7XG4gICAgY29uc3QgbWF4WCA9IHRoaXMuZ2V0TWF4WCgpO1xuICAgIGNvbnN0IG4gPSA2MDtcbiAgICBjb25zdCBsaW5lOiBEZXNpcmFiaWxpdHlMaW5lID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBuOyBpKyspIHtcbiAgICAgIGNvbnN0IHggPSBtaW5YICsgKG1heFggLSBtaW5YKSAqIChpIC8gbik7XG4gICAgICBsZXQgeSA9IDA7XG5cbiAgICAgIGlmICh0aGlzLl9wcm9wLm1vZGUgPT09ICdnYXVzc2lhbicpIHtcbiAgICAgICAgdGhpcy5fcHJvcC5tZWFuID8/PSAobWluWCArIG1heFgpIC8gMjtcbiAgICAgICAgdGhpcy5fcHJvcC5zaWdtYSA/Pz0gKG1heFggLSBtaW5YKSAvIDY7XG4gICAgICAgIGNvbnN0IG1lYW4gPSB0aGlzLl9wcm9wLm1lYW47XG4gICAgICAgIGNvbnN0IHNpZ21hID0gdGhpcy5fcHJvcC5zaWdtYTtcbiAgICAgICAgY29uc3QgeiA9ICh4IC0gbWVhbikgLyBzaWdtYTtcbiAgICAgICAgeSA9IE1hdGguZXhwKC0wLjUgKiB6ICogeik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9wcm9wLm1vZGUgPT09ICdzaWdtb2lkJykge1xuICAgICAgICB0aGlzLl9wcm9wLngwID8/PSAobWluWCArIG1heFgpIC8gMjtcbiAgICAgICAgdGhpcy5fcHJvcC5rID8/PSAxMDtcbiAgICAgICAgY29uc3QgeDAgPSB0aGlzLl9wcm9wLngwO1xuICAgICAgICBjb25zdCBrID0gdGhpcy5fcHJvcC5rO1xuICAgICAgICB5ID0gMSAvICgxICsgTWF0aC5leHAoLWsgKiAoeCAtIHgwKSkpO1xuICAgICAgfVxuXG4gICAgICBsaW5lLnB1c2goW3gsIHldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGluZTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhd0F4ZXMobWluWDogbnVtYmVyLCBtYXhYOiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgY29uc3QgYXhpc0NvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJy0tZ3JleS0yJykudHJpbSgpIHx8ICcjREJEQ0RGJztcbiAgICB0aGlzLmxheWVyIS5hZGQoXG4gICAgICBuZXcgX2tvbnZhIS5MaW5lKHtcbiAgICAgICAgcG9pbnRzOiBbRURJVE9SX1BBRERJTkcubGVmdCwgaGVpZ2h0IC0gRURJVE9SX1BBRERJTkcuYm90dG9tLCB3aWR0aCAtIEVESVRPUl9QQURESU5HLnJpZ2h0LCBoZWlnaHQgLSBFRElUT1JfUEFERElORy5ib3R0b21dLFxuICAgICAgICBzdHJva2U6IGF4aXNDb2xvcixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICB9KSxcbiAgICAgIG5ldyBfa29udmEhLkxpbmUoe1xuICAgICAgICBwb2ludHM6IFtFRElUT1JfUEFERElORy5sZWZ0LCBFRElUT1JfUEFERElORy50b3AsIEVESVRPUl9QQURESU5HLmxlZnQsIGhlaWdodCAtIEVESVRPUl9QQURESU5HLmJvdHRvbV0sXG4gICAgICAgIHN0cm9rZTogYXhpc0NvbG9yLFxuICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgIH0pLFxuICAgICAgbmV3IF9rb252YSEuVGV4dCh7eDogRURJVE9SX1BBRERJTkcubGVmdCwgeTogaGVpZ2h0IC0gRURJVE9SX1BBRERJTkcuYm90dG9tICsgMywgdGV4dDogbWluWC50b0ZpeGVkKDEpLCBmb250U2l6ZTogOSwgZmlsbDogJ2dyZXknfSksXG4gICAgICBuZXcgX2tvbnZhIS5UZXh0KHt4OiB3aWR0aCAtIEVESVRPUl9QQURESU5HLnJpZ2h0IC0gMTUsIHk6IGhlaWdodCAtIEVESVRPUl9QQURESU5HLmJvdHRvbSArIDMsIHRleHQ6IG1heFgudG9GaXhlZCgxKSwgZm9udFNpemU6IDksIGZpbGw6ICdncmV5J30pLFxuICAgICk7XG4gIH1cblxuICBnZXRNaW5YKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3AubWluID8/IE1hdGgubWluKC4uLnRoaXMuX3Byb3AubGluZS5tYXAoKHApID0+IHBbMF0pKSA/PyAwO1xuICB9XG5cbiAgZ2V0TWF4WCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wcm9wLm1heCA/PyBNYXRoLm1heCguLi50aGlzLl9wcm9wLmxpbmUubWFwKChwKSA9PiBwWzBdKSkgPz8gMTtcbiAgfVxuXG4gIGdldERlZmF1bHRNZWFuKCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLmdldE1pblgoKSArIHRoaXMuZ2V0TWF4WCgpKSAvIDI7XG4gIH1cblxuICBnZXREZWZhdWx0U2lnbWEoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMC4wMSwgKHRoaXMuZ2V0TWF4WCgpIC0gdGhpcy5nZXRNaW5YKCkpIC8gNik7XG4gIH1cblxuICBnZXREZWZhdWx0WDAoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuZ2V0TWluWCgpICsgdGhpcy5nZXRNYXhYKCkpIC8gMjtcbiAgfVxuXG4gIGdldERlZmF1bHRLKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDEwO1xuICB9XG5cbiAgcmVkcmF3QWxsKG5vdGlmeTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3RhZ2UgfHwgIXRoaXMubGF5ZXIgfHwgIXRoaXMucmVkcmF3Rm4pXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuc3RhZ2Uud2lkdGgoKTtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnN0YWdlLmhlaWdodCgpO1xuICAgIGNvbnN0IG1pblggPSB0aGlzLmdldE1pblgoKTtcbiAgICBjb25zdCBtYXhYID0gdGhpcy5nZXRNYXhYKCk7XG5cbiAgICB0aGlzLmxheWVyLmRlc3Ryb3lDaGlsZHJlbigpO1xuXG4gICAgdGhpcy5kcmF3QXhlcyhtaW5YLCBtYXhYLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMubGF5ZXIuYWRkKHRoaXMua29udmFMaW5lISwgdGhpcy5wb2ludHNHcm91cCEpO1xuXG4gICAgdGhpcy5yZWRyYXdGbihub3RpZnkpO1xuXG4gICAgaWYgKHRoaXMuYmFyVmFsdWVzKVxuICAgICAgdGhpcy5kcmF3QmFycygpO1xuICB9XG5cbiAgZHJhd0JhcnModmFsdWVzPzogbnVtYmVyW10pIHtcbiAgICBpZiAodmFsdWVzKVxuICAgICAgdGhpcy5iYXJWYWx1ZXMgPSB2YWx1ZXM7XG5cbiAgICBpZiAoIXRoaXMuYmFyc0xheWVyKSB7XG4gICAgICB0aGlzLnBlbmRpbmdCYXJWYWx1ZXMgPSB2YWx1ZXM7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYmFyc0xheWVyLmRlc3Ryb3lDaGlsZHJlbigpO1xuXG4gICAgaWYgKCF0aGlzLmJhclZhbHVlcyB8fCB0aGlzLmJhclZhbHVlcy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBzdGFnZSA9IHRoaXMuYmFyc0xheWVyLmdldFN0YWdlKCk7XG4gICAgaWYgKCFzdGFnZSkge1xuICAgICAgdGhpcy5wZW5kaW5nQmFyVmFsdWVzID0gdmFsdWVzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRoID0gc3RhZ2Uud2lkdGgoKTtcbiAgICBjb25zdCBoZWlnaHQgPSBzdGFnZS5oZWlnaHQoKTtcblxuICAgIGNvbnN0IG1pblggPSB0aGlzLmdldE1pblgoKTtcbiAgICBjb25zdCBtYXhYID0gdGhpcy5nZXRNYXhYKCk7XG5cbiAgICBpZiAobWF4WCA9PT0gbWluWClcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IG51bUJpbnMgPSAyMDtcbiAgICBjb25zdCBwbG90V2lkdGggPSB3aWR0aCAtIEVESVRPUl9QQURESU5HLmxlZnQgLSBFRElUT1JfUEFERElORy5yaWdodDtcbiAgICBjb25zdCBwbG90SGVpZ2h0ID0gaGVpZ2h0IC0gRURJVE9SX1BBRERJTkcudG9wIC0gRURJVE9SX1BBRERJTkcuYm90dG9tO1xuXG4gICAgY29uc3QgYmluV2lkdGggPSBNYXRoLm1heCgxZS05LCAobWF4WCAtIG1pblgpIC8gbnVtQmlucyk7XG4gICAgY29uc3QgYmlucyA9IG5ldyBBcnJheShudW1CaW5zKS5maWxsKDApO1xuXG4gICAgKHRoaXMuYmFyVmFsdWVzID8/IFtdKS5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBNYXRoLm1pbihNYXRoLmZsb29yKCh2IC0gbWluWCkgLyBiaW5XaWR0aCksIG51bUJpbnMgLSAxKTtcbiAgICAgIGJpbnNbaWR4XSsrO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbWF4Q291bnQgPSBNYXRoLm1heCguLi5iaW5zKSB8fCAxO1xuXG4gICAgYmlucy5mb3JFYWNoKChjb3VudCwgaSkgPT4ge1xuICAgICAgY29uc3QgYmFyWCA9IEVESVRPUl9QQURESU5HLmxlZnQgKyAoaSAqIGJpbldpZHRoIC8gKG1heFggLSBtaW5YKSkgKiBwbG90V2lkdGg7XG4gICAgICBjb25zdCBiYXJXID0gKGJpbldpZHRoIC8gKG1heFggLSBtaW5YKSkgKiBwbG90V2lkdGggLSAxO1xuICAgICAgY29uc3QgYmFySCA9IChjb3VudCAvIG1heENvdW50KSAqIHBsb3RIZWlnaHQ7XG5cbiAgICAgIGNvbnN0IHJlY3QgPSBuZXcgX2tvbnZhIS5SZWN0KHtcbiAgICAgICAgeDogYmFyWCxcbiAgICAgICAgeTogRURJVE9SX1BBRERJTkcudG9wICsgcGxvdEhlaWdodCAtIGJhckgsXG4gICAgICAgIHdpZHRoOiBiYXJXLFxuICAgICAgICBoZWlnaHQ6IGJhckgsXG4gICAgICAgIGZpbGw6IENPTE9SUy5iYXJGaWxsLFxuICAgICAgICBvcGFjaXR5OiAwLjI1LFxuICAgICAgICBzdHJva2U6IENPTE9SUy5iYXJTdHJva2UsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjUsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5iYXJzTGF5ZXIhLmFkZChyZWN0KTtcbiAgICB9KTtcblxuICAgIHRoaXMuYmFyc0xheWVyIS5iYXRjaERyYXcoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlQ3VydmVEcmFnKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLnN0YWdlKVxuICAgICAgcmV0dXJuO1xuXG4gICAgbGV0IGRyYWdnaW5nID0gZmFsc2U7XG4gICAgbGV0IHN0YXJ0UG9pbnRlcjoge3g6IG51bWJlciwgeTogbnVtYmVyfSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBzdGFydE1lYW4gPSAwO1xuICAgIGxldCBzdGFydFNpZ21hID0gMDtcbiAgICBsZXQgc3RhcnRYMCA9IDA7XG4gICAgbGV0IHN0YXJ0SyA9IDA7XG5cbiAgICB0aGlzLnN0YWdlLm9uKCdtb3VzZWRvd24gdG91Y2hzdGFydCcsIChldnQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9wcm9wLm1vZGUgPT09ICdmcmVlZm9ybScpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghZXZ0LmV2dClcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjb25zdCBwb3MgPSB0aGlzLnN0YWdlIS5nZXRQb2ludGVyUG9zaXRpb24oKTtcbiAgICAgIGlmICghcG9zKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIGlmICghdGhpcy5pc0luUGxvdEFyZWEocG9zLCB3aWR0aCwgaGVpZ2h0KSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBkcmFnZ2luZyA9IHRydWU7XG4gICAgICBzdGFydFBvaW50ZXIgPSBwb3M7XG5cbiAgICAgIHN0YXJ0TWVhbiA9IHRoaXMuX3Byb3AubWVhbiA/PyAodGhpcy5nZXRNaW5YKCkgKyB0aGlzLmdldE1heFgoKSkgLyAyO1xuICAgICAgc3RhcnRTaWdtYSA9IHRoaXMuX3Byb3Auc2lnbWEgPz8gKHRoaXMuZ2V0TWF4WCgpIC0gdGhpcy5nZXRNaW5YKCkpIC8gNjtcbiAgICAgIHN0YXJ0WDAgPSB0aGlzLl9wcm9wLngwID8/ICh0aGlzLmdldE1pblgoKSArIHRoaXMuZ2V0TWF4WCgpKSAvIDI7XG4gICAgICBzdGFydEsgPSB0aGlzLl9wcm9wLmsgPz8gMTA7XG5cbiAgICAgIHRoaXMuc3RhZ2UhLmNvbnRhaW5lcigpLnN0eWxlLmN1cnNvciA9ICdncmFiYmluZyc7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YWdlLm9uKCdtb3VzZW1vdmUgdG91Y2htb3ZlJywgKGV2dCkgPT4ge1xuICAgICAgaWYgKCFkcmFnZ2luZyB8fCAhc3RhcnRQb2ludGVyKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuc3RhZ2UhLmdldFBvaW50ZXJQb3NpdGlvbigpO1xuICAgICAgaWYgKCFwb3MpXG4gICAgICAgIHJldHVybjtcblxuICAgICAgY29uc3QgZHggPSBwb3MueCAtIHN0YXJ0UG9pbnRlci54O1xuICAgICAgY29uc3QgZHkgPSBwb3MueSAtIHN0YXJ0UG9pbnRlci55O1xuXG4gICAgICBpZiAodGhpcy5fcHJvcC5tb2RlID09PSAnZ2F1c3NpYW4nKSB7XG4gICAgICAgIHRoaXMuX3Byb3AubWVhbiA9IHN0YXJ0TWVhbiArIGR4ICogdGhpcy5kcmFnU2NhbGVYO1xuICAgICAgICB0aGlzLl9wcm9wLnNpZ21hID0gTWF0aC5tYXgoMC4wMSwgc3RhcnRTaWdtYSArICgtZHkpICogdGhpcy5kcmFnU2NhbGVZICogKHRoaXMuZ2V0TWF4WCgpIC0gdGhpcy5nZXRNaW5YKCkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Byb3AubW9kZSA9PT0gJ3NpZ21vaWQnKSB7XG4gICAgICAgIHRoaXMuX3Byb3AueDAgPSBzdGFydFgwICsgZHggKiB0aGlzLmRyYWdTY2FsZVg7XG4gICAgICAgIHRoaXMuX3Byb3AuayA9IE1hdGgubWF4KDAuMSwgc3RhcnRLICsgKC1keSkgKiB0aGlzLmRyYWdTY2FsZVkgKiA1MCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Byb3AubGluZSA9IHRoaXMuY29tcHV0ZUxpbmUoKTtcbiAgICAgIHRoaXMucmVkcmF3Rm4/LigpO1xuICAgICAgdGhpcy5vblBhcmFtc0NoYW5nZWQ/Lih0aGlzLl9wcm9wKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhZ2Uub24oJ21vdXNldXAgdG91Y2hlbmQnLCAoKSA9PiB7XG4gICAgICBkcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgc3RhcnRQb2ludGVyID0gbnVsbDtcbiAgICAgIHRoaXMuc3RhZ2UhLmNvbnRhaW5lcigpLnN0eWxlLmN1cnNvciA9ICdkZWZhdWx0JztcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU3BlY2lhbEhhbmRsZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNsYW1wID0gKHY6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKSA9PiBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgdikpO1xuXG4gICAgaWYgKHRoaXMuX3Byb3AubW9kZSA9PT0gJ2ZyZWVmb3JtJylcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IG1pblggPSB0aGlzLmdldE1pblgoKTtcbiAgICBjb25zdCBtYXhYID0gdGhpcy5nZXRNYXhYKCk7XG4gICAgY29uc3QgbWFwcGVyID0gbmV3IENvb3JkTWFwcGVyKG1pblgsIG1heFgsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgbGV0IHggPSAobWluWCArIG1heFgpIC8gMjtcbiAgICBsZXQgeSA9IDAuNTtcblxuICAgIGlmICh0aGlzLl9wcm9wLm1vZGUgPT09ICdnYXVzc2lhbicpIHtcbiAgICAgIHggPSB0aGlzLl9wcm9wLm1lYW4gPz8gKG1pblggKyBtYXhYKSAvIDI7XG4gICAgICB5ID0gMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3Byb3AubW9kZSA9PT0gJ3NpZ21vaWQnKSB7XG4gICAgICB4ID0gdGhpcy5fcHJvcC54MCA/PyAobWluWCArIG1heFgpIC8gMjtcbiAgICAgIHkgPSAwLjU7XG4gICAgfVxuXG4gICAgY29uc3QgY29vcmRzID0gbWFwcGVyLnRvQ2FudmFzQ29vcmRzKFt4LCB5XSk7XG5cbiAgICBpZiAoIXRoaXMuc3BlY2lhbEhhbmRsZSkge1xuICAgICAgdGhpcy5zcGVjaWFsSGFuZGxlID0gbmV3IF9rb252YSEuQ2lyY2xlKHtcbiAgICAgICAgeDogY29vcmRzLngsXG4gICAgICAgIHk6IGNvb3Jkcy55LFxuICAgICAgICByYWRpdXM6IDcsXG4gICAgICAgIGZpbGw6IENPTE9SUy5oYW5kbGUsXG4gICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgICAgaGl0U3Ryb2tlV2lkdGg6IDE1LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3BlY2lhbEhhbmRsZS5vbignZHJhZ21vdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBvcyA9IGV2dC50YXJnZXQucG9zaXRpb24oKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1hcHBlci50b0RhdGFDb29yZHMocG9zLngsIHBvcy55KTtcblxuICAgICAgICBpZiAodGhpcy5fcHJvcC5tb2RlID09PSAnZ2F1c3NpYW4nKSB7XG4gICAgICAgICAgdGhpcy5fcHJvcC5tZWFuID0gZGF0YS54O1xuICAgICAgICAgIHRoaXMuX3Byb3Auc2lnbWEgPSBNYXRoLm1heCgwLjAxLCBNYXRoLmFicyhkYXRhLnkgLSAxKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcHJvcC5tb2RlID09PSAnc2lnbW9pZCcpIHtcbiAgICAgICAgICB0aGlzLl9wcm9wLngwID0gZGF0YS54O1xuICAgICAgICAgIHRoaXMuX3Byb3AuayA9IGNsYW1wKE1hdGguYWJzKGRhdGEueSAtIDAuNSkgKiAzMCwgMC4xLCAzMCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcm9wLmxpbmUgPSB0aGlzLmNvbXB1dGVMaW5lKCk7XG4gICAgICAgIHRoaXMucmVkcmF3Rm4/LigpO1xuICAgICAgICB0aGlzLm9uUGFyYW1zQ2hhbmdlZD8uKHRoaXMuX3Byb3ApO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubGF5ZXIhLmFkZCh0aGlzLnNwZWNpYWxIYW5kbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuc3BlY2lhbEhhbmRsZS5nZXRMYXllcigpKVxuICAgICAgICB0aGlzLmxheWVyIS5hZGQodGhpcy5zcGVjaWFsSGFuZGxlKTtcbiAgICAgIHRoaXMuc3BlY2lhbEhhbmRsZS5wb3NpdGlvbihjb29yZHMpO1xuICAgIH1cbiAgICB0aGlzLmxheWVyIS5iYXRjaERyYXcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1BvaW50RWRpdG9yKGRhdGFJbmRleDogbnVtYmVyLCBjbGllbnRYOiBudW1iZXIsIGNsaWVudFk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHBvaW50ID0gdGhpcy5fcHJvcC5saW5lW2RhdGFJbmRleF07XG4gICAgY29uc3QgeElucHV0ID0gdWkuaW5wdXQuZmxvYXQoJ1gnLCB7dmFsdWU6IHBvaW50WzBdLCBtaW46IHRoaXMuZ2V0TWluWCgpLCBtYXg6IHRoaXMuZ2V0TWF4WCgpLCBmb3JtYXQ6ICcjMC4wMCcsIHN0ZXA6IDAuMDF9KTtcbiAgICBjb25zdCB5SW5wdXQgPSB1aS5pbnB1dC5mbG9hdCgnWScsIHt2YWx1ZTogcG9pbnRbMV0sIG1pbjogMCwgbWF4OiAxLCBmb3JtYXQ6ICcjMC4wMCcsIHN0ZXA6IDAuMDF9KTtcblxuICAgIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgICAgY29udGVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXkpO1xuICAgICAgcG9wdXAucmVtb3ZlKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFwcGx5ID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHhJbnB1dC52YWx1ZTtcbiAgICAgIGNvbnN0IHkgPSB5SW5wdXQudmFsdWU7XG4gICAgICBpZiAoeCA9PSBudWxsIHx8IHkgPT0gbnVsbCB8fCBpc05hTih4KSB8fCBpc05hTih5KSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgdGhpcy5fcHJvcC5saW5lW2RhdGFJbmRleF0gPSBbeCwgeV07XG4gICAgICB0aGlzLnJlZHJhd0FsbCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBvbktleSA9IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgYXBwbHkoKTtcbiAgICAgICAgY2xvc2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpXG4gICAgICAgIGNsb3NlKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnRlbnQgPSB1aS5pbnB1dHMoW3hJbnB1dCwgeUlucHV0XSk7XG4gICAgY29udGVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIGNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5KTtcblxuICAgIGNvbnN0IHJvb3RSZWN0ID0gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHBvcHVwID0gdWkuc2hvd1BvcHVwKGNvbnRlbnQsIHRoaXMucm9vdCwge2R4OiBjbGllbnRYIC0gcm9vdFJlY3QubGVmdCwgZHk6IGNsaWVudFkgLSByb290UmVjdC5ib3R0b20sIHNtYXJ0OiBmYWxzZX0pO1xuICB9XG5cbiAgc2V0UmFuZ2UobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgb2xkTWluID0gdGhpcy5nZXRNaW5YKCk7XG4gICAgY29uc3Qgb2xkTWF4ID0gdGhpcy5nZXRNYXhYKCk7XG4gICAgY29uc3Qgb2xkUmFuZ2UgPSBvbGRNYXggLSBvbGRNaW47XG4gICAgY29uc3QgbmV3UmFuZ2UgPSBtYXggLSBtaW47XG5cbiAgICBpZiAob2xkUmFuZ2UgIT09IDAgJiYgbmV3UmFuZ2UgIT09IDApIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gbmV3UmFuZ2UgLyBvbGRSYW5nZTtcbiAgICAgIGNvbnN0IHJlbWFwID0gKHg6IG51bWJlcikgPT4gbWluICsgKHggLSBvbGRNaW4pICogc2NhbGU7XG5cbiAgICAgIGlmICh0aGlzLl9wcm9wLm1lYW4gIT0gbnVsbClcbiAgICAgICAgdGhpcy5fcHJvcC5tZWFuID0gcmVtYXAodGhpcy5fcHJvcC5tZWFuKTtcbiAgICAgIGlmICh0aGlzLl9wcm9wLnNpZ21hICE9IG51bGwpXG4gICAgICAgIHRoaXMuX3Byb3Auc2lnbWEgKj0gc2NhbGU7XG4gICAgICBpZiAodGhpcy5fcHJvcC54MCAhPSBudWxsKVxuICAgICAgICB0aGlzLl9wcm9wLngwID0gcmVtYXAodGhpcy5fcHJvcC54MCk7XG4gICAgICBpZiAodGhpcy5fcHJvcC5rICE9IG51bGwpXG4gICAgICAgIHRoaXMuX3Byb3AuayAvPSBzY2FsZTtcblxuICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMuX3Byb3AubGluZSlcbiAgICAgICAgcFswXSA9IHJlbWFwKHBbMF0pO1xuXG4gICAgICBpZiAodGhpcy5fcHJvcC5mcmVlZm9ybUxpbmUpIHtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMuX3Byb3AuZnJlZWZvcm1MaW5lKVxuICAgICAgICAgIHBbMF0gPSByZW1hcChwWzBdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wLm1pbiA9IG1pbjtcbiAgICB0aGlzLl9wcm9wLm1heCA9IG1heDtcbiAgICB0aGlzLnVwZGF0ZURyYWdTY2FsZXMoKTtcbiAgICB0aGlzLnJlZHJhd0FsbChmYWxzZSk7XG4gIH1cblxuICBzZXRDb2x1bW4oY29sOiBERy5Db2x1bW4gfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFjb2wpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCB2YWx1ZXMgPSBjb2wudG9MaXN0KCk7XG4gICAgdGhpcy5kcmF3QmFycyh2YWx1ZXMpO1xuICB9XG59XG4iXX0=
600
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBvLWxpbmUtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibXBvLWxpbmUtZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUl0QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLElBQUksTUFBZ0MsQ0FBQztBQUVyQyxLQUFLLFVBQVUsUUFBUTtJQUNyQixJQUFJLENBQUMsTUFBTTtRQUNULE1BQU0sR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzNDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFJRCxrQ0FBa0M7QUFDbEMsTUFBTSxjQUFjLEdBQUcsRUFBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFDLENBQUM7QUFDbEUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBRXZCLE1BQU0sTUFBTSxHQUFHO0lBQ2IsSUFBSSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQzVDLE1BQU0sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQztJQUM5QyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDL0MsU0FBUyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxL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RUQsU0FBUyxDQUFDLEdBQXFCO1FBQzdCLElBQUksQ0FBQyxHQUFHO1lBQ04sT0FBTztRQUVULE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB0eXBlIEtvbnZhIGZyb20gJ2tvbnZhJztcbmltcG9ydCB7RGVzaXJhYmlsaXR5TGluZSwgTnVtZXJpY2FsRGVzaXJhYmlsaXR5fSBmcm9tICcuLi9tcG8nO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxubGV0IF9rb252YTogdHlwZW9mIEtvbnZhIHwgdW5kZWZpbmVkO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRLb252YSgpOiBQcm9taXNlPHR5cGVvZiBLb252YT4ge1xuICBpZiAoIV9rb252YSlcbiAgICBfa29udmEgPSAoYXdhaXQgaW1wb3J0KCdrb252YScpKS5kZWZhdWx0O1xuICByZXR1cm4gX2tvbnZhO1xufVxuXG50eXBlIFBvaW50ID0gW251bWJlciwgbnVtYmVyXTtcblxuLy8gQ29uc3RhbnRzIGZvciB0aGUgZWRpdG9yIGxheW91dFxuY29uc3QgRURJVE9SX1BBRERJTkcgPSB7dG9wOiAxMCwgcmlnaHQ6IDEwLCBib3R0b206IDIwLCBsZWZ0OiAzMH07XG5jb25zdCBQT0lOVF9SQURJVVMgPSAzO1xuXG5jb25zdCBDT0xPUlMgPSB7XG4gIGxpbmU6IERHLkNvbG9yLnRvSHRtbChERy5Db2xvci5maWx0ZXJlZFJvd3MpLFxuICBoYW5kbGU6IERHLkNvbG9yLnRvSHRtbChERy5Db2xvci5zZWxlY3RlZFJvd3MpLFxuICBiYXJGaWxsOiBERy5Db2xvci50b0h0bWwoREcuQ29sb3IuaGlzdG9ncmFtQmFyKSxcbiAgYmFyU3Ryb2tlOiBERy5Db2xvci50b0h0bWwoREcuQ29sb3IubGlnaHRHcmF5KSxcbn07XG5cbmNsYXNzIENvb3JkTWFwcGVyIHtcbiAgcHJpdmF0ZSBwbG90V2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBwbG90SGVpZ2h0OiBudW1iZXI7XG4gIHByaXZhdGUgc2NhbGVYOiBudW1iZXI7XG4gIHByaXZhdGUgc2NhbGVZOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtaW5YOiBudW1iZXIsXG4gICAgcHJpdmF0ZSBtYXhYOiBudW1iZXIsXG4gICAgcHJpdmF0ZSB3aWR0aDogbnVtYmVyLFxuICAgIHByaXZhdGUgaGVpZ2h0OiBudW1iZXIsXG4gICkge1xuICAgIHRoaXMucGxvdFdpZHRoID0gd2lkdGggLSBFRElUT1JfUEFERElORy5sZWZ0IC0gRURJVE9SX1BBRERJTkcucmlnaHQ7XG4gICAgdGhpcy5wbG90SGVpZ2h0ID0gaGVpZ2h0IC0gRURJVE9SX1BBRERJTkcudG9wIC0gRURJVE9SX1BBRERJTkcuYm90dG9tO1xuICAgIHRoaXMuc2NhbGVYID0gKHRoaXMubWF4WCAtIHRoaXMubWluWCA9PT0gMCkgPyAxIDogdGhpcy5wbG90V2lkdGggLyAodGhpcy5tYXhYIC0gdGhpcy5taW5YKTtcbiAgICB0aGlzLnNjYWxlWSA9IHRoaXMucGxvdEhlaWdodDtcbiAgfVxuXG4gIHRvQ2FudmFzQ29vcmRzKHA6IFBvaW50KToge3g6IG51bWJlciwgeTogbnVtYmVyfSB7XG4gICAgY29uc3QgY2FudmFzWCA9IEVESVRPUl9QQURESU5HLmxlZnQgKyAocFswXSAtIHRoaXMubWluWCkgKiB0aGlzLnNjYWxlWDtcbiAgICBjb25zdCBjYW52YXNZID0gRURJVE9SX1BBRERJTkcudG9wICsgdGhpcy5wbG90SGVpZ2h0IC0gKHBbMV0gKiB0aGlzLnNjYWxlWSk7XG5cbiAgICByZXR1cm4ge3g6IGNhbnZhc1gsIHk6IGNhbnZhc1l9O1xuICB9XG5cbiAgdG9EYXRhQ29vcmRzKGNhbnZhc1g6IG51bWJlciwgY2FudmFzWTogbnVtYmVyKToge3g6IG51bWJlciwgeTogbnVtYmVyfSB7XG4gICAgbGV0IGRhdGFYID0gdGhpcy5taW5YICsgKGNhbnZhc1ggLSBFRElUT1JfUEFERElORy5sZWZ0KSAvIHRoaXMuc2NhbGVYO1xuICAgIGxldCBkYXRhWSA9IChFRElUT1JfUEFERElORy50b3AgKyB0aGlzLnBsb3RIZWlnaHQgLSBjYW52YXNZKSAvIHRoaXMuc2NhbGVZO1xuXG4gICAgZGF0YVggPSBNYXRoLm1heCh0aGlzLm1pblgsIE1hdGgubWluKHRoaXMubWF4WCwgZGF0YVgpKTtcbiAgICBkYXRhWSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIGRhdGFZKSk7XG5cbiAgICByZXR1cm4ge3g6IGRhdGFYLCB5OiBkYXRhWX07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1wb0Rlc2lyYWJpbGl0eUxpbmVFZGl0b3Ige1xuICByb290ID0gdWkuZGl2KFtdLCAnc3RhdGlzdGljcy1tcG8tbGluZS1lZGl0b3InKTtcbiAgb25DaGFuZ2VkID0gbmV3IFN1YmplY3Q8RGVzaXJhYmlsaXR5TGluZT4oKTtcbiAgc3VwcG9ydHNNb2RlRGlhbG9nOiBib29sZWFuID0gdHJ1ZTtcblxuICBwcml2YXRlIF9wcm9wOiBOdW1lcmljYWxEZXNpcmFiaWxpdHk7XG4gIHByaXZhdGUgYmFyc0xheWVyPzogS29udmEuTGF5ZXI7XG4gIHByaXZhdGUgcGVuZGluZ0JhclZhbHVlcz86IG51bWJlcltdO1xuXG4gIHByaXZhdGUgc3RhZ2U/OiBLb252YS5TdGFnZTtcbiAgcHJpdmF0ZSBsYXllcj86IEtvbnZhLkxheWVyO1xuXG4gIHByaXZhdGUga29udmFMaW5lPzogS29udmEuTGluZTtcbiAgcHJpdmF0ZSBwb2ludHNHcm91cD86IEtvbnZhLkdyb3VwO1xuICBwcml2YXRlIGJhclZhbHVlcz86IG51bWJlcltdO1xuXG4gIHByaXZhdGUgcmVkcmF3Rm4hOiAobm90aWZ5PzogYm9vbGVhbikgPT4gdm9pZDtcblxuICBwcml2YXRlIHNwZWNpYWxIYW5kbGU/OiBLb252YS5DaXJjbGU7XG4gIG9uUGFyYW1zQ2hhbmdlZD86IChwcm9wOiBOdW1lcmljYWxEZXNpcmFiaWxpdHkpID0+IHZvaWQ7XG5cbiAgLy8gRmxhZyB0byBwcmV2ZW50IHRvdWNocGFkIHJpZ2h0LWNsaWNrIGZyb20gYWRkaW5nIGEgbmV3IHBvaW50XG4gIHByaXZhdGUgaWdub3JlTmV4dENsaWNrID0gZmFsc2U7XG4gIHByaXZhdGUgZHJhZ1NjYWxlWCA9IDA7XG4gIHByaXZhdGUgZHJhZ1NjYWxlWSA9IDA7XG4gIHByaXZhdGUgX3dpZHRoOiBudW1iZXI7XG4gIHByaXZhdGUgX2hlaWdodDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHByb3A6IE51bWVyaWNhbERlc2lyYWJpbGl0eSwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcbiAgICB0aGlzLl9wcm9wID0gcHJvcDtcbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodDtcbiAgICB0aGlzLmVuc3VyZURlZmF1bHRMaW5lKCk7XG4gICAgdGhpcy5yb290LnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgIHRoaXMucm9vdC5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIHRoaXMucm9vdC5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XG5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5pbml0S29udmEod2lkdGgsIGhlaWdodCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEZWZhdWx0TGluZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcHJvcC5saW5lLmxlbmd0aCA+IDApXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBtaW4gPSB0aGlzLl9wcm9wLm1pbiA/PyAwO1xuICAgIGNvbnN0IG1heCA9IHRoaXMuX3Byb3AubWF4ID8/IDE7XG4gICAgdGhpcy5fcHJvcC5saW5lID0gW1ttaW4sIDAuNV0sIFttYXgsIDAuNV1dO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEcmFnU2NhbGVzKCk6IHZvaWQge1xuICAgIGNvbnN0IHBsb3RXaWR0aCA9IHRoaXMuX3dpZHRoIC0gRURJVE9SX1BBRERJTkcubGVmdCAtIEVESVRPUl9QQURESU5HLnJpZ2h0O1xuICAgIGNvbnN0IHBsb3RIZWlnaHQgPSB0aGlzLl9oZWlnaHQgLSBFRElUT1JfUEFERElORy50b3AgLSBFRElUT1JfUEFERElORy5ib3R0b207XG4gICAgdGhpcy5kcmFnU2NhbGVYID0gKHRoaXMuZ2V0TWF4WCgpIC0gdGhpcy5nZXRNaW5YKCkpIC8gcGxvdFdpZHRoO1xuICAgIHRoaXMuZHJhZ1NjYWxlWSA9IDEgLyBwbG90SGVpZ2h0O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0luUGxvdEFyZWEocG9zOiB7eDogbnVtYmVyLCB5OiBudW1iZXJ9LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHJldHVybiAoXG4gICAgICBwb3MueCA+PSBFRElUT1JfUEFERElORy5sZWZ0ICYmXG4gICAgICBwb3MueCA8PSB3aWR0aCAtIEVESVRPUl9QQURESU5HLnJpZ2h0ICYmXG4gICAgICBwb3MueSA+PSBFRElUT1JfUEFERElORy50b3AgJiZcbiAgICAgIHBvcy55IDw9IGhlaWdodCAtIEVESVRPUl9QQURESU5HLmJvdHRvbVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRLb252YSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5yb290LnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIGNvbnNvbGUud2FybignS29udmEgY29udGFpbmVyIG5vdCBhdHRhY2hlZCB0byBET00geWV0LicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IEtvbnZhID0gYXdhaXQgZ2V0S29udmEoKTtcbiAgICB0aGlzLmJhcnNMYXllciA9IG5ldyBLb252YS5MYXllcigpO1xuXG4gICAgdGhpcy5zdGFnZSA9IG5ldyBLb252YS5TdGFnZSh7XG4gICAgICBjb250YWluZXI6IHRoaXMucm9vdCxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgIH0pO1xuXG4gICAgdGhpcy5zdGFnZS5hZGQodGhpcy5iYXJzTGF5ZXIpO1xuICAgIHRoaXMubGF5ZXIgPSBuZXcgS29udmEuTGF5ZXIoKTtcbiAgICB0aGlzLnN0YWdlLmFkZCh0aGlzLmxheWVyKTtcblxuICAgIGNvbnN0IG1pblggPSB0aGlzLmdldE1pblgoKTtcbiAgICBjb25zdCBtYXhYID0gdGhpcy5nZXRNYXhYKCk7XG5cbiAgICAvLyAtLS0gRHJhdyBBeGVzIC0tLVxuICAgIHRoaXMuZHJhd0F4ZXMobWluWCwgbWF4WCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICAvLyAtLS0gRHJhdyBMaW5lIGFuZCBQb2ludHMgLS0tXG4gICAgdGhpcy5rb252YUxpbmUgPSBuZXcgS29udmEuTGluZSh7XG4gICAgICBwb2ludHM6IFtdLFxuICAgICAgc3Ryb2tlOiBDT0xPUlMubGluZSxcbiAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgbGluZUNhcDogJ3JvdW5kJyxcbiAgICAgIGxpbmVKb2luOiAncm91bmQnLFxuICAgIH0pO1xuICAgIHRoaXMubGF5ZXIuYWRkKHRoaXMua29udmFMaW5lKTtcblxuICAgIHRoaXMucG9pbnRzR3JvdXAgPSBuZXcgS29udmEuR3JvdXAoKTtcbiAgICB0aGlzLmxheWVyLmFkZCh0aGlzLnBvaW50c0dyb3VwKTtcblxuICAgIC8vIC0tLSBSZWRyYXcgRnVuY3Rpb24gLS0tXG4gICAgdGhpcy5yZWRyYXdGbiA9IChub3RpZnk6IGJvb2xlYW4gPSB0cnVlKSA9PiB7XG4gICAgICBjb25zdCBtaW5YID0gdGhpcy5nZXRNaW5YKCk7XG4gICAgICBjb25zdCBtYXhYID0gdGhpcy5nZXRNYXhYKCk7XG5cbiAgICAgIGlmICh0aGlzLl9wcm9wLm1vZGUgPT09ICdmcmVlZm9ybScgJiYgdGhpcy5fcHJvcC5mcmVlZm9ybUxpbmUpXG4gICAgICAgIHRoaXMuX3Byb3AubGluZSA9IHRoaXMuX3Byb3AuZnJlZWZvcm1MaW5lO1xuXG4gICAgICBpZiAodGhpcy5fcHJvcC5tb2RlICE9PSAnZnJlZWZvcm0nKSB7XG4gICAgICAgIGlmICghdGhpcy5fcHJvcC5mcmVlZm9ybUxpbmUpXG4gICAgICAgICAgdGhpcy5fcHJvcC5mcmVlZm9ybUxpbmUgPSBbLi4udGhpcy5fcHJvcC5saW5lXTtcbiAgICAgICAgdGhpcy5fcHJvcC5saW5lID0gdGhpcy5jb21wdXRlTGluZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvaW50c0dyb3VwIS5kZXN0cm95Q2hpbGRyZW4oKTtcbiAgICAgIGNvbnN0IGtvbnZhUG9pbnRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgICBjb25zdCBtYXBwZXIgPSBuZXcgQ29vcmRNYXBwZXIobWluWCwgbWF4WCwgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCk7XG4gICAgICBjb25zdCBzb3J0ZWRJbmRpY2VzID0gWy4uLnRoaXMuX3Byb3AubGluZS5rZXlzKCldXG4gICAgICAgIC5zb3J0KChhLCBiKSA9PiB0aGlzLl9wcm9wLmxpbmVbYV1bMF0gLSB0aGlzLl9wcm9wLmxpbmVbYl1bMF0pO1xuICAgICAgY29uc3Qgc29ydGVkTGluZSA9IHNvcnRlZEluZGljZXMubWFwKChpZHgpID0+IHRoaXMuX3Byb3AubGluZVtpZHhdKTtcblxuICAgICAgc29ydGVkTGluZS5mb3JFYWNoKChwLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjb29yZHMgPSBtYXBwZXIudG9DYW52YXNDb29yZHMoW3BbMF0sIHBbMV1dKTtcbiAgICAgICAga29udmFQb2ludHMucHVzaChjb29yZHMueCwgY29vcmRzLnkpO1xuXG4gICAgICAgIGlmICh0aGlzLl9wcm9wLm1vZGUgIT09ICdmcmVlZm9ybScpXG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHBvaW50Q2lyY2xlID0gbmV3IEtvbnZhLkNpcmNsZSh7XG4gICAgICAgICAgeDogY29vcmRzLngsXG4gICAgICAgICAgeTogY29vcmRzLnksXG4gICAgICAgICAgcmFkaXVzOiBQT0lOVF9SQURJVVMsXG4gICAgICAgICAgZmlsbDogJ3doaXRlJyxcbiAgICAgICAgICBzdHJva2U6IENPTE9SUy5saW5lLFxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgICAgICBoaXRTdHJva2VXaWR0aDogNSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3RvcmUgaW5kZXggZGlyZWN0bHkgb24gdGhlIG5vZGUgZm9yIGVhc3kgYWNjZXNzXG4gICAgICAgIHBvaW50Q2lyY2xlLnNldEF0dHIoJ19kYXRhSW5kZXgnLCBzb3J0ZWRJbmRpY2VzW2luZGV4XSk7XG5cbiAgICAgICAgcG9pbnRDaXJjbGUub24oJ2RyYWdtb3ZlJywgKGV2dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNpcmNsZSA9IGV2dC50YXJnZXQgYXMgS29udmEuQ2lyY2xlO1xuICAgICAgICAgIGNvbnN0IHBvcyA9IGNpcmNsZS5wb3NpdGlvbigpO1xuICAgICAgICAgIGNvbnN0IGRhdGFJbmRleCA9IGNpcmNsZS5nZXRBdHRyKCdfZGF0YUluZGV4Jyk7XG4gICAgICAgICAgY29uc3Qgc29ydGVkUG9zID0gc29ydGVkSW5kaWNlcy5pbmRleE9mKGRhdGFJbmRleCk7XG5cbiAgICAgICAgICAvLyBDb25zdHJhaW4gZHJhZ2dpbmcgaG9yaXpvbnRhbGx5IGJldHdlZW4gbmVpZ2hib3JzIChvciBib3VuZHMpXG4gICAgICAgICAgY29uc3QgcHJldlggPSBzb3J0ZWRQb3MgPiAwID8gdGhpcy5fcHJvcC5saW5lW3NvcnRlZEluZGljZXNbc29ydGVkUG9zIC0gMV1dWzBdIDogbWluWDtcbiAgICAgICAgICBjb25zdCBuZXh0WCA9IHNvcnRlZFBvcyA8IHNvcnRlZEluZGljZXMubGVuZ3RoIC0gMSA/XG4gICAgICAgICAgICB0aGlzLl9wcm9wLmxpbmVbc29ydGVkSW5kaWNlc1tzb3J0ZWRQb3MgKyAxXV1bMF0gOlxuICAgICAgICAgICAgbWF4WDtcblxuICAgICAgICAgIC8vIEFkZCBhIHNtYWxsIGJ1ZmZlciB0byBhdm9pZCBwb2ludHMgb3ZlcmxhcHBpbmcgZXhhY3RseVxuICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IChtYXhYIC0gbWluWCA9PT0gMCkgPyAwIDogMC4wMDEgKiAobWF4WCAtIG1pblgpOyAvLyBBdm9pZCBOYU4gaWYgbWluWCA9PT0gbWF4WFxuICAgICAgICAgIGNvbnN0IG1pbkNhbnZhc1ggPSBtYXBwZXIudG9DYW52YXNDb29yZHMoW3ByZXZYICsgKHNvcnRlZFBvcyA+IDAgPyBidWZmZXIgOiAwKSwgMF0pLng7XG4gICAgICAgICAgY29uc3QgbWF4Q2FudmFzWCA9IG1hcHBlci50b0NhbnZhc0Nvb3JkcyhbbmV4dFggLSAoc29ydGVkUG9zIDwgc29ydGVkSW5kaWNlcy5sZW5ndGggLSAxID8gYnVmZmVyIDogMCksIDBdKS54O1xuXG4gICAgICAgICAgcG9zLnggPSBNYXRoLm1heChtaW5DYW52YXNYLCBNYXRoLm1pbihtYXhDYW52YXNYLCBwb3MueCkpO1xuXG4gICAgICAgICAgY29uc3QgcGxvdFRvcCA9IEVESVRPUl9QQURESU5HLnRvcDtcbiAgICAgICAgICBjb25zdCBwbG90Qm90dG9tID0gdGhpcy5faGVpZ2h0IC0gRURJVE9SX1BBRERJTkcuYm90dG9tO1xuICAgICAgICAgIHBvcy55ID0gTWF0aC5tYXgocGxvdFRvcCwgTWF0aC5taW4ocGxvdEJvdHRvbSwgcG9zLnkpKTtcblxuICAgICAgICAgIGNpcmNsZS5wb3NpdGlvbihwb3MpO1xuXG4gICAgICAgICAgY29uc3QgZGF0YUNvb3JkcyA9IG1hcHBlci50b0RhdGFDb29yZHMocG9zLngsIHBvcy55KTtcbiAgICAgICAgICB0aGlzLl9wcm9wLmxpbmVbZGF0YUluZGV4XVswXSA9IGRhdGFDb29yZHMueDtcbiAgICAgICAgICB0aGlzLl9wcm9wLmxpbmVbZGF0YUluZGV4XVsxXSA9IGRhdGFDb29yZHMueTtcblxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRLb252YVBvaW50cyA9IHRoaXMuX3Byb3AubGluZS5tYXAoKHBEYXRhLCBpZHgpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSBkcmFnZ2VkIGNpcmNsZSBwb3NpdGlvbiBkaXJlY3RseSBmb3IgdGhlIHBvaW50IGJlaW5nIGRyYWdnZWRcbiAgICAgICAgICAgIGlmIChpZHggPT09IGRhdGFJbmRleClcbiAgICAgICAgICAgICAgcmV0dXJuIFtwb3MueCwgcG9zLnldO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGMgPSBtYXBwZXIudG9DYW52YXNDb29yZHMoW3BEYXRhWzBdLCBwRGF0YVsxXV0pO1xuICAgICAgICAgICAgICByZXR1cm4gW2MueCwgYy55XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS5mbGF0KCk7XG5cbiAgICAgICAgICB0aGlzLmtvbnZhTGluZSEucG9pbnRzKGN1cnJlbnRLb252YVBvaW50cyk7XG4gICAgICAgICAgdGhpcy5sYXllciEuYmF0Y2hEcmF3KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBvaW50Q2lyY2xlLm9uKCdkcmFnZW5kJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3Byb3AubGluZS5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSk7XG4gICAgICAgICAgdGhpcy5yZWRyYXdGbj8uKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBvaW50Q2lyY2xlLm9uKCdjb250ZXh0bWVudScsIChldnQpID0+IHtcbiAgICAgICAgICBldnQuZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgaWYgKHRoaXMuX3Byb3AubGluZS5sZW5ndGggPD0gMikge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKCdDYW5ub3QgcmVtb3ZlIHBvaW50cywgbWluaW11bSBvZiAyIHJlcXVpcmVkLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuaWdub3JlTmV4dENsaWNrID0gdHJ1ZTtcbiAgICAgICAgICBjb25zdCBjaXJjbGUgPSBldnQudGFyZ2V0IGFzIEtvbnZhLkNpcmNsZTtcbiAgICAgICAgICBjb25zdCBkYXRhSW5kZXggPSBjaXJjbGUuZ2V0QXR0cignX2RhdGFJbmRleCcpIGFzIG51bWJlcjtcblxuICAgICAgICAgIGlmIChkYXRhSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Byb3AubWluID09IG51bGwpXG4gICAgICAgICAgICAgIHRoaXMuX3Byb3AubWluID0gdGhpcy5nZXRNaW5YKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fcHJvcC5tYXggPT0gbnVsbClcbiAgICAgICAgICAgICAgdGhpcy5fcHJvcC5tYXggPSB0aGlzLmdldE1heFgoKTtcbiAgICAgICAgICAgIHRoaXMuX3Byb3AubGluZS5zcGxpY2UoZGF0YUluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMucmVkcmF3Rm4/LigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcG9pbnRDaXJjbGUub24oJ21vdXNlZW50ZXInLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgdGhpcy5zdGFnZSEuY29udGFpbmVyKCkuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xuICAgICAgICAgIGNvbnN0IGNpcmNsZSA9IGV2dC50YXJnZXQgYXMgS29udmEuQ2lyY2xlO1xuICAgICAgICAgIGNvbnN0IHBvcyA9IGNpcmNsZS5wb3NpdGlvbigpO1xuICAgICAgICAgIGNvbnN0IGRhdGFDb29yZHMgPSBtYXBwZXIudG9EYXRhQ29vcmRzKHBvcy54LCBwb3MueSk7XG4gICAgICAgICAgY29uc3QgdG9vbHRpcFRleHQgPSBgWDogJHtkYXRhQ29vcmRzLngudG9GaXhlZCgyKX0sIFk6ICR7ZGF0YUNvb3Jkcy55LnRvRml4ZWQoMil9PGJyPjxicj5EcmFnIHRvIG1vdmUsIGRvdWJsZS1jbGljayB0byBlZGl0LCByaWdodC1jbGljayB0byBkZWxldGVgO1xuICAgICAgICAgIHVpLnRvb2x0aXAuc2hvdyh0b29sdGlwVGV4dCwgZXZ0LmV2dC5jbGllbnRYLCBldnQuZXZ0LmNsaWVudFkpO1xuICAgICAgICB9KTtcblxuICAgICAgICBwb2ludENpcmNsZS5vbignbW91c2VsZWF2ZScsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnN0YWdlIS5jb250YWluZXIoKS5zdHlsZS5jdXJzb3IgPSAnZGVmYXVsdCc7XG4gICAgICAgICAgdWkudG9vbHRpcC5oaWRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHBvaW50Q2lyY2xlLm9uKCdkYmxjbGljayBkYmx0YXAnLCAoZXZ0KSA9PiB7XG4gICAgICAgICAgdGhpcy5pZ25vcmVOZXh0Q2xpY2sgPSB0cnVlO1xuICAgICAgICAgIHVpLnRvb2x0aXAuaGlkZSgpO1xuICAgICAgICAgIGNvbnN0IGRhdGFJbmRleCA9IChldnQudGFyZ2V0IGFzIEtvbnZhLkNpcmNsZSkuZ2V0QXR0cignX2RhdGFJbmRleCcpIGFzIG51bWJlcjtcbiAgICAgICAgICB0aGlzLnNob3dQb2ludEVkaXRvcihkYXRhSW5kZXgsIGV2dC5ldnQuY2xpZW50WCwgZXZ0LmV2dC5jbGllbnRZKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5wb2ludHNHcm91cCEuYWRkKHBvaW50Q2lyY2xlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmtvbnZhTGluZSEucG9pbnRzKGtvbnZhUG9pbnRzKTtcbiAgICAgIHRoaXMubGF5ZXIhLmJhdGNoRHJhdygpO1xuXG4gICAgICAvLyAtLS0gQWRkIHNwZWNpYWwgaGFuZGxlIChHYXVzc2lhbiBwZWFrIC8gU2lnbW9pZCBpbmZsZWN0aW9uKSAtLS1cbiAgICAgIHRoaXMuYWRkU3BlY2lhbEhhbmRsZSh0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KTtcblxuICAgICAgaWYgKG5vdGlmeSlcbiAgICAgICAgdGhpcy5vbkNoYW5nZWQubmV4dCh0aGlzLl9wcm9wLmxpbmUpO1xuICAgIH07XG5cbiAgICAvLyAtLS0gTGVmdC1jbGljayB0byBBZGQgUG9pbnQgLS0tXG4gICAgdGhpcy5zdGFnZS5vbignY2xpY2sgdGFwJywgKGV2dCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaWdub3JlTmV4dENsaWNrKSB7XG4gICAgICAgIHRoaXMuaWdub3JlTmV4dENsaWNrID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2dC50YXJnZXQgaW5zdGFuY2VvZiBLb252YS5DaXJjbGUgfHwgZXZ0LmV2dC5idXR0b24gIT09IDApXG4gICAgICAgIHJldHVybjtcblxuICAgICAgY29uc3QgcG9zID0gdGhpcy5zdGFnZT8uZ2V0UG9pbnRlclBvc2l0aW9uKCk7XG4gICAgICBpZiAoIXBvcylcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjb25zdCBtaW5YID0gdGhpcy5nZXRNaW5YKCk7XG4gICAgICBjb25zdCBtYXhYID0gdGhpcy5nZXRNYXhYKCk7XG5cbiAgICAgIGlmICghdGhpcy5pc0luUGxvdEFyZWEocG9zLCB0aGlzLnN0YWdlIS53aWR0aCgpLCB0aGlzLnN0YWdlIS5oZWlnaHQoKSkpXG4gICAgICAgIHJldHVybjtcblxuICAgICAgY29uc3QgbWFwcGVyID0gbmV3IENvb3JkTWFwcGVyKG1pblgsIG1heFgsIHRoaXMuc3RhZ2UhLndpZHRoKCksIHRoaXMuc3RhZ2UhLmhlaWdodCgpKTtcbiAgICAgIGNvbnN0IGRhdGFDb29yZHMgPSBtYXBwZXIudG9EYXRhQ29vcmRzKHBvcy54LCBwb3MueSk7XG5cbiAgICAgIHRoaXMuX3Byb3AubGluZS5wdXNoKFtkYXRhQ29vcmRzLngsIGRhdGFDb29yZHMueV0pO1xuICAgICAgdGhpcy5fcHJvcC5saW5lLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKTtcbiAgICAgIHRoaXMucmVkcmF3Rm4/LigpO1xuICAgIH0pO1xuXG4gICAgLy8gQ3Vyc29yIGNoYW5nZVxuICAgIHRoaXMuc3RhZ2Uub24oJ21vdXNlbW92ZScsIChldnQpID0+IHtcbiAgICAgIGlmICghdGhpcy5zdGFnZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3QgcG9zID0gdGhpcy5zdGFnZS5nZXRQb2ludGVyUG9zaXRpb24oKTtcbiAgICAgIGlmICghcG9zKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIGlmICh0aGlzLl9wcm9wLm1vZGUgIT09ICdmcmVlZm9ybScpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJblBsb3RBcmVhKHBvcywgdGhpcy5fd2lkdGgsIHRoaXMuX2hlaWdodCkpXG4gICAgICAgICAgdGhpcy5zdGFnZS5jb250YWluZXIoKS5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aGlzLnN0YWdlLmNvbnRhaW5lcigpLnN0eWxlLmN1cnNvciA9ICdkZWZhdWx0JztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc3RhZ2Uub24oJ21vdXNlb3V0JywgKCkgPT4gdWkudG9vbHRpcC5oaWRlKCkpO1xuXG4gICAgLy8gRW5hYmxlIGN1cnZlIGRyYWcgKHNtb290aClcbiAgICB0aGlzLmVuYWJsZUN1cnZlRHJhZygpO1xuICAgIHRoaXMudXBkYXRlRHJhZ1NjYWxlcygpO1xuXG4gICAgdWkub25TaXplQ2hhbmdlZCh0aGlzLnJvb3QpLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgY29uc3Qge2NsaWVudFdpZHRoOiB3LCBjbGllbnRIZWlnaHQ6IGh9ID0gdGhpcy5yb290O1xuICAgICAgaWYgKHcgPiAwICYmIGggPiAwKVxuICAgICAgICB0aGlzLnJlc2l6ZSh3LCBoKTtcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWwgZHJhd1xuICAgIGlmICh0aGlzLnBlbmRpbmdCYXJWYWx1ZXMpIHtcbiAgICAgIHRoaXMuZHJhd0JhcnModGhpcy5wZW5kaW5nQmFyVmFsdWVzKTtcbiAgICAgIHRoaXMucGVuZGluZ0JhclZhbHVlcyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5yZWRyYXdGbj8uKGZhbHNlKTtcbiAgfVxuXG4gIGdldCBsaW5lKCk6IERlc2lyYWJpbGl0eUxpbmUge1xuICAgIHJldHVybiB0aGlzLl9wcm9wLmxpbmU7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVMaW5lKCk6IERlc2lyYWJpbGl0eUxpbmUge1xuICAgIGlmICh0aGlzLl9wcm9wLm1vZGUgPT09ICdmcmVlZm9ybScpXG4gICAgICByZXR1cm4gdGhpcy5fcHJvcC5saW5lO1xuXG4gICAgY29uc3QgbWluWCA9IHRoaXMuZ2V0TWluWCgpO1xuICAgIGNvbnN0IG1heFggPSB0aGlzLmdldE1heFgoKTtcbiAgICBjb25zdCBuID0gNjA7XG4gICAgY29uc3QgbGluZTogRGVzaXJhYmlsaXR5TGluZSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gbjsgaSsrKSB7XG4gICAgICBjb25zdCB4ID0gbWluWCArIChtYXhYIC0gbWluWCkgKiAoaSAvIG4pO1xuICAgICAgbGV0IHkgPSAwO1xuXG4gICAgICBpZiAodGhpcy5fcHJvcC5tb2RlID09PSAnZ2F1c3NpYW4nKSB7XG4gICAgICAgIHRoaXMuX3Byb3AubWVhbiA/Pz0gKG1pblggKyBtYXhYKSAvIDI7XG4gICAgICAgIHRoaXMuX3Byb3Auc2lnbWEgPz89IChtYXhYIC0gbWluWCkgLyA2O1xuICAgICAgICBjb25zdCBtZWFuID0gdGhpcy5fcHJvcC5tZWFuO1xuICAgICAgICBjb25zdCBzaWdtYSA9IHRoaXMuX3Byb3Auc2lnbWE7XG4gICAgICAgIGNvbnN0IHogPSAoeCAtIG1lYW4pIC8gc2lnbWE7XG4gICAgICAgIHkgPSBNYXRoLmV4cCgtMC41ICogeiAqIHopO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fcHJvcC5tb2RlID09PSAnc2lnbW9pZCcpIHtcbiAgICAgICAgdGhpcy5fcHJvcC54MCA/Pz0gKG1pblggKyBtYXhYKSAvIDI7XG4gICAgICAgIHRoaXMuX3Byb3AuayA/Pz0gMTA7XG4gICAgICAgIGNvbnN0IHgwID0gdGhpcy5fcHJvcC54MDtcbiAgICAgICAgY29uc3QgayA9IHRoaXMuX3Byb3AuaztcbiAgICAgICAgeSA9IDEgLyAoMSArIE1hdGguZXhwKC1rICogKHggLSB4MCkpKTtcbiAgICAgIH1cblxuICAgICAgbGluZS5wdXNoKFt4LCB5XSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpbmU7XG4gIH1cblxuICBwcml2YXRlIGRyYXdBeGVzKG1pblg6IG51bWJlciwgbWF4WDogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGF4aXNDb2xvciA9IGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWdyZXktMicpLnRyaW0oKSB8fCAnI0RCRENERic7XG4gICAgdGhpcy5sYXllciEuYWRkKFxuICAgICAgbmV3IF9rb252YSEuTGluZSh7XG4gICAgICAgIHBvaW50czogW0VESVRPUl9QQURESU5HLmxlZnQsIGhlaWdodCAtIEVESVRPUl9QQURESU5HLmJvdHRvbSwgd2lkdGggLSBFRElUT1JfUEFERElORy5yaWdodCwgaGVpZ2h0IC0gRURJVE9SX1BBRERJTkcuYm90dG9tXSxcbiAgICAgICAgc3Ryb2tlOiBheGlzQ29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgfSksXG4gICAgICBuZXcgX2tvbnZhIS5MaW5lKHtcbiAgICAgICAgcG9pbnRzOiBbRURJVE9SX1BBRERJTkcubGVmdCwgRURJVE9SX1BBRERJTkcudG9wLCBFRElUT1JfUEFERElORy5sZWZ0LCBoZWlnaHQgLSBFRElUT1JfUEFERElORy5ib3R0b21dLFxuICAgICAgICBzdHJva2U6IGF4aXNDb2xvcixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICB9KSxcbiAgICAgIG5ldyBfa29udmEhLlRleHQoe3g6IEVESVRPUl9QQURESU5HLmxlZnQsIHk6IGhlaWdodCAtIEVESVRPUl9QQURESU5HLmJvdHRvbSArIDMsIHRleHQ6IG1pblgudG9GaXhlZCgxKSwgZm9udFNpemU6IDksIGZpbGw6ICdncmV5J30pLFxuICAgICAgbmV3IF9rb252YSEuVGV4dCh7eDogd2lkdGggLSBFRElUT1JfUEFERElORy5yaWdodCAtIDE1LCB5OiBoZWlnaHQgLSBFRElUT1JfUEFERElORy5ib3R0b20gKyAzLCB0ZXh0OiBtYXhYLnRvRml4ZWQoMSksIGZvbnRTaXplOiA5LCBmaWxsOiAnZ3JleSd9KSxcbiAgICApO1xuICB9XG5cbiAgZ2V0TWluWCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wcm9wLm1pbiA/PyBNYXRoLm1pbiguLi50aGlzLl9wcm9wLmxpbmUubWFwKChwKSA9PiBwWzBdKSkgPz8gMDtcbiAgfVxuXG4gIGdldE1heFgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvcC5tYXggPz8gTWF0aC5tYXgoLi4udGhpcy5fcHJvcC5saW5lLm1hcCgocCkgPT4gcFswXSkpID8/IDE7XG4gIH1cblxuICBnZXREZWZhdWx0TWVhbigpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5nZXRNaW5YKCkgKyB0aGlzLmdldE1heFgoKSkgLyAyO1xuICB9XG5cbiAgZ2V0RGVmYXVsdFNpZ21hKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAuMDEsICh0aGlzLmdldE1heFgoKSAtIHRoaXMuZ2V0TWluWCgpKSAvIDYpO1xuICB9XG5cbiAgZ2V0RGVmYXVsdFgwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLmdldE1pblgoKSArIHRoaXMuZ2V0TWF4WCgpKSAvIDI7XG4gIH1cblxuICBnZXREZWZhdWx0SygpOiBudW1iZXIge1xuICAgIHJldHVybiAxMDtcbiAgfVxuXG4gIHJlZHJhd0FsbChub3RpZnk6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN0YWdlIHx8ICF0aGlzLmxheWVyIHx8ICF0aGlzLnJlZHJhd0ZuKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLnN0YWdlLndpZHRoKCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5zdGFnZS5oZWlnaHQoKTtcbiAgICBjb25zdCBtaW5YID0gdGhpcy5nZXRNaW5YKCk7XG4gICAgY29uc3QgbWF4WCA9IHRoaXMuZ2V0TWF4WCgpO1xuXG4gICAgdGhpcy5sYXllci5kZXN0cm95Q2hpbGRyZW4oKTtcblxuICAgIHRoaXMuZHJhd0F4ZXMobWluWCwgbWF4WCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICB0aGlzLmxheWVyLmFkZCh0aGlzLmtvbnZhTGluZSEsIHRoaXMucG9pbnRzR3JvdXAhKTtcblxuICAgIHRoaXMucmVkcmF3Rm4obm90aWZ5KTtcblxuICAgIGlmICh0aGlzLmJhclZhbHVlcylcbiAgICAgIHRoaXMuZHJhd0JhcnMoKTtcbiAgfVxuXG4gIHJlc2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh3aWR0aCA9PT0gdGhpcy5fd2lkdGggJiYgaGVpZ2h0ID09PSB0aGlzLl9oZWlnaHQpXG4gICAgICByZXR1cm47XG5cbiAgICB0aGlzLl93aWR0aCA9IHdpZHRoO1xuICAgIHRoaXMuX2hlaWdodCA9IGhlaWdodDtcblxuICAgIGlmICh0aGlzLnN0YWdlKSB7XG4gICAgICB0aGlzLnN0YWdlLndpZHRoKHdpZHRoKTtcbiAgICAgIHRoaXMuc3RhZ2UuaGVpZ2h0KGhlaWdodCk7XG4gICAgICB0aGlzLnVwZGF0ZURyYWdTY2FsZXMoKTtcbiAgICAgIHRoaXMucmVkcmF3QWxsKGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBkcmF3QmFycyh2YWx1ZXM/OiBudW1iZXJbXSkge1xuICAgIGlmICh2YWx1ZXMpXG4gICAgICB0aGlzLmJhclZhbHVlcyA9IHZhbHVlcztcblxuICAgIGlmICghdGhpcy5iYXJzTGF5ZXIpIHtcbiAgICAgIHRoaXMucGVuZGluZ0JhclZhbHVlcyA9IHZhbHVlcztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5iYXJzTGF5ZXIuZGVzdHJveUNoaWxkcmVuKCk7XG5cbiAgICBpZiAoIXRoaXMuYmFyVmFsdWVzIHx8IHRoaXMuYmFyVmFsdWVzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IHN0YWdlID0gdGhpcy5iYXJzTGF5ZXIuZ2V0U3RhZ2UoKTtcbiAgICBpZiAoIXN0YWdlKSB7XG4gICAgICB0aGlzLnBlbmRpbmdCYXJWYWx1ZXMgPSB2YWx1ZXM7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgd2lkdGggPSBzdGFnZS53aWR0aCgpO1xuICAgIGNvbnN0IGhlaWdodCA9IHN0YWdlLmhlaWdodCgpO1xuXG4gICAgY29uc3QgbWluWCA9IHRoaXMuZ2V0TWluWCgpO1xuICAgIGNvbnN0IG1heFggPSB0aGlzLmdldE1heFgoKTtcblxuICAgIGlmIChtYXhYID09PSBtaW5YKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgbnVtQmlucyA9IDIwO1xuICAgIGNvbnN0IHBsb3RXaWR0aCA9IHdpZHRoIC0gRURJVE9SX1BBRERJTkcubGVmdCAtIEVESVRPUl9QQURESU5HLnJpZ2h0O1xuICAgIGNvbnN0IHBsb3RIZWlnaHQgPSBoZWlnaHQgLSBFRElUT1JfUEFERElORy50b3AgLSBFRElUT1JfUEFERElORy5ib3R0b207XG5cbiAgICBjb25zdCBiaW5XaWR0aCA9IE1hdGgubWF4KDFlLTksIChtYXhYIC0gbWluWCkgLyBudW1CaW5zKTtcbiAgICBjb25zdCBiaW5zID0gbmV3IEFycmF5KG51bUJpbnMpLmZpbGwoMCk7XG5cbiAgICAodGhpcy5iYXJWYWx1ZXMgPz8gW10pLmZvckVhY2goKHYpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IE1hdGgubWluKE1hdGguZmxvb3IoKHYgLSBtaW5YKSAvIGJpbldpZHRoKSwgbnVtQmlucyAtIDEpO1xuICAgICAgYmluc1tpZHhdKys7XG4gICAgfSk7XG5cbiAgICBjb25zdCBtYXhDb3VudCA9IE1hdGgubWF4KC4uLmJpbnMpIHx8IDE7XG5cbiAgICBiaW5zLmZvckVhY2goKGNvdW50LCBpKSA9PiB7XG4gICAgICBjb25zdCBiYXJYID0gRURJVE9SX1BBRERJTkcubGVmdCArIChpICogYmluV2lkdGggLyAobWF4WCAtIG1pblgpKSAqIHBsb3RXaWR0aDtcbiAgICAgIGNvbnN0IGJhclcgPSAoYmluV2lkdGggLyAobWF4WCAtIG1pblgpKSAqIHBsb3RXaWR0aCAtIDE7XG4gICAgICBjb25zdCBiYXJIID0gKGNvdW50IC8gbWF4Q291bnQpICogcGxvdEhlaWdodDtcblxuICAgICAgY29uc3QgcmVjdCA9IG5ldyBfa29udmEhLlJlY3Qoe1xuICAgICAgICB4OiBiYXJYLFxuICAgICAgICB5OiBFRElUT1JfUEFERElORy50b3AgKyBwbG90SGVpZ2h0IC0gYmFySCxcbiAgICAgICAgd2lkdGg6IGJhclcsXG4gICAgICAgIGhlaWdodDogYmFySCxcbiAgICAgICAgZmlsbDogQ09MT1JTLmJhckZpbGwsXG4gICAgICAgIG9wYWNpdHk6IDAuMjUsXG4gICAgICAgIHN0cm9rZTogQ09MT1JTLmJhclN0cm9rZSxcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmJhcnNMYXllciEuYWRkKHJlY3QpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5iYXJzTGF5ZXIhLmJhdGNoRHJhdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVDdXJ2ZURyYWcoKSB7XG4gICAgaWYgKCF0aGlzLnN0YWdlKVxuICAgICAgcmV0dXJuO1xuXG4gICAgbGV0IGRyYWdnaW5nID0gZmFsc2U7XG4gICAgbGV0IHN0YXJ0UG9pbnRlcjoge3g6IG51bWJlciwgeTogbnVtYmVyfSB8IG51bGwgPSBudWxsO1xuICAgIGxldCBzdGFydE1lYW4gPSAwO1xuICAgIGxldCBzdGFydFNpZ21hID0gMDtcbiAgICBsZXQgc3RhcnRYMCA9IDA7XG4gICAgbGV0IHN0YXJ0SyA9IDA7XG5cbiAgICB0aGlzLnN0YWdlLm9uKCdtb3VzZWRvd24gdG91Y2hzdGFydCcsIChldnQpID0+IHtcbiAgICAgIGlmICh0aGlzLl9wcm9wLm1vZGUgPT09ICdmcmVlZm9ybScpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGlmICghZXZ0LmV2dClcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBjb25zdCBwb3MgPSB0aGlzLnN0YWdlIS5nZXRQb2ludGVyUG9zaXRpb24oKTtcbiAgICAgIGlmICghcG9zKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIGlmICghdGhpcy5pc0luUGxvdEFyZWEocG9zLCB0aGlzLl93aWR0aCwgdGhpcy5faGVpZ2h0KSlcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICBkcmFnZ2luZyA9IHRydWU7XG4gICAgICBzdGFydFBvaW50ZXIgPSBwb3M7XG5cbiAgICAgIHN0YXJ0TWVhbiA9IHRoaXMuX3Byb3AubWVhbiA/PyAodGhpcy5nZXRNaW5YKCkgKyB0aGlzLmdldE1heFgoKSkgLyAyO1xuICAgICAgc3RhcnRTaWdtYSA9IHRoaXMuX3Byb3Auc2lnbWEgPz8gKHRoaXMuZ2V0TWF4WCgpIC0gdGhpcy5nZXRNaW5YKCkpIC8gNjtcbiAgICAgIHN0YXJ0WDAgPSB0aGlzLl9wcm9wLngwID8/ICh0aGlzLmdldE1pblgoKSArIHRoaXMuZ2V0TWF4WCgpKSAvIDI7XG4gICAgICBzdGFydEsgPSB0aGlzLl9wcm9wLmsgPz8gMTA7XG5cbiAgICAgIHRoaXMuc3RhZ2UhLmNvbnRhaW5lcigpLnN0eWxlLmN1cnNvciA9ICdncmFiYmluZyc7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YWdlLm9uKCdtb3VzZW1vdmUgdG91Y2htb3ZlJywgKGV2dCkgPT4ge1xuICAgICAgaWYgKCFkcmFnZ2luZyB8fCAhc3RhcnRQb2ludGVyKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuc3RhZ2UhLmdldFBvaW50ZXJQb3NpdGlvbigpO1xuICAgICAgaWYgKCFwb3MpXG4gICAgICAgIHJldHVybjtcblxuICAgICAgY29uc3QgZHggPSBwb3MueCAtIHN0YXJ0UG9pbnRlci54O1xuICAgICAgY29uc3QgZHkgPSBwb3MueSAtIHN0YXJ0UG9pbnRlci55O1xuXG4gICAgICBpZiAodGhpcy5fcHJvcC5tb2RlID09PSAnZ2F1c3NpYW4nKSB7XG4gICAgICAgIHRoaXMuX3Byb3AubWVhbiA9IHN0YXJ0TWVhbiArIGR4ICogdGhpcy5kcmFnU2NhbGVYO1xuICAgICAgICB0aGlzLl9wcm9wLnNpZ21hID0gTWF0aC5tYXgoMC4wMSwgc3RhcnRTaWdtYSArICgtZHkpICogdGhpcy5kcmFnU2NhbGVZICogKHRoaXMuZ2V0TWF4WCgpIC0gdGhpcy5nZXRNaW5YKCkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Byb3AubW9kZSA9PT0gJ3NpZ21vaWQnKSB7XG4gICAgICAgIHRoaXMuX3Byb3AueDAgPSBzdGFydFgwICsgZHggKiB0aGlzLmRyYWdTY2FsZVg7XG4gICAgICAgIHRoaXMuX3Byb3AuayA9IE1hdGgubWF4KDAuMSwgc3RhcnRLICsgKC1keSkgKiB0aGlzLmRyYWdTY2FsZVkgKiA1MCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Byb3AubGluZSA9IHRoaXMuY29tcHV0ZUxpbmUoKTtcbiAgICAgIHRoaXMucmVkcmF3Rm4/LigpO1xuICAgICAgdGhpcy5vblBhcmFtc0NoYW5nZWQ/Lih0aGlzLl9wcm9wKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhZ2Uub24oJ21vdXNldXAgdG91Y2hlbmQnLCAoKSA9PiB7XG4gICAgICBkcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgc3RhcnRQb2ludGVyID0gbnVsbDtcbiAgICAgIHRoaXMuc3RhZ2UhLmNvbnRhaW5lcigpLnN0eWxlLmN1cnNvciA9ICdkZWZhdWx0JztcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkU3BlY2lhbEhhbmRsZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIGNvbnN0IGNsYW1wID0gKHY6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKSA9PiBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgdikpO1xuXG4gICAgaWYgKHRoaXMuX3Byb3AubW9kZSA9PT0gJ2ZyZWVmb3JtJylcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IG1pblggPSB0aGlzLmdldE1pblgoKTtcbiAgICBjb25zdCBtYXhYID0gdGhpcy5nZXRNYXhYKCk7XG4gICAgY29uc3QgbWFwcGVyID0gbmV3IENvb3JkTWFwcGVyKG1pblgsIG1heFgsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgbGV0IHggPSAobWluWCArIG1heFgpIC8gMjtcbiAgICBsZXQgeSA9IDAuNTtcblxuICAgIGlmICh0aGlzLl9wcm9wLm1vZGUgPT09ICdnYXVzc2lhbicpIHtcbiAgICAgIHggPSB0aGlzLl9wcm9wLm1lYW4gPz8gKG1pblggKyBtYXhYKSAvIDI7XG4gICAgICB5ID0gMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3Byb3AubW9kZSA9PT0gJ3NpZ21vaWQnKSB7XG4gICAgICB4ID0gdGhpcy5fcHJvcC54MCA/PyAobWluWCArIG1heFgpIC8gMjtcbiAgICAgIHkgPSAwLjU7XG4gICAgfVxuXG4gICAgY29uc3QgY29vcmRzID0gbWFwcGVyLnRvQ2FudmFzQ29vcmRzKFt4LCB5XSk7XG5cbiAgICBpZiAoIXRoaXMuc3BlY2lhbEhhbmRsZSkge1xuICAgICAgdGhpcy5zcGVjaWFsSGFuZGxlID0gbmV3IF9rb252YSEuQ2lyY2xlKHtcbiAgICAgICAgeDogY29vcmRzLngsXG4gICAgICAgIHk6IGNvb3Jkcy55LFxuICAgICAgICByYWRpdXM6IDcsXG4gICAgICAgIGZpbGw6IENPTE9SUy5oYW5kbGUsXG4gICAgICAgIGRyYWdnYWJsZTogdHJ1ZSxcbiAgICAgICAgaGl0U3Ryb2tlV2lkdGg6IDE1LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3BlY2lhbEhhbmRsZS5vbignZHJhZ21vdmUnLCAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBvcyA9IGV2dC50YXJnZXQucG9zaXRpb24oKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IG1hcHBlci50b0RhdGFDb29yZHMocG9zLngsIHBvcy55KTtcblxuICAgICAgICBpZiAodGhpcy5fcHJvcC5tb2RlID09PSAnZ2F1c3NpYW4nKSB7XG4gICAgICAgICAgdGhpcy5fcHJvcC5tZWFuID0gZGF0YS54O1xuICAgICAgICAgIHRoaXMuX3Byb3Auc2lnbWEgPSBNYXRoLm1heCgwLjAxLCBNYXRoLmFicyhkYXRhLnkgLSAxKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fcHJvcC5tb2RlID09PSAnc2lnbW9pZCcpIHtcbiAgICAgICAgICB0aGlzLl9wcm9wLngwID0gZGF0YS54O1xuICAgICAgICAgIHRoaXMuX3Byb3AuayA9IGNsYW1wKE1hdGguYWJzKGRhdGEueSAtIDAuNSkgKiAzMCwgMC4xLCAzMCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcm9wLmxpbmUgPSB0aGlzLmNvbXB1dGVMaW5lKCk7XG4gICAgICAgIHRoaXMucmVkcmF3Rm4/LigpO1xuICAgICAgICB0aGlzLm9uUGFyYW1zQ2hhbmdlZD8uKHRoaXMuX3Byb3ApO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubGF5ZXIhLmFkZCh0aGlzLnNwZWNpYWxIYW5kbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuc3BlY2lhbEhhbmRsZS5nZXRMYXllcigpKVxuICAgICAgICB0aGlzLmxheWVyIS5hZGQodGhpcy5zcGVjaWFsSGFuZGxlKTtcbiAgICAgIHRoaXMuc3BlY2lhbEhhbmRsZS5wb3NpdGlvbihjb29yZHMpO1xuICAgIH1cbiAgICB0aGlzLmxheWVyIS5iYXRjaERyYXcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd1BvaW50RWRpdG9yKGRhdGFJbmRleDogbnVtYmVyLCBjbGllbnRYOiBudW1iZXIsIGNsaWVudFk6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHBvaW50ID0gdGhpcy5fcHJvcC5saW5lW2RhdGFJbmRleF07XG4gICAgY29uc3QgeElucHV0ID0gdWkuaW5wdXQuZmxvYXQoJ1gnLCB7dmFsdWU6IHBvaW50WzBdLCBtaW46IHRoaXMuZ2V0TWluWCgpLCBtYXg6IHRoaXMuZ2V0TWF4WCgpLCBmb3JtYXQ6ICcjMC4wMCcsIHN0ZXA6IDAuMDF9KTtcbiAgICBjb25zdCB5SW5wdXQgPSB1aS5pbnB1dC5mbG9hdCgnWScsIHt2YWx1ZTogcG9pbnRbMV0sIG1pbjogMCwgbWF4OiAxLCBmb3JtYXQ6ICcjMC4wMCcsIHN0ZXA6IDAuMDF9KTtcblxuICAgIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgICAgY29udGVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgb25LZXkpO1xuICAgICAgcG9wdXAucmVtb3ZlKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFwcGx5ID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHhJbnB1dC52YWx1ZTtcbiAgICAgIGNvbnN0IHkgPSB5SW5wdXQudmFsdWU7XG4gICAgICBpZiAoeCA9PSBudWxsIHx8IHkgPT0gbnVsbCB8fCBpc05hTih4KSB8fCBpc05hTih5KSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgdGhpcy5fcHJvcC5saW5lW2RhdGFJbmRleF0gPSBbeCwgeV07XG4gICAgICB0aGlzLnJlZHJhd0FsbCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBvbktleSA9IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgYXBwbHkoKTtcbiAgICAgICAgY2xvc2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpXG4gICAgICAgIGNsb3NlKCk7XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbnRlbnQgPSB1aS5pbnB1dHMoW3hJbnB1dCwgeUlucHV0XSk7XG4gICAgY29udGVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgIGNvbnRlbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIG9uS2V5KTtcblxuICAgIGNvbnN0IHJvb3RSZWN0ID0gdGhpcy5yb290LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHBvcHVwID0gdWkuc2hvd1BvcHVwKGNvbnRlbnQsIHRoaXMucm9vdCwge2R4OiBjbGllbnRYIC0gcm9vdFJlY3QubGVmdCwgZHk6IGNsaWVudFkgLSByb290UmVjdC5ib3R0b20sIHNtYXJ0OiBmYWxzZX0pO1xuICB9XG5cbiAgc2V0UmFuZ2UobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgb2xkTWluID0gdGhpcy5nZXRNaW5YKCk7XG4gICAgY29uc3Qgb2xkTWF4ID0gdGhpcy5nZXRNYXhYKCk7XG4gICAgY29uc3Qgb2xkUmFuZ2UgPSBvbGRNYXggLSBvbGRNaW47XG4gICAgY29uc3QgbmV3UmFuZ2UgPSBtYXggLSBtaW47XG5cbiAgICBpZiAob2xkUmFuZ2UgIT09IDAgJiYgbmV3UmFuZ2UgIT09IDApIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gbmV3UmFuZ2UgLyBvbGRSYW5nZTtcbiAgICAgIGNvbnN0IHJlbWFwID0gKHg6IG51bWJlcikgPT4gbWluICsgKHggLSBvbGRNaW4pICogc2NhbGU7XG5cbiAgICAgIGlmICh0aGlzLl9wcm9wLm1lYW4gIT0gbnVsbClcbiAgICAgICAgdGhpcy5fcHJvcC5tZWFuID0gcmVtYXAodGhpcy5fcHJvcC5tZWFuKTtcbiAgICAgIGlmICh0aGlzLl9wcm9wLnNpZ21hICE9IG51bGwpXG4gICAgICAgIHRoaXMuX3Byb3Auc2lnbWEgKj0gc2NhbGU7XG4gICAgICBpZiAodGhpcy5fcHJvcC54MCAhPSBudWxsKVxuICAgICAgICB0aGlzLl9wcm9wLngwID0gcmVtYXAodGhpcy5fcHJvcC54MCk7XG4gICAgICBpZiAodGhpcy5fcHJvcC5rICE9IG51bGwpXG4gICAgICAgIHRoaXMuX3Byb3AuayAvPSBzY2FsZTtcblxuICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMuX3Byb3AubGluZSlcbiAgICAgICAgcFswXSA9IHJlbWFwKHBbMF0pO1xuXG4gICAgICBpZiAodGhpcy5fcHJvcC5mcmVlZm9ybUxpbmUpIHtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMuX3Byb3AuZnJlZWZvcm1MaW5lKVxuICAgICAgICAgIHBbMF0gPSByZW1hcChwWzBdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9wcm9wLm1pbiA9IG1pbjtcbiAgICB0aGlzLl9wcm9wLm1heCA9IG1heDtcbiAgICB0aGlzLnVwZGF0ZURyYWdTY2FsZXMoKTtcbiAgICB0aGlzLnJlZHJhd0FsbChmYWxzZSk7XG4gIH1cblxuICBzZXRDb2x1bW4oY29sOiBERy5Db2x1bW4gfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFjb2wpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCB2YWx1ZXMgPSBjb2wudG9MaXN0KCk7XG4gICAgdGhpcy5kcmF3QmFycyh2YWx1ZXMpO1xuICB9XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"mpo-profile-editor.d.ts","sourceRoot":"","sources":["mpo-profile-editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAItC,OAAO,EAAC,OAAO,EAAe,MAAM,MAAM,CAAC;AAC3C,OAAO,EAEL,mBAAmB,EAAwB,mBAAmB,EAE/D,MAAM,OAAO,CAAC;AAIf,OAAO,sBAAsB,CAAC;AAM9B,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,IAAI,iBAAc;IAC3B,QAAQ,CAAC,SAAS,gBAAuB;IACzC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,WAAW,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IAEtE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC;IACzB,MAAM,UAAS;IACf,OAAO,UAAS;IAEhB,OAAO,CAAC,IAAI,CAAmC;IAC/C,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,OAAO,CAAmC;IAElD,OAAO,CAAC,aAAa,CAAgB;IACrC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAM;gBAEtC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,UAAQ,EAAE,OAAO,UAAQ;IAiBrE,OAAO,CAAC,QAAQ;IAIhB,UAAU,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI;IA2B/C,UAAU,IAAI,mBAAmB,GAAG,SAAS;IAI7C,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAQhC,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAQjC,OAAO,CAAC,MAAM;IA0Bd,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,iBAAiB;IASzB,WAAW,IAAI,IAAI;IAgBnB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,QAAQ;IA2ChB,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,UAAU;CAInB"}
1
+ {"version":3,"file":"mpo-profile-editor.d.ts","sourceRoot":"","sources":["mpo-profile-editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAItC,OAAO,EAAC,OAAO,EAAe,MAAM,MAAM,CAAC;AAC3C,OAAO,EAEL,mBAAmB,EAAwB,mBAAmB,EAE/D,MAAM,OAAO,CAAC;AAIf,OAAO,sBAAsB,CAAC;AAM9B,qBAAa,gBAAgB;IAC3B,QAAQ,CAAC,IAAI,iBAAc;IAC3B,QAAQ,CAAC,SAAS,gBAAuB;IACzC,QAAQ,CAAC,gBAAgB,EAAE,EAAE,CAAC,WAAW,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC;IAEtE,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC;IACzB,MAAM,UAAS;IACf,OAAO,UAAS;IAEhB,OAAO,CAAC,IAAI,CAAmC;IAC/C,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,OAAO,CAAmC;IAElD,OAAO,CAAC,aAAa,CAAgB;IACrC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAM;gBAEtC,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,UAAQ,EAAE,OAAO,UAAQ;IAiBrE,OAAO,CAAC,QAAQ;IAIhB,UAAU,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI;IA2B/C,UAAU,IAAI,mBAAmB,GAAG,SAAS;IAI7C,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAQhC,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI;IAQjC,OAAO,CAAC,MAAM;IA0Bd,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,iBAAiB;IASzB,WAAW,IAAI,IAAI;IAgBnB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,QAAQ;IA4ChB,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,eAAe;IAmDvB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,uBAAuB;IAM/B,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,kBAAkB;IAiB1B,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,UAAU;CAInB"}
@@ -140,6 +140,7 @@ export class MpoProfileEditor {
140
140
  }
141
141
  }
142
142
  const editor = DesirabilityEditorFactory.create(prop, 300, 80, this.design);
143
+ editor.root.classList.add('statistics-mpo-editor-fill');
143
144
  (_a = this.rowSubs.get(rowId)) === null || _a === void 0 ? void 0 : _a.unsubscribe();
144
145
  this.rowSubs.set(rowId, editor.onChanged.subscribe(() => this.emitChange()));
145
146
  const propertyCell = this.buildPropertyCell(rowId, name);
@@ -195,7 +196,7 @@ export class MpoProfileEditor {
195
196
  colInput.root.classList.toggle('statistics-mpo-hidden', !isColumn);
196
197
  toggle.classList.toggle('statistics-mpo-weight-toggle-active', isColumn);
197
198
  };
198
- const toggle = ui.iconFA('columns', () => {
199
+ const toggle = ui.iconFA('exchange-alt', () => {
199
200
  isColumn = !isColumn;
200
201
  syncToggle();
201
202
  if (!isColumn && name)
@@ -385,4 +386,4 @@ export class MpoProfileEditor {
385
386
  grok.events.fireCustomEvent(MPO_SCORE_CHANGED_EVENT, {});
386
387
  }
387
388
  }
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBvLXByb2ZpbGUtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibXBvLXByb2ZpbGUtZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUUxQyxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxtQkFBbUIsRUFBRSwwQkFBMEIsRUFFL0Msd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixHQUNuRixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBcUIseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUUxRSxPQUFPLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVoRCxNQUFNLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztBQUV0QyxNQUFNLE9BQU8sZ0JBQWdCO0lBaUIzQixZQUFZLFNBQXdCLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFBRSxPQUFPLEdBQUcsS0FBSztRQWhCNUQsU0FBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFLekMsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFUixTQUFJLEdBQWdDLEVBQUUsQ0FBQztRQUN2QyxXQUFNLEdBQTJCLEVBQUUsQ0FBQztRQUNwQyxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFFMUMsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDckMsa0JBQWEsR0FBa0MsRUFBRSxDQUFDO1FBR2hELElB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Q2xELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRS9DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBRTdCLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsMENBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sY0FBYyxDQUNwQixJQUFZLEVBQ1osT0FBMEM7O1FBRTFDLE1BQU0sSUFBSSxHQUFHLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJO1lBQ1AsT0FBTztRQUVULE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5cbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERFRkFVTFRfQUdHUkVHQVRJT04sIFdFSUdIVEVEX0FHR1JFR0FUSU9OU19MSVNULFxuICBEZXNpcmFiaWxpdHlQcm9maWxlLCBQcm9wZXJ0eURlc2lyYWJpbGl0eSwgV2VpZ2h0ZWRBZ2dyZWdhdGlvbixcbiAgY3JlYXRlRGVmYXVsdENhdGVnb3JpY2FsLCBjcmVhdGVEZWZhdWx0TnVtZXJpY2FsLCBpc051bWVyaWNhbCwgbWlncmF0ZURlc2lyYWJpbGl0eSxcbn0gZnJvbSAnLi9tcG8nO1xuaW1wb3J0IHtEZXNpcmFiaWxpdHlFZGl0b3IsIERlc2lyYWJpbGl0eUVkaXRvckZhY3Rvcnl9IGZyb20gJy4vZWRpdG9ycy9kZXNpcmFiaWxpdHktZWRpdG9yLWZhY3RvcnknO1xuaW1wb3J0IHtEZXNpcmFiaWxpdHlNb2RlRGlhbG9nfSBmcm9tICcuL2RpYWxvZ3MvZGVzaXJhYmlsaXR5LW1vZGUtZGlhbG9nJztcblxuaW1wb3J0ICcuLi8uLi9jc3Mvc3R5bGVzLmNzcyc7XG5cbmltcG9ydCB7TVBPX1NDT1JFX0NIQU5HRURfRVZFTlR9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBNQVhfQ0FURUdPUklDQUxfQ0FURUdPUklFUyA9IDIwO1xuXG5leHBvcnQgY2xhc3MgTXBvUHJvZmlsZUVkaXRvciB7XG4gIHJlYWRvbmx5IHJvb3QgPSB1aS5kaXYoW10pO1xuICByZWFkb25seSBvbkNoYW5nZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkb25seSBhZ2dyZWdhdGlvbklucHV0OiBERy5DaG9pY2VJbnB1dDxXZWlnaHRlZEFnZ3JlZ2F0aW9uIHwgbnVsbD47XG5cbiAgcHJvZmlsZT86IERlc2lyYWJpbGl0eVByb2ZpbGU7XG4gIGRhdGFGcmFtZT86IERHLkRhdGFGcmFtZTtcbiAgZGVzaWduID0gZmFsc2U7XG4gIHByZXZpZXcgPSBmYWxzZTtcblxuICBwcml2YXRlIHJvd3M6IFJlY29yZDxzdHJpbmcsIEhUTUxFbGVtZW50PiA9IHt9O1xuICBwcml2YXRlIHJvd0lkczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwcml2YXRlIHJvd1N1YnMgPSBuZXcgTWFwPHN0cmluZywgU3Vic2NyaXB0aW9uPigpO1xuXG4gIHByaXZhdGUgcHJvcGVydHlPcmRlcjogc3RyaW5nW10gPSBbXTtcbiAgY29sdW1uTWFwcGluZzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihkYXRhRnJhbWU/OiBERy5EYXRhRnJhbWUsIGRlc2lnbiA9IGZhbHNlLCBwcmV2aWV3ID0gZmFsc2UpIHtcbiAgICB0aGlzLmRhdGFGcmFtZSA9IGRhdGFGcmFtZTtcbiAgICB0aGlzLmRlc2lnbiA9IGRlc2lnbjtcbiAgICB0aGlzLnByZXZpZXcgPSBwcmV2aWV3O1xuICAgIHRoaXMuYWdncmVnYXRpb25JbnB1dCA9IHVpLmlucHV0LmNob2ljZSgnQWdncmVnYXRpb24nLCB7XG4gICAgICBpdGVtczogV0VJR0hURURfQUdHUkVHQVRJT05TX0xJU1QsXG4gICAgICB2YWx1ZTogREVGQVVMVF9BR0dSRUdBVElPTixcbiAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgIG9uVmFsdWVDaGFuZ2VkOiAodikgPT4ge1xuICAgICAgICBpZiAodGhpcy5wcm9maWxlKVxuICAgICAgICAgIHRoaXMucHJvZmlsZS5hZ2dyZWdhdGlvbiA9IHY7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLmFnZ3JlZ2F0aW9uSW5wdXQuc2V0VG9vbHRpcCgnU2NvcmUgYWdncmVnYXRpb24gbWV0aG9kJyk7XG4gIH1cblxuICBwcml2YXRlIG5ld1Jvd0lkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBzZXRQcm9maWxlKHByb2ZpbGU/OiBEZXNpcmFiaWxpdHlQcm9maWxlKTogdm9pZCB7XG4gICAgaWYgKHByb2ZpbGUpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb2ZpbGUucHJvcGVydGllcykpIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IG1pZ3JhdGVEZXNpcmFiaWxpdHkocHJvZmlsZS5wcm9wZXJ0aWVzW2tleV0pO1xuICAgICAgICBpZiAoaXNOdW1lcmljYWwocHJvcCkpXG4gICAgICAgICAgcHJvcC5tb2RlID8/PSAnZnJlZWZvcm0nO1xuICAgICAgICBwcm9maWxlLnByb3BlcnRpZXNba2V5XSA9IHByb3A7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5yb3dTdWJzLnZhbHVlcygpKVxuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5yb3dTdWJzLmNsZWFyKCk7XG5cbiAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlO1xuICAgIHRoaXMuYWdncmVnYXRpb25JbnB1dC52YWx1ZSA9IHByb2ZpbGU/LmFnZ3JlZ2F0aW9uID8/IERFRkFVTFRfQUdHUkVHQVRJT047XG4gICAgdGhpcy5jb2x1bW5NYXBwaW5nID0ge307XG4gICAgdGhpcy5yb3dzID0ge307XG4gICAgdGhpcy5yb3dJZHMgPSB7fTtcbiAgICB0aGlzLnByb3BlcnR5T3JkZXIgPSBwcm9maWxlID8gT2JqZWN0LmtleXMocHJvZmlsZS5wcm9wZXJ0aWVzKSA6IFtdO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHRoaXMucHJvcGVydHlPcmRlcilcbiAgICAgIHRoaXMucm93SWRzW25hbWVdID0gdGhpcy5uZXdSb3dJZCgpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGdldFByb2ZpbGUoKTogRGVzaXJhYmlsaXR5UHJvZmlsZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvZmlsZTtcbiAgfVxuXG4gIHNldERlc2lnbk1vZGUob246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ24gPT09IG9uKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZGVzaWduID0gb247XG4gICAgdGhpcy5yb3dzID0ge307XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNldFByZXZpZXdNb2RlKG9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJldmlldyA9PT0gb24pXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5wcmV2aWV3ID0gb247XG4gICAgdGhpcy5yb3dzID0ge307XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyKCk6IHZvaWQge1xuICAgIHVpLmVtcHR5KHRoaXMucm9vdCk7XG5cbiAgICBpZiAoIXRoaXMucHJvZmlsZSlcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckVtcHR5KCdObyBwcm9maWxlIHNwZWNpZmllZC4nKTtcblxuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnByb3BlcnR5T3JkZXIubWFwKChuYW1lKSA9PiB7XG4gICAgICBjb25zdCByb3dJZCA9IHRoaXMucm93SWRzW25hbWVdO1xuICAgICAgaWYgKCF0aGlzLnJvd3Nbcm93SWRdKVxuICAgICAgICB0aGlzLnJvd3Nbcm93SWRdID0gdGhpcy5idWlsZFJvdyhuYW1lLCByb3dJZCwgdGhpcy5wcm9maWxlIS5wcm9wZXJ0aWVzW25hbWVdKTtcbiAgICAgIHJldHVybiB0aGlzLnJvd3Nbcm93SWRdO1xuICAgIH0pO1xuXG4gICAgaWYgKCFyb3dzLmxlbmd0aCkge1xuICAgICAgaWYgKCF0aGlzLnByZXZpZXcpXG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQodGhpcy5idWlsZEhlYWRlcigpKTtcbiAgICAgIGlmICh0aGlzLmRlc2lnbilcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRGVzaWduRW1wdHkoKTtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckVtcHR5KCdObyBwcm9wZXJ0aWVzIGRlZmluZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnByZXZpZXcpXG4gICAgICB0aGlzLnJvb3QuYXBwZW5kKHRoaXMuYnVpbGRIZWFkZXIoKSk7XG4gICAgdGhpcy5yb290LmFwcGVuZCh1aS5kaXZWKHJvd3MpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRW1wdHkodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290LmFwcGVuZCh1aS5kaXZUZXh0KHRleHQpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRGVzaWduRW1wdHkoKTogdm9pZCB7XG4gICAgY29uc3QgaWNvbiA9IHVpLmljb25GQSgnY2hhcnQtbGluZScpO1xuICAgIGNvbnN0IGhlYWRpbmcgPSB1aS5oMygnTm8gcHJvcGVydGllcyB5ZXQnKTtcbiAgICBjb25zdCBtc2cgPSB1aS5wKCdTZWxlY3QgYSBkYXRhc2V0IHRvIGF1dG8tcG9wdWxhdGUgcHJvcGVydGllcyBmcm9tIGl0cyBudW1lcmljYWwgY29sdW1ucywgb3IgYWRkIHRoZW0gbWFudWFsbHkuJyk7XG4gICAgY29uc3QgYWRkQnRuID0gdWkubGluaygnKyBBZGQgUHJvcGVydHknLCAoKSA9PiB0aGlzLmFkZFByb3BlcnR5KCkpO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHVpLmRpdlYoW2ljb24sIGhlYWRpbmcsIG1zZywgYWRkQnRuXSwgJ3N0YXRpc3RpY3MtbXBvLWVtcHR5LXN0YXRlJyk7XG4gICAgdGhpcy5yb290LmFwcGVuZChjb250YWluZXIpO1xuICB9XG5cbiAgYWRkUHJvcGVydHkoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByb2ZpbGUpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBuZXdOYW1lID0gYE5ld1Byb3BlcnR5JHtPYmplY3Qua2V5cyh0aGlzLnByb2ZpbGUucHJvcGVydGllcykubGVuZ3RoICsgMX1gO1xuICAgIGNvbnN0IG5ld1Jvd0lkID0gdGhpcy5uZXdSb3dJZCgpO1xuXG4gICAgdGhpcy5wcm9maWxlLnByb3BlcnRpZXNbbmV3TmFtZV0gPSBjcmVhdGVEZWZhdWx0TnVtZXJpY2FsKCk7XG4gICAgdGhpcy5yb3dJZHNbbmV3TmFtZV0gPSBuZXdSb3dJZDtcbiAgICB0aGlzLnByb3BlcnR5T3JkZXIucHVzaChuZXdOYW1lKTtcblxuICAgIHRoaXMucm93cyA9IHt9O1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkSGVhZGVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdWkuZGl2SChbXG4gICAgICB1aS5kaXZUZXh0KCdQcm9wZXJ0eScsICdzdGF0aXN0aWNzLW1wby1oZWFkZXItcHJvcGVydHknKSxcbiAgICAgIHVpLmRpdlRleHQoJ1dlaWdodCcsICdzdGF0aXN0aWNzLW1wby1oZWFkZXItd2VpZ2h0JyksXG4gICAgICB1aS5kaXZUZXh0KCdEZXNpcmFiaWxpdHknLCAnc3RhdGlzdGljcy1tcG8taGVhZGVyLWRlc2lyYWJpbGl0eScpLFxuICAgIF0sICdzdGF0aXN0aWNzLW1wby1oZWFkZXInKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRSb3coXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJvd0lkOiBzdHJpbmcsXG4gICAgcHJvcDogUHJvcGVydHlEZXNpcmFiaWxpdHksXG4gICk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCByb3cgPSB1aS5kaXZIKFtdLCAnc3RhdGlzdGljcy1tcG8tcm93Jyk7XG4gICAgcm93LmRhdGFzZXQucm93SWQgPSByb3dJZDtcblxuICAgIGNvbnN0IGNvbCA9IHRoaXMucmVzb2x2ZUNvbHVtbihuYW1lKTtcbiAgICBpZiAoY29sKSB7XG4gICAgICBjb25zdCBjb3JyZWN0ZWQgPSB0aGlzLmNvcnJlY3RQcm9wZXJ0eVR5cGUocHJvcCwgY29sKTtcbiAgICAgIGlmIChjb3JyZWN0ZWQpIHtcbiAgICAgICAgcHJvcCA9IGNvcnJlY3RlZDtcbiAgICAgICAgdGhpcy5wcm9maWxlIS5wcm9wZXJ0aWVzW25hbWVdID0gcHJvcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlZGl0b3IgPSBEZXNpcmFiaWxpdHlFZGl0b3JGYWN0b3J5LmNyZWF0ZShwcm9wLCAzMDAsIDgwLCB0aGlzLmRlc2lnbik7XG4gICAgdGhpcy5yb3dTdWJzLmdldChyb3dJZCk/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5yb3dTdWJzLnNldChyb3dJZCwgZWRpdG9yLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5lbWl0Q2hhbmdlKCkpKTtcblxuICAgIGNvbnN0IHByb3BlcnR5Q2VsbCA9IHRoaXMuYnVpbGRQcm9wZXJ0eUNlbGwocm93SWQsIG5hbWUpO1xuICAgIGNvbnN0IHdlaWdodENlbGwgPSB0aGlzLmJ1aWxkV2VpZ2h0Q2VsbChyb3dJZCwgcHJvcCk7XG4gICAgY29uc3QgY29sdW1uQ2VsbCA9IHRoaXMuYnVpbGRDb2x1bW5TZWxlY3Rvcihyb3dJZCwgbmFtZSwgZWRpdG9yKTtcblxuICAgIGNvbnN0IG1vZGVHZWFyID0gdGhpcy5kZXNpZ24gP1xuICAgICAgdGhpcy5idWlsZE1vZGVHZWFyKHJvd0lkLCBwcm9wLCBlZGl0b3IpIDpcbiAgICAgIG51bGw7XG5cbiAgICBjb25zdCBjb250cm9scyA9IHRoaXMuZGVzaWduID8gdGhpcy5idWlsZFJvd0NvbnRyb2xzKHJvd0lkKSA6IG51bGw7XG5cbiAgICByb3cuYXBwZW5kKFxuICAgICAgdWkuZGl2VihbcHJvcGVydHlDZWxsLCBjb2x1bW5DZWxsXS5maWx0ZXIoQm9vbGVhbiksICdzdGF0aXN0aWNzLW1wby1wcm9wZXJ0eS1jZWxsJyksXG4gICAgICB3ZWlnaHRDZWxsLFxuICAgICAgdWkuZGl2SChbZWRpdG9yLnJvb3QsIG1vZGVHZWFyXS5maWx0ZXIoQm9vbGVhbikpLFxuICAgICk7XG5cbiAgICBpZiAoY29udHJvbHMpXG4gICAgICByb3cuYXBwZW5kKGNvbnRyb2xzKTtcblxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUHJvcGVydHlDZWxsKHJvd0lkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZGF0YUZyYW1lKSB7XG4gICAgICBjb25zdCBlbCA9IHVpLmRpdlRleHQobmFtZSk7XG4gICAgICB1aS50b29sdGlwLmJpbmQoZWwsICgpID0+IG5hbWUpO1xuICAgICAgcmV0dXJuIGVsO1xuICAgIH1cblxuICAgIGxldCBjdXJyZW50TmFtZSA9IG5hbWU7XG5cbiAgICBjb25zdCBwcm9wTmFtZUlucCA9IHVpLmlucHV0LnN0cmluZygnJywge3ZhbHVlOiBuYW1lLCBvblZhbHVlQ2hhbmdlZDogKHYpID0+IHtcbiAgICAgIGlmICghdiB8fCB2ID09PSBjdXJyZW50TmFtZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgdGhpcy5yZW5hbWVQcm9wZXJ0eShjdXJyZW50TmFtZSwgdik7XG4gICAgICBjdXJyZW50TmFtZSA9IHY7XG4gICAgfX0pO1xuXG4gICAgdWkudG9vbHRpcC5iaW5kKHByb3BOYW1lSW5wLmlucHV0LCAoKSA9PiBjdXJyZW50TmFtZSk7XG4gICAgcmV0dXJuIHByb3BOYW1lSW5wLnJvb3Q7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkV2VpZ2h0Q2VsbChcbiAgICByb3dJZDogc3RyaW5nLFxuICAgIHByb3A6IFByb3BlcnR5RGVzaXJhYmlsaXR5LFxuICApOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0UHJvcGVydHlOYW1lQnlSb3dJZChyb3dJZCk7XG4gICAgY29uc3QgY2hpbGRyZW46IEhUTUxFbGVtZW50W10gPSBbXTtcblxuICAgIGNvbnN0IHdlaWdodElucHV0ID0gdWkuaW5wdXQuZmxvYXQoJycsIHt2YWx1ZTogcHJvcC53ZWlnaHQsIG1pbjogMCwgbWF4OiAxLCBmb3JtYXQ6ICcjMC4wMDAnLFxuICAgICAgb25WYWx1ZUNoYW5nZWQ6ICh2KSA9PiB7XG4gICAgICAgIGlmIChuYW1lKVxuICAgICAgICAgIHRoaXMubXV0YXRlUHJvcGVydHkobmFtZSwgKHApID0+IHAud2VpZ2h0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgdiA/PyAwKSkpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICB3ZWlnaHRJbnB1dC5yb290LmNsYXNzTGlzdC5hZGQoJ3N0YXRpc3RpY3MtbXBvLXdlaWdodC1pbnB1dCcpO1xuICAgIGNoaWxkcmVuLnB1c2god2VpZ2h0SW5wdXQucm9vdCk7XG5cbiAgICBpZiAodGhpcy5kYXRhRnJhbWUpIHtcbiAgICAgIGNvbnN0IG51bUNvbHMgPSB0aGlzLmdldE51bWVyaWNhbENvbHVtbk5hbWVzKCk7XG4gICAgICBsZXQgaXNDb2x1bW4gPSAhIXByb3Aud2VpZ2h0Q29sdW1uICYmIG51bUNvbHMuaW5jbHVkZXMocHJvcC53ZWlnaHRDb2x1bW4pO1xuXG4gICAgICBjb25zdCBjb2xJbnB1dCA9IHVpLmlucHV0LmNob2ljZSgnJywge2l0ZW1zOiBudW1Db2xzLCBudWxsYWJsZTogdHJ1ZSwgdmFsdWU6IHByb3Aud2VpZ2h0Q29sdW1uID8/ICcnLFxuICAgICAgICBvblZhbHVlQ2hhbmdlZDogKHYpID0+IHtcbiAgICAgICAgICBpZiAobmFtZSlcbiAgICAgICAgICAgIHRoaXMubXV0YXRlUHJvcGVydHkobmFtZSwgKHApID0+IHAud2VpZ2h0Q29sdW1uID0gdiB8fCB1bmRlZmluZWQpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHN5bmNUb2dnbGUgPSAoKSA9PiB7XG4gICAgICAgIHdlaWdodElucHV0LnJvb3QuY2xhc3NMaXN0LnRvZ2dsZSgnc3RhdGlzdGljcy1tcG8taGlkZGVuJywgaXNDb2x1bW4pO1xuICAgICAgICBjb2xJbnB1dC5yb290LmNsYXNzTGlzdC50b2dnbGUoJ3N0YXRpc3RpY3MtbXBvLWhpZGRlbicsICFpc0NvbHVtbik7XG4gICAgICAgIHRvZ2dsZS5jbGFzc0xpc3QudG9nZ2xlKCdzdGF0aXN0aWNzLW1wby13ZWlnaHQtdG9nZ2xlLWFjdGl2ZScsIGlzQ29sdW1uKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRvZ2dsZSA9IHVpLmljb25GQSgnY29sdW1ucycsICgpID0+IHtcbiAgICAgICAgaXNDb2x1bW4gPSAhaXNDb2x1bW47XG4gICAgICAgIHN5bmNUb2dnbGUoKTtcbiAgICAgICAgaWYgKCFpc0NvbHVtbiAmJiBuYW1lKVxuICAgICAgICAgIHRoaXMubXV0YXRlUHJvcGVydHkobmFtZSwgKHApID0+IHsgZGVsZXRlIHAud2VpZ2h0Q29sdW1uOyB9KTtcbiAgICAgICAgZWxzZSBpZiAoaXNDb2x1bW4gJiYgbmFtZSAmJiBjb2xJbnB1dC52YWx1ZSlcbiAgICAgICAgICB0aGlzLm11dGF0ZVByb3BlcnR5KG5hbWUsIChwKSA9PiBwLndlaWdodENvbHVtbiA9IGNvbElucHV0LnZhbHVlIHx8IHVuZGVmaW5lZCk7XG4gICAgICB9KTtcbiAgICAgIHRvZ2dsZS5jbGFzc0xpc3QuYWRkKCdzdGF0aXN0aWNzLW1wby13ZWlnaHQtdG9nZ2xlJyk7XG4gICAgICB1aS50b29sdGlwLmJpbmQodG9nZ2xlLCAoKSA9PiBpc0NvbHVtbiA/ICdTd2l0Y2ggdG8gbWFudWFsIHdlaWdodCcgOiAnVXNlIHdlaWdodCBmcm9tIGNvbHVtbicpO1xuICAgICAgc3luY1RvZ2dsZSgpO1xuXG4gICAgICBjaGlsZHJlbi5wdXNoKGNvbElucHV0LnJvb3QsIHRvZ2dsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVpLmRpdkgoY2hpbGRyZW4sICdzdGF0aXN0aWNzLW1wby13ZWlnaHQtY2VsbCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbHVtblNlbGVjdG9yKFxuICAgIHJvd0lkOiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGVkaXRvcjogRGVzaXJhYmlsaXR5RWRpdG9yLFxuICApOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5kYXRhRnJhbWUpXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRFbGlnaWJsZUNvbHVtbk5hbWVzKCk7XG4gICAgY29uc3QgbWF0Y2hlZCA9IHRoaXMuY29sdW1uTWFwcGluZ1tuYW1lXSA/PyBudWxsO1xuXG4gICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgIGNvbnN0IGNvbCA9IHRoaXMuZGF0YUZyYW1lLmNvbChtYXRjaGVkKTtcbiAgICAgIGVkaXRvci5zZXRDb2x1bW4/Lihjb2wpO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0gdWkuaW5wdXQuY2hvaWNlKCcnLCB7aXRlbXMsIG51bGxhYmxlOiB0cnVlLCB2YWx1ZTogbWF0Y2hlZCA/PyAnJywgb25WYWx1ZUNoYW5nZWQ6ICh2KSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbk1hcHBpbmdbbmFtZV0gPSB2ID8/IG51bGw7XG4gICAgICBjb25zdCBjb2wgPSB2ID8gdGhpcy5kYXRhRnJhbWUhLmNvbCh2KSA6IG51bGw7XG4gICAgICBpZiAoY29sICYmIHRoaXMuc3dpdGNoUHJvcGVydHlUeXBlKG5hbWUsIHJvd0lkLCBjb2wpKVxuICAgICAgICByZXR1cm47XG4gICAgICBlZGl0b3Iuc2V0Q29sdW1uPy4oY29sKTtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH19KTtcbiAgICByZXR1cm4gaW5wdXQucm9vdDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWxpZ2libGVDb2x1bW5OYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLmRhdGFGcmFtZSlcbiAgICAgIHJldHVybiBbXTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmRhdGFGcmFtZS5jb2x1bW5zKVxuICAgICAgLmZpbHRlcigoYykgPT4gIWMuaXNDYXRlZ29yaWNhbCB8fCBjLmNhdGVnb3JpZXMubGVuZ3RoIDw9IE1BWF9DQVRFR09SSUNBTF9DQVRFR09SSUVTKVxuICAgICAgLm1hcCgoYykgPT4gYy5uYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TnVtZXJpY2FsQ29sdW1uTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5kYXRhRnJhbWUpXG4gICAgICByZXR1cm4gW107XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5kYXRhRnJhbWUuY29sdW1ucy5udW1lcmljYWwpLm1hcCgoYykgPT4gYy5uYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUNvbHVtbihuYW1lOiBzdHJpbmcpOiBERy5Db2x1bW4gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuZGF0YUZyYW1lKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgZWxpZ2libGUgPSB0aGlzLmdldEVsaWdpYmxlQ29sdW1uTmFtZXMoKTtcbiAgICBjb25zdCBjb2xOYW1lID0gdGhpcy5jb2x1bW5NYXBwaW5nW25hbWVdID8/IGVsaWdpYmxlLmZpbmQoKGMpID0+IGMudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpKSA/PyBudWxsO1xuICAgIGlmIChjb2xOYW1lKVxuICAgICAgdGhpcy5jb2x1bW5NYXBwaW5nW25hbWVdID0gY29sTmFtZTtcbiAgICByZXR1cm4gY29sTmFtZSA/IHRoaXMuZGF0YUZyYW1lLmNvbChjb2xOYW1lKSA/PyBudWxsIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY29ycmVjdFByb3BlcnR5VHlwZShwcm9wOiBQcm9wZXJ0eURlc2lyYWJpbGl0eSwgY29sOiBERy5Db2x1bW4pOiBQcm9wZXJ0eURlc2lyYWJpbGl0eSB8IG51bGwge1xuICAgIGlmIChpc051bWVyaWNhbChwcm9wKSAmJiBjb2wuaXNDYXRlZ29yaWNhbCkge1xuICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGNvbC5jYXRlZ29yaWVzLm1hcCgoYzogc3RyaW5nKSA9PiAoe25hbWU6IGMsIGRlc2lyYWJpbGl0eTogMX0pKTtcbiAgICAgIHJldHVybiBjcmVhdGVEZWZhdWx0Q2F0ZWdvcmljYWwocHJvcC53ZWlnaHQsIGNhdGVnb3JpZXMpO1xuICAgIH1cblxuICAgIGlmICghaXNOdW1lcmljYWwocHJvcCkgJiYgY29sLmlzTnVtZXJpY2FsKVxuICAgICAgcmV0dXJuIGNyZWF0ZURlZmF1bHROdW1lcmljYWwocHJvcC53ZWlnaHQsIGNvbC5taW4sIGNvbC5tYXgpO1xuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN3aXRjaFByb3BlcnR5VHlwZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcm93SWQ6IHN0cmluZyxcbiAgICBjb2w6IERHLkNvbHVtbixcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnByb2ZpbGUpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBjb3JyZWN0ZWQgPSB0aGlzLmNvcnJlY3RQcm9wZXJ0eVR5cGUodGhpcy5wcm9maWxlLnByb3BlcnRpZXNbbmFtZV0sIGNvbCk7XG4gICAgaWYgKCFjb3JyZWN0ZWQpXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB0aGlzLnByb2ZpbGUucHJvcGVydGllc1tuYW1lXSA9IGNvcnJlY3RlZDtcbiAgICB0aGlzLnJlYnVpbGRSb3cobmFtZSwgcm93SWQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWJ1aWxkUm93KG5hbWU6IHN0cmluZywgcm93SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG9sZFJvdyA9IHRoaXMucm93c1tyb3dJZF07XG4gICAgY29uc3QgbmV3Um93ID0gdGhpcy5idWlsZFJvdyhuYW1lLCByb3dJZCwgdGhpcy5wcm9maWxlIS5wcm9wZXJ0aWVzW25hbWVdKTtcbiAgICB0aGlzLnJvd3Nbcm93SWRdID0gbmV3Um93O1xuXG4gICAgaWYgKG9sZFJvdz8ucGFyZW50Tm9kZSlcbiAgICAgIG9sZFJvdy5yZXBsYWNlV2l0aChuZXdSb3cpO1xuXG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTW9kZUdlYXIoXG4gICAgcm93SWQ6IHN0cmluZyxcbiAgICBwcm9wOiBQcm9wZXJ0eURlc2lyYWJpbGl0eSxcbiAgICBlZGl0b3I6IERlc2lyYWJpbGl0eUVkaXRvcixcbiAgKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGdlYXIgPSB1aS5pY29ucy5zZXR0aW5ncygoKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRQcm9wZXJ0eU5hbWVCeVJvd0lkKHJvd0lkKTtcbiAgICAgIGlmICghbmFtZSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY29uc3QgY29sTmFtZSA9IHRoaXMuY29sdW1uTWFwcGluZ1tuYW1lXTtcbiAgICAgIGNvbnN0IGNvbCA9IGNvbE5hbWUgPyB0aGlzLmRhdGFGcmFtZT8uY29sKGNvbE5hbWUpID8/IG51bGwgOiBudWxsO1xuICAgICAgdGhpcy5vcGVuTW9kZURpYWxvZyhuYW1lLCByb3dJZCwgcHJvcCwgZWRpdG9yLCBjb2wpO1xuICAgIH0pO1xuXG4gICAgZ2Vhci5jbGFzc0xpc3QuYWRkKCdzdGF0aXN0aWNzLW1wby1nZWFyJyk7XG4gICAgcmV0dXJuIGdlYXI7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUm93Q29udHJvbHMocm93SWQ6IHN0cmluZyk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBhZGQgPSB1aS5pY29ucy5hZGQoKCkgPT4gdGhpcy5pbnNlcnRSb3dBZnRlclJvdyhyb3dJZCkpO1xuICAgIGNvbnN0IGRlbCA9IHVpLmljb25zLmRlbGV0ZSgoKSA9PiB0aGlzLmRlbGV0ZVJvdyhyb3dJZCkpO1xuICAgIHJldHVybiB1aS5kaXZIKFthZGQsIGRlbF0sICdzdGF0aXN0aWNzLW1wby1jb250cm9sLWJ1dHRvbnMnKTtcbiAgfVxuXG4gIHByaXZhdGUgb3Blbk1vZGVEaWFsb2coXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJvd0lkOiBzdHJpbmcsXG4gICAgcHJvcDogUHJvcGVydHlEZXNpcmFiaWxpdHksXG4gICAgZWRpdG9yOiBEZXNpcmFiaWxpdHlFZGl0b3IsXG4gICAgbWFwcGVkQ29sOiBERy5Db2x1bW4gfCBudWxsID0gbnVsbCxcbiAgKTogdm9pZCB7XG4gICAgbmV3IERlc2lyYWJpbGl0eU1vZGVEaWFsb2coXG4gICAgICBuYW1lLFxuICAgICAgcHJvcCxcbiAgICAgIChwYXRjaCkgPT4ge1xuICAgICAgICBjb25zdCBwID0gdGhpcy5wcm9maWxlPy5wcm9wZXJ0aWVzW25hbWVdO1xuICAgICAgICBpZiAocClcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHAsIHBhdGNoKTtcbiAgICAgICAgZWRpdG9yLnJlZHJhd0FsbCgpO1xuICAgICAgfSxcbiAgICAgIChuZXdQcm9wKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5wcm9maWxlKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5wcm9maWxlLnByb3BlcnRpZXNbbmFtZV0gPSBuZXdQcm9wO1xuICAgICAgICB0aGlzLnJlYnVpbGRSb3cobmFtZSwgcm93SWQpO1xuICAgICAgfSxcbiAgICAgIG1hcHBlZENvbCxcbiAgICApLnNob3coKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvcGVydHlOYW1lQnlSb3dJZChyb3dJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5yb3dJZHMpXG4gICAgICAuZmluZCgoWywgaWRdKSA9PiBpZCA9PT0gcm93SWQpPy5bMF07XG4gIH1cblxuICBwcml2YXRlIHJlbmFtZVByb3BlcnR5KG9sZE5hbWU6IHN0cmluZywgbmV3TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByb2ZpbGUgfHwgdGhpcy5wcm9maWxlLnByb3BlcnRpZXNbbmV3TmFtZV0pXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCByb3dJZCA9IHRoaXMucm93SWRzW29sZE5hbWVdO1xuICAgIHRoaXMucHJvZmlsZS5wcm9wZXJ0aWVzW25ld05hbWVdID0gdGhpcy5wcm9maWxlLnByb3BlcnRpZXNbb2xkTmFtZV07XG4gICAgZGVsZXRlIHRoaXMucHJvZmlsZS5wcm9wZXJ0aWVzW29sZE5hbWVdO1xuXG4gICAgdGhpcy5jb2x1bW5NYXBwaW5nW25ld05hbWVdID0gdGhpcy5jb2x1bW5NYXBwaW5nW29sZE5hbWVdID8/IG51bGw7XG4gICAgZGVsZXRlIHRoaXMuY29sdW1uTWFwcGluZ1tvbGROYW1lXTtcblxuICAgIGNvbnN0IGlkeCA9IHRoaXMucHJvcGVydHlPcmRlci5pbmRleE9mKG9sZE5hbWUpO1xuICAgIGlmIChpZHggPj0gMClcbiAgICAgIHRoaXMucHJvcGVydHlPcmRlcltpZHhdID0gbmV3TmFtZTtcblxuICAgIGRlbGV0ZSB0aGlzLnJvd0lkc1tvbGROYW1lXTtcbiAgICB0aGlzLnJvd0lkc1tuZXdOYW1lXSA9IHJvd0lkO1xuXG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVJvdyhyb3dJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0UHJvcGVydHlOYW1lQnlSb3dJZChyb3dJZCk7XG4gICAgaWYgKCFuYW1lIHx8ICF0aGlzLnByb2ZpbGUpXG4gICAgICByZXR1cm47XG5cbiAgICBkZWxldGUgdGhpcy5wcm9maWxlLnByb3BlcnRpZXNbbmFtZV07XG4gICAgZGVsZXRlIHRoaXMuY29sdW1uTWFwcGluZ1tuYW1lXTtcbiAgICBkZWxldGUgdGhpcy5yb3dJZHNbbmFtZV07XG4gICAgdGhpcy5yb3dTdWJzLmdldChyb3dJZCk/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5yb3dTdWJzLmRlbGV0ZShyb3dJZCk7XG5cbiAgICBjb25zdCBpZHggPSB0aGlzLnByb3BlcnR5T3JkZXIuaW5kZXhPZihuYW1lKTtcbiAgICBpZiAoaWR4ID49IDApXG4gICAgICB0aGlzLnByb3BlcnR5T3JkZXIuc3BsaWNlKGlkeCwgMSk7XG5cbiAgICBjb25zdCByb3dFbCA9IHRoaXMucm93c1tyb3dJZF07XG4gICAgZGVsZXRlIHRoaXMucm93c1tyb3dJZF07XG5cbiAgICBpZiAodGhpcy5wcm9wZXJ0eU9yZGVyLmxlbmd0aCA9PT0gMClcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgZWxzZVxuICAgICAgcm93RWw/LnJlbW92ZSgpO1xuXG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydFJvd0FmdGVyUm93KHJvd0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvZmlsZSlcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IGFmdGVyTmFtZSA9IHRoaXMuZ2V0UHJvcGVydHlOYW1lQnlSb3dJZChyb3dJZCk7XG4gICAgaWYgKCFhZnRlck5hbWUpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBuZXdOYW1lID0gYE5ld1Byb3BlcnR5JHtPYmplY3Qua2V5cyh0aGlzLnByb2ZpbGUucHJvcGVydGllcykubGVuZ3RoICsgMX1gO1xuICAgIGNvbnN0IG5ld1Jvd0lkID0gdGhpcy5uZXdSb3dJZCgpO1xuXG4gICAgdGhpcy5wcm9maWxlLnByb3BlcnRpZXNbbmV3TmFtZV0gPSBjcmVhdGVEZWZhdWx0TnVtZXJpY2FsKCk7XG5cbiAgICB0aGlzLnJvd0lkc1tuZXdOYW1lXSA9IG5ld1Jvd0lkO1xuXG4gICAgY29uc3QgaWR4ID0gdGhpcy5wcm9wZXJ0eU9yZGVyLmluZGV4T2YoYWZ0ZXJOYW1lKTtcbiAgICB0aGlzLnByb3BlcnR5T3JkZXIuc3BsaWNlKGlkeCArIDEsIDAsIG5ld05hbWUpO1xuXG4gICAgY29uc3QgbmV3Um93ID0gdGhpcy5idWlsZFJvdyhuZXdOYW1lLCBuZXdSb3dJZCwgdGhpcy5wcm9maWxlLnByb3BlcnRpZXNbbmV3TmFtZV0pO1xuICAgIHRoaXMucm93c1tuZXdSb3dJZF0gPSBuZXdSb3c7XG5cbiAgICB0aGlzLnJvd3Nbcm93SWRdPy5hZnRlcihuZXdSb3cpO1xuICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBtdXRhdGVQcm9wZXJ0eShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdXBkYXRlcjogKHA6IFByb3BlcnR5RGVzaXJhYmlsaXR5KSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwcm9wID0gdGhpcy5wcm9maWxlPy5wcm9wZXJ0aWVzW25hbWVdO1xuICAgIGlmICghcHJvcClcbiAgICAgIHJldHVybjtcblxuICAgIHVwZGF0ZXIocHJvcCk7XG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZWQubmV4dCgpO1xuICAgIGdyb2suZXZlbnRzLmZpcmVDdXN0b21FdmVudChNUE9fU0NPUkVfQ0hBTkdFRF9FVkVOVCwge30pO1xuICB9XG59XG4iXX0=
389
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBvLXByb2ZpbGUtZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibXBvLXByb2ZpbGUtZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLElBQUksTUFBTSxtQkFBbUIsQ0FBQztBQUUxQyxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFDTCxtQkFBbUIsRUFBRSwwQkFBMEIsRUFFL0Msd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixHQUNuRixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBcUIseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNwRyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUUxRSxPQUFPLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVoRCxNQUFNLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztBQUV0QyxNQUFNLE9BQU8sZ0JBQWdCO0lBaUIzQixZQUFZLFNBQXdCLEVBQUUsTUFBTSxHQUFHLEtBQUssRUFBRSxPQUFPLEdBQUcsS0FBSztRQWhCNUQsU0FBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEIsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFLekMsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUNmLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFUixTQUFJLEdBQWdDLEVBQUUsQ0FBQztRQUN2QyxXQUFNLEdBQTJCLEVBQUUsQ0FBQztRQUNwQyxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFFMUMsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDckMsa0JBQWEsR0FBa0MsRUFBRSxDQUFDO1FBR2hELElB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LE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRS9DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBRTdCLE1BQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsMENBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sY0FBYyxDQUNwQixJQUFZLEVBQ1osT0FBMEM7O1FBRTFDLE1BQU0sSUFBSSxHQUFHLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJO1lBQ1AsT0FBTztRQUVULE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5cbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIERFRkFVTFRfQUdHUkVHQVRJT04sIFdFSUdIVEVEX0FHR1JFR0FUSU9OU19MSVNULFxuICBEZXNpcmFiaWxpdHlQcm9maWxlLCBQcm9wZXJ0eURlc2lyYWJpbGl0eSwgV2VpZ2h0ZWRBZ2dyZWdhdGlvbixcbiAgY3JlYXRlRGVmYXVsdENhdGVnb3JpY2FsLCBjcmVhdGVEZWZhdWx0TnVtZXJpY2FsLCBpc051bWVyaWNhbCwgbWlncmF0ZURlc2lyYWJpbGl0eSxcbn0gZnJvbSAnLi9tcG8nO1xuaW1wb3J0IHtEZXNpcmFiaWxpdHlFZGl0b3IsIERlc2lyYWJpbGl0eUVkaXRvckZhY3Rvcnl9IGZyb20gJy4vZWRpdG9ycy9kZXNpcmFiaWxpdHktZWRpdG9yLWZhY3RvcnknO1xuaW1wb3J0IHtEZXNpcmFiaWxpdHlNb2RlRGlhbG9nfSBmcm9tICcuL2RpYWxvZ3MvZGVzaXJhYmlsaXR5LW1vZGUtZGlhbG9nJztcblxuaW1wb3J0ICcuLi8uLi9jc3Mvc3R5bGVzLmNzcyc7XG5cbmltcG9ydCB7TVBPX1NDT1JFX0NIQU5HRURfRVZFTlR9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBNQVhfQ0FURUdPUklDQUxfQ0FURUdPUklFUyA9IDIwO1xuXG5leHBvcnQgY2xhc3MgTXBvUHJvZmlsZUVkaXRvciB7XG4gIHJlYWRvbmx5IHJvb3QgPSB1aS5kaXYoW10pO1xuICByZWFkb25seSBvbkNoYW5nZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkb25seSBhZ2dyZWdhdGlvbklucHV0OiBERy5DaG9pY2VJbnB1dDxXZWlnaHRlZEFnZ3JlZ2F0aW9uIHwgbnVsbD47XG5cbiAgcHJvZmlsZT86IERlc2lyYWJpbGl0eVByb2ZpbGU7XG4gIGRhdGFGcmFtZT86IERHLkRhdGFGcmFtZTtcbiAgZGVzaWduID0gZmFsc2U7XG4gIHByZXZpZXcgPSBmYWxzZTtcblxuICBwcml2YXRlIHJvd3M6IFJlY29yZDxzdHJpbmcsIEhUTUxFbGVtZW50PiA9IHt9O1xuICBwcml2YXRlIHJvd0lkczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwcml2YXRlIHJvd1N1YnMgPSBuZXcgTWFwPHN0cmluZywgU3Vic2NyaXB0aW9uPigpO1xuXG4gIHByaXZhdGUgcHJvcGVydHlPcmRlcjogc3RyaW5nW10gPSBbXTtcbiAgY29sdW1uTWFwcGluZzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihkYXRhRnJhbWU/OiBERy5EYXRhRnJhbWUsIGRlc2lnbiA9IGZhbHNlLCBwcmV2aWV3ID0gZmFsc2UpIHtcbiAgICB0aGlzLmRhdGFGcmFtZSA9IGRhdGFGcmFtZTtcbiAgICB0aGlzLmRlc2lnbiA9IGRlc2lnbjtcbiAgICB0aGlzLnByZXZpZXcgPSBwcmV2aWV3O1xuICAgIHRoaXMuYWdncmVnYXRpb25JbnB1dCA9IHVpLmlucHV0LmNob2ljZSgnQWdncmVnYXRpb24nLCB7XG4gICAgICBpdGVtczogV0VJR0hURURfQUdHUkVHQVRJT05TX0xJU1QsXG4gICAgICB2YWx1ZTogREVGQVVMVF9BR0dSRUdBVElPTixcbiAgICAgIG51bGxhYmxlOiBmYWxzZSxcbiAgICAgIG9uVmFsdWVDaGFuZ2VkOiAodikgPT4ge1xuICAgICAgICBpZiAodGhpcy5wcm9maWxlKVxuICAgICAgICAgIHRoaXMucHJvZmlsZS5hZ2dyZWdhdGlvbiA9IHY7XG4gICAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLmFnZ3JlZ2F0aW9uSW5wdXQuc2V0VG9vbHRpcCgnU2NvcmUgYWdncmVnYXRpb24gbWV0aG9kJyk7XG4gIH1cblxuICBwcml2YXRlIG5ld1Jvd0lkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBzZXRQcm9maWxlKHByb2ZpbGU/OiBEZXNpcmFiaWxpdHlQcm9maWxlKTogdm9pZCB7XG4gICAgaWYgKHByb2ZpbGUpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb2ZpbGUucHJvcGVydGllcykpIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IG1pZ3JhdGVEZXNpcmFiaWxpdHkocHJvZmlsZS5wcm9wZXJ0aWVzW2tleV0pO1xuICAgICAgICBpZiAoaXNOdW1lcmljYWwocHJvcCkpXG4gICAgICAgICAgcHJvcC5tb2RlID8/PSAnZnJlZWZvcm0nO1xuICAgICAgICBwcm9maWxlLnByb3BlcnRpZXNba2V5XSA9IHByb3A7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5yb3dTdWJzLnZhbHVlcygpKVxuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5yb3dTdWJzLmNsZWFyKCk7XG5cbiAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlO1xuICAgIHRoaXMuYWdncmVnYXRpb25JbnB1dC52YWx1ZSA9IHByb2ZpbGU/LmFnZ3JlZ2F0aW9uID8/IERFRkFVTFRfQUdHUkVHQVRJT047XG4gICAgdGhpcy5jb2x1bW5NYXBwaW5nID0ge307XG4gICAgdGhpcy5yb3dzID0ge307XG4gICAgdGhpcy5yb3dJZHMgPSB7fTtcbiAgICB0aGlzLnByb3BlcnR5T3JkZXIgPSBwcm9maWxlID8gT2JqZWN0LmtleXMocHJvZmlsZS5wcm9wZXJ0aWVzKSA6IFtdO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHRoaXMucHJvcGVydHlPcmRlcilcbiAgICAgIHRoaXMucm93SWRzW25hbWVdID0gdGhpcy5uZXdSb3dJZCgpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGdldFByb2ZpbGUoKTogRGVzaXJhYmlsaXR5UHJvZmlsZSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucHJvZmlsZTtcbiAgfVxuXG4gIHNldERlc2lnbk1vZGUob246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ24gPT09IG9uKVxuICAgICAgcmV0dXJuO1xuICAgIHRoaXMuZGVzaWduID0gb247XG4gICAgdGhpcy5yb3dzID0ge307XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNldFByZXZpZXdNb2RlKG9uOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucHJldmlldyA9PT0gb24pXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5wcmV2aWV3ID0gb247XG4gICAgdGhpcy5yb3dzID0ge307XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyKCk6IHZvaWQge1xuICAgIHVpLmVtcHR5KHRoaXMucm9vdCk7XG5cbiAgICBpZiAoIXRoaXMucHJvZmlsZSlcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckVtcHR5KCdObyBwcm9maWxlIHNwZWNpZmllZC4nKTtcblxuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnByb3BlcnR5T3JkZXIubWFwKChuYW1lKSA9PiB7XG4gICAgICBjb25zdCByb3dJZCA9IHRoaXMucm93SWRzW25hbWVdO1xuICAgICAgaWYgKCF0aGlzLnJvd3Nbcm93SWRdKVxuICAgICAgICB0aGlzLnJvd3Nbcm93SWRdID0gdGhpcy5idWlsZFJvdyhuYW1lLCByb3dJZCwgdGhpcy5wcm9maWxlIS5wcm9wZXJ0aWVzW25hbWVdKTtcbiAgICAgIHJldHVybiB0aGlzLnJvd3Nbcm93SWRdO1xuICAgIH0pO1xuXG4gICAgaWYgKCFyb3dzLmxlbmd0aCkge1xuICAgICAgaWYgKCF0aGlzLnByZXZpZXcpXG4gICAgICAgIHRoaXMucm9vdC5hcHBlbmQodGhpcy5idWlsZEhlYWRlcigpKTtcbiAgICAgIGlmICh0aGlzLmRlc2lnbilcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRGVzaWduRW1wdHkoKTtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckVtcHR5KCdObyBwcm9wZXJ0aWVzIGRlZmluZWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnByZXZpZXcpXG4gICAgICB0aGlzLnJvb3QuYXBwZW5kKHRoaXMuYnVpbGRIZWFkZXIoKSk7XG4gICAgdGhpcy5yb290LmFwcGVuZCh1aS5kaXZWKHJvd3MpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRW1wdHkodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yb290LmFwcGVuZCh1aS5kaXZUZXh0KHRleHQpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRGVzaWduRW1wdHkoKTogdm9pZCB7XG4gICAgY29uc3QgaWNvbiA9IHVpLmljb25GQSgnY2hhcnQtbGluZScpO1xuICAgIGNvbnN0IGhlYWRpbmcgPSB1aS5oMygnTm8gcHJvcGVydGllcyB5ZXQnKTtcbiAgICBjb25zdCBtc2cgPSB1aS5wKCdTZWxlY3QgYSBkYXRhc2V0IHRvIGF1dG8tcG9wdWxhdGUgcHJvcGVydGllcyBmcm9tIGl0cyBudW1lcmljYWwgY29sdW1ucywgb3IgYWRkIHRoZW0gbWFudWFsbHkuJyk7XG4gICAgY29uc3QgYWRkQnRuID0gdWkubGluaygnKyBBZGQgUHJvcGVydHknLCAoKSA9PiB0aGlzLmFkZFByb3BlcnR5KCkpO1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHVpLmRpdlYoW2ljb24sIGhlYWRpbmcsIG1zZywgYWRkQnRuXSwgJ3N0YXRpc3RpY3MtbXBvLWVtcHR5LXN0YXRlJyk7XG4gICAgdGhpcy5yb290LmFwcGVuZChjb250YWluZXIpO1xuICB9XG5cbiAgYWRkUHJvcGVydHkoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByb2ZpbGUpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBuZXdOYW1lID0gYE5ld1Byb3BlcnR5JHtPYmplY3Qua2V5cyh0aGlzLnByb2ZpbGUucHJvcGVydGllcykubGVuZ3RoICsgMX1gO1xuICAgIGNvbnN0IG5ld1Jvd0lkID0gdGhpcy5uZXdSb3dJZCgpO1xuXG4gICAgdGhpcy5wcm9maWxlLnByb3BlcnRpZXNbbmV3TmFtZV0gPSBjcmVhdGVEZWZhdWx0TnVtZXJpY2FsKCk7XG4gICAgdGhpcy5yb3dJZHNbbmV3TmFtZV0gPSBuZXdSb3dJZDtcbiAgICB0aGlzLnByb3BlcnR5T3JkZXIucHVzaChuZXdOYW1lKTtcblxuICAgIHRoaXMucm93cyA9IHt9O1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkSGVhZGVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdWkuZGl2SChbXG4gICAgICB1aS5kaXZUZXh0KCdQcm9wZXJ0eScsICdzdGF0aXN0aWNzLW1wby1oZWFkZXItcHJvcGVydHknKSxcbiAgICAgIHVpLmRpdlRleHQoJ1dlaWdodCcsICdzdGF0aXN0aWNzLW1wby1oZWFkZXItd2VpZ2h0JyksXG4gICAgICB1aS5kaXZUZXh0KCdEZXNpcmFiaWxpdHknLCAnc3RhdGlzdGljcy1tcG8taGVhZGVyLWRlc2lyYWJpbGl0eScpLFxuICAgIF0sICdzdGF0aXN0aWNzLW1wby1oZWFkZXInKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRSb3coXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJvd0lkOiBzdHJpbmcsXG4gICAgcHJvcDogUHJvcGVydHlEZXNpcmFiaWxpdHksXG4gICk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCByb3cgPSB1aS5kaXZIKFtdLCAnc3RhdGlzdGljcy1tcG8tcm93Jyk7XG4gICAgcm93LmRhdGFzZXQucm93SWQgPSByb3dJZDtcblxuICAgIGNvbnN0IGNvbCA9IHRoaXMucmVzb2x2ZUNvbHVtbihuYW1lKTtcbiAgICBpZiAoY29sKSB7XG4gICAgICBjb25zdCBjb3JyZWN0ZWQgPSB0aGlzLmNvcnJlY3RQcm9wZXJ0eVR5cGUocHJvcCwgY29sKTtcbiAgICAgIGlmIChjb3JyZWN0ZWQpIHtcbiAgICAgICAgcHJvcCA9IGNvcnJlY3RlZDtcbiAgICAgICAgdGhpcy5wcm9maWxlIS5wcm9wZXJ0aWVzW25hbWVdID0gcHJvcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlZGl0b3IgPSBEZXNpcmFiaWxpdHlFZGl0b3JGYWN0b3J5LmNyZWF0ZShwcm9wLCAzMDAsIDgwLCB0aGlzLmRlc2lnbik7XG4gICAgZWRpdG9yLnJvb3QuY2xhc3NMaXN0LmFkZCgnc3RhdGlzdGljcy1tcG8tZWRpdG9yLWZpbGwnKTtcbiAgICB0aGlzLnJvd1N1YnMuZ2V0KHJvd0lkKT8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnJvd1N1YnMuc2V0KHJvd0lkLCBlZGl0b3Iub25DaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLmVtaXRDaGFuZ2UoKSkpO1xuXG4gICAgY29uc3QgcHJvcGVydHlDZWxsID0gdGhpcy5idWlsZFByb3BlcnR5Q2VsbChyb3dJZCwgbmFtZSk7XG4gICAgY29uc3Qgd2VpZ2h0Q2VsbCA9IHRoaXMuYnVpbGRXZWlnaHRDZWxsKHJvd0lkLCBwcm9wKTtcbiAgICBjb25zdCBjb2x1bW5DZWxsID0gdGhpcy5idWlsZENvbHVtblNlbGVjdG9yKHJvd0lkLCBuYW1lLCBlZGl0b3IpO1xuXG4gICAgY29uc3QgbW9kZUdlYXIgPSB0aGlzLmRlc2lnbiA/XG4gICAgICB0aGlzLmJ1aWxkTW9kZUdlYXIocm93SWQsIHByb3AsIGVkaXRvcikgOlxuICAgICAgbnVsbDtcblxuICAgIGNvbnN0IGNvbnRyb2xzID0gdGhpcy5kZXNpZ24gPyB0aGlzLmJ1aWxkUm93Q29udHJvbHMocm93SWQpIDogbnVsbDtcblxuICAgIHJvdy5hcHBlbmQoXG4gICAgICB1aS5kaXZWKFtwcm9wZXJ0eUNlbGwsIGNvbHVtbkNlbGxdLmZpbHRlcihCb29sZWFuKSwgJ3N0YXRpc3RpY3MtbXBvLXByb3BlcnR5LWNlbGwnKSxcbiAgICAgIHdlaWdodENlbGwsXG4gICAgICB1aS5kaXZIKFtlZGl0b3Iucm9vdCwgbW9kZUdlYXJdLmZpbHRlcihCb29sZWFuKSksXG4gICAgKTtcblxuICAgIGlmIChjb250cm9scylcbiAgICAgIHJvdy5hcHBlbmQoY29udHJvbHMpO1xuXG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQcm9wZXJ0eUNlbGwocm93SWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAodGhpcy5kYXRhRnJhbWUpIHtcbiAgICAgIGNvbnN0IGVsID0gdWkuZGl2VGV4dChuYW1lKTtcbiAgICAgIHVpLnRvb2x0aXAuYmluZChlbCwgKCkgPT4gbmFtZSk7XG4gICAgICByZXR1cm4gZWw7XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnROYW1lID0gbmFtZTtcblxuICAgIGNvbnN0IHByb3BOYW1lSW5wID0gdWkuaW5wdXQuc3RyaW5nKCcnLCB7dmFsdWU6IG5hbWUsIG9uVmFsdWVDaGFuZ2VkOiAodikgPT4ge1xuICAgICAgaWYgKCF2IHx8IHYgPT09IGN1cnJlbnROYW1lKVxuICAgICAgICByZXR1cm47XG4gICAgICB0aGlzLnJlbmFtZVByb3BlcnR5KGN1cnJlbnROYW1lLCB2KTtcbiAgICAgIGN1cnJlbnROYW1lID0gdjtcbiAgICB9fSk7XG5cbiAgICB1aS50b29sdGlwLmJpbmQocHJvcE5hbWVJbnAuaW5wdXQsICgpID0+IGN1cnJlbnROYW1lKTtcbiAgICByZXR1cm4gcHJvcE5hbWVJbnAucm9vdDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRXZWlnaHRDZWxsKFxuICAgIHJvd0lkOiBzdHJpbmcsXG4gICAgcHJvcDogUHJvcGVydHlEZXNpcmFiaWxpdHksXG4gICk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRQcm9wZXJ0eU5hbWVCeVJvd0lkKHJvd0lkKTtcbiAgICBjb25zdCBjaGlsZHJlbjogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgY29uc3Qgd2VpZ2h0SW5wdXQgPSB1aS5pbnB1dC5mbG9hdCgnJywge3ZhbHVlOiBwcm9wLndlaWdodCwgbWluOiAwLCBtYXg6IDEsIGZvcm1hdDogJyMwLjAwMCcsXG4gICAgICBvblZhbHVlQ2hhbmdlZDogKHYpID0+IHtcbiAgICAgICAgaWYgKG5hbWUpXG4gICAgICAgICAgdGhpcy5tdXRhdGVQcm9wZXJ0eShuYW1lLCAocCkgPT4gcC53ZWlnaHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB2ID8/IDApKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIHdlaWdodElucHV0LnJvb3QuY2xhc3NMaXN0LmFkZCgnc3RhdGlzdGljcy1tcG8td2VpZ2h0LWlucHV0Jyk7XG4gICAgY2hpbGRyZW4ucHVzaCh3ZWlnaHRJbnB1dC5yb290KTtcblxuICAgIGlmICh0aGlzLmRhdGFGcmFtZSkge1xuICAgICAgY29uc3QgbnVtQ29scyA9IHRoaXMuZ2V0TnVtZXJpY2FsQ29sdW1uTmFtZXMoKTtcbiAgICAgIGxldCBpc0NvbHVtbiA9ICEhcHJvcC53ZWlnaHRDb2x1bW4gJiYgbnVtQ29scy5pbmNsdWRlcyhwcm9wLndlaWdodENvbHVtbik7XG5cbiAgICAgIGNvbnN0IGNvbElucHV0ID0gdWkuaW5wdXQuY2hvaWNlKCcnLCB7aXRlbXM6IG51bUNvbHMsIG51bGxhYmxlOiB0cnVlLCB2YWx1ZTogcHJvcC53ZWlnaHRDb2x1bW4gPz8gJycsXG4gICAgICAgIG9uVmFsdWVDaGFuZ2VkOiAodikgPT4ge1xuICAgICAgICAgIGlmIChuYW1lKVxuICAgICAgICAgICAgdGhpcy5tdXRhdGVQcm9wZXJ0eShuYW1lLCAocCkgPT4gcC53ZWlnaHRDb2x1bW4gPSB2IHx8IHVuZGVmaW5lZCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3Qgc3luY1RvZ2dsZSA9ICgpID0+IHtcbiAgICAgICAgd2VpZ2h0SW5wdXQucm9vdC5jbGFzc0xpc3QudG9nZ2xlKCdzdGF0aXN0aWNzLW1wby1oaWRkZW4nLCBpc0NvbHVtbik7XG4gICAgICAgIGNvbElucHV0LnJvb3QuY2xhc3NMaXN0LnRvZ2dsZSgnc3RhdGlzdGljcy1tcG8taGlkZGVuJywgIWlzQ29sdW1uKTtcbiAgICAgICAgdG9nZ2xlLmNsYXNzTGlzdC50b2dnbGUoJ3N0YXRpc3RpY3MtbXBvLXdlaWdodC10b2dnbGUtYWN0aXZlJywgaXNDb2x1bW4pO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgdG9nZ2xlID0gdWkuaWNvbkZBKCdleGNoYW5nZS1hbHQnLCAoKSA9PiB7XG4gICAgICAgIGlzQ29sdW1uID0gIWlzQ29sdW1uO1xuICAgICAgICBzeW5jVG9nZ2xlKCk7XG4gICAgICAgIGlmICghaXNDb2x1bW4gJiYgbmFtZSlcbiAgICAgICAgICB0aGlzLm11dGF0ZVByb3BlcnR5KG5hbWUsIChwKSA9PiB7IGRlbGV0ZSBwLndlaWdodENvbHVtbjsgfSk7XG4gICAgICAgIGVsc2UgaWYgKGlzQ29sdW1uICYmIG5hbWUgJiYgY29sSW5wdXQudmFsdWUpXG4gICAgICAgICAgdGhpcy5tdXRhdGVQcm9wZXJ0eShuYW1lLCAocCkgPT4gcC53ZWlnaHRDb2x1bW4gPSBjb2xJbnB1dC52YWx1ZSB8fCB1bmRlZmluZWQpO1xuICAgICAgfSk7XG4gICAgICB0b2dnbGUuY2xhc3NMaXN0LmFkZCgnc3RhdGlzdGljcy1tcG8td2VpZ2h0LXRvZ2dsZScpO1xuICAgICAgdWkudG9vbHRpcC5iaW5kKHRvZ2dsZSwgKCkgPT4gaXNDb2x1bW4gPyAnU3dpdGNoIHRvIG1hbnVhbCB3ZWlnaHQnIDogJ1VzZSB3ZWlnaHQgZnJvbSBjb2x1bW4nKTtcbiAgICAgIHN5bmNUb2dnbGUoKTtcblxuICAgICAgY2hpbGRyZW4ucHVzaChjb2xJbnB1dC5yb290LCB0b2dnbGUpO1xuICAgIH1cblxuICAgIHJldHVybiB1aS5kaXZIKGNoaWxkcmVuLCAnc3RhdGlzdGljcy1tcG8td2VpZ2h0LWNlbGwnKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb2x1bW5TZWxlY3RvcihcbiAgICByb3dJZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBlZGl0b3I6IERlc2lyYWJpbGl0eUVkaXRvcixcbiAgKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuZGF0YUZyYW1lKVxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0RWxpZ2libGVDb2x1bW5OYW1lcygpO1xuICAgIGNvbnN0IG1hdGNoZWQgPSB0aGlzLmNvbHVtbk1hcHBpbmdbbmFtZV0gPz8gbnVsbDtcblxuICAgIGlmIChtYXRjaGVkKSB7XG4gICAgICBjb25zdCBjb2wgPSB0aGlzLmRhdGFGcmFtZS5jb2wobWF0Y2hlZCk7XG4gICAgICBlZGl0b3Iuc2V0Q29sdW1uPy4oY29sKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dCA9IHVpLmlucHV0LmNob2ljZSgnJywge2l0ZW1zLCBudWxsYWJsZTogdHJ1ZSwgdmFsdWU6IG1hdGNoZWQgPz8gJycsIG9uVmFsdWVDaGFuZ2VkOiAodikgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5NYXBwaW5nW25hbWVdID0gdiA/PyBudWxsO1xuICAgICAgY29uc3QgY29sID0gdiA/IHRoaXMuZGF0YUZyYW1lIS5jb2wodikgOiBudWxsO1xuICAgICAgaWYgKGNvbCAmJiB0aGlzLnN3aXRjaFByb3BlcnR5VHlwZShuYW1lLCByb3dJZCwgY29sKSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgZWRpdG9yLnNldENvbHVtbj8uKGNvbCk7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9fSk7XG4gICAgcmV0dXJuIGlucHV0LnJvb3Q7XG4gIH1cblxuICBwcml2YXRlIGdldEVsaWdpYmxlQ29sdW1uTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5kYXRhRnJhbWUpXG4gICAgICByZXR1cm4gW107XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5kYXRhRnJhbWUuY29sdW1ucylcbiAgICAgIC5maWx0ZXIoKGMpID0+ICFjLmlzQ2F0ZWdvcmljYWwgfHwgYy5jYXRlZ29yaWVzLmxlbmd0aCA8PSBNQVhfQ0FURUdPUklDQUxfQ0FURUdPUklFUylcbiAgICAgIC5tYXAoKGMpID0+IGMubmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGdldE51bWVyaWNhbENvbHVtbk5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuZGF0YUZyYW1lKVxuICAgICAgcmV0dXJuIFtdO1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZGF0YUZyYW1lLmNvbHVtbnMubnVtZXJpY2FsKS5tYXAoKGMpID0+IGMubmFtZSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVDb2x1bW4obmFtZTogc3RyaW5nKTogREcuQ29sdW1uIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmRhdGFGcmFtZSlcbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNvbnN0IGVsaWdpYmxlID0gdGhpcy5nZXRFbGlnaWJsZUNvbHVtbk5hbWVzKCk7XG4gICAgY29uc3QgY29sTmFtZSA9IHRoaXMuY29sdW1uTWFwcGluZ1tuYW1lXSA/PyBlbGlnaWJsZS5maW5kKChjKSA9PiBjLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKSkgPz8gbnVsbDtcbiAgICBpZiAoY29sTmFtZSlcbiAgICAgIHRoaXMuY29sdW1uTWFwcGluZ1tuYW1lXSA9IGNvbE5hbWU7XG4gICAgcmV0dXJuIGNvbE5hbWUgPyB0aGlzLmRhdGFGcmFtZS5jb2woY29sTmFtZSkgPz8gbnVsbCA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNvcnJlY3RQcm9wZXJ0eVR5cGUocHJvcDogUHJvcGVydHlEZXNpcmFiaWxpdHksIGNvbDogREcuQ29sdW1uKTogUHJvcGVydHlEZXNpcmFiaWxpdHkgfCBudWxsIHtcbiAgICBpZiAoaXNOdW1lcmljYWwocHJvcCkgJiYgY29sLmlzQ2F0ZWdvcmljYWwpIHtcbiAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBjb2wuY2F0ZWdvcmllcy5tYXAoKGM6IHN0cmluZykgPT4gKHtuYW1lOiBjLCBkZXNpcmFiaWxpdHk6IDF9KSk7XG4gICAgICByZXR1cm4gY3JlYXRlRGVmYXVsdENhdGVnb3JpY2FsKHByb3Aud2VpZ2h0LCBjYXRlZ29yaWVzKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTnVtZXJpY2FsKHByb3ApICYmIGNvbC5pc051bWVyaWNhbClcbiAgICAgIHJldHVybiBjcmVhdGVEZWZhdWx0TnVtZXJpY2FsKHByb3Aud2VpZ2h0LCBjb2wubWluLCBjb2wubWF4KTtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzd2l0Y2hQcm9wZXJ0eVR5cGUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJvd0lkOiBzdHJpbmcsXG4gICAgY29sOiBERy5Db2x1bW4sXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5wcm9maWxlKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgY29ycmVjdGVkID0gdGhpcy5jb3JyZWN0UHJvcGVydHlUeXBlKHRoaXMucHJvZmlsZS5wcm9wZXJ0aWVzW25hbWVdLCBjb2wpO1xuICAgIGlmICghY29ycmVjdGVkKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgdGhpcy5wcm9maWxlLnByb3BlcnRpZXNbbmFtZV0gPSBjb3JyZWN0ZWQ7XG4gICAgdGhpcy5yZWJ1aWxkUm93KG5hbWUsIHJvd0lkKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVidWlsZFJvdyhuYW1lOiBzdHJpbmcsIHJvd0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvbGRSb3cgPSB0aGlzLnJvd3Nbcm93SWRdO1xuICAgIGNvbnN0IG5ld1JvdyA9IHRoaXMuYnVpbGRSb3cobmFtZSwgcm93SWQsIHRoaXMucHJvZmlsZSEucHJvcGVydGllc1tuYW1lXSk7XG4gICAgdGhpcy5yb3dzW3Jvd0lkXSA9IG5ld1JvdztcblxuICAgIGlmIChvbGRSb3c/LnBhcmVudE5vZGUpXG4gICAgICBvbGRSb3cucmVwbGFjZVdpdGgobmV3Um93KTtcblxuICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZE1vZGVHZWFyKFxuICAgIHJvd0lkOiBzdHJpbmcsXG4gICAgcHJvcDogUHJvcGVydHlEZXNpcmFiaWxpdHksXG4gICAgZWRpdG9yOiBEZXNpcmFiaWxpdHlFZGl0b3IsXG4gICk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBnZWFyID0gdWkuaWNvbnMuc2V0dGluZ3MoKCkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0UHJvcGVydHlOYW1lQnlSb3dJZChyb3dJZCk7XG4gICAgICBpZiAoIW5hbWUpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IGNvbE5hbWUgPSB0aGlzLmNvbHVtbk1hcHBpbmdbbmFtZV07XG4gICAgICBjb25zdCBjb2wgPSBjb2xOYW1lID8gdGhpcy5kYXRhRnJhbWU/LmNvbChjb2xOYW1lKSA/PyBudWxsIDogbnVsbDtcbiAgICAgIHRoaXMub3Blbk1vZGVEaWFsb2cobmFtZSwgcm93SWQsIHByb3AsIGVkaXRvciwgY29sKTtcbiAgICB9KTtcblxuICAgIGdlYXIuY2xhc3NMaXN0LmFkZCgnc3RhdGlzdGljcy1tcG8tZ2VhcicpO1xuICAgIHJldHVybiBnZWFyO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJvd0NvbnRyb2xzKHJvd0lkOiBzdHJpbmcpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgYWRkID0gdWkuaWNvbnMuYWRkKCgpID0+IHRoaXMuaW5zZXJ0Um93QWZ0ZXJSb3cocm93SWQpKTtcbiAgICBjb25zdCBkZWwgPSB1aS5pY29ucy5kZWxldGUoKCkgPT4gdGhpcy5kZWxldGVSb3cocm93SWQpKTtcbiAgICByZXR1cm4gdWkuZGl2SChbYWRkLCBkZWxdLCAnc3RhdGlzdGljcy1tcG8tY29udHJvbC1idXR0b25zJyk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Nb2RlRGlhbG9nKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICByb3dJZDogc3RyaW5nLFxuICAgIHByb3A6IFByb3BlcnR5RGVzaXJhYmlsaXR5LFxuICAgIGVkaXRvcjogRGVzaXJhYmlsaXR5RWRpdG9yLFxuICAgIG1hcHBlZENvbDogREcuQ29sdW1uIHwgbnVsbCA9IG51bGwsXG4gICk6IHZvaWQge1xuICAgIG5ldyBEZXNpcmFiaWxpdHlNb2RlRGlhbG9nKFxuICAgICAgbmFtZSxcbiAgICAgIHByb3AsXG4gICAgICAocGF0Y2gpID0+IHtcbiAgICAgICAgY29uc3QgcCA9IHRoaXMucHJvZmlsZT8ucHJvcGVydGllc1tuYW1lXTtcbiAgICAgICAgaWYgKHApXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihwLCBwYXRjaCk7XG4gICAgICAgIGVkaXRvci5yZWRyYXdBbGwoKTtcbiAgICAgIH0sXG4gICAgICAobmV3UHJvcCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMucHJvZmlsZSlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMucHJvZmlsZS5wcm9wZXJ0aWVzW25hbWVdID0gbmV3UHJvcDtcbiAgICAgICAgdGhpcy5yZWJ1aWxkUm93KG5hbWUsIHJvd0lkKTtcbiAgICAgIH0sXG4gICAgICBtYXBwZWRDb2wsXG4gICAgKS5zaG93KCk7XG4gIH1cblxuICBwcml2YXRlIGdldFByb3BlcnR5TmFtZUJ5Um93SWQocm93SWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMucm93SWRzKVxuICAgICAgLmZpbmQoKFssIGlkXSkgPT4gaWQgPT09IHJvd0lkKT8uWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5hbWVQcm9wZXJ0eShvbGROYW1lOiBzdHJpbmcsIG5ld05hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcm9maWxlIHx8IHRoaXMucHJvZmlsZS5wcm9wZXJ0aWVzW25ld05hbWVdKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3Qgcm93SWQgPSB0aGlzLnJvd0lkc1tvbGROYW1lXTtcbiAgICB0aGlzLnByb2ZpbGUucHJvcGVydGllc1tuZXdOYW1lXSA9IHRoaXMucHJvZmlsZS5wcm9wZXJ0aWVzW29sZE5hbWVdO1xuICAgIGRlbGV0ZSB0aGlzLnByb2ZpbGUucHJvcGVydGllc1tvbGROYW1lXTtcblxuICAgIHRoaXMuY29sdW1uTWFwcGluZ1tuZXdOYW1lXSA9IHRoaXMuY29sdW1uTWFwcGluZ1tvbGROYW1lXSA/PyBudWxsO1xuICAgIGRlbGV0ZSB0aGlzLmNvbHVtbk1hcHBpbmdbb2xkTmFtZV07XG5cbiAgICBjb25zdCBpZHggPSB0aGlzLnByb3BlcnR5T3JkZXIuaW5kZXhPZihvbGROYW1lKTtcbiAgICBpZiAoaWR4ID49IDApXG4gICAgICB0aGlzLnByb3BlcnR5T3JkZXJbaWR4XSA9IG5ld05hbWU7XG5cbiAgICBkZWxldGUgdGhpcy5yb3dJZHNbb2xkTmFtZV07XG4gICAgdGhpcy5yb3dJZHNbbmV3TmFtZV0gPSByb3dJZDtcblxuICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVSb3cocm93SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldFByb3BlcnR5TmFtZUJ5Um93SWQocm93SWQpO1xuICAgIGlmICghbmFtZSB8fCAhdGhpcy5wcm9maWxlKVxuICAgICAgcmV0dXJuO1xuXG4gICAgZGVsZXRlIHRoaXMucHJvZmlsZS5wcm9wZXJ0aWVzW25hbWVdO1xuICAgIGRlbGV0ZSB0aGlzLmNvbHVtbk1hcHBpbmdbbmFtZV07XG4gICAgZGVsZXRlIHRoaXMucm93SWRzW25hbWVdO1xuICAgIHRoaXMucm93U3Vicy5nZXQocm93SWQpPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucm93U3Vicy5kZWxldGUocm93SWQpO1xuXG4gICAgY29uc3QgaWR4ID0gdGhpcy5wcm9wZXJ0eU9yZGVyLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGlkeCA+PSAwKVxuICAgICAgdGhpcy5wcm9wZXJ0eU9yZGVyLnNwbGljZShpZHgsIDEpO1xuXG4gICAgY29uc3Qgcm93RWwgPSB0aGlzLnJvd3Nbcm93SWRdO1xuICAgIGRlbGV0ZSB0aGlzLnJvd3Nbcm93SWRdO1xuXG4gICAgaWYgKHRoaXMucHJvcGVydHlPcmRlci5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIGVsc2VcbiAgICAgIHJvd0VsPy5yZW1vdmUoKTtcblxuICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNlcnRSb3dBZnRlclJvdyhyb3dJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByb2ZpbGUpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCBhZnRlck5hbWUgPSB0aGlzLmdldFByb3BlcnR5TmFtZUJ5Um93SWQocm93SWQpO1xuICAgIGlmICghYWZ0ZXJOYW1lKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgbmV3TmFtZSA9IGBOZXdQcm9wZXJ0eSR7T2JqZWN0LmtleXModGhpcy5wcm9maWxlLnByb3BlcnRpZXMpLmxlbmd0aCArIDF9YDtcbiAgICBjb25zdCBuZXdSb3dJZCA9IHRoaXMubmV3Um93SWQoKTtcblxuICAgIHRoaXMucHJvZmlsZS5wcm9wZXJ0aWVzW25ld05hbWVdID0gY3JlYXRlRGVmYXVsdE51bWVyaWNhbCgpO1xuXG4gICAgdGhpcy5yb3dJZHNbbmV3TmFtZV0gPSBuZXdSb3dJZDtcblxuICAgIGNvbnN0IGlkeCA9IHRoaXMucHJvcGVydHlPcmRlci5pbmRleE9mKGFmdGVyTmFtZSk7XG4gICAgdGhpcy5wcm9wZXJ0eU9yZGVyLnNwbGljZShpZHggKyAxLCAwLCBuZXdOYW1lKTtcblxuICAgIGNvbnN0IG5ld1JvdyA9IHRoaXMuYnVpbGRSb3cobmV3TmFtZSwgbmV3Um93SWQsIHRoaXMucHJvZmlsZS5wcm9wZXJ0aWVzW25ld05hbWVdKTtcbiAgICB0aGlzLnJvd3NbbmV3Um93SWRdID0gbmV3Um93O1xuXG4gICAgdGhpcy5yb3dzW3Jvd0lkXT8uYWZ0ZXIobmV3Um93KTtcbiAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgbXV0YXRlUHJvcGVydHkoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHVwZGF0ZXI6IChwOiBQcm9wZXJ0eURlc2lyYWJpbGl0eSkgPT4gdm9pZCxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgcHJvcCA9IHRoaXMucHJvZmlsZT8ucHJvcGVydGllc1tuYW1lXTtcbiAgICBpZiAoIXByb3ApXG4gICAgICByZXR1cm47XG5cbiAgICB1cGRhdGVyKHByb3ApO1xuICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VkLm5leHQoKTtcbiAgICBncm9rLmV2ZW50cy5maXJlQ3VzdG9tRXZlbnQoTVBPX1NDT1JFX0NIQU5HRURfRVZFTlQsIHt9KTtcbiAgfVxufVxuIl19
package/src/mpo/mpo.d.ts CHANGED
@@ -42,8 +42,10 @@ export declare function createDefaultCategorical(weight?: number, categories?: {
42
42
  }[]): CategoricalDesirability;
43
43
  export declare function migrateDesirability(raw: any): PropertyDesirability;
44
44
  export declare const DESIRABILITY_PROFILE_TYPE = "MPO Desirability Profile";
45
+ export declare const CURRENT_MPO_VERSION = 1;
45
46
  export type DesirabilityProfile = {
46
47
  type: typeof DESIRABILITY_PROFILE_TYPE;
48
+ version?: number;
47
49
  name: string;
48
50
  description: string;
49
51
  aggregation?: WeightedAggregation;
@@ -52,6 +54,7 @@ export type DesirabilityProfile = {
52
54
  };
53
55
  };
54
56
  export declare function isDesirabilityProfile(x: any): x is DesirabilityProfile;
57
+ export declare function migrateProfile(raw: DesirabilityProfile): DesirabilityProfile;
55
58
  export declare const WEIGHTED_AGGREGATIONS: readonly ["Average", "Sum", "Product", "Geomean", "Min", "Max"];
56
59
  export declare const WEIGHTED_AGGREGATIONS_LIST: WeightedAggregation[];
57
60
  export type WeightedAggregation = typeof WEIGHTED_AGGREGATIONS[number];
@@ -1 +1 @@
1
- {"version":3,"file":"mpo.d.ts","sourceRoot":"","sources":["mpo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mpo.d.ts","sourceRoot":"","sources":["mpo.ts"],"names":[],"mappings":"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"}
package/src/mpo/mpo.js CHANGED
@@ -18,9 +18,23 @@ export function migrateDesirability(raw) {
18
18
  return { ...raw, functionType: 'numerical' };
19
19
  }
20
20
  export const DESIRABILITY_PROFILE_TYPE = 'MPO Desirability Profile';
21
+ export const CURRENT_MPO_VERSION = 1;
21
22
  export function isDesirabilityProfile(x) {
22
23
  return x != null && typeof x === 'object' && x.type === DESIRABILITY_PROFILE_TYPE;
23
24
  }
25
+ export function migrateProfile(raw) {
26
+ var _a;
27
+ const version = (_a = raw.version) !== null && _a !== void 0 ? _a : 0;
28
+ if (version >= CURRENT_MPO_VERSION)
29
+ return raw;
30
+ // v0 → v1: backfill functionType on properties
31
+ if (version < 1) {
32
+ for (const key in raw.properties)
33
+ raw.properties[key] = migrateDesirability(raw.properties[key]);
34
+ raw.version = CURRENT_MPO_VERSION;
35
+ }
36
+ return raw;
37
+ }
24
38
  export const WEIGHTED_AGGREGATIONS = ['Average', 'Sum', 'Product', 'Geomean', 'Min', 'Max'];
25
39
  export const WEIGHTED_AGGREGATIONS_LIST = [...WEIGHTED_AGGREGATIONS];
26
40
  export const DEFAULT_AGGREGATION = 'Average';
@@ -125,4 +139,4 @@ export function aggregate(scores, weights, aggregation) {
125
139
  throw new Error(`Unknown aggregation type: ${aggregation}`);
126
140
  }
127
141
  }
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyw0QkFBNEI7QUFDNUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQTZDdEMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxDQUF1QjtJQUNqRCxPQUFPLENBQUMsQ0FBQyxZQUFZLEtBQUssV0FBVyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBQyxDQUFDO0FBQ25GLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLE1BQU0sR0FBRyxDQUFDLEVBQ1YsVUFBbUQ7SUFFbkQsT0FBTyxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLGFBQVYsVUFBVSxjQUFWLFVBQVUsR0FBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDO0FBQ2xILENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBUTtJQUMxQyxJQUFJLEdBQUcsQ0FBQyxZQUFZO1FBQ2xCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsSUFBSSxHQUFHLENBQUMsVUFBVTtRQUNoQixPQUFPLEVBQUMsR0FBRyxHQUFHLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBQyxDQUFDO0lBQy9DLE9BQU8sRUFBQyxHQUFHLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sQ0FBQyxN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Q29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBndWFyZC1mb3ItaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbi8vLyBBbiBhcnJheSBvZiBbeCwgeV0gcG9pbnRzIHJlcHJlc2VudGluZyB0aGUgZGVzaXJhYmlsaXR5IGxpbmVcbi8vLyBbeCwgeV0gcGFpcnMgYXJlIHNvcnRlZCBieSB4IGluIGFzY2VuZGluZyBvcmRlclxuZXhwb3J0IHR5cGUgRGVzaXJhYmlsaXR5TGluZSA9IG51bWJlcltdW107XG5cbmV4cG9ydCB0eXBlIERlc2lyYWJpbGl0eU1vZGUgPSAnZnJlZWZvcm0nIHwgJ2dhdXNzaWFuJyB8ICdzaWdtb2lkJztcblxuZXhwb3J0IHR5cGUgTWlzc2luZ1ZhbHVlQ29uZmlnID1cbiAgfCB7IHN0cmF0ZWd5OiAnZXhjbHVkZScgfVxuICB8IHsgc3RyYXRlZ3k6ICdkZWZhdWx0Jzsgc2NvcmU6IG51bWJlciB9XG4gIHwgeyBzdHJhdGVneTogJ3NraXAnIH07XG5cbnR5cGUgQmFzZVByb3BlcnR5RGVzaXJhYmlsaXR5ID0ge1xuICB3ZWlnaHQ6IG51bWJlcjsgLy8vIDAtMVxuICB3ZWlnaHRDb2x1bW4/OiBzdHJpbmc7IC8vLyBvcHRpb25hbCBjb2x1bW4gbmFtZSB0byByZWFkIHBlci1yb3cgd2VpZ2h0cyBmcm9tICgwLTEpXG4gIG1pc3NpbmdWYWx1ZXM/OiBNaXNzaW5nVmFsdWVDb25maWc7XG59XG5cbmV4cG9ydCB0eXBlIE51bWVyaWNhbERlc2lyYWJpbGl0eSA9IEJhc2VQcm9wZXJ0eURlc2lyYWJpbGl0eSAmIHtcbiAgZnVuY3Rpb25UeXBlOiAnbnVtZXJpY2FsJztcbiAgbGluZTogRGVzaXJhYmlsaXR5TGluZTtcbiAgbWluPzogbnVtYmVyOyAvLy8gbWluIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSAob3B0aW9uYWw7IHVzZWQgZm9yIGVkaXRpbmcgdGhlIGxpbmUpXG4gIG1heD86IG51bWJlcjsgLy8vIG1heCB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgKG9wdGlvbmFsOyB1c2VkIGZvciBlZGl0aW5nIHRoZSBsaW5lKVxuXG4gIG1vZGU/OiBEZXNpcmFiaWxpdHlNb2RlO1xuXG4gIC8vLyBHYXVzc2lhbiBtb2RlIHBhcmFtZXRlcnNcbiAgbWVhbj86IG51bWJlcjtcbiAgc2lnbWE/OiBudW1iZXI7XG5cbiAgLy8vIFNpZ21vaWQgbW9kZSBwYXJhbWV0ZXJzXG4gIHgwPzogbnVtYmVyO1xuICBrPzogbnVtYmVyO1xuXG4gIGZyZWVmb3JtTGluZT86IERlc2lyYWJpbGl0eUxpbmU7XG59XG5cbmV4cG9ydCB0eXBlIENhdGVnb3JpY2FsRGVzaXJhYmlsaXR5ID0gQmFzZVByb3BlcnR5RGVzaXJhYmlsaXR5ICYge1xuICBmdW5jdGlvblR5cGU6ICdjYXRlZ29yaWNhbCc7XG4gIGNhdGVnb3JpZXM6IHsgbmFtZTogc3RyaW5nOyBkZXNpcmFiaWxpdHk6IG51bWJlciB9W107XG59XG5cbmV4cG9ydCB0eXBlIFByb3BlcnR5RGVzaXJhYmlsaXR5ID0gTnVtZXJpY2FsRGVzaXJhYmlsaXR5IHwgQ2F0ZWdvcmljYWxEZXNpcmFiaWxpdHk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc051bWVyaWNhbChwOiBQcm9wZXJ0eURlc2lyYWJpbGl0eSk6IHAgaXMgTnVtZXJpY2FsRGVzaXJhYmlsaXR5IHtcbiAgcmV0dXJuIHAuZnVuY3Rpb25UeXBlID09PSAnbnVtZXJpY2FsJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHROdW1lcmljYWwod2VpZ2h0ID0gMSwgbWluID0gMCwgbWF4ID0gMSk6IE51bWVyaWNhbERlc2lyYWJpbGl0eSB7XG4gIHJldHVybiB7ZnVuY3Rpb25UeXBlOiAnbnVtZXJpY2FsJywgd2VpZ2h0LCBtb2RlOiAnZnJlZWZvcm0nLCBtaW4sIG1heCwgbGluZTogW119O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdENhdGVnb3JpY2FsKFxuICB3ZWlnaHQgPSAxLFxuICBjYXRlZ29yaWVzPzoge25hbWU6IHN0cmluZzsgZGVzaXJhYmlsaXR5OiBudW1iZXJ9W10sXG4pOiBDYXRlZ29yaWNhbERlc2lyYWJpbGl0eSB7XG4gIHJldHVybiB7ZnVuY3Rpb25UeXBlOiAnY2F0ZWdvcmljYWwnLCB3ZWlnaHQsIGNhdGVnb3JpZXM6IGNhdGVnb3JpZXMgPz8gW3tuYW1lOiAnQ2F0ZWdvcnkgMScsIGRlc2lyYWJpbGl0eTogMX1dfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1pZ3JhdGVEZXNpcmFiaWxpdHkocmF3OiBhbnkpOiBQcm9wZXJ0eURlc2lyYWJpbGl0eSB7XG4gIGlmIChyYXcuZnVuY3Rpb25UeXBlKVxuICAgIHJldHVybiByYXc7XG4gIGlmIChyYXcuY2F0ZWdvcmllcylcbiAgICByZXR1cm4gey4uLnJhdywgZnVuY3Rpb25UeXBlOiAnY2F0ZWdvcmljYWwnfTtcbiAgcmV0dXJuIHsuLi5yYXcsIGZ1bmN0aW9uVHlwZTogJ251bWVyaWNhbCd9O1xufVxuXG5leHBvcnQgY29uc3QgREVTSVJBQklMSVRZX1BST0ZJTEVfVFlQRSA9ICdNUE8gRGVzaXJhYmlsaXR5IFByb2ZpbGUnO1xuXG4vLy8gQSBtYXAgb2YgZGVzaXJhYmlsaXR5IGxpbmVzIHdpdGggdGhlaXIgd2VpZ2h0c1xuZXhwb3J0IHR5cGUgRGVzaXJhYmlsaXR5UHJvZmlsZSA9IHtcbiAgdHlwZTogdHlwZW9mIERFU0lSQUJJTElUWV9QUk9GSUxFX1RZUEU7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgYWdncmVnYXRpb24/OiBXZWlnaHRlZEFnZ3JlZ2F0aW9uO1xuICBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IFByb3BlcnR5RGVzaXJhYmlsaXR5IH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Rlc2lyYWJpbGl0eVByb2ZpbGUoeDogYW55KTogeCBpcyBEZXNpcmFiaWxpdHlQcm9maWxlIHtcbiAgcmV0dXJuIHggIT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgeC50eXBlID09PSBERVNJUkFCSUxJVFlfUFJPRklMRV9UWVBFO1xufVxuXG5leHBvcnQgY29uc3QgV0VJR0hURURfQUdHUkVHQVRJT05TID0gWydBdmVyYWdlJywgJ1N1bScsICdQcm9kdWN0JywgJ0dlb21lYW4nLCAnTWluJywgJ01heCddIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IFdFSUdIVEVEX0FHR1JFR0FUSU9OU19MSVNUOiBXZWlnaHRlZEFnZ3JlZ2F0aW9uW10gPSBbLi4uV0VJR0hURURfQUdHUkVHQVRJT05TXTtcbmV4cG9ydCB0eXBlIFdlaWdodGVkQWdncmVnYXRpb24gPSB0eXBlb2YgV0VJR0hURURfQUdHUkVHQVRJT05TW251bWJlcl07XG5leHBvcnQgY29uc3QgREVGQVVMVF9BR0dSRUdBVElPTjogV2VpZ2h0ZWRBZ2dyZWdhdGlvbiA9ICdBdmVyYWdlJztcblxuLy8vIENhbGN1bGF0ZXMgdGhlIGRlc2lyYWJpbGl0eSBzY29yZSBmb3IgYSBnaXZlbiB4IHZhbHVlXG4vLy8gUmV0dXJucyAwIGlmIHggaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgdGhlIGRlc2lyYWJpbGl0eSBsaW5lXG4vLy8gT3RoZXJ3aXNlLCByZXR1cm5zIHRoZSB5IHZhbHVlIG9mIHRoZSBkZXNpcmFiaWxpdHkgbGluZSBhdCB4XG5leHBvcnQgZnVuY3Rpb24gZGVzaXJhYmlsaXR5U2NvcmUoeDogbnVtYmVyLCBkZXNpcmFiaWxpdHlMaW5lOiBEZXNpcmFiaWxpdHlMaW5lKTogbnVtYmVyIHtcbiAgLy8gSWYgdGhlIGxpbmUgaXMgZW1wdHkgb3IgeCBpcyBvdXRzaWRlIHRoZSByYW5nZSwgcmV0dXJuIDBcbiAgaWYgKGRlc2lyYWJpbGl0eUxpbmUubGVuZ3RoID09PSAwIHx8IHggPCBkZXNpcmFiaWxpdHlMaW5lWzBdWzBdIHx8IHggPiBkZXNpcmFiaWxpdHlMaW5lW2Rlc2lyYWJpbGl0eUxpbmUubGVuZ3RoIC0gMV1bMF0pXG4gICAgcmV0dXJuIDA7XG5cbiAgLy8gRmluZCB0aGUgdHdvIHBvaW50cyB0aGF0IHggbGllcyBiZXR3ZWVuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVzaXJhYmlsaXR5TGluZS5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBbeDEsIHkxXSA9IGRlc2lyYWJpbGl0eUxpbmVbaV07XG4gICAgY29uc3QgW3gyLCB5Ml0gPSBkZXNpcmFiaWxpdHlMaW5lW2kgKyAxXTtcblxuICAgIGlmICh4ID49IHgxICYmIHggPD0geDIpIHtcbiAgICAgIC8vIExpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gdGhlIHR3byBwb2ludHNcbiAgICAgIGlmICh4MSA9PT0geDIpIHJldHVybiB5MTtcbiAgICAgIGNvbnN0IHNsb3BlID0gKHkyIC0geTEpIC8gKHgyIC0geDEpO1xuICAgICAgcmV0dXJuIHkxICsgc2xvcGUgKiAoeCAtIHgxKTtcbiAgICB9XG4gIH1cblxuICAvLyBTaG91bGQgbm90IGhhcHBlbiBpZiB4IGlzIHdpdGhpbiBib3VuZHMsIGJ1dCByZXR1cm4gMCBhcyBmYWxsYmFja1xuICByZXR1cm4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhdGVnb3JpY2FsRGVzaXJhYmlsaXR5U2NvcmUoXG4gIHZhbHVlOiBzdHJpbmcsXG4gIHByb3A6IENhdGVnb3JpY2FsRGVzaXJhYmlsaXR5LFxuKTogbnVtYmVyIHwgbnVsbCB7XG4gIGNvbnN0IGZvdW5kID0gcHJvcC5jYXRlZ29yaWVzLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gdmFsdWUpO1xuICByZXR1cm4gZm91bmQ/LmRlc2lyYWJpbGl0eSA/PyBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBNcG9SZXN1bHQgPSB7XG4gIHNjb3JlQ29sdW1uOiBERy5Db2x1bW47XG4gIGRlc2lyYWJpbGl0eUNvbHVtbnM/OiBERy5Db2x1bW5bXTtcbn1cblxuLyoqIENhbGN1bGF0ZXMgdGhlIG11bHRpIHBhcmFtZXRlciBvcHRpbWl6YXRpb24gc2NvcmUsIDAtMTAwLCAxMDAgaXMgdGhlIG1heGltdW0gKi9cbmV4cG9ydCBmdW5jdGlvbiBtcG8oXG4gIGRhdGFGcmFtZTogREcuRGF0YUZyYW1lLFxuICBjb2x1bW5zOiBERy5Db2x1bW5bXSxcbiAgcHJvZmlsZU5hbWU6IHN0cmluZyxcbiAgYWdncmVnYXRpb246IFdlaWdodGVkQWdncmVnYXRpb24sXG4gIGlzRGlmZmVyZW50OiBib29sZWFuID0gZmFsc2UsXG4gIGNyZWF0ZURlc2lyYWJpbGl0eUNvbHVtbnM6IGJvb2xlYW4gPSBmYWxzZSxcbik6IE1wb1Jlc3VsdCB7XG4gIGlmIChjb2x1bW5zLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbHVtbnMgcHJvdmlkZWQgZm9yIE1QTyBjYWxjdWxhdGlvbi4nKTtcblxuICBjb25zdCByb3dDb3VudCA9IGNvbHVtbnNbMF0ubGVuZ3RoO1xuICBjb25zdCByZXN1bHRDb2x1bW4gPSBpc0RpZmZlcmVudCA/XG4gICAgREcuQ29sdW1uLmZsb2F0KHByb2ZpbGVOYW1lLCByb3dDb3VudCkgOlxuICAgIChkYXRhRnJhbWUuY29sKHByb2ZpbGVOYW1lKSA/PyBERy5Db2x1bW4uZmxvYXQocHJvZmlsZU5hbWUsIHJvd0NvdW50KSk7XG5cbiAgY29uc3QgZGVzaXJhYmlsaXR5VGVtcGxhdGVzOiBQcm9wZXJ0eURlc2lyYWJpbGl0eVtdID0gW107XG4gIGNvbnN0IHdlaWdodENvbHVtbnM6IChERy5Db2x1bW4gfCBudWxsKVtdID0gW107XG4gIGZvciAoY29uc3QgY29sdW1uIG9mIGNvbHVtbnMpIHtcbiAgICBjb25zdCB0YWcgPSBjb2x1bW4uZ2V0VGFnKCdkZXNpcmFiaWxpdHlUZW1wbGF0ZScpO1xuICAgIGNvbnN0IGQgPSBtaWdyYXRlRGVzaXJhYmlsaXR5KEpTT04ucGFyc2UodGFnKSk7XG4gICAgZGVzaXJhYmlsaXR5VGVtcGxhdGVzLnB1c2goZCk7XG4gICAgd2VpZ2h0Q29sdW1ucy5wdXNoKGQud2VpZ2h0Q29sdW1uID8gZGF0YUZyYW1lLmNvbChkLndlaWdodENvbHVtbikgPz8gbnVsbCA6IG51bGwpO1xuICB9XG5cbiAgY29uc3QgZGVzaXJhYmlsaXR5Q29sdW1ucyA9IGNyZWF0ZURlc2lyYWJpbGl0eUNvbHVtbnMgP1xuICAgIGNvbHVtbnMubWFwKChjb2wpID0+IERHLkNvbHVtbi5mbG9hdChgJHtjb2wubmFtZX0gKCR7cHJvZmlsZU5hbWV9IGRlc2lyYWJpbGl0eSlgLCByb3dDb3VudCkpIDogdW5kZWZpbmVkO1xuXG4gIHJlc3VsdENvbHVtbi5pbml0KChpKSA9PiB7XG4gICAgY29uc3Qgc2NvcmVzOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IHdlaWdodHM6IG51bWJlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbHVtbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGNvbnN0IGRlc2lyYWJpbGl0eSA9IGRlc2lyYWJpbGl0eVRlbXBsYXRlc1tqXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29sdW1uc1tqXS5nZXQoaSk7XG5cbiAgICAgIGxldCBzY29yZTogbnVtYmVyIHwgbnVsbDtcblxuICAgICAgaWYgKGNvbHVtbnNbal0uaXNOb25lKGkpKSB7XG4gICAgICAgIGNvbnN0IG12ID0gZGVzaXJhYmlsaXR5Lm1pc3NpbmdWYWx1ZXM7XG4gICAgICAgIGlmICghbXYgfHwgbXYuc3RyYXRlZ3kgPT09ICdleGNsdWRlJylcbiAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICBpZiAobXYuc3RyYXRlZ3kgPT09ICdza2lwJylcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgc2NvcmUgPSBtdi5zY29yZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzY29yZSA9IGlzTnVtZXJpY2FsKGRlc2lyYWJpbGl0eSkgP1xuICAgICAgICAgIGRlc2lyYWJpbGl0eVNjb3JlKHZhbHVlLCBkZXNpcmFiaWxpdHkubGluZSkgOlxuICAgICAgICAgIGNhdGVnb3JpY2FsRGVzaXJhYmlsaXR5U2NvcmUoU3RyaW5nKHZhbHVlKSwgZGVzaXJhYmlsaXR5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjb3JlID09PSBudWxsKVxuICAgICAgICByZXR1cm4gTmFOO1xuXG4gICAgICBpZiAoY3JlYXRlRGVzaXJhYmlsaXR5Q29sdW1ucylcbiAgICAgICAgZGVzaXJhYmlsaXR5Q29sdW1ucyFbal0uc2V0KGksIHNjb3JlLCBmYWxzZSk7XG5cbiAgICAgIHNjb3Jlcy5wdXNoKHNjb3JlKTtcbiAgICAgIGNvbnN0IHdDb2wgPSB3ZWlnaHRDb2x1bW5zW2pdO1xuICAgICAgY29uc3QgdyA9IHdDb2wgJiYgIXdDb2wuaXNOb25lKGkpID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgd0NvbC5nZXQoaSkpKSA6IGRlc2lyYWJpbGl0eS53ZWlnaHQ7XG4gICAgICB3ZWlnaHRzLnB1c2godyk7XG4gICAgfVxuXG4gICAgaWYgKHNjb3Jlcy5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gTmFOO1xuXG4gICAgcmV0dXJuIGFnZ3JlZ2F0ZShzY29yZXMsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtzY29yZUNvbHVtbjogcmVzdWx0Q29sdW1uLCBkZXNpcmFiaWxpdHlDb2x1bW5zfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFnZ3JlZ2F0ZShzY29yZXM6IG51bWJlcltdLCB3ZWlnaHRzOiBudW1iZXJbXSwgYWdncmVnYXRpb246IFdlaWdodGVkQWdncmVnYXRpb24pOiBudW1iZXIge1xuICBzd2l0Y2ggKGFnZ3JlZ2F0aW9uKSB7XG4gIGNhc2UgJ1N1bSc6XG4gICAgcmV0dXJuIHNjb3Jlcy5yZWR1Y2UoKHN1bSwgcywgaWR4KSA9PiBzdW0gKyBzICogd2VpZ2h0c1tpZHhdLCAwKTtcblxuICBjYXNlICdBdmVyYWdlJzpcbiAgICBjb25zdCB0b3RhbFdlaWdodCA9IHdlaWdodHMucmVkdWNlKChzdW0sIHcpID0+IHN1bSArIHcsIDApO1xuICAgIHJldHVybiBzY29yZXMucmVkdWNlKChzdW0sIHMsIGlkeCkgPT4gc3VtICsgcyAqIHdlaWdodHNbaWR4XSwgMCkgLyB0b3RhbFdlaWdodDtcblxuICBjYXNlICdQcm9kdWN0JzpcbiAgICByZXR1cm4gc2NvcmVzLnJlZHVjZSgocHJvZCwgcywgaWR4KSA9PiBwcm9kICogTWF0aC5wb3cocywgd2VpZ2h0c1tpZHhdKSwgMSk7XG5cbiAgY2FzZSAnR2VvbWVhbic6XG4gICAgY29uc3QgdG90YWxXID0gd2VpZ2h0cy5yZWR1Y2UoKHN1bSwgdykgPT4gc3VtICsgdywgMCk7XG4gICAgcmV0dXJuIHNjb3Jlcy5yZWR1Y2UoKHByb2QsIHMsIGlkeCkgPT4gcHJvZCAqIE1hdGgucG93KHMsIHdlaWdodHNbaWR4XSAvIHRvdGFsVyksIDEpO1xuXG4gIGNhc2UgJ01pbic6XG4gICAgcmV0dXJuIE1hdGgubWluKC4uLnNjb3Jlcy5tYXAoKHMsIGlkeCkgPT4gTWF0aC5wb3cocywgd2VpZ2h0c1tpZHhdKSkpO1xuXG4gIGNhc2UgJ01heCc6XG4gICAgcmV0dXJuIE1hdGgubWF4KC4uLnNjb3Jlcy5tYXAoKHMsIGlkeCkgPT4gTWF0aC5wb3cocywgd2VpZ2h0c1tpZHhdKSkpO1xuXG4gIGRlZmF1bHQ6XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFnZ3JlZ2F0aW9uIHR5cGU6ICR7YWdncmVnYXRpb259YCk7XG4gIH1cbn1cbiJdfQ==
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXBvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibXBvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlDQUFpQztBQUNqQyw0QkFBNEI7QUFDNUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQTZDdEMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxDQUF1QjtJQUNqRCxPQUFPLENBQUMsQ0FBQyxZQUFZLEtBQUssV0FBVyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0lBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBQyxDQUFDO0FBQ25GLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLE1BQU0sR0FBRyxDQUFDLEVBQ1YsVUFBbUQ7SUFFbkQsT0FBTyxFQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLGFBQVYsVUFBVSxjQUFWLFVBQVUsR0FBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDO0FBQ2xILENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBUTtJQUMxQyxJQUFJLEdBQUcsQ0FBQyxZQUFZO1FBQ2xCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsSUFBSSxHQUFHLENBQUMsVUFBVTtRQUNoQixPQUFPLEVBQUMsR0FBRyxHQUFHLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBQyxDQUFDO0lBQy9DLE9BQU8sRUFBQyxHQUFHLEdBQUcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sQ0FBQyxN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RixLQUFLLEtBQUs7WUFDUixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXhFLEtBQUssS0FBSztZQUNSLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFeEU7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixXQUFXLEVBQUUsQ0FBQyxDQUFDO0tBQzdEO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGd1YXJkLWZvci1pbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcblxuLy8vIEFuIGFycmF5IG9mIFt4LCB5XSBwb2ludHMgcmVwcmVzZW50aW5nIHRoZSBkZXNpcmFiaWxpdHkgbGluZVxuLy8vIFt4LCB5XSBwYWlycyBhcmUgc29ydGVkIGJ5IHggaW4gYXNjZW5kaW5nIG9yZGVyXG5leHBvcnQgdHlwZSBEZXNpcmFiaWxpdHlMaW5lID0gbnVtYmVyW11bXTtcblxuZXhwb3J0IHR5cGUgRGVzaXJhYmlsaXR5TW9kZSA9ICdmcmVlZm9ybScgfCAnZ2F1c3NpYW4nIHwgJ3NpZ21vaWQnO1xuXG5leHBvcnQgdHlwZSBNaXNzaW5nVmFsdWVDb25maWcgPVxuICB8IHsgc3RyYXRlZ3k6ICdleGNsdWRlJyB9XG4gIHwgeyBzdHJhdGVneTogJ2RlZmF1bHQnOyBzY29yZTogbnVtYmVyIH1cbiAgfCB7IHN0cmF0ZWd5OiAnc2tpcCcgfTtcblxudHlwZSBCYXNlUHJvcGVydHlEZXNpcmFiaWxpdHkgPSB7XG4gIHdlaWdodDogbnVtYmVyOyAvLy8gMC0xXG4gIHdlaWdodENvbHVtbj86IHN0cmluZzsgLy8vIG9wdGlvbmFsIGNvbHVtbiBuYW1lIHRvIHJlYWQgcGVyLXJvdyB3ZWlnaHRzIGZyb20gKDAtMSlcbiAgbWlzc2luZ1ZhbHVlcz86IE1pc3NpbmdWYWx1ZUNvbmZpZztcbn1cblxuZXhwb3J0IHR5cGUgTnVtZXJpY2FsRGVzaXJhYmlsaXR5ID0gQmFzZVByb3BlcnR5RGVzaXJhYmlsaXR5ICYge1xuICBmdW5jdGlvblR5cGU6ICdudW1lcmljYWwnO1xuICBsaW5lOiBEZXNpcmFiaWxpdHlMaW5lO1xuICBtaW4/OiBudW1iZXI7IC8vLyBtaW4gdmFsdWUgb2YgdGhlIHByb3BlcnR5IChvcHRpb25hbDsgdXNlZCBmb3IgZWRpdGluZyB0aGUgbGluZSlcbiAgbWF4PzogbnVtYmVyOyAvLy8gbWF4IHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSAob3B0aW9uYWw7IHVzZWQgZm9yIGVkaXRpbmcgdGhlIGxpbmUpXG5cbiAgbW9kZT86IERlc2lyYWJpbGl0eU1vZGU7XG5cbiAgLy8vIEdhdXNzaWFuIG1vZGUgcGFyYW1ldGVyc1xuICBtZWFuPzogbnVtYmVyO1xuICBzaWdtYT86IG51bWJlcjtcblxuICAvLy8gU2lnbW9pZCBtb2RlIHBhcmFtZXRlcnNcbiAgeDA/OiBudW1iZXI7XG4gIGs/OiBudW1iZXI7XG5cbiAgZnJlZWZvcm1MaW5lPzogRGVzaXJhYmlsaXR5TGluZTtcbn1cblxuZXhwb3J0IHR5cGUgQ2F0ZWdvcmljYWxEZXNpcmFiaWxpdHkgPSBCYXNlUHJvcGVydHlEZXNpcmFiaWxpdHkgJiB7XG4gIGZ1bmN0aW9uVHlwZTogJ2NhdGVnb3JpY2FsJztcbiAgY2F0ZWdvcmllczogeyBuYW1lOiBzdHJpbmc7IGRlc2lyYWJpbGl0eTogbnVtYmVyIH1bXTtcbn1cblxuZXhwb3J0IHR5cGUgUHJvcGVydHlEZXNpcmFiaWxpdHkgPSBOdW1lcmljYWxEZXNpcmFiaWxpdHkgfCBDYXRlZ29yaWNhbERlc2lyYWJpbGl0eTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtZXJpY2FsKHA6IFByb3BlcnR5RGVzaXJhYmlsaXR5KTogcCBpcyBOdW1lcmljYWxEZXNpcmFiaWxpdHkge1xuICByZXR1cm4gcC5mdW5jdGlvblR5cGUgPT09ICdudW1lcmljYWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdE51bWVyaWNhbCh3ZWlnaHQgPSAxLCBtaW4gPSAwLCBtYXggPSAxKTogTnVtZXJpY2FsRGVzaXJhYmlsaXR5IHtcbiAgcmV0dXJuIHtmdW5jdGlvblR5cGU6ICdudW1lcmljYWwnLCB3ZWlnaHQsIG1vZGU6ICdmcmVlZm9ybScsIG1pbiwgbWF4LCBsaW5lOiBbXX07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0Q2F0ZWdvcmljYWwoXG4gIHdlaWdodCA9IDEsXG4gIGNhdGVnb3JpZXM/OiB7bmFtZTogc3RyaW5nOyBkZXNpcmFiaWxpdHk6IG51bWJlcn1bXSxcbik6IENhdGVnb3JpY2FsRGVzaXJhYmlsaXR5IHtcbiAgcmV0dXJuIHtmdW5jdGlvblR5cGU6ICdjYXRlZ29yaWNhbCcsIHdlaWdodCwgY2F0ZWdvcmllczogY2F0ZWdvcmllcyA/PyBbe25hbWU6ICdDYXRlZ29yeSAxJywgZGVzaXJhYmlsaXR5OiAxfV19O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWlncmF0ZURlc2lyYWJpbGl0eShyYXc6IGFueSk6IFByb3BlcnR5RGVzaXJhYmlsaXR5IHtcbiAgaWYgKHJhdy5mdW5jdGlvblR5cGUpXG4gICAgcmV0dXJuIHJhdztcbiAgaWYgKHJhdy5jYXRlZ29yaWVzKVxuICAgIHJldHVybiB7Li4ucmF3LCBmdW5jdGlvblR5cGU6ICdjYXRlZ29yaWNhbCd9O1xuICByZXR1cm4gey4uLnJhdywgZnVuY3Rpb25UeXBlOiAnbnVtZXJpY2FsJ307XG59XG5cbmV4cG9ydCBjb25zdCBERVNJUkFCSUxJVFlfUFJPRklMRV9UWVBFID0gJ01QTyBEZXNpcmFiaWxpdHkgUHJvZmlsZSc7XG5leHBvcnQgY29uc3QgQ1VSUkVOVF9NUE9fVkVSU0lPTiA9IDE7XG5cbi8vLyBBIG1hcCBvZiBkZXNpcmFiaWxpdHkgbGluZXMgd2l0aCB0aGVpciB3ZWlnaHRzXG5leHBvcnQgdHlwZSBEZXNpcmFiaWxpdHlQcm9maWxlID0ge1xuICB0eXBlOiB0eXBlb2YgREVTSVJBQklMSVRZX1BST0ZJTEVfVFlQRTtcbiAgdmVyc2lvbj86IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBhZ2dyZWdhdGlvbj86IFdlaWdodGVkQWdncmVnYXRpb247XG4gIHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogUHJvcGVydHlEZXNpcmFiaWxpdHkgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVzaXJhYmlsaXR5UHJvZmlsZSh4OiBhbnkpOiB4IGlzIERlc2lyYWJpbGl0eVByb2ZpbGUge1xuICByZXR1cm4geCAhPSBudWxsICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4LnR5cGUgPT09IERFU0lSQUJJTElUWV9QUk9GSUxFX1RZUEU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtaWdyYXRlUHJvZmlsZShyYXc6IERlc2lyYWJpbGl0eVByb2ZpbGUpOiBEZXNpcmFiaWxpdHlQcm9maWxlIHtcbiAgY29uc3QgdmVyc2lvbiA9IHJhdy52ZXJzaW9uID8/IDA7XG4gIGlmICh2ZXJzaW9uID49IENVUlJFTlRfTVBPX1ZFUlNJT04pXG4gICAgcmV0dXJuIHJhdztcblxuICAvLyB2MCDihpIgdjE6IGJhY2tmaWxsIGZ1bmN0aW9uVHlwZSBvbiBwcm9wZXJ0aWVzXG4gIGlmICh2ZXJzaW9uIDwgMSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHJhdy5wcm9wZXJ0aWVzKVxuICAgICAgcmF3LnByb3BlcnRpZXNba2V5XSA9IG1pZ3JhdGVEZXNpcmFiaWxpdHkocmF3LnByb3BlcnRpZXNba2V5XSk7XG4gICAgcmF3LnZlcnNpb24gPSBDVVJSRU5UX01QT19WRVJTSU9OO1xuICB9XG5cbiAgcmV0dXJuIHJhdztcbn1cblxuZXhwb3J0IGNvbnN0IFdFSUdIVEVEX0FHR1JFR0FUSU9OUyA9IFsnQXZlcmFnZScsICdTdW0nLCAnUHJvZHVjdCcsICdHZW9tZWFuJywgJ01pbicsICdNYXgnXSBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBXRUlHSFRFRF9BR0dSRUdBVElPTlNfTElTVDogV2VpZ2h0ZWRBZ2dyZWdhdGlvbltdID0gWy4uLldFSUdIVEVEX0FHR1JFR0FUSU9OU107XG5leHBvcnQgdHlwZSBXZWlnaHRlZEFnZ3JlZ2F0aW9uID0gdHlwZW9mIFdFSUdIVEVEX0FHR1JFR0FUSU9OU1tudW1iZXJdO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQUdHUkVHQVRJT046IFdlaWdodGVkQWdncmVnYXRpb24gPSAnQXZlcmFnZSc7XG5cbi8vLyBDYWxjdWxhdGVzIHRoZSBkZXNpcmFiaWxpdHkgc2NvcmUgZm9yIGEgZ2l2ZW4geCB2YWx1ZVxuLy8vIFJldHVybnMgMCBpZiB4IGlzIG91dHNpZGUgdGhlIHJhbmdlIG9mIHRoZSBkZXNpcmFiaWxpdHkgbGluZVxuLy8vIE90aGVyd2lzZSwgcmV0dXJucyB0aGUgeSB2YWx1ZSBvZiB0aGUgZGVzaXJhYmlsaXR5IGxpbmUgYXQgeFxuZXhwb3J0IGZ1bmN0aW9uIGRlc2lyYWJpbGl0eVNjb3JlKHg6IG51bWJlciwgZGVzaXJhYmlsaXR5TGluZTogRGVzaXJhYmlsaXR5TGluZSk6IG51bWJlciB7XG4gIC8vIElmIHRoZSBsaW5lIGlzIGVtcHR5IG9yIHggaXMgb3V0c2lkZSB0aGUgcmFuZ2UsIHJldHVybiAwXG4gIGlmIChkZXNpcmFiaWxpdHlMaW5lLmxlbmd0aCA9PT0gMCB8fCB4IDwgZGVzaXJhYmlsaXR5TGluZVswXVswXSB8fCB4ID4gZGVzaXJhYmlsaXR5TGluZVtkZXNpcmFiaWxpdHlMaW5lLmxlbmd0aCAtIDFdWzBdKVxuICAgIHJldHVybiAwO1xuXG4gIC8vIEZpbmQgdGhlIHR3byBwb2ludHMgdGhhdCB4IGxpZXMgYmV0d2VlblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlc2lyYWJpbGl0eUxpbmUubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgY29uc3QgW3gxLCB5MV0gPSBkZXNpcmFiaWxpdHlMaW5lW2ldO1xuICAgIGNvbnN0IFt4MiwgeTJdID0gZGVzaXJhYmlsaXR5TGluZVtpICsgMV07XG5cbiAgICBpZiAoeCA+PSB4MSAmJiB4IDw9IHgyKSB7XG4gICAgICAvLyBMaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHRoZSB0d28gcG9pbnRzXG4gICAgICBpZiAoeDEgPT09IHgyKSByZXR1cm4geTE7XG4gICAgICBjb25zdCBzbG9wZSA9ICh5MiAtIHkxKSAvICh4MiAtIHgxKTtcbiAgICAgIHJldHVybiB5MSArIHNsb3BlICogKHggLSB4MSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2hvdWxkIG5vdCBoYXBwZW4gaWYgeCBpcyB3aXRoaW4gYm91bmRzLCBidXQgcmV0dXJuIDAgYXMgZmFsbGJhY2tcbiAgcmV0dXJuIDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXRlZ29yaWNhbERlc2lyYWJpbGl0eVNjb3JlKFxuICB2YWx1ZTogc3RyaW5nLFxuICBwcm9wOiBDYXRlZ29yaWNhbERlc2lyYWJpbGl0eSxcbik6IG51bWJlciB8IG51bGwge1xuICBjb25zdCBmb3VuZCA9IHByb3AuY2F0ZWdvcmllcy5maW5kKChjKSA9PiBjLm5hbWUgPT09IHZhbHVlKTtcbiAgcmV0dXJuIGZvdW5kPy5kZXNpcmFiaWxpdHkgPz8gbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgTXBvUmVzdWx0ID0ge1xuICBzY29yZUNvbHVtbjogREcuQ29sdW1uO1xuICBkZXNpcmFiaWxpdHlDb2x1bW5zPzogREcuQ29sdW1uW107XG59XG5cbi8qKiBDYWxjdWxhdGVzIHRoZSBtdWx0aSBwYXJhbWV0ZXIgb3B0aW1pemF0aW9uIHNjb3JlLCAwLTEwMCwgMTAwIGlzIHRoZSBtYXhpbXVtICovXG5leHBvcnQgZnVuY3Rpb24gbXBvKFxuICBkYXRhRnJhbWU6IERHLkRhdGFGcmFtZSxcbiAgY29sdW1uczogREcuQ29sdW1uW10sXG4gIHByb2ZpbGVOYW1lOiBzdHJpbmcsXG4gIGFnZ3JlZ2F0aW9uOiBXZWlnaHRlZEFnZ3JlZ2F0aW9uLFxuICBpc0RpZmZlcmVudDogYm9vbGVhbiA9IGZhbHNlLFxuICBjcmVhdGVEZXNpcmFiaWxpdHlDb2x1bW5zOiBib29sZWFuID0gZmFsc2UsXG4pOiBNcG9SZXN1bHQge1xuICBpZiAoY29sdW1ucy5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb2x1bW5zIHByb3ZpZGVkIGZvciBNUE8gY2FsY3VsYXRpb24uJyk7XG5cbiAgY29uc3Qgcm93Q291bnQgPSBjb2x1bW5zWzBdLmxlbmd0aDtcbiAgY29uc3QgcmVzdWx0Q29sdW1uID0gaXNEaWZmZXJlbnQgP1xuICAgIERHLkNvbHVtbi5mbG9hdChwcm9maWxlTmFtZSwgcm93Q291bnQpIDpcbiAgICAoZGF0YUZyYW1lLmNvbChwcm9maWxlTmFtZSkgPz8gREcuQ29sdW1uLmZsb2F0KHByb2ZpbGVOYW1lLCByb3dDb3VudCkpO1xuXG4gIGNvbnN0IGRlc2lyYWJpbGl0eVRlbXBsYXRlczogUHJvcGVydHlEZXNpcmFiaWxpdHlbXSA9IFtdO1xuICBjb25zdCB3ZWlnaHRDb2x1bW5zOiAoREcuQ29sdW1uIHwgbnVsbClbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgY29uc3QgdGFnID0gY29sdW1uLmdldFRhZygnZGVzaXJhYmlsaXR5VGVtcGxhdGUnKTtcbiAgICBjb25zdCBkID0gbWlncmF0ZURlc2lyYWJpbGl0eShKU09OLnBhcnNlKHRhZykpO1xuICAgIGRlc2lyYWJpbGl0eVRlbXBsYXRlcy5wdXNoKGQpO1xuICAgIHdlaWdodENvbHVtbnMucHVzaChkLndlaWdodENvbHVtbiA/IGRhdGFGcmFtZS5jb2woZC53ZWlnaHRDb2x1bW4pID8/IG51bGwgOiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IGRlc2lyYWJpbGl0eUNvbHVtbnMgPSBjcmVhdGVEZXNpcmFiaWxpdHlDb2x1bW5zID9cbiAgICBjb2x1bW5zLm1hcCgoY29sKSA9PiBERy5Db2x1bW4uZmxvYXQoYCR7Y29sLm5hbWV9ICgke3Byb2ZpbGVOYW1lfSBkZXNpcmFiaWxpdHkpYCwgcm93Q291bnQpKSA6IHVuZGVmaW5lZDtcblxuICByZXN1bHRDb2x1bW4uaW5pdCgoaSkgPT4ge1xuICAgIGNvbnN0IHNjb3JlczogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCB3ZWlnaHRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2x1bW5zLmxlbmd0aDsgaisrKSB7XG4gICAgICBjb25zdCBkZXNpcmFiaWxpdHkgPSBkZXNpcmFiaWxpdHlUZW1wbGF0ZXNbal07XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbnNbal0uZ2V0KGkpO1xuXG4gICAgICBsZXQgc2NvcmU6IG51bWJlciB8IG51bGw7XG5cbiAgICAgIGlmIChjb2x1bW5zW2pdLmlzTm9uZShpKSkge1xuICAgICAgICBjb25zdCBtdiA9IGRlc2lyYWJpbGl0eS5taXNzaW5nVmFsdWVzO1xuICAgICAgICBpZiAoIW12IHx8IG12LnN0cmF0ZWd5ID09PSAnZXhjbHVkZScpXG4gICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgaWYgKG12LnN0cmF0ZWd5ID09PSAnc2tpcCcpXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIHNjb3JlID0gbXYuc2NvcmU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2NvcmUgPSBpc051bWVyaWNhbChkZXNpcmFiaWxpdHkpID9cbiAgICAgICAgICBkZXNpcmFiaWxpdHlTY29yZSh2YWx1ZSwgZGVzaXJhYmlsaXR5LmxpbmUpIDpcbiAgICAgICAgICBjYXRlZ29yaWNhbERlc2lyYWJpbGl0eVNjb3JlKFN0cmluZyh2YWx1ZSksIGRlc2lyYWJpbGl0eSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY29yZSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIE5hTjtcblxuICAgICAgaWYgKGNyZWF0ZURlc2lyYWJpbGl0eUNvbHVtbnMpXG4gICAgICAgIGRlc2lyYWJpbGl0eUNvbHVtbnMhW2pdLnNldChpLCBzY29yZSwgZmFsc2UpO1xuXG4gICAgICBzY29yZXMucHVzaChzY29yZSk7XG4gICAgICBjb25zdCB3Q29sID0gd2VpZ2h0Q29sdW1uc1tqXTtcbiAgICAgIGNvbnN0IHcgPSB3Q29sICYmICF3Q29sLmlzTm9uZShpKSA/IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHdDb2wuZ2V0KGkpKSkgOiBkZXNpcmFiaWxpdHkud2VpZ2h0O1xuICAgICAgd2VpZ2h0cy5wdXNoKHcpO1xuICAgIH1cblxuICAgIGlmIChzY29yZXMubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIE5hTjtcblxuICAgIHJldHVybiBhZ2dyZWdhdGUoc2NvcmVzLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbik7XG4gIH0pO1xuXG4gIHJldHVybiB7c2NvcmVDb2x1bW46IHJlc3VsdENvbHVtbiwgZGVzaXJhYmlsaXR5Q29sdW1uc307XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZ2dyZWdhdGUoc2NvcmVzOiBudW1iZXJbXSwgd2VpZ2h0czogbnVtYmVyW10sIGFnZ3JlZ2F0aW9uOiBXZWlnaHRlZEFnZ3JlZ2F0aW9uKTogbnVtYmVyIHtcbiAgc3dpdGNoIChhZ2dyZWdhdGlvbikge1xuICBjYXNlICdTdW0nOlxuICAgIHJldHVybiBzY29yZXMucmVkdWNlKChzdW0sIHMsIGlkeCkgPT4gc3VtICsgcyAqIHdlaWdodHNbaWR4XSwgMCk7XG5cbiAgY2FzZSAnQXZlcmFnZSc6XG4gICAgY29uc3QgdG90YWxXZWlnaHQgPSB3ZWlnaHRzLnJlZHVjZSgoc3VtLCB3KSA9PiBzdW0gKyB3LCAwKTtcbiAgICByZXR1cm4gc2NvcmVzLnJlZHVjZSgoc3VtLCBzLCBpZHgpID0+IHN1bSArIHMgKiB3ZWlnaHRzW2lkeF0sIDApIC8gdG90YWxXZWlnaHQ7XG5cbiAgY2FzZSAnUHJvZHVjdCc6XG4gICAgcmV0dXJuIHNjb3Jlcy5yZWR1Y2UoKHByb2QsIHMsIGlkeCkgPT4gcHJvZCAqIE1hdGgucG93KHMsIHdlaWdodHNbaWR4XSksIDEpO1xuXG4gIGNhc2UgJ0dlb21lYW4nOlxuICAgIGNvbnN0IHRvdGFsVyA9IHdlaWdodHMucmVkdWNlKChzdW0sIHcpID0+IHN1bSArIHcsIDApO1xuICAgIHJldHVybiBzY29yZXMucmVkdWNlKChwcm9kLCBzLCBpZHgpID0+IHByb2QgKiBNYXRoLnBvdyhzLCB3ZWlnaHRzW2lkeF0gLyB0b3RhbFcpLCAxKTtcblxuICBjYXNlICdNaW4nOlxuICAgIHJldHVybiBNYXRoLm1pbiguLi5zY29yZXMubWFwKChzLCBpZHgpID0+IE1hdGgucG93KHMsIHdlaWdodHNbaWR4XSkpKTtcblxuICBjYXNlICdNYXgnOlxuICAgIHJldHVybiBNYXRoLm1heCguLi5zY29yZXMubWFwKChzLCBpZHgpID0+IE1hdGgucG93KHMsIHdlaWdodHNbaWR4XSkpKTtcblxuICBkZWZhdWx0OlxuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhZ2dyZWdhdGlvbiB0eXBlOiAke2FnZ3JlZ2F0aW9ufWApO1xuICB9XG59XG4iXX0=