UNPKG

ngx-ice-tweet

Version:

tweeter component to show tweets by a hashtag given, it can be order by text, date, or user name

255 lines (246 loc) 23.7 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@angular/common/http'), require('rxjs'), require('rxjs/operators'), require('@angular/platform-browser'), require('@angular/platform-browser/animations'), require('@angular/forms'), require('@angular/material')) : typeof define === 'function' && define.amd ? define('ngx-ice-tweet', ['exports', '@angular/core', '@angular/common/http', 'rxjs', 'rxjs/operators', '@angular/platform-browser', '@angular/platform-browser/animations', '@angular/forms', '@angular/material'], factory) : (factory((global['ngx-ice-tweet'] = {}),global.ng.core,global.ng.common.http,global.rxjs,global.rxjs.operators,global.ng.platformBrowser,global.ng.platformBrowser.animations,global.ng.forms,global.ng.material)); }(this, (function (exports,i0,http,rxjs,operators,platformBrowser,animations,forms,material) { 'use strict'; /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var TweetService = /** @class */ (function () { function TweetService() { } TweetService.decorators = [ { type: i0.Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ TweetService.ctorParameters = function () { return []; }; /** @nocollapse */ TweetService.ngInjectableDef = i0.defineInjectable({ factory: function TweetService_Factory() { return new TweetService(); }, token: TweetService, providedIn: "root" }); return TweetService; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @type {?} */ var TweetConfig = { tokenUrl: 'https://api.twitter.com/oauth2/token', tweetSearchUrl: 'https://api.twitter.com/1.1/search/tweets.json' }; var TweetComponent = /** @class */ (function () { function TweetComponent(http$$1) { this.http = http$$1; this.errorMesage = new i0.EventEmitter(); this.filterBy = 'created_at'; this.filterOptions = ['created_at', 'text', 'user.name']; this._unsubscribeAll = new rxjs.Subject(); } /** * @return {?} */ TweetComponent.prototype.ngOnInit = /** * @return {?} */ function () { if (this.evalData()) { this.getToken(); } else { this.sendErrorMesage('No Public, Privite Key'); this.ngOnDestroy(); } }; /** * @return {?} */ TweetComponent.prototype.setFilterBy = /** * @return {?} */ function () { var _this = this; return this.tweets.sort(function (a, b) { return a[_this.filterBy] > b[_this.filterBy] ? 1 : a[_this.filterBy] === b[_this.filterBy] ? 0 : -1; }); }; /** * @private * @return {?} */ TweetComponent.prototype.evalData = /** * @private * @return {?} */ function () { return (this.keyPublic && this.keyPrivate && this.keyPublic !== null && this.keyPrivate !== null && this.keyPublic !== '' && this.keyPrivate !== ''); }; /** * @private * @return {?} */ TweetComponent.prototype.evaHash = /** * @private * @return {?} */ function () { return (this.hashTag && this.hashTag !== null && this.hashTag !== ''); }; /** * @private * @param {?} token * @return {?} */ TweetComponent.prototype.evalToken = /** * @private * @param {?} token * @return {?} */ function (token) { return (token.token_type && token.access_token && token.token_type !== null && token.access_token !== null && token.token_type !== '' && token.access_token !== ''); }; /** * @private * @return {?} */ TweetComponent.prototype.getToken = /** * @private * @return {?} */ function () { var _this = this; if (this.evaHash()) { /** @type {?} */ var basic = btoa(this.keyPublic + ":" + this.keyPrivate); /** @type {?} */ var headers = new http.HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': "Basic " + basic }); /** @type {?} */ var payload = new FormData(); payload.append('grant_type', 'client_credentials'); this.http.post(TweetConfig.tokenUrl, payload, { headers: headers }) .pipe(operators.takeUntil(this._unsubscribeAll)) .subscribe(function (token) { return _this.getTweetList(token); }, function (error) { return _this.sendErrorMesage(error); }); } else { this.sendErrorMesage('No HasgTag set For Searching'); } }; /** * @private * @param {?} token * @return {?} */ TweetComponent.prototype.getTweetList = /** * @private * @param {?} token * @return {?} */ function (token) { var _this = this; if (this.evalToken(token)) { /** @type {?} */ var headers = new http.HttpHeaders({ 'Authorization': token.token_type + " " + token.access_token }); /** @type {?} */ var params = new http.HttpParams().set('q', "%23" + this.hashTag); this.http.get(TweetConfig.tweetSearchUrl, { headers: headers, params: params }) .pipe(operators.takeUntil(this._unsubscribeAll)) .subscribe(function (_a) { var statuses = _a.statuses; return _this.tweets = ( /** @type {?} */(statuses)); }, function (error) { return _this.sendErrorMesage(error); }); } else { this.sendErrorMesage('Error Tweeter Token'); } }; /** * @private * @param {?} men * @return {?} */ TweetComponent.prototype.sendErrorMesage = /** * @private * @param {?} men * @return {?} */ function (men) { this.errorMesage.emit(men); }; /** * @return {?} */ TweetComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { this._unsubscribeAll.next(); this._unsubscribeAll.complete(); }; TweetComponent.decorators = [ { type: i0.Component, args: [{ selector: 'tweet', template: "<div class=\"container\" *ngIf=\"tweets && tweets.length > 0\">\n <div>\n <h4>filter by:</h4>\n <mat-form-field>\n <mat-select [(value)]=\"filterBy\">\n <mat-option *ngFor=\"let opt of filterOptions\" value=\"opt\">{{opt}}</mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n <mat-card\n *ngFor=\"let tt of setFilterBy()\"\n >\n <mat-card-header>\n <mat-card-title>{{tt.user.screen_name}}</mat-card-title>\n <mat-card-subtitle>@{{tt.user.name}}</mat-card-subtitle>\n </mat-card-header>\n <img matCardImage [src]=\"tt.user.profile_image_url\">\n <mat-card-content>\n {{tt.text}}\n </mat-card-content>\n <mat-card-actions align=\"start\">\n <!--<button mat-button (click)=\"onAction1\">Action1</button>-->\n </mat-card-actions>\n <mat-card-footer>\n\n </mat-card-footer>\n </mat-card>\n </div>", encapsulation: i0.ViewEncapsulation.Native, styles: ["\n .container {\n width: 100%;\n margin: 2rem;\n display: flex;\n flex-direction: column;\n }\n mat-card {\n margin-bottom: 2rem;\n flex: 1 1 100%;\n }"] }] } ]; /** @nocollapse */ TweetComponent.ctorParameters = function () { return [ { type: http.HttpClient } ]; }; TweetComponent.propDecorators = { keyPublic: [{ type: i0.Input }], keyPrivate: [{ type: i0.Input }], hashTag: [{ type: i0.Input }], errorMesage: [{ type: i0.Output }] }; return TweetComponent; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ var TweetModule = /** @class */ (function () { function TweetModule() { } TweetModule.decorators = [ { type: i0.NgModule, args: [{ declarations: [TweetComponent], imports: [ platformBrowser.BrowserModule, http.HttpClientModule, animations.BrowserAnimationsModule, material.MatCardModule, material.MatSelectModule, forms.FormsModule ], exports: [TweetComponent] },] } ]; return TweetModule; }()); /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ exports.TweetService = TweetService; exports.TweetComponent = TweetComponent; exports.TweetModule = TweetModule; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWljZS10d2VldC51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL25neC1pY2UtdHdlZXQvbGliL3R3ZWV0LnNlcnZpY2UudHMiLCJuZzovL25neC1pY2UtdHdlZXQvbGliL3R3ZWV0LmNvbXBvbmVudC50cyIsIm5nOi8vbmd4LWljZS10d2VldC9saWIvdHdlZXQubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVHdlZXRTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxufVxuIiwiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge3Rha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5jb25zdCBUd2VldENvbmZpZyA9IHtcbiAgdG9rZW5Vcmw6ICdodHRwczovL2FwaS50d2l0dGVyLmNvbS9vYXV0aDIvdG9rZW4nLFxuICB0d2VldFNlYXJjaFVybDogJ2h0dHBzOi8vYXBpLnR3aXR0ZXIuY29tLzEuMS9zZWFyY2gvdHdlZXRzLmpzb24nXG59O1xuXG5pbnRlcmZhY2UgVG9rZW4ge1xuICB0b2tlbl90eXBlOiBzdHJpbmc7XG4gIGFjY2Vzc190b2tlbjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVHdlZXRzIHtcbiAgY3JlYXRlZF9hdDogRGF0ZTtcbiAgaWQ6IG51bWJlcjtcbiAgaWRfc3RyOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgdXNlcjogYW55O1xuICBlbnRpdGllczogYW55O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0d2VldCcsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiICpuZ0lmPVwidHdlZXRzICYmIHR3ZWV0cy5sZW5ndGggPiAwXCI+XG4gICAgPGRpdj5cbiAgICAgIDxoND5maWx0ZXIgYnk6PC9oND5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zZWxlY3QgWyh2YWx1ZSldPVwiZmlsdGVyQnlcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIGZpbHRlck9wdGlvbnNcIiB2YWx1ZT1cIm9wdFwiPnt7b3B0fX08L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDxtYXQtY2FyZFxuICAgICpuZ0Zvcj1cImxldCB0dCBvZiBzZXRGaWx0ZXJCeSgpXCJcbiAgPlxuICAgIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICA8bWF0LWNhcmQtdGl0bGU+e3t0dC51c2VyLnNjcmVlbl9uYW1lfX08L21hdC1jYXJkLXRpdGxlPlxuICAgICAgPG1hdC1jYXJkLXN1YnRpdGxlPkB7e3R0LnVzZXIubmFtZX19PC9tYXQtY2FyZC1zdWJ0aXRsZT5cbiAgICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgICA8aW1nIG1hdENhcmRJbWFnZSBbc3JjXT1cInR0LnVzZXIucHJvZmlsZV9pbWFnZV91cmxcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgIHt7dHQudGV4dH19XG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDxtYXQtY2FyZC1hY3Rpb25zIGFsaWduPVwic3RhcnRcIj5cbiAgICAgIDwhLS08YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cIm9uQWN0aW9uMVwiPkFjdGlvbjE8L2J1dHRvbj4tLT5cbiAgICA8L21hdC1jYXJkLWFjdGlvbnM+XG4gICAgPG1hdC1jYXJkLWZvb3Rlcj5cblxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxuICA8L21hdC1jYXJkPlxuICA8L2Rpdj5gLFxuICBzdHlsZXM6IFtgXG4gICAgLmNvbnRhaW5lciB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG1hcmdpbjogMnJlbTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cbiAgbWF0LWNhcmQge1xuICAgIG1hcmdpbi1ib3R0b206IDJyZW07XG4gICAgZmxleDogMSAxIDEwMCU7XG4gIH1gXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTmF0aXZlXG59KVxuZXhwb3J0IGNsYXNzIFR3ZWV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBrZXlQdWJsaWM6IHN0cmluZztcbiAgQElucHV0KCkga2V5UHJpdmF0ZTogc3RyaW5nO1xuICBASW5wdXQoKSBoYXNoVGFnOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBlcnJvck1lc2FnZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBwcml2YXRlIF91bnN1YnNjcmliZUFsbDogU3ViamVjdDxhbnk+O1xuICB0d2VldHM6IFR3ZWV0c1tdO1xuICBmaWx0ZXJCeSA9ICdjcmVhdGVkX2F0JztcbiAgZmlsdGVyT3B0aW9ucyA9IFsnY3JlYXRlZF9hdCcsICd0ZXh0JywgJ3VzZXIubmFtZSddO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3QoKTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ldmFsRGF0YSgpKSB7XG4gICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VuZEVycm9yTWVzYWdlKCdObyBQdWJsaWMsIFByaXZpdGUgS2V5Jyk7XG4gICAgICB0aGlzLm5nT25EZXN0cm95KCk7XG4gICAgfVxuICB9XG4gIHNldEZpbHRlckJ5KCkge1xuICAgIHJldHVybiB0aGlzLnR3ZWV0cy5zb3J0KChhLCBiKSA9PiBhW3RoaXMuZmlsdGVyQnldID4gYlt0aGlzLmZpbHRlckJ5XSA/IDEgOiBhW3RoaXMuZmlsdGVyQnldID09PSBiW3RoaXMuZmlsdGVyQnldID8gMCA6IC0xKTtcbiAgfVxuICBwcml2YXRlIGV2YWxEYXRhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmtleVB1YmxpYyAmJiB0aGlzLmtleVByaXZhdGVcbiAgICAgICYmIHRoaXMua2V5UHVibGljICE9PSBudWxsICYmIHRoaXMua2V5UHJpdmF0ZSAhPT0gbnVsbFxuICAgICAgJiYgdGhpcy5rZXlQdWJsaWMgIT09ICcnICYmIHRoaXMua2V5UHJpdmF0ZSAhPT0gJydcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZXZhSGFzaCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5oYXNoVGFnXG4gICAgICAmJiB0aGlzLmhhc2hUYWcgIT09IG51bGxcbiAgICAgICYmIHRoaXMuaGFzaFRhZyAhPT0gJydcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZXZhbFRva2VuICh0b2tlbjogVG9rZW4pIHtcbiAgICByZXR1cm4gKFxuICAgICAgdG9rZW4udG9rZW5fdHlwZSAmJiB0b2tlbi5hY2Nlc3NfdG9rZW5cbiAgICAgICYmIHRva2VuLnRva2VuX3R5cGUgIT09IG51bGwgJiYgdG9rZW4uYWNjZXNzX3Rva2VuICE9PSBudWxsXG4gICAgICAmJiB0b2tlbi50b2tlbl90eXBlICE9PSAnJyAmJiB0b2tlbi5hY2Nlc3NfdG9rZW4gIT09ICcnXG4gICAgKTtcbiAgfVxuICBwcml2YXRlIGdldFRva2VuKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2YUhhc2goKSkge1xuICAgICAgY29uc3QgYmFzaWMgPSBidG9hKGAke3RoaXMua2V5UHVibGljfToke3RoaXMua2V5UHJpdmF0ZX1gKTtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAnQ29udGVudC1UeXBlJyAgOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgJ0F1dGhvcml6YXRpb24nICAgOiBgQmFzaWMgICR7YmFzaWN9YFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwYXlsb2FkID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBwYXlsb2FkLmFwcGVuZCgnZ3JhbnRfdHlwZScsICdjbGllbnRfY3JlZGVudGlhbHMnKTtcbiAgICAgIHRoaXMuaHR0cC5wb3N0PFRva2VuPihUd2VldENvbmZpZy50b2tlblVybCwgcGF5bG9hZCwgeyBoZWFkZXJzOiBoZWFkZXJzfSlcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSlcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICB0b2tlbiA9PiB0aGlzLmdldFR3ZWV0TGlzdCh0b2tlbiksXG4gICAgICAgICAgZXJyb3IgPT4gdGhpcy5zZW5kRXJyb3JNZXNhZ2UoZXJyb3IpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VuZEVycm9yTWVzYWdlKCdObyBIYXNnVGFnIHNldCBGb3IgU2VhcmNoaW5nJyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgZ2V0VHdlZXRMaXN0KHRva2VuOiBUb2tlbikge1xuICAgIGlmICh0aGlzLmV2YWxUb2tlbih0b2tlbikpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAnQXV0aG9yaXphdGlvbicgICA6IGAke3Rva2VuLnRva2VuX3R5cGV9ICR7dG9rZW4uYWNjZXNzX3Rva2VufWBcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ3EnLCBgJTIzJHt0aGlzLmhhc2hUYWd9YCk7XG4gICAgICB0aGlzLmh0dHAuZ2V0PGFueT4oVHdlZXRDb25maWcudHdlZXRTZWFyY2hVcmwsIHtoZWFkZXJzOiBoZWFkZXJzLCBwYXJhbXM6IHBhcmFtc30pXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl91bnN1YnNjcmliZUFsbCkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKHtzdGF0dXNlc30pID0+IHRoaXMudHdlZXRzID0gPFR3ZWV0c1tdPnN0YXR1c2VzLFxuICAgICAgICAgIGVycm9yID0+IHRoaXMuc2VuZEVycm9yTWVzYWdlKGVycm9yKVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbmRFcnJvck1lc2FnZSgnRXJyb3IgVHdlZXRlciBUb2tlbicpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIHNlbmRFcnJvck1lc2FnZShtZW46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZXJyb3JNZXNhZ2UuZW1pdChtZW4pO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLm5leHQoKTtcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHdlZXRDb21wb25lbnQgfSBmcm9tICcuL3R3ZWV0LmNvbXBvbmVudCc7XG5pbXBvcnQge0Jyb3dzZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtIdHRwQ2xpZW50TW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0Jyb3dzZXJBbmltYXRpb25zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtNYXRDYXJkTW9kdWxlLCBNYXRTZWxlY3RNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbVHdlZXRDb21wb25lbnRdLFxuICBpbXBvcnRzOiBbXG4gICAgQnJvd3Nlck1vZHVsZSxcbiAgICBIdHRwQ2xpZW50TW9kdWxlLFxuICAgIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlLFxuICAgIE1hdENhcmRNb2R1bGUsXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtUd2VldENvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgVHdlZXRNb2R1bGUgeyB9XG4iXSwibmFtZXMiOlsiSW5qZWN0YWJsZSIsImh0dHAiLCJFdmVudEVtaXR0ZXIiLCJTdWJqZWN0IiwiSHR0cEhlYWRlcnMiLCJ0YWtlVW50aWwiLCJIdHRwUGFyYW1zIiwiQ29tcG9uZW50IiwiVmlld0VuY2Fwc3VsYXRpb24iLCJIdHRwQ2xpZW50IiwiSW5wdXQiLCJPdXRwdXQiLCJOZ01vZHVsZSIsIkJyb3dzZXJNb2R1bGUiLCJIdHRwQ2xpZW50TW9kdWxlIiwiQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUiLCJNYXRDYXJkTW9kdWxlIiwiTWF0U2VsZWN0TW9kdWxlIiwiRm9ybXNNb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtRQU9FO1NBQWlCOztvQkFMbEJBLGFBQVUsU0FBQzt3QkFDVixVQUFVLEVBQUUsTUFBTTtxQkFDbkI7Ozs7OzJCQUpEO0tBRUE7Ozs7OztBQ0ZBO1FBS00sV0FBVyxHQUFHO1FBQ2xCLFFBQVEsRUFBRSxzQ0FBc0M7UUFDaEQsY0FBYyxFQUFFLGdEQUFnRDtLQUNqRTs7UUFxRUMsd0JBQW9CQyxPQUFnQjtZQUFoQixTQUFJLEdBQUpBLE9BQUksQ0FBWTtZQU4xQixnQkFBVyxHQUFHLElBQUlDLGVBQVksRUFBVSxD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