ng-virtual-list 16.1.3 → 16.1.4
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.
|
@@ -231,10 +231,9 @@ export class NgVirtualListComponent {
|
|
|
231
231
|
}
|
|
232
232
|
snappedComponent.element.style.clipPath = `path("M 0 0 L 0 ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} 0 Z")`;
|
|
233
233
|
snappedComponent.regularLength = `${isVertical ? listBounds.width : listBounds.height}${PX}`;
|
|
234
|
-
const { width: sWidth, height: sHeight } = snappedComponent.getBounds() ?? { width: 0, height: 0 }, containerElement = container.nativeElement;
|
|
234
|
+
const { width: sWidth, height: sHeight } = snappedComponent.getBounds() ?? { width: 0, height: 0 }, containerElement = container.nativeElement, delta = snappedComponent.item?.measures.delta ?? 0;
|
|
235
235
|
let left, right, top, bottom;
|
|
236
236
|
if (isVertical) {
|
|
237
|
-
const snappedY = snappedComponent.item?.measures.y ?? 0, scrollSize = container.nativeElement.scrollTop, delta = snappedY - scrollSize;
|
|
238
237
|
left = 0;
|
|
239
238
|
right = width - scrollBarSize;
|
|
240
239
|
top = sHeight;
|
|
@@ -242,7 +241,6 @@ export class NgVirtualListComponent {
|
|
|
242
241
|
containerElement.style.clipPath = `path("M 0 ${top + delta} L 0 ${height} L ${width} ${height} L ${width} 0 L ${right} 0 L ${right} ${top + delta} Z")`;
|
|
243
242
|
}
|
|
244
243
|
else {
|
|
245
|
-
const snappedX = snappedComponent.item?.measures.x ?? 0, scrollSize = container.nativeElement.scrollLeft, delta = snappedX - scrollSize;
|
|
246
244
|
left = sWidth;
|
|
247
245
|
right = width;
|
|
248
246
|
top = 0;
|
|
@@ -615,4 +613,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
615
613
|
}], snappingMethod: [{
|
|
616
614
|
type: Input
|
|
617
615
|
}] } });
|
|
618
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNVLHVCQUF1QixFQUFxQixTQUFTLEVBQWdCLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUNoRyxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixHQUN2RixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQWEsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3pGLE9BQU8sRUFDTCxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsbUNBQW1DLEVBQUUsaUJBQWlCLEVBQzVLLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUNqTCxzQkFBc0IsRUFBRSxlQUFlLEdBQ3hDLE1BQU0sU0FBUyxDQUFDO0FBSWpCLE9BQU8sRUFBYSxVQUFVLEVBQWtCLE1BQU0sU0FBUyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFB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QUs7Z0JBb0JGLFdBQVc7c0JBRGQsS0FBSztnQkFtQkYsU0FBUztzQkFEWixLQUFLO2dCQW1CRixXQUFXO3NCQURkLEtBQUs7Z0JBaUJGLE9BQU87c0JBRFYsS0FBSztnQkFxQkYsY0FBYztzQkFEakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCxcclxuICBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL25nLXZpcnR1YWwtbGlzdC1pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgQkVIQVZJT1JfQVVUTywgQkVIQVZJT1JfSU5TVEFOVCwgQ0xBU1NfTElTVF9IT1JJWk9OVEFMLCBDTEFTU19MSVNUX1ZFUlRJQ0FMLCBERUZBVUxUX0RJUkVDVElPTiwgREVGQVVMVF9EWU5BTUlDX1NJWkUsIERFRkFVTFRfRU5BQkxFRF9CVUZGRVJfT1BUSU1JWkFUSU9OLCBERUZBVUxUX0lURU1fU0laRSxcclxuICBERUZBVUxUX0lURU1TX09GRlNFVCwgREVGQVVMVF9MSVNUX1NJWkUsIERFRkFVTFRfU05BUCwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QsIEhFSUdIVF9QUk9QX05BTUUsIExFRlRfUFJPUF9OQU1FLCBNQVhfU0NST0xMX1RPX0lURVJBVElPTlMsIFBYLCBTQ1JPTEwsIFNDUk9MTF9FTkQsIFRPUF9QUk9QX05BTUUsXHJcbiAgVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSwgV0lEVEhfUFJPUF9OQU1FLFxyXG59IGZyb20gJy4vY29uc3QnO1xyXG5pbXBvcnQgeyBJU2Nyb2xsRXZlbnQsIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24sIElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdFN0aWNreU1hcCB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgSWQsIElTaXplIH0gZnJvbSAnLi90eXBlcyc7XHJcbmltcG9ydCB7IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfSBmcm9tICcuL21vZGVscy9yZW5kZXItY29sbGVjdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IERpcmVjdGlvbiwgRGlyZWN0aW9ucywgU25hcHBpbmdNZXRob2QgfSBmcm9tICcuL2VudW1zJztcclxuaW1wb3J0IHsgU2Nyb2xsRXZlbnQsIFRyYWNrQm94LCBpc0RpcmVjdGlvbiwgdG9nZ2xlQ2xhc3NOYW1lIH0gZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCB7IElHZXRJdGVtUG9zaXRpb25PcHRpb25zLCBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnMsIFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSB9IGZyb20gJy4vdXRpbHMvdHJhY2tCb3gnO1xyXG5pbXBvcnQgeyBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQgfSBmcm9tICcuL3V0aWxzL3NuYXBwaW5nLW1ldGhvZCc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHsgRklSRUZPWF9TQ1JPTExCQVJfT1ZFUkxBUF9TSVpFLCBJU19GSVJFRk9YIH0gZnJvbSAnLi91dGlscy9icm93c2VyJztcclxuXHJcbi8qKlxyXG4gKiBWaXJ0dWFsIGxpc3QgY29tcG9uZW50LlxyXG4gKiBNYXhpbXVtIHBlcmZvcm1hbmNlIGZvciBleHRyZW1lbHkgbGFyZ2UgbGlzdHMuXHJcbiAqIEl0IGlzIGJhc2VkIG9uIGFsZ29yaXRobXMgZm9yIHZpcnR1YWxpemF0aW9uIG9mIHNjcmVlbiBvYmplY3RzLlxyXG4gKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vRGpvbm55WC9uZy12aXJ0dWFsLWxpc3QvYmxvYi8xNi54L3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHNcclxuICogQGF1dGhvciBFdmdlbmlpIEdyZWJlbm5pa292XHJcbiAqIEBlbWFpbCBkam9ubnl4QGdtYWlsLmNvbVxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZy12aXJ0dWFsLWxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5nVmlydHVhbExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgX19uZXh0SWQ6IG51bWJlciA9IDA7XHJcblxyXG4gIHByaXZhdGUgX2lkOiBudW1iZXIgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkO1xyXG4gIC8qKlxyXG4gICAqIFJlYWRvbmx5LiBSZXR1cm5zIHRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29tcG9uZW50LlxyXG4gICAqL1xyXG4gIGdldCBpZCgpIHsgcmV0dXJuIHRoaXMuX2lkOyB9XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3JlbmRlcmVyc0NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByb3RlY3RlZCBfbGlzdENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB9KVxyXG4gIHByb3RlY3RlZCBfY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnbGlzdCcsIHsgcmVhZDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4gfSlcclxuICBwcm90ZWN0ZWQgX2xpc3Q6IEVsZW1lbnRSZWY8SFRNTFVMaXN0RWxlbWVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NuYXBSZW5kZXJlckNvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByb3RlY3RlZCBfc25hcENvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc25hcHBlZCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gIHByb3RlY3RlZCBfc25hcHBlZENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogRmlyZXMgd2hlbiB0aGUgbGlzdCBoYXMgYmVlbiBzY3JvbGxlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBvblNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8SVNjcm9sbEV2ZW50PigpO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBjb21wbGV0ZWQgc2Nyb2xsaW5nLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxJU2Nyb2xsRXZlbnQ+KCk7XHJcblxyXG5cclxuICBwcml2YXRlIF8kaXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgJGl0ZW1zID0gdGhpcy5fJGl0ZW1zLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtc1RyYW5zZm9ybSA9ICh2OiBJVmlydHVhbExpc3RDb2xsZWN0aW9uIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICB0aGlzLl90cmFja0JveC5yZXNldENvbGxlY3Rpb24odiwgdGhpcy5fJGl0ZW1TaXplLmdldFZhbHVlKCkpO1xyXG4gICAgcmV0dXJuIHY7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29sbGVjdGlvbiBvZiBsaXN0IGl0ZW1zLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1zKHY6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24pIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbXMuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRWYWx1ZSA9IHRoaXMuX2l0ZW1zVHJhbnNmb3JtKHYpO1xyXG5cclxuICAgIHRoaXMuXyRpdGVtcy5uZXh0KHRyYW5zZm9ybWVkVmFsdWUpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBpdGVtcygpIHsgcmV0dXJuIHRoaXMuXyRpdGVtcy5nZXRWYWx1ZSgpIGFzIElWaXJ0dWFsTGlzdENvbGxlY3Rpb247IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXAgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfU05BUCk7XHJcbiAgcmVhZG9ubHkgJHNuYXAgPSB0aGlzLl8kc25hcC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGVsZW1lbnRzIHdpbGwgc25hcC4gRGVmYXVsdCB2YWx1ZSBpcyBcInRydWVcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzbmFwKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kc25hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kc25hcC5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBzbmFwKCkgeyByZXR1cm4gdGhpcy5fJHNuYXAuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9FTkFCTEVEX0JVRkZFUl9PUFRJTUlaQVRJT04pO1xyXG4gIHJlYWRvbmx5ICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uYXNPYnNlcnZhYmxlKCk7XHJcbiAgLyoqXHJcbiAgICogRXhwZXJpbWVudGFsIVxyXG4gICAqIEVuYWJsZXMgYnVmZmVyIG9wdGltaXphdGlvbi5cclxuICAgKiBDYW4gb25seSBiZSB1c2VkIGlmIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uIGFyZSBub3QgYWRkZWQgb3IgdXBkYXRlZC4gT3RoZXJ3aXNlLCBhcnRpZmFjdHMgaW4gdGhlIGZvcm0gb2YgdHdpdGNoaW5nIG9mIHRoZSBzY3JvbGwgYXJlYSBhcmUgcG9zc2libGUuXHJcbiAgICogV29ya3Mgb25seSBpZiB0aGUgcHJvcGVydHkgZHluYW1pYyA9IHRydWVcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uKCkgeyByZXR1cm4gdGhpcy5fJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1SZW5kZXJlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkaXRlbVJlbmRlcmVyID0gdGhpcy5fJGl0ZW1SZW5kZXJlci5hc09ic2VydmFibGUoKTtcclxuICAvKipcclxuICAqIFJlbmRlcmluZyBlbGVtZW50IHRlbXBsYXRlLlxyXG4gICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbVJlbmRlcmVyKHY6IFRlbXBsYXRlUmVmPGFueT4pIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRpdGVtUmVuZGVyZXIubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgaXRlbVJlbmRlcmVyKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1SZW5kZXJlci5nZXRWYWx1ZSgpIGFzIFRlbXBsYXRlUmVmPGFueT47IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHN0aWNreU1hcCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0U3RpY2t5TWFwPih7fSk7XHJcbiAgcmVhZG9ubHkgJHN0aWNreU1hcCA9IHRoaXMuXyRzdGlja3lNYXAuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIERpY3Rpb25hcnkgekluZGV4IGJ5IGlkIG9mIHRoZSBsaXN0IGVsZW1lbnQuIElmIHRoZSB2YWx1ZSBpcyBub3Qgc2V0IG9yIGVxdWFsIHRvIDAsXHJcbiAgICogdGhlbiBhIHNpbXBsZSBlbGVtZW50IGlzIGRpc3BsYXllZCwgaWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiAwLCB0aGVuIHRoZSBzdGlja3kgcG9zaXRpb24gbW9kZSBpcyBlbmFibGVkIGZvciB0aGUgZWxlbWVudC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBzdGlja3lNYXAodjogSVZpcnR1YWxMaXN0U3RpY2t5TWFwKSB7XHJcbiAgICBpZiAodGhpcy5fJHN0aWNreU1hcC5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kc3RpY2t5TWFwLm5leHQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IHN0aWNreU1hcCgpIHsgcmV0dXJuIHRoaXMuXyRzdGlja3lNYXAuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9pdGVtU2l6ZU9wdGlvbnMgPSAodjogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XHJcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBERUZBVUxUX0lURU1fU0laRTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbCA9IE51bWJlcih2KTtcclxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4odmFsKSB8fCB2YWwgPD0gMCA/IERFRkFVTFRfSVRFTV9TSVpFIDogdmFsO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgXyRpdGVtU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihERUZBVUxUX0lURU1fU0laRSk7XHJcbiAgcmVhZG9ubHkgJGl0ZW1TaXplID0gdGhpcy5fJGl0ZW1TaXplLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBJZiBkaXJlY3Rpb24gPSAndmVydGljYWwnLCB0aGVuIHRoZSBoZWlnaHQgb2YgYSB0eXBpY2FsIGVsZW1lbnQuIElmIGRpcmVjdGlvbiA9ICdob3Jpem9udGFsJywgdGhlbiB0aGUgd2lkdGggb2YgYSB0eXBpY2FsIGVsZW1lbnQuXHJcbiAgICogSWdub3JlZCBpZiB0aGUgZHluYW1pY1NpemUgcHJvcGVydHkgaXMgdHJ1ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtU2l6ZSh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbVNpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1TaXplLm5leHQodGhpcy5faXRlbVNpemVPcHRpb25zKHYpKTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgaXRlbVNpemUoKSB7IHJldHVybiB0aGlzLl8kaXRlbVNpemUuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kZHluYW1pY1NpemUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KERFRkFVTFRfRFlOQU1JQ19TSVpFKTtcclxuICByZWFkb25seSAkZHluYW1pY1NpemUgPSB0aGlzLl8kZHluYW1pY1NpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRydWUgdGhlbiB0aGUgaXRlbXMgaW4gdGhlIGxpc3QgY2FuIGhhdmUgZGlmZmVyZW50IHNpemVzIGFuZCB0aGUgaXRlbVNpemUgcHJvcGVydHkgaXMgaWdub3JlZC5cclxuICAgKiBJZiBmYWxzZSB0aGVuIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBoYXZlIGEgZml4ZWQgc2l6ZSBzcGVjaWZpZWQgYnkgdGhlIGl0ZW1TaXplIHByb3BlcnR5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkeW5hbWljU2l6ZSh2OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5fJGR5bmFtaWNTaXplLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRkeW5hbWljU2l6ZS5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBkeW5hbWljU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRkeW5hbWljU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkaXJlY3Rpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpcmVjdGlvbj4oREVGQVVMVF9ESVJFQ1RJT04pO1xyXG4gIHJlYWRvbmx5ICRkaXJlY3Rpb24gPSB0aGlzLl8kZGlyZWN0aW9uLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggZWxlbWVudHMgYXJlIHBsYWNlZC4gRGVmYXVsdCB2YWx1ZSBpcyBcInZlcnRpY2FsXCIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgZGlyZWN0aW9uKHY6IERpcmVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGRpcmVjdGlvbi5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBkaXJlY3Rpb24oKSB7IHJldHVybiB0aGlzLl8kZGlyZWN0aW9uLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1zT2Zmc2V0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfSVRFTVNfT0ZGU0VUKTtcclxuICByZWFkb25seSAkaXRlbXNPZmZzZXQgPSB0aGlzLl8kaXRlbXNPZmZzZXQuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIE51bWJlciBvZiBlbGVtZW50cyBvdXRzaWRlIHRoZSBzY29wZSBvZiB2aXNpYmlsaXR5LiBEZWZhdWx0IHZhbHVlIGlzIDIuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbXNPZmZzZXQodjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5fJGl0ZW1zT2Zmc2V0LmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRpdGVtc09mZnNldC5uZXh0KHYpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1zT2Zmc2V0KCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1zT2Zmc2V0LmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJHRyYWNrQnkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oVFJBQ0tfQllfUFJPUEVSVFlfTkFNRSk7XHJcbiAgcmVhZG9ubHkgJHRyYWNrQnkgPSB0aGlzLl8kdHJhY2tCeS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGJ5IHdoaWNoIHRyYWNraW5nIGlzIHBlcmZvcm1lZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHRyYWNrQnkodjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJHRyYWNrQnkubmV4dCh2KTtcclxuICB9O1xyXG4gIGdldCB0cmFja0J5KCkgeyByZXR1cm4gdGhpcy5fJHRyYWNrQnkuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF9pc1ZlcnRpY2FsID0gdGhpcy5nZXRJc1ZlcnRpY2FsKCk7XHJcblxyXG4gIHByaXZhdGUgXyRzbmFwcGluZ01ldGhvZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U25hcHBpbmdNZXRob2Q+KERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKTtcclxuICByZWFkb25seSAkc25hcHBpbmdNZXRob2QgPSB0aGlzLl8kc25hcHBpbmdNZXRob2QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFNuYXBwaW5nIG1ldGhvZC5cclxuICAgKiAnZGVmYXVsdCcgLSBOb3JtYWwgZ3JvdXAgcmVuZGVyaW5nLlxyXG4gICAqICdhZHZhbmNlZCcgLSBUaGUgZ3JvdXAgaXMgcmVuZGVyZWQgb24gYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLiBMaXN0IGl0ZW1zIGJlbG93IHRoZSBncm91cCBhcmUgbm90IHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXBwaW5nTWV0aG9kKHY6IFNuYXBwaW5nTWV0aG9kKSB7XHJcbiAgICBpZiAodGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRzbmFwcGluZ01ldGhvZC5uZXh0KHYpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXBwaW5nTWV0aG9kKCkgeyByZXR1cm4gdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJvdGVjdGVkIF9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQ6IGJvb2xlYW4gPSB0aGlzLmdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZCgpO1xyXG5cclxuICBwcm90ZWN0ZWQgX2Rpc3BsYXlDb21wb25lbnRzOiBBcnJheTxDb21wb25lbnRSZWY8TmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQ+PiA9IFtdO1xyXG5cclxuICBwcm90ZWN0ZWQgX3NuYXBlZERpc3BsYXlDb21wb25lbnQ6IENvbXBvbmVudFJlZjxOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHByb3RlY3RlZCBfJGJvdW5kcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVNpemUgfCBudWxsPihudWxsKTtcclxuXHJcbiAgcHJvdGVjdGVkIF8kc2Nyb2xsU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgY29uc3QgbGlzdCA9IHRoaXMuX2xpc3QsIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciwgc25hcHBlZENvbXBvbmVudCA9IHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQ/Lmluc3RhbmNlO1xyXG4gICAgaWYgKGxpc3QgJiYgY29udGFpbmVyICYmIHNuYXBwZWRDb21wb25lbnQpIHtcclxuICAgICAgY29uc3QgaXNWZXJ0aWNhbCA9IHRoaXMuX2lzVmVydGljYWwsIGxpc3RCb3VuZHMgPSBsaXN0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksIGxpc3RFbGVtZW50ID0gbGlzdD8ubmF0aXZlRWxlbWVudCxcclxuICAgICAgICB7IHdpZHRoOiBsV2lkdGgsIGhlaWdodDogbEhlaWdodCB9ID0gbGlzdEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxyXG4gICAgICAgIHsgd2lkdGgsIGhlaWdodCB9ID0gdGhpcy5fJGJvdW5kcy5nZXRWYWx1ZSgpID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxyXG4gICAgICAgIGlzU2Nyb2xsYWJsZSA9IGlzVmVydGljYWwgPyBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiAwIDogY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGggPiAwO1xyXG5cclxuICAgICAgbGV0IHNjcm9sbEJhclNpemUgPSBpc1ZlcnRpY2FsID8gd2lkdGggLSBsV2lkdGggOiBoZWlnaHQgLSBsSGVpZ2h0LCBpc1Njcm9sbEJhck92ZXJsYXAgPSB0cnVlLCBvdmVybGFwU2Nyb2xsQmFyU2l6ZSA9IDA7XHJcbiAgICAgIGlmIChzY3JvbGxCYXJTaXplID09PSAwICYmIGlzU2Nyb2xsYWJsZSkge1xyXG4gICAgICAgIGlzU2Nyb2xsQmFyT3ZlcmxhcCA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc1Njcm9sbEJhck92ZXJsYXAgJiYgSVNfRklSRUZPWCkge1xyXG4gICAgICAgIHNjcm9sbEJhclNpemUgPSBvdmVybGFwU2Nyb2xsQmFyU2l6ZSA9IEZJUkVGT1hfU0NST0xMQkFSX09WRVJMQVBfU0laRTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc25hcHBlZENvbXBvbmVudC5lbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNIDAgMCBMIDAgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0SGVpZ2h0fSBMICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldFdpZHRoIC0gb3ZlcmxhcFNjcm9sbEJhclNpemV9ICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldEhlaWdodH0gTCAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRXaWR0aCAtIG92ZXJsYXBTY3JvbGxCYXJTaXplfSAwIFpcIilgO1xyXG5cclxuICAgICAgc25hcHBlZENvbXBvbmVudC5yZWd1bGFyTGVuZ3RoID0gYCR7aXNWZXJ0aWNhbCA/IGxpc3RCb3VuZHMud2lkdGggOiBsaXN0Qm91bmRzLmhlaWdodH0ke1BYfWA7XHJcbiAgICAgIGNvbnN0IHsgd2lkdGg6IHNXaWR0aCwgaGVpZ2h0OiBzSGVpZ2h0IH0gPSBzbmFwcGVkQ29tcG9uZW50LmdldEJvdW5kcygpID8/IHsgd2lkdGg6IDAsIGhlaWdodDogMCB9LFxyXG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgIGxldCBsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlcjtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICBjb25zdCBzbmFwcGVkWSA9IHNuYXBwZWRDb21wb25lbnQuaXRlbT8ubWVhc3VyZXMueSA/PyAwLCBzY3JvbGxTaXplID0gY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wLCBkZWx0YSA9IHNuYXBwZWRZIC0gc2Nyb2xsU2l6ZTtcclxuICAgICAgICBsZWZ0ID0gMDtcclxuICAgICAgICByaWdodCA9IHdpZHRoIC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICB0b3AgPSBzSGVpZ2h0O1xyXG4gICAgICAgIGJvdHRvbSA9IGhlaWdodDtcclxuICAgICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNIDAgJHt0b3AgKyBkZWx0YX0gTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9IDAgTCAke3JpZ2h0fSAwIEwgJHtyaWdodH0gJHt0b3AgKyBkZWx0YX0gWlwiKWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3Qgc25hcHBlZFggPSBzbmFwcGVkQ29tcG9uZW50Lml0ZW0/Lm1lYXN1cmVzLnggPz8gMCwgc2Nyb2xsU2l6ZSA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQsIGRlbHRhID0gc25hcHBlZFggLSBzY3JvbGxTaXplO1xyXG4gICAgICAgIGxlZnQgPSBzV2lkdGg7XHJcbiAgICAgICAgcmlnaHQgPSB3aWR0aDtcclxuICAgICAgICB0b3AgPSAwO1xyXG4gICAgICAgIGJvdHRvbSA9IGhlaWdodCAtIHNjcm9sbEJhclNpemU7XHJcbiAgICAgICAgY29udGFpbmVyRWxlbWVudC5zdHlsZS5jbGlwUGF0aCA9IGBwYXRoKFwiTSAke2xlZnQgKyBkZWx0YX0gMCBMICR7bGVmdCArIGRlbHRhfSAke2JvdHRvbX0gTCAwICR7Ym90dG9tfSBMIDAgJHtoZWlnaHR9IEwgJHt3aWR0aH0gJHtoZWlnaHR9IEwgJHt3aWR0aH0gMCBaXCIpYDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfb25SZXNpemVIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5fY29udGFpbmVyPy5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgIGlmIChib3VuZHMpIHtcclxuICAgICAgdGhpcy5fJGJvdW5kcy5uZXh0KHsgd2lkdGg6IGJvdW5kcy53aWR0aCwgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0IH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fJGJvdW5kcy5uZXh0KHsgd2lkdGg6IERFRkFVTFRfTElTVF9TSVpFLCBoZWlnaHQ6IERFRkFVTFRfTElTVF9TSVpFIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgdGhpcy51cGRhdGVSZWd1bGFyUmVuZGVyZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uU2Nyb2xsSGFuZGxlciA9IChlPzogRXZlbnQpID0+IHtcclxuICAgIHRoaXMuY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKTtcclxuXHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSAodGhpcy5faXNWZXJ0aWNhbCA/IGNvbnRhaW5lci5zY3JvbGxUb3AgOiBjb250YWluZXIuc2Nyb2xsTGVmdCk7XHJcblxyXG4gICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KHNjcm9sbFNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfJGluaXRpYWxpemVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHJlYWRvbmx5ICRpbml0aWFsaXplZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljdGlvbmFyeSBvZiBlbGVtZW50IHNpemVzIGJ5IHRoZWlyIGlkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfdHJhY2tCb3ggPSBuZXcgVHJhY2tCb3godGhpcy50cmFja0J5KTtcclxuXHJcbiAgcHJpdmF0ZSBfb25UcmFja0JveENoYW5nZUhhbmRsZXIgPSAodjogbnVtYmVyKSA9PiB7XHJcbiAgICB0aGlzLl8kY2FjaGVWZXJzaW9uLm5leHQodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kY2FjaGVWZXJzaW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KC0xKTtcclxuICBnZXQgJGNhY2hlVmVyc2lvbigpIHsgcmV0dXJuIHRoaXMuXyRjYWNoZVZlcnNpb24uYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD5cclxuICApIHtcclxuICAgIE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgPSBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMSA9PT0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcclxuICAgICAgPyAwIDogTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCArIDE7XHJcbiAgICB0aGlzLl9pZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcblxyXG4gICAgdGhpcy5fJGluaXRpYWxpemVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICB0aGlzLiRpbml0aWFsaXplZCA9IHRoaXMuXyRpbml0aWFsaXplZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICB0aGlzLl90cmFja0JveC5kaXNwbGF5Q29tcG9uZW50cyA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzO1xyXG5cclxuICAgIGNvbnN0ICR0cmFja0J5ID0gdGhpcy4kdHJhY2tCeTtcclxuXHJcbiAgICAkdHJhY2tCeS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnRyYWNraW5nUHJvcGVydHlOYW1lID0gdjtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbnN0ICRib3VuZHMgPSB0aGlzLl8kYm91bmRzLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgIGZpbHRlcihiID0+ICEhYiksXHJcbiAgICApLCAkaXRlbXMgPSB0aGlzLiRpdGVtcy5waXBlKFxyXG4gICAgICBtYXAoaSA9PiAhaSA/IFtdIDogaSksXHJcbiAgICApLCAkc2Nyb2xsU2l6ZSA9IHRoaXMuXyRzY3JvbGxTaXplLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAkaXRlbVNpemUgPSB0aGlzLiRpdGVtU2l6ZS5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHYgPD0gMCA/IERFRkFVTFRfSVRFTV9TSVpFIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRpdGVtc09mZnNldCA9IHRoaXMuJGl0ZW1zT2Zmc2V0LnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8IDAgPyBERUZBVUxUX0lURU1TX09GRlNFVCA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkc3RpY2t5TWFwID0gdGhpcy4kc3RpY2t5TWFwLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gIXYgPyB7fSA6IHYpLFxyXG4gICAgICApLFxyXG4gICAgICAkc25hcCA9IHRoaXMuJHNuYXAsXHJcbiAgICAgICRpc1ZlcnRpY2FsID0gdGhpcy4kZGlyZWN0aW9uLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdGhpcy5nZXRJc1ZlcnRpY2FsKHYgfHwgREVGQVVMVF9ESVJFQ1RJT04pKSxcclxuICAgICAgKSxcclxuICAgICAgJGR5bmFtaWNTaXplID0gdGhpcy4kZHluYW1pY1NpemUsXHJcbiAgICAgICRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gdGhpcy4kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgJHNuYXBwaW5nTWV0aG9kID0gdGhpcy4kc25hcHBpbmdNZXRob2QucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZCh2IHx8IERFRkFVTFRfU05BUFBJTkdfTUVUSE9EKSksXHJcbiAgICAgICksXHJcbiAgICAgICRjYWNoZVZlcnNpb24gPSB0aGlzLiRjYWNoZVZlcnNpb247XHJcblxyXG4gICAgJGlzVmVydGljYWwucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9pc1ZlcnRpY2FsID0gdjtcclxuICAgICAgICBjb25zdCBlbDogSFRNTEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdG9nZ2xlQ2xhc3NOYW1lKGVsLCB2ID8gQ0xBU1NfTElTVF9WRVJUSUNBTCA6IENMQVNTX0xJU1RfSE9SSVpPTlRBTCwgdHJ1ZSk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkc25hcHBpbmdNZXRob2QucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHRhcCh2ID0+IHtcclxuICAgICAgICB0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB0aGlzLl90cmFja0JveC5pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgJGR5bmFtaWNTaXplLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAoZHluYW1pY1NpemUgPT4ge1xyXG4gICAgICAgIHRoaXMubGlzdGVuQ2FjaGVDaGFuZ2VzSWZOZWVkKGR5bmFtaWNTaXplKTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy4kaW5pdGlhbGl6ZWQsICRib3VuZHMsICRpdGVtcywgJHN0aWNreU1hcCwgJHNjcm9sbFNpemUsICRpdGVtU2l6ZSxcclxuICAgICAgJGl0ZW1zT2Zmc2V0LCAkc25hcCwgJGlzVmVydGljYWwsICRkeW5hbWljU2l6ZSwgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sICRjYWNoZVZlcnNpb24sXHJcbiAgICBdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKChbaW5pdGlhbGl6ZWRdKSA9PiAhIWluaXRpYWxpemVkKSxcclxuICAgICAgc3dpdGNoTWFwKChbLFxyXG4gICAgICAgIGJvdW5kcywgaXRlbXMsIHN0aWNreU1hcCwgc2Nyb2xsU2l6ZSwgaXRlbVNpemUsXHJcbiAgICAgICAgaXRlbXNPZmZzZXQsIHNuYXAsIGlzVmVydGljYWwsIGR5bmFtaWNTaXplLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLCBjYWNoZVZlcnNpb24sXHJcbiAgICAgIF0pID0+IHtcclxuICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9ICh0aGlzLl9pc1ZlcnRpY2FsID8gdGhpcy5fY29udGFpbmVyPy5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA/PyAwIDogdGhpcy5fY29udGFpbmVyPy5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpID8/IDA7XHJcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBib3VuZHMhLFxyXG4gICAgICAgICAgb3B0czogSVVwZGF0ZUNvbGxlY3Rpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbCwgaXRlbVNpemUsXHJcbiAgICAgICAgICAgIGl0ZW1zT2Zmc2V0LCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBzbmFwLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHsgZGlzcGxheUl0ZW1zLCB0b3RhbFNpemUgfSA9IHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIHN0aWNreU1hcCwgb3B0cyk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRCb3VuZHNTaXplKGlzVmVydGljYWwsIHRvdGFsU2l6ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyO1xyXG5cclxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMuX3RyYWNrQm94LmRlbHRhO1xyXG4gICAgICAgICAgYWN0dWFsU2Nyb2xsU2l6ZSA9IGFjdHVhbFNjcm9sbFNpemUgKyBkZWx0YTtcclxuXHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNjcm9sbFNpemUgIT09IGFjdHVhbFNjcm9sbFNpemUpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW1zOiBTY3JvbGxUb09wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBhY3R1YWxTY3JvbGxTaXplLFxyXG4gICAgICAgICAgICAgIGJlaGF2aW9yOiBCRUhBVklPUl9JTlNUQU5UIGFzIFNjcm9sbEJlaGF2aW9yXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUbyhwYXJhbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9mKGRpc3BsYXlJdGVtcyk7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRpbml0aWFsaXplZCwgdGhpcy4kaXRlbVJlbmRlcmVyXSkucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgIGZpbHRlcigoW2luaXRpYWxpemVkXSkgPT4gISFpbml0aWFsaXplZCksXHJcbiAgICAgIHRhcCgoWywgaXRlbVJlbmRlcmVyXSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVzZXRSZW5kZXJlcnMoaXRlbVJlbmRlcmVyKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLl8kaW5pdGlhbGl6ZWQubmV4dCh0cnVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbGlzdGVuQ2FjaGVDaGFuZ2VzSWZOZWVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgaWYgKCF0aGlzLl90cmFja0JveC5oYXNFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpKSB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guYWRkRXZlbnRMaXN0ZW5lcihUUkFDS19CT1hfQ0hBTkdFX0VWRU5UX05BTUUsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX3RyYWNrQm94Lmhhc0V2ZW50TGlzdGVuZXIoVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcikpIHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzU25hcHBpbmdNZXRob2RBZHZhbmNlZChtPzogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IG0gfHwgdGhpcy5fJHNuYXBwaW5nTWV0aG9kLmdldFZhbHVlKCk7XHJcbiAgICByZXR1cm4gaXNTbmFwcGluZ01ldGhvZEFkdmVuY2VkKG1ldGhvZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldElzVmVydGljYWwoZD86IERpcmVjdGlvbikge1xyXG4gICAgY29uc3QgZGlyID0gZCB8fCB0aGlzLmRpcmVjdGlvbjtcclxuICAgIHJldHVybiBpc0RpcmVjdGlvbihkaXIsIERpcmVjdGlvbnMuVkVSVElDQUwpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcclxuICAgIHRoaXMuX3RyYWNrQm94LmNoYW5nZXMoKTtcclxuICB9KTtcclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXM6IElSZW5kZXJWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCBudWxsKSB7XHJcbiAgICBpZiAoIWRpc3BsYXlJdGVtcyB8fCAhdGhpcy5fbGlzdENvbnRhaW5lclJlZikge1xyXG4gICAgICB0aGlzLl90cmFja0JveC5zZXREaXNwbGF5T2JqZWN0SW5kZXhNYXBCeUlkKHt9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQgJiYgdGhpcy5zbmFwKSB7XHJcbiAgICAgIGlmICghdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCAmJiB0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50KTtcclxuICAgICAgICBjb21wLmluc3RhbmNlLnJlZ3VsYXIgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQgPSBjb21wO1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnNuYXBlZERpc3BsYXlDb21wb25lbnQgPSB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50O1xyXG5cclxuICAgICAgICB0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5fcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIpO1xyXG4gICAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlci5vYnNlcnZlKGNvbXAuaW5zdGFuY2UuZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl90cmFja0JveC5pdGVtcyA9IGRpc3BsYXlJdGVtcztcclxuXHJcbiAgICBjb25zdCBfbGlzdENvbnRhaW5lclJlZiA9IHRoaXMuX2xpc3RDb250YWluZXJSZWY7XHJcblxyXG4gICAgY29uc3QgbWF4TGVuZ3RoID0gZGlzcGxheUl0ZW1zLmxlbmd0aCwgY29tcG9uZW50cyA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzO1xyXG5cclxuICAgIHdoaWxlIChjb21wb25lbnRzLmxlbmd0aCA8IG1heExlbmd0aCkge1xyXG4gICAgICBpZiAoX2xpc3RDb250YWluZXJSZWYpIHtcclxuICAgICAgICBjb25zdCBjb21wID0gX2xpc3RDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50KTtcclxuICAgICAgICBjb21wb25lbnRzLnB1c2goY29tcCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbXBvbmVudHNSZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbXAuaW5zdGFuY2UuZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc2V0UmVuZGVyZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpIHtcclxuICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRDb21wb25lbnRIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0UmVuZGVyZXJzKGl0ZW1SZW5kZXJlcj86IFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50Pikge1xyXG4gICAgY29uc3QgZG9NYXA6IHsgW2lkOiBudW1iZXJdOiBudW1iZXIgfSA9IHt9O1xyXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzW2ldO1xyXG4gICAgICBpdGVtLmluc3RhbmNlLnJlbmRlcmVyID0gaXRlbVJlbmRlcmVyIHx8IHRoaXMuaXRlbVJlbmRlcmVyO1xyXG4gICAgICBkb01hcFtpdGVtLmluc3RhbmNlLmlkXSA9IGk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCAmJiB0aGlzLnNuYXAgJiYgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCAmJiB0aGlzLl9zbmFwQ29udGFpbmVyUmVmKSB7XHJcbiAgICAgIGNvbnN0IGNvbXAgPSB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50O1xyXG4gICAgICBjb21wLmluc3RhbmNlLnJlbmRlcmVyID0gaXRlbVJlbmRlcmVyIHx8IHRoaXMuaXRlbVJlbmRlcmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94LnNldERpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQoZG9NYXApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2tpbmcgYnkgaWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgdHJhY2tpbmcoKSB7XHJcbiAgICB0aGlzLl90cmFja0JveC50cmFjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbDogYm9vbGVhbiwgdG90YWxTaXplOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGwgPSB0aGlzLl9saXN0O1xyXG4gICAgaWYgKGwpIHtcclxuICAgICAgbC5uYXRpdmVFbGVtZW50LnN0eWxlW2lzVmVydGljYWwgPyBIRUlHSFRfUFJPUF9OQU1FIDogV0lEVEhfUFJPUF9OQU1FXSA9IGAke3RvdGFsU2l6ZX0ke1BYfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBib3VuZHMgb2YgYW4gZWxlbWVudCB3aXRoIGEgZ2l2ZW4gaWRcclxuICAgKi9cclxuICBnZXRJdGVtQm91bmRzKGlkOiBJZCk6IElTaXplIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFja0JveC5nZXRJdGVtQm91bmRzKGlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBtZXRob2Qgc2Nyb2xscyB0aGUgbGlzdCB0byB0aGUgZWxlbWVudCB3aXRoIHRoZSBnaXZlbiBpZCBhbmQgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHNjcm9sbGVkIGFyZWEuXHJcbiAgICogQmVoYXZpb3IgYWNjZXB0cyB0aGUgdmFsdWVzIOKAi+KAi1wiYXV0b1wiLCBcImluc3RhbnRcIiBhbmQgXCJzbW9vdGhcIi5cclxuICAgKi9cclxuICBzY3JvbGxUbyhpZDogSWQsIGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0FVVE8gYXMgU2Nyb2xsQmVoYXZpb3IpIHtcclxuICAgIHRoaXMuc2Nyb2xsVG9FeGVjdXRvcihpZCwgYmVoYXZpb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKSB7XHJcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzY3JvbGxUb0V4ZWN1dG9yKGlkOiBJZCwgYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yLCBpdGVyYXRpb246IG51bWJlciA9IDAsIGlzTGFzdEl0ZXJhdGlvbiA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXM7XHJcbiAgICBpZiAoIWl0ZW1zIHx8ICFpdGVtcy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGR5bmFtaWNTaXplID0gdGhpcy5keW5hbWljU2l6ZSwgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyLCBpdGVtU2l6ZSA9IHRoaXMuaXRlbVNpemU7XHJcbiAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKTtcclxuXHJcbiAgICAgIGlmIChkeW5hbWljU2l6ZSkge1xyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCkgfHwgeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgICBzdGlja3lNYXAgPSB0aGlzLnN0aWNreU1hcCwgaXRlbXMgPSB0aGlzLml0ZW1zLCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgZGVsdGEgPSB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICAgIG9wdHM6IElHZXRJdGVtUG9zaXRpb25PcHRpb25zPElWaXJ0dWFsTGlzdEl0ZW0sIElWaXJ0dWFsTGlzdENvbGxlY3Rpb24+ID0ge1xyXG4gICAgICAgICAgICBib3VuZHM6IHsgd2lkdGgsIGhlaWdodCB9LCBjb2xsZWN0aW9uOiBpdGVtcywgZHluYW1pY1NpemUsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsIGl0ZW1TaXplLFxyXG4gICAgICAgICAgICBpdGVtc09mZnNldDogdGhpcy5pdGVtc09mZnNldCwgc2Nyb2xsU2l6ZTogKGlzVmVydGljYWwgPyBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgOiBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KSArIGRlbHRhLFxyXG4gICAgICAgICAgICBzbmFwOiB0aGlzLnNuYXAsIGZyb21JdGVtSWQ6IGlkLCBlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uOiB0aGlzLmVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2Nyb2xsU2l6ZSA9IHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Qb3NpdGlvbihpZCwgc3RpY2t5TWFwLCBvcHRzKSxcclxuICAgICAgICAgIHBhcmFtczogU2Nyb2xsVG9PcHRpb25zID0geyBbaXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFNpemUsIGJlaGF2aW9yIH07XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guY2xlYXJEZWx0YSgpO1xyXG5cclxuICAgICAgICBpZiAoY29udGFpbmVyKSB7XHJcbiAgICAgICAgICBjb25zdCB7IGRpc3BsYXlJdGVtcywgdG90YWxTaXplIH0gPSB0aGlzLl90cmFja0JveC51cGRhdGVDb2xsZWN0aW9uKGl0ZW1zLCBzdGlja3lNYXAsIHtcclxuICAgICAgICAgICAgLi4ub3B0cywgc2Nyb2xsU2l6ZSwgZnJvbUl0ZW1JZDogaXNMYXN0SXRlcmF0aW9uID8gdW5kZWZpbmVkIDogaWQsXHJcbiAgICAgICAgICB9KSwgZGVsdGEgPSB0aGlzLl90cmFja0JveC5kZWx0YTtcclxuXHJcbiAgICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgICAgbGV0IGFjdHVhbFNjcm9sbFNpemUgPSBzY3JvbGxTaXplICsgZGVsdGE7XHJcblxyXG4gICAgICAgICAgdGhpcy5yZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbCwgdG90YWxTaXplKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtcyk7XHJcblxyXG4gICAgICAgICAgdGhpcy50cmFja2luZygpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IF9zY3JvbGxTaXplID0gdGhpcy5fdHJhY2tCb3guZ2V0SXRlbVBvc2l0aW9uKGlkLCBzdGlja3lNYXAsIHsgLi4ub3B0cywgc2Nyb2xsU2l6ZTogYWN0dWFsU2Nyb2xsU2l6ZSwgZnJvbUl0ZW1JZDogaWQgfSk7XHJcblxyXG4gICAgICAgICAgY29uc3Qgbm90Q2hhbmdlZCA9IGFjdHVhbFNjcm9sbFNpemUgPT09IF9zY3JvbGxTaXplXHJcblxyXG4gICAgICAgICAgaWYgKCFub3RDaGFuZ2VkIHx8IGl0ZXJhdGlvbiA8IE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUykge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9FeGVjdXRvcihpZCwgQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvciwgaXRlcmF0aW9uICsgMSwgbm90Q2hhbmdlZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChhY3R1YWxTY3JvbGxTaXplKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8ocGFyYW1zKTtcclxuXHJcbiAgICAgICAgdGhpcy5fJHNjcm9sbFNpemUubmV4dChzY3JvbGxTaXplKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGlkKSwgc2Nyb2xsU2l6ZSA9IGluZGV4ICogdGhpcy5pdGVtU2l6ZTtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IFNjcm9sbFRvT3B0aW9ucyA9IHsgW3RoaXMuX2lzVmVydGljYWwgPyBUT1BfUFJPUF9OQU1FIDogTEVGVF9QUk9QX05BTUVdOiBzY3JvbGxTaXplLCBiZWhhdmlvciB9O1xyXG4gICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjcm9sbHMgdGhlIHNjcm9sbCBhcmVhIHRvIHRoZSBkZXNpcmVkIGVsZW1lbnQgd2l0aCB0aGUgc3BlY2lmaWVkIElELlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvRW5kKGJlaGF2aW9yOiBTY3JvbGxCZWhhdmlvciA9IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3IpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcywgbGF0SXRlbSA9IGl0ZW1zW2l0ZW1zLmxlbmd0aCA+IDAgPyBpdGVtcy5sZW5ndGggLSAxIDogMF07XHJcbiAgICB0aGlzLnNjcm9sbFRvKGxhdEl0ZW0uaWQsIGJlaGF2aW9yKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX29uQ29udGFpbmVyU2Nyb2xsSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLl9jb250YWluZXI7XHJcbiAgICBpZiAoY29udGFpbmVyRWwpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9ICh0aGlzLl9pc1ZlcnRpY2FsID8gY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgOiBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpO1xyXG4gICAgICB0aGlzLl90cmFja0JveC5kZWx0YURpcmVjdGlvbiA9IHRoaXMuXyRzY3JvbGxTaXplLmdldFZhbHVlKCkgPiBzY3JvbGxTaXplID8gLTEgOiB0aGlzLl8kc2Nyb2xsU2l6ZS5nZXRWYWx1ZSgpIDwgc2Nyb2xsU2l6ZSA/IDEgOiAwO1xyXG5cclxuICAgICAgY29uc3QgZXZlbnQgPSBuZXcgU2Nyb2xsRXZlbnQoe1xyXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGlyZWN0aW9uLCBjb250YWluZXI6IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgbGlzdDogdGhpcy5fbGlzdCEubmF0aXZlRWxlbWVudCwgZGVsdGE6IHRoaXMuX3RyYWNrQm94LmRlbHRhLFxyXG4gICAgICAgIHNjcm9sbERlbHRhOiB0aGlzLl90cmFja0JveC5zY3JvbGxEZWx0YSwgaXNWZXJ0aWNhbDogdGhpcy5faXNWZXJ0aWNhbCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm9uU2Nyb2xsLmVtaXQoZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25Db250YWluZXJTY3JvbGxFbmRIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuX2NvbnRhaW5lcjtcclxuICAgIGlmIChjb250YWluZXJFbCkge1xyXG4gICAgICBjb25zdCBzY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA6IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCk7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmRlbHRhRGlyZWN0aW9uID0gdGhpcy5fJHNjcm9sbFNpemUuZ2V0VmFsdWUoKSA+IHNjcm9sbFNpemUgPyAtMSA6IDA7XHJcblxyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl90cmFja0JveC5zY3JvbGxEaXJlY3Rpb24sIGNvbnRhaW5lcjogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBsaXN0OiB0aGlzLl9saXN0IS5uYXRpdmVFbGVtZW50LCBkZWx0YTogdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgc2Nyb2xsRGVsdGE6IHRoaXMuX3RyYWNrQm94LnNjcm9sbERlbHRhLCBpc1ZlcnRpY2FsOiB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMub25TY3JvbGxFbmQuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLl9jb250YWluZXI7XHJcbiAgICBpZiAoY29udGFpbmVyRWwpIHtcclxuICAgICAgLy8gZm9yIGRpcmVjdGlvbiBjYWxjdWxhdGlvblxyXG4gICAgICBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vbkNvbnRhaW5lclNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0NST0xMX0VORCwgdGhpcy5fb25Db250YWluZXJTY3JvbGxFbmRIYW5kbGVyKTtcclxuXHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uU2Nyb2xsSGFuZGxlcik7XHJcblxyXG4gICAgICB0aGlzLl9yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLl9vblJlc2l6ZUhhbmRsZXIpO1xyXG4gICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQpO1xyXG5cclxuICAgICAgdGhpcy5fb25SZXNpemVIYW5kbGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQGludGVybmFsICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyU2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3RyYWNrQm94KSB7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmRpc3Bvc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX2NvbXBvbmVudHNSZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3Jlc2l6ZU9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLl9jb250YWluZXI7XHJcbiAgICBpZiAoY29udGFpbmVyRWwpIHtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25TY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25Db250YWluZXJTY3JvbGxIYW5kbGVyKTtcclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNDUk9MTF9FTkQsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsRW5kSGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudC5kZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzKSB7XHJcbiAgICAgIHdoaWxlICh0aGlzLl9kaXNwbGF5Q29tcG9uZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgY29tcCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLnBvcCgpO1xyXG4gICAgICAgIGNvbXA/LmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwic25hcFwiICNzbmFwcGVkIHBhcnQ9XCJzbmFwcGVkLWl0ZW1cIiBjbGFzcz1cIm5ndmxfX2xpc3Qtc25hcHBlclwiPlxyXG4gIDxuZy1jb250YWluZXIgI3NuYXBSZW5kZXJlckNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbjxkaXYgI2NvbnRhaW5lciBwYXJ0PVwic2Nyb2xsZXJcIiBjbGFzcz1cIm5ndmxfX3Njcm9sbGVyXCI+XHJcbiAgPHVsICNsaXN0IHBhcnQ9XCJsaXN0XCIgY2xhc3M9XCJuZ3ZsX19saXN0XCI+XHJcbiAgICA8bmctY29udGFpbmVyICNyZW5kZXJlcnNDb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgPC91bD5cclxuPC9kaXY+Il19
|
|
616
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXZpcnR1YWwtbGlzdC9zcmMvbGliL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aXJ0dWFsLWxpc3Qvc3JjL2xpYi9uZy12aXJ0dWFsLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNVLHVCQUF1QixFQUFxQixTQUFTLEVBQWdCLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUNoRyxNQUFNLEVBQWUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixHQUN2RixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxTQUFTLEVBQWEsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3pGLE9BQU8sRUFDTCxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsbUNBQW1DLEVBQUUsaUJBQWlCLEVBQzVLLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUNqTCxzQkFBc0IsRUFBRSxlQUFlLEdBQ3hDLE1BQU0sU0FBUyxDQUFDO0FBSWpCLE9BQU8sRUFBYSxVQUFVLEVBQWtCLE1BQU0sU0FBUyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFB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LHFIQUdULGdCQUFnQix1R0FHOUIsZ0JBQWdCLDZCQ3pEaEQsc1ZBT007OzRGRDZCTyxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0UsaUJBQWlCLG1CQUdWLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLFNBQVM7aUlBWWhDLGlCQUFpQjtzQkFEMUIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFJakQsVUFBVTtzQkFEbkIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQSxVQUEwQixDQUFBLEVBQUU7Z0JBSWxELEtBQUs7c0JBRGQsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQSxVQUEwQixDQUFBLEVBQUU7Z0JBSTdDLGlCQUFpQjtzQkFEMUIsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFJcEQsaUJBQWlCO3NCQUQxQixTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFPaEQsUUFBUTtzQkFEUCxNQUFNO2dCQU9QLFdBQVc7c0JBRFYsTUFBTTtnQkFnQkgsS0FBSztzQkFEUixLQUFLO2dCQXFCRixJQUFJO3NCQURQLEtBQUs7Z0JBcUJGLHlCQUF5QjtzQkFENUIsS0FBSztnQkFtQkYsWUFBWTtzQkFEZixLQUFLO2dCQW9CRixTQUFTO3NCQURaLEtBQUs7Z0JBNEJGLFFBQVE7c0JBRFgsS0FBSztnQkFvQkYsV0FBVztzQkFEZCxLQUFLO2dCQW1CRixTQUFTO3NCQURaLEtBQUs7Z0JBbUJGLFdBQVc7c0JBRGQsS0FBSztnQkFpQkYsT0FBTztzQkFEVixLQUFLO2dCQXFCRixjQUFjO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LFxyXG4gIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbmctdmlydHVhbC1saXN0LWl0ZW0uY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBCRUhBVklPUl9BVVRPLCBCRUhBVklPUl9JTlNUQU5ULCBDTEFTU19MSVNUX0hPUklaT05UQUwsIENMQVNTX0xJU1RfVkVSVElDQUwsIERFRkFVTFRfRElSRUNUSU9OLCBERUZBVUxUX0RZTkFNSUNfU0laRSwgREVGQVVMVF9FTkFCTEVEX0JVRkZFUl9PUFRJTUlaQVRJT04sIERFRkFVTFRfSVRFTV9TSVpFLFxyXG4gIERFRkFVTFRfSVRFTVNfT0ZGU0VULCBERUZBVUxUX0xJU1RfU0laRSwgREVGQVVMVF9TTkFQLCBERUZBVUxUX1NOQVBQSU5HX01FVEhPRCwgSEVJR0hUX1BST1BfTkFNRSwgTEVGVF9QUk9QX05BTUUsIE1BWF9TQ1JPTExfVE9fSVRFUkFUSU9OUywgUFgsIFNDUk9MTCwgU0NST0xMX0VORCwgVE9QX1BST1BfTkFNRSxcclxuICBUUkFDS19CWV9QUk9QRVJUWV9OQU1FLCBXSURUSF9QUk9QX05BTUUsXHJcbn0gZnJvbSAnLi9jb25zdCc7XHJcbmltcG9ydCB7IElTY3JvbGxFdmVudCwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbiwgSVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0U3RpY2t5TWFwIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJZCwgSVNpemUgfSBmcm9tICcuL3R5cGVzJztcclxuaW1wb3J0IHsgSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB9IGZyb20gJy4vbW9kZWxzL3JlbmRlci1jb2xsZWN0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgRGlyZWN0aW9uLCBEaXJlY3Rpb25zLCBTbmFwcGluZ01ldGhvZCB9IGZyb20gJy4vZW51bXMnO1xyXG5pbXBvcnQgeyBTY3JvbGxFdmVudCwgVHJhY2tCb3gsIGlzRGlyZWN0aW9uLCB0b2dnbGVDbGFzc05hbWUgfSBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IHsgSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnMsIElVcGRhdGVDb2xsZWN0aW9uT3B0aW9ucywgVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FIH0gZnJvbSAnLi91dGlscy90cmFja0JveCc7XHJcbmltcG9ydCB7IGlzU25hcHBpbmdNZXRob2RBZHZlbmNlZCB9IGZyb20gJy4vdXRpbHMvc25hcHBpbmctbWV0aG9kJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBGSVJFRk9YX1NDUk9MTEJBUl9PVkVSTEFQX1NJWkUsIElTX0ZJUkVGT1ggfSBmcm9tICcuL3V0aWxzL2Jyb3dzZXInO1xyXG5cclxuLyoqXHJcbiAqIFZpcnR1YWwgbGlzdCBjb21wb25lbnQuXHJcbiAqIE1heGltdW0gcGVyZm9ybWFuY2UgZm9yIGV4dHJlbWVseSBsYXJnZSBsaXN0cy5cclxuICogSXQgaXMgYmFzZWQgb24gYWxnb3JpdGhtcyBmb3IgdmlydHVhbGl6YXRpb24gb2Ygc2NyZWVuIG9iamVjdHMuXHJcbiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9Eam9ubnlYL25nLXZpcnR1YWwtbGlzdC9ibG9iLzE2LngvcHJvamVjdHMvbmctdmlydHVhbC1saXN0L3NyYy9saWIvbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC50c1xyXG4gKiBAYXV0aG9yIEV2Z2VuaWkgR3JlYmVubmlrb3ZcclxuICogQGVtYWlsIGRqb25ueXhAZ21haWwuY29tXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ25nLXZpcnR1YWwtbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25nLXZpcnR1YWwtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbmctdmlydHVhbC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmdWaXJ0dWFsTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHN0YXRpYyBfX25leHRJZDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQ7XHJcbiAgLyoqXHJcbiAgICogUmVhZG9ubHkuIFJldHVybnMgdGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb21wb25lbnQuXHJcbiAgICovXHJcbiAgZ2V0IGlkKCkgeyByZXR1cm4gdGhpcy5faWQ7IH1cclxuXHJcbiAgQFZpZXdDaGlsZCgncmVuZGVyZXJzQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJvdGVjdGVkIF9saXN0Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IH0pXHJcbiAgcHJvdGVjdGVkIF9jb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdsaXN0JywgeyByZWFkOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiB9KVxyXG4gIHByb3RlY3RlZCBfbGlzdDogRWxlbWVudFJlZjxIVE1MVUxpc3RFbGVtZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc25hcFJlbmRlcmVyQ29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJvdGVjdGVkIF9zbmFwQ29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICBAVmlld0NoaWxkKCdzbmFwcGVkJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgcHJvdGVjdGVkIF9zbmFwcGVkQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvKipcclxuICAgKiBGaXJlcyB3aGVuIHRoZSBsaXN0IGhhcyBiZWVuIHNjcm9sbGVkLlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIG9uU2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxJU2Nyb2xsRXZlbnQ+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpcmVzIHdoZW4gdGhlIGxpc3QgaGFzIGNvbXBsZXRlZCBzY3JvbGxpbmcuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgb25TY3JvbGxFbmQgPSBuZXcgRXZlbnRFbWl0dGVyPElTY3JvbGxFdmVudD4oKTtcclxuXHJcblxyXG4gIHByaXZhdGUgXyRpdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICByZWFkb25seSAkaXRlbXMgPSB0aGlzLl8kaXRlbXMuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1zVHJhbnNmb3JtID0gKHY6IElWaXJ0dWFsTGlzdENvbGxlY3Rpb24gfCB1bmRlZmluZWQpID0+IHtcclxuICAgIHRoaXMuX3RyYWNrQm94LnJlc2V0Q29sbGVjdGlvbih2LCB0aGlzLl8kaXRlbVNpemUuZ2V0VmFsdWUoKSk7XHJcbiAgICByZXR1cm4gdjtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDb2xsZWN0aW9uIG9mIGxpc3QgaXRlbXMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaXRlbXModjogSVZpcnR1YWxMaXN0Q29sbGVjdGlvbikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtcy5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFZhbHVlID0gdGhpcy5faXRlbXNUcmFuc2Zvcm0odik7XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1zLm5leHQodHJhbnNmb3JtZWRWYWx1ZSk7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGl0ZW1zKCkgeyByZXR1cm4gdGhpcy5fJGl0ZW1zLmdldFZhbHVlKCkgYXMgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbjsgfVxyXG5cclxuICBwcml2YXRlIF8kc25hcCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9TTkFQKTtcclxuICByZWFkb25seSAkc25hcCA9IHRoaXMuXyRzbmFwLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgZWxlbWVudHMgd2lsbCBzbmFwLiBEZWZhdWx0IHZhbHVlIGlzIFwidHJ1ZVwiLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNuYXAodjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRzbmFwLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRzbmFwLm5leHQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IHNuYXAoKSB7IHJldHVybiB0aGlzLl8kc25hcC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihERUZBVUxUX0VOQUJMRURfQlVGRkVSX09QVElNSVpBVElPTik7XHJcbiAgcmVhZG9ubHkgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5hc09ic2VydmFibGUoKTtcclxuICAvKipcclxuICAgKiBFeHBlcmltZW50YWwhXHJcbiAgICogRW5hYmxlcyBidWZmZXIgb3B0aW1pemF0aW9uLlxyXG4gICAqIENhbiBvbmx5IGJlIHVzZWQgaWYgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24gYXJlIG5vdCBhZGRlZCBvciB1cGRhdGVkLiBPdGhlcndpc2UsIGFydGlmYWN0cyBpbiB0aGUgZm9ybSBvZiB0d2l0Y2hpbmcgb2YgdGhlIHNjcm9sbCBhcmVhIGFyZSBwb3NzaWJsZS5cclxuICAgKiBXb3JrcyBvbmx5IGlmIHRoZSBwcm9wZXJ0eSBkeW5hbWljID0gdHJ1ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24odjogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLm5leHQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24oKSB7IHJldHVybiB0aGlzLl8kZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbi5nZXRWYWx1ZSgpOyB9XHJcblxyXG5cclxuICBwcml2YXRlIF8kaXRlbVJlbmRlcmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5ICRpdGVtUmVuZGVyZXIgPSB0aGlzLl8kaXRlbVJlbmRlcmVyLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIC8qKlxyXG4gICogUmVuZGVyaW5nIGVsZW1lbnQgdGVtcGxhdGUuXHJcbiAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtUmVuZGVyZXIodjogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtUmVuZGVyZXIuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1SZW5kZXJlci5uZXh0KHYpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBpdGVtUmVuZGVyZXIoKSB7IHJldHVybiB0aGlzLl8kaXRlbVJlbmRlcmVyLmdldFZhbHVlKCkgYXMgVGVtcGxhdGVSZWY8YW55PjsgfVxyXG5cclxuICBwcml2YXRlIF8kc3RpY2t5TWFwID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJVmlydHVhbExpc3RTdGlja3lNYXA+KHt9KTtcclxuICByZWFkb25seSAkc3RpY2t5TWFwID0gdGhpcy5fJHN0aWNreU1hcC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRGljdGlvbmFyeSB6SW5kZXggYnkgaWQgb2YgdGhlIGxpc3QgZWxlbWVudC4gSWYgdGhlIHZhbHVlIGlzIG5vdCBzZXQgb3IgZXF1YWwgdG8gMCxcclxuICAgKiB0aGVuIGEgc2ltcGxlIGVsZW1lbnQgaXMgZGlzcGxheWVkLCBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDAsIHRoZW4gdGhlIHN0aWNreSBwb3NpdGlvbiBtb2RlIGlzIGVuYWJsZWQgZm9yIHRoZSBlbGVtZW50LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHN0aWNreU1hcCh2OiBJVmlydHVhbExpc3RTdGlja3lNYXApIHtcclxuICAgIGlmICh0aGlzLl8kc3RpY2t5TWFwLmdldFZhbHVlKCkgPT09IHYpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuXyRzdGlja3lNYXAubmV4dCh2KTtcclxuXHJcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfTtcclxuICBnZXQgc3RpY2t5TWFwKCkgeyByZXR1cm4gdGhpcy5fJHN0aWNreU1hcC5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2l0ZW1TaXplT3B0aW9ucyA9ICh2OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IHtcclxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIERFRkFVTFRfSVRFTV9TSVpFO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmFsID0gTnVtYmVyKHYpO1xyXG4gICAgcmV0dXJuIE51bWJlci5pc05hTih2YWwpIHx8IHZhbCA8PSAwID8gREVGQVVMVF9JVEVNX1NJWkUgOiB2YWw7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfJGl0ZW1TaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KERFRkFVTFRfSVRFTV9TSVpFKTtcclxuICByZWFkb25seSAkaXRlbVNpemUgPSB0aGlzLl8kaXRlbVNpemUuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIGRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcsIHRoZW4gdGhlIGhlaWdodCBvZiBhIHR5cGljYWwgZWxlbWVudC4gSWYgZGlyZWN0aW9uID0gJ2hvcml6b250YWwnLCB0aGVuIHRoZSB3aWR0aCBvZiBhIHR5cGljYWwgZWxlbWVudC5cclxuICAgKiBJZ25vcmVkIGlmIHRoZSBkeW5hbWljU2l6ZSBwcm9wZXJ0eSBpcyB0cnVlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGl0ZW1TaXplKHY6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kaXRlbVNpemUubmV4dCh0aGlzLl9pdGVtU2l6ZU9wdGlvbnModikpO1xyXG5cclxuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9O1xyXG4gIGdldCBpdGVtU2l6ZSgpIHsgcmV0dXJuIHRoaXMuXyRpdGVtU2l6ZS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgXyRkeW5hbWljU2l6ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oREVGQVVMVF9EWU5BTUlDX1NJWkUpO1xyXG4gIHJlYWRvbmx5ICRkeW5hbWljU2l6ZSA9IHRoaXMuXyRkeW5hbWljU2l6ZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdHJ1ZSB0aGVuIHRoZSBpdGVtcyBpbiB0aGUgbGlzdCBjYW4gaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgYW5kIHRoZSBpdGVtU2l6ZSBwcm9wZXJ0eSBpcyBpZ25vcmVkLlxyXG4gICAqIElmIGZhbHNlIHRoZW4gdGhlIGl0ZW1zIGluIHRoZSBsaXN0IGhhdmUgYSBmaXhlZCBzaXplIHNwZWNpZmllZCBieSB0aGUgaXRlbVNpemUgcHJvcGVydHkuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZhbHNlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGR5bmFtaWNTaXplKHY6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl8kZHluYW1pY1NpemUuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGR5bmFtaWNTaXplLm5leHQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGR5bmFtaWNTaXplKCkgeyByZXR1cm4gdGhpcy5fJGR5bmFtaWNTaXplLmdldFZhbHVlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfJGRpcmVjdGlvbiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGlyZWN0aW9uPihERUZBVUxUX0RJUkVDVElPTik7XHJcbiAgcmVhZG9ubHkgJGRpcmVjdGlvbiA9IHRoaXMuXyRkaXJlY3Rpb24uYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIERldGVybWluZXMgdGhlIGRpcmVjdGlvbiBpbiB3aGljaCBlbGVtZW50cyBhcmUgcGxhY2VkLiBEZWZhdWx0IHZhbHVlIGlzIFwidmVydGljYWxcIi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBkaXJlY3Rpb24odjogRGlyZWN0aW9uKSB7XHJcbiAgICBpZiAodGhpcy5fJGRpcmVjdGlvbi5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kZGlyZWN0aW9uLm5leHQodik7XHJcblxyXG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH07XHJcbiAgZ2V0IGRpcmVjdGlvbigpIHsgcmV0dXJuIHRoaXMuXyRkaXJlY3Rpb24uZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kaXRlbXNPZmZzZXQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oREVGQVVMVF9JVEVNU19PRkZTRVQpO1xyXG4gIHJlYWRvbmx5ICRpdGVtc09mZnNldCA9IHRoaXMuXyRpdGVtc09mZnNldC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTnVtYmVyIG9mIGVsZW1lbnRzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHZpc2liaWxpdHkuIERlZmF1bHQgdmFsdWUgaXMgMi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBpdGVtc09mZnNldCh2OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl8kaXRlbXNPZmZzZXQuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJGl0ZW1zT2Zmc2V0Lm5leHQodik7XHJcbiAgfTtcclxuICBnZXQgaXRlbXNPZmZzZXQoKSB7IHJldHVybiB0aGlzLl8kaXRlbXNPZmZzZXQuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcml2YXRlIF8kdHJhY2tCeSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihUUkFDS19CWV9QUk9QRVJUWV9OQU1FKTtcclxuICByZWFkb25seSAkdHJhY2tCeSA9IHRoaXMuXyR0cmFja0J5LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYnkgd2hpY2ggdHJhY2tpbmcgaXMgcGVyZm9ybWVkXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgdHJhY2tCeSh2OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLl8kdHJhY2tCeS5nZXRWYWx1ZSgpID09PSB2KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl8kdHJhY2tCeS5uZXh0KHYpO1xyXG4gIH07XHJcbiAgZ2V0IHRyYWNrQnkoKSB7IHJldHVybiB0aGlzLl8kdHJhY2tCeS5nZXRWYWx1ZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2lzVmVydGljYWwgPSB0aGlzLmdldElzVmVydGljYWwoKTtcclxuXHJcbiAgcHJpdmF0ZSBfJHNuYXBwaW5nTWV0aG9kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTbmFwcGluZ01ldGhvZD4oREVGQVVMVF9TTkFQUElOR19NRVRIT0QpO1xyXG4gIHJlYWRvbmx5ICRzbmFwcGluZ01ldGhvZCA9IHRoaXMuXyRzbmFwcGluZ01ldGhvZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogU25hcHBpbmcgbWV0aG9kLlxyXG4gICAqICdkZWZhdWx0JyAtIE5vcm1hbCBncm91cCByZW5kZXJpbmcuXHJcbiAgICogJ2FkdmFuY2VkJyAtIFRoZSBncm91cCBpcyByZW5kZXJlZCBvbiBhIHRyYW5zcGFyZW50IGJhY2tncm91bmQuIExpc3QgaXRlbXMgYmVsb3cgdGhlIGdyb3VwIGFyZSBub3QgcmVuZGVyZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgc25hcHBpbmdNZXRob2QodjogU25hcHBpbmdNZXRob2QpIHtcclxuICAgIGlmICh0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKSA9PT0gdikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fJHNuYXBwaW5nTWV0aG9kLm5leHQodik7XHJcbiAgfTtcclxuICBnZXQgc25hcHBpbmdNZXRob2QoKSB7IHJldHVybiB0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKTsgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZDogYm9vbGVhbiA9IHRoaXMuZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKCk7XHJcblxyXG4gIHByb3RlY3RlZCBfZGlzcGxheUNvbXBvbmVudHM6IEFycmF5PENvbXBvbmVudFJlZjxOZ1ZpcnR1YWxMaXN0SXRlbUNvbXBvbmVudD4+ID0gW107XHJcblxyXG4gIHByb3RlY3RlZCBfc25hcGVkRGlzcGxheUNvbXBvbmVudDogQ29tcG9uZW50UmVmPE5nVmlydHVhbExpc3RJdGVtQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJvdGVjdGVkIF8kYm91bmRzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU2l6ZSB8IG51bGw+KG51bGwpO1xyXG5cclxuICBwcm90ZWN0ZWQgXyRzY3JvbGxTaXplID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KDApO1xyXG5cclxuICBwcml2YXRlIF9yZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBsaXN0ID0gdGhpcy5fbGlzdCwgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyLCBzbmFwcGVkQ29tcG9uZW50ID0gdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudD8uaW5zdGFuY2U7XHJcbiAgICBpZiAobGlzdCAmJiBjb250YWluZXIgJiYgc25hcHBlZENvbXBvbmVudCkge1xyXG4gICAgICBjb25zdCBpc1ZlcnRpY2FsID0gdGhpcy5faXNWZXJ0aWNhbCwgbGlzdEJvdW5kcyA9IGxpc3QubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgbGlzdEVsZW1lbnQgPSBsaXN0Py5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIHsgd2lkdGg6IGxXaWR0aCwgaGVpZ2h0OiBsSGVpZ2h0IH0gPSBsaXN0RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgeyB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLl8kYm91bmRzLmdldFZhbHVlKCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgaXNTY3JvbGxhYmxlID0gaXNWZXJ0aWNhbCA/IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA+IDAgOiBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA+IDA7XHJcblxyXG4gICAgICBsZXQgc2Nyb2xsQmFyU2l6ZSA9IGlzVmVydGljYWwgPyB3aWR0aCAtIGxXaWR0aCA6IGhlaWdodCAtIGxIZWlnaHQsIGlzU2Nyb2xsQmFyT3ZlcmxhcCA9IHRydWUsIG92ZXJsYXBTY3JvbGxCYXJTaXplID0gMDtcclxuICAgICAgaWYgKHNjcm9sbEJhclNpemUgPT09IDAgJiYgaXNTY3JvbGxhYmxlKSB7XHJcbiAgICAgICAgaXNTY3JvbGxCYXJPdmVybGFwID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzU2Nyb2xsQmFyT3ZlcmxhcCAmJiBJU19GSVJFRk9YKSB7XHJcbiAgICAgICAgc2Nyb2xsQmFyU2l6ZSA9IG92ZXJsYXBTY3JvbGxCYXJTaXplID0gRklSRUZPWF9TQ1JPTExCQVJfT1ZFUkxBUF9TSVpFO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQuc3R5bGUuY2xpcFBhdGggPSBgcGF0aChcIk0gMCAwIEwgMCAke3NuYXBwZWRDb21wb25lbnQuZWxlbWVudC5vZmZzZXRIZWlnaHR9IEwgJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0V2lkdGggLSBvdmVybGFwU2Nyb2xsQmFyU2l6ZX0gJHtzbmFwcGVkQ29tcG9uZW50LmVsZW1lbnQub2Zmc2V0SGVpZ2h0fSBMICR7c25hcHBlZENvbXBvbmVudC5lbGVtZW50Lm9mZnNldFdpZHRoIC0gb3ZlcmxhcFNjcm9sbEJhclNpemV9IDAgWlwiKWA7XHJcblxyXG4gICAgICBzbmFwcGVkQ29tcG9uZW50LnJlZ3VsYXJMZW5ndGggPSBgJHtpc1ZlcnRpY2FsID8gbGlzdEJvdW5kcy53aWR0aCA6IGxpc3RCb3VuZHMuaGVpZ2h0fSR7UFh9YDtcclxuICAgICAgY29uc3QgeyB3aWR0aDogc1dpZHRoLCBoZWlnaHQ6IHNIZWlnaHQgfSA9IHNuYXBwZWRDb21wb25lbnQuZ2V0Qm91bmRzKCkgPz8geyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0sXHJcbiAgICAgICAgY29udGFpbmVyRWxlbWVudCA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCBkZWx0YSA9IHNuYXBwZWRDb21wb25lbnQuaXRlbT8ubWVhc3VyZXMuZGVsdGEgPz8gMDtcclxuXHJcbiAgICAgIGxldCBsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBib3R0b206IG51bWJlcjtcclxuICAgICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgICBsZWZ0ID0gMDtcclxuICAgICAgICByaWdodCA9IHdpZHRoIC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICB0b3AgPSBzSGVpZ2h0O1xyXG4gICAgICAgIGJvdHRvbSA9IGhlaWdodDtcclxuICAgICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNIDAgJHt0b3AgKyBkZWx0YX0gTCAwICR7aGVpZ2h0fSBMICR7d2lkdGh9ICR7aGVpZ2h0fSBMICR7d2lkdGh9IDAgTCAke3JpZ2h0fSAwIEwgJHtyaWdodH0gJHt0b3AgKyBkZWx0YX0gWlwiKWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGVmdCA9IHNXaWR0aDtcclxuICAgICAgICByaWdodCA9IHdpZHRoO1xyXG4gICAgICAgIHRvcCA9IDA7XHJcbiAgICAgICAgYm90dG9tID0gaGVpZ2h0IC0gc2Nyb2xsQmFyU2l6ZTtcclxuICAgICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNsaXBQYXRoID0gYHBhdGgoXCJNICR7bGVmdCArIGRlbHRhfSAwIEwgJHtsZWZ0ICsgZGVsdGF9ICR7Ym90dG9tfSBMIDAgJHtib3R0b219IEwgMCAke2hlaWdodH0gTCAke3dpZHRofSAke2hlaWdodH0gTCAke3dpZHRofSAwIFpcIilgO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfcmVzaXplU25hcHBlZE9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIF9vblJlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLl9jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgaWYgKGJvdW5kcykge1xyXG4gICAgICB0aGlzLl8kYm91bmRzLm5leHQoeyB3aWR0aDogYm91bmRzLndpZHRoLCBoZWlnaHQ6IGJvdW5kcy5oZWlnaHQgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl8kYm91bmRzLm5leHQoeyB3aWR0aDogREVGQVVMVF9MSVNUX1NJWkUsIGhlaWdodDogREVGQVVMVF9MSVNUX1NJWkUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVJlZ3VsYXJSZW5kZXJlcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25TY3JvbGxIYW5kbGVyID0gKGU/OiBFdmVudCkgPT4ge1xyXG4gICAgdGhpcy5jbGVhclNjcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCgpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsU2l6ZSA9ICh0aGlzLl9pc1ZlcnRpY2FsID8gY29udGFpbmVyLnNjcm9sbFRvcCA6IGNvbnRhaW5lci5zY3JvbGxMZWZ0KTtcclxuXHJcbiAgICAgIHRoaXMuXyRzY3JvbGxTaXplLm5leHQoc2Nyb2xsU2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF8kaW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHJcbiAgcmVhZG9ubHkgJGluaXRpYWxpemVkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG5cclxuICAvKipcclxuICAgKiBEaWN0aW9uYXJ5IG9mIGVsZW1lbnQgc2l6ZXMgYnkgdGhlaXIgaWRcclxuICAgKi9cclxuICBwcml2YXRlIF90cmFja0JveCA9IG5ldyBUcmFja0JveCh0aGlzLnRyYWNrQnkpO1xyXG5cclxuICBwcml2YXRlIF9vblRyYWNrQm94Q2hhbmdlSGFuZGxlciA9ICh2OiBudW1iZXIpID0+IHtcclxuICAgIHRoaXMuXyRjYWNoZVZlcnNpb24ubmV4dCh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgXyRjYWNoZVZlcnNpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oLTEpO1xyXG4gIGdldCAkY2FjaGVWZXJzaW9uKCkgeyByZXR1cm4gdGhpcy5fJGNhY2hlVmVyc2lvbi5hc09ic2VydmFibGUoKTsgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PlxyXG4gICkge1xyXG4gICAgTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZCA9IE5nVmlydHVhbExpc3RDb21wb25lbnQuX19uZXh0SWQgKyAxID09PSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxyXG4gICAgICA/IDAgOiBOZ1ZpcnR1YWxMaXN0Q29tcG9uZW50Ll9fbmV4dElkICsgMTtcclxuICAgIHRoaXMuX2lkID0gTmdWaXJ0dWFsTGlzdENvbXBvbmVudC5fX25leHRJZDtcclxuXHJcbiAgICB0aGlzLl8kaW5pdGlhbGl6ZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHRoaXMuJGluaXRpYWxpemVkID0gdGhpcy5fJGluaXRpYWxpemVkLmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94LmRpc3BsYXlDb21wb25lbnRzID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHM7XHJcblxyXG4gICAgY29uc3QgJHRyYWNrQnkgPSB0aGlzLiR0cmFja0J5O1xyXG5cclxuICAgICR0cmFja0J5LnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICB0YXAodiA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3gudHJhY2tpbmdQcm9wZXJ0eU5hbWUgPSB2O1xyXG4gICAgICB9KSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgY29uc3QgJGJvdW5kcyA9IHRoaXMuXyRib3VuZHMuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgZmlsdGVyKGIgPT4gISFiKSxcclxuICAgICksICRpdGVtcyA9IHRoaXMuJGl0ZW1zLnBpcGUoXHJcbiAgICAgIG1hcChpID0+ICFpID8gW10gOiBpKSxcclxuICAgICksICRzY3JvbGxTaXplID0gdGhpcy5fJHNjcm9sbFNpemUuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgICRpdGVtU2l6ZSA9IHRoaXMuJGl0ZW1TaXplLnBpcGUoXHJcbiAgICAgICAgbWFwKHYgPT4gdiA8PSAwID8gREVGQVVMVF9JVEVNX1NJWkUgOiB2KSxcclxuICAgICAgKSxcclxuICAgICAgJGl0ZW1zT2Zmc2V0ID0gdGhpcy4kaXRlbXNPZmZzZXQucGlwZShcclxuICAgICAgICBtYXAodiA9PiB2IDwgMCA/IERFRkFVTFRfSVRFTVNfT0ZGU0VUIDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRzdGlja3lNYXAgPSB0aGlzLiRzdGlja3lNYXAucGlwZShcclxuICAgICAgICBtYXAodiA9PiAhdiA/IHt9IDogdiksXHJcbiAgICAgICksXHJcbiAgICAgICRzbmFwID0gdGhpcy4kc25hcCxcclxuICAgICAgJGlzVmVydGljYWwgPSB0aGlzLiRkaXJlY3Rpb24ucGlwZShcclxuICAgICAgICBtYXAodiA9PiB0aGlzLmdldElzVmVydGljYWwodiB8fCBERUZBVUxUX0RJUkVDVElPTikpLFxyXG4gICAgICApLFxyXG4gICAgICAkZHluYW1pY1NpemUgPSB0aGlzLiRkeW5hbWljU2l6ZSxcclxuICAgICAgJGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24gPSB0aGlzLiRlbmFibGVkQnVmZmVyT3B0aW1pemF0aW9uLFxyXG4gICAgICAkc25hcHBpbmdNZXRob2QgPSB0aGlzLiRzbmFwcGluZ01ldGhvZC5waXBlKFxyXG4gICAgICAgIG1hcCh2ID0+IHRoaXMuZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKHYgfHwgREVGQVVMVF9TTkFQUElOR19NRVRIT0QpKSxcclxuICAgICAgKSxcclxuICAgICAgJGNhY2hlVmVyc2lvbiA9IHRoaXMuJGNhY2hlVmVyc2lvbjtcclxuXHJcbiAgICAkaXNWZXJ0aWNhbC5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzVmVydGljYWwgPSB2O1xyXG4gICAgICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0b2dnbGVDbGFzc05hbWUoZWwsIHYgPyBDTEFTU19MSVNUX1ZFUlRJQ0FMIDogQ0xBU1NfTElTVF9IT1JJWk9OVEFMLCB0cnVlKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICRzbmFwcGluZ01ldGhvZC5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgdGFwKHYgPT4ge1xyXG4gICAgICAgIHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHRoaXMuX3RyYWNrQm94LmlzU25hcHBpbmdNZXRob2RBZHZhbmNlZCA9IHY7XHJcbiAgICAgIH0pLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICAkZHluYW1pY1NpemUucGlwZShcclxuICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXHJcbiAgICAgIHRhcChkeW5hbWljU2l6ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5DYWNoZUNoYW5nZXNJZk5lZWQoZHluYW1pY1NpemUpO1xyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLiRpbml0aWFsaXplZCwgJGJvdW5kcywgJGl0ZW1zLCAkc3RpY2t5TWFwLCAkc2Nyb2xsU2l6ZSwgJGl0ZW1TaXplLFxyXG4gICAgICAkaXRlbXNPZmZzZXQsICRzbmFwLCAkaXNWZXJ0aWNhbCwgJGR5bmFtaWNTaXplLCAkZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbiwgJGNhY2hlVmVyc2lvbixcclxuICAgIF0pLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICBmaWx0ZXIoKFtpbml0aWFsaXplZF0pID0+ICEhaW5pdGlhbGl6ZWQpLFxyXG4gICAgICBzd2l0Y2hNYXAoKFssXHJcbiAgICAgICAgYm91bmRzLCBpdGVtcywgc3RpY2t5TWFwLCBzY3JvbGxTaXplLCBpdGVtU2l6ZSxcclxuICAgICAgICBpdGVtc09mZnNldCwgc25hcCwgaXNWZXJ0aWNhbCwgZHluYW1pY1NpemUsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sIGNhY2hlVmVyc2lvbixcclxuICAgICAgXSkgPT4ge1xyXG4gICAgICAgIGxldCBhY3R1YWxTY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyB0aGlzLl9jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID8/IDAgOiB0aGlzLl9jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCkgPz8gMDtcclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGJvdW5kcyEsXHJcbiAgICAgICAgICBvcHRzOiBJVXBkYXRlQ29sbGVjdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGR5bmFtaWNTaXplLCBpc1ZlcnRpY2FsLCBpdGVtU2l6ZSxcclxuICAgICAgICAgICAgaXRlbXNPZmZzZXQsIHNjcm9sbFNpemU6IGFjdHVhbFNjcm9sbFNpemUsIHNuYXAsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb24sXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgeyBkaXNwbGF5SXRlbXMsIHRvdGFsU2l6ZSB9ID0gdGhpcy5fdHJhY2tCb3gudXBkYXRlQ29sbGVjdGlvbihpdGVtcywgc3RpY2t5TWFwLCBvcHRzKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXNldEJvdW5kc1NpemUoaXNWZXJ0aWNhbCwgdG90YWxTaXplKTtcclxuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVEaXNwbGF5Q29tcG9uZW50c0lmTmVlZChkaXNwbGF5SXRlbXMpO1xyXG5cclxuICAgICAgICB0aGlzLnRyYWNraW5nKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9pc1NuYXBwaW5nTWV0aG9kQWR2YW5jZWQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlUmVndWxhclJlbmRlcmVyKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XHJcblxyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgIGNvbnN0IGRlbHRhID0gdGhpcy5fdHJhY2tCb3guZGVsdGE7XHJcbiAgICAgICAgICBhY3R1YWxTY3JvbGxTaXplID0gYWN0dWFsU2Nyb2xsU2l6ZSArIGRlbHRhO1xyXG5cclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuXHJcbiAgICAgICAgICBpZiAoc2Nyb2xsU2l6ZSAhPT0gYWN0dWFsU2Nyb2xsU2l6ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM6IFNjcm9sbFRvT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IGFjdHVhbFNjcm9sbFNpemUsXHJcbiAgICAgICAgICAgICAgYmVoYXZpb3I6IEJFSEFWSU9SX0lOU1RBTlQgYXMgU2Nyb2xsQmVoYXZpb3JcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKHBhcmFtcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb2YoZGlzcGxheUl0ZW1zKTtcclxuICAgICAgfSksXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuJGluaXRpYWxpemVkLCB0aGlzLiRpdGVtUmVuZGVyZXJdKS5waXBlKFxyXG4gICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgZmlsdGVyKChbaW5pdGlhbGl6ZWRdKSA9PiAhIWluaXRpYWxpemVkKSxcclxuICAgICAgdGFwKChbLCBpdGVtUmVuZGVyZXJdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZXNldFJlbmRlcmVycyhpdGVtUmVuZGVyZXIpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuXyRpbml0aWFsaXplZC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5DYWNoZUNoYW5nZXNJZk5lZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBpZiAoIXRoaXMuX3RyYWNrQm94Lmhhc0V2ZW50TGlzdGVuZXIoVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcikpIHtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5hZGRFdmVudExpc3RlbmVyKFRSQUNLX0JPWF9DSEFOR0VfRVZFTlRfTkFNRSwgdGhpcy5fb25UcmFja0JveENoYW5nZUhhbmRsZXIpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fdHJhY2tCb3guaGFzRXZlbnRMaXN0ZW5lcihUUkFDS19CT1hfQ0hBTkdFX0VWRU5UX05BTUUsIHRoaXMuX29uVHJhY2tCb3hDaGFuZ2VIYW5kbGVyKSkge1xyXG4gICAgICAgIHRoaXMuX3RyYWNrQm94LnJlbW92ZUV2ZW50TGlzdGVuZXIoVFJBQ0tfQk9YX0NIQU5HRV9FVkVOVF9OQU1FLCB0aGlzLl9vblRyYWNrQm94Q2hhbmdlSGFuZGxlcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkKG0/OiBTbmFwcGluZ01ldGhvZCkge1xyXG4gICAgY29uc3QgbWV0aG9kID0gbSB8fCB0aGlzLl8kc25hcHBpbmdNZXRob2QuZ2V0VmFsdWUoKTtcclxuICAgIHJldHVybiBpc1NuYXBwaW5nTWV0aG9kQWR2ZW5jZWQobWV0aG9kKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXNWZXJ0aWNhbChkPzogRGlyZWN0aW9uKSB7XHJcbiAgICBjb25zdCBkaXIgPSBkIHx8IHRoaXMuZGlyZWN0aW9uO1xyXG4gICAgcmV0dXJuIGlzRGlyZWN0aW9uKGRpciwgRGlyZWN0aW9ucy5WRVJUSUNBTCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb21wb25lbnRzUmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgdGhpcy5fdHJhY2tCb3guY2hhbmdlcygpO1xyXG4gIH0pO1xyXG5cclxuICBwcml2YXRlIGNyZWF0ZURpc3BsYXlDb21wb25lbnRzSWZOZWVkKGRpc3BsYXlJdGVtczogSVJlbmRlclZpcnR1YWxMaXN0Q29sbGVjdGlvbiB8IG51bGwpIHtcclxuICAgIGlmICghZGlzcGxheUl0ZW1zIHx8ICF0aGlzLl9saXN0Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LnNldERpc3BsYXlPYmplY3RJbmRleE1hcEJ5SWQoe30pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2lzU25hcHBpbmdNZXRob2RBZHZhbmNlZCAmJiB0aGlzLnNuYXApIHtcclxuICAgICAgaWYgKCF0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ICYmIHRoaXMuX3NuYXBDb250YWluZXJSZWYpIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fc25hcENvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQpO1xyXG4gICAgICAgIGNvbXAuaW5zdGFuY2UucmVndWxhciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCA9IGNvbXA7XHJcbiAgICAgICAgdGhpcy5fdHJhY2tCb3guc25hcGVkRGlzcGxheUNvbXBvbmVudCA9IHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQ7XHJcblxyXG4gICAgICAgIHRoaXMuX3Jlc2l6ZVNuYXBwZWRPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLl9yZXNpemVTbmFwcGVkQ29tcG9uZW50SGFuZGxlcik7XHJcbiAgICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyLm9ic2VydmUoY29tcC5pbnN0YW5jZS5lbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3RyYWNrQm94Lml0ZW1zID0gZGlzcGxheUl0ZW1zO1xyXG5cclxuICAgIGNvbnN0IF9saXN0Q29udGFpbmVyUmVmID0gdGhpcy5fbGlzdENvbnRhaW5lclJlZjtcclxuXHJcbiAgICBjb25zdCBtYXhMZW5ndGggPSBkaXNwbGF5SXRlbXMubGVuZ3RoLCBjb21wb25lbnRzID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHM7XHJcblxyXG4gICAgd2hpbGUgKGNvbXBvbmVudHMubGVuZ3RoIDwgbWF4TGVuZ3RoKSB7XHJcbiAgICAgIGlmIChfbGlzdENvbnRhaW5lclJlZikge1xyXG4gICAgICAgIGNvbnN0IGNvbXAgPSBfbGlzdENvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoTmdWaXJ0dWFsTGlzdEl0ZW1Db21wb25lbnQpO1xyXG4gICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29tcC5pbnN0YW5jZS5lbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzZXRSZW5kZXJlcnMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUmVndWxhclJlbmRlcmVyKCkge1xyXG4gICAgdGhpcy5fcmVzaXplU25hcHBlZENvbXBvbmVudEhhbmRsZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRSZW5kZXJlcnMoaXRlbVJlbmRlcmVyPzogVGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+KSB7XHJcbiAgICBjb25zdCBkb01hcDogeyBbaWQ6IG51bWJlcl06IG51bWJlciB9ID0ge307XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHNbaV07XHJcbiAgICAgIGl0ZW0uaW5zdGFuY2UucmVuZGVyZXIgPSBpdGVtUmVuZGVyZXIgfHwgdGhpcy5pdGVtUmVuZGVyZXI7XHJcbiAgICAgIGRvTWFwW2l0ZW0uaW5zdGFuY2UuaWRdID0gaTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5faXNTbmFwcGluZ01ldGhvZEFkdmFuY2VkICYmIHRoaXMuc25hcCAmJiB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50ICYmIHRoaXMuX3NuYXBDb250YWluZXJSZWYpIHtcclxuICAgICAgY29uc3QgY29tcCA9IHRoaXMuX3NuYXBlZERpc3BsYXlDb21wb25lbnQ7XHJcbiAgICAgIGNvbXAuaW5zdGFuY2UucmVuZGVyZXIgPSBpdGVtUmVuZGVyZXIgfHwgdGhpcy5pdGVtUmVuZGVyZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdHJhY2tCb3guc2V0RGlzcGxheU9iamVjdEluZGV4TWFwQnlJZChkb01hcCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja2luZyBieSBpZFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCB0cmFja2luZygpIHtcclxuICAgIHRoaXMuX3RyYWNrQm94LnRyYWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0Qm91bmRzU2l6ZShpc1ZlcnRpY2FsOiBib29sZWFuLCB0b3RhbFNpemU6IG51bWJlcikge1xyXG4gICAgY29uc3QgbCA9IHRoaXMuX2xpc3Q7XHJcbiAgICBpZiAobCkge1xyXG4gICAgICBsLm5hdGl2ZUVsZW1lbnQuc3R5bGVbaXNWZXJ0aWNhbCA/IEhFSUdIVF9QUk9QX05BTUUgOiBXSURUSF9QUk9QX05BTUVdID0gYCR7dG90YWxTaXplfSR7UFh9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGJvdW5kcyBvZiBhbiBlbGVtZW50IHdpdGggYSBnaXZlbiBpZFxyXG4gICAqL1xyXG4gIGdldEl0ZW1Cb3VuZHMoaWQ6IElkKTogSVNpemUgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyYWNrQm94LmdldEl0ZW1Cb3VuZHMoaWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIG1ldGhvZCBzY3JvbGxzIHRoZSBsaXN0IHRvIHRoZSBlbGVtZW50IHdpdGggdGhlIGdpdmVuIGlkIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgc2Nyb2xsZWQgYXJlYS5cclxuICAgKiBCZWhhdmlvciBhY2NlcHRzIHRoZSB2YWx1ZXMg4oCL4oCLXCJhdXRvXCIsIFwiaW5zdGFudFwiIGFuZCBcInNtb290aFwiLlxyXG4gICAqL1xyXG4gIHNjcm9sbFRvKGlkOiBJZCwgYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gQkVIQVZJT1JfQVVUTyBhcyBTY3JvbGxCZWhhdmlvcikge1xyXG4gICAgdGhpcy5zY3JvbGxUb0V4ZWN1dG9yKGlkLCBiZWhhdmlvcik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQ6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBjbGVhclNjcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCgpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLl9zY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHNjcm9sbFRvRXhlY3V0b3IoaWQ6IElkLCBiZWhhdmlvcjogU2Nyb2xsQmVoYXZpb3IsIGl0ZXJhdGlvbjogbnVtYmVyID0gMCwgaXNMYXN0SXRlcmF0aW9uID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtcztcclxuICAgIGlmICghaXRlbXMgfHwgIWl0ZW1zLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZHluYW1pY1NpemUgPSB0aGlzLmR5bmFtaWNTaXplLCBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIsIGl0ZW1TaXplID0gdGhpcy5pdGVtU2l6ZTtcclxuICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgdGhpcy5jbGVhclNjcm9sbFRvUmVwZWF0RXhlY3V0aW9uVGltZW91dCgpO1xyXG5cclxuICAgICAgaWYgKGR5bmFtaWNTaXplKSB7XHJcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uU2Nyb2xsSGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHRoaXMuXyRib3VuZHMuZ2V0VmFsdWUoKSB8fCB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSxcclxuICAgICAgICAgIHN0aWNreU1hcCA9IHRoaXMuc3RpY2t5TWFwLCBpdGVtcyA9IHRoaXMuaXRlbXMsIGlzVmVydGljYWwgPSB0aGlzLl9pc1ZlcnRpY2FsLCBkZWx0YSA9IHRoaXMuX3RyYWNrQm94LmRlbHRhLFxyXG4gICAgICAgICAgb3B0czogSUdldEl0ZW1Qb3NpdGlvbk9wdGlvbnM8SVZpcnR1YWxMaXN0SXRlbSwgSVZpcnR1YWxMaXN0Q29sbGVjdGlvbj4gPSB7XHJcbiAgICAgICAgICAgIGJvdW5kczogeyB3aWR0aCwgaGVpZ2h0IH0sIGNvbGxlY3Rpb246IGl0ZW1zLCBkeW5hbWljU2l6ZSwgaXNWZXJ0aWNhbDogdGhpcy5faXNWZXJ0aWNhbCwgaXRlbVNpemUsXHJcbiAgICAgICAgICAgIGl0ZW1zT2Zmc2V0OiB0aGlzLml0ZW1zT2Zmc2V0LCBzY3JvbGxTaXplOiAoaXNWZXJ0aWNhbCA/IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA6IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQpICsgZGVsdGEsXHJcbiAgICAgICAgICAgIHNuYXA6IHRoaXMuc25hcCwgZnJvbUl0ZW1JZDogaWQsIGVuYWJsZWRCdWZmZXJPcHRpbWl6YXRpb246IHRoaXMuZW5hYmxlZEJ1ZmZlck9wdGltaXphdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzY3JvbGxTaXplID0gdGhpcy5fdHJhY2tCb3guZ2V0SXRlbVBvc2l0aW9uKGlkLCBzdGlja3lNYXAsIG9wdHMpLFxyXG4gICAgICAgICAgcGFyYW1zOiBTY3JvbGxUb09wdGlvbnMgPSB7IFtpc1ZlcnRpY2FsID8gVE9QX1BST1BfTkFNRSA6IExFRlRfUFJPUF9OQU1FXTogc2Nyb2xsU2l6ZSwgYmVoYXZpb3IgfTtcclxuICAgICAgICB0aGlzLl90cmFja0JveC5jbGVhckRlbHRhKCk7XHJcblxyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgIGNvbnN0IHsgZGlzcGxheUl0ZW1zLCB0b3RhbFNpemUgfSA9IHRoaXMuX3RyYWNrQm94LnVwZGF0ZUNvbGxlY3Rpb24oaXRlbXMsIHN0aWNreU1hcCwge1xyXG4gICAgICAgICAgICAuLi5vcHRzLCBzY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpc0xhc3RJdGVyYXRpb24gPyB1bmRlZmluZWQgOiBpZCxcclxuICAgICAgICAgIH0pLCBkZWx0YSA9IHRoaXMuX3RyYWNrQm94LmRlbHRhO1xyXG5cclxuICAgICAgICAgIHRoaXMuX3RyYWNrQm94LmNsZWFyRGVsdGEoKTtcclxuXHJcbiAgICAgICAgICBsZXQgYWN0dWFsU2Nyb2xsU2l6ZSA9IHNjcm9sbFNpemUgKyBkZWx0YTtcclxuXHJcbiAgICAgICAgICB0aGlzLnJlc2V0Qm91bmRzU2l6ZShpc1ZlcnRpY2FsLCB0b3RhbFNpemUpO1xyXG5cclxuICAgICAgICAgIHRoaXMuY3JlYXRlRGlzcGxheUNvbXBvbmVudHNJZk5lZWQoZGlzcGxheUl0ZW1zKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnRyYWNraW5nKCk7XHJcblxyXG4gICAgICAgICAgY29uc3QgX3Njcm9sbFNpemUgPSB0aGlzLl90cmFja0JveC5nZXRJdGVtUG9zaXRpb24oaWQsIHN0aWNreU1hcCwgeyAuLi5vcHRzLCBzY3JvbGxTaXplOiBhY3R1YWxTY3JvbGxTaXplLCBmcm9tSXRlbUlkOiBpZCB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCBub3RDaGFuZ2VkID0gYWN0dWFsU2Nyb2xsU2l6ZSA9PT0gX3Njcm9sbFNpemVcclxuXHJcbiAgICAgICAgICBpZiAoIW5vdENoYW5nZWQgfHwgaXRlcmF0aW9uIDwgTUFYX1NDUk9MTF9UT19JVEVSQVRJT05TKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKTtcclxuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9SZXBlYXRFeGVjdXRpb25UaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0V4ZWN1dG9yKGlkLCBCRUhBVklPUl9JTlNUQU5UIGFzIFNjcm9sbEJlaGF2aW9yLCBpdGVyYXRpb24gKyAxLCBub3RDaGFuZ2VkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KGFjdHVhbFNjcm9sbFNpemUpO1xyXG5cclxuICAgICAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uU2Nyb2xsSGFuZGxlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUbyhwYXJhbXMpO1xyXG5cclxuICAgICAgICB0aGlzLl8kc2Nyb2xsU2l6ZS5uZXh0KHNjcm9sbFNpemUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gaWQpLCBzY3JvbGxTaXplID0gaW5kZXggKiB0aGlzLml0ZW1TaXplO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtczogU2Nyb2xsVG9PcHRpb25zID0geyBbdGhpcy5faXNWZXJ0aWNhbCA/IFRPUF9QUk9QX05BTUUgOiBMRUZUX1BST1BfTkFNRV06IHNjcm9sbFNpemUsIGJlaGF2aW9yIH07XHJcbiAgICAgICAgY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8ocGFyYW1zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2Nyb2xscyB0aGUgc2Nyb2xsIGFyZWEgdG8gdGhlIGRlc2lyZWQgZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgSUQuXHJcbiAgICovXHJcbiAgc2Nyb2xsVG9FbmQoYmVoYXZpb3I6IFNjcm9sbEJlaGF2aW9yID0gQkVIQVZJT1JfSU5TVEFOVCBhcyBTY3JvbGxCZWhhdmlvcikge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zLCBsYXRJdGVtID0gaXRlbXNbaXRlbXMubGVuZ3RoID4gMCA/IGl0ZW1zLmxlbmd0aCAtIDEgOiAwXTtcclxuICAgIHRoaXMuc2Nyb2xsVG8obGF0SXRlbS5pZCwgYmVoYXZpb3IpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfb25Db250YWluZXJTY3JvbGxIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XHJcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuX2NvbnRhaW5lcjtcclxuICAgIGlmIChjb250YWluZXJFbCkge1xyXG4gICAgICBjb25zdCBzY3JvbGxTaXplID0gKHRoaXMuX2lzVmVydGljYWwgPyBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA6IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCk7XHJcbiAgICAgIHRoaXMuX3RyYWNrQm94LmRlbHRhRGlyZWN0aW9uID0gdGhpcy5fJHNjcm9sbFNpemUuZ2V0VmFsdWUoKSA+IHNjcm9sbFNpemUgPyAtMSA6IHRoaXMuXyRzY3JvbGxTaXplLmdldFZhbHVlKCkgPCBzY3JvbGxTaXplID8gMSA6IDA7XHJcblxyXG4gICAgICBjb25zdCBldmVudCA9IG5ldyBTY3JvbGxFdmVudCh7XHJcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl90cmFja0JveC5zY3JvbGxEaXJlY3Rpb24sIGNvbnRhaW5lcjogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudCxcclxuICAgICAgICBsaXN0OiB0aGlzLl9saXN0IS5uYXRpdmVFbGVtZW50LCBkZWx0YTogdGhpcy5fdHJhY2tCb3guZGVsdGEsXHJcbiAgICAgICAgc2Nyb2xsRGVsdGE6IHRoaXMuX3RyYWNrQm94LnNjcm9sbERlbHRhLCBpc1ZlcnRpY2FsOiB0aGlzLl9pc1ZlcnRpY2FsLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMub25TY3JvbGwuZW1pdChldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9vbkNvbnRhaW5lclNjcm9sbEVuZEhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy5fY29udGFpbmVyO1xyXG4gICAgaWYgKGNvbnRhaW5lckVsKSB7XHJcbiAgICAgIGNvbnN0IHNjcm9sbFNpemUgPSAodGhpcy5faXNWZXJ0aWNhbCA/IGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIDogY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0KTtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGVsdGFEaXJlY3Rpb24gPSB0aGlzLl8kc2Nyb2xsU2l6ZS5nZXRWYWx1ZSgpID4gc2Nyb2xsU2l6ZSA/IC0xIDogMDtcclxuXHJcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IFNjcm9sbEV2ZW50KHtcclxuICAgICAgICBkaXJlY3Rpb246IHRoaXMuX3RyYWNrQm94LnNjcm9sbERpcmVjdGlvbiwgY29udGFpbmVyOiBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIGxpc3Q6IHRoaXMuX2xpc3QhLm5hdGl2ZUVsZW1lbnQsIGRlbHRhOiB0aGlzLl90cmFja0JveC5kZWx0YSxcclxuICAgICAgICBzY3JvbGxEZWx0YTogdGhpcy5fdHJhY2tCb3guc2Nyb2xsRGVsdGEsIGlzVmVydGljYWw6IHRoaXMuX2lzVmVydGljYWwsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5vblNjcm9sbEVuZC5lbWl0KGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuX2NvbnRhaW5lcjtcclxuICAgIGlmIChjb250YWluZXJFbCkge1xyXG4gICAgICAvLyBmb3IgZGlyZWN0aW9uIGNhbGN1bGF0aW9uXHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTQ1JPTEwsIHRoaXMuX29uQ29udGFpbmVyU2Nyb2xsSGFuZGxlcik7XHJcbiAgICAgIGNvbnRhaW5lckVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihTQ1JPTExfRU5ELCB0aGlzLl9vbkNvbnRhaW5lclNjcm9sbEVuZEhhbmRsZXIpO1xyXG5cclxuICAgICAgY29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFNDUk9MTCwgdGhpcy5fb25TY3JvbGxIYW5kbGVyKTtcclxuXHJcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMuX29uUmVzaXplSGFuZGxlcik7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyRWwubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgICB0aGlzLl9vblJlc2l6ZUhhbmRsZXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBAaW50ZXJuYWwgKi9cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJTY3JvbGxUb1JlcGVhdEV4ZWN1dGlvblRpbWVvdXQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5fdHJhY2tCb3gpIHtcclxuICAgICAgdGhpcy5fdHJhY2tCb3guZGlzcG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9jb21wb25lbnRzUmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fY29tcG9uZW50c1Jlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fcmVzaXplT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9yZXNpemVTbmFwcGVkT2JzZXJ2ZXIpIHtcclxuICAgICAgdGhpcy5fcmVzaXplU25hcHBlZE9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250YWluZXJFbCA9IHRoaXMuX2NvbnRhaW5lcjtcclxuICAgIGlmIChjb250YWluZXJFbCkge1xyXG4gICAgICBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vblNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0NST0xMLCB0aGlzLl9vbkNvbnRhaW5lclNjcm9sbEhhbmRsZXIpO1xyXG4gICAgICBjb250YWluZXJFbC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoU0NST0xMX0VORCwgdGhpcy5fb25Db250YWluZXJTY3JvbGxFbmRIYW5kbGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fc25hcGVkRGlzcGxheUNvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLl9zbmFwZWREaXNwbGF5Q29tcG9uZW50LmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5fZGlzcGxheUNvbXBvbmVudHMpIHtcclxuICAgICAgd2hpbGUgKHRoaXMuX2Rpc3BsYXlDb21wb25lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCBjb21wID0gdGhpcy5fZGlzcGxheUNvbXBvbmVudHMucG9wKCk7XHJcbiAgICAgICAgY29tcD8uZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJzbmFwXCIgI3NuYXBwZWQgcGFydD1cInNuYXBwZWQtaXRlbVwiIGNsYXNzPVwibmd2bF9fbGlzdC1zbmFwcGVyXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAjc25hcFJlbmRlcmVyQ29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuPGRpdiAjY29udGFpbmVyIHBhcnQ9XCJzY3JvbGxlclwiIGNsYXNzPVwibmd2bF9fc2Nyb2xsZXJcIj5cclxuICA8dWwgI2xpc3QgcGFydD1cImxpc3RcIiBjbGFzcz1cIm5ndmxfX2xpc3RcIj5cclxuICAgIDxuZy1jb250YWluZXIgI3JlbmRlcmVyc0NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICA8L3VsPlxyXG48L2Rpdj4iXX0=
|
|
@@ -1576,10 +1576,9 @@ class NgVirtualListComponent {
|
|
|
1576
1576
|
}
|
|
1577
1577
|
snappedComponent.element.style.clipPath = `path("M 0 0 L 0 ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} 0 Z")`;
|
|
1578
1578
|
snappedComponent.regularLength = `${isVertical ? listBounds.width : listBounds.height}${PX}`;
|
|
1579
|
-
const { width: sWidth, height: sHeight } = snappedComponent.getBounds() ?? { width: 0, height: 0 }, containerElement = container.nativeElement;
|
|
1579
|
+
const { width: sWidth, height: sHeight } = snappedComponent.getBounds() ?? { width: 0, height: 0 }, containerElement = container.nativeElement, delta = snappedComponent.item?.measures.delta ?? 0;
|
|
1580
1580
|
let left, right, top, bottom;
|
|
1581
1581
|
if (isVertical) {
|
|
1582
|
-
const snappedY = snappedComponent.item?.measures.y ?? 0, scrollSize = container.nativeElement.scrollTop, delta = snappedY - scrollSize;
|
|
1583
1582
|
left = 0;
|
|
1584
1583
|
right = width - scrollBarSize;
|
|
1585
1584
|
top = sHeight;
|
|
@@ -1587,7 +1586,6 @@ class NgVirtualListComponent {
|
|
|
1587
1586
|
containerElement.style.clipPath = `path("M 0 ${top + delta} L 0 ${height} L ${width} ${height} L ${width} 0 L ${right} 0 L ${right} ${top + delta} Z")`;
|
|
1588
1587
|
}
|
|
1589
1588
|
else {
|
|
1590
|
-
const snappedX = snappedComponent.item?.measures.x ?? 0, scrollSize = container.nativeElement.scrollLeft, delta = snappedX - scrollSize;
|
|
1591
1589
|
left = sWidth;
|
|
1592
1590
|
right = width;
|
|
1593
1591
|
top = 0;
|