UNPKG

ng-cw-v12

Version:

Angular UI component library

130 lines 19.5 kB
import { Component, Input } from '@angular/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common"; export class SparklesTextComponent { constructor() { /** 展示的文本内容 */ this._text = ''; /** 闪烁点的数量 */ this.ncCount = 10; /** 闪烁点的颜色数组 */ this.ncColors = ['#9E7AFF', '#FE8BBB', '#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4']; /** 闪烁循环时间(秒) */ this.ncDuration = 0.8; /** 闪烁点的最大尺寸 */ this.ncSize = 21; this.sparkles = []; } set ncText(value) { this._text = value; this.cleanup(); setTimeout(() => { this.initializeSparkles(); this.startAnimation(); }); } get ncText() { return this._text; } ngOnInit() { } ngOnDestroy() { this.cleanup(); } initializeSparkles() { this.sparkles = Array.from({ length: this.ncCount }, () => this.generateSparkle()); } generateSparkle() { const x = `${Math.random() * 100}%`; const y = `${Math.random() * 100}%`; const color = this.ncColors[Math.floor(Math.random() * this.ncColors.length)]; const delay = Math.random() * 2; const scale = Math.random() * 1 + 0.3; const lifespan = Math.random() * 10 + 5; const id = `${x}-${y}-${Date.now()}-${Math.random()}`; const opacity = 0; const rotation = 75; const scaleValue = 0; return { id, x, y, color, delay, scale, lifespan, opacity, rotation, scaleValue }; } startAnimation() { // 更新闪烁点生命周期 this.intervalId = window.setInterval(() => { this.sparkles = this.sparkles.map(sparkle => { if (sparkle.lifespan <= 0) { return this.generateSparkle(); } else { return Object.assign(Object.assign({}, sparkle), { lifespan: sparkle.lifespan - 0.1 }); } }); }, 100); // 动画循环 - 模拟Framer Motion的关键帧动画 const animate = () => { this.sparkles = this.sparkles.map(sparkle => { const time = (Date.now() * 0.001 + sparkle.delay) % this.ncDuration; // 使用可配置的循环时间 const progress = time / this.ncDuration; // 模拟关键帧动画 [0, 1, 0] let opacity; let scaleValue; let rotation; if (progress <= 0.5) { // 前半段:0 -> 1 const t = progress * 2; opacity = t; scaleValue = t * sparkle.scale; rotation = 75 + (120 - 75) * t; } else { // 后半段:1 -> 0 const t = (progress - 0.5) * 2; opacity = 1 - t; scaleValue = (1 - t) * sparkle.scale; rotation = 120 + (150 - 120) * t; } return Object.assign(Object.assign({}, sparkle), { opacity, rotation, scaleValue }); }); this.animationFrameId = requestAnimationFrame(animate); }; animate(); } cleanup() { if (this.intervalId) { clearInterval(this.intervalId); } if (this.animationFrameId) { cancelAnimationFrame(this.animationFrameId); } } getSparkleStyle(sparkle) { return { left: sparkle.x, top: sparkle.y, opacity: sparkle.opacity, transform: `scale(${sparkle.scaleValue}) rotate(${sparkle.rotation}deg)` }; } trackBySparkleId(index, sparkle) { return sparkle.id; } } SparklesTextComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: SparklesTextComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); SparklesTextComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.1.5", type: SparklesTextComponent, selector: "nc-sparkles-text", inputs: { ncText: "ncText", ncCount: "ncCount", ncColors: "ncColors", ncDuration: "ncDuration", ncSize: "ncSize" }, ngImport: i0, template: "<div class=\"sparkles-text\">\n <span class=\"sparkles-container\">\n <!-- \u95EA\u70C1\u70B9 -->\n <svg *ngFor=\"let sparkle of sparkles; trackBy: trackBySparkleId\" [ngStyle]=\"getSparkleStyle(sparkle)\"\n class=\"sparkle-svg\" [attr.width]=\"ncSize\" [attr.height]=\"ncSize\" viewBox=\"0 0 21 21\">\n <path\n d=\"M9.82531 0.843845C10.0553 0.215178 10.9446 0.215178 11.1746 0.843845L11.8618 2.72026C12.4006 4.19229 12.3916 6.39157 13.5 7.5C14.6084 8.60843 16.8077 8.59935 18.2797 9.13822L20.1561 9.82534C20.7858 10.0553 20.7858 10.9447 20.1561 11.1747L18.2797 11.8618C16.8077 12.4007 14.6084 12.3916 13.5 13.5C12.3916 14.6084 12.4006 16.8077 11.8618 18.2798L11.1746 20.1562C10.9446 20.7858 10.0553 20.7858 9.82531 20.1562L9.13819 18.2798C8.59932 16.8077 8.60843 14.6084 7.5 13.5C6.39157 12.3916 4.19225 12.4007 2.72023 11.8618L0.843814 11.1747C0.215148 10.9447 0.215148 10.0553 0.843814 9.82534L2.72023 9.13822C4.19225 8.59935 6.39157 8.60843 7.5 7.5C8.60843 6.39157 8.59932 4.19229 9.13819 2.72026L9.82531 0.843845Z\"\n [attr.fill]=\"sparkle.color\" />\n </svg>\n <!-- \u6587\u672C\u5185\u5BB9 -->\n <span class=\"sparkles-content\">{{ncText}}</span>\n </span>\n</div>", styles: [".sparkles-text{position:relative;display:inline-block}.sparkles-text .sparkles-container{position:relative;display:inline-block}.sparkles-text .sparkles-container .sparkle-svg{position:absolute;pointer-events:none;z-index:20}.sparkles-text .sparkles-container .sparkles-content{position:relative;z-index:10}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.5", ngImport: i0, type: SparklesTextComponent, decorators: [{ type: Component, args: [{ selector: 'nc-sparkles-text', templateUrl: './sparkles-text.component.html', styleUrls: ['./sparkles-text.component.less'] }] }], ctorParameters: function () { return []; }, propDecorators: { ncText: [{ type: Input }], ncCount: [{ type: Input }], ncColors: [{ type: Input }], ncDuration: [{ type: Input }], ncSize: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcmtsZXMtdGV4dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NwYXJrbGVzLXRleHQvc3BhcmtsZXMtdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NwYXJrbGVzLXRleHQvc3BhcmtsZXMtdGV4dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQzs7O0FBb0JwRSxNQUFNLE9BQU8scUJBQXFCO0lBNEJoQztRQTNCQSxjQUFjO1FBQ04sVUFBSyxHQUFXLEVBQUUsQ0FBQztRQWEzQixhQUFhO1FBQ0osWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUM5QixlQUFlO1FBQ04sYUFBUSxHQUFhLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNqRyxnQkFBZ0I7UUFDUCxlQUFVLEdBQVcsR0FBRyxDQUFDO1FBQ2xDLGVBQWU7UUFDTixXQUFNLEdBQVcsRUFBRSxDQUFDO1FBRTdCLGFBQVEsR0FBYyxFQUFFLENBQUM7SUFJVCxDQUFDO0lBekJqQixJQUNJLE1BQU0sQ0FBQyxLQUFhO1FBQ3RCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFnQkQsUUFBUSxLQUFVLENB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QU8sQ0FBQyxVQUFVLFlBQVksT0FBTyxDQUFDLFFBQVEsTUFBTTtTQUN6RSxDQUFDO0lBQ0osQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWEsRUFBRSxPQUFnQjtRQUM5QyxPQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUM7SUFDcEIsQ0FBQzs7a0hBekhVLHFCQUFxQjtzR0FBckIscUJBQXFCLDRLQ3BCbEMsa3ZDQVlNOzJGRFFPLHFCQUFxQjtrQkFMakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixXQUFXLEVBQUUsZ0NBQWdDO29CQUM3QyxTQUFTLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztpQkFDOUM7MEVBS0ssTUFBTTtzQkFEVCxLQUFLO2dCQWFHLE9BQU87c0JBQWYsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW50ZXJmYWNlIFNwYXJrbGUge1xuICBpZDogc3RyaW5nO1xuICB4OiBzdHJpbmc7XG4gIHk6IHN0cmluZztcbiAgY29sb3I6IHN0cmluZztcbiAgZGVsYXk6IG51bWJlcjtcbiAgc2NhbGU6IG51bWJlcjtcbiAgbGlmZXNwYW46IG51bWJlcjtcbiAgb3BhY2l0eTogbnVtYmVyO1xuICByb3RhdGlvbjogbnVtYmVyO1xuICBzY2FsZVZhbHVlOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25jLXNwYXJrbGVzLXRleHQnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3BhcmtsZXMtdGV4dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NwYXJrbGVzLXRleHQuY29tcG9uZW50Lmxlc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBTcGFya2xlc1RleHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiDlsZXnpLrnmoTmlofmnKzlhoXlrrkgKi9cbiAgcHJpdmF0ZSBfdGV4dDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpXG4gIHNldCBuY1RleHQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3RleHQgPSB2YWx1ZTtcbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVNwYXJrbGVzKCk7XG4gICAgICB0aGlzLnN0YXJ0QW5pbWF0aW9uKCk7XG4gICAgfSk7XG4gIH1cbiAgZ2V0IG5jVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90ZXh0O1xuICB9XG4gIC8qKiDpl6rng4HngrnnmoTmlbDph48gKi9cbiAgQElucHV0KCkgbmNDb3VudDogbnVtYmVyID0gMTA7XG4gIC8qKiDpl6rng4HngrnnmoTpopzoibLmlbDnu4QgKi9cbiAgQElucHV0KCkgbmNDb2xvcnM6IHN0cmluZ1tdID0gWycjOUU3QUZGJywgJyNGRThCQkInLCAnI0ZGNkI2QicsICcjNEVDREM0JywgJyM0NUI3RDEnLCAnIzk2Q0VCNCddO1xuICAvKiog6Zeq54OB5b6q546v5pe26Ze077yI56eS77yJICovXG4gIEBJbnB1dCgpIG5jRHVyYXRpb246IG51bWJlciA9IDAuODtcbiAgLyoqIOmXqueDgeeCueeahOacgOWkp+WwuuWvuCAqL1xuICBASW5wdXQoKSBuY1NpemU6IG51bWJlciA9IDIxO1xuXG4gIHNwYXJrbGVzOiBTcGFya2xlW10gPSBbXTtcbiAgcHJpdmF0ZSBpbnRlcnZhbElkPzogbnVtYmVyO1xuICBwcml2YXRlIGFuaW1hdGlvbkZyYW1lSWQ/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVTcGFya2xlcygpOiB2b2lkIHtcbiAgICB0aGlzLnNwYXJrbGVzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogdGhpcy5uY0NvdW50IH0sICgpID0+IHRoaXMuZ2VuZXJhdGVTcGFya2xlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVNwYXJrbGUoKTogU3BhcmtsZSB7XG4gICAgY29uc3QgeCA9IGAke01hdGgucmFuZG9tKCkgKiAxMDB9JWA7XG4gICAgY29uc3QgeSA9IGAke01hdGgucmFuZG9tKCkgKiAxMDB9JWA7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLm5jQ29sb3JzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHRoaXMubmNDb2xvcnMubGVuZ3RoKV07XG4gICAgY29uc3QgZGVsYXkgPSBNYXRoLnJhbmRvbSgpICogMjtcbiAgICBjb25zdCBzY2FsZSA9IE1hdGgucmFuZG9tKCkgKiAxICsgMC4zO1xuICAgIGNvbnN0IGxpZmVzcGFuID0gTWF0aC5yYW5kb20oKSAqIDEwICsgNTtcbiAgICBjb25zdCBpZCA9IGAke3h9LSR7eX0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YDtcbiAgICBjb25zdCBvcGFjaXR5ID0gMDtcbiAgICBjb25zdCByb3RhdGlvbiA9IDc1O1xuICAgIGNvbnN0IHNjYWxlVmFsdWUgPSAwO1xuXG4gICAgcmV0dXJuIHsgaWQsIHgsIHksIGNvbG9yLCBkZWxheSwgc2NhbGUsIGxpZmVzcGFuLCBvcGFjaXR5LCByb3RhdGlvbiwgc2NhbGVWYWx1ZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydEFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICAvLyDmm7TmlrDpl6rng4HngrnnlJ/lkb3lkajmnJ9cbiAgICB0aGlzLmludGVydmFsSWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5zcGFya2xlcyA9IHRoaXMuc3BhcmtsZXMubWFwKHNwYXJrbGUgPT4ge1xuICAgICAgICBpZiAoc3BhcmtsZS5saWZlc3BhbiA8PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2VuZXJhdGVTcGFya2xlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4uc3BhcmtsZSwgbGlmZXNwYW46IHNwYXJrbGUubGlmZXNwYW4gLSAwLjEgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgMTAwKTtcblxuICAgIC8vIOWKqOeUu+W+queOryAtIOaooeaLn0ZyYW1lciBNb3Rpb27nmoTlhbPplK7luKfliqjnlLtcbiAgICBjb25zdCBhbmltYXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5zcGFya2xlcyA9IHRoaXMuc3BhcmtsZXMubWFwKHNwYXJrbGUgPT4ge1xuICAgICAgICBjb25zdCB0aW1lID0gKERhdGUubm93KCkgKiAwLjAwMSArIHNwYXJrbGUuZGVsYXkpICUgdGhpcy5uY0R1cmF0aW9uOyAvLyDkvb/nlKjlj6/phY3nva7nmoTlvqrnjq/ml7bpl7RcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSB0aW1lIC8gdGhpcy5uY0R1cmF0aW9uO1xuXG4gICAgICAgIC8vIOaooeaLn+WFs+mUruW4p+WKqOeUuyBbMCwgMSwgMF1cbiAgICAgICAgbGV0IG9wYWNpdHk6IG51bWJlcjtcbiAgICAgICAgbGV0IHNjYWxlVmFsdWU6IG51bWJlcjtcbiAgICAgICAgbGV0IHJvdGF0aW9uOiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHByb2dyZXNzIDw9IDAuNSkge1xuICAgICAgICAgIC8vIOWJjeWNiuaute+8mjAgLT4gMVxuICAgICAgICAgIGNvbnN0IHQgPSBwcm9ncmVzcyAqIDI7XG4gICAgICAgICAgb3BhY2l0eSA9IHQ7XG4gICAgICAgICAgc2NhbGVWYWx1ZSA9IHQgKiBzcGFya2xlLnNjYWxlO1xuICAgICAgICAgIHJvdGF0aW9uID0gNzUgKyAoMTIwIC0gNzUpICogdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyDlkI7ljYrmrrXvvJoxIC0+IDBcbiAgICAgICAgICBjb25zdCB0ID0gKHByb2dyZXNzIC0gMC41KSAqIDI7XG4gICAgICAgICAgb3BhY2l0eSA9IDEgLSB0O1xuICAgICAgICAgIHNjYWxlVmFsdWUgPSAoMSAtIHQpICogc3BhcmtsZS5zY2FsZTtcbiAgICAgICAgICByb3RhdGlvbiA9IDEyMCArICgxNTAgLSAxMjApICogdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IC4uLnNwYXJrbGUsIG9wYWNpdHksIHJvdGF0aW9uLCBzY2FsZVZhbHVlIH07XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xuICAgIH07XG5cbiAgICBhbmltYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW50ZXJ2YWxJZCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5hbmltYXRpb25GcmFtZUlkKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGlvbkZyYW1lSWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldFNwYXJrbGVTdHlsZShzcGFya2xlOiBTcGFya2xlKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgbGVmdDogc3BhcmtsZS54LFxuICAgICAgdG9wOiBzcGFya2xlLnksXG4gICAgICBvcGFjaXR5OiBzcGFya2xlLm9wYWNpdHksXG4gICAgICB0cmFuc2Zvcm06IGBzY2FsZSgke3NwYXJrbGUuc2NhbGVWYWx1ZX0pIHJvdGF0ZSgke3NwYXJrbGUucm90YXRpb259ZGVnKWBcbiAgICB9O1xuICB9XG5cbiAgdHJhY2tCeVNwYXJrbGVJZChpbmRleDogbnVtYmVyLCBzcGFya2xlOiBTcGFya2xlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3BhcmtsZS5pZDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNwYXJrbGVzLXRleHRcIj5cbiAgICA8c3BhbiBjbGFzcz1cInNwYXJrbGVzLWNvbnRhaW5lclwiPlxuICAgICAgICA8IS0tIOmXqueDgeeCuSAtLT5cbiAgICAgICAgPHN2ZyAqbmdGb3I9XCJsZXQgc3BhcmtsZSBvZiBzcGFya2xlczsgdHJhY2tCeTogdHJhY2tCeVNwYXJrbGVJZFwiIFtuZ1N0eWxlXT1cImdldFNwYXJrbGVTdHlsZShzcGFya2xlKVwiXG4gICAgICAgICAgICBjbGFzcz1cInNwYXJrbGUtc3ZnXCIgW2F0dHIud2lkdGhdPVwibmNTaXplXCIgW2F0dHIuaGVpZ2h0XT1cIm5jU2l6ZVwiIHZpZXdCb3g9XCIwIDAgMjEgMjFcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD1cIk05LjgyNTMxIDAuODQzODQ1QzEwLjA1NTMgMC4yMTUxNzggMTAuOTQ0NiAwLjIxNTE3OCAxMS4xNzQ2IDAuODQzODQ1TDExLjg2MTggMi43MjAyNkMxMi40MDA2IDQuMTkyMjkgMTIuMzkxNiA2LjM5MTU3IDEzLjUgNy41QzE0LjYwODQgOC42MDg0MyAxNi44MDc3IDguNTk5MzUgMTguMjc5NyA5LjEzODIyTDIwLjE1NjEgOS44MjUzNEMyMC43ODU4IDEwLjA1NTMgMjAuNzg1OCAxMC45NDQ3IDIwLjE1NjEgMTEuMTc0N0wxOC4yNzk3IDExLjg2MThDMTYuODA3NyAxMi40MDA3IDE0LjYwODQgMTIuMzkxNiAxMy41IDEzLjVDMTIuMzkxNiAxNC42MDg0IDEyLjQwMDYgMTYuODA3NyAxMS44NjE4IDE4LjI3OThMMTEuMTc0NiAyMC4xNTYyQzEwLjk0NDYgMjAuNzg1OCAxMC4wNTUzIDIwLjc4NTggOS44MjUzMSAyMC4xNTYyTDkuMTM4MTkgMTguMjc5OEM4LjU5OTMyIDE2LjgwNzcgOC42MDg0MyAxNC42MDg0IDcuNSAxMy41QzYuMzkxNTcgMTIuMzkxNiA0LjE5MjI1IDEyLjQwMDcgMi43MjAyMyAxMS44NjE4TDAuODQzODE0IDExLjE3NDdDMC4yMTUxNDggMTAuOTQ0NyAwLjIxNTE0OCAxMC4wNTUzIDAuODQzODE0IDkuODI1MzRMMi43MjAyMyA5LjEzODIyQzQuMTkyMjUgOC41OTkzNSA2LjM5MTU3IDguNjA4NDMgNy41IDcuNUM4LjYwODQzIDYuMzkxNTcgOC41OTkzMiA0LjE5MjI5IDkuMTM4MTkgMi43MjAyNkw5LjgyNTMxIDAuODQzODQ1WlwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZmlsbF09XCJzcGFya2xlLmNvbG9yXCIgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICAgIDwhLS0g5paH5pys5YaF5a65IC0tPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNwYXJrbGVzLWNvbnRlbnRcIj57e25jVGV4dH19PC9zcGFuPlxuICAgIDwvc3Bhbj5cbjwvZGl2PiJdfQ==