@mescius/inputman.comment.angular
Version:
このパッケージには、Angular用の[InputManJS](https://developer.mescius.jp/inputmanjs)コンポーネントが含まれます。
288 lines • 37.3 kB
JavaScript
import { ElementRef, Input, Output, EventEmitter, Component, } from "@angular/core";
import { GC } from "../inputman";
import { MethodType, isEmpty, getMethodPrefix, IMCommentCtrl, } from "./common";
import * as i0 from "@angular/core";
export class GcCommentComponent {
constructor(ref) {
this.editorCreated = new EventEmitter();
this.preprocessError = new EventEmitter();
this.beforeExecuteCommand = new EventEmitter();
this.afterExecuteCommand = new EventEmitter();
this.beforeFirstLoad = new EventEmitter();
this.afterFirstLoad = new EventEmitter();
this.onInitialized = new EventEmitter();
this._container = ref.nativeElement;
}
ngOnChanges(changes) {
if (!this._imGcComment) {
return;
}
Object.keys(changes).forEach((key) => {
let currentValue = changes[key].currentValue;
this.setValueToIMControl(key, currentValue);
});
}
setValueToIMControl(key, value) {
if (value === undefined) {
return;
}
if (this.isSetAccessor(key)) {
this._imGcComment[key] = value;
return;
}
let setter = this.tryGetPropertyOperator(key, MethodType.setter);
if (this.hasRealMethod(setter)) {
if (this.propDic &&
this.propDic[key] &&
this.propDic[key].isPramArr === true) {
this._imGcComment[setter].apply(this._imGcComment, value);
}
else {
this._imGcComment[setter](value);
}
}
}
hasRealMethod(methodName) {
return (this._imGcComment &&
typeof this._imGcComment[methodName] === "function");
}
isSetAccessor(key) {
let descriptor = Object.getOwnPropertyDescriptor(this._imGcComment.constructor.prototype, key);
if (descriptor && descriptor.set) {
return true;
}
return false;
}
tryGetPropertyOperator(propertyName, methodType) {
let method = "";
if (this.propDic && this.propDic[propertyName]) {
method =
methodType === MethodType.getter
? this.propDic[propertyName].getter
: this.propDic[propertyName].setter;
if (!isEmpty(method)) {
return method;
}
}
return (getMethodPrefix(methodType) +
propertyName[0].toUpperCase() +
propertyName.slice(1));
}
ngAfterContentInit() {
this.initGcComment();
this.bindEvent();
if (this.propDic) {
var unSupportWithinConfigProps = Object.keys(this.propDic).filter((p) => this.propDic[p] &&
this.propDic[p].supportWithinConfig === false);
unSupportWithinConfigProps.sort((p1, p2) => {
return this.propDic[p1].order - this.propDic[p2].order;
});
unSupportWithinConfigProps.forEach((p) => {
this.setValueToIMControl(p, this[p]);
});
}
this._container[IMCommentCtrl] = this._imGcComment;
}
bindEvent() {
if (!this._imGcComment) {
return;
}
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.EditorCreated, (e) => {
this.editorCreated.emit(e);
});
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.PreprocessError, (e) => {
this.preprocessError.emit(e);
});
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.BeforeExecuteCommand, (e) => {
this.beforeExecuteCommand.emit(e);
});
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.AfterExecuteCommand, (e) => {
this.afterExecuteCommand.emit(e);
});
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.BeforeFirstLoad, () => {
this.beforeFirstLoad.emit();
});
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.AfterFirstLoad, () => {
this.afterFirstLoad.emit();
});
}
ngOnDestroy() {
if (this._container != null) {
this._container.remove();
this._imGcComment?.destroy?.();
this._imGcComment = null;
}
}
initGcComment() {
let element = document.createElement('div');
this.createTemplate(element);
this._imGcComment = new GC.InputMan.GcComment(element, this);
if (Array.isArray(this.comments)) {
this._imGcComment.comments = this.comments;
}
if (this.stickedComment) {
this._imGcComment.stickedComment = this.stickedComment;
}
this._imGcComment.addEventListener(GC.InputMan.GcCommentEvent.CreateEditor, this.createEditor);
this.onInitialized.emit(this._imGcComment);
}
createTemplate(element) {
this._container.innerHTML = "";
this._container.appendChild(element);
}
getNestedIMControl() {
return this._imGcComment;
}
}
GcCommentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GcCommentComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
GcCommentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GcCommentComponent, selector: "gc-comment", inputs: { userInfo: "userInfo", candidateReactionList: "candidateReactionList", candidateReactionListColumns: "candidateReactionListColumns", postTimeFormatter: "postTimeFormatter", updateTimeFormatter: "updateTimeFormatter", showIcon: "showIcon", addCommentEditorPosition: "addCommentEditorPosition", commentMode: "commentMode", header: "header", footer: "footer", headerFooterItems: "headerFooterItems", commentAction: "commentAction", commentInfoAction: "commentInfoAction", commentActionItem: "commentActionItem", commentInfoActionItem: "commentInfoActionItem", commentActionButtonType: "commentActionButtonType", pageSize: "pageSize", loadOnDemand: "loadOnDemand", allowAnonymous: "allowAnonymous", anonymousUserInfo: "anonymousUserInfo", warningMessage: "warningMessage", watermark: "watermark", commentFormatter: "commentFormatter", editorConfig: "editorConfig", avatarType: "avatarType", loadUsersInfoHandler: "loadUsersInfoHandler", loadComments: "loadComments", addNewCommentTo: "addNewCommentTo", keepDraft: "keepDraft", dataSource: "dataSource", loadCommentCount: "loadCommentCount", commentCountFormatter: "commentCountFormatter", loadReactionCount: "loadReactionCount", reactionCountFormatter: "reactionCountFormatter", sortInfo: "sortInfo", createEditor: "createEditor", loadRepliesOnDemand: "loadRepliesOnDemand", replyLevel: "replyLevel", collapseRepliesMode: "collapseRepliesMode", showCurrentUserName: "showCurrentUserName", contextToolbar: "contextToolbar", contextToolbarItem: "contextToolbarItem", loadCommentReplies: "loadCommentReplies", comments: "comments", stickedComment: "stickedComment", copiedLinkDisplayTextFormatter: "copiedLinkDisplayTextFormatter", copiedLinkFormatter: "copiedLinkFormatter", copiedLinkSearchParams: "copiedLinkSearchParams", pastedLinkType: "pastedLinkType", showLinkTypeContextToolbar: "showLinkTypeContextToolbar", loadCommentByLink: "loadCommentByLink", openLinkMode: "openLinkMode", loadStickedComment: "loadStickedComment", showZeroReaction: "showZeroReaction", showOpenReactionListButton: "showOpenReactionListButton", readOnly: "readOnly", enabled: "enabled", height: "height", width: "width", maxHeight: "maxHeight", maxWidth: "maxWidth", minHeight: "minHeight", minWidth: "minWidth", banner: "banner" }, outputs: { editorCreated: "editorCreated", preprocessError: "preprocessError", beforeExecuteCommand: "beforeExecuteCommand", afterExecuteCommand: "afterExecuteCommand", beforeFirstLoad: "beforeFirstLoad", afterFirstLoad: "afterFirstLoad", onInitialized: "onInitialized" }, usesOnChanges: true, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GcCommentComponent, decorators: [{
type: Component,
args: [{
selector: "gc-comment",
template: `<ng-content></ng-content>`,
}]
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { userInfo: [{
type: Input
}], candidateReactionList: [{
type: Input
}], candidateReactionListColumns: [{
type: Input
}], postTimeFormatter: [{
type: Input
}], updateTimeFormatter: [{
type: Input
}], showIcon: [{
type: Input
}], addCommentEditorPosition: [{
type: Input
}], commentMode: [{
type: Input
}], header: [{
type: Input
}], footer: [{
type: Input
}], headerFooterItems: [{
type: Input
}], commentAction: [{
type: Input
}], commentInfoAction: [{
type: Input
}], commentActionItem: [{
type: Input
}], commentInfoActionItem: [{
type: Input
}], commentActionButtonType: [{
type: Input
}], pageSize: [{
type: Input
}], loadOnDemand: [{
type: Input
}], allowAnonymous: [{
type: Input
}], anonymousUserInfo: [{
type: Input
}], warningMessage: [{
type: Input
}], watermark: [{
type: Input
}], commentFormatter: [{
type: Input
}], editorConfig: [{
type: Input
}], avatarType: [{
type: Input
}], loadUsersInfoHandler: [{
type: Input
}], loadComments: [{
type: Input
}], addNewCommentTo: [{
type: Input
}], keepDraft: [{
type: Input
}], dataSource: [{
type: Input
}], loadCommentCount: [{
type: Input
}], commentCountFormatter: [{
type: Input
}], loadReactionCount: [{
type: Input
}], reactionCountFormatter: [{
type: Input
}], sortInfo: [{
type: Input
}], createEditor: [{
type: Input
}], loadRepliesOnDemand: [{
type: Input
}], replyLevel: [{
type: Input
}], collapseRepliesMode: [{
type: Input
}], showCurrentUserName: [{
type: Input
}], contextToolbar: [{
type: Input
}], contextToolbarItem: [{
type: Input
}], loadCommentReplies: [{
type: Input
}], comments: [{
type: Input
}], stickedComment: [{
type: Input
}], copiedLinkDisplayTextFormatter: [{
type: Input
}], copiedLinkFormatter: [{
type: Input
}], copiedLinkSearchParams: [{
type: Input
}], pastedLinkType: [{
type: Input
}], showLinkTypeContextToolbar: [{
type: Input
}], loadCommentByLink: [{
type: Input
}], openLinkMode: [{
type: Input
}], loadStickedComment: [{
type: Input
}], showZeroReaction: [{
type: Input
}], showOpenReactionListButton: [{
type: Input
}], readOnly: [{
type: Input
}], enabled: [{
type: Input
}], height: [{
type: Input
}], width: [{
type: Input
}], maxHeight: [{
type: Input
}], maxWidth: [{
type: Input
}], minHeight: [{
type: Input
}], minWidth: [{
type: Input
}], banner: [{
type: Input
}], editorCreated: [{
type: Output
}], preprocessError: [{
type: Output
}], beforeExecuteCommand: [{
type: Output
}], afterExecuteCommand: [{
type: Output
}], beforeFirstLoad: [{
type: Output
}], afterFirstLoad: [{
type: Output
}], onInitialized: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2NDb21tZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29tbWVudC9HY0NvbW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILFVBQVUsRUFFVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQ0gsVUFBVSxFQUNWLE9BQU8sRUFDUCxlQUFlLEVBRWYsYUFBYSxHQUNoQixNQUFNLFVBQVUsQ0FBQzs7QUFNbEIsTUFBTSxPQUFPLGtCQUFrQjtJQU8zQixZQUFZLEdBQWU7UUFnVHBCLGtCQUFhLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFekQsb0JBQWUsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUzRCx5QkFBb0IsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVoRSx3QkFBbUIsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUvRCxvQkFBZSxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTNELG1CQUFjLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUQsa0JBQWEsR0FBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQTNUNUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsT0FBTztTQUNWO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUN6QyxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQzdDLElBQUksQ0FBQyxtQkFBbUIs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QkFEYixLQUFLO2dCQUdOLDhCQUE4QjtzQkFEN0IsS0FBSztnQkFHTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBR04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUdOLGNBQWM7c0JBRGIsS0FBSztnQkFHTiwwQkFBMEI7c0JBRHpCLEtBQUs7Z0JBR04saUJBQWlCO3NCQURoQixLQUFLO2dCQUdOLFlBQVk7c0JBRFgsS0FBSztnQkFHTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBR04sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBR04sMEJBQTBCO3NCQUR6QixLQUFLO2dCQUdOLFFBQVE7c0JBRFAsS0FBSztnQkFHTixPQUFPO3NCQUROLEtBQUs7Z0JBR04sTUFBTTtzQkFETCxLQUFLO2dCQUdOLEtBQUs7c0JBREosS0FBSztnQkFHTixTQUFTO3NCQURSLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFHTixRQUFRO3NCQURQLEtBQUs7Z0JBR04sTUFBTTtzQkFETCxLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLE1BQU07Z0JBR0EsZUFBZTtzQkFEckIsTUFBTTtnQkFHQSxvQkFBb0I7c0JBRDFCLE1BQU07Z0JBR0EsbUJBQW1CO3NCQUR6QixNQUFNO2dCQUdBLGVBQWU7c0JBRHJCLE1BQU07Z0JBR0EsY0FBYztzQkFEcEIsTUFBTTtnQkFHQSxhQUFhO3NCQURuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgRWxlbWVudFJlZixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgQ29tcG9uZW50LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgR0MgfSBmcm9tIFwiLi4vaW5wdXRtYW5cIjtcbmltcG9ydCB7XG4gICAgTWV0aG9kVHlwZSxcbiAgICBpc0VtcHR5LFxuICAgIGdldE1ldGhvZFByZWZpeCxcbiAgICBQcm9wZXJ0eURpY3Rpb25hcnksXG4gICAgSU1Db21tZW50Q3RybCxcbn0gZnJvbSBcIi4vY29tbW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcImdjLWNvbW1lbnRcIixcbiAgICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gLFxufSlcbmV4cG9ydCBjbGFzcyBHY0NvbW1lbnRDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95XG57XG4gICAgcHJvdGVjdGVkIF9jb250YWluZXI6IEVsZW1lbnQ7XG4gICAgcHJvdGVjdGVkIF9pbUdjQ29tbWVudDogR0MuSW5wdXRNYW4uR2NDb21tZW50O1xuICAgIHByb3RlY3RlZCBwcm9wRGljOiBQcm9wZXJ0eURpY3Rpb25hcnk7XG5cbiAgICBjb25zdHJ1Y3RvcihyZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyID0gcmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pbUdjQ29tbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlcykuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VmFsdWUgPSBjaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZVRvSU1Db250cm9sKGtleSwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldFZhbHVlVG9JTUNvbnRyb2woa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzU2V0QWNjZXNzb3Ioa2V5KSkge1xuICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNldHRlciA9IHRoaXMudHJ5R2V0UHJvcGVydHlPcGVyYXRvcihrZXksIE1ldGhvZFR5cGUuc2V0dGVyKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzUmVhbE1ldGhvZChzZXR0ZXIpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wRGljICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wRGljW2tleV0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BEaWNba2V5XS5pc1ByYW1BcnIgPT09IHRydWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50W3NldHRlcl0uYXBwbHkodGhpcy5faW1HY0NvbW1lbnQsIHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnRbc2V0dGVyXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1JlYWxNZXRob2QobWV0aG9kTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9pbUdjQ29tbWVudCAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuX2ltR2NDb21tZW50W21ldGhvZE5hbWVdID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU2V0QWNjZXNzb3Ioa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnQuY29uc3RydWN0b3IucHJvdG90eXBlLFxuICAgICAgICAgICAga2V5XG4gICAgICAgICk7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3Iuc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cnlHZXRQcm9wZXJ0eU9wZXJhdG9yKFxuICAgICAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICAgICAgbWV0aG9kVHlwZTogTWV0aG9kVHlwZVxuICAgICk6IHN0cmluZyB7XG4gICAgICAgIGxldCBtZXRob2Q6IHN0cmluZyA9IFwiXCI7XG4gICAgICAgIGlmICh0aGlzLnByb3BEaWMgJiYgdGhpcy5wcm9wRGljW3Byb3BlcnR5TmFtZV0pIHtcbiAgICAgICAgICAgIG1ldGhvZCA9XG4gICAgICAgICAgICAgICAgbWV0aG9kVHlwZSA9PT0gTWV0aG9kVHlwZS5nZXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb3BEaWNbcHJvcGVydHlOYW1lXS5nZXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnByb3BEaWNbcHJvcGVydHlOYW1lXS5zZXR0ZXI7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkobWV0aG9kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldE1ldGhvZFByZWZpeChtZXRob2RUeXBlKSArXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWVbMF0udG9VcHBlckNhc2UoKSArXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWUuc2xpY2UoMSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRHY0NvbW1lbnQoKTtcbiAgICAgICAgdGhpcy5iaW5kRXZlbnQoKTtcbiAgICAgICAgaWYgKHRoaXMucHJvcERpYykge1xuICAgICAgICAgICAgdmFyIHVuU3VwcG9ydFdpdGhpbkNvbmZpZ1Byb3BzID0gT2JqZWN0LmtleXModGhpcy5wcm9wRGljKS5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKHApID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcERpY1twXSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BEaWNbcF0uc3VwcG9ydFdpdGhpbkNvbmZpZyA9PT0gZmFsc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB1blN1cHBvcnRXaXRoaW5Db25maWdQcm9wcy5zb3J0KChwMSwgcDIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wRGljW3AxXS5vcmRlciAtIHRoaXMucHJvcERpY1twMl0ub3JkZXI7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdW5TdXBwb3J0V2l0aGluQ29uZmlnUHJvcHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVUb0lNQ29udHJvbChwLCB0aGlzW3BdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbnRhaW5lcltJTUNvbW1lbnRDdHJsXSA9IHRoaXMuX2ltR2NDb21tZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBiaW5kRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5faW1HY0NvbW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbUdjQ29tbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgR0MuSW5wdXRNYW4uR2NDb21tZW50RXZlbnQuRWRpdG9yQ3JlYXRlZCxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3JDcmVhdGVkLmVtaXQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5QcmVwcm9jZXNzRXJyb3IsXG4gICAgICAgICAgICAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc0Vycm9yLmVtaXQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5CZWZvcmVFeGVjdXRlQ29tbWFuZCxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVFeGVjdXRlQ29tbWFuZC5lbWl0KGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9pbUdjQ29tbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgR0MuSW5wdXRNYW4uR2NDb21tZW50RXZlbnQuQWZ0ZXJFeGVjdXRlQ29tbWFuZCxcbiAgICAgICAgICAgIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckV4ZWN1dGVDb21tYW5kLmVtaXQoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5CZWZvcmVGaXJzdExvYWQsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVGaXJzdExvYWQuZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9pbUdjQ29tbWVudC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgR0MuSW5wdXRNYW4uR2NDb21tZW50RXZlbnQuQWZ0ZXJGaXJzdExvYWQsXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZnRlckZpcnN0TG9hZC5lbWl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50Py5kZXN0cm95Py4oKTtcbiAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEdjQ29tbWVudCgpOiB2b2lkIHtcbiAgICAgICAgbGV0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUZW1wbGF0ZShlbGVtZW50KTtcbiAgICAgICAgdGhpcy5faW1HY0NvbW1lbnQgPSBuZXcgR0MuSW5wdXRNYW4uR2NDb21tZW50KGVsZW1lbnQsIHRoaXMgYXMgYW55KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jb21tZW50cykpIHtcbiAgICAgICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmNvbW1lbnRzID0gdGhpcy5jb21tZW50cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGlja2VkQ29tbWVudCkge1xuICAgICAgICAgICAgdGhpcy5faW1HY0NvbW1lbnQuc3RpY2tlZENvbW1lbnQgPSB0aGlzLnN0aWNrZWRDb21tZW50O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2ltR2NDb21tZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICAgICBHQy5JbnB1dE1hbi5HY0NvbW1lbnRFdmVudC5DcmVhdGVFZGl0b3IsXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUVkaXRvclxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9uSW5pdGlhbGl6ZWQuZW1pdCh0aGlzLl9pbUdjQ29tbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVUZW1wbGF0ZShlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICB0aGlzLl9jb250YWluZXIuaW5uZXJIVE1MID0gXCJcIjtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROZXN0ZWRJTUNvbnRyb2woKTogR0MuSW5wdXRNYW4uR2NDb21tZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltR2NDb21tZW50O1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgdXNlckluZm8/OiBHQy5JbnB1dE1hbi5Vc2VySW5mbztcbiAgICBASW5wdXQoKVxuICAgIGNhbmRpZGF0ZVJlYWN0aW9uTGlzdD86IChzdHJpbmd8IEdDLklucHV0TWFuLkNhbmRpZGF0ZVJlYWN0aW9uSXRlbSlbXTtcbiAgICBASW5wdXQoKVxuICAgIGNhbmRpZGF0ZVJlYWN0aW9uTGlzdENvbHVtbnM/OiBudW1iZXI7XG4gICAgQElucHV0KClcbiAgICBwb3N0VGltZUZvcm1hdHRlcj86IEdDLklucHV0TWFuLkRhdGVGb3JtYXR0ZXI7XG4gICAgQElucHV0KClcbiAgICB1cGRhdGVUaW1lRm9ybWF0dGVyPzogR0MuSW5wdXRNYW4uRGF0ZUZvcm1hdHRlcjtcbiAgICBASW5wdXQoKVxuICAgIHNob3dJY29uPzogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIGFkZENvbW1lbnRFZGl0b3JQb3NpdGlvbj86IEdDLklucHV0TWFuLkdjQ29tbWVudEVkaXRvclBvc2l0aW9uO1xuICAgIEBJbnB1dCgpXG4gICAgY29tbWVudE1vZGU/OiBHQy5JbnB1dE1hbi5HY0NvbW1lbnRNb2RlO1xuICAgIEBJbnB1dCgpXG4gICAgaGVhZGVyPzogKHN0cmluZyB8IEdDLklucHV0TWFuLkdjQ29tbWVudEhlYWRlckZvb3Rlckl0ZW0pW107XG4gICAgQElucHV0KClcbiAgICBmb290ZXI/OiAoc3RyaW5nIHwgR0MuSW5wdXRNYW4uR2NDb21tZW50SGVhZGVyRm9vdGVySXRlbSlbXTtcbiAgICBASW5wdXQoKVxuICAgIGhlYWRlckZvb3Rlckl0ZW1zPzogeyBba2V5OiBzdHJpbmddOiAoZ2NDb21tZW50OiBHQy5JbnB1dE1hbi5HY0NvbW1lbnQpID0+IEdDLklucHV0TWFuLklIZWFkZXJGb290ZXJJdGVtIH07XG4gICAgQElucHV0KClcbiAgICBjb21tZW50QWN0aW9uPzogKHN0cmluZyB8IEdDLklucHV0TWFuLkdjQ29tbWVudENvbW1lbnRBY3Rpb25JdGVtKVtdO1xuICAgIEBJbnB1dCgpXG4gICAgY29tbWVudEluZm9BY3Rpb24/OiAoc3RyaW5nIHwgR0MuSW5wdXRNYW4uR2NDb21tZW50Q29tbWVudEluZm9BY3Rpb25JdGVtKVtdO1xuICAgIEBJbnB1dCgpXG4gICAgY29tbWVudEFjdGlvbkl0ZW0/OiB7IFtrZXk6IHN0cmluZ106IEdDLklucHV0TWFuLklDb21tZW50QWN0aW9uSXRlbSB9O1xuICAgIEBJbnB1dCgpXG4gICAgY29tbWVudEluZm9BY3Rpb25JdGVtPzogeyBba2V5OiBzdHJpbmddOiBHQy5JbnB1dE1hbi5JQ29tbWVudEluZm9BY3Rpb25JdGVtIH07XG4gICAgQElucHV0KClcbiAgICBjb21tZW50QWN0aW9uQnV0dG9uVHlwZT86IEdDLklucHV0TWFuLkdjQ29tbWVudEFjdGlvbkJ1dHRvblR5cGU7XG4gICAgQElucHV0KClcbiAgICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgICBASW5wdXQoKVxuICAgIGxvYWRPbkRlbWFuZD86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBhbGxvd0Fub255bW91cz86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBhbm9ueW1vdXNVc2VySW5mbz86IEdDLklucHV0TWFuLlVzZXJJbmZvO1xuICAgIEBJbnB1dCgpXG4gICAgd2FybmluZ01lc3NhZ2U/OiBHQy5JbnB1dE1hbi5JV2FybmluZ01lc3NhZ2U7XG4gICAgQElucHV0KClcbiAgICB3YXRlcm1hcms/OiBHQy5JbnB1dE1hbi5JV2F0ZXJNYXJrO1xuICAgIEBJbnB1dCgpXG4gICAgY29tbWVudEZvcm1hdHRlcj86IEdDLklucHV0TWFuLkNvbW1lbnRGb3JtYXR0ZXI7XG4gICAgQElucHV0KClcbiAgICBlZGl0b3JDb25maWc/OiBHQy5JbnB1dE1hbi5FZGl0b3JDb25maWc7XG4gICAgQElucHV0KClcbiAgICBhdmF0YXJUeXBlPzogR0MuSW5wdXRNYW4uR2NDb21tZW50VXNlckljb25UeXBlO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZFVzZXJzSW5mb0hhbmRsZXI/OiBHQy5JbnB1dE1hbi5Mb2FkVXNlcnNDYWxsYmFjaztcbiAgICBASW5wdXQoKVxuICAgIGxvYWRDb21tZW50cz86IChhcmdzOiBHQy5JbnB1dE1hbi5Mb2FkTW9yZUNvbW1lbnRzSW5mbykgPT4gR0MuSW5wdXRNYW4uTG9hZENvbW1lbnRzUmVzdWx0O1xuICAgIEBJbnB1dCgpXG4gICAgYWRkTmV3Q29tbWVudFRvPzogR0MuSW5wdXRNYW4uQWRkTmV3Q29tbWVudFBvc2l0aW9uO1xuICAgIEBJbnB1dCgpXG4gICAga2VlcERyYWZ0PzogYm9vbGVhbjtcbiAgICBASW5wdXQoKVxuICAgIGRhdGFTb3VyY2U/OiBHQy5JbnB1dE1hbi5JR2NDb21tZW50RGF0YVNvdXJjZTtcbiAgICBASW5wdXQoKVxuICAgIGxvYWRDb21tZW50Q291bnQ/OiAoKSA9PiBudW1iZXIgfCBQcm9taXNlPG51bWJlcj47XG4gICAgQElucHV0KClcbiAgICBjb21tZW50Q291bnRGb3JtYXR0ZXI/OiAobjogbnVtYmVyKSA9PiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgICBASW5wdXQoKVxuICAgIGxvYWRSZWFjdGlvbkNvdW50PzogKCkgPT4gbnVtYmVyIHwgUHJvbWlzZTxudW1iZXI+O1xuICAgIEBJbnB1dCgpXG4gICAgcmVhY3Rpb25Db3VudEZvcm1hdHRlcj86IChuOiBudW1iZXIpID0+IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICAgIEBJbnB1dCgpXG4gICAgc29ydEluZm8/OiBHQy5JbnB1dE1hbi5HY0NvbW1lbnRTb3J0SW5mbztcbiAgICBASW5wdXQoKVxuICAgIGNyZWF0ZUVkaXRvcj86IChhcmdzOiBHQy5JbnB1dE1hbi5DcmVhdGVFZGl0b3JBcmdzKSA9PiBHQy5JbnB1dE1hbi5JQ29tbWVudEVkaXRvcjtcbiAgICBASW5wdXQoKVxuICAgIGxvYWRSZXBsaWVzT25EZW1hbmQ/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgcmVwbHlMZXZlbD86IG51bWJlcjtcbiAgICBASW5wdXQoKVxuICAgIGNvbGxhcHNlUmVwbGllc01vZGU/OiBHQy5JbnB1dE1hbi5HY0NvbW1lbnRDb2xsYXBzZVJlcGxpZXNNb2RlO1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0N1cnJlbnRVc2VyTmFtZT86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBjb250ZXh0VG9vbGJhcj86IChzdHJpbmcgfCBHQy5JbnB1dE1hbi5HY0NvbW1lbnRDb250ZXh0VG9vbGJhciB8IEdDLklucHV0TWFuLkNvbnRleHRUb29sYmFyT3B0aW9uKVtdO1xuICAgIEBJbnB1dCgpXG4gICAgY29udGV4dFRvb2xiYXJJdGVtPzogeyBba2V5OiBzdHJpbmddOiBHQy5JbnB1dE1hbi5JQ29tbWVudENvbnRleHRUb29sYmFySXRlbSB9O1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZENvbW1lbnRSZXBsaWVzPzogKGNvbW1lbnQ6IEdDLklucHV0TWFuLklDb21tZW50LCBsb2FkZWRDb3VudDogbnVtYmVyKSA9PiBHQy5JbnB1dE1hbi5Mb2FkQ29tbWVudHNSZXN1bHQ7XG4gICAgQElucHV0KClcbiAgICBjb21tZW50cz86IEdDLklucHV0TWFuLklDb21tZW50W107XG4gICAgQElucHV0KClcbiAgICBzdGlja2VkQ29tbWVudD86IEdDLklucHV0TWFuLklDb21tZW50O1xuICAgIEBJbnB1dCgpXG4gICAgY29waWVkTGlua0Rpc3BsYXlUZXh0Rm9ybWF0dGVyPzogKGNvbW1lbnQ6IEdDLklucHV0TWFuLklDb21tZW50KSA9PiBHQy5JbnB1dE1hbi5JQ29waWVkTGlua0Rpc3BsYXlUZXh0Q29uZmlnO1xuICAgIEBJbnB1dCgpXG4gICAgY29waWVkTGlua0Zvcm1hdHRlcj86IChjb21tZW50OiBHQy5JbnB1dE1hbi5JQ29tbWVudCkgPT4gc3RyaW5nO1xuICAgIEBJbnB1dCgpXG4gICAgY29waWVkTGlua1NlYXJjaFBhcmFtcz86IChHQy5JbnB1dE1hbi5HY0NvbW1lbnRMaW5rU2VhcmNoUGFyYW1zIHwgR0MuSW5wdXRNYW4uQ3VzdG9tTGlua1NlYXJjaFBhcmFtKVtdO1xuICAgIEBJbnB1dCgpXG4gICAgcGFzdGVkTGlua1R5cGU/OiBHQy5JbnB1dE1hbi5HY0NvbW1lbnRQYXN0ZUxpbmtUeXBlO1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0xpbmtUeXBlQ29udGV4dFRvb2xiYXI/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZENvbW1lbnRCeUxpbms/OiAobGluazogc3RyaW5nKSA9PiBQcm9taXNlPEdDLklucHV0TWFuLkxvYWRDb21tZW50QnlMaW5rUmVzdWx0PjtcbiAgICBASW5wdXQoKVxuICAgIG9wZW5MaW5rTW9kZT86IEdDLklucHV0TWFuLk9wZW5MaW5rTW9kZTtcbiAgICBASW5wdXQoKVxuICAgIGxvYWRTdGlja2VkQ29tbWVudD86ICgpID0+IEdDLklucHV0TWFuLklDb21tZW50IHwgbnVsbDtcbiAgICBASW5wdXQoKVxuICAgIHNob3daZXJvUmVhY3Rpb24/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd09wZW5SZWFjdGlvbkxpc3RCdXR0b24/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZE9ubHk/OiBib29sZWFuO1xuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgQElucHV0KClcbiAgICBoZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7IFxuICAgIEBJbnB1dCgpXG4gICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBtYXhIZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7IFxuICAgIEBJbnB1dCgpXG4gICAgbWF4V2lkdGg/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBtaW5IZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgQElucHV0KClcbiAgICBtaW5XaWR0aD86IG51bWJlciB8IHN0cmluZztcbiAgICBASW5wdXQoKVxuICAgIGJhbm5lcj86IHN0cmluZztcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBlZGl0b3JDcmVhdGVkOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcHJlcHJvY2Vzc0Vycm9yOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYmVmb3JlRXhlY3V0ZUNvbW1hbmQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBhZnRlckV4ZWN1dGVDb21tYW5kOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYmVmb3JlRmlyc3RMb2FkOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgYWZ0ZXJGaXJzdExvYWQ6IEV2ZW50RW1pdHRlcjxvYmplY3Q+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkluaXRpYWxpemVkOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbn1cbiJdfQ==