ngx-moveable
Version:
An Angular Component that create Moveable, Draggable, Resizable, Scalable, Rotatable, Warpable, Pinchable, Groupable, Snappable.
370 lines • 27.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input, EventEmitter, Output } from '@angular/core';
import Moveable, { PROPERTIES, EVENTS, } from 'moveable';
import { NgxMoveableInterface } from './ngx-moveable.interface';
// @dynamic
export class NgxMoveableComponent extends NgxMoveableInterface {
constructor() {
super();
EVENTS.forEach((/**
* @param {?} name
* @return {?}
*/
name => {
this[name] = new EventEmitter();
}));
}
/**
* @return {?}
*/
ngOnInit() {
/** @type {?} */
const options = {};
/** @type {?} */
const events = {};
PROPERTIES.forEach((/**
* @param {?} name
* @return {?}
*/
name => {
((/** @type {?} */ (options)))[name] = this[name];
}));
EVENTS.forEach((/**
* @param {?} name
* @return {?}
*/
name => {
events[name] = (/**
* @param {?} e
* @return {?}
*/
e => {
this[name].emit(e);
});
}));
this.moveable = new Moveable(this.container || document.body, options);
this.moveable.on(events);
}
/**
* @param {?} changes
* @return {?}
*/
ngOnChanges(changes) {
/** @type {?} */
const moveable = this.moveable;
if (!moveable) {
return;
}
for (const name in changes) {
const { previousValue, currentValue } = changes[name];
if (previousValue === currentValue) {
continue;
}
moveable[name] = currentValue;
}
}
/**
* @return {?}
*/
ngOnDestroy() {
this.moveable.destroy();
}
}
NgxMoveableComponent.decorators = [
{ type: Component, args: [{
selector: 'ngx-moveable',
template: ''
}] }
];
/** @nocollapse */
NgxMoveableComponent.ctorParameters = () => [];
NgxMoveableComponent.propDecorators = {
draggable: [{ type: Input }],
resizable: [{ type: Input }],
scalable: [{ type: Input }],
rotatable: [{ type: Input }],
warpable: [{ type: Input }],
pinchable: [{ type: Input }],
snappable: [{ type: Input }],
origin: [{ type: Input }],
target: [{ type: Input }],
container: [{ type: Input }],
throttleDrag: [{ type: Input }],
throttleDragRotate: [{ type: Input }],
throttleResize: [{ type: Input }],
throttleScale: [{ type: Input }],
throttleRotate: [{ type: Input }],
keepRatio: [{ type: Input }],
edge: [{ type: Input }],
pinchThreshold: [{ type: Input }],
snapCenter: [{ type: Input }],
snapVertical: [{ type: Input }],
snapElement: [{ type: Input }],
snapHorizontal: [{ type: Input }],
snapThreshold: [{ type: Input }],
horizontalGuidelines: [{ type: Input }],
verticalGuidelines: [{ type: Input }],
elementGuidelines: [{ type: Input }],
bounds: [{ type: Input }],
dragArea: [{ type: Input }],
rotationPosition: [{ type: Input }],
baseDirection: [{ type: Input }],
defaultGroupRotate: [{ type: Input }],
ables: [{ type: Input }],
className: [{ type: Input }],
renderDirections: [{ type: Input }],
scrollable: [{ type: Input }],
scrollContainer: [{ type: Input }],
scrollThreshold: [{ type: Input }],
getScrollPosition: [{ type: Input }],
rootContainer: [{ type: Input }],
zoom: [{ type: Input }],
transformOrigin: [{ type: Input }],
snapDigit: [{ type: Input }],
isDisplaySnapDigit: [{ type: Input }],
innerBounds: [{ type: Input }],
triggerAblesSimultaneously: [{ type: Input }],
snapGap: [{ type: Input }],
pinchOutside: [{ type: Input }],
padding: [{ type: Input }],
snapDistFormat: [{ type: Input }],
dragTarget: [{ type: Input }],
dragStart: [{ type: Output }],
drag: [{ type: Output }],
dragEnd: [{ type: Output }],
dragGroupStart: [{ type: Output }],
dragGroup: [{ type: Output }],
dragGroupEnd: [{ type: Output }],
resizeStart: [{ type: Output }],
resize: [{ type: Output }],
resizeEnd: [{ type: Output }],
resizeGroupStart: [{ type: Output }],
resizeGroup: [{ type: Output }],
resizeGroupEnd: [{ type: Output }],
scaleStart: [{ type: Output }],
scale: [{ type: Output }],
scaleEnd: [{ type: Output }],
scaleGroupStart: [{ type: Output }],
scaleGroup: [{ type: Output }],
scaleGroupEnd: [{ type: Output }],
rotateStart: [{ type: Output }],
rotate: [{ type: Output }],
rotateEnd: [{ type: Output }],
rotateGroupStart: [{ type: Output }],
rotateGroup: [{ type: Output }],
rotateGroupEnd: [{ type: Output }],
warpStart: [{ type: Output }],
warp: [{ type: Output }],
warpEnd: [{ type: Output }],
pinchStart: [{ type: Output }],
pinch: [{ type: Output }],
pinchEnd: [{ type: Output }],
pinchGroupStart: [{ type: Output }],
pinchGroup: [{ type: Output }],
pinchGroupEnd: [{ type: Output }],
click: [{ type: Output }],
clickGroup: [{ type: Output }],
renderStart: [{ type: Output }],
render: [{ type: Output }],
renderEnd: [{ type: Output }],
renderGroupStart: [{ type: Output }],
renderGroup: [{ type: Output }],
renderGroupEnd: [{ type: Output }],
scroll: [{ type: Output }],
scrollGroup: [{ type: Output }],
snap: [{ type: Output }]
};
if (false) {
/** @type {?} */
NgxMoveableComponent.prototype.draggable;
/** @type {?} */
NgxMoveableComponent.prototype.resizable;
/** @type {?} */
NgxMoveableComponent.prototype.scalable;
/** @type {?} */
NgxMoveableComponent.prototype.rotatable;
/** @type {?} */
NgxMoveableComponent.prototype.warpable;
/** @type {?} */
NgxMoveableComponent.prototype.pinchable;
/** @type {?} */
NgxMoveableComponent.prototype.snappable;
/** @type {?} */
NgxMoveableComponent.prototype.origin;
/** @type {?} */
NgxMoveableComponent.prototype.target;
/** @type {?} */
NgxMoveableComponent.prototype.container;
/** @type {?} */
NgxMoveableComponent.prototype.throttleDrag;
/** @type {?} */
NgxMoveableComponent.prototype.throttleDragRotate;
/** @type {?} */
NgxMoveableComponent.prototype.throttleResize;
/** @type {?} */
NgxMoveableComponent.prototype.throttleScale;
/** @type {?} */
NgxMoveableComponent.prototype.throttleRotate;
/** @type {?} */
NgxMoveableComponent.prototype.keepRatio;
/** @type {?} */
NgxMoveableComponent.prototype.edge;
/** @type {?} */
NgxMoveableComponent.prototype.pinchThreshold;
/** @type {?} */
NgxMoveableComponent.prototype.snapCenter;
/** @type {?} */
NgxMoveableComponent.prototype.snapVertical;
/** @type {?} */
NgxMoveableComponent.prototype.snapElement;
/** @type {?} */
NgxMoveableComponent.prototype.snapHorizontal;
/** @type {?} */
NgxMoveableComponent.prototype.snapThreshold;
/** @type {?} */
NgxMoveableComponent.prototype.horizontalGuidelines;
/** @type {?} */
NgxMoveableComponent.prototype.verticalGuidelines;
/** @type {?} */
NgxMoveableComponent.prototype.elementGuidelines;
/** @type {?} */
NgxMoveableComponent.prototype.bounds;
/** @type {?} */
NgxMoveableComponent.prototype.dragArea;
/** @type {?} */
NgxMoveableComponent.prototype.rotationPosition;
/** @type {?} */
NgxMoveableComponent.prototype.baseDirection;
/** @type {?} */
NgxMoveableComponent.prototype.defaultGroupRotate;
/** @type {?} */
NgxMoveableComponent.prototype.ables;
/** @type {?} */
NgxMoveableComponent.prototype.className;
/** @type {?} */
NgxMoveableComponent.prototype.renderDirections;
/** @type {?} */
NgxMoveableComponent.prototype.scrollable;
/** @type {?} */
NgxMoveableComponent.prototype.scrollContainer;
/** @type {?} */
NgxMoveableComponent.prototype.scrollThreshold;
/** @type {?} */
NgxMoveableComponent.prototype.getScrollPosition;
/** @type {?} */
NgxMoveableComponent.prototype.rootContainer;
/** @type {?} */
NgxMoveableComponent.prototype.zoom;
/** @type {?} */
NgxMoveableComponent.prototype.transformOrigin;
/** @type {?} */
NgxMoveableComponent.prototype.snapDigit;
/** @type {?} */
NgxMoveableComponent.prototype.isDisplaySnapDigit;
/** @type {?} */
NgxMoveableComponent.prototype.innerBounds;
/** @type {?} */
NgxMoveableComponent.prototype.triggerAblesSimultaneously;
/** @type {?} */
NgxMoveableComponent.prototype.snapGap;
/** @type {?} */
NgxMoveableComponent.prototype.pinchOutside;
/** @type {?} */
NgxMoveableComponent.prototype.padding;
/** @type {?} */
NgxMoveableComponent.prototype.snapDistFormat;
/** @type {?} */
NgxMoveableComponent.prototype.dragTarget;
/** @type {?} */
NgxMoveableComponent.prototype.dragStart;
/** @type {?} */
NgxMoveableComponent.prototype.drag;
/** @type {?} */
NgxMoveableComponent.prototype.dragEnd;
/** @type {?} */
NgxMoveableComponent.prototype.dragGroupStart;
/** @type {?} */
NgxMoveableComponent.prototype.dragGroup;
/** @type {?} */
NgxMoveableComponent.prototype.dragGroupEnd;
/** @type {?} */
NgxMoveableComponent.prototype.resizeStart;
/** @type {?} */
NgxMoveableComponent.prototype.resize;
/** @type {?} */
NgxMoveableComponent.prototype.resizeEnd;
/** @type {?} */
NgxMoveableComponent.prototype.resizeGroupStart;
/** @type {?} */
NgxMoveableComponent.prototype.resizeGroup;
/** @type {?} */
NgxMoveableComponent.prototype.resizeGroupEnd;
/** @type {?} */
NgxMoveableComponent.prototype.scaleStart;
/** @type {?} */
NgxMoveableComponent.prototype.scale;
/** @type {?} */
NgxMoveableComponent.prototype.scaleEnd;
/** @type {?} */
NgxMoveableComponent.prototype.scaleGroupStart;
/** @type {?} */
NgxMoveableComponent.prototype.scaleGroup;
/** @type {?} */
NgxMoveableComponent.prototype.scaleGroupEnd;
/** @type {?} */
NgxMoveableComponent.prototype.rotateStart;
/** @type {?} */
NgxMoveableComponent.prototype.rotate;
/** @type {?} */
NgxMoveableComponent.prototype.rotateEnd;
/** @type {?} */
NgxMoveableComponent.prototype.rotateGroupStart;
/** @type {?} */
NgxMoveableComponent.prototype.rotateGroup;
/** @type {?} */
NgxMoveableComponent.prototype.rotateGroupEnd;
/** @type {?} */
NgxMoveableComponent.prototype.warpStart;
/** @type {?} */
NgxMoveableComponent.prototype.warp;
/** @type {?} */
NgxMoveableComponent.prototype.warpEnd;
/** @type {?} */
NgxMoveableComponent.prototype.pinchStart;
/** @type {?} */
NgxMoveableComponent.prototype.pinch;
/** @type {?} */
NgxMoveableComponent.prototype.pinchEnd;
/** @type {?} */
NgxMoveableComponent.prototype.pinchGroupStart;
/** @type {?} */
NgxMoveableComponent.prototype.pinchGroup;
/** @type {?} */
NgxMoveableComponent.prototype.pinchGroupEnd;
/** @type {?} */
NgxMoveableComponent.prototype.click;
/** @type {?} */
NgxMoveableComponent.prototype.clickGroup;
/** @type {?} */
NgxMoveableComponent.prototype.renderStart;
/** @type {?} */
NgxMoveableComponent.prototype.render;
/** @type {?} */
NgxMoveableComponent.prototype.renderEnd;
/** @type {?} */
NgxMoveableComponent.prototype.renderGroupStart;
/** @type {?} */
NgxMoveableComponent.prototype.renderGroup;
/** @type {?} */
NgxMoveableComponent.prototype.renderGroupEnd;
/** @type {?} */
NgxMoveableComponent.prototype.scroll;
/** @type {?} */
NgxMoveableComponent.prototype.scrollGroup;
/** @type {?} */
NgxMoveableComponent.prototype.snap;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1vdmVhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tb3ZlYWJsZS8iLCJzb3VyY2VzIjpbIm5neC1tb3ZlYWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQUUsS0FBSyxFQUNrQixZQUFZLEVBQUUsTUFBTSxFQUN2RCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLFFBQVEsRUFBRSxFQUNmLFVBQVUsRUFBRSxNQUFNLEdBRW5CLE1BQU0sVUFBVSxDQUFDO0FBSWxCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQVFoRSxNQUFNLE9BQU8sb0JBQ1gsU0FBUSxvQkFBb0I7SUErRzVCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUixNQUFNLENBQUMsT0FBTzs7OztRQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3ZDLENBQUMsRUFBQyxDQUFDO0lBQ0wsQ0FBQzs7OztJQUNELFFBQVE7O2NBQ0EsT0FBTyxHQUFvQixFQUFFOztjQUM3QixNQUFNLEdBQWlCLEVBQUU7UUFFL0IsVUFBVSxDQUFDLE9BQU87Ozs7UUFBQyxJQUFJLENBQUMsRUFBRTtZQUN4QixDQUFDLG1CQUFBLE9BQU8sRUFBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUMsRUFBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLE9BQU87Ozs7UUFBQyxJQUFJLENBQUMsRUFBRTtZQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDOzs7O1lBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckIsQ0FBQyxDQUFBLENBQUM7UUFDSixDQUFDLEVBQUMs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QW1FOztJQUVuRSwwQ0FBeUU7O0lBQ3pFLHFDQUErRDs7SUFDL0Qsd0NBQXFFOztJQUNyRSwrQ0FBbUY7O0lBQ25GLDBDQUF5RTs7SUFDekUsNkNBQStFOztJQUUvRSxxQ0FBK0Q7O0lBQy9ELDBDQUF5RTs7SUFFekUsMkNBQTJFOztJQUMzRSxzQ0FBaUU7O0lBQ2pFLHlDQUF1RTs7SUFDdkUsZ0RBQXFGOztJQUNyRiwyQ0FBMkU7O0lBQzNFLDhDQUFpRjs7SUFFakYsc0NBQWlEOztJQUNqRCwyQ0FBMkQ7O0lBRTNELG9DQUE2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSxcbiAgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgT3V0cHV0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IE1vdmVhYmxlLCB7XG4gIFBST1BFUlRJRVMsIEVWRU5UUywgTW92ZWFibGVPcHRpb25zLFxuICBPblNjcm9sbEdyb3VwLCBPblNjcm9sbCwgTW92ZWFibGVFdmVudHMsIE9uU25hcCxcbn0gZnJvbSAnbW92ZWFibGUnO1xuaW1wb3J0IHsgSU9iamVjdCB9IGZyb20gJ0BkYXlicnVzaC91dGlscyc7XG5pbXBvcnQgeyBOZ3hNb3ZlYWJsZUV2ZW50cyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQWJsZSB9IGZyb20gJ21vdmVhYmxlJztcbmltcG9ydCB7IE5neE1vdmVhYmxlSW50ZXJmYWNlIH0gZnJvbSAnLi9uZ3gtbW92ZWFibGUuaW50ZXJmYWNlJztcblxuXG4vLyBAZHluYW1pY1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LW1vdmVhYmxlJyxcbiAgdGVtcGxhdGU6ICcnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3hNb3ZlYWJsZUNvbXBvbmVudFxuICBleHRlbmRzIE5neE1vdmVhYmxlSW50ZXJmYWNlXG4gIGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIE9uQ2hhbmdlcywgUmVxdWlyZWQ8TW92ZWFibGVPcHRpb25zPiwgTmd4TW92ZWFibGVFdmVudHMge1xuICBASW5wdXQoKSBwdWJsaWMgZHJhZ2dhYmxlITogTW92ZWFibGVPcHRpb25zWydkcmFnZ2FibGUnXTtcbiAgQElucHV0KCkgcHVibGljIHJlc2l6YWJsZSE6IE1vdmVhYmxlT3B0aW9uc1sncmVzaXphYmxlJ107XG4gIEBJbnB1dCgpIHB1YmxpYyBzY2FsYWJsZSE6IE1vdmVhYmxlT3B0aW9uc1snc2NhbGFibGUnXTtcbiAgQElucHV0KCkgcHVibGljIHJvdGF0YWJsZSE6IE1vdmVhYmxlT3B0aW9uc1sncm90YXRhYmxlJ107XG4gIEBJbnB1dCgpIHB1YmxpYyB3YXJwYWJsZSE6IE1vdmVhYmxlT3B0aW9uc1snd2FycGFibGUnXTtcbiAgQElucHV0KCkgcHVibGljIHBpbmNoYWJsZSE6IGJvb2xlYW4gfCBBcnJheTwncm90YXRhYmxlJyB8ICdyZXNpemFibGUnIHwgJ3NjYWxhYmxlJz47XG4gIEBJbnB1dCgpIHB1YmxpYyBzbmFwcGFibGUhOiBib29sZWFuIHwgc3RyaW5nW107XG4gIEBJbnB1dCgpIHB1YmxpYyBvcmlnaW4hOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgdGFyZ2V0ITogU1ZHRWxlbWVudCB8IEhUTUxFbGVtZW50IHwgQXJyYXk8U1ZHRWxlbWVudCB8IEhUTUxFbGVtZW50PjtcbiAgQElucHV0KCkgcHVibGljIGNvbnRhaW5lciE6IFNWR0VsZW1lbnQgfCBIVE1MRWxlbWVudCB8IG51bGw7XG4gIEBJbnB1dCgpIHB1YmxpYyB0aHJvdHRsZURyYWchOiBudW1iZXI7XG4gIEBJbnB1dCgpIHB1YmxpYyB0aHJvdHRsZURyYWdSb3RhdGUhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHB1YmxpYyB0aHJvdHRsZVJlc2l6ZSE6IG51bWJlcjtcbiAgQElucHV0KCkgcHVibGljIHRocm90dGxlU2NhbGUhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHB1YmxpYyB0aHJvdHRsZVJvdGF0ZSE6IG51bWJlcjtcbiAgQElucHV0KCkgcHVibGljIGtlZXBSYXRpbyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHB1YmxpYyBlZGdlITogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIHBpbmNoVGhyZXNob2xkITogbnVtYmVyO1xuICBASW5wdXQoKSBwdWJsaWMgc25hcENlbnRlciE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHB1YmxpYyBzbmFwVmVydGljYWwhOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgc25hcEVsZW1lbnQhOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgc25hcEhvcml6b250YWwhOiBib29sZWFuO1xuICBASW5wdXQoKSBwdWJsaWMgc25hcFRocmVzaG9sZCE6IG51bWJlcjtcbiAgQElucHV0KCkgcHVibGljIGhvcml6b250YWxHdWlkZWxpbmVzITogbnVtYmVyW107XG4gIEBJbnB1dCgpIHB1YmxpYyB2ZXJ0aWNhbEd1aWRlbGluZXMhOiBudW1iZXJbXTtcbiAgQElucHV0KCkgcHVibGljIGVsZW1lbnRHdWlkZWxpbmVzITogRWxlbWVudFtdO1xuICBASW5wdXQoKSBwdWJsaWMgYm91bmRzITogeyBsZWZ0PzogbnVtYmVyLCB0b3A/OiBudW1iZXIsIHJpZ2h0PzogbnVtYmVyLCBib3R0b20/OiBudW1iZXIgfTtcbiAgQElucHV0KCkgcHVibGljIGRyYWdBcmVhITogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIHJvdGF0aW9uUG9zaXRpb24hOiAndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0JztcbiAgQElucHV0KCkgcHVibGljIGJhc2VEaXJlY3Rpb24hOiBudW1iZXJbXTtcbiAgQElucHV0KCkgcHVibGljIGRlZmF1bHRHcm91cFJvdGF0ZSE6IG51bWJlcjtcbiAgQElucHV0KCkgcHVibGljIGFibGVzITogQWJsZVtdO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBjbGFzc05hbWUhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB1YmxpYyByZW5kZXJEaXJlY3Rpb25zITogc3RyaW5nW107XG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxhYmxlITogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIHNjcm9sbENvbnRhaW5lciE6IEhUTUxFbGVtZW50O1xuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsVGhyZXNob2xkITogbnVtYmVyO1xuICBASW5wdXQoKSBwdWJsaWMgZ2V0U2Nyb2xsUG9zaXRpb24hOiBNb3ZlYWJsZU9wdGlvbnNbJ2dldFNjcm9sbFBvc2l0aW9uJ107XG5cbiAgQElucHV0KCkgcHVibGljIHJvb3RDb250YWluZXIhOiBNb3ZlYWJsZU9wdGlvbnNbJ3Jvb3RDb250YWluZXInXTtcbiAgQElucHV0KCkgcHVibGljIHpvb20hOiBNb3ZlYWJsZU9wdGlvbnNbJ3pvb20nXTtcbiAgQElucHV0KCkgcHVibGljIHRyYW5zZm9ybU9yaWdpbiE6IE1vdmVhYmxlT3B0aW9uc1sndHJhbnNmb3JtT3JpZ2luJ107XG4gIEBJbnB1dCgpIHB1YmxpYyBzbmFwRGlnaXQhOiBNb3ZlYWJsZU9wdGlvbnNbJ3NuYXBEaWdpdCddO1xuICBASW5wdXQoKSBwdWJsaWMgaXNEaXNwbGF5U25hcERpZ2l0ITogTW92ZWFibGVPcHRpb25zWydpc0Rpc3BsYXlTbmFwRGlnaXQnXTtcbiAgQElucHV0KCkgcHVibGljIGlubmVyQm91bmRzITogTW92ZWFibGVPcHRpb25zWydpbm5lckJvdW5kcyddO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyB0cmlnZ2VyQWJsZXNTaW11bHRhbmVvdXNseSE6IE1vdmVhYmxlT3B0aW9uc1sndHJpZ2dlckFibGVzU2ltdWx0YW5lb3VzbHknXTtcbiAgQElucHV0KCkgcHVibGljIHNuYXBHYXAhOiBNb3ZlYWJsZU9wdGlvbnNbJ3NuYXBHYXAnXTtcblxuICBASW5wdXQoKSBwdWJsaWMgcGluY2hPdXRzaWRlITogTW92ZWFibGVPcHRpb25zWydwaW5jaE91dHNpZGUnXTtcbiAgQElucHV0KCkgcHVibGljIHBhZGRpbmchOiBNb3ZlYWJsZU9wdGlvbnNbJ3BhZGRpbmcnXTtcbiAgQElucHV0KCkgcHVibGljIHNuYXBEaXN0Rm9ybWF0ITogTW92ZWFibGVPcHRpb25zWydzbmFwRGlzdEZvcm1hdCddO1xuICBASW5wdXQoKSBwdWJsaWMgZHJhZ1RhcmdldCE6IE1vdmVhYmxlT3B0aW9uc1snZHJhZ1RhcmdldCddO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgZHJhZ1N0YXJ0ITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydkcmFnU3RhcnQnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgZHJhZyE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snZHJhZyddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyBkcmFnRW5kITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydkcmFnRW5kJ10+O1xuICBAT3V0cHV0KCkgcHVibGljIGRyYWdHcm91cFN0YXJ0ITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydkcmFnR3JvdXBTdGFydCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyBkcmFnR3JvdXAhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ2RyYWdHcm91cCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyBkcmFnR3JvdXBFbmQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ2RyYWdHcm91cEVuZCddPjtcblxuICBAT3V0cHV0KCkgcHVibGljIHJlc2l6ZVN0YXJ0ITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyZXNpemVTdGFydCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByZXNpemUhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3Jlc2l6ZSddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByZXNpemVFbmQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3Jlc2l6ZUVuZCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByZXNpemVHcm91cFN0YXJ0ITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyZXNpemVHcm91cFN0YXJ0J10+O1xuICBAT3V0cHV0KCkgcHVibGljIHJlc2l6ZUdyb3VwITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyZXNpemVHcm91cCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByZXNpemVHcm91cEVuZCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncmVzaXplR3JvdXBFbmQnXT47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBzY2FsZVN0YXJ0ITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydzY2FsZVN0YXJ0J10+O1xuICBAT3V0cHV0KCkgcHVibGljIHNjYWxlITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydzY2FsZSddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyBzY2FsZUVuZCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snc2NhbGVFbmQnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgc2NhbGVHcm91cFN0YXJ0ITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydzY2FsZUdyb3VwU3RhcnQnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgc2NhbGVHcm91cCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snc2NhbGVHcm91cCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyBzY2FsZUdyb3VwRW5kITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydzY2FsZUdyb3VwRW5kJ10+O1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgcm90YXRlU3RhcnQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3JvdGF0ZVN0YXJ0J10+O1xuICBAT3V0cHV0KCkgcHVibGljIHJvdGF0ZSE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncm90YXRlJ10+O1xuICBAT3V0cHV0KCkgcHVibGljIHJvdGF0ZUVuZCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncm90YXRlRW5kJ10+O1xuICBAT3V0cHV0KCkgcHVibGljIHJvdGF0ZUdyb3VwU3RhcnQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3JvdGF0ZUdyb3VwU3RhcnQnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgcm90YXRlR3JvdXAhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3JvdGF0ZUdyb3VwJ10+O1xuICBAT3V0cHV0KCkgcHVibGljIHJvdGF0ZUdyb3VwRW5kITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyb3RhdGVHcm91cEVuZCddPjtcblxuICBAT3V0cHV0KCkgcHVibGljIHdhcnBTdGFydCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snd2FycFN0YXJ0J10+O1xuICBAT3V0cHV0KCkgcHVibGljIHdhcnAhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3dhcnAnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgd2FycEVuZCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snd2FycEVuZCddPjtcblxuICBAT3V0cHV0KCkgcHVibGljIHBpbmNoU3RhcnQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3BpbmNoU3RhcnQnXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgcGluY2ghOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3BpbmNoJ10+O1xuICBAT3V0cHV0KCkgcHVibGljIHBpbmNoRW5kITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydwaW5jaEVuZCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyBwaW5jaEdyb3VwU3RhcnQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3BpbmNoR3JvdXBTdGFydCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyBwaW5jaEdyb3VwITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydwaW5jaEdyb3VwJ10+O1xuICBAT3V0cHV0KCkgcHVibGljIHBpbmNoR3JvdXBFbmQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3BpbmNoR3JvdXBFbmQnXT47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBjbGljayE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snY2xpY2snXT47XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xpY2tHcm91cCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1snY2xpY2tHcm91cCddPjtcblxuICBAT3V0cHV0KCkgcHVibGljIHJlbmRlclN0YXJ0ITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyZW5kZXJTdGFydCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByZW5kZXIhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3JlbmRlciddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByZW5kZXJFbmQhOiBFdmVudEVtaXR0ZXI8TW92ZWFibGVFdmVudHNbJ3JlbmRlckVuZCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByZW5kZXJHcm91cFN0YXJ0ITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyZW5kZXJHcm91cFN0YXJ0J10+O1xuICBAT3V0cHV0KCkgcHVibGljIHJlbmRlckdyb3VwITogRXZlbnRFbWl0dGVyPE1vdmVhYmxlRXZlbnRzWydyZW5kZXJHcm91cCddPjtcbiAgQE91dHB1dCgpIHB1YmxpYyByZW5kZXJHcm91cEVuZCE6IEV2ZW50RW1pdHRlcjxNb3ZlYWJsZUV2ZW50c1sncmVuZGVyR3JvdXBFbmQnXT47XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBzY3JvbGwhOiBFdmVudEVtaXR0ZXI8T25TY3JvbGw+O1xuICBAT3V0cHV0KCkgcHVibGljIHNjcm9sbEdyb3VwITogRXZlbnRFbWl0dGVyPE9uU2Nyb2xsR3JvdXA+O1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgc25hcCE6IEV2ZW50RW1pdHRlcjxPblNuYXA+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgRVZFTlRTLmZvckVhY2gobmFtZSA9PiB7XG4gICAgICB0aGlzW25hbWVdID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgfSk7XG4gIH1cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9uczogTW92ZWFibGVPcHRpb25zID0ge307XG4gICAgY29uc3QgZXZlbnRzOiBJT2JqZWN0PGFueT4gPSB7fTtcblxuICAgIFBST1BFUlRJRVMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgIChvcHRpb25zIGFzIGFueSlbbmFtZV0gPSB0aGlzW25hbWVdO1xuICAgIH0pO1xuICAgIEVWRU5UUy5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgZXZlbnRzW25hbWVdID0gZSA9PiB7XG4gICAgICAgIHRoaXNbbmFtZV0uZW1pdChlKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLm1vdmVhYmxlID0gbmV3IE1vdmVhYmxlKHRoaXMuY29udGFpbmVyIHx8IGRvY3VtZW50LmJvZHksIG9wdGlvbnMpO1xuICAgIHRoaXMubW92ZWFibGUub24oZXZlbnRzKTtcbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgbW92ZWFibGUgPSB0aGlzLm1vdmVhYmxlO1xuXG4gICAgaWYgKCFtb3ZlYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gY2hhbmdlcykge1xuICAgICAgY29uc3QgeyBwcmV2aW91c1ZhbHVlLCBjdXJyZW50VmFsdWUgfSA9IGNoYW5nZXNbbmFtZV07XG5cbiAgICAgIGlmIChwcmV2aW91c1ZhbHVlID09PSBjdXJyZW50VmFsdWUpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBtb3ZlYWJsZVtuYW1lXSA9IGN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5tb3ZlYWJsZS5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==