@flowmap.gl/layers 8.0.0-alpha.23 → 8.0.0-alpha.24

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.
@@ -1 +1 @@
1
- {"version":3,"file":"FlowmapLayer.d.ts","sourceRoot":"","sources":["../src/FlowmapLayer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FlowmapLayer.d.ts","sourceRoot":"","sources":["../src/FlowmapLayer.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAC;AAE7C,OAAO,EAEL,wBAAwB,EACxB,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EAOnB,UAAU,EAGV,yBAAyB,EACzB,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EACL,uBAAuB,EACvB,UAAU,EAGX,MAAM,SAAS,CAAC;AAEjB,oBAAY,iBAAiB,CAAC,CAAC,EAAE,CAAC,IAAI;IACpC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB,YAAY,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,OAAO,CAAC,EAAE,CACR,IAAI,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,EAC/C,KAAK,EAAE,WAAW,KACf,IAAI,CAAC;IACV,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;CAC7E,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GACrC,UAAU,CAAC;AAoBb,aAAK,aAAa;IAChB,QAAQ,aAAa;IACrB,IAAI,SAAS;CACd;AAED,aAAK,yBAAyB,GAAG;IAC/B,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC;IAC7B,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,aAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC;IACzB,cAAc,EAAE,wBAAwB,CAAC;CAC1C,CAAC;AAEF,aAAK,iBAAiB,GAAG,yBAAyB,GAAG,qBAAqB,CAAC;AAE3E,aAAK,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI;IACjB,SAAS,EAAE,yBAAyB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,YAAY,EAAE,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;IACnC,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACjD,WAAW,EAAE,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;CACxD,CAAC;AAEF,oBAAY,WAAW,GAAG;IAAC,QAAQ,EAAE,UAAU,CAAA;CAAC,CAAC;AAEjD,MAAM,CAAC,OAAO,OAAO,YAAY,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,cAAc;IAC5D,MAAM,CAAC,YAAY;;;;;;;;;;;;;;;MAejB;IACF,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;gBAEZ,KAAK,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC;IA+BjD,eAAe;IAUf,cAAc,CAAC,EAAC,IAAI,EAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAoB1C,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,mBAAmB;IAI3B,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO;IAavD,WAAW,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IA6BtE,OAAO,CAAC,iBAAiB;IAmCzB,OAAO,CAAC,gBAAgB;YAQV,2BAA2B;IA4EzC,OAAO,CAAC,qBAAqB;IA6C7B,YAAY,IAAI,KAAK,CAAC,GAAG,CAAC;CAgI3B"}
@@ -30,6 +30,23 @@ import AnimatedFlowLinesLayer from './AnimatedFlowLinesLayer';
30
30
  import FlowCirclesLayer from './FlowCirclesLayer';
31
31
  import FlowLinesLayer from './FlowLinesLayer';
32
32
  import { PickingType, } from './types';
33
+ const PROPS_TO_CAUSE_LAYER_DATA_UPDATE = [
34
+ 'filter',
35
+ 'locationTotalsEnabled',
36
+ 'locationLabelsEnabled',
37
+ 'adaptiveScalesEnabled',
38
+ 'animationEnabled',
39
+ 'clusteringEnabled',
40
+ 'clusteringLevel',
41
+ 'fadeEnabled',
42
+ 'fadeOpacityEnabled',
43
+ 'clusteringAuto',
44
+ 'darkMode',
45
+ 'fadeAmount',
46
+ 'colorScheme',
47
+ 'highlightColor',
48
+ 'maxTopFlowsDisplayNum',
49
+ ];
33
50
  var HighlightType;
34
51
  (function (HighlightType) {
35
52
  HighlightType["LOCATION"] = "location";
@@ -37,10 +54,7 @@ var HighlightType;
37
54
  })(HighlightType || (HighlightType = {}));
38
55
  export default class FlowmapLayer extends CompositeLayer {
39
56
  constructor(props) {
40
- super(Object.assign(Object.assign({}, props), { dataProvider: {
41
- // To avoid deck.gl props diffing on comlink worker proxy causing an exception
42
- dataProvider: props.dataProvider,
43
- }, onHover: (info, event) => {
57
+ super(Object.assign(Object.assign({}, props), { onHover: (info, event) => {
44
58
  // TODO: if (lastHoverEventStartTimeRef > startTime) {
45
59
  // // Skipping, because this is not the latest hover event
46
60
  // return;
@@ -91,8 +105,8 @@ export default class FlowmapLayer extends CompositeLayer {
91
105
  // }
92
106
  _getOrMakeDataProvider() {
93
107
  const { data, dataProvider } = this.props;
94
- if (isFlowmapDataProvider(dataProvider === null || dataProvider === void 0 ? void 0 : dataProvider.dataProvider)) {
95
- return dataProvider.dataProvider;
108
+ if (isFlowmapDataProvider(dataProvider)) {
109
+ return dataProvider;
96
110
  }
97
111
  else if (isFlowmapData(data)) {
98
112
  const dataProvider = new LocalFlowmapDataProvider(this.props);
@@ -124,18 +138,17 @@ export default class FlowmapLayer extends CompositeLayer {
124
138
  this._updateDataProvider();
125
139
  }
126
140
  if (changeFlags.viewportChanged || changeFlags.dataChanged) {
127
- this.setState({
128
- highlightedObject: undefined,
129
- });
141
+ this.setState({ highlightedObject: undefined });
130
142
  }
131
143
  if (changeFlags.viewportChanged ||
132
- changeFlags.propsOrDataChanged // TODO can we ignore accessor props changes?
133
- ) {
144
+ changeFlags.dataChanged ||
145
+ (changeFlags.propsChanged &&
146
+ PROPS_TO_CAUSE_LAYER_DATA_UPDATE.some((prop) => oldProps[prop] !== props[prop]))) {
134
147
  const { dataProvider } = this.state || {};
135
148
  if (dataProvider) {
136
149
  dataProvider.setFlowmapState(this._getFlowmapState());
137
150
  dataProvider.updateLayersData((layersData) => {
138
- this.setState({ layersData });
151
+ this.setState({ layersData, highlightedObject: undefined });
139
152
  }, changeFlags);
140
153
  }
141
154
  }
@@ -306,6 +319,9 @@ export default class FlowmapLayer extends CompositeLayer {
306
319
  pickable: false,
307
320
  outlineColor: colorAsRgba(this.props.highlightColor),
308
321
  outlineThickness: 1,
322
+ parameters: {
323
+ depthTest: false,
324
+ },
309
325
  }))));
310
326
  break;
311
327
  }
@@ -366,4 +382,4 @@ function pickViewportProps(viewport) {
366
382
  bearing,
367
383
  };
368
384
  }
369
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcExheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Zsb3dtYXBMYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsV0FBVyxFQUtYLDRCQUE0QixFQUM1QixnQkFBZ0IsRUFDaEIsMkJBQTJCLEVBQzNCLHdCQUF3QixFQUN4QixhQUFhLEVBQ2IscUJBQXFCLEVBRXJCLHdCQUF3QixFQUV4Qix5QkFBeUIsR0FFMUIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLHNCQUFzQixNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUlMLFdBQVcsR0FDWixNQUFNLFNBQVMsQ0FBQztBQTRCakIsSUFBSyxhQUdKO0FBSEQsV0FBSyxhQUFhO0lBQ2hCLHNDQUFxQixDQUFBO0lBQ3JCLDhCQUFhLENBQUE7QUFDZixDQUFDLEVBSEksYUFBYSxLQUFiLGFBQWEsUUFHakI7QUF5QkQsTUFBTSxDQUFDLE9BQU8sT0FBTyxZQUFtQixTQUFRLGNBQWM7SUFtQjVELFlBQW1CLEtBQThCO1FBQy9DLEtBQUssaUNBQ0EsS0FBSyxLQUNSLFlBQVksRUFBRTtnQkFDWiw4RUFBOEU7Z0JBQzlFLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTthQUNqQyxFQUNELE9BQU8sRUFBRSxDQUFDLElBQXNCLEVBQUUsS0FBa0IsRUFBRSxFQUFFO2dCQUN0RCxzREFBc0Q7Z0JBQ3RELDREQUE0RDtnQkFDNUQsWUFBWTtnQkFDWixJQUFJO2dCQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUMsQ0FBQyxDQUFDO2dCQUNyRSxNQUFNLEVBQUMsT0FBTyxFQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUN4QixJQUFJLE9BQU8sRUFBRTtvQkFDWCxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7d0JBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQzt3QkFDbkMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDdkIsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLEVBQ0QsT0FBTyxFQUFFLENBQUMsSUFBc0IsRUFBRSxLQUFrQixFQUFFLEVBQUU7Z0JBQ3RELE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLElBQUksT0FBTyxFQUFFO29CQUNYLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO3dCQUNuQyxJQUFJLElBQUksRUFBRTs0QkFDUixPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO3lCQUN0QjtvQkFDSCxDQUFDLENBQUMsQ0FBQztpQkFDSjtZQUNILENBQUMsSUFDRCxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsU0FBUyxFQUFFLElBQUkseUJBQXlCLENBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztZQUMxRCxZQUFZLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQzNDLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGlCQUFpQixFQUFFLFNBQVM7WUFDNUIsV0FBVyxFQUFFLFNBQVM7U0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsRUFBQyxJQUFJLEVBQXNCOztRQUN4QyxtRUFBbUU7UUFDbkUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsTUFBTSxNQUFNLEdBQUcsTUFBQSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLFdBQVcsMENBQUUsTUFBTSxDQUFDO1lBQy9DLElBQUksTUFBTSxFQUFFO2dCQUNWLHVDQUNLLElBQUksS0FDUCxNQUFNLEVBQ04sTUFBTSxFQUFFLElBQUksSUFDWjthQUNIO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCwrQkFBK0I7SUFDL0Isd0RBQXdEO0lBQ3hELDJFQUEyRTtJQUMzRSxJQUFJO0lBRUksc0JBQXNCO1FBQzVCLE1BQU0sRUFBQyxJQUFJLEVBQUUsWUFBWSxFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN4QyxJQUFJLHFCQUFxQixDQUFPLFlBQVksYUFBWixZQUFZLHVCQUFaLFlBQVksQ0FBRSxZQUFZLENBQUMsRUFBRTtZQUMzRCxPQUFPLFlBQVksQ0FBQyxZQUFZLENBQUM7U0FDbEM7YUFBTSxJQUFJLGFBQWEsQ0FBTyxJQUFJLENBQUMsRUFBRTtZQUNwQyxNQUFNLFlBQVksR0FBRyxJQUFJLHdCQUF3QixDQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRSxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sWUFBWSxDQUFDO1NBQ3JCO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FDYixpRUFBaUUsQ0FDbEUsQ0FBQztJQUNKLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsRUFBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGlCQUFpQixDQUFDLE1BQTJCO1FBQzNDLE1BQU0sRUFBQyxXQUFXLEVBQUMsR0FBRyxNQUFNLENBQUM7UUFDN0IsaUNBQWlDO1FBQ2pDLGlCQUFpQjtRQUNqQixJQUFJO1FBQ0osSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFO1lBQy9CLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxxQ0FBcUM7UUFDckMscUZBQXFGO0lBQ3ZGLENBQUM7SUFFRCxXQUFXLENBQUMsRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBc0I7UUFDN0QsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFO1lBQzVCLDJCQUEyQjtTQUM1QjtRQUNELElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRTtZQUMzQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztTQUM1QjtRQUNELElBQUksV0FBVyxDQUFDLGVBQWUsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFO1lBQzFELElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ1osaUJBQWlCLEVBQUUsU0FBUzthQUM3QixDQUFDLENBQUM7U0FDSjtRQUVELElBQ0UsV0FBVyxDQUFDLGVBQWU7WUFDM0IsV0FBVyxDQUFDLGtCQUFrQixDQUFDLDZDQUE2QztVQUM1RTtZQUNBLE1BQU0sRUFBQyxZQUFZLEVBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4QyxJQUFJLFlBQVksRUFBRTtnQkFDaEIsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxVQUFrQyxFQUFFLEVBQUU7b0JBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxDQUFDO2dCQUM5QixDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDakI7U0FDRjtJQUNILENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsTUFBTSxFQUNKLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLFFBQVEsRUFDUixVQUFVLEVBQ1YsV0FBVyxFQUNYLGNBQWMsRUFDZCxxQkFBcUIsR0FDdEIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2YsT0FBTztZQUNMLHFCQUFxQjtZQUNyQixxQkFBcUI7WUFDckIscUJBQXFCO1lBQ3JCLGdCQUFnQjtZQUNoQixpQkFBaUI7WUFDakIsZUFBZTtZQUNmLFdBQVc7WUFDWCxrQkFBa0I7WUFDbEIsY0FBYztZQUNkLFFBQVE7WUFDUixVQUFVO1lBQ1YsV0FBVztZQUNYLGNBQWM7WUFDZCxxQkFBcUI7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsT0FBTztZQUNMLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUNsRCxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7U0FDbkMsQ0FBQztJQUNKLENBQUM7SUFFYSwyQkFBMkIsQ0FDdkMsSUFBeUI7OztZQUV6QixNQUFNLEVBQUMsS0FBSyxFQUFFLFdBQVcsRUFBQyxHQUFHLElBQUksQ0FBQztZQUNsQyxNQUFNLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQy9CLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO1lBQ0QsTUFBTSxVQUFVLG1DQUNYLElBQUksS0FDUCxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUNqQixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFDVCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFDVCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFDM0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEdBQ2xCLENBQUM7WUFDRixJQUNFLFdBQVcsWUFBWSxjQUFjO2dCQUNyQyxXQUFXLFlBQVksc0JBQXNCLEVBQzdDO2dCQUNBLE1BQU0sSUFBSSxHQUNSLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLFlBQVksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RFLElBQUksSUFBSSxFQUFFO29CQUNSLE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLGVBQWUsQ0FDL0MsU0FBUyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FDaEMsQ0FBQztvQkFDRixNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxlQUFlLENBQzdDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQzlCLENBQUM7b0JBQ0YsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO3dCQUNsQix1Q0FDSyxVQUFVLEtBQ2IsTUFBTSxFQUFFO2dDQUNOLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTtnQ0FDdEIsSUFBSTtnQ0FDSixNQUFNLEVBQUUsTUFBTTtnQ0FDZCxJQUFJLEVBQUUsSUFBSTtnQ0FDVixLQUFLLEVBQUUsU0FBUyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQzs2QkFDeEMsSUFDRDtxQkFDSDtpQkFDRjthQUNGO2lCQUFNLElBQUksV0FBVyxZQUFZLGdCQUFnQixFQUFFO2dCQUNsRCxNQUFNLFFBQVEsR0FDWixLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxZQUFZLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTFFLElBQUksUUFBUSxFQUFFO29CQUNaLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQzdDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2pELE1BQU0sTUFBTSxHQUFHLE1BQU0sWUFBWSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMzRCxNQUFNLEVBQUMsZ0JBQWdCLEVBQUMsR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsVUFBVSxLQUFJLEVBQUUsQ0FBQztvQkFDeEQsSUFBSSxNQUFNLElBQUksZ0JBQWdCLEVBQUU7d0JBQzlCLE1BQU0sWUFBWSxHQUFHLDJCQUEyQixDQUM5QyxnQkFBZ0IsRUFDaEIsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO3dCQUNGLHVDQUNLLFVBQVUsS0FDYixNQUFNLEVBQUU7Z0NBQ04sSUFBSSxFQUFFLFdBQVcsQ0FBQyxRQUFRO2dDQUMxQixRQUFRO2dDQUNSLEVBQUU7Z0NBQ0YsSUFBSTtnQ0FDSixNQUFNO2dDQUNOLFlBQVksRUFBRSxZQUFZOzZCQUMzQixJQUNEO3FCQUNIO2lCQUNGO2FBQ0Y7WUFFRCxPQUFPLFNBQVMsQ0FBQzs7S0FDbEI7SUFFTyxxQkFBcUIsQ0FDM0IsSUFBeUI7O1FBRXpCLE1BQU0sRUFBQyxLQUFLLEVBQUUsV0FBVyxFQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksS0FBSyxHQUFHLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUNoQyxJQUNFLFdBQVcsWUFBWSxjQUFjO1lBQ3JDLFdBQVcsWUFBWSxzQkFBc0IsRUFDN0M7WUFDQSxNQUFNLEVBQUMsY0FBYyxFQUFDLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLFVBQVUsS0FBSSxFQUFFLENBQUM7WUFDdEQsSUFBSSxjQUFjLEVBQUU7Z0JBQ2xCLElBQUksS0FBSyxHQUFHLDRCQUE0QixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFO29CQUNqQyxLQUFLLG1DQUNBLEtBQUssS0FDUixVQUFVLGtDQUNMLEtBQUssQ0FBQyxVQUFVLEtBQ25CLFFBQVEsa0NBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEtBQzVCLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQztvQ0FDcEIsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0NBQzlDLEdBQUcsRUFBRSw4Q0FBOEM7aUNBQ3BELENBQUMsU0FHUCxDQUFDO2lCQUNIO2dCQUNELE9BQU87b0JBQ0wsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJO29CQUN4QixjQUFjLEVBQUUsS0FBSztpQkFDdEIsQ0FBQzthQUNIO1NBQ0Y7YUFBTSxJQUFJLFdBQVcsWUFBWSxnQkFBZ0IsRUFBRTtZQUNsRCxNQUFNLEVBQUMsZ0JBQWdCLEVBQUMsR0FBRyxDQUFBLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsVUFBVSxLQUFJLEVBQUUsQ0FBQztZQUN4RCxJQUFJLGdCQUFnQixFQUFFO2dCQUNwQixPQUFPO29CQUNMLElBQUksRUFBRSxhQUFhLENBQUMsUUFBUTtvQkFDNUIsTUFBTSxFQUFFLHdCQUF3QixDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQztvQkFDekQsTUFBTSxFQUFFLDJCQUEyQixDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQztpQkFDN0QsQ0FBQzthQUNIO1NBQ0Y7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsWUFBWTs7UUFDVixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLFVBQVUsRUFBRTtZQUMxQixNQUFNLEVBQUMsVUFBVSxFQUFFLGlCQUFpQixFQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNuRCxNQUFNLEVBQUMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBQyxHQUN0RCxVQUFVLElBQUksRUFBRSxDQUFDO1lBQ25CLElBQUksZ0JBQWdCLElBQUksY0FBYyxFQUFFO2dCQUN0QyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxNQUFNLFlBQVksR0FBRyxXQUFXLENBQzlCLGFBQWEsQ0FBQyxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FDdEUsQ0FBQztnQkFDRixNQUFNLG9CQUFvQixHQUFHO29CQUMzQixJQUFJLEVBQUUsY0FBYztvQkFDcEIsVUFBVSxrQ0FDTCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVU7d0JBQ3hCLCtDQUErQzt3QkFDL0MsU0FBUyxFQUFFLEtBQUssR0FDakI7aUJBQ0YsQ0FBQztnQkFDRixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUU7b0JBQy9CLE1BQU0sQ0FBQyxJQUFJO29CQUNULGFBQWE7b0JBQ2IsSUFBSSxzQkFBc0IsbUJBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsaUNBQ25CLG9CQUFvQixLQUN2QixFQUFFLEVBQUUscUJBQXFCLEVBQ3pCLFdBQVcsRUFBRSxLQUFLLEVBQ2xCLGFBQWEsRUFBRSxFQUFFLElBQ2pCLEVBQ0YsQ0FDSCxDQUFDO2lCQUNIO3FCQUFNO29CQUNMLE1BQU0sQ0FBQyxJQUFJLENBQ1QsSUFBSSxjQUFjLG1CQUNiLElBQUksQ0FBQyxnQkFBZ0IsaUNBQ25CLG9CQUFvQixLQUN2QixFQUFFLEVBQUUsWUFBWSxFQUNoQixXQUFXLEVBQUUsSUFBSSxFQUNqQixZQUFZLEVBQUUsWUFBWSxJQUMxQixFQUNGLENBQ0gsQ0FBQztpQkFDSDtnQkFDRCxNQUFNLENBQUMsSUFBSSxDQUNULElBQUksZ0JBQWdCLENBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDcEIsRUFBRSxFQUFFLFNBQVM7b0JBQ2IsSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTt3QkFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDO3dCQUNoQixDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7b0JBQ3hCLGVBQWUsRUFBRSxHQUFHO2lCQUNyQixDQUFDLENBQ0gsQ0FDRixDQUFDO2dCQUNGLElBQUksaUJBQWlCLEVBQUU7b0JBQ3JCLFFBQVEsaUJBQWlCLENBQUMsSUFBSSxFQUFFO3dCQUM5QixLQUFLLGFBQWEsQ0FBQyxRQUFROzRCQUN6QixNQUFNLENBQUMsSUFBSSxDQUNULElBQUksZ0JBQWdCLG1CQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQ0FDdkIsRUFBRSxFQUFFLG9CQUFvQjtnQ0FDeEIsSUFBSSxFQUFFLENBQUMsaUJBQWlCLENBQUM7Z0NBQ3pCLFFBQVEsRUFBRSxLQUFLO2dDQUNmLFlBQVksRUFBRSxJQUFJO2dDQUNsQixPQUFPLEVBQUUsSUFBSTtnQ0FDYixNQUFNLEVBQUUsS0FBSztnQ0FDYixjQUFjLEVBQUUsUUFBUTtnQ0FDeEIsWUFBWSxFQUFFLENBQUM7Z0NBQ2YsV0FBVyxFQUFFLFFBQVE7Z0NBQ3JCLFNBQVMsRUFBRSxDQUFDLENBQTRCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNO2dDQUNyRCxZQUFZLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO2dDQUNwRCxXQUFXLEVBQUUsQ0FBQyxDQUE0QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTTs2QkFDeEQsQ0FBQyxFQUNGLENBQ0gsQ0FBQzs0QkFDRixNQUFNO3dCQUNSLEtBQUssYUFBYSxDQUFDLElBQUk7NEJBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsSUFBSSxjQUFjLG1CQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQ0FDdkIsRUFBRSxFQUFFLGdCQUFnQjtnQ0FDcEIsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGNBQWM7Z0NBQ3RDLFdBQVcsRUFBRSxJQUFJO2dDQUNqQixRQUFRLEVBQUUsS0FBSztnQ0FDZixZQUFZLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO2dDQUNwRCxnQkFBZ0IsRUFBRSxDQUFDOzZCQUNwQixDQUFDLEVBQ0YsQ0FDSCxDQUFDOzRCQUNGLE1BQU07cUJBQ1Q7aUJBQ0Y7YUFDRjtZQUNELElBQUksY0FBYyxFQUFFO2dCQUNsQixNQUFNLENBQUMsSUFBSSxDQUNULElBQUksU0FBUyxDQUNYLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDcEIsRUFBRSxFQUFFLGlCQUFpQjtvQkFDckIsSUFBSSxFQUFFLGNBQWM7b0JBQ3BCLFFBQVEsRUFBRSxJQUFJO29CQUNkLFFBQVEsRUFBRSxLQUFLO29CQUNmLFVBQVUsRUFBRSxXQUFXO29CQUN2QixjQUFjLEVBQUUsQ0FBQyxDQUFTLEVBQUUsRUFBQyxLQUFLLEVBQWtCLEVBQUUsRUFBRTt3QkFDdEQsTUFBTSxDQUFDLEdBQUcsMkJBQTJCLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7d0JBQy9ELE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNwQixDQUFDO29CQUNELFdBQVcsRUFBRSxDQUFDLENBQVMsRUFBRSxFQUFDLEtBQUssRUFBa0IsRUFBRSxFQUFFO3dCQUNuRCxNQUFNLEdBQUcsR0FBRyx3QkFBd0IsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDOUQsT0FBTyxHQUFHLENBQUM7b0JBQ2IsQ0FBQztvQkFDRCxPQUFPLEVBQUUsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ3pCLE9BQU8sRUFBRSxFQUFFO29CQUNYLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztvQkFDOUIsUUFBUSxFQUFFLENBQUM7b0JBQ1gsYUFBYSxFQUFFLFFBQVE7b0JBQ3ZCLG9CQUFvQixFQUFFLEtBQUs7aUJBQzVCLENBQUMsQ0FDSCxDQUNGLENBQUM7YUFDSDtTQUNGO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzs7QUE3YU0seUJBQVksR0FBRztJQUNwQixRQUFRLEVBQUUsSUFBSTtJQUNkLFVBQVUsRUFBRSxFQUFFO0lBQ2QscUJBQXFCLEVBQUUsSUFBSTtJQUMzQixxQkFBcUIsRUFBRSxLQUFLO0lBQzVCLGdCQUFnQixFQUFFLEtBQUs7SUFDdkIsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixXQUFXLEVBQUUsSUFBSTtJQUNqQixrQkFBa0IsRUFBRSxLQUFLO0lBQ3pCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLGVBQWUsRUFBRSxTQUFTO0lBQzFCLHFCQUFxQixFQUFFLElBQUk7SUFDM0IsV0FBVyxFQUFFLE1BQU07SUFDbkIsY0FBYyxFQUFFLFFBQVE7SUFDeEIscUJBQXFCLEVBQUUsSUFBSTtDQUM1QixDQUFDO0FBaWFKLFNBQVMsaUJBQWlCLENBQUMsUUFBNkI7SUFDdEQsTUFBTSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBQyxHQUFHLFFBQVEsQ0FBQztJQUM1RSxPQUFPO1FBQ0wsS0FBSztRQUNMLE1BQU07UUFDTixTQUFTO1FBQ1QsUUFBUTtRQUNSLElBQUk7UUFDSixLQUFLO1FBQ0wsT0FBTztLQUNSLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDIyIEZsb3dtYXBCbHVlXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICovXG5pbXBvcnQge0NvbXBvc2l0ZUxheWVyfSBmcm9tICdAZGVjay5nbC9jb3JlJztcbmltcG9ydCB7U2NhdHRlcnBsb3RMYXllciwgVGV4dExheWVyfSBmcm9tICdAZGVjay5nbC9sYXllcnMnO1xuaW1wb3J0IHtcbiAgY29sb3JBc1JnYmEsXG4gIEZsb3dMaW5lc0xheWVyQXR0cmlidXRlcyxcbiAgRmxvd21hcERhdGEsXG4gIEZsb3dtYXBEYXRhQWNjZXNzb3JzLFxuICBGbG93bWFwRGF0YVByb3ZpZGVyLFxuICBnZXRGbG93TGluZUF0dHJpYnV0ZXNCeUluZGV4LFxuICBnZXRGbG93bWFwQ29sb3JzLFxuICBnZXRPdXRlckNpcmNsZVJhZGl1c0J5SW5kZXgsXG4gIGdldExvY2F0aW9uQ29vcmRzQnlJbmRleCxcbiAgaXNGbG93bWFwRGF0YSxcbiAgaXNGbG93bWFwRGF0YVByb3ZpZGVyLFxuICBMYXllcnNEYXRhLFxuICBMb2NhbEZsb3dtYXBEYXRhUHJvdmlkZXIsXG4gIFZpZXdwb3J0UHJvcHMsXG4gIEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnMsXG4gIEZpbHRlclN0YXRlLFxufSBmcm9tICdAZmxvd21hcC5nbC9kYXRhJztcbmltcG9ydCBBbmltYXRlZEZsb3dMaW5lc0xheWVyIGZyb20gJy4vQW5pbWF0ZWRGbG93TGluZXNMYXllcic7XG5pbXBvcnQgRmxvd0NpcmNsZXNMYXllciBmcm9tICcuL0Zsb3dDaXJjbGVzTGF5ZXInO1xuaW1wb3J0IEZsb3dMaW5lc0xheWVyIGZyb20gJy4vRmxvd0xpbmVzTGF5ZXInO1xuaW1wb3J0IHtcbiAgRmxvd21hcExheWVyUGlja2luZ0luZm8sXG4gIExheWVyUHJvcHMsXG4gIFBpY2tpbmdJbmZvLFxuICBQaWNraW5nVHlwZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIEZsb3dtYXBMYXllclByb3BzPEwsIEY+ID0ge1xuICBkYXRhPzogRmxvd21hcERhdGE8TCwgRj47XG4gIGRhdGFQcm92aWRlcj86IEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj47XG4gIGZpbHRlcj86IEZpbHRlclN0YXRlO1xuICBsb2NhdGlvblRvdGFsc0VuYWJsZWQ/OiBib29sZWFuO1xuICBsb2NhdGlvbkxhYmVsc0VuYWJsZWQ/OiBib29sZWFuO1xuICBhZGFwdGl2ZVNjYWxlc0VuYWJsZWQ/OiBib29sZWFuO1xuICBhbmltYXRpb25FbmFibGVkPzogYm9vbGVhbjtcbiAgY2x1c3RlcmluZ0VuYWJsZWQ/OiBib29sZWFuO1xuICBjbHVzdGVyaW5nTGV2ZWw/OiBudW1iZXI7XG4gIGZhZGVFbmFibGVkPzogYm9vbGVhbjtcbiAgZmFkZU9wYWNpdHlFbmFibGVkPzogYm9vbGVhbjtcbiAgY2x1c3RlcmluZ0F1dG8/OiBib29sZWFuO1xuICBkYXJrTW9kZT86IGJvb2xlYW47XG4gIGZhZGVBbW91bnQ/OiBudW1iZXI7XG4gIGNvbG9yU2NoZW1lPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIGhpZ2hsaWdodENvbG9yPzogc3RyaW5nIHwgbnVtYmVyW107XG4gIG1heFRvcEZsb3dzRGlzcGxheU51bT86IG51bWJlcjtcbiAgb25Ib3Zlcj86IChcbiAgICBpbmZvOiBGbG93bWFwTGF5ZXJQaWNraW5nSW5mbzxMLCBGPiB8IHVuZGVmaW5lZCxcbiAgICBldmVudDogU291cmNlRXZlbnQsXG4gICkgPT4gdm9pZDtcbiAgb25DbGljaz86IChpbmZvOiBGbG93bWFwTGF5ZXJQaWNraW5nSW5mbzxMLCBGPiwgZXZlbnQ6IFNvdXJjZUV2ZW50KSA9PiB2b2lkO1xufSAmIFBhcnRpYWw8Rmxvd21hcERhdGFBY2Nlc3NvcnM8TCwgRj4+ICZcbiAgTGF5ZXJQcm9wcztcblxuZW51bSBIaWdobGlnaHRUeXBlIHtcbiAgTE9DQVRJT04gPSAnbG9jYXRpb24nLFxuICBGTE9XID0gJ2Zsb3cnLFxufVxuXG50eXBlIEhpZ2hsaWdodGVkTG9jYXRpb25PYmplY3QgPSB7XG4gIHR5cGU6IEhpZ2hsaWdodFR5cGUuTE9DQVRJT047XG4gIGNvb3JkczogW251bWJlciwgbnVtYmVyXTtcbiAgcmFkaXVzOiBudW1iZXI7XG59O1xuXG50eXBlIEhpZ2hsaWdodGVkRmxvd09iamVjdCA9IHtcbiAgdHlwZTogSGlnaGxpZ2h0VHlwZS5GTE9XO1xuICBsaW5lQXR0cmlidXRlczogRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzO1xufTtcblxudHlwZSBIaWdobGlnaHRlZE9iamVjdCA9IEhpZ2hsaWdodGVkTG9jYXRpb25PYmplY3QgfCBIaWdobGlnaHRlZEZsb3dPYmplY3Q7XG5cbnR5cGUgU3RhdGU8TCwgRj4gPSB7XG4gIGFjY2Vzc29yczogRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29yczxMLCBGPjtcbiAgZGF0YVByb3ZpZGVyOiBGbG93bWFwRGF0YVByb3ZpZGVyPEwsIEY+O1xuICBsYXllcnNEYXRhOiBMYXllcnNEYXRhIHwgdW5kZWZpbmVkO1xuICBoaWdobGlnaHRlZE9iamVjdDogSGlnaGxpZ2h0ZWRPYmplY3QgfCB1bmRlZmluZWQ7XG4gIHBpY2tpbmdJbmZvOiBGbG93bWFwTGF5ZXJQaWNraW5nSW5mbzxMLCBGPiB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCB0eXBlIFNvdXJjZUV2ZW50ID0ge3NyY0V2ZW50OiBNb3VzZUV2ZW50fTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvd21hcExheWVyPEwsIEY+IGV4dGVuZHMgQ29tcG9zaXRlTGF5ZXIge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGRhcmtNb2RlOiB0cnVlLFxuICAgIGZhZGVBbW91bnQ6IDUwLFxuICAgIGxvY2F0aW9uVG90YWxzRW5hYmxlZDogdHJ1ZSxcbiAgICBsb2NhdGlvbkxhYmVsc0VuYWJsZWQ6IGZhbHNlLFxuICAgIGFuaW1hdGlvbkVuYWJsZWQ6IGZhbHNlLFxuICAgIGNsdXN0ZXJpbmdFbmFibGVkOiB0cnVlLFxuICAgIGZhZGVFbmFibGVkOiB0cnVlLFxuICAgIGZhZGVPcGFjaXR5RW5hYmxlZDogZmFsc2UsXG4gICAgY2x1c3RlcmluZ0F1dG86IHRydWUsXG4gICAgY2x1c3RlcmluZ0xldmVsOiB1bmRlZmluZWQsXG4gICAgYWRhcHRpdmVTY2FsZXNFbmFibGVkOiB0cnVlLFxuICAgIGNvbG9yU2NoZW1lOiAnVGVhbCcsXG4gICAgaGlnaGxpZ2h0Q29sb3I6ICdvcmFuZ2UnLFxuICAgIG1heFRvcEZsb3dzRGlzcGxheU51bTogNTAwMCxcbiAgfTtcbiAgc3RhdGU6IFN0YXRlPEwsIEY+IHwgdW5kZWZpbmVkO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wczogRmxvd21hcExheWVyUHJvcHM8TCwgRj4pIHtcbiAgICBzdXBlcih7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGRhdGFQcm92aWRlcjoge1xuICAgICAgICAvLyBUbyBhdm9pZCBkZWNrLmdsIHByb3BzIGRpZmZpbmcgb24gY29tbGluayB3b3JrZXIgcHJveHkgY2F1c2luZyBhbiBleGNlcHRpb25cbiAgICAgICAgZGF0YVByb3ZpZGVyOiBwcm9wcy5kYXRhUHJvdmlkZXIsXG4gICAgICB9LFxuICAgICAgb25Ib3ZlcjogKGluZm86IFBpY2tpbmdJbmZvPGFueT4sIGV2ZW50OiBTb3VyY2VFdmVudCkgPT4ge1xuICAgICAgICAvLyBUT0RPOiBpZiAobGFzdEhvdmVyRXZlbnRTdGFydFRpbWVSZWYgPiBzdGFydFRpbWUpIHtcbiAgICAgICAgLy8gICAvLyBTa2lwcGluZywgYmVjYXVzZSB0aGlzIGlzIG5vdCB0aGUgbGF0ZXN0IGhvdmVyIGV2ZW50XG4gICAgICAgIC8vICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2hpZ2hsaWdodGVkT2JqZWN0OiB0aGlzLl9nZXRIaWdobGlnaHRlZE9iamVjdChpbmZvKX0pO1xuICAgICAgICBjb25zdCB7b25Ib3Zlcn0gPSBwcm9wcztcbiAgICAgICAgaWYgKG9uSG92ZXIpIHtcbiAgICAgICAgICB0aGlzLl9nZXRGbG93bWFwTGF5ZXJQaWNraW5nSW5mbyhpbmZvKS50aGVuKChpbmZvKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtwaWNraW5nSW5mbzogaW5mb30pO1xuICAgICAgICAgICAgb25Ib3ZlcihpbmZvLCBldmVudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbkNsaWNrOiAoaW5mbzogUGlja2luZ0luZm88YW55PiwgZXZlbnQ6IFNvdXJjZUV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHtvbkNsaWNrfSA9IHByb3BzO1xuICAgICAgICBpZiAob25DbGljaykge1xuICAgICAgICAgIHRoaXMuX2dldEZsb3dtYXBMYXllclBpY2tpbmdJbmZvKGluZm8pLnRoZW4oKGluZm8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3BpY2tpbmdJbmZvOiBpbmZvfSk7XG4gICAgICAgICAgICBpZiAoaW5mbykge1xuICAgICAgICAgICAgICBvbkNsaWNrKGluZm8sIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpemVTdGF0ZSgpIHtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWNjZXNzb3JzOiBuZXcgRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29yczxMLCBGPih0aGlzLnByb3BzKSxcbiAgICAgIGRhdGFQcm92aWRlcjogdGhpcy5fZ2V0T3JNYWtlRGF0YVByb3ZpZGVyKCksXG4gICAgICBsYXllcnNEYXRhOiB1bmRlZmluZWQsXG4gICAgICBoaWdobGlnaHRlZE9iamVjdDogdW5kZWZpbmVkLFxuICAgICAgcGlja2luZ0luZm86IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgZ2V0UGlja2luZ0luZm8oe2luZm99OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgLy8gVGhpcyBpcyBmb3Igb25Ib3ZlciBldmVudCBoYW5kbGVycyBzZXQgb24gdGhlIDxEZWNrR0w+IGNvbXBvbmVudFxuICAgIGlmICghaW5mby5vYmplY3QpIHtcbiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuc3RhdGU/LnBpY2tpbmdJbmZvPy5vYmplY3Q7XG4gICAgICBpZiAob2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uaW5mbyxcbiAgICAgICAgICBvYmplY3QsXG4gICAgICAgICAgcGlja2VkOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW5mbztcbiAgfVxuXG4gIC8vIHByaXZhdGUgX3VwZGF0ZUFjY2Vzc29ycygpIHtcbiAgLy8gICB0aGlzLnN0YXRlPy5kYXRhUHJvdmlkZXI/LnNldEFjY2Vzc29ycyh0aGlzLnByb3BzKTtcbiAgLy8gICB0aGlzLnNldFN0YXRlKHthY2Nlc3NvcnM6IG5ldyBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzKHRoaXMucHJvcHMpfSk7XG4gIC8vIH1cblxuICBwcml2YXRlIF9nZXRPck1ha2VEYXRhUHJvdmlkZXIoKSB7XG4gICAgY29uc3Qge2RhdGEsIGRhdGFQcm92aWRlcn0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChpc0Zsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj4oZGF0YVByb3ZpZGVyPy5kYXRhUHJvdmlkZXIpKSB7XG4gICAgICByZXR1cm4gZGF0YVByb3ZpZGVyLmRhdGFQcm92aWRlcjtcbiAgICB9IGVsc2UgaWYgKGlzRmxvd21hcERhdGE8TCwgRj4oZGF0YSkpIHtcbiAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBMb2NhbEZsb3dtYXBEYXRhUHJvdmlkZXI8TCwgRj4odGhpcy5wcm9wcyk7XG4gICAgICBkYXRhUHJvdmlkZXIuc2V0Rmxvd21hcERhdGEoZGF0YSk7XG4gICAgICByZXR1cm4gZGF0YVByb3ZpZGVyO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnRmxvd21hcExheWVyOiBkYXRhIG11c3QgYmUgYSBGbG93bWFwRGF0YVByb3ZpZGVyIG9yIEZsb3dtYXBEYXRhJyxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlRGF0YVByb3ZpZGVyKCkge1xuICAgIHRoaXMuc2V0U3RhdGUoe2RhdGFQcm92aWRlcjogdGhpcy5fZ2V0T3JNYWtlRGF0YVByb3ZpZGVyKCl9KTtcbiAgfVxuXG4gIHNob3VsZFVwZGF0ZVN0YXRlKHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHtjaGFuZ2VGbGFnc30gPSBwYXJhbXM7XG4gICAgLy8gaWYgKHRoaXMuX3ZpZXdwb3J0Q2hhbmdlZCgpKSB7XG4gICAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgICAvLyB9XG4gICAgaWYgKGNoYW5nZUZsYWdzLnZpZXdwb3J0Q2hhbmdlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5zaG91bGRVcGRhdGVTdGF0ZShwYXJhbXMpO1xuICAgIC8vIFRPRE86IGJlIHNtYXJ0ZXIgb24gd2hlbiB0byB1cGRhdGVcbiAgICAvLyAoZS5nLiBpZ25vcmUgdmlld3BvcnQgY2hhbmdlcyB3aGVuIGFkYXB0aXZlU2NhbGVzRW5hYmxlZCBhbmQgY2x1c3RlcmluZyBhcmUgZmFsc2UpXG4gIH1cblxuICB1cGRhdGVTdGF0ZSh7b2xkUHJvcHMsIHByb3BzLCBjaGFuZ2VGbGFnc306IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlRmxhZ3MucHJvcHNDaGFuZ2VkKSB7XG4gICAgICAvLyB0aGlzLl91cGRhdGVBY2Nlc3NvcnMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZUZsYWdzLmRhdGFDaGFuZ2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVEYXRhUHJvdmlkZXIoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZUZsYWdzLnZpZXdwb3J0Q2hhbmdlZCB8fCBjaGFuZ2VGbGFncy5kYXRhQ2hhbmdlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIGhpZ2hsaWdodGVkT2JqZWN0OiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBjaGFuZ2VGbGFncy52aWV3cG9ydENoYW5nZWQgfHxcbiAgICAgIGNoYW5nZUZsYWdzLnByb3BzT3JEYXRhQ2hhbmdlZCAvLyBUT0RPIGNhbiB3ZSBpZ25vcmUgYWNjZXNzb3IgcHJvcHMgY2hhbmdlcz9cbiAgICApIHtcbiAgICAgIGNvbnN0IHtkYXRhUHJvdmlkZXJ9ID0gdGhpcy5zdGF0ZSB8fCB7fTtcbiAgICAgIGlmIChkYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgZGF0YVByb3ZpZGVyLnNldEZsb3dtYXBTdGF0ZSh0aGlzLl9nZXRGbG93bWFwU3RhdGUoKSk7XG4gICAgICAgIGRhdGFQcm92aWRlci51cGRhdGVMYXllcnNEYXRhKChsYXllcnNEYXRhOiBMYXllcnNEYXRhIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7bGF5ZXJzRGF0YX0pO1xuICAgICAgICB9LCBjaGFuZ2VGbGFncyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U2V0dGluZ3NTdGF0ZSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBsb2NhdGlvblRvdGFsc0VuYWJsZWQsXG4gICAgICBsb2NhdGlvbkxhYmVsc0VuYWJsZWQsXG4gICAgICBhZGFwdGl2ZVNjYWxlc0VuYWJsZWQsXG4gICAgICBhbmltYXRpb25FbmFibGVkLFxuICAgICAgY2x1c3RlcmluZ0VuYWJsZWQsXG4gICAgICBjbHVzdGVyaW5nTGV2ZWwsXG4gICAgICBmYWRlRW5hYmxlZCxcbiAgICAgIGZhZGVPcGFjaXR5RW5hYmxlZCxcbiAgICAgIGNsdXN0ZXJpbmdBdXRvLFxuICAgICAgZGFya01vZGUsXG4gICAgICBmYWRlQW1vdW50LFxuICAgICAgY29sb3JTY2hlbWUsXG4gICAgICBoaWdobGlnaHRDb2xvcixcbiAgICAgIG1heFRvcEZsb3dzRGlzcGxheU51bSxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4ge1xuICAgICAgbG9jYXRpb25Ub3RhbHNFbmFibGVkLFxuICAgICAgbG9jYXRpb25MYWJlbHNFbmFibGVkLFxuICAgICAgYWRhcHRpdmVTY2FsZXNFbmFibGVkLFxuICAgICAgYW5pbWF0aW9uRW5hYmxlZCxcbiAgICAgIGNsdXN0ZXJpbmdFbmFibGVkLFxuICAgICAgY2x1c3RlcmluZ0xldmVsLFxuICAgICAgZmFkZUVuYWJsZWQsXG4gICAgICBmYWRlT3BhY2l0eUVuYWJsZWQsXG4gICAgICBjbHVzdGVyaW5nQXV0byxcbiAgICAgIGRhcmtNb2RlLFxuICAgICAgZmFkZUFtb3VudCxcbiAgICAgIGNvbG9yU2NoZW1lLFxuICAgICAgaGlnaGxpZ2h0Q29sb3IsXG4gICAgICBtYXhUb3BGbG93c0Rpc3BsYXlOdW0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEZsb3dtYXBTdGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmlld3BvcnQ6IHBpY2tWaWV3cG9ydFByb3BzKHRoaXMuY29udGV4dC52aWV3cG9ydCksXG4gICAgICBmaWx0ZXI6IHRoaXMucHJvcHMuZmlsdGVyLFxuICAgICAgc2V0dGluZ3M6IHRoaXMuX2dldFNldHRpbmdzU3RhdGUoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZ2V0Rmxvd21hcExheWVyUGlja2luZ0luZm8oXG4gICAgaW5mbzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgKTogUHJvbWlzZTxGbG93bWFwTGF5ZXJQaWNraW5nSW5mbzxMLCBGPiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHtpbmRleCwgc291cmNlTGF5ZXJ9ID0gaW5mbztcbiAgICBjb25zdCB7ZGF0YVByb3ZpZGVyLCBhY2Nlc3NvcnN9ID0gdGhpcy5zdGF0ZSB8fCB7fTtcbiAgICBpZiAoIWRhdGFQcm92aWRlciB8fCAhYWNjZXNzb3JzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBjb21tb25JbmZvID0ge1xuICAgICAgLi4uaW5mbyxcbiAgICAgIHBpY2tlZDogaW5mby5waWNrZWQsXG4gICAgICBsYXllcjogaW5mby5sYXllcixcbiAgICAgIGluZGV4OiBpbmZvLmluZGV4LFxuICAgICAgeDogaW5mby54LFxuICAgICAgeTogaW5mby55LFxuICAgICAgY29vcmRpbmF0ZTogaW5mby5jb29yZGluYXRlLFxuICAgICAgZXZlbnQ6IGluZm8uZXZlbnQsXG4gICAgfTtcbiAgICBpZiAoXG4gICAgICBzb3VyY2VMYXllciBpbnN0YW5jZW9mIEZsb3dMaW5lc0xheWVyIHx8XG4gICAgICBzb3VyY2VMYXllciBpbnN0YW5jZW9mIEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXJcbiAgICApIHtcbiAgICAgIGNvbnN0IGZsb3cgPVxuICAgICAgICBpbmRleCA9PT0gLTEgPyB1bmRlZmluZWQgOiBhd2FpdCBkYXRhUHJvdmlkZXIuZ2V0Rmxvd0J5SW5kZXgoaW5kZXgpO1xuICAgICAgaWYgKGZsb3cpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gYXdhaXQgZGF0YVByb3ZpZGVyLmdldExvY2F0aW9uQnlJZChcbiAgICAgICAgICBhY2Nlc3NvcnMuZ2V0Rmxvd09yaWdpbklkKGZsb3cpLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkZXN0ID0gYXdhaXQgZGF0YVByb3ZpZGVyLmdldExvY2F0aW9uQnlJZChcbiAgICAgICAgICBhY2Nlc3NvcnMuZ2V0Rmxvd0Rlc3RJZChmbG93KSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG9yaWdpbiAmJiBkZXN0KSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbW1vbkluZm8sXG4gICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgdHlwZTogUGlja2luZ1R5cGUuRkxPVyxcbiAgICAgICAgICAgICAgZmxvdyxcbiAgICAgICAgICAgICAgb3JpZ2luOiBvcmlnaW4sXG4gICAgICAgICAgICAgIGRlc3Q6IGRlc3QsXG4gICAgICAgICAgICAgIGNvdW50OiBhY2Nlc3NvcnMuZ2V0Rmxvd01hZ25pdHVkZShmbG93KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc291cmNlTGF5ZXIgaW5zdGFuY2VvZiBGbG93Q2lyY2xlc0xheWVyKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbiA9XG4gICAgICAgIGluZGV4ID09PSAtMSA/IHVuZGVmaW5lZCA6IGF3YWl0IGRhdGFQcm92aWRlci5nZXRMb2NhdGlvbkJ5SW5kZXgoaW5kZXgpO1xuXG4gICAgICBpZiAobG9jYXRpb24pIHtcbiAgICAgICAgY29uc3QgaWQgPSBhY2Nlc3NvcnMuZ2V0TG9jYXRpb25JZChsb2NhdGlvbik7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBhY2Nlc3NvcnMuZ2V0TG9jYXRpb25OYW1lKGxvY2F0aW9uKTtcbiAgICAgICAgY29uc3QgdG90YWxzID0gYXdhaXQgZGF0YVByb3ZpZGVyLmdldFRvdGFsc0ZvckxvY2F0aW9uKGlkKTtcbiAgICAgICAgY29uc3Qge2NpcmNsZUF0dHJpYnV0ZXN9ID0gdGhpcy5zdGF0ZT8ubGF5ZXJzRGF0YSB8fCB7fTtcbiAgICAgICAgaWYgKHRvdGFscyAmJiBjaXJjbGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgY29uc3QgY2lyY2xlUmFkaXVzID0gZ2V0T3V0ZXJDaXJjbGVSYWRpdXNCeUluZGV4KFxuICAgICAgICAgICAgY2lyY2xlQXR0cmlidXRlcyxcbiAgICAgICAgICAgIGluZm8uaW5kZXgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29tbW9uSW5mbyxcbiAgICAgICAgICAgIG9iamVjdDoge1xuICAgICAgICAgICAgICB0eXBlOiBQaWNraW5nVHlwZS5MT0NBVElPTixcbiAgICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB0b3RhbHMsXG4gICAgICAgICAgICAgIGNpcmNsZVJhZGl1czogY2lyY2xlUmFkaXVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEhpZ2hsaWdodGVkT2JqZWN0KFxuICAgIGluZm86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICk6IEhpZ2hsaWdodGVkT2JqZWN0IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB7aW5kZXgsIHNvdXJjZUxheWVyfSA9IGluZm87XG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoXG4gICAgICBzb3VyY2VMYXllciBpbnN0YW5jZW9mIEZsb3dMaW5lc0xheWVyIHx8XG4gICAgICBzb3VyY2VMYXllciBpbnN0YW5jZW9mIEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXJcbiAgICApIHtcbiAgICAgIGNvbnN0IHtsaW5lQXR0cmlidXRlc30gPSB0aGlzLnN0YXRlPy5sYXllcnNEYXRhIHx8IHt9O1xuICAgICAgaWYgKGxpbmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCBhdHRycyA9IGdldEZsb3dMaW5lQXR0cmlidXRlc0J5SW5kZXgobGluZUF0dHJpYnV0ZXMsIGluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZmFkZU9wYWNpdHlFbmFibGVkKSB7XG4gICAgICAgICAgYXR0cnMgPSB7XG4gICAgICAgICAgICAuLi5hdHRycyxcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgICAgLi4uYXR0cnMuYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgZ2V0Q29sb3I6IHtcbiAgICAgICAgICAgICAgICAuLi5hdHRycy5hdHRyaWJ1dGVzLmdldENvbG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBuZXcgVWludDhBcnJheShbXG4gICAgICAgICAgICAgICAgICAuLi5hdHRycy5hdHRyaWJ1dGVzLmdldENvbG9yLnZhbHVlLnNsaWNlKDAsIDMpLFxuICAgICAgICAgICAgICAgICAgMjU1LCAvLyB0aGUgaGlnaGxpZ2h0IGNvbG9yIHNob3VsZCBiZSBhbHdheXMgb3BhcXVlXG4gICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBIaWdobGlnaHRUeXBlLkZMT1csXG4gICAgICAgICAgbGluZUF0dHJpYnV0ZXM6IGF0dHJzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc291cmNlTGF5ZXIgaW5zdGFuY2VvZiBGbG93Q2lyY2xlc0xheWVyKSB7XG4gICAgICBjb25zdCB7Y2lyY2xlQXR0cmlidXRlc30gPSB0aGlzLnN0YXRlPy5sYXllcnNEYXRhIHx8IHt9O1xuICAgICAgaWYgKGNpcmNsZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBIaWdobGlnaHRUeXBlLkxPQ0FUSU9OLFxuICAgICAgICAgIGNvb3JkczogZ2V0TG9jYXRpb25Db29yZHNCeUluZGV4KGNpcmNsZUF0dHJpYnV0ZXMsIGluZGV4KSxcbiAgICAgICAgICByYWRpdXM6IGdldE91dGVyQ2lyY2xlUmFkaXVzQnlJbmRleChjaXJjbGVBdHRyaWJ1dGVzLCBpbmRleCksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZW5kZXJMYXllcnMoKTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgbGF5ZXJzID0gW107XG4gICAgaWYgKHRoaXMuc3RhdGU/LmxheWVyc0RhdGEpIHtcbiAgICAgIGNvbnN0IHtsYXllcnNEYXRhLCBoaWdobGlnaHRlZE9iamVjdH0gPSB0aGlzLnN0YXRlO1xuICAgICAgY29uc3Qge2NpcmNsZUF0dHJpYnV0ZXMsIGxpbmVBdHRyaWJ1dGVzLCBsb2NhdGlvbkxhYmVsc30gPVxuICAgICAgICBsYXllcnNEYXRhIHx8IHt9O1xuICAgICAgaWYgKGNpcmNsZUF0dHJpYnV0ZXMgJiYgbGluZUF0dHJpYnV0ZXMpIHtcbiAgICAgICAgY29uc3QgZmxvd21hcENvbG9ycyA9IGdldEZsb3dtYXBDb2xvcnModGhpcy5fZ2V0U2V0dGluZ3NTdGF0ZSgpKTtcbiAgICAgICAgY29uc3Qgb3V0bGluZUNvbG9yID0gY29sb3JBc1JnYmEoXG4gICAgICAgICAgZmxvd21hcENvbG9ycy5vdXRsaW5lQ29sb3IgfHwgKHRoaXMucHJvcHMuZGFya01vZGUgPyAnIzAwMCcgOiAnI2ZmZicpLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjb21tb25MaW5lTGF5ZXJQcm9wcyA9IHtcbiAgICAgICAgICBkYXRhOiBsaW5lQXR0cmlidXRlcyxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAuLi50aGlzLnByb3BzLnBhcmFtZXRlcnMsXG4gICAgICAgICAgICAvLyBwcmV2ZW50IHotZmlnaHRpbmcgYXQgbm9uLXplcm8gYmVhcmluZy9waXRjaFxuICAgICAgICAgICAgZGVwdGhUZXN0OiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5hbmltYXRpb25FbmFibGVkKSB7XG4gICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBuZXcgQW5pbWF0ZWRGbG93TGluZXNMYXllcih7XG4gICAgICAgICAgICAgIC4uLnRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyh7XG4gICAgICAgICAgICAgICAgLi4uY29tbW9uTGluZUxheWVyUHJvcHMsXG4gICAgICAgICAgICAgICAgaWQ6ICdhbmltYXRlZC1mbG93LWxpbmVzJyxcbiAgICAgICAgICAgICAgICBkcmF3T3V0bGluZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgdGhpY2tuZXNzVW5pdDogMjAsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXllcnMucHVzaChcbiAgICAgICAgICAgIG5ldyBGbG93TGluZXNMYXllcih7XG4gICAgICAgICAgICAgIC4uLnRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyh7XG4gICAgICAgICAgICAgICAgLi4uY29tbW9uTGluZUxheWVyUHJvcHMsXG4gICAgICAgICAgICAgICAgaWQ6ICdmbG93LWxpbmVzJyxcbiAgICAgICAgICAgICAgICBkcmF3T3V0bGluZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvdXRsaW5lQ29sb3I6IG91dGxpbmVDb2xvcixcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGxheWVycy5wdXNoKFxuICAgICAgICAgIG5ldyBGbG93Q2lyY2xlc0xheWVyKFxuICAgICAgICAgICAgdGhpcy5nZXRTdWJMYXllclByb3BzKHtcbiAgICAgICAgICAgICAgaWQ6ICdjaXJjbGVzJyxcbiAgICAgICAgICAgICAgZGF0YTogY2lyY2xlQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgZW1wdHlDb2xvcjogdGhpcy5wcm9wcy5kYXJrTW9kZVxuICAgICAgICAgICAgICAgID8gWzAsIDAsIDAsIDI1NV1cbiAgICAgICAgICAgICAgICA6IFsyNTUsIDI1NSwgMjU1LCAyNTVdLFxuICAgICAgICAgICAgICBvdXRsaW5lRW1wdHlNaXg6IDAuNCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChoaWdobGlnaHRlZE9iamVjdCkge1xuICAgICAgICAgIHN3aXRjaCAoaGlnaGxpZ2h0ZWRPYmplY3QudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBIaWdobGlnaHRUeXBlLkxPQ0FUSU9OOlxuICAgICAgICAgICAgICBsYXllcnMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgU2NhdHRlcnBsb3RMYXllcih7XG4gICAgICAgICAgICAgICAgICAuLi50aGlzLmdldFN1YkxheWVyUHJvcHMoe1xuICAgICAgICAgICAgICAgICAgICBpZDogJ2xvY2F0aW9uLWhpZ2hsaWdodCcsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IFtoaWdobGlnaHRlZE9iamVjdF0sXG4gICAgICAgICAgICAgICAgICAgIHBpY2thYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYW50aWFsaWFzaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBmaWxsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGhVbml0czogJ3BpeGVscycsXG4gICAgICAgICAgICAgICAgICAgIGdldExpbmVXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgcmFkaXVzVW5pdHM6ICdwaXhlbHMnLFxuICAgICAgICAgICAgICAgICAgICBnZXRSYWRpdXM6IChkOiBIaWdobGlnaHRlZExvY2F0aW9uT2JqZWN0KSA9PiBkLnJhZGl1cyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0TGluZUNvbG9yOiBjb2xvckFzUmdiYSh0aGlzLnByb3BzLmhpZ2hsaWdodENvbG9yKSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0UG9zaXRpb246IChkOiBIaWdobGlnaHRlZExvY2F0aW9uT2JqZWN0KSA9PiBkLmNvb3JkcyxcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgSGlnaGxpZ2h0VHlwZS5GTE9XOlxuICAgICAgICAgICAgICBsYXllcnMucHVzaChcbiAgICAgICAgICAgICAgICBuZXcgRmxvd0xpbmVzTGF5ZXIoe1xuICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXRTdWJMYXllclByb3BzKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICdmbG93LWhpZ2hsaWdodCcsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGhpZ2hsaWdodGVkT2JqZWN0LmxpbmVBdHRyaWJ1dGVzLFxuICAgICAgICAgICAgICAgICAgICBkcmF3T3V0bGluZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGlja2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBvdXRsaW5lQ29sb3I6IGNvbG9yQXNSZ2JhKHRoaXMucHJvcHMuaGlnaGxpZ2h0Q29sb3IpLFxuICAgICAgICAgICAgICAgICAgICBvdXRsaW5lVGhpY2tuZXNzOiAxLFxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxvY2F0aW9uTGFiZWxzKSB7XG4gICAgICAgIGxheWVycy5wdXNoKFxuICAgICAgICAgIG5ldyBUZXh0TGF5ZXIoXG4gICAgICAgICAgICB0aGlzLmdldFN1YkxheWVyUHJvcHMoe1xuICAgICAgICAgICAgICBpZDogJ2xvY2F0aW9uLWxhYmVscycsXG4gICAgICAgICAgICAgIGRhdGE6IGxvY2F0aW9uTGFiZWxzLFxuICAgICAgICAgICAgICBtYXhXaWR0aDogMTAwMCxcbiAgICAgICAgICAgICAgcGlja2FibGU6IGZhbHNlLFxuICAgICAgICAgICAgICBmb250RmFtaWx5OiAnSGVsdmV0aWNhJyxcbiAgICAgICAgICAgICAgZ2V0UGl4ZWxPZmZzZXQ6IChkOiBzdHJpbmcsIHtpbmRleH06IHtpbmRleDogbnVtYmVyfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBnZXRPdXRlckNpcmNsZVJhZGl1c0J5SW5kZXgoY2lyY2xlQXR0cmlidXRlcywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBbMCwgciArIDVdO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBnZXRQb3NpdGlvbjogKGQ6IHN0cmluZywge2luZGV4fToge2luZGV4OiBudW1iZXJ9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zID0gZ2V0TG9jYXRpb25Db29yZHNCeUluZGV4KGNpcmNsZUF0dHJpYnV0ZXMsIGluZGV4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9zO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBnZXRUZXh0OiAoZDogc3RyaW5nKSA9PiBkLFxuICAgICAgICAgICAgICBnZXRTaXplOiAxMCxcbiAgICAgICAgICAgICAgZ2V0Q29sb3I6IFsyNTUsIDI1NSwgMjU1LCAyNTVdLFxuICAgICAgICAgICAgICBnZXRBbmdsZTogMCxcbiAgICAgICAgICAgICAgZ2V0VGV4dEFuY2hvcjogJ21pZGRsZScsXG4gICAgICAgICAgICAgIGdldEFsaWdubWVudEJhc2VsaW5lOiAndG9wJyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxheWVycztcbiAgfVxufVxuXG5mdW5jdGlvbiBwaWNrVmlld3BvcnRQcm9wcyh2aWV3cG9ydDogUmVjb3JkPHN0cmluZywgYW55Pik6IFZpZXdwb3J0UHJvcHMge1xuICBjb25zdCB7d2lkdGgsIGhlaWdodCwgbG9uZ2l0dWRlLCBsYXRpdHVkZSwgem9vbSwgcGl0Y2gsIGJlYXJpbmd9ID0gdmlld3BvcnQ7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGxvbmdpdHVkZSxcbiAgICBsYXRpdHVkZSxcbiAgICB6b29tLFxuICAgIHBpdGNoLFxuICAgIGJlYXJpbmcsXG4gIH07XG59XG4iXX0=
385
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxvd21hcExheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0Zsb3dtYXBMYXllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsV0FBVyxFQUtYLDRCQUE0QixFQUM1QixnQkFBZ0IsRUFDaEIsMkJBQTJCLEVBQzNCLHdCQUF3QixFQUN4QixhQUFhLEVBQ2IscUJBQXFCLEVBRXJCLHdCQUF3QixFQUV4Qix5QkFBeUIsR0FFMUIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLHNCQUFzQixNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUlMLFdBQVcsR0FDWixNQUFNLFNBQVMsQ0FBQztBQTRCakIsTUFBTSxnQ0FBZ0MsR0FBYTtJQUNqRCxRQUFRO0lBQ1IsdUJBQXVCO0lBQ3ZCLHVCQUF1QjtJQUN2Qix1QkFBdUI7SUFDdkIsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsYUFBYTtJQUNiLG9CQUFvQjtJQUNwQixnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLFlBQVk7SUFDWixhQUFhO0lBQ2IsZ0JBQWdCO0lBQ2hCLHVCQUF1QjtDQUN4QixDQUFDO0FBRUYsSUFBSyxhQUdKO0FBSEQsV0FBSyxhQUFhO0lBQ2hCLHNDQUFxQixDQUFBO0lBQ3JCLDhCQUFhLENBQUE7QUFDZixDQUFDLEVBSEksYUFBYSxLQUFiLGFBQWEsUUFHakI7QUF5QkQsTUFBTSxDQUFDLE9BQU8sT0FBTyxZQUFtQixTQUFRLGNBQWM7SUFtQjVELFlBQW1C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QUFRO1FBQ1IsSUFBSTtRQUNKLEtBQUs7UUFDTCxPQUFPO0tBQ1IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjIgRmxvd21hcEJsdWVcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKi9cbmltcG9ydCB7Q29tcG9zaXRlTGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2NvcmUnO1xuaW1wb3J0IHtTY2F0dGVycGxvdExheWVyLCBUZXh0TGF5ZXJ9IGZyb20gJ0BkZWNrLmdsL2xheWVycyc7XG5pbXBvcnQge1xuICBjb2xvckFzUmdiYSxcbiAgRmxvd0xpbmVzTGF5ZXJBdHRyaWJ1dGVzLFxuICBGbG93bWFwRGF0YSxcbiAgRmxvd21hcERhdGFBY2Nlc3NvcnMsXG4gIEZsb3dtYXBEYXRhUHJvdmlkZXIsXG4gIGdldEZsb3dMaW5lQXR0cmlidXRlc0J5SW5kZXgsXG4gIGdldEZsb3dtYXBDb2xvcnMsXG4gIGdldE91dGVyQ2lyY2xlUmFkaXVzQnlJbmRleCxcbiAgZ2V0TG9jYXRpb25Db29yZHNCeUluZGV4LFxuICBpc0Zsb3dtYXBEYXRhLFxuICBpc0Zsb3dtYXBEYXRhUHJvdmlkZXIsXG4gIExheWVyc0RhdGEsXG4gIExvY2FsRmxvd21hcERhdGFQcm92aWRlcixcbiAgVmlld3BvcnRQcm9wcyxcbiAgRmxvd21hcEFnZ3JlZ2F0ZUFjY2Vzc29ycyxcbiAgRmlsdGVyU3RhdGUsXG59IGZyb20gJ0BmbG93bWFwLmdsL2RhdGEnO1xuaW1wb3J0IEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXIgZnJvbSAnLi9BbmltYXRlZEZsb3dMaW5lc0xheWVyJztcbmltcG9ydCBGbG93Q2lyY2xlc0xheWVyIGZyb20gJy4vRmxvd0NpcmNsZXNMYXllcic7XG5pbXBvcnQgRmxvd0xpbmVzTGF5ZXIgZnJvbSAnLi9GbG93TGluZXNMYXllcic7XG5pbXBvcnQge1xuICBGbG93bWFwTGF5ZXJQaWNraW5nSW5mbyxcbiAgTGF5ZXJQcm9wcyxcbiAgUGlja2luZ0luZm8sXG4gIFBpY2tpbmdUeXBlLFxufSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgRmxvd21hcExheWVyUHJvcHM8TCwgRj4gPSB7XG4gIGRhdGE/OiBGbG93bWFwRGF0YTxMLCBGPjtcbiAgZGF0YVByb3ZpZGVyPzogRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPjtcbiAgZmlsdGVyPzogRmlsdGVyU3RhdGU7XG4gIGxvY2F0aW9uVG90YWxzRW5hYmxlZD86IGJvb2xlYW47XG4gIGxvY2F0aW9uTGFiZWxzRW5hYmxlZD86IGJvb2xlYW47XG4gIGFkYXB0aXZlU2NhbGVzRW5hYmxlZD86IGJvb2xlYW47XG4gIGFuaW1hdGlvbkVuYWJsZWQ/OiBib29sZWFuO1xuICBjbHVzdGVyaW5nRW5hYmxlZD86IGJvb2xlYW47XG4gIGNsdXN0ZXJpbmdMZXZlbD86IG51bWJlcjtcbiAgZmFkZUVuYWJsZWQ/OiBib29sZWFuO1xuICBmYWRlT3BhY2l0eUVuYWJsZWQ/OiBib29sZWFuO1xuICBjbHVzdGVyaW5nQXV0bz86IGJvb2xlYW47XG4gIGRhcmtNb2RlPzogYm9vbGVhbjtcbiAgZmFkZUFtb3VudD86IG51bWJlcjtcbiAgY29sb3JTY2hlbWU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgaGlnaGxpZ2h0Q29sb3I/OiBzdHJpbmcgfCBudW1iZXJbXTtcbiAgbWF4VG9wRmxvd3NEaXNwbGF5TnVtPzogbnVtYmVyO1xuICBvbkhvdmVyPzogKFxuICAgIGluZm86IEZsb3dtYXBMYXllclBpY2tpbmdJbmZvPEwsIEY+IHwgdW5kZWZpbmVkLFxuICAgIGV2ZW50OiBTb3VyY2VFdmVudCxcbiAgKSA9PiB2b2lkO1xuICBvbkNsaWNrPzogKGluZm86IEZsb3dtYXBMYXllclBpY2tpbmdJbmZvPEwsIEY+LCBldmVudDogU291cmNlRXZlbnQpID0+IHZvaWQ7XG59ICYgUGFydGlhbDxGbG93bWFwRGF0YUFjY2Vzc29yczxMLCBGPj4gJlxuICBMYXllclByb3BzO1xuXG5jb25zdCBQUk9QU19UT19DQVVTRV9MQVlFUl9EQVRBX1VQREFURTogc3RyaW5nW10gPSBbXG4gICdmaWx0ZXInLFxuICAnbG9jYXRpb25Ub3RhbHNFbmFibGVkJyxcbiAgJ2xvY2F0aW9uTGFiZWxzRW5hYmxlZCcsXG4gICdhZGFwdGl2ZVNjYWxlc0VuYWJsZWQnLFxuICAnYW5pbWF0aW9uRW5hYmxlZCcsXG4gICdjbHVzdGVyaW5nRW5hYmxlZCcsXG4gICdjbHVzdGVyaW5nTGV2ZWwnLFxuICAnZmFkZUVuYWJsZWQnLFxuICAnZmFkZU9wYWNpdHlFbmFibGVkJyxcbiAgJ2NsdXN0ZXJpbmdBdXRvJyxcbiAgJ2RhcmtNb2RlJyxcbiAgJ2ZhZGVBbW91bnQnLFxuICAnY29sb3JTY2hlbWUnLFxuICAnaGlnaGxpZ2h0Q29sb3InLFxuICAnbWF4VG9wRmxvd3NEaXNwbGF5TnVtJyxcbl07XG5cbmVudW0gSGlnaGxpZ2h0VHlwZSB7XG4gIExPQ0FUSU9OID0gJ2xvY2F0aW9uJyxcbiAgRkxPVyA9ICdmbG93Jyxcbn1cblxudHlwZSBIaWdobGlnaHRlZExvY2F0aW9uT2JqZWN0ID0ge1xuICB0eXBlOiBIaWdobGlnaHRUeXBlLkxPQ0FUSU9OO1xuICBjb29yZHM6IFtudW1iZXIsIG51bWJlcl07XG4gIHJhZGl1czogbnVtYmVyO1xufTtcblxudHlwZSBIaWdobGlnaHRlZEZsb3dPYmplY3QgPSB7XG4gIHR5cGU6IEhpZ2hsaWdodFR5cGUuRkxPVztcbiAgbGluZUF0dHJpYnV0ZXM6IEZsb3dMaW5lc0xheWVyQXR0cmlidXRlcztcbn07XG5cbnR5cGUgSGlnaGxpZ2h0ZWRPYmplY3QgPSBIaWdobGlnaHRlZExvY2F0aW9uT2JqZWN0IHwgSGlnaGxpZ2h0ZWRGbG93T2JqZWN0O1xuXG50eXBlIFN0YXRlPEwsIEY+ID0ge1xuICBhY2Nlc3NvcnM6IEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnM8TCwgRj47XG4gIGRhdGFQcm92aWRlcjogRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPjtcbiAgbGF5ZXJzRGF0YTogTGF5ZXJzRGF0YSB8IHVuZGVmaW5lZDtcbiAgaGlnaGxpZ2h0ZWRPYmplY3Q6IEhpZ2hsaWdodGVkT2JqZWN0IHwgdW5kZWZpbmVkO1xuICBwaWNraW5nSW5mbzogRmxvd21hcExheWVyUGlja2luZ0luZm88TCwgRj4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBTb3VyY2VFdmVudCA9IHtzcmNFdmVudDogTW91c2VFdmVudH07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZsb3dtYXBMYXllcjxMLCBGPiBleHRlbmRzIENvbXBvc2l0ZUxheWVyIHtcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBkYXJrTW9kZTogdHJ1ZSxcbiAgICBmYWRlQW1vdW50OiA1MCxcbiAgICBsb2NhdGlvblRvdGFsc0VuYWJsZWQ6IHRydWUsXG4gICAgbG9jYXRpb25MYWJlbHNFbmFibGVkOiBmYWxzZSxcbiAgICBhbmltYXRpb25FbmFibGVkOiBmYWxzZSxcbiAgICBjbHVzdGVyaW5nRW5hYmxlZDogdHJ1ZSxcbiAgICBmYWRlRW5hYmxlZDogdHJ1ZSxcbiAgICBmYWRlT3BhY2l0eUVuYWJsZWQ6IGZhbHNlLFxuICAgIGNsdXN0ZXJpbmdBdXRvOiB0cnVlLFxuICAgIGNsdXN0ZXJpbmdMZXZlbDogdW5kZWZpbmVkLFxuICAgIGFkYXB0aXZlU2NhbGVzRW5hYmxlZDogdHJ1ZSxcbiAgICBjb2xvclNjaGVtZTogJ1RlYWwnLFxuICAgIGhpZ2hsaWdodENvbG9yOiAnb3JhbmdlJyxcbiAgICBtYXhUb3BGbG93c0Rpc3BsYXlOdW06IDUwMDAsXG4gIH07XG4gIHN0YXRlOiBTdGF0ZTxMLCBGPiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IEZsb3dtYXBMYXllclByb3BzPEwsIEY+KSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBvbkhvdmVyOiAoaW5mbzogUGlja2luZ0luZm88YW55PiwgZXZlbnQ6IFNvdXJjZUV2ZW50KSA9PiB7XG4gICAgICAgIC8vIFRPRE86IGlmIChsYXN0SG92ZXJFdmVudFN0YXJ0VGltZVJlZiA+IHN0YXJ0VGltZSkge1xuICAgICAgICAvLyAgIC8vIFNraXBwaW5nLCBiZWNhdXNlIHRoaXMgaXMgbm90IHRoZSBsYXRlc3QgaG92ZXIgZXZlbnRcbiAgICAgICAgLy8gICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aGlnaGxpZ2h0ZWRPYmplY3Q6IHRoaXMuX2dldEhpZ2hsaWdodGVkT2JqZWN0KGluZm8pfSk7XG4gICAgICAgIGNvbnN0IHtvbkhvdmVyfSA9IHByb3BzO1xuICAgICAgICBpZiAob25Ib3Zlcikge1xuICAgICAgICAgIHRoaXMuX2dldEZsb3dtYXBMYXllclBpY2tpbmdJbmZvKGluZm8pLnRoZW4oKGluZm8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe3BpY2tpbmdJbmZvOiBpbmZvfSk7XG4gICAgICAgICAgICBvbkhvdmVyKGluZm8sIGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uQ2xpY2s6IChpbmZvOiBQaWNraW5nSW5mbzxhbnk+LCBldmVudDogU291cmNlRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qge29uQ2xpY2t9ID0gcHJvcHM7XG4gICAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgICAgdGhpcy5fZ2V0Rmxvd21hcExheWVyUGlja2luZ0luZm8oaW5mbykudGhlbigoaW5mbykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7cGlja2luZ0luZm86IGluZm99KTtcbiAgICAgICAgICAgIGlmIChpbmZvKSB7XG4gICAgICAgICAgICAgIG9uQ2xpY2soaW5mbywgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBhY2Nlc3NvcnM6IG5ldyBGbG93bWFwQWdncmVnYXRlQWNjZXNzb3JzPEwsIEY+KHRoaXMucHJvcHMpLFxuICAgICAgZGF0YVByb3ZpZGVyOiB0aGlzLl9nZXRPck1ha2VEYXRhUHJvdmlkZXIoKSxcbiAgICAgIGxheWVyc0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgIGhpZ2hsaWdodGVkT2JqZWN0OiB1bmRlZmluZWQsXG4gICAgICBwaWNraW5nSW5mbzogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBnZXRQaWNraW5nSW5mbyh7aW5mb306IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICAvLyBUaGlzIGlzIGZvciBvbkhvdmVyIGV2ZW50IGhhbmRsZXJzIHNldCBvbiB0aGUgPERlY2tHTD4gY29tcG9uZW50XG4gICAgaWYgKCFpbmZvLm9iamVjdCkge1xuICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5zdGF0ZT8ucGlja2luZ0luZm8/Lm9iamVjdDtcbiAgICAgIGlmIChvYmplY3QpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5pbmZvLFxuICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICBwaWNrZWQ6IHRydWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbmZvO1xuICB9XG5cbiAgLy8gcHJpdmF0ZSBfdXBkYXRlQWNjZXNzb3JzKCkge1xuICAvLyAgIHRoaXMuc3RhdGU/LmRhdGFQcm92aWRlcj8uc2V0QWNjZXNzb3JzKHRoaXMucHJvcHMpO1xuICAvLyAgIHRoaXMuc2V0U3RhdGUoe2FjY2Vzc29yczogbmV3IEZsb3dtYXBBZ2dyZWdhdGVBY2Nlc3NvcnModGhpcy5wcm9wcyl9KTtcbiAgLy8gfVxuXG4gIHByaXZhdGUgX2dldE9yTWFrZURhdGFQcm92aWRlcigpIHtcbiAgICBjb25zdCB7ZGF0YSwgZGF0YVByb3ZpZGVyfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKGlzRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPihkYXRhUHJvdmlkZXIpKSB7XG4gICAgICByZXR1cm4gZGF0YVByb3ZpZGVyO1xuICAgIH0gZWxzZSBpZiAoaXNGbG93bWFwRGF0YTxMLCBGPihkYXRhKSkge1xuICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IExvY2FsRmxvd21hcERhdGFQcm92aWRlcjxMLCBGPih0aGlzLnByb3BzKTtcbiAgICAgIGRhdGFQcm92aWRlci5zZXRGbG93bWFwRGF0YShkYXRhKTtcbiAgICAgIHJldHVybiBkYXRhUHJvdmlkZXI7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdGbG93bWFwTGF5ZXI6IGRhdGEgbXVzdCBiZSBhIEZsb3dtYXBEYXRhUHJvdmlkZXIgb3IgRmxvd21hcERhdGEnLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVEYXRhUHJvdmlkZXIoKSB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7ZGF0YVByb3ZpZGVyOiB0aGlzLl9nZXRPck1ha2VEYXRhUHJvdmlkZXIoKX0pO1xuICB9XG5cbiAgc2hvdWxkVXBkYXRlU3RhdGUocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYm9vbGVhbiB7XG4gICAgY29uc3Qge2NoYW5nZUZsYWdzfSA9IHBhcmFtcztcbiAgICAvLyBpZiAodGhpcy5fdmlld3BvcnRDaGFuZ2VkKCkpIHtcbiAgICAvLyAgIHJldHVybiB0cnVlO1xuICAgIC8vIH1cbiAgICBpZiAoY2hhbmdlRmxhZ3Mudmlld3BvcnRDaGFuZ2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnNob3VsZFVwZGF0ZVN0YXRlKHBhcmFtcyk7XG4gICAgLy8gVE9ETzogYmUgc21hcnRlciBvbiB3aGVuIHRvIHVwZGF0ZVxuICAgIC8vIChlLmcuIGlnbm9yZSB2aWV3cG9ydCBjaGFuZ2VzIHdoZW4gYWRhcHRpdmVTY2FsZXNFbmFibGVkIGFuZCBjbHVzdGVyaW5nIGFyZSBmYWxzZSlcbiAgfVxuXG4gIHVwZGF0ZVN0YXRlKHtvbGRQcm9wcywgcHJvcHMsIGNoYW5nZUZsYWdzfTogUmVjb3JkPHN0cmluZywgYW55Pik6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VGbGFncy5wcm9wc0NoYW5nZWQpIHtcbiAgICAgIC8vIHRoaXMuX3VwZGF0ZUFjY2Vzc29ycygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlRmxhZ3MuZGF0YUNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZURhdGFQcm92aWRlcigpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlRmxhZ3Mudmlld3BvcnRDaGFuZ2VkIHx8IGNoYW5nZUZsYWdzLmRhdGFDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtoaWdobGlnaHRlZE9iamVjdDogdW5kZWZpbmVkfSk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgY2hhbmdlRmxhZ3Mudmlld3BvcnRDaGFuZ2VkIHx8XG4gICAgICBjaGFuZ2VGbGFncy5kYXRhQ2hhbmdlZCB8fFxuICAgICAgKGNoYW5nZUZsYWdzLnByb3BzQ2hhbmdlZCAmJlxuICAgICAgICBQUk9QU19UT19DQVVTRV9MQVlFUl9EQVRBX1VQREFURS5zb21lKFxuICAgICAgICAgIChwcm9wKSA9PiBvbGRQcm9wc1twcm9wXSAhPT0gcHJvcHNbcHJvcF0sXG4gICAgICAgICkpXG4gICAgKSB7XG4gICAgICBjb25zdCB7ZGF0YVByb3ZpZGVyfSA9IHRoaXMuc3RhdGUgfHwge307XG4gICAgICBpZiAoZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgIGRhdGFQcm92aWRlci5zZXRGbG93bWFwU3RhdGUodGhpcy5fZ2V0Rmxvd21hcFN0YXRlKCkpO1xuICAgICAgICBkYXRhUHJvdmlkZXIudXBkYXRlTGF5ZXJzRGF0YSgobGF5ZXJzRGF0YTogTGF5ZXJzRGF0YSB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2xheWVyc0RhdGEsIGhpZ2hsaWdodGVkT2JqZWN0OiB1bmRlZmluZWR9KTtcbiAgICAgICAgfSwgY2hhbmdlRmxhZ3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFNldHRpbmdzU3RhdGUoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbG9jYXRpb25Ub3RhbHNFbmFibGVkLFxuICAgICAgbG9jYXRpb25MYWJlbHNFbmFibGVkLFxuICAgICAgYWRhcHRpdmVTY2FsZXNFbmFibGVkLFxuICAgICAgYW5pbWF0aW9uRW5hYmxlZCxcbiAgICAgIGNsdXN0ZXJpbmdFbmFibGVkLFxuICAgICAgY2x1c3RlcmluZ0xldmVsLFxuICAgICAgZmFkZUVuYWJsZWQsXG4gICAgICBmYWRlT3BhY2l0eUVuYWJsZWQsXG4gICAgICBjbHVzdGVyaW5nQXV0byxcbiAgICAgIGRhcmtNb2RlLFxuICAgICAgZmFkZUFtb3VudCxcbiAgICAgIGNvbG9yU2NoZW1lLFxuICAgICAgaGlnaGxpZ2h0Q29sb3IsXG4gICAgICBtYXhUb3BGbG93c0Rpc3BsYXlOdW0sXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2F0aW9uVG90YWxzRW5hYmxlZCxcbiAgICAgIGxvY2F0aW9uTGFiZWxzRW5hYmxlZCxcbiAgICAgIGFkYXB0aXZlU2NhbGVzRW5hYmxlZCxcbiAgICAgIGFuaW1hdGlvbkVuYWJsZWQsXG4gICAgICBjbHVzdGVyaW5nRW5hYmxlZCxcbiAgICAgIGNsdXN0ZXJpbmdMZXZlbCxcbiAgICAgIGZhZGVFbmFibGVkLFxuICAgICAgZmFkZU9wYWNpdHlFbmFibGVkLFxuICAgICAgY2x1c3RlcmluZ0F1dG8sXG4gICAgICBkYXJrTW9kZSxcbiAgICAgIGZhZGVBbW91bnQsXG4gICAgICBjb2xvclNjaGVtZSxcbiAgICAgIGhpZ2hsaWdodENvbG9yLFxuICAgICAgbWF4VG9wRmxvd3NEaXNwbGF5TnVtLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9nZXRGbG93bWFwU3RhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZpZXdwb3J0OiBwaWNrVmlld3BvcnRQcm9wcyh0aGlzLmNvbnRleHQudmlld3BvcnQpLFxuICAgICAgZmlsdGVyOiB0aGlzLnByb3BzLmZpbHRlcixcbiAgICAgIHNldHRpbmdzOiB0aGlzLl9nZXRTZXR0aW5nc1N0YXRlKCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2dldEZsb3dtYXBMYXllclBpY2tpbmdJbmZvKFxuICAgIGluZm86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICk6IFByb21pc2U8Rmxvd21hcExheWVyUGlja2luZ0luZm88TCwgRj4gfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB7aW5kZXgsIHNvdXJjZUxheWVyfSA9IGluZm87XG4gICAgY29uc3Qge2RhdGFQcm92aWRlciwgYWNjZXNzb3JzfSA9IHRoaXMuc3RhdGUgfHwge307XG4gICAgaWYgKCFkYXRhUHJvdmlkZXIgfHwgIWFjY2Vzc29ycykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgY29tbW9uSW5mbyA9IHtcbiAgICAgIC4uLmluZm8sXG4gICAgICBwaWNrZWQ6IGluZm8ucGlja2VkLFxuICAgICAgbGF5ZXI6IGluZm8ubGF5ZXIsXG4gICAgICBpbmRleDogaW5mby5pbmRleCxcbiAgICAgIHg6IGluZm8ueCxcbiAgICAgIHk6IGluZm8ueSxcbiAgICAgIGNvb3JkaW5hdGU6IGluZm8uY29vcmRpbmF0ZSxcbiAgICAgIGV2ZW50OiBpbmZvLmV2ZW50LFxuICAgIH07XG4gICAgaWYgKFxuICAgICAgc291cmNlTGF5ZXIgaW5zdGFuY2VvZiBGbG93TGluZXNMYXllciB8fFxuICAgICAgc291cmNlTGF5ZXIgaW5zdGFuY2VvZiBBbmltYXRlZEZsb3dMaW5lc0xheWVyXG4gICAgKSB7XG4gICAgICBjb25zdCBmbG93ID1cbiAgICAgICAgaW5kZXggPT09IC0xID8gdW5kZWZpbmVkIDogYXdhaXQgZGF0YVByb3ZpZGVyLmdldEZsb3dCeUluZGV4KGluZGV4KTtcbiAgICAgIGlmIChmbG93KSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IGF3YWl0IGRhdGFQcm92aWRlci5nZXRMb2NhdGlvbkJ5SWQoXG4gICAgICAgICAgYWNjZXNzb3JzLmdldEZsb3dPcmlnaW5JZChmbG93KSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGVzdCA9IGF3YWl0IGRhdGFQcm92aWRlci5nZXRMb2NhdGlvbkJ5SWQoXG4gICAgICAgICAgYWNjZXNzb3JzLmdldEZsb3dEZXN0SWQoZmxvdyksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcmlnaW4gJiYgZGVzdCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb21tb25JbmZvLFxuICAgICAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgICAgIHR5cGU6IFBpY2tpbmdUeXBlLkZMT1csXG4gICAgICAgICAgICAgIGZsb3csXG4gICAgICAgICAgICAgIG9yaWdpbjogb3JpZ2luLFxuICAgICAgICAgICAgICBkZXN0OiBkZXN0LFxuICAgICAgICAgICAgICBjb3VudDogYWNjZXNzb3JzLmdldEZsb3dNYWduaXR1ZGUoZmxvdyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNvdXJjZUxheWVyIGluc3RhbmNlb2YgRmxvd0NpcmNsZXNMYXllcikge1xuICAgICAgY29uc3QgbG9jYXRpb24gPVxuICAgICAgICBpbmRleCA9PT0gLTEgPyB1bmRlZmluZWQgOiBhd2FpdCBkYXRhUHJvdmlkZXIuZ2V0TG9jYXRpb25CeUluZGV4KGluZGV4KTtcblxuICAgICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGlkID0gYWNjZXNzb3JzLmdldExvY2F0aW9uSWQobG9jYXRpb24pO1xuICAgICAgICBjb25zdCBuYW1lID0gYWNjZXNzb3JzLmdldExvY2F0aW9uTmFtZShsb2NhdGlvbik7XG4gICAgICAgIGNvbnN0IHRvdGFscyA9IGF3YWl0IGRhdGFQcm92aWRlci5nZXRUb3RhbHNGb3JMb2NhdGlvbihpZCk7XG4gICAgICAgIGNvbnN0IHtjaXJjbGVBdHRyaWJ1dGVzfSA9IHRoaXMuc3RhdGU/LmxheWVyc0RhdGEgfHwge307XG4gICAgICAgIGlmICh0b3RhbHMgJiYgY2lyY2xlQXR0cmlidXRlcykge1xuICAgICAgICAgIGNvbnN0IGNpcmNsZVJhZGl1cyA9IGdldE91dGVyQ2lyY2xlUmFkaXVzQnlJbmRleChcbiAgICAgICAgICAgIGNpcmNsZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICBpbmZvLmluZGV4LFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbW1vbkluZm8sXG4gICAgICAgICAgICBvYmplY3Q6IHtcbiAgICAgICAgICAgICAgdHlwZTogUGlja2luZ1R5cGUuTE9DQVRJT04sXG4gICAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdG90YWxzLFxuICAgICAgICAgICAgICBjaXJjbGVSYWRpdXM6IGNpcmNsZVJhZGl1cyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIF9nZXRIaWdobGlnaHRlZE9iamVjdChcbiAgICBpbmZvOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICApOiBIaWdobGlnaHRlZE9iamVjdCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qge2luZGV4LCBzb3VyY2VMYXllcn0gPSBpbmZvO1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKFxuICAgICAgc291cmNlTGF5ZXIgaW5zdGFuY2VvZiBGbG93TGluZXNMYXllciB8fFxuICAgICAgc291cmNlTGF5ZXIgaW5zdGFuY2VvZiBBbmltYXRlZEZsb3dMaW5lc0xheWVyXG4gICAgKSB7XG4gICAgICBjb25zdCB7bGluZUF0dHJpYnV0ZXN9ID0gdGhpcy5zdGF0ZT8ubGF5ZXJzRGF0YSB8fCB7fTtcbiAgICAgIGlmIChsaW5lQXR0cmlidXRlcykge1xuICAgICAgICBsZXQgYXR0cnMgPSBnZXRGbG93TGluZUF0dHJpYnV0ZXNCeUluZGV4KGxpbmVBdHRyaWJ1dGVzLCBpbmRleCk7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmZhZGVPcGFjaXR5RW5hYmxlZCkge1xuICAgICAgICAgIGF0dHJzID0ge1xuICAgICAgICAgICAgLi4uYXR0cnMsXG4gICAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICAgIC4uLmF0dHJzLmF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIGdldENvbG9yOiB7XG4gICAgICAgICAgICAgICAgLi4uYXR0cnMuYXR0cmlidXRlcy5nZXRDb2xvcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgICAgICAgICAgICAgLi4uYXR0cnMuYXR0cmlidXRlcy5nZXRDb2xvci52YWx1ZS5zbGljZSgwLCAzKSxcbiAgICAgICAgICAgICAgICAgIDI1NSwgLy8gdGhlIGhpZ2hsaWdodCBjb2xvciBzaG91bGQgYmUgYWx3YXlzIG9wYXF1ZVxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogSGlnaGxpZ2h0VHlwZS5GTE9XLFxuICAgICAgICAgIGxpbmVBdHRyaWJ1dGVzOiBhdHRycyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNvdXJjZUxheWVyIGluc3RhbmNlb2YgRmxvd0NpcmNsZXNMYXllcikge1xuICAgICAgY29uc3Qge2NpcmNsZUF0dHJpYnV0ZXN9ID0gdGhpcy5zdGF0ZT8ubGF5ZXJzRGF0YSB8fCB7fTtcbiAgICAgIGlmIChjaXJjbGVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogSGlnaGxpZ2h0VHlwZS5MT0NBVElPTixcbiAgICAgICAgICBjb29yZHM6IGdldExvY2F0aW9uQ29vcmRzQnlJbmRleChjaXJjbGVBdHRyaWJ1dGVzLCBpbmRleCksXG4gICAgICAgICAgcmFkaXVzOiBnZXRPdXRlckNpcmNsZVJhZGl1c0J5SW5kZXgoY2lyY2xlQXR0cmlidXRlcywgaW5kZXgpLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmVuZGVyTGF5ZXJzKCk6IEFycmF5PGFueT4ge1xuICAgIGNvbnN0IGxheWVycyA9IFtdO1xuICAgIGlmICh0aGlzLnN0YXRlPy5sYXllcnNEYXRhKSB7XG4gICAgICBjb25zdCB7bGF5ZXJzRGF0YSwgaGlnaGxpZ2h0ZWRPYmplY3R9ID0gdGhpcy5zdGF0ZTtcbiAgICAgIGNvbnN0IHtjaXJjbGVBdHRyaWJ1dGVzLCBsaW5lQXR0cmlidXRlcywgbG9jYXRpb25MYWJlbHN9ID1cbiAgICAgICAgbGF5ZXJzRGF0YSB8fCB7fTtcbiAgICAgIGlmIChjaXJjbGVBdHRyaWJ1dGVzICYmIGxpbmVBdHRyaWJ1dGVzKSB7XG4gICAgICAgIGNvbnN0IGZsb3dtYXBDb2xvcnMgPSBnZXRGbG93bWFwQ29sb3JzKHRoaXMuX2dldFNldHRpbmdzU3RhdGUoKSk7XG4gICAgICAgIGNvbnN0IG91dGxpbmVDb2xvciA9IGNvbG9yQXNSZ2JhKFxuICAgICAgICAgIGZsb3dtYXBDb2xvcnMub3V0bGluZUNvbG9yIHx8ICh0aGlzLnByb3BzLmRhcmtNb2RlID8gJyMwMDAnIDogJyNmZmYnKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29tbW9uTGluZUxheWVyUHJvcHMgPSB7XG4gICAgICAgICAgZGF0YTogbGluZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5wcm9wcy5wYXJhbWV0ZXJzLFxuICAgICAgICAgICAgLy8gcHJldmVudCB6LWZpZ2h0aW5nIGF0IG5vbi16ZXJvIGJlYXJpbmcvcGl0Y2hcbiAgICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuYW5pbWF0aW9uRW5hYmxlZCkge1xuICAgICAgICAgIGxheWVycy5wdXNoKFxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgbmV3IEFuaW1hdGVkRmxvd0xpbmVzTGF5ZXIoe1xuICAgICAgICAgICAgICAuLi50aGlzLmdldFN1YkxheWVyUHJvcHMoe1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbkxpbmVMYXllclByb3BzLFxuICAgICAgICAgICAgICAgIGlkOiAnYW5pbWF0ZWQtZmxvdy1saW5lcycsXG4gICAgICAgICAgICAgICAgZHJhd091dGxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRoaWNrbmVzc1VuaXQ6IDIwLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICBuZXcgRmxvd0xpbmVzTGF5ZXIoe1xuICAgICAgICAgICAgICAuLi50aGlzLmdldFN1YkxheWVyUHJvcHMoe1xuICAgICAgICAgICAgICAgIC4uLmNvbW1vbkxpbmVMYXllclByb3BzLFxuICAgICAgICAgICAgICAgIGlkOiAnZmxvdy1saW5lcycsXG4gICAgICAgICAgICAgICAgZHJhd091dGxpbmU6IHRydWUsXG4gICAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBvdXRsaW5lQ29sb3IsXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBsYXllcnMucHVzaChcbiAgICAgICAgICBuZXcgRmxvd0NpcmNsZXNMYXllcihcbiAgICAgICAgICAgIHRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyh7XG4gICAgICAgICAgICAgIGlkOiAnY2lyY2xlcycsXG4gICAgICAgICAgICAgIGRhdGE6IGNpcmNsZUF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgIGVtcHR5Q29sb3I6IHRoaXMucHJvcHMuZGFya01vZGVcbiAgICAgICAgICAgICAgICA/IFswLCAwLCAwLCAyNTVdXG4gICAgICAgICAgICAgICAgOiBbMjU1LCAyNTUsIDI1NSwgMjU1XSxcbiAgICAgICAgICAgICAgb3V0bGluZUVtcHR5TWl4OiAwLjQsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICBpZiAoaGlnaGxpZ2h0ZWRPYmplY3QpIHtcbiAgICAgICAgICBzd2l0Y2ggKGhpZ2hsaWdodGVkT2JqZWN0LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgSGlnaGxpZ2h0VHlwZS5MT0NBVElPTjpcbiAgICAgICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IFNjYXR0ZXJwbG90TGF5ZXIoe1xuICAgICAgICAgICAgICAgICAgLi4udGhpcy5nZXRTdWJMYXllclByb3BzKHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICdsb2NhdGlvbi1oaWdobGlnaHQnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBbaGlnaGxpZ2h0ZWRPYmplY3RdLFxuICAgICAgICAgICAgICAgICAgICBwaWNrYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGFudGlhbGlhc2luZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsbGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbGluZVdpZHRoVW5pdHM6ICdwaXhlbHMnLFxuICAgICAgICAgICAgICAgICAgICBnZXRMaW5lV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgIHJhZGl1c1VuaXRzOiAncGl4ZWxzJyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0UmFkaXVzOiAoZDogSGlnaGxpZ2h0ZWRMb2NhdGlvbk9iamVjdCkgPT4gZC5yYWRpdXMsXG4gICAgICAgICAgICAgICAgICAgIGdldExpbmVDb2xvcjogY29sb3JBc1JnYmEodGhpcy5wcm9wcy5oaWdobGlnaHRDb2xvciksXG4gICAgICAgICAgICAgICAgICAgIGdldFBvc2l0aW9uOiAoZDogSGlnaGxpZ2h0ZWRMb2NhdGlvbk9iamVjdCkgPT4gZC5jb29yZHMsXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEhpZ2hsaWdodFR5cGUuRkxPVzpcbiAgICAgICAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgICAgICAgbmV3IEZsb3dMaW5lc0xheWVyKHtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyh7XG4gICAgICAgICAgICAgICAgICAgIGlkOiAnZmxvdy1oaWdobGlnaHQnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBoaWdobGlnaHRlZE9iamVjdC5saW5lQXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICAgICAgZHJhd091dGxpbmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHBpY2thYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZUNvbG9yOiBjb2xvckFzUmdiYSh0aGlzLnByb3BzLmhpZ2hsaWdodENvbG9yKSxcbiAgICAgICAgICAgICAgICAgICAgb3V0bGluZVRoaWNrbmVzczogMSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgIGRlcHRoVGVzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobG9jYXRpb25MYWJlbHMpIHtcbiAgICAgICAgbGF5ZXJzLnB1c2goXG4gICAgICAgICAgbmV3IFRleHRMYXllcihcbiAgICAgICAgICAgIHRoaXMuZ2V0U3ViTGF5ZXJQcm9wcyh7XG4gICAgICAgICAgICAgIGlkOiAnbG9jYXRpb24tbGFiZWxzJyxcbiAgICAgICAgICAgICAgZGF0YTogbG9jYXRpb25MYWJlbHMsXG4gICAgICAgICAgICAgIG1heFdpZHRoOiAxMDAwLFxuICAgICAgICAgICAgICBwaWNrYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdIZWx2ZXRpY2EnLFxuICAgICAgICAgICAgICBnZXRQaXhlbE9mZnNldDogKGQ6IHN0cmluZywge2luZGV4fToge2luZGV4OiBudW1iZXJ9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgciA9IGdldE91dGVyQ2lyY2xlUmFkaXVzQnlJbmRleChjaXJjbGVBdHRyaWJ1dGVzLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFswLCByICsgNV07XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGdldFBvc2l0aW9uOiAoZDogc3RyaW5nLCB7aW5kZXh9OiB7aW5kZXg6IG51bWJlcn0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3MgPSBnZXRMb2NhdGlvbkNvb3Jkc0J5SW5kZXgoY2lyY2xlQXR0cmlidXRlcywgaW5kZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBwb3M7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGdldFRleHQ6IChkOiBzdHJpbmcpID0+IGQsXG4gICAgICAgICAgICAgIGdldFNpemU6IDEwLFxuICAgICAgICAgICAgICBnZXRDb2xvcjogWzI1NSwgMjU1LCAyNTUsIDI1NV0sXG4gICAgICAgICAgICAgIGdldEFuZ2xlOiAwLFxuICAgICAgICAgICAgICBnZXRUZXh0QW5jaG9yOiAnbWlkZGxlJyxcbiAgICAgICAgICAgICAgZ2V0QWxpZ25tZW50QmFzZWxpbmU6ICd0b3AnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGF5ZXJzO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBpY2tWaWV3cG9ydFByb3BzKHZpZXdwb3J0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogVmlld3BvcnRQcm9wcyB7XG4gIGNvbnN0IHt3aWR0aCwgaGVpZ2h0LCBsb25naXR1ZGUsIGxhdGl0dWRlLCB6b29tLCBwaXRjaCwgYmVhcmluZ30gPSB2aWV3cG9ydDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgbG9uZ2l0dWRlLFxuICAgIGxhdGl0dWRlLFxuICAgIHpvb20sXG4gICAgcGl0Y2gsXG4gICAgYmVhcmluZyxcbiAgfTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowmap.gl/layers",
3
- "version": "8.0.0-alpha.23",
3
+ "version": "8.0.0-alpha.24",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "@luma.gl/constants": "^8.5.10",
19
19
  "@luma.gl/core": "^8.5.10"
20
20
  },
21
- "gitHead": "4f0825c08336c2138ce60ae4b846c68c3d2a2976",
21
+ "gitHead": "0a87fc82e22fb9181ccab4dacf8aa1a1a9f74bce",
22
22
  "publishConfig": {
23
23
  "access": "public"
24
24
  }
@@ -70,6 +70,24 @@ export type FlowmapLayerProps<L, F> = {
70
70
  } & Partial<FlowmapDataAccessors<L, F>> &
71
71
  LayerProps;
72
72
 
73
+ const PROPS_TO_CAUSE_LAYER_DATA_UPDATE: string[] = [
74
+ 'filter',
75
+ 'locationTotalsEnabled',
76
+ 'locationLabelsEnabled',
77
+ 'adaptiveScalesEnabled',
78
+ 'animationEnabled',
79
+ 'clusteringEnabled',
80
+ 'clusteringLevel',
81
+ 'fadeEnabled',
82
+ 'fadeOpacityEnabled',
83
+ 'clusteringAuto',
84
+ 'darkMode',
85
+ 'fadeAmount',
86
+ 'colorScheme',
87
+ 'highlightColor',
88
+ 'maxTopFlowsDisplayNum',
89
+ ];
90
+
73
91
  enum HighlightType {
74
92
  LOCATION = 'location',
75
93
  FLOW = 'flow',
@@ -120,10 +138,6 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
120
138
  public constructor(props: FlowmapLayerProps<L, F>) {
121
139
  super({
122
140
  ...props,
123
- dataProvider: {
124
- // To avoid deck.gl props diffing on comlink worker proxy causing an exception
125
- dataProvider: props.dataProvider,
126
- },
127
141
  onHover: (info: PickingInfo<any>, event: SourceEvent) => {
128
142
  // TODO: if (lastHoverEventStartTimeRef > startTime) {
129
143
  // // Skipping, because this is not the latest hover event
@@ -184,8 +198,8 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
184
198
 
185
199
  private _getOrMakeDataProvider() {
186
200
  const {data, dataProvider} = this.props;
187
- if (isFlowmapDataProvider<L, F>(dataProvider?.dataProvider)) {
188
- return dataProvider.dataProvider;
201
+ if (isFlowmapDataProvider<L, F>(dataProvider)) {
202
+ return dataProvider;
189
203
  } else if (isFlowmapData<L, F>(data)) {
190
204
  const dataProvider = new LocalFlowmapDataProvider<L, F>(this.props);
191
205
  dataProvider.setFlowmapData(data);
@@ -221,20 +235,22 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
221
235
  this._updateDataProvider();
222
236
  }
223
237
  if (changeFlags.viewportChanged || changeFlags.dataChanged) {
224
- this.setState({
225
- highlightedObject: undefined,
226
- });
238
+ this.setState({highlightedObject: undefined});
227
239
  }
228
240
 
229
241
  if (
230
242
  changeFlags.viewportChanged ||
231
- changeFlags.propsOrDataChanged // TODO can we ignore accessor props changes?
243
+ changeFlags.dataChanged ||
244
+ (changeFlags.propsChanged &&
245
+ PROPS_TO_CAUSE_LAYER_DATA_UPDATE.some(
246
+ (prop) => oldProps[prop] !== props[prop],
247
+ ))
232
248
  ) {
233
249
  const {dataProvider} = this.state || {};
234
250
  if (dataProvider) {
235
251
  dataProvider.setFlowmapState(this._getFlowmapState());
236
252
  dataProvider.updateLayersData((layersData: LayersData | undefined) => {
237
- this.setState({layersData});
253
+ this.setState({layersData, highlightedObject: undefined});
238
254
  }, changeFlags);
239
255
  }
240
256
  }
@@ -491,6 +507,9 @@ export default class FlowmapLayer<L, F> extends CompositeLayer {
491
507
  pickable: false,
492
508
  outlineColor: colorAsRgba(this.props.highlightColor),
493
509
  outlineThickness: 1,
510
+ parameters: {
511
+ depthTest: false,
512
+ },
494
513
  }),
495
514
  }),
496
515
  );