UNPKG

ngx-tencent-im

Version:
77 lines 17 kB
import { Component } from '@angular/core'; import { currentConversationSelector, conversationListSelector } from '../../store/selectors'; import { showAction } from '../../store/actions'; import { MESSAGE_STATUS } from '../../shared.data'; import * as i0 from "@angular/core"; import * as i1 from "@ngrx/store"; import * as i2 from "../../tim-helper.service"; import * as i3 from "../conversation-item/conversation-item.component"; import * as i4 from "ng-zorro-antd/modal"; import * as i5 from "ng-zorro-antd/form"; import * as i6 from "@angular/common"; import * as i7 from "ng-zorro-antd/grid"; import * as i8 from "ng-zorro-antd/input"; import * as i9 from "@angular/forms"; export class ConversationListComponent { constructor(store, timHelperService) { this.store = store; this.timHelperService = timHelperService; this.conversationList = []; this.timeout = null; this.showDialog = false; this.userID = ''; } ngOnInit() { this.storeSubscription = this.store.select(currentConversationSelector) .subscribe(res => { this.currentConversation = res; }); // 获取当前list会话 this.subscription = this.store.select(conversationListSelector) .subscribe(res => { this.conversationList = res; }); } ; add() { this.showDialog = true; } handleOk() { if (this.userID !== '@TIM#SYSTEM') { this.timHelperService.checkoutConversation(`C2C${this.userID}`); this.showDialog = false; } this.userID = ''; } handleCancel() { this.showDialog = false; } refresh() { // if (!this.timeout) { // this.timeout = setTimeout(() => { // this.timeout = null; // }, 1000); // } // 拉取会话列表 this.timHelperService.tim.getConversationList().then(({ data }) => { this.store.dispatch(showAction({ msgType: MESSAGE_STATUS.success, message: '刷新成功!' })); }).catch((imError) => { console.error('getConversationList error:', imError); // 获取会话列表失败的相关信息 }); } ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } if (this.storeSubscription) { this.storeSubscription.unsubscribe(); } } } ConversationListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ConversationListComponent, deps: [{ token: i1.Store }, { token: i2.TimHelperService }], target: i0.ɵɵFactoryTarget.Component }); ConversationListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.8", type: ConversationListComponent, selector: "app-conversation-list", ngImport: i0, template: "<div class=\"list-container\">\r\n <div class=\"header-bar\">\r\n <button title=\"\u5237\u65B0\u5217\u8868\" (click)=\"refresh()\">\r\n <i class=\"tim-icon-refresh\"></i>\r\n </button>\r\n <button title=\"\u521B\u5EFA\u4F1A\u8BDD\" (click)=\"add()\">\r\n <i class=\"tim-icon-add\"></i>\r\n </button>\r\n </div>\r\n <div class=\"scroll-container\">\r\n <app-conversation-item [currentConversation]=\"currentConversation\" [conversation]=\"item\"\r\n *ngFor=\"let item of conversationList\">\r\n </app-conversation-item>\r\n </div>\r\n</div>\r\n\r\n<nz-modal [(nzVisible)]=\"showDialog\" nzTitle=\"\u53D1\u8D77\u4F1A\u8BDD\" [nzContent]=\"content\"\r\n (nzOnCancel)=\"handleCancel()\" (nzOnOk)=\"handleOk()\">\r\n</nz-modal>\r\n\r\n<ng-template #content>\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"6\">\u7528\u6237ID</nz-form-label>\r\n <nz-form-control [nzSpan]=\"14\">\r\n <input nz-input [(ngModel)]=\"userID\">\r\n </nz-form-control>\r\n </nz-form-item>\r\n</ng-template>\r\n", styles: [".list-container{height:100%;width:100%;display:flex flex-direction column}.header-bar{flex-shrink:0;height:50px;border-bottom:1px solid #303841;padding:10px 10px 10px 20px}.header-bar button{float:right;display:inline-block;cursor:pointer;background:#303841;border:none;color:#76828c;box-sizing:border-box;transition:.3s;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;margin:0 10px 0 0;padding:0;width:30px;height:30px;line-height:34px;font-size:24px;text-align:center;white-space:nowrap;border-radius:50%;outline:0}.header-bar button:hover{transform:rotate(360deg);color:#5cadff}.header-bar .scroll-container{overflow-y:scroll;flex:1}.bottom-circle-btn{position:absolute;bottom:20px;right:20px}.refresh{bottom:70px}\n"], components: [{ type: i3.ConversationItemComponent, selector: "app-conversation-item", inputs: ["currentConversation", "conversation"] }, { type: i4.NzModalComponent, selector: "nz-modal", inputs: ["nzMask", "nzMaskClosable", "nzCloseOnNavigation", "nzVisible", "nzClosable", "nzOkLoading", "nzOkDisabled", "nzCancelDisabled", "nzCancelLoading", "nzKeyboard", "nzNoAnimation", "nzCentered", "nzContent", "nzComponentParams", "nzFooter", "nzZIndex", "nzWidth", "nzWrapClassName", "nzClassName", "nzStyle", "nzTitle", "nzCloseIcon", "nzMaskStyle", "nzBodyStyle", "nzOkText", "nzCancelText", "nzOkType", "nzOkDanger", "nzIconType", "nzModalType", "nzAutofocus", "nzOnOk", "nzOnCancel"], outputs: ["nzOnOk", "nzOnCancel", "nzAfterOpen", "nzAfterClose", "nzVisibleChange"], exportAs: ["nzModal"] }, { type: i5.NzFormItemComponent, selector: "nz-form-item", exportAs: ["nzFormItem"] }, { type: i5.NzFormLabelComponent, selector: "nz-form-label", inputs: ["nzFor", "nzRequired", "nzNoColon", "nzTooltipTitle", "nzTooltipIcon"], exportAs: ["nzFormLabel"] }, { type: i5.NzFormControlComponent, selector: "nz-form-control", inputs: ["nzSuccessTip", "nzWarningTip", "nzErrorTip", "nzValidatingTip", "nzExtra", "nzAutoTips", "nzDisableAutoTips", "nzHasFeedback", "nzValidateStatus"], exportAs: ["nzFormControl"] }], directives: [{ type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NzRowDirective, selector: "[nz-row],nz-row,nz-form-item", inputs: ["nzAlign", "nzJustify", "nzGutter"], exportAs: ["nzRow"] }, { type: i7.NzColDirective, selector: "[nz-col],nz-col,nz-form-control,nz-form-label", inputs: ["nzFlex", "nzSpan", "nzOrder", "nzOffset", "nzPush", "nzPull", "nzXs", "nzSm", "nzMd", "nzLg", "nzXl", "nzXXl"], exportAs: ["nzCol"] }, { type: i8.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzBorderless", "nzSize", "disabled"], exportAs: ["nzInput"] }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.8", ngImport: i0, type: ConversationListComponent, decorators: [{ type: Component, args: [{ selector: 'app-conversation-list', template: "<div class=\"list-container\">\r\n <div class=\"header-bar\">\r\n <button title=\"\u5237\u65B0\u5217\u8868\" (click)=\"refresh()\">\r\n <i class=\"tim-icon-refresh\"></i>\r\n </button>\r\n <button title=\"\u521B\u5EFA\u4F1A\u8BDD\" (click)=\"add()\">\r\n <i class=\"tim-icon-add\"></i>\r\n </button>\r\n </div>\r\n <div class=\"scroll-container\">\r\n <app-conversation-item [currentConversation]=\"currentConversation\" [conversation]=\"item\"\r\n *ngFor=\"let item of conversationList\">\r\n </app-conversation-item>\r\n </div>\r\n</div>\r\n\r\n<nz-modal [(nzVisible)]=\"showDialog\" nzTitle=\"\u53D1\u8D77\u4F1A\u8BDD\" [nzContent]=\"content\"\r\n (nzOnCancel)=\"handleCancel()\" (nzOnOk)=\"handleOk()\">\r\n</nz-modal>\r\n\r\n<ng-template #content>\r\n <nz-form-item>\r\n <nz-form-label [nzSpan]=\"6\">\u7528\u6237ID</nz-form-label>\r\n <nz-form-control [nzSpan]=\"14\">\r\n <input nz-input [(ngModel)]=\"userID\">\r\n </nz-form-control>\r\n </nz-form-item>\r\n</ng-template>\r\n", styles: [".list-container{height:100%;width:100%;display:flex flex-direction column}.header-bar{flex-shrink:0;height:50px;border-bottom:1px solid #303841;padding:10px 10px 10px 20px}.header-bar button{float:right;display:inline-block;cursor:pointer;background:#303841;border:none;color:#76828c;box-sizing:border-box;transition:.3s;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;margin:0 10px 0 0;padding:0;width:30px;height:30px;line-height:34px;font-size:24px;text-align:center;white-space:nowrap;border-radius:50%;outline:0}.header-bar button:hover{transform:rotate(360deg);color:#5cadff}.header-bar .scroll-container{overflow-y:scroll;flex:1}.bottom-circle-btn{position:absolute;bottom:20px;right:20px}.refresh{bottom:70px}\n"] }] }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.TimHelperService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVyc2F0aW9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlbmNlbnQtaW0vc3JjL2NvbnZlcnNhdGlvbi9jb252ZXJzYXRpb24tbGlzdC9jb252ZXJzYXRpb24tbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdGVuY2VudC1pbS9zcmMvY29udmVyc2F0aW9uL2NvbnZlcnNhdGlvbi1saXN0L2NvbnZlcnNhdGlvbi1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBTTdELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7O0FBUW5ELE1BQU0sT0FBTyx5QkFBeUI7SUFTcEMsWUFDVSxLQUFZLEVBQ1osZ0JBQWtDO1FBRGxDLFVBQUssR0FBTCxLQUFLLENBQU87UUFDWixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBVjVDLHFCQUFnQixHQUF3QixFQUFFLENBQUM7UUFDM0MsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsV0FBTSxHQUFHLEVBQUUsQ0FBQztJQVFSLENBQUM7SUFFTCxRQUFRO1FBRU4sSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLDJCQUEyQixDQUFDO2FBQ3BFLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNmLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxHQUFHLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFFTCxhQUFhO1FBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQzthQUM1RCxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUFBLENBQUM7SUFFRixHQUFHO1FBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssYUFBYSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMxQixDQUFDO0lBRUQsT0FBTztRQUNMLHVCQUF1QjtRQUN2QixzQ0FBc0M7UUFDdEMsMkJBQTJCO1FBRTNCLGNBQWM7UUFDZCxJQUFJO1FBRUosU0FBUztRQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7WUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6RixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0JBQWdCO1FBQ3hFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNqQztRQUNELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QztJQUNILENBQUM7O3NIQXBFVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qiw2RENqQnRDLCtnQ0E0QkE7MkZEWGEseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGltSGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3RpbS1oZWxwZXIuc2VydmljZSc7XHJcblxyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuXHJcbmltcG9ydCB7IENvbnZlcnNhdGlvbiB9IGZyb20gJ3RpbS1qcy1zZGsnO1xyXG5pbXBvcnQgeyBjdXJyZW50Q29udmVyc2F0aW9uU2VsZWN0b3IsIGNvbnZlcnNhdGlvbkxpc3RTZWxlY3RvciB9IGZyb20gJy4uLy4uL3N0b3JlL3NlbGVjdG9ycyc7XHJcbmltcG9ydCB7IHNob3dBY3Rpb24gfSBmcm9tICcuLi8uLi9zdG9yZS9hY3Rpb25zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1FU1NBR0VfU1RBVFVTIH0gZnJvbSAnLi4vLi4vc2hhcmVkLmRhdGEnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNvbnZlcnNhdGlvbi1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29udmVyc2F0aW9uLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbnZlcnNhdGlvbi1saXN0LmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbnZlcnNhdGlvbkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgY29udmVyc2F0aW9uTGlzdDogQXJyYXk8Q29udmVyc2F0aW9uPiA9IFtdO1xyXG4gIHRpbWVvdXQgPSBudWxsO1xyXG4gIHNob3dEaWFsb2cgPSBmYWxzZTtcclxuICB1c2VySUQgPSAnJztcclxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBzdG9yZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGN1cnJlbnRDb252ZXJzYXRpb246IENvbnZlcnNhdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHN0b3JlOiBTdG9yZSxcclxuICAgIHByaXZhdGUgdGltSGVscGVyU2VydmljZTogVGltSGVscGVyU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHRoaXMuc3RvcmVTdWJzY3JpcHRpb24gPSB0aGlzLnN0b3JlLnNlbGVjdChjdXJyZW50Q29udmVyc2F0aW9uU2VsZWN0b3IpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRDb252ZXJzYXRpb24gPSByZXM7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIOiOt+WPluW9k+WJjWxpc3TkvJror51cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5zdG9yZS5zZWxlY3QoY29udmVyc2F0aW9uTGlzdFNlbGVjdG9yKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25MaXN0ID0gcmVzO1xyXG4gICAgICB9KTtcclxuICB9O1xyXG5cclxuICBhZGQoKSB7XHJcbiAgICB0aGlzLnNob3dEaWFsb2cgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlT2soKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy51c2VySUQgIT09ICdAVElNI1NZU1RFTScpIHtcclxuICAgICAgdGhpcy50aW1IZWxwZXJTZXJ2aWNlLmNoZWNrb3V0Q29udmVyc2F0aW9uKGBDMkMke3RoaXMudXNlcklEfWApO1xyXG4gICAgICB0aGlzLnNob3dEaWFsb2cgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMudXNlcklEID0gJyc7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dEaWFsb2cgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICAvLyBpZiAoIXRoaXMudGltZW91dCkge1xyXG4gICAgLy8gICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICB0aGlzLnRpbWVvdXQgPSBudWxsO1xyXG5cclxuICAgIC8vICAgfSwgMTAwMCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8g5ouJ5Y+W5Lya6K+d5YiX6KGoXHJcbiAgICB0aGlzLnRpbUhlbHBlclNlcnZpY2UudGltLmdldENvbnZlcnNhdGlvbkxpc3QoKS50aGVuKCh7IGRhdGEgfSkgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHNob3dBY3Rpb24oeyBtc2dUeXBlOiBNRVNTQUdFX1NUQVRVUy5zdWNjZXNzLCBtZXNzYWdlOiAn5Yi35paw5oiQ5Yqf77yBJyB9KSk7XHJcblxyXG4gICAgfSkuY2F0Y2goKGltRXJyb3IpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignZ2V0Q29udmVyc2F0aW9uTGlzdCBlcnJvcjonLCBpbUVycm9yKTsgLy8g6I635Y+W5Lya6K+d5YiX6KGo5aSx6LSl55qE55u45YWz5L+h5oGvXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zdG9yZVN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN0b3JlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibGlzdC1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWJhclwiPlxyXG4gICAgPGJ1dHRvbiB0aXRsZT1cIuWIt+aWsOWIl+ihqFwiIChjbGljayk9XCJyZWZyZXNoKClcIj5cclxuICAgICAgPGkgY2xhc3M9XCJ0aW0taWNvbi1yZWZyZXNoXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIHRpdGxlPVwi5Yib5bu65Lya6K+dXCIgKGNsaWNrKT1cImFkZCgpXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwidGltLWljb24tYWRkXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInNjcm9sbC1jb250YWluZXJcIj5cclxuICAgIDxhcHAtY29udmVyc2F0aW9uLWl0ZW0gW2N1cnJlbnRDb252ZXJzYXRpb25dPVwiY3VycmVudENvbnZlcnNhdGlvblwiIFtjb252ZXJzYXRpb25dPVwiaXRlbVwiXHJcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbnZlcnNhdGlvbkxpc3RcIj5cclxuICAgIDwvYXBwLWNvbnZlcnNhdGlvbi1pdGVtPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuei1tb2RhbCBbKG56VmlzaWJsZSldPVwic2hvd0RpYWxvZ1wiIG56VGl0bGU9XCLlj5HotbfkvJror51cIiBbbnpDb250ZW50XT1cImNvbnRlbnRcIlxyXG4gIChuek9uQ2FuY2VsKT1cImhhbmRsZUNhbmNlbCgpXCIgKG56T25Payk9XCJoYW5kbGVPaygpXCI+XHJcbjwvbnotbW9kYWw+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XHJcbiAgPG56LWZvcm0taXRlbT5cclxuICAgIDxuei1mb3JtLWxhYmVsIFtuelNwYW5dPVwiNlwiPueUqOaIt0lEPC9uei1mb3JtLWxhYmVsPlxyXG4gICAgPG56LWZvcm0tY29udHJvbCBbbnpTcGFuXT1cIjE0XCI+XHJcbiAgICAgIDxpbnB1dCBuei1pbnB1dCBbKG5nTW9kZWwpXT1cInVzZXJJRFwiPlxyXG4gICAgPC9uei1mb3JtLWNvbnRyb2w+XHJcbiAgPC9uei1mb3JtLWl0ZW0+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==