@esotericsoftware/spine-pixi-v8 4.2.102 → 4.2.103

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.
@@ -35,10 +35,12 @@ export declare class SpinePipe implements RenderPipe<Spine> {
35
35
  readonly name: "spine";
36
36
  };
37
37
  renderer: Renderer;
38
+ private canvasSkeletonRenderer;
38
39
  private gpuSpineData;
39
40
  private readonly _destroyRenderableBound;
40
41
  constructor(renderer: Renderer);
41
42
  validateRenderable(spine: Spine): boolean;
43
+ execute(spine: Spine): void;
42
44
  addRenderable(spine: Spine, instructionSet: InstructionSet): void;
43
45
  updateRenderable(spine: Spine): void;
44
46
  destroyRenderable(spine: Spine): void;
package/dist/SpinePipe.js CHANGED
@@ -26,8 +26,8 @@
26
26
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27
27
  * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
28
  *****************************************************************************/
29
- import { MeshAttachment, RegionAttachment } from '@esotericsoftware/spine-core';
30
- import { ExtensionType, extensions, } from 'pixi.js';
29
+ import { SkeletonRenderer as CanvasSkeletonRenderer, MeshAttachment, RegionAttachment } from '@esotericsoftware/spine-canvas';
30
+ import { ExtensionType, extensions, RendererType, } from 'pixi.js';
31
31
  import { BatchableSpineSlot } from './BatchableSpineSlot.js';
