ng-gpt
Version:
A Angular implementation of the google GPT API.
185 lines • 23.1 kB
JavaScript
import { isPlatformBrowser } from '@angular/common';
import { Directive, EventEmitter, Inject, Input, Optional, Output, PLATFORM_ID, } from '@angular/core';
import { GPT_CONFIG } from './gpt.config';
import * as i0 from "@angular/core";
import * as i1 from "./ng-gpt.service";
import * as i2 from "./services";
import * as i3 from "./services/gpt-idGenerator.service";
import * as i4 from "@angular/router";
import * as i5 from "./gpt.config";
export class GptRefreshEvent {
}
export class NgGptAdDirective {
constructor(platformID, elementRef, gpt, gptRefresh, gptIDGenerator, config, router) {
this.platformID = platformID;
this.elementRef = elementRef;
this.gpt = gpt;
this.gptRefresh = gptRefresh;
this.gptIDGenerator = gptIDGenerator;
this.config = config;
this.sizes = 'fluid';
this.sizeMapping = [];
this.targetingArguments = {};
this.afterRefresh = new EventEmitter();
this.scripts = [];
this.exclusions = [];
if (isPlatformBrowser(this.platformID)) {
this.gptRefresh.refreshEvent.subscribe((slot) => {
if (slot === this.slot) {
this.afterRefresh.emit({ type: 'refresh', slot: slot });
}
});
if (router) {
this.onSameNavigation = router.events.pipe().subscribe((event) => {
if (this.slot &&
!this.refresh &&
this.config.onSameNavigation === 'refresh') {
this.refreshContent.call(this);
}
});
}
}
}
ngOnInit() {
this.checkRequiredFields(this.adUnit, 'adUnit');
if (isPlatformBrowser(this.platformID) && !this.id) {
this.gptIDGenerator.gptIDGenerator(this.elementRef.nativeElement);
}
}
ngAfterViewInit() {
if (isPlatformBrowser(this.platformID)) {
this.gpt.defineTask(() => {
this.defineSlot();
});
}
}
ngOnDestroy() {
if (this.slot) {
googletag.destroySlots([this.slot]);
}
if (this.onSameNavigation) {
this.onSameNavigation.unsubscribe();
}
}
setSizeMapping(slot) {
const ad = this.getState();
if (ad.sizeMapping.length === 0) {
return;
}
const sizeMapping = googletag.sizeMapping();
ad.sizeMapping.forEach((mapping) => {
sizeMapping.addSize(mapping.viewport, mapping.sizes);
});
slot.defineSizeMapping(sizeMapping.build());
}
defineSlot() {
const ad = this.getState(), element = this.elementRef.nativeElement;
this.slot = googletag.defineSlot(ad.adUnit, ad.sizes, element.id);
if (this.forceSafeFrame !== undefined &&
ad.forceSafeFrame === !this.config.forceSafeFrame) {
this.slot.setForceSafeFrame(ad.forceSafeFrame);
}
// if (ad.clickUrl) {
// this.slot.setClickUrl(ad.clickUrl);
// }
if (ad.collapseEmptyDivs) {
this.slot.setCollapseEmptyDiv(true, true);
}
if (ad.safeFrameConfig) {
this.slot.setSafeFrameConfig(ad.safeFrameConfig);
}
googletag.pubads().addEventListener('slotRenderEnded', (event) => {
if (event.slot === this.slot) {
this.afterRefresh.emit({
type: 'renderEnded',
slot: this.slot,
data: event,
});
}
});
this.setSizeMapping(this.slot);
Object.keys(ad.targetingArguments).forEach((arg) => {
this.slot.setTargeting(arg, ad.targetingArguments[arg]);
});
ad.exclusions.forEach((exclusion) => {
this.slot.setCategoryExclusion(exclusion);
});
ad.scripts.forEach((script) => {
script(this.slot);
});
if (this.config.enableVideoAds) {
this.slot.addService(googletag.companionAds());
}
this.slot.addService(googletag.pubads());
this.refreshContent();
}
refreshContent() {
this.gptRefresh.slotRefresh(this.slot, this.refresh, true).then((slot) => {
this.afterRefresh.emit({ type: 'init', slot: slot });
});
}
get isHidden() {
return this.gptRefresh.hiddenCheck(this.elementRef.nativeElement);
}
getState() {
return Object.freeze({
sizes: typeof this.sizes === 'string' ? [this.sizes] : this.sizes,
sizeMapping: this.sizeMapping,
targetingArguments: this.targetingArguments,
exclusions: this.exclusions,
adUnit: this.adUnit,
forceSafeFrame: this.forceSafeFrame === true,
safeFrameConfig: this.safeFrameConfig,
// clickUrl: this.clickUrl,
refresh: this.refresh,
scripts: this.scripts,
collapseEmptyDivs: this.collapseEmptyDivs === true,
});
}
checkRequiredFields(input, name) {
if (input === null) {
throw new Error(`Attribute ${name} is required`);
}
}
addExclusion(exclusion) {
this.exclusions.push(exclusion);
}
addScript(script) {
this.scripts.push(script);
}
}
NgGptAdDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: NgGptAdDirective, deps: [{ token: PLATFORM_ID }, { token: i0.ElementRef }, { token: i1.NgGptService }, { token: i2.GptRefreshService }, { token: i3.GptIDGeneratorService }, { token: GPT_CONFIG }, { token: i4.Router, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
NgGptAdDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.2.4", type: NgGptAdDirective, selector: "gpt-ad", inputs: { id: "id", adUnit: "adUnit", sizes: "sizes", sizeMapping: "sizeMapping", forceSafeFrame: "forceSafeFrame", safeFrameConfig: "safeFrameConfig", refresh: "refresh", collapseEmptyDivs: "collapseEmptyDivs", targetingArguments: "targetingArguments" }, outputs: { afterRefresh: "afterRefresh" }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: NgGptAdDirective, decorators: [{
type: Directive,
args: [{ selector: 'gpt-ad' }]
}], ctorParameters: function () { return [{ type: Object, decorators: [{
type: Inject,
args: [PLATFORM_ID]
}] }, { type: i0.ElementRef }, { type: i1.NgGptService }, { type: i2.GptRefreshService }, { type: i3.GptIDGeneratorService }, { type: i5.GptConfig, decorators: [{
type: Inject,
args: [GPT_CONFIG]
}] }, { type: i4.Router, decorators: [{
type: Optional
}] }]; }, propDecorators: { id: [{
type: Input
}], adUnit: [{
type: Input
}], sizes: [{
type: Input
}], sizeMapping: [{
type: Input
}], forceSafeFrame: [{
type: Input
}], safeFrameConfig: [{
type: Input
}], refresh: [{
type: Input
}], collapseEmptyDivs: [{
type: Input
}], targetingArguments: [{
type: Input
}], afterRefresh: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZ3B0LWFkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWdwdC9zcmMvbGliL25nLWdwdC1hZC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQWEsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7Ozs7O0FBUXJELE1BQU0sT0FBTyxlQUFlO0NBSTNCO0FBWUQsTUFBTSxPQUFPLGdCQUFnQjtJQWtCM0IsWUFDK0IsVUFBa0IsRUFDdkMsVUFBc0IsRUFDdEIsR0FBaUIsRUFDakIsVUFBNkIsRUFDN0IsY0FBcUMsRUFDakIsTUFBaUIsRUFDakMsTUFBYztRQU5HLGVBQVUsR0FBVixVQUFVLENBQVE7UUFDdkMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFjO1FBQ2pCLGVBQVUsR0FBVixVQUFVLENBQW1CO1FBQzdCLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUNqQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBckJ0QyxVQUFLLEdBQWdDLE9BQU8sQ0FBQztRQUM3QyxnQkFBVyxHQUFrQixFQUFFLENBQUM7UUFLaEMsdUJBQWtCLEdBQXVCLEVBQUUsQ0FBQztRQUUzQyxpQkFBWSxHQUFrQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSW5FLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFDcEIsZUFBVSxHQUFVLEVBQUUsQ0FBQztRQVc3QixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVks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QUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciwgTmF2aWdhdGlvbkVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdwdENvbmZpZywgR1BUX0NPTkZJRyB9IGZyb20gJy4vZ3B0LmNvbmZpZyc7XG5pbXBvcnQgeyBHb29nbGV0YWcsIFNhZmVGcmFtZUNvbmZpZywgU2xvdCB9IGZyb20gJy4vbmctZ3B0LWdvb2dsZXRhZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTmdHcHRTZXJ2aWNlIH0gZnJvbSAnLi9uZy1ncHQuc2VydmljZSc7XG5pbXBvcnQgeyBHcHRSZWZyZXNoU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMnO1xuaW1wb3J0IHsgR3B0SURHZW5lcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9ncHQtaWRHZW5lcmF0b3Iuc2VydmljZSc7XG5cbmRlY2xhcmUgdmFyIGdvb2dsZXRhZzogR29vZ2xldGFnO1xuXG5leHBvcnQgY2xhc3MgR3B0UmVmcmVzaEV2ZW50IHtcbiAgdHlwZTogc3RyaW5nO1xuICBzbG90OiBhbnk7XG4gIGRhdGE/OiBhbnk7XG59XG5cbmludGVyZmFjZSBTaXplTWFwcGluZyB7XG4gIHZpZXdwb3J0OiBbbnVtYmVyLCBudW1iZXJdO1xuICBzaXplczogW251bWJlciwgbnVtYmVyXVtdO1xufVxuXG5pbnRlcmZhY2UgVGFyZ2V0aW5nQXJndW1lbnRzIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdncHQtYWQnIH0pXG5leHBvcnQgY2xhc3MgTmdHcHRBZERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgaWQ6IHN0cmluZztcbiAgQElucHV0KCkgYWRVbml0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNpemVzOiBbbnVtYmVyLCBudW1iZXJdW10gfCBzdHJpbmcgPSAnZmx1aWQnO1xuICBASW5wdXQoKSBzaXplTWFwcGluZzogU2l6ZU1hcHBpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBmb3JjZVNhZmVGcmFtZTogYm9vbGVhbjtcbiAgQElucHV0KCkgc2FmZUZyYW1lQ29uZmlnOiBTYWZlRnJhbWVDb25maWc7XG4gIEBJbnB1dCgpIHJlZnJlc2g6IG51bWJlcjtcbiAgQElucHV0KCkgY29sbGFwc2VFbXB0eURpdnM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHRhcmdldGluZ0FyZ3VtZW50czogVGFyZ2V0aW5nQXJndW1lbnRzID0ge307XG5cbiAgQE91dHB1dCgpIGFmdGVyUmVmcmVzaDogRXZlbnRFbWl0dGVyPEdwdFJlZnJlc2hFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSBzbG90OiBTbG90O1xuICBwcml2YXRlIG9uU2FtZU5hdmlnYXRpb247XG4gIHByaXZhdGUgc2NyaXB0czogYW55W10gPSBbXTtcbiAgcHJpdmF0ZSBleGNsdXNpb25zOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JRDogT2JqZWN0LFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGdwdDogTmdHcHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ3B0UmVmcmVzaDogR3B0UmVmcmVzaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncHRJREdlbmVyYXRvcjogR3B0SURHZW5lcmF0b3JTZXJ2aWNlLFxuICAgIEBJbmplY3QoR1BUX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IEdwdENvbmZpZyxcbiAgICBAT3B0aW9uYWwoKSByb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlEKSkge1xuICAgICAgdGhpcy5ncHRSZWZyZXNoLnJlZnJlc2hFdmVudC5zdWJzY3JpYmUoKHNsb3QpID0+IHtcbiAgICAgICAgaWYgKHNsb3QgPT09IHRoaXMuc2xvdCkge1xuICAgICAgICAgIHRoaXMuYWZ0ZXJSZWZyZXNoLmVtaXQoeyB0eXBlOiAncmVmcmVzaCcsIHNsb3Q6IHNsb3QgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHJvdXRlcikge1xuICAgICAgICB0aGlzLm9uU2FtZU5hdmlnYXRpb24gPSByb3V0ZXIuZXZlbnRzLnBpcGUoKS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnNsb3QgJiZcbiAgICAgICAgICAgICF0aGlzLnJlZnJlc2ggJiZcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLm9uU2FtZU5hdmlnYXRpb24gPT09ICdyZWZyZXNoJ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQ29udGVudC5jYWxsKHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jaGVja1JlcXVpcmVkRmllbGRzKHRoaXMuYWRVbml0LCAnYWRVbml0Jyk7XG4gICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JRCkgJiYgIXRoaXMuaWQpIHtcbiAgICAgIHRoaXMuZ3B0SURHZW5lcmF0b3IuZ3B0SURHZW5lcmF0b3IodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlEKSkge1xuICAgICAgdGhpcy5ncHQuZGVmaW5lVGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMuZGVmaW5lU2xvdCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc2xvdCkge1xuICAgICAgZ29vZ2xldGFnLmRlc3Ryb3lTbG90cyhbdGhpcy5zbG90XSk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uU2FtZU5hdmlnYXRpb24pIHtcbiAgICAgIHRoaXMub25TYW1lTmF2aWdhdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0U2l6ZU1hcHBpbmcoc2xvdDogU2xvdCkge1xuICAgIGNvbnN0IGFkID0gdGhpcy5nZXRTdGF0ZSgpO1xuXG4gICAgaWYgKGFkLnNpemVNYXBwaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNpemVNYXBwaW5nID0gZ29vZ2xldGFnLnNpemVNYXBwaW5nKCk7XG5cbiAgICBhZC5zaXplTWFwcGluZy5mb3JFYWNoKChtYXBwaW5nKSA9PiB7XG4gICAgICBzaXplTWFwcGluZy5hZGRTaXplKG1hcHBpbmcudmlld3BvcnQsIG1hcHBpbmcuc2l6ZXMpO1xuICAgIH0pO1xuXG4gICAgc2xvdC5kZWZpbmVTaXplTWFwcGluZyhzaXplTWFwcGluZy5idWlsZCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVmaW5lU2xvdCgpIHtcbiAgICBjb25zdCBhZCA9IHRoaXMuZ2V0U3RhdGUoKSxcbiAgICAgIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIHRoaXMuc2xvdCA9IGdvb2dsZXRhZy5kZWZpbmVTbG90KGFkLmFkVW5pdCwgYWQuc2l6ZXMsIGVsZW1lbnQuaWQpO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5mb3JjZVNhZmVGcmFtZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhZC5mb3JjZVNhZmVGcmFtZSA9PT0gIXRoaXMuY29uZmlnLmZvcmNlU2FmZUZyYW1lXG4gICAgKSB7XG4gICAgICB0aGlzLnNsb3Quc2V0Rm9yY2VTYWZlRnJhbWUoYWQuZm9yY2VTYWZlRnJhbWUpO1xuICAgIH1cblxuICAgIC8vIGlmIChhZC5jbGlja1VybCkge1xuICAgIC8vICAgdGhpcy5zbG90LnNldENsaWNrVXJsKGFkLmNsaWNrVXJsKTtcbiAgICAvLyB9XG5cbiAgICBpZiAoYWQuY29sbGFwc2VFbXB0eURpdnMpIHtcbiAgICAgIHRoaXMuc2xvdC5zZXRDb2xsYXBzZUVtcHR5RGl2KHRydWUsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChhZC5zYWZlRnJhbWVDb25maWcpIHtcbiAgICAgIHRoaXMuc2xvdC5zZXRTYWZlRnJhbWVDb25maWcoYWQuc2FmZUZyYW1lQ29uZmlnKTtcbiAgICB9XG5cbiAgICBnb29nbGV0YWcucHViYWRzKCkuYWRkRXZlbnRMaXN0ZW5lcignc2xvdFJlbmRlckVuZGVkJywgKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQuc2xvdCA9PT0gdGhpcy5zbG90KSB7XG4gICAgICAgIHRoaXMuYWZ0ZXJSZWZyZXNoLmVtaXQoe1xuICAgICAgICAgIHR5cGU6ICdyZW5kZXJFbmRlZCcsXG4gICAgICAgICAgc2xvdDogdGhpcy5zbG90LFxuICAgICAgICAgIGRhdGE6IGV2ZW50LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuc2V0U2l6ZU1hcHBpbmcodGhpcy5zbG90KTtcblxuICAgIE9iamVjdC5rZXlzKGFkLnRhcmdldGluZ0FyZ3VtZW50cykuZm9yRWFjaCgoYXJnKSA9PiB7XG4gICAgICB0aGlzLnNsb3Quc2V0VGFyZ2V0aW5nKGFyZywgYWQudGFyZ2V0aW5nQXJndW1lbnRzW2FyZ10pO1xuICAgIH0pO1xuXG4gICAgYWQuZXhjbHVzaW9ucy5mb3JFYWNoKChleGNsdXNpb24pID0+IHtcbiAgICAgIHRoaXMuc2xvdC5zZXRDYXRlZ29yeUV4Y2x1c2lvbihleGNsdXNpb24pO1xuICAgIH0pO1xuXG4gICAgYWQuc2NyaXB0cy5mb3JFYWNoKChzY3JpcHQpID0+IHtcbiAgICAgIHNjcmlwdCh0aGlzLnNsb3QpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmVuYWJsZVZpZGVvQWRzKSB7XG4gICAgICB0aGlzLnNsb3QuYWRkU2VydmljZShnb29nbGV0YWcuY29tcGFuaW9uQWRzKCkpO1xuICAgIH1cblxuICAgIHRoaXMuc2xvdC5hZGRTZXJ2aWNlKGdvb2dsZXRhZy5wdWJhZHMoKSk7XG5cbiAgICB0aGlzLnJlZnJlc2hDb250ZW50KCk7XG4gIH1cblxuICBwcml2YXRlIHJlZnJlc2hDb250ZW50KCkge1xuICAgIHRoaXMuZ3B0UmVmcmVzaC5zbG90UmVmcmVzaCh0aGlzLnNsb3QsIHRoaXMucmVmcmVzaCwgdHJ1ZSkudGhlbigoc2xvdCkgPT4ge1xuICAgICAgdGhpcy5hZnRlclJlZnJlc2guZW1pdCh7IHR5cGU6ICdpbml0Jywgc2xvdDogc2xvdCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBpc0hpZGRlbigpIHtcbiAgICByZXR1cm4gdGhpcy5ncHRSZWZyZXNoLmhpZGRlbkNoZWNrKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuXG4gIGdldFN0YXRlKCkge1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICAgIHNpemVzOiB0eXBlb2YgdGhpcy5zaXplcyA9PT0gJ3N0cmluZycgPyBbdGhpcy5zaXplc10gOiB0aGlzLnNpemVzLFxuICAgICAgc2l6ZU1hcHBpbmc6IHRoaXMuc2l6ZU1hcHBpbmcsXG4gICAgICB0YXJnZXRpbmdBcmd1bWVudHM6IHRoaXMudGFyZ2V0aW5nQXJndW1lbnRzLFxuICAgICAgZXhjbHVzaW9uczogdGhpcy5leGNsdXNpb25zLFxuICAgICAgYWRVbml0OiB0aGlzLmFkVW5pdCxcbiAgICAgIGZvcmNlU2FmZUZyYW1lOiB0aGlzLmZvcmNlU2FmZUZyYW1lID09PSB0cnVlLFxuICAgICAgc2FmZUZyYW1lQ29uZmlnOiB0aGlzLnNhZmVGcmFtZUNvbmZpZyxcbiAgICAgIC8vIGNsaWNrVXJsOiB0aGlzLmNsaWNrVXJsLFxuICAgICAgcmVmcmVzaDogdGhpcy5yZWZyZXNoLFxuICAgICAgc2NyaXB0czogdGhpcy5zY3JpcHRzLFxuICAgICAgY29sbGFwc2VFbXB0eURpdnM6IHRoaXMuY29sbGFwc2VFbXB0eURpdnMgPT09IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBjaGVja1JlcXVpcmVkRmllbGRzKGlucHV0OiBhbnksIG5hbWU6IHN0cmluZykge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBBdHRyaWJ1dGUgJHtuYW1lfSBpcyByZXF1aXJlZGApO1xuICAgIH1cbiAgfVxuXG4gIGFkZEV4Y2x1c2lvbihleGNsdXNpb246IGFueSkge1xuICAgIHRoaXMuZXhjbHVzaW9ucy5wdXNoKGV4Y2x1c2lvbik7XG4gIH1cblxuICBhZGRTY3JpcHQoc2NyaXB0OiBhbnkpIHtcbiAgICB0aGlzLnNjcmlwdHMucHVzaChzY3JpcHQpO1xuICB9XG59XG4iXX0=