32
32
  const spineBlendModeMap = {
33
33
  0: 'normal',
@@ -47,12 +47,16 @@ export class SpinePipe {
47
47
  name: 'spine',
48
48
  };
49
49
  renderer;
50
+ canvasSkeletonRenderer;
50
51
  gpuSpineData = {};
51
52
  _destroyRenderableBound = this.destroyRenderable.bind(this);
52
53
  constructor(renderer) {
53
54
  this.renderer = renderer;
54
55
  }
55
56
  validateRenderable(spine) {
57
+ if (this.renderer.type === RendererType.CANVAS) {
58
+ return true;
59
+ }
56
60
  spine._validateAndTransformAttachments();
57
61
  // if spine attachments have changed or destroyed, we need to rebuild the batch!
58
62
  if (spine.spineAttachmentsDirty) {
@@ -80,7 +84,31 @@ export class SpinePipe {
80
84
  }
81
85
  return false;
82
86
  }
87
+ execute(spine) {
88
+ if (this.renderer.type === RendererType.CANVAS) {
89
+ const renderer = this.renderer;
90
+ const groupAlpha = ((spine.groupColorAlpha >>> 24) & 0xFF) / 255;
91
+ const contextSystem = renderer.canvasContext;
92
+ const context = contextSystem.activeContext;
93
+ context.save();
94
+ if (!this.canvasSkeletonRenderer) {
95
+ this.canvasSkeletonRenderer = new CanvasSkeletonRenderer(context);
96
+ this.canvasSkeletonRenderer.triangleRendering = true;
97
+ }
98
+ contextSystem.setContextTransform(spine.groupTransform, (renderer._roundPixels | spine._roundPixels) === 1);
99
+ const oldAlpha = spine.skeleton.color.a;
100
+ spine.skeleton.color.a *= groupAlpha;
101
+ this.canvasSkeletonRenderer.draw(spine.skeleton);
102
+ spine.skeleton.color.a = oldAlpha;
103
+ context.restore();
104
+ }
105
+ }
83
106
  addRenderable(spine, instructionSet) {
107
+ if (this.renderer.type === RendererType.CANVAS) {
108
+ this.renderer.renderPipes.batch.break(instructionSet);
109
+ instructionSet.add(spine);
110
+ return;
111
+ }
84
112
  const gpuSpine = this._getSpineData(spine);
85
113
  const batcher = this.renderer.renderPipes.batch;
86
114
  const drawOrder = spine.skeleton.drawOrder;
@@ -140,6 +168,7 @@ export class SpinePipe {
140
168
  destroy() {
141
169
  this.gpuSpineData = null;
142
170
  this.renderer = null;
171
+ this.canvasSkeletonRenderer = null;
143
172
  }
144
173
  _getSpineData(spine) {
145
174
  return this.gpuSpineData[spine.uid] || this._initMeshData(spine);
@@ -151,4 +180,4 @@ export class SpinePipe {
151
180
  }
152
181
  }
153
182
  extensions.add(SpinePipe);
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmVQaXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NwaW5lUGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hGLE9BQU8sRUFFVSxhQUFhLEVBQzdCLFVBQVUsR0FJVixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RCxNQUFNLGlCQUFpQixHQUFnQztJQUN0RCxDQUFDLEVBQUUsUUFBUTtJQUNYLENBQUMsRUFBRSxLQUFLO0lBQ1IsQ0FBQyxFQUFFLFVBQVU7SUFDYixDQUFDLEVBQUUsUUFBUTtDQUNYLENBQUM7QUFJRixtQ0FBbUM7QUFDbkMsTUFBTSxPQUFPLFNBQVM7SUFDckIsY0FBYztJQUNkLE1BQU0sQ0FBQyxTQUFTLEdBQUc7UUFDbEIsSUFBSSxFQUFFO1lBQ0wsYUFBYSxDQUFDLFVBQVU7WUFDeEIsYUFBYSxDQUFDLFdBQVc7WUFDekIsYUFBYSxDQUFDLFdBQVc7U0FDekI7UUFDRCxJQUFJLEVBQUUsT0FBTztLQUNKLENBQUM7SUFFWCxRQUFRLENBQVc7SUFFWCxZQUFZLEdBQXdDLEVBQUUsQ0FBQztJQUM5Qyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBb0MsQ0FBQztJQUVoSCxZQUFhLFFBQWtCO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzFCLENBQUM7SUFFRCxrQkFBa0IsQ0FBRSxLQUFZO1FBQy9CLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxDQUFDO1FBRXpDLGdGQUFnRjtRQUNoRixJQUFJLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sSUFBSSxDQUFDO1FBQ2Is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LEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ25ELEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckMsQ0FBQzs7QUFHRixVQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICogU3BpbmUgUnVudGltZXMgTGljZW5zZSBBZ3JlZW1lbnRcbiAqIExhc3QgdXBkYXRlZCBBcHJpbCA1LCAyMDI1LiBSZXBsYWNlcyBhbGwgcHJpb3IgdmVyc2lvbnMuXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMjUsIEVzb3RlcmljIFNvZnR3YXJlIExMQ1xuICpcbiAqIEludGVncmF0aW9uIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpbnRvIHNvZnR3YXJlIG9yIG90aGVyd2lzZSBjcmVhdGluZ1xuICogZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgaXMgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmRcbiAqIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyIG9mIHRoZSBTcGluZSBFZGl0b3IgTGljZW5zZSBBZ3JlZW1lbnQ6XG4gKiBodHRwOi8vZXNvdGVyaWNzb2Z0d2FyZS5jb20vc3BpbmUtZWRpdG9yLWxpY2Vuc2VcbiAqXG4gKiBPdGhlcndpc2UsIGl0IGlzIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmVcbiAqIG9yIG90aGVyd2lzZSBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU3BpbmUgUnVudGltZXMgKGNvbGxlY3RpdmVseSxcbiAqIFwiUHJvZHVjdHNcIiksIHByb3ZpZGVkIHRoYXQgZWFjaCB1c2VyIG9mIHRoZSBQcm9kdWN0cyBtdXN0IG9idGFpbiB0aGVpciBvd25cbiAqIFNwaW5lIEVkaXRvciBsaWNlbnNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZHVjdHMgaW4gYW55IGZvcm0gbXVzdFxuICogaW5jbHVkZSB0aGlzIGxpY2Vuc2UgYW5kIGNvcHlyaWdodCBub3RpY2UuXG4gKlxuICogVEhFIFNQSU5FIFJVTlRJTUVTIEFSRSBQUk9WSURFRCBCWSBFU09URVJJQyBTT0ZUV0FSRSBMTEMgXCJBUyBJU1wiIEFORCBBTllcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRURcbiAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEVTT1RFUklDIFNPRlRXQVJFIExMQyBCRSBMSUFCTEUgRk9SIEFOWVxuICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVNcbiAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUyxcbiAqIEJVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFMpIEhPV0VWRVIgQ0FVU0VEIEFORFxuICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlRcbiAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRlxuICogVEhFIFNQSU5FIFJVTlRJTUVTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5pbXBvcnQgeyBNZXNoQXR0YWNobWVudCwgUmVnaW9uQXR0YWNobWVudCB9IGZyb20gJ0Blc290ZXJpY3NvZnR3YXJlL3NwaW5lLWNvcmUnO1xuaW1wb3J0IHtcblx0dHlwZSBCTEVORF9NT0RFUyxcblx0dHlwZSBDb250YWluZXIsIEV4dGVuc2lvblR5cGUsXG5cdGV4dGVuc2lvbnMsXG5cdHR5cGUgSW5zdHJ1Y3Rpb25TZXQsXG5cdHR5cGUgUmVuZGVyZXIsXG5cdHR5cGUgUmVuZGVyUGlwZSxcbn0gZnJvbSAncGl4aS5qcyc7XG5pbXBvcnQgeyBCYXRjaGFibGVTcGluZVNsb3QgfSBmcm9tICcuL0JhdGNoYWJsZVNwaW5lU2xvdC5qcyc7XG5pbXBvcnQgdHlwZSB7IFNwaW5lIH0gZnJvbSAnLi9TcGluZS5qcyc7XG5cbmNvbnN0IHNwaW5lQmxlbmRNb2RlTWFwOiBSZWNvcmQ8bnVtYmVyLCBCTEVORF9NT0RFUz4gPSB7XG5cdDA6ICdub3JtYWwnLFxuXHQxOiAnYWRkJyxcblx0MjogJ211bHRpcGx5Jyxcblx0MzogJ3NjcmVlbidcbn07XG5cbnR5cGUgR3B1U3BpbmVEYXRhRWxlbWVudCA9IHsgc2xvdEJhdGNoZXM6IFJlY29yZDxzdHJpbmcsIEJhdGNoYWJsZVNwaW5lU2xvdCB8IHVuZGVmaW5lZD4gfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbmV4cG9ydCBjbGFzcyBTcGluZVBpcGUgaW1wbGVtZW50cyBSZW5kZXJQaXBlPFNwaW5lPiB7XG5cdC8qKiBAaWdub3JlICovXG5cdHN0YXRpYyBleHRlbnNpb24gPSB7XG5cdFx0dHlwZTogW1xuXHRcdFx0RXh0ZW5zaW9uVHlwZS5XZWJHTFBpcGVzLFxuXHRcdFx0RXh0ZW5zaW9uVHlwZS5XZWJHUFVQaXBlcyxcblx0XHRcdEV4dGVuc2lvblR5cGUuQ2FudmFzUGlwZXMsXG5cdFx0XSxcblx0XHRuYW1lOiAnc3BpbmUnLFxuXHR9IGFzIGNvbnN0O1xuXG5cdHJlbmRlcmVyOiBSZW5kZXJlcjtcblxuXHRwcml2YXRlIGdwdVNwaW5lRGF0YTogUmVjb3JkPHN0cmluZywgR3B1U3BpbmVEYXRhRWxlbWVudD4gPSB7fTtcblx0cHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlbmRlcmFibGVCb3VuZCA9IHRoaXMuZGVzdHJveVJlbmRlcmFibGUuYmluZCh0aGlzKSBhcyAocmVuZGVyYWJsZTogQ29udGFpbmVyKSA9PiB2b2lkO1xuXG5cdGNvbnN0cnVjdG9yIChyZW5kZXJlcjogUmVuZGVyZXIpIHtcblx0XHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cdH1cblxuXHR2YWxpZGF0ZVJlbmRlcmFibGUgKHNwaW5lOiBTcGluZSk6IGJvb2xlYW4ge1xuXHRcdHNwaW5lLl92YWxpZGF0ZUFuZFRyYW5zZm9ybUF0dGFjaG1lbnRzKCk7XG5cblx0XHQvLyBpZiBzcGluZSBhdHRhY2htZW50cyBoYXZlIGNoYW5nZWQgb3IgZGVzdHJveWVkLCB3ZSBuZWVkIHRvIHJlYnVpbGQgdGhlIGJhdGNoIVxuXHRcdGlmIChzcGluZS5zcGluZUF0dGFjaG1lbnRzRGlydHkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIGlmIHRoZSB0ZXh0dXJlcyBoYXZlIGNoYW5nZWQsIHdlIG5lZWQgdG8gcmVidWlsZCB0aGUgYmF0Y2gsIGJ1dCBvbmx5IGlmIHRoZSB0ZXh0dXJlIGlzIG5vdCBhbHJlYWR5IGluIHRoZSBiYXRjaFxuXHRcdGVsc2UgaWYgKHNwaW5lLnNwaW5lVGV4dHVyZXNEaXJ0eSkge1xuXHRcdFx0Ly8gbG9vcCB0aHJvdWdoIGFuZCBzZWUgaWYgdGhlIHRleHR1cmVzIGhhdmUgY2hhbmdlZC4uXG5cdFx0XHRjb25zdCBkcmF3T3JkZXIgPSBzcGluZS5za2VsZXRvbi5kcmF3T3JkZXI7XG5cdFx0XHRjb25zdCBncHVTcGluZSA9IHRoaXMuZ3B1U3BpbmVEYXRhW3NwaW5lLnVpZF07XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gZHJhd09yZGVyLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0XHRjb25zdCBzbG90ID0gZHJhd09yZGVyW2ldO1xuXHRcdFx0XHRjb25zdCBhdHRhY2htZW50ID0gc2xvdC5nZXRBdHRhY2htZW50KCk7XG5cblx0XHRcdFx0aWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50IHx8IGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBNZXNoQXR0YWNobWVudCkge1xuXHRcdFx0XHRcdGNvbnN0IGNhY2hlRGF0YSA9IHNwaW5lLl9nZXRDYWNoZWREYXRhKHNsb3QsIGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRcdGNvbnN0IGJhdGNoYWJsZVNwaW5lU2xvdCA9IGdwdVNwaW5lLnNsb3RCYXRjaGVzW2NhY2hlRGF0YS5pZF07XG5cblx0XHRcdFx0XHRjb25zdCB0ZXh0dXJlID0gY2FjaGVEYXRhLnRleHR1cmU7XG5cblx0XHRcdFx0XHRpZiAodGV4dHVyZSAhPT0gYmF0Y2hhYmxlU3BpbmVTbG90Py50ZXh0dXJlKSB7XG5cdFx0XHRcdFx0XHRpZiAoIWJhdGNoYWJsZVNwaW5lU2xvdD8uX2JhdGNoZXIuY2hlY2tBbmRVcGRhdGVUZXh0dXJlKGJhdGNoYWJsZVNwaW5lU2xvdCwgdGV4dHVyZSkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YWRkUmVuZGVyYWJsZSAoc3BpbmU6IFNwaW5lLCBpbnN0cnVjdGlvblNldDogSW5zdHJ1Y3Rpb25TZXQpIHtcblx0XHRjb25zdCBncHVTcGluZSA9IHRoaXMuX2dldFNwaW5lRGF0YShzcGluZSk7XG5cblx0XHRjb25zdCBiYXRjaGVyID0gdGhpcy5yZW5kZXJlci5yZW5kZXJQaXBlcy5iYXRjaDtcblxuXHRcdGNvbnN0IGRyYXdPcmRlciA9IHNwaW5lLnNrZWxldG9uLmRyYXdPcmRlcjtcblxuXHRcdGNvbnN0IHJvdW5kUGl4ZWxzID0gKHRoaXMucmVuZGVyZXIuX3JvdW5kUGl4ZWxzIHwgc3BpbmUuX3JvdW5kUGl4ZWxzKSBhcyAwIHwgMTtcblxuXHRcdHNwaW5lLl92YWxpZGF0ZUFuZFRyYW5zZm9ybUF0dGFjaG1lbnRzKCk7XG5cblx0XHRzcGluZS5zcGluZUF0dGFjaG1lbnRzRGlydHkgPSBmYWxzZTtcblx0XHRzcGluZS5zcGluZVRleHR1cmVzRGlydHkgPSBmYWxzZTtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gZHJhd09yZGVyLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3Qgc2xvdCA9IGRyYXdPcmRlcltpXTtcblx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBzbG90LmdldEF0dGFjaG1lbnQoKTtcblx0XHRcdGNvbnN0IGJsZW5kTW9kZSA9IHNwaW5lQmxlbmRNb2RlTWFwW3Nsb3QuZGF0YS5ibGVuZE1vZGVdO1xuXHRcdFx0bGV0IHNraXBSZW5kZXIgPSBmYWxzZTtcblxuXHRcdFx0aWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50IHx8IGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBNZXNoQXR0YWNobWVudCkge1xuXHRcdFx0XHRjb25zdCBjYWNoZURhdGEgPSBzcGluZS5fZ2V0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblx0XHRcdFx0Y29uc3QgYmF0Y2hhYmxlU3BpbmVTbG90ID0gZ3B1U3BpbmUuc2xvdEJhdGNoZXNbY2FjaGVEYXRhLmlkXSB8fD0gbmV3IEJhdGNoYWJsZVNwaW5lU2xvdCgpO1xuXG5cdFx0XHRcdGJhdGNoYWJsZVNwaW5lU2xvdC5zZXREYXRhKFxuXHRcdFx0XHRcdHNwaW5lLFxuXHRcdFx0XHRcdGNhY2hlRGF0YSxcblx0XHRcdFx0XHRibGVuZE1vZGUsXG5cdFx0XHRcdFx0cm91bmRQaXhlbHNcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRza2lwUmVuZGVyID0gY2FjaGVEYXRhLnNraXBSZW5kZXI7XG5cdFx0XHRcdGlmICghc2tpcFJlbmRlcikge1xuXHRcdFx0XHRcdGJhdGNoZXIuYWRkVG9CYXRjaChiYXRjaGFibGVTcGluZVNsb3QsIGluc3RydWN0aW9uU2V0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBjb250YWluZXJBdHRhY2htZW50ID0gc3BpbmUuX3Nsb3RzT2JqZWN0W3Nsb3QuZGF0YS5uYW1lXTtcblxuXHRcdFx0aWYgKGNvbnRhaW5lckF0dGFjaG1lbnQpIHtcblx0XHRcdFx0Y29uc3QgY29udGFpbmVyID0gY29udGFpbmVyQXR0YWNobWVudC5jb250YWluZXI7XG5cblx0XHRcdFx0aWYgKCFza2lwUmVuZGVyKSB7XG5cdFx0XHRcdFx0Y29udGFpbmVyLmluY2x1ZGVJbkJ1aWxkID0gdHJ1ZTtcblx0XHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BpeGlqcy9waXhpanMvYmxvYi9iNGMwNTBhNzkxZmU2NWU5NzllNDY3YzljYmEyYmRhMGMwMWExYzM1L3NyYy9zY2VuZS9jb250YWluZXIvdXRpbHMvY29sbGVjdEFsbFJlbmRlcmFibGVzLnRzI0wyOFxuXHRcdFx0XHRcdGNvbnRhaW5lci5jb2xsZWN0UmVuZGVyYWJsZXMoaW5zdHJ1Y3Rpb25TZXQsIHRoaXMucmVuZGVyZXIsIG51bGwhKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnRhaW5lci5pbmNsdWRlSW5CdWlsZCA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZVJlbmRlcmFibGUgKHNwaW5lOiBTcGluZSkge1xuXHRcdGNvbnN0IGdwdVNwaW5lID0gdGhpcy5ncHVTcGluZURhdGFbc3BpbmUudWlkXTtcblxuXHRcdHNwaW5lLl92YWxpZGF0ZUFuZFRyYW5zZm9ybUF0dGFjaG1lbnRzKCk7XG5cblx0XHRzcGluZS5zcGluZUF0dGFjaG1lbnRzRGlydHkgPSBmYWxzZTtcblx0XHRzcGluZS5zcGluZVRleHR1cmVzRGlydHkgPSBmYWxzZTtcblxuXHRcdGNvbnN0IGRyYXdPcmRlciA9IHNwaW5lLnNrZWxldG9uLmRyYXdPcmRlcjtcblxuXHRcdGZvciAobGV0IGkgPSAwLCBuID0gZHJhd09yZGVyLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0Y29uc3Qgc2xvdCA9IGRyYXdPcmRlcltpXTtcblx0XHRcdGNvbnN0IGF0dGFjaG1lbnQgPSBzbG90LmdldEF0dGFjaG1lbnQoKTtcblxuXHRcdFx0aWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50IHx8IGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBNZXNoQXR0YWNobWVudCkge1xuXHRcdFx0XHRjb25zdCBjYWNoZURhdGEgPSBzcGluZS5fZ2V0Q2FjaGVkRGF0YShzbG90LCBhdHRhY2htZW50KTtcblxuXHRcdFx0XHRpZiAoIWNhY2hlRGF0YS5za2lwUmVuZGVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgYmF0Y2hhYmxlU3BpbmVTbG90ID0gZ3B1U3BpbmUuc2xvdEJhdGNoZXNbY2FjaGVEYXRhLmlkXTtcblx0XHRcdFx0XHQvLyB3ZSBkaWRuJ3QgZmlndXJlIG91dCB3aHkgYmF0Y2hhYmxlU3BpbmVTbG90IG1pZ2h0IGJlIHVuZGVmaW5lZDogaHR0cHM6Ly9naXRodWIuY29tL0Vzb3RlcmljU29mdHdhcmUvc3BpbmUtcnVudGltZXMvaXNzdWVzLzI5OTFcblx0XHRcdFx0XHRiYXRjaGFibGVTcGluZVNsb3Q/Ll9iYXRjaGVyPy51cGRhdGVFbGVtZW50KGJhdGNoYWJsZVNwaW5lU2xvdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRkZXN0cm95UmVuZGVyYWJsZSAoc3BpbmU6IFNwaW5lKSB7XG5cdFx0dGhpcy5ncHVTcGluZURhdGFbc3BpbmUudWlkXSA9IG51bGwgYXMgYW55O1xuXHRcdHNwaW5lLm9mZignZGVzdHJveWVkJywgdGhpcy5fZGVzdHJveVJlbmRlcmFibGVCb3VuZCk7XG5cdH1cblxuXHRkZXN0cm95ICgpIHtcblx0XHR0aGlzLmdwdVNwaW5lRGF0YSA9IG51bGwgYXMgYW55O1xuXHRcdHRoaXMucmVuZGVyZXIgPSBudWxsIGFzIGFueTtcblx0fVxuXG5cdHByaXZhdGUgX2dldFNwaW5lRGF0YSAoc3BpbmU6IFNwaW5lKTogR3B1U3BpbmVEYXRhRWxlbWVudCB7XG5cdFx0cmV0dXJuIHRoaXMuZ3B1U3BpbmVEYXRhW3NwaW5lLnVpZF0gfHwgdGhpcy5faW5pdE1lc2hEYXRhKHNwaW5lKTtcblx0fVxuXG5cdHByaXZhdGUgX2luaXRNZXNoRGF0YSAoc3BpbmU6IFNwaW5lKTogR3B1U3BpbmVEYXRhRWxlbWVudCB7XG5cdFx0dGhpcy5ncHVTcGluZURhdGFbc3BpbmUudWlkXSA9IHsgc2xvdEJhdGNoZXM6IHt9IH07XG5cdFx0c3BpbmUub24oJ2Rlc3Ryb3llZCcsIHRoaXMuX2Rlc3Ryb3lSZW5kZXJhYmxlQm91bmQpO1xuXHRcdHJldHVybiB0aGlzLmdwdVNwaW5lRGF0YVtzcGluZS51aWRdO1xuXHR9XG59XG5cbmV4dGVuc2lvbnMuYWRkKFNwaW5lUGlwZSk7XG4iXX0=
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BpbmVQaXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NwaW5lUGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytFQTJCK0U7QUFFL0UsT0FBTyxFQUFFLGdCQUFnQixJQUFJLHNCQUFzQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlILE9BQU8sRUFHVSxhQUFhLEVBQzdCLFVBQVUsRUFJVixZQUFZLEdBQ1osTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHN0QsTUFBTSxpQkFBaUIsR0FBZ0M7SUFDdEQsQ0FBQyxFQUFFLFFBQVE7SUFDWCxDQUFDLEVBQUUsS0FBSztJQUNSLENBQUMsRUFBRSxVQUFVO0lBQ2IsQ0FBQyxFQUFFLFFBQVE7Q0FDWCxDQUFDO0FBSUYsbUNBQW1DO0FBQ25DLE1BQU0sT0FBTyxTQUFTO0lBQ3JCLGNBQWM7SUFDZCxNQUFNLENBQUMsU0FBUyxHQUFHO1FBQ2xCLElBQUksRUFBRTtZQUNMLGFBQWEsQ0FBQyxVQUFVO1lBQ3hCLGFBQWEsQ0FBQyxXQUFXO1lBQ3pCLGFBQWEsQ0FBQyxXQUFXO1NBQ3pCO1FBQ0QsSUFBSSxFQUFFLE9BQU87S0FDSixDQUFDO0lBRVgsUUFBUSxDQUFXO0lBQ1gsc0JBQXNCLENBQTBCO0lBRWhELFlBQVksR0FBd0MsRUFBRSxDQUFDO0lBQzlDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFvQyxDQUFDO0lBRWhILFlBQWEsUUFBa0I7UUFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDMUIsQ0FBQztJQUVELGtCQUFrQixDQUFFLEtBQVk7UUFDL0IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsTUFBTSxF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QUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsT0FBTztRQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBVyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBVyxDQUFDO1FBQzVCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFXLENBQUM7SUFDM0MsQ0FBQztJQUVPLGFBQWEsQ0FBRSxLQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU8sYUFBYSxDQUFFLEtBQVk7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDbkQsS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDOztBQUdGLFVBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiBTcGluZSBSdW50aW1lcyBMaWNlbnNlIEFncmVlbWVudFxuICogTGFzdCB1cGRhdGVkIEFwcmlsIDUsIDIwMjUuIFJlcGxhY2VzIGFsbCBwcmlvciB2ZXJzaW9ucy5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAyNSwgRXNvdGVyaWMgU29mdHdhcmUgTExDXG4gKlxuICogSW50ZWdyYXRpb24gb2YgdGhlIFNwaW5lIFJ1bnRpbWVzIGludG8gc29mdHdhcmUgb3Igb3RoZXJ3aXNlIGNyZWF0aW5nXG4gKiBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyBpcyBwZXJtaXR0ZWQgdW5kZXIgdGhlIHRlcm1zIGFuZFxuICogY29uZGl0aW9ucyBvZiBTZWN0aW9uIDIgb2YgdGhlIFNwaW5lIEVkaXRvciBMaWNlbnNlIEFncmVlbWVudDpcbiAqIGh0dHA6Ly9lc290ZXJpY3NvZnR3YXJlLmNvbS9zcGluZS1lZGl0b3ItbGljZW5zZVxuICpcbiAqIE90aGVyd2lzZSwgaXQgaXMgcGVybWl0dGVkIHRvIGludGVncmF0ZSB0aGUgU3BpbmUgUnVudGltZXMgaW50byBzb2Z0d2FyZVxuICogb3Igb3RoZXJ3aXNlIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTcGluZSBSdW50aW1lcyAoY29sbGVjdGl2ZWx5LFxuICogXCJQcm9kdWN0c1wiKSwgcHJvdmlkZWQgdGhhdCBlYWNoIHVzZXIgb2YgdGhlIFByb2R1Y3RzIG11c3Qgb2J0YWluIHRoZWlyIG93blxuICogU3BpbmUgRWRpdG9yIGxpY2Vuc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9kdWN0cyBpbiBhbnkgZm9ybSBtdXN0XG4gKiBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgY29weXJpZ2h0IG5vdGljZS5cbiAqXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMgQVJFIFBST1ZJREVEIEJZIEVTT1RFUklDIFNPRlRXQVJFIExMQyBcIkFTIElTXCIgQU5EIEFOWVxuICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRFxuICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRVxuICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRVNPVEVSSUMgU09GVFdBUkUgTExDIEJFIExJQUJMRSBGT1IgQU5ZXG4gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFU1xuICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLFxuICogQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUykgSE9XRVZFUiBDQVVTRUQgQU5EXG4gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVFxuICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GXG4gKiBUSEUgU1BJTkUgUlVOVElNRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmltcG9ydCB7IFNrZWxldG9uUmVuZGVyZXIgYXMgQ2FudmFzU2tlbGV0b25SZW5kZXJlciwgTWVzaEF0dGFjaG1lbnQsIFJlZ2lvbkF0dGFjaG1lbnQgfSBmcm9tICdAZXNvdGVyaWNzb2Z0d2FyZS9zcGluZS1jYW52YXMnO1xuaW1wb3J0IHtcblx0dHlwZSBCTEVORF9NT0RFUyxcblx0Q2FudmFzUmVuZGVyZXIsXG5cdHR5cGUgQ29udGFpbmVyLCBFeHRlbnNpb25UeXBlLFxuXHRleHRlbnNpb25zLFxuXHR0eXBlIEluc3RydWN0aW9uU2V0LFxuXHR0eXBlIFJlbmRlcmVyLFxuXHR0eXBlIFJlbmRlclBpcGUsXG5cdFJlbmRlcmVyVHlwZSxcbn0gZnJvbSAncGl4aS5qcyc7XG5pbXBvcnQgeyBCYXRjaGFibGVTcGluZVNsb3QgfSBmcm9tICcuL0JhdGNoYWJsZVNwaW5lU2xvdC5qcyc7XG5pbXBvcnQgdHlwZSB7IFNwaW5lIH0gZnJvbSAnLi9TcGluZS5qcyc7XG5cbmNvbnN0IHNwaW5lQmxlbmRNb2RlTWFwOiBSZWNvcmQ8bnVtYmVyLCBCTEVORF9NT0RFUz4gPSB7XG5cdDA6ICdub3JtYWwnLFxuXHQxOiAnYWRkJyxcblx0MjogJ211bHRpcGx5Jyxcblx0MzogJ3NjcmVlbidcbn07XG5cbnR5cGUgR3B1U3BpbmVEYXRhRWxlbWVudCA9IHsgc2xvdEJhdGNoZXM6IFJlY29yZDxzdHJpbmcsIEJhdGNoYWJsZVNwaW5lU2xvdCB8IHVuZGVmaW5lZD4gfTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbmV4cG9ydCBjbGFzcyBTcGluZVBpcGUgaW1wbGVtZW50cyBSZW5kZXJQaXBlPFNwaW5lPiB7XG5cdC8qKiBAaWdub3JlICovXG5cdHN0YXRpYyBleHRlbnNpb24gPSB7XG5cdFx0dHlwZTogW1xuXHRcdFx0RXh0ZW5zaW9uVHlwZS5XZWJHTFBpcGVzLFxuXHRcdFx0RXh0ZW5zaW9uVHlwZS5XZWJHUFVQaXBlcyxcblx0XHRcdEV4dGVuc2lvblR5cGUuQ2FudmFzUGlwZXMsXG5cdFx0XSxcblx0XHRuYW1lOiAnc3BpbmUnLFxuXHR9IGFzIGNvbnN0O1xuXG5cdHJlbmRlcmVyOiBSZW5kZXJlcjtcblx0cHJpdmF0ZSBjYW52YXNTa2VsZXRvblJlbmRlcmVyITogQ2FudmFzU2tlbGV0b25SZW5kZXJlcjtcblxuXHRwcml2YXRlIGdwdVNwaW5lRGF0YTogUmVjb3JkPHN0cmluZywgR3B1U3BpbmVEYXRhRWxlbWVudD4gPSB7fTtcblx0cHJpdmF0ZSByZWFkb25seSBfZGVzdHJveVJlbmRlcmFibGVCb3VuZCA9IHRoaXMuZGVzdHJveVJlbmRlcmFibGUuYmluZCh0aGlzKSBhcyAocmVuZGVyYWJsZTogQ29udGFpbmVyKSA9PiB2b2lkO1xuXG5cdGNvbnN0cnVjdG9yIChyZW5kZXJlcjogUmVuZGVyZXIpIHtcblx0XHR0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG5cdH1cblxuXHR2YWxpZGF0ZVJlbmRlcmFibGUgKHNwaW5lOiBTcGluZSk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLnJlbmRlcmVyLnR5cGUgPT09IFJlbmRlcmVyVHlwZS5DQU5WQVMpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdHNwaW5lLl92YWxpZGF0ZUFuZFRyYW5zZm9ybUF0dGFjaG1lbnRzKCk7XG5cblx0XHQvLyBpZiBzcGluZSBhdHRhY2htZW50cyBoYXZlIGNoYW5nZWQgb3IgZGVzdHJveWVkLCB3ZSBuZWVkIHRvIHJlYnVpbGQgdGhlIGJhdGNoIVxuXHRcdGlmIChzcGluZS5zcGluZUF0dGFjaG1lbnRzRGlydHkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIGlmIHRoZSB0ZXh0dXJlcyBoYXZlIGNoYW5nZWQsIHdlIG5lZWQgdG8gcmVidWlsZCB0aGUgYmF0Y2gsIGJ1dCBvbmx5IGlmIHRoZSB0ZXh0dXJlIGlzIG5vdCBhbHJlYWR5IGluIHRoZSBiYXRjaFxuXHRcdGVsc2UgaWYgKHNwaW5lLnNwaW5lVGV4dHVyZXNEaXJ0eSkge1xuXHRcdFx0Ly8gbG9vcCB0aHJvdWdoIGFuZCBzZWUgaWYgdGhlIHRleHR1cmVzIGhhdmUgY2hhbmdlZC4uXG5cdFx0XHRjb25zdCBkcmF3T3JkZXIgPSBzcGluZS5za2VsZXRvbi5kcmF3T3JkZXI7XG5cdFx0XHRjb25zdCBncHVTcGluZSA9IHRoaXMuZ3B1U3BpbmVEYXRhW3NwaW5lLnVpZF07XG5cblx0XHRcdGZvciAobGV0IGkgPSAwLCBuID0gZHJhd09yZGVyLmxlbmd0aDsgaSA8IG47IGkrKykge1xuXHRcdFx0XHRjb25zdCBzbG90ID0gZHJhd09yZGVyW2ldO1xuXHRcdFx0XHRjb25zdCBhdHRhY2htZW50ID0gc2xvdC5nZXRBdHRhY2htZW50KCk7XG5cblx0XHRcdFx0aWYgKGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBSZWdpb25BdHRhY2htZW50IHx8IGF0dGFjaG1lbnQgaW5zdGFuY2VvZiBNZXNoQXR0YWNobWVudCkge1xuXHRcdFx0XHRcdGNvbnN0IGNhY2hlRGF0YSA9IHNwaW5lLl9nZXRDYWNoZWREYXRhKHNsb3QsIGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRcdGNvbnN0IGJhdGNoYWJsZVNwaW5lU2xvdCA9IGdwdVNwaW5lLnNsb3RCYXRjaGVzW2NhY2hlRGF0YS5pZF07XG5cblx0XHRcdFx0XHRjb25zdCB0ZXh0dXJlID0gY2FjaGVEYXRhLnRleHR1cmU7XG5cblx0XHRcdFx0XHRpZiAodGV4dHVyZSAhPT0gYmF0Y2hhYmxlU3BpbmVTbG90Py50ZXh0dXJlKSB7XG5cdFx0XHRcdFx0XHRpZiAoIWJhdGNoYWJsZVNwaW5lU2xvdD8uX2JhdGNoZXIuY2hlY2tBbmRVcGRhdGVUZXh0dXJlKGJhdGNoYWJsZVNwaW5lU2xvdCwgdGV4dHVyZSkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0ZXhlY3V0ZSAoc3BpbmU6IFNwaW5lKSB7XG5cdFx0aWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gUmVuZGVyZXJUeXBlLkNBTlZBUykge1xuXHRcdFx0Y29uc3QgcmVuZGVyZXIgPSAodGhpcy5yZW5kZXJlciBhcyBDYW52YXNSZW5kZXJlcik7XG5cdFx0XHRjb25zdCBncm91cEFscGhhID0gKChzcGluZS5ncm91cENvbG9yQWxwaGEgPj4+IDI0KSAmIDB4RkYpIC8gMjU1O1xuXHRcdFx0Y29uc3QgY29udGV4dFN5c3RlbSA9IHJlbmRlcmVyLmNhbnZhc0NvbnRleHQ7XG5cdFx0XHRjb25zdCBjb250ZXh0ID0gY29udGV4dFN5c3RlbS5hY3RpdmVDb250ZXh0O1xuXG5cdFx0XHRjb250ZXh0LnNhdmUoKTtcblxuXHRcdFx0aWYgKCF0aGlzLmNhbnZhc1NrZWxldG9uUmVuZGVyZXIpIHtcblx0XHRcdFx0dGhpcy5jYW52YXNTa2VsZXRvblJlbmRlcmVyID0gbmV3IENhbnZhc1NrZWxldG9uUmVuZGVyZXIoY29udGV4dCBhcyB1bmtub3duIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG5cdFx0XHRcdHRoaXMuY2FudmFzU2tlbGV0b25SZW5kZXJlci50cmlhbmdsZVJlbmRlcmluZyA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRleHRTeXN0ZW0uc2V0Q29udGV4dFRyYW5zZm9ybShzcGluZS5ncm91cFRyYW5zZm9ybSwgKHJlbmRlcmVyLl9yb3VuZFBpeGVscyB8IHNwaW5lLl9yb3VuZFBpeGVscykgPT09IDEpO1xuXG5cdFx0XHRjb25zdCBvbGRBbHBoYSA9IHNwaW5lLnNrZWxldG9uLmNvbG9yLmE7XG5cdFx0XHRzcGluZS5za2VsZXRvbi5jb2xvci5hICo9IGdyb3VwQWxwaGE7XG5cdFx0XHR0aGlzLmNhbnZhc1NrZWxldG9uUmVuZGVyZXIuZHJhdyhzcGluZS5za2VsZXRvbik7XG5cdFx0XHRzcGluZS5za2VsZXRvbi5jb2xvci5hID0gb2xkQWxwaGE7XG5cblx0XHRcdGNvbnRleHQucmVzdG9yZSgpO1xuXHRcdH1cblx0fVxuXG5cdGFkZFJlbmRlcmFibGUgKHNwaW5lOiBTcGluZSwgaW5zdHJ1Y3Rpb25TZXQ6IEluc3RydWN0aW9uU2V0KSB7XG5cdFx0aWYgKHRoaXMucmVuZGVyZXIudHlwZSA9PT0gUmVuZGVyZXJUeXBlLkNBTlZBUykge1xuXHRcdFx0dGhpcy5yZW5kZXJlci5yZW5kZXJQaXBlcy5iYXRjaC5icmVhayhpbnN0cnVjdGlvblNldCk7XG5cdFx0XHRpbnN0cnVjdGlvblNldC5hZGQoc3BpbmUpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGdwdVNwaW5lID0gdGhpcy5fZ2V0U3BpbmVEYXRhKHNwaW5lKTtcblxuXHRcdGNvbnN0IGJhdGNoZXIgPSB0aGlzLnJlbmRlcmVyLnJlbmRlclBpcGVzLmJhdGNoO1xuXG5cdFx0Y29uc3QgZHJhd09yZGVyID0gc3BpbmUuc2tlbGV0b24uZHJhd09yZGVyO1xuXG5cdFx0Y29uc3Qgcm91bmRQaXhlbHMgPSAodGhpcy5yZW5kZXJlci5fcm91bmRQaXhlbHMgfCBzcGluZS5fcm91bmRQaXhlbHMpIGFzIDAgfCAxO1xuXG5cdFx0c3BpbmUuX3ZhbGlkYXRlQW5kVHJhbnNmb3JtQXR0YWNobWVudHMoKTtcblxuXHRcdHNwaW5lLnNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IGZhbHNlO1xuXHRcdHNwaW5lLnNwaW5lVGV4dHVyZXNEaXJ0eSA9IGZhbHNlO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBkcmF3T3JkZXIubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBzbG90ID0gZHJhd09yZGVyW2ldO1xuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXHRcdFx0Y29uc3QgYmxlbmRNb2RlID0gc3BpbmVCbGVuZE1vZGVNYXBbc2xvdC5kYXRhLmJsZW5kTW9kZV07XG5cdFx0XHRsZXQgc2tpcFJlbmRlciA9IGZhbHNlO1xuXG5cdFx0XHRpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIFJlZ2lvbkF0dGFjaG1lbnQgfHwgYXR0YWNobWVudCBpbnN0YW5jZW9mIE1lc2hBdHRhY2htZW50KSB7XG5cdFx0XHRcdGNvbnN0IGNhY2hlRGF0YSA9IHNwaW5lLl9nZXRDYWNoZWREYXRhKHNsb3QsIGF0dGFjaG1lbnQpO1xuXHRcdFx0XHRjb25zdCBiYXRjaGFibGVTcGluZVNsb3QgPSBncHVTcGluZS5zbG90QmF0Y2hlc1tjYWNoZURhdGEuaWRdIHx8PSBuZXcgQmF0Y2hhYmxlU3BpbmVTbG90KCk7XG5cblx0XHRcdFx0YmF0Y2hhYmxlU3BpbmVTbG90LnNldERhdGEoXG5cdFx0XHRcdFx0c3BpbmUsXG5cdFx0XHRcdFx0Y2FjaGVEYXRhLFxuXHRcdFx0XHRcdGJsZW5kTW9kZSxcblx0XHRcdFx0XHRyb3VuZFBpeGVsc1xuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdHNraXBSZW5kZXIgPSBjYWNoZURhdGEuc2tpcFJlbmRlcjtcblx0XHRcdFx0aWYgKCFza2lwUmVuZGVyKSB7XG5cdFx0XHRcdFx0YmF0Y2hlci5hZGRUb0JhdGNoKGJhdGNoYWJsZVNwaW5lU2xvdCwgaW5zdHJ1Y3Rpb25TZXQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNvbnRhaW5lckF0dGFjaG1lbnQgPSBzcGluZS5fc2xvdHNPYmplY3Rbc2xvdC5kYXRhLm5hbWVdO1xuXG5cdFx0XHRpZiAoY29udGFpbmVyQXR0YWNobWVudCkge1xuXHRcdFx0XHRjb25zdCBjb250YWluZXIgPSBjb250YWluZXJBdHRhY2htZW50LmNvbnRhaW5lcjtcblxuXHRcdFx0XHRpZiAoIXNraXBSZW5kZXIpIHtcblx0XHRcdFx0XHRjb250YWluZXIuaW5jbHVkZUluQnVpbGQgPSB0cnVlO1xuXHRcdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGl4aWpzL3BpeGlqcy9ibG9iL2I0YzA1MGE3OTFmZTY1ZTk3OWU0NjdjOWNiYTJiZGEwYzAxYTFjMzUvc3JjL3NjZW5lL2NvbnRhaW5lci91dGlscy9jb2xsZWN0QWxsUmVuZGVyYWJsZXMudHMjTDI4XG5cdFx0XHRcdFx0Y29udGFpbmVyLmNvbGxlY3RSZW5kZXJhYmxlcyhpbnN0cnVjdGlvblNldCwgdGhpcy5yZW5kZXJlciwgbnVsbCEpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29udGFpbmVyLmluY2x1ZGVJbkJ1aWxkID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlUmVuZGVyYWJsZSAoc3BpbmU6IFNwaW5lKSB7XG5cdFx0Y29uc3QgZ3B1U3BpbmUgPSB0aGlzLmdwdVNwaW5lRGF0YVtzcGluZS51aWRdO1xuXG5cdFx0c3BpbmUuX3ZhbGlkYXRlQW5kVHJhbnNmb3JtQXR0YWNobWVudHMoKTtcblxuXHRcdHNwaW5lLnNwaW5lQXR0YWNobWVudHNEaXJ0eSA9IGZhbHNlO1xuXHRcdHNwaW5lLnNwaW5lVGV4dHVyZXNEaXJ0eSA9IGZhbHNlO1xuXG5cdFx0Y29uc3QgZHJhd09yZGVyID0gc3BpbmUuc2tlbGV0b24uZHJhd09yZGVyO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDAsIG4gPSBkcmF3T3JkZXIubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRjb25zdCBzbG90ID0gZHJhd09yZGVyW2ldO1xuXHRcdFx0Y29uc3QgYXR0YWNobWVudCA9IHNsb3QuZ2V0QXR0YWNobWVudCgpO1xuXG5cdFx0XHRpZiAoYXR0YWNobWVudCBpbnN0YW5jZW9mIFJlZ2lvbkF0dGFjaG1lbnQgfHwgYXR0YWNobWVudCBpbnN0YW5jZW9mIE1lc2hBdHRhY2htZW50KSB7XG5cdFx0XHRcdGNvbnN0IGNhY2hlRGF0YSA9IHNwaW5lLl9nZXRDYWNoZWREYXRhKHNsb3QsIGF0dGFjaG1lbnQpO1xuXG5cdFx0XHRcdGlmICghY2FjaGVEYXRhLnNraXBSZW5kZXIpIHtcblx0XHRcdFx0XHRjb25zdCBiYXRjaGFibGVTcGluZVNsb3QgPSBncHVTcGluZS5zbG90QmF0Y2hlc1tjYWNoZURhdGEuaWRdO1xuXHRcdFx0XHRcdC8vIHdlIGRpZG4ndCBmaWd1cmUgb3V0IHdoeSBiYXRjaGFibGVTcGluZVNsb3QgbWlnaHQgYmUgdW5kZWZpbmVkOiBodHRwczovL2dpdGh1Yi5jb20vRXNvdGVyaWNTb2Z0d2FyZS9zcGluZS1ydW50aW1lcy9pc3N1ZXMvMjk5MVxuXHRcdFx0XHRcdGJhdGNoYWJsZVNwaW5lU2xvdD8uX2JhdGNoZXI/LnVwZGF0ZUVsZW1lbnQoYmF0Y2hhYmxlU3BpbmVTbG90KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGRlc3Ryb3lSZW5kZXJhYmxlIChzcGluZTogU3BpbmUpIHtcblx0XHR0aGlzLmdwdVNwaW5lRGF0YVtzcGluZS51aWRdID0gbnVsbCBhcyBhbnk7XG5cdFx0c3BpbmUub2ZmKCdkZXN0cm95ZWQnLCB0aGlzLl9kZXN0cm95UmVuZGVyYWJsZUJvdW5kKTtcblx0fVxuXG5cdGRlc3Ryb3kgKCkge1xuXHRcdHRoaXMuZ3B1U3BpbmVEYXRhID0gbnVsbCBhcyBhbnk7XG5cdFx0dGhpcy5yZW5kZXJlciA9IG51bGwgYXMgYW55O1xuXHRcdHRoaXMuY2FudmFzU2tlbGV0b25SZW5kZXJlciA9IG51bGwgYXMgYW55O1xuXHR9XG5cblx0cHJpdmF0ZSBfZ2V0U3BpbmVEYXRhIChzcGluZTogU3BpbmUpOiBHcHVTcGluZURhdGFFbGVtZW50IHtcblx0XHRyZXR1cm4gdGhpcy5ncHVTcGluZURhdGFbc3BpbmUudWlkXSB8fCB0aGlzLl9pbml0TWVzaERhdGEoc3BpbmUpO1xuXHR9XG5cblx0cHJpdmF0ZSBfaW5pdE1lc2hEYXRhIChzcGluZTogU3BpbmUpOiBHcHVTcGluZURhdGFFbGVtZW50IHtcblx0XHR0aGlzLmdwdVNwaW5lRGF0YVtzcGluZS51aWRdID0geyBzbG90QmF0Y2hlczoge30gfTtcblx0XHRzcGluZS5vbignZGVzdHJveWVkJywgdGhpcy5fZGVzdHJveVJlbmRlcmFibGVCb3VuZCk7XG5cdFx0cmV0dXJuIHRoaXMuZ3B1U3BpbmVEYXRhW3NwaW5lLnVpZF07XG5cdH1cbn1cblxuZXh0ZW5zaW9ucy5hZGQoU3BpbmVQaXBlKTtcbiJdfQ==