ngx-render-material-forms 1.4.2 → 1.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,85 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { isNullOrUndefined } from 'util';
3
+ import * as CryptoJS from 'crypto-js';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common/http";
6
+ export class CommonService {
7
+ constructor(http) {
8
+ this.http = http;
9
+ this.holy = '';
10
+ this.grail = '';
11
+ this.holy = CryptoJS.enc.Base64.parse('8F/2+T2NXqUBQERR12R4sw==');
12
+ this.grail = CryptoJS.enc.Base64.parse('yE0CgQbYzK5wqeoKTVzhOQ==');
13
+ this.paramsData = JSON.parse(localStorage.getItem('productPickerParams'));
14
+ this.currentUser = JSON.parse(localStorage.getItem('currentUser'));
15
+ }
16
+ scrumble(msg) {
17
+ if (!isNullOrUndefined(msg)) {
18
+ var conceal = this.getcampaign(msg, this.holy, this.grail);
19
+ var sha256 = CryptoJS.HmacSHA256(CryptoJS.enc.Base64.stringify(this.grail) + conceal.toString(), CryptoJS.enc.Base64.stringify(this.holy));
20
+ var hashInBase64 = CryptoJS.enc.Base64.stringify(sha256);
21
+ let keyValue = {
22
+ "value": conceal.toString(),
23
+ "mac": hashInBase64
24
+ };
25
+ var result = JSON.stringify(keyValue);
26
+ var jumbled = CryptoJS.enc.Utf8.parse(result);
27
+ return CryptoJS.enc.Base64.stringify(jumbled);
28
+ }
29
+ }
30
+ getcampaign(data, holy, grail) {
31
+ return CryptoJS.AES.encrypt(data.toString(), holy, {
32
+ blockSize: 128,
33
+ iv: grail,
34
+ mode: CryptoJS.mode.CBC,
35
+ padding: CryptoJS.pad.Pkcs7
36
+ });
37
+ }
38
+ getBaseApiUrl() {
39
+ const baseUrlMapping = {
40
+ 'localhost': 'http://localhost:58504',
41
+ 'lincoln.vartopia.com': 'https://lincoln-api.vartopia.com',
42
+ 'stage.vartopia.com': 'https://stage-api.vartopia.com',
43
+ 'my.vartopia.com': 'https://reagan-api.vartopia.com',
44
+ 'jackson.vartopia.com': 'https://jackson-api.vartopia.com'
45
+ };
46
+ // Get the current hostname
47
+ const hostname = window.location.hostname;
48
+ return baseUrlMapping[hostname] || null;
49
+ }
50
+ listProductCategory() {
51
+ const vendorId = this.getValueByKey(this.paramsData, 'vendorId');
52
+ const baseApiUrl = this.getBaseApiUrl();
53
+ return this.http.get(`${baseApiUrl}/api/VendorFormBuilder/GetProductsCategory?vendorId=${vendorId}`);
54
+ }
55
+ listSubCategory(category) {
56
+ const vendorId = this.getValueByKey(this.paramsData, 'vendorId');
57
+ const baseApiUrl = this.getBaseApiUrl();
58
+ return this.http.get(`${baseApiUrl}/api/VendorFormBuilder/GetProductsSubCategory?vendorId=${vendorId}&categoryName=${category}`);
59
+ }
60
+ // Function to get value by key from the array
61
+ getValueByKey(data, key) {
62
+ if (!data || data.length === 0) {
63
+ return null; // Return null if data is empty or undefined
64
+ }
65
+ const item = data.find(kv => kv.key.toLowerCase() === key.toLowerCase());
66
+ return item ? item.value : null;
67
+ }
68
+ // this.http.get<VendorProductsResponse>(`${baseApiUrl}/api/VendorFormBuilder/GetVendorProducts?vendorId=${envendorId}&pageNumber=${enpageNumber}&pageSize=${enpageSize}&search=${ensearchQuery}&onlyActive=${enactive}&includeDescription=${endescription}`, { headers }).subscribe(response => {
69
+ loadProducts(pageNumber, pazeSize, search = '', onlyActive = true, description = false, category, subCategory) {
70
+ const baseApiUrl = this.getBaseApiUrl();
71
+ const vendorId = this.getValueByKey(this.paramsData, 'vendorId');
72
+ const encodeCat = encodeURIComponent(category);
73
+ const encodeSubCat = encodeURIComponent(subCategory);
74
+ return this.http.get(`${baseApiUrl}/api/VendorFormBuilder/GetVendorProducts?vendorId=${vendorId}&pageNumber=${pageNumber}&pageSize=${pazeSize}&search=${search}&onlyActive=${onlyActive}&includeDescription=${description}&category=${encodeCat}&subCategory=${encodeSubCat}`);
75
+ }
76
+ }
77
+ CommonService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CommonService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
78
+ CommonService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CommonService, providedIn: 'root' });
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: CommonService, decorators: [{
80
+ type: Injectable,
81
+ args: [{
82
+ providedIn: 'root'
83
+ }]
84
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmVuZGVyLW1hdGVyaWFsLWZvcm1zL3NyYy9saWIvY29tcG9uZW50cy9jb21tb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQzs7O0FBWXRDLE1BQU0sT0FBTyxhQUFhO0lBUXhCLFlBQW1CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFQbkMsU0FBSSxHQUFRLEVBQUUsQ0FBQztRQUNmLFVBQUssR0FBUSxFQUFFLENBQUM7UUFPZCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFHO1FBQ1YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUs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RUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbEMsQ0FBQztJQUNILGtTQUFrUztJQUNoUyxZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFlLEVBQUUsRUFBRSxhQUFtQixJQUFJLEVBQUMsY0FBcUIsS0FBSyxFQUFFLFFBQWdCLEVBQUUsV0FBbUI7UUFDN0ksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqRSxNQUFNLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvQyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF5QixHQUFHLFVBQVUscURBQXFELFFBQVEsZUFBZSxVQUFVLGFBQWEsUUFBUSxXQUFXLE1BQU0sZUFBZSxVQUFVLHVCQUF1QixXQUFXLGFBQWEsU0FBUyxnQkFBZ0IsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUN6UyxDQUFDOzswR0FqRlUsYUFBYTs4R0FBYixhQUFhLGNBRlosTUFBTTsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAndXRpbCc7XG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbnRlcmZhY2UgVmVuZG9yUHJvZHVjdHNSZXNwb25zZSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgZGF0YTogYW55O1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbn1cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbW1vblNlcnZpY2Uge1xuICBob2x5OiBhbnkgPSAnJztcbiAgZ3JhaWw6IGFueSA9ICcnO1xuICBwYXJhbXNEYXRhOiBhbnk7XG4gIGluY2x1ZGVEZXNjcmlwdGlvbjogYW55O1xuICB2ZW5kb3JJZDogYW55O1xuICBvbmx5QWN0aXZlOiBhbnk7XG4gIGN1cnJlbnRVc2VyOiBhbnk7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBodHRwOiBIdHRwQ2xpZW50KSB7XG4gICAgdGhpcy5ob2x5ID0gQ3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZSgnOEYvMitUMk5YcVVCUUVSUjEyUjRzdz09Jyk7XG4gICAgdGhpcy5ncmFpbCA9IENyeXB0b0pTLmVuYy5CYXNlNjQucGFyc2UoJ3lFMENnUWJZeks1d3Flb0tUVnpoT1E9PScpO1xuICAgIHRoaXMucGFyYW1zRGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3Byb2R1Y3RQaWNrZXJQYXJhbXMnKSk7XG4gICAgdGhpcy5jdXJyZW50VXNlciA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1cnJlbnRVc2VyJykpO1xuICB9XG5cbiAgc2NydW1ibGUobXNnKSB7XG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChtc2cpKSB7XG4gICAgICB2YXIgY29uY2VhbCA9IHRoaXMuZ2V0Y2FtcGFpZ24obXNnLCB0aGlzLmhvbHksIHRoaXMuZ3JhaWwpO1xuICAgICAgdmFyIHNoYTI1NiA9IENyeXB0b0pTLkhtYWNTSEEyNTYoQ3J5cHRvSlMuZW5jLkJhc2U2NC5zdHJpbmdpZnkodGhpcy5ncmFpbCkgKyBjb25jZWFsLnRvU3RyaW5nKCksIENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHRoaXMuaG9seSkpO1xuICAgICAgdmFyIGhhc2hJbkJhc2U2NCA9IENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHNoYTI1Nik7XG4gICAgICBsZXQga2V5VmFsdWUgPSB7XG4gICAgICAgIFwidmFsdWVcIjogY29uY2VhbC50b1N0cmluZygpLFxuICAgICAgICBcIm1hY1wiOiBoYXNoSW5CYXNlNjRcbiAgICAgIH07XG4gICAgICB2YXIgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkoa2V5VmFsdWUpO1xuICAgICAgdmFyIGp1bWJsZWQgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShyZXN1bHQpO1xuICAgICAgcmV0dXJuIENyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KGp1bWJsZWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldGNhbXBhaWduKGRhdGE6IGFueSwgaG9seTogYW55LCBncmFpbDogYW55KSB7XG4gICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KGRhdGEudG9TdHJpbmcoKSwgaG9seSxcbiAgICAgIHtcbiAgICAgICAgYmxvY2tTaXplOiAxMjgsXG4gICAgICAgIGl2OiBncmFpbCxcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkMsXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRCYXNlQXBpVXJsKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGJhc2VVcmxNYXBwaW5nID0ge1xuICAgICAgJ2xvY2FsaG9zdCc6ICdodHRwOi8vbG9jYWxob3N0OjU4NTA0JyxcbiAgICAgICdsaW5jb2xuLnZhcnRvcGlhLmNvbSc6ICdodHRwczovL2xpbmNvbG4tYXBpLnZhcnRvcGlhLmNvbScsXG4gICAgICAnc3RhZ2UudmFydG9waWEuY29tJzogJ2h0dHBzOi8vc3RhZ2UtYXBpLnZhcnRvcGlhLmNvbScsXG4gICAgICAnbXkudmFydG9waWEuY29tJzogJ2h0dHBzOi8vcmVhZ2FuLWFwaS52YXJ0b3BpYS5jb20nLFxuICAgICAgJ2phY2tzb24udmFydG9waWEuY29tJzogJ2h0dHBzOi8vamFja3Nvbi1hcGkudmFydG9waWEuY29tJ1xuICAgIH07XG5cbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgaG9zdG5hbWVcbiAgICBjb25zdCBob3N0bmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbiAgICByZXR1cm4gYmFzZVVybE1hcHBpbmdbaG9zdG5hbWVdIHx8IG51bGw7XG4gIH1cblxuICBsaXN0UHJvZHVjdENhdGVnb3J5KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdmVuZG9ySWQgPSB0aGlzLmdldFZhbHVlQnlLZXkodGhpcy5wYXJhbXNEYXRhLCAndmVuZG9ySWQnKTtcbiAgICBjb25zdCBiYXNlQXBpVXJsID0gdGhpcy5nZXRCYXNlQXBpVXJsKCk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VmVuZG9yUHJvZHVjdHNSZXNwb25zZT4oYCR7YmFzZUFwaVVybH0vYXBpL1ZlbmRvckZvcm1CdWlsZGVyL0dldFByb2R1Y3RzQ2F0ZWdvcnk/dmVuZG9ySWQ9JHt2ZW5kb3JJZH1gKTtcbiAgfVxuXG4gIGxpc3RTdWJDYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgIGNvbnN0IHZlbmRvcklkID0gdGhpcy5nZXRWYWx1ZUJ5S2V5KHRoaXMucGFyYW1zRGF0YSwgJ3ZlbmRvcklkJyk7XG4gICBjb25zdCBiYXNlQXBpVXJsID0gdGhpcy5nZXRCYXNlQXBpVXJsKCk7XG4gICByZXR1cm4gdGhpcy5odHRwLmdldDxWZW5kb3JQcm9kdWN0c1Jlc3BvbnNlPihgJHtiYXNlQXBpVXJsfS9hcGkvVmVuZG9yRm9ybUJ1aWxkZXIvR2V0UHJvZHVjdHNTdWJDYXRlZ29yeT92ZW5kb3JJZD0ke3ZlbmRvcklkfSZjYXRlZ29yeU5hbWU9JHtjYXRlZ29yeX1gKVxuICB9XG5cbiAgLy8gRnVuY3Rpb24gdG8gZ2V0IHZhbHVlIGJ5IGtleSBmcm9tIHRoZSBhcnJheVxuICBnZXRWYWx1ZUJ5S2V5KGRhdGEsIGtleSkge1xuICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7IC8vIFJldHVybiBudWxsIGlmIGRhdGEgaXMgZW1wdHkgb3IgdW5kZWZpbmVkXG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmZpbmQoa3YgPT4ga3Yua2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0udmFsdWUgOiBudWxsO1xuICB9XG4vLyB0aGlzLmh0dHAuZ2V0PFZlbmRvclByb2R1Y3RzUmVzcG9uc2U+KGAke2Jhc2VBcGlVcmx9L2FwaS9WZW5kb3JGb3JtQnVpbGRlci9HZXRWZW5kb3JQcm9kdWN0cz92ZW5kb3JJZD0ke2VudmVuZG9ySWR9JnBhZ2VOdW1iZXI9JHtlbnBhZ2VOdW1iZXJ9JnBhZ2VTaXplPSR7ZW5wYWdlU2l6ZX0mc2VhcmNoPSR7ZW5zZWFyY2hRdWVyeX0mb25seUFjdGl2ZT0ke2VuYWN0aXZlfSZpbmNsdWRlRGVzY3JpcHRpb249JHtlbmRlc2NyaXB0aW9ufWAsIHsgaGVhZGVycyB9KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICBsb2FkUHJvZHVjdHMocGFnZU51bWJlciwgcGF6ZVNpemUsIHNlYXJjaDogc3RyaW5nPScnLCBvbmx5QWN0aXZlOmJvb2xlYW49dHJ1ZSxkZXNjcmlwdGlvbjogYm9vbGVhbj1mYWxzZSwgY2F0ZWdvcnk6IHN0cmluZywgc3ViQ2F0ZWdvcnk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgYmFzZUFwaVVybCA9IHRoaXMuZ2V0QmFzZUFwaVVybCgpO1xuICAgIGNvbnN0IHZlbmRvcklkID0gdGhpcy5nZXRWYWx1ZUJ5S2V5KHRoaXMucGFyYW1zRGF0YSwgJ3ZlbmRvcklkJyk7XG4gICAgY29uc3QgZW5jb2RlQ2F0ID0gZW5jb2RlVVJJQ29tcG9uZW50KGNhdGVnb3J5KTtcbiAgICBjb25zdCBlbmNvZGVTdWJDYXQgPSBlbmNvZGVVUklDb21wb25lbnQoc3ViQ2F0ZWdvcnkpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFZlbmRvclByb2R1Y3RzUmVzcG9uc2U+KGAke2Jhc2VBcGlVcmx9L2FwaS9WZW5kb3JGb3JtQnVpbGRlci9HZXRWZW5kb3JQcm9kdWN0cz92ZW5kb3JJZD0ke3ZlbmRvcklkfSZwYWdlTnVtYmVyPSR7cGFnZU51bWJlcn0mcGFnZVNpemU9JHtwYXplU2l6ZX0mc2VhcmNoPSR7c2VhcmNofSZvbmx5QWN0aXZlPSR7b25seUFjdGl2ZX0maW5jbHVkZURlc2NyaXB0aW9uPSR7ZGVzY3JpcHRpb259JmNhdGVnb3J5PSR7ZW5jb2RlQ2F0fSZzdWJDYXRlZ29yeT0ke2VuY29kZVN1YkNhdH1gKTtcbiAgfVxuXG59XG5cblxuIl19
@@ -4,6 +4,7 @@ import { MaterialNestedComponent } from '../MaterialNestedComponent';
4
4
  import DataGridComponent from 'formiojs/components/datagrid/DataGrid.js';
5
5
  import { moveItemInArray } from '@angular/cdk/drag-drop';
6
6
  import { ConfirmationDialogComponent } from '../confirmation-dialog/confirmation-dialog.component';
7
+ import { AddOnProductsComponent } from '../add-on-products/add-on-products.component';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@angular/material/dialog";
9
10
  import * as i2 from "@angular/common";
@@ -15,6 +16,7 @@ import * as i7 from "@angular/material/card";
15
16
  import * as i8 from "@angular/cdk/drag-drop";
16
17
  import * as i9 from "../formio-form-field/formio-form-field.component";
17
18
  import * as i10 from "../label/label.component";
19
+ const ELEMENT_DATA = [];
18
20
  export class MaterialDataGridComponent extends MaterialNestedComponent {
19
21
  constructor(element, ref, dialog) {
20
22
  super(element, ref);
@@ -22,13 +24,54 @@ export class MaterialDataGridComponent extends MaterialNestedComponent {
22
24
  this.ref = ref;
23
25
  this.dialog = dialog;
24
26
  this.dataSource = new MatTableDataSource();
27
+ this.dataSourceNew = ELEMENT_DATA;
28
+ this.displayedColumnsNew = ['productName', 'category', 'subCategory', 'quantity', 'price'];
29
+ this.showNewProductPicker = false;
30
+ this.showCategory = false;
31
+ this.showSubcategory = false;
32
+ this.showPrice = true;
33
+ this.showQuantity = true;
34
+ this.category = '';
35
+ this.subCategory = '';
36
+ this.hasInitialized = false;
25
37
  }
26
38
  getColumnLabel(column) {
27
39
  return column.label || column.key;
28
40
  }
41
+ checkIsAttributeTrue(newProductPickerFlag, attributeName) {
42
+ return newProductPickerFlag && Object.keys(newProductPickerFlag).some(key => key.toLocaleLowerCase() === attributeName.toLowerCase() &&
43
+ newProductPickerFlag[key].toLowerCase() === "true");
44
+ }
45
+ // ngOnInit(): void {
46
+ // }
29
47
  setInstance(instance) {
48
+ const newProductPickerFlag = instance?.component?.attributes;
49
+ this.showNewProductPicker = this.checkIsAttributeTrue(newProductPickerFlag, "newproductpicker");
50
+ this.showCategory = this.checkIsAttributeTrue(newProductPickerFlag, "showCategory");
51
+ this.showSubcategory = this.checkIsAttributeTrue(newProductPickerFlag, "showSubcategory");
52
+ this.showPrice = this.checkIsAttributeTrue(newProductPickerFlag, "showPrice");
53
+ this.showQuantity = this.checkIsAttributeTrue(newProductPickerFlag, "showQuantity");
30
54
  super.setInstance(instance);
31
- this.dataSource.data = instance.dataValue;
55
+ if (this.showNewProductPicker && !this.hasInitialized) {
56
+ if (!this.showCategory) {
57
+ this.removeColumn('category');
58
+ }
59
+ if (!this.showQuantity) {
60
+ this.removeColumn('quantity');
61
+ }
62
+ if (!this.showPrice) {
63
+ this.removeColumn('price');
64
+ }
65
+ if (!this.showSubcategory) {
66
+ this.removeColumn('subCategory');
67
+ }
68
+ this.dataSourceNew = JSON.parse(localStorage.getItem('selectedProducts')) || [];
69
+ // Set flag to true to prevent further execution
70
+ this.hasInitialized = true;
71
+ }
72
+ else {
73
+ this.dataSource.data = instance.dataValue;
74
+ }
32
75
  this.columns = {};
33
76
  this.displayedColumns = [];
34
77
  this.formColumns = [];
@@ -56,7 +99,10 @@ export class MaterialDataGridComponent extends MaterialNestedComponent {
56
99
  return viewContainer ? viewContainer : null;
57
100
  };
58
101
  }
59
- addAnother() {
102
+ removeColumn(columnName) {
103
+ this.displayedColumnsNew = this.displayedColumnsNew.filter(column => column !== columnName);
104
+ }
105
+ addAnotherOld() {
60
106
  this.checkRowsNumber();
61
107
  this.instance.addRow();
62
108
  if (this.dataSource.data.length < this.instance.rows.length) {
@@ -64,6 +110,55 @@ export class MaterialDataGridComponent extends MaterialNestedComponent {
64
110
  }
65
111
  this.dataSource.data = [...this.dataSource.data];
66
112
  }
113
+ addAnother() {
114
+ if (this.showNewProductPicker) {
115
+ const savedData = JSON.parse(localStorage.getItem('saveCat'));
116
+ // Use optional chaining and nullish coalescing to set the values
117
+ this.category = savedData?.category ?? this.category;
118
+ this.subCategory = savedData?.subCategory ?? this.subCategory;
119
+ const diologeRef = this.dialog.open(AddOnProductsComponent, {
120
+ disableClose: true,
121
+ width: '90%',
122
+ maxWidth: '900px',
123
+ autoFocus: false,
124
+ data: { attributesFlag: { showNewProductPicker: this.showNewProductPicker, showCategory: this.showCategory, showSubcategory: this.showSubcategory, showPrice: this.showPrice, showQuantity: this.showQuantity }, selectedProducts: this.dataSourceNew, category: this.category, subCategory: this.subCategory }
125
+ })
126
+ .afterClosed().subscribe(response => {
127
+ if (response?.data?.status) {
128
+ if (!this.showCategory) {
129
+ this.removeColumn('category');
130
+ }
131
+ if (!this.showQuantity) {
132
+ this.removeColumn('quantity');
133
+ }
134
+ if (!this.showPrice) {
135
+ this.removeColumn('price');
136
+ }
137
+ if (!this.showSubcategory) {
138
+ this.removeColumn('subCategory');
139
+ }
140
+ localStorage.setItem('selectedProducts', JSON.stringify(response.data.items.selectedProducts));
141
+ this.dataSourceNew = response.data.items.selectedProducts;
142
+ this.category = response.data.items.productCategory;
143
+ this.subCategory = response.data.items.productSubcategory;
144
+ const catObject = {
145
+ category: this.category,
146
+ subCategory: this.subCategory
147
+ };
148
+ localStorage.setItem('saveCat', JSON.stringify(catObject));
149
+ this.instance.component.defaultValue = response.data.items.selectedProducts;
150
+ }
151
+ });
152
+ }
153
+ else {
154
+ this.checkRowsNumber();
155
+ this.instance.addRow();
156
+ if (this.dataSource.data.length < this.instance.rows.length) {
157
+ this.dataSource.data.push({});
158
+ }
159
+ this.dataSource.data = [...this.dataSource.data];
160
+ }
161
+ }
67
162
  checkRowsNumber() {
68
163
  while (this.instance.rows.length < this.dataSource.data.length) {
69
164
  this.instance.addRow();
@@ -132,6 +227,8 @@ MaterialDataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
132
227
  {{instance.component.addAnother || 'Add Another'}}
133
228
  </button>
134
229
  </mat-card-actions>
230
+ <ng-container *ngIf="!showNewProductPicker">
231
+ <div class="mat-elevation-z8">
135
232
  <table
136
233
  mat-table
137
234
  [dataSource]="dataSource"
@@ -140,7 +237,8 @@ MaterialDataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
140
237
  cdkDropList
141
238
  [cdkDropListData]="dataSource"
142
239
  (cdkDropListDropped)="dropTable($event)">
143
- >
240
+
241
+
144
242
  <ng-container *ngFor="let column of formColumns" [matColumnDef]="column">
145
243
  <th mat-header-cell *matHeaderCellDef>{{ getColumnLabel(columns[column]) }}</th>
146
244
  <td mat-cell *matCellDef="let i = index;" [attr.rowIndex]="i" [attr.component]="column">
@@ -170,6 +268,51 @@ MaterialDataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
170
268
  <tr class="datagrid-row" mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
171
269
  </div>
172
270
  </table>
271
+ </div>
272
+ </ng-container>
273
+
274
+ <table mat-table [dataSource]="dataSourceNew" class="mat-table" *ngIf="dataSourceNew.length > 0 && showNewProductPicker; else noData" >
275
+ <!-- Product Name Column -->
276
+ <ng-container matColumnDef="productName">
277
+ <th mat-header-cell *matHeaderCellDef> Product Name </th>
278
+ <td mat-cell *matCellDef="let element"> {{element.text}} </td>
279
+ </ng-container>
280
+
281
+ <!-- Quantity Column -->
282
+ <ng-container matColumnDef="quantity" *ngIf="showQuantity">
283
+ <th mat-header-cell *matHeaderCellDef> Quantity </th>
284
+ <td mat-cell *matCellDef="let element"> {{element.quantity}} </td>
285
+ </ng-container>
286
+
287
+ <!-- Price Column -->
288
+ <ng-container matColumnDef="price" *ngIf="showPrice">
289
+ <th mat-header-cell *matHeaderCellDef> Price </th>
290
+ <td mat-cell *matCellDef="let element"> {{element.price}} </td>
291
+ </ng-container>
292
+
293
+ <!-- Category Column -->
294
+ <ng-container matColumnDef="category" *ngIf="showCategory">
295
+ <th mat-header-cell *matHeaderCellDef> Category </th>
296
+ <td mat-cell *matCellDef="let element"> {{element.category}} </td>
297
+ </ng-container>
298
+
299
+ <!-- Category Column -->
300
+ <ng-container matColumnDef="subCategory" *ngIf="showSubcategory">
301
+ <th mat-header-cell *matHeaderCellDef> Sub Category </th>
302
+ <td mat-cell *matCellDef="let element"> {{element.subCategory}} </td>
303
+ </ng-container>
304
+
305
+ <tr mat-header-row *matHeaderRowDef="displayedColumnsNew"></tr>
306
+ <tr mat-row *matRowDef="let row; columns: displayedColumnsNew;"></tr>
307
+ </table>
308
+ <ng-template #noData>
309
+ <div class="no-data-message" *ngIf="showNewProductPicker">
310
+ No product found please add some products.
311
+ </div>
312
+ </ng-template>
313
+
314
+
315
+
173
316
  </mat-card-content>
174
317
  <mat-card-actions *ngIf="instance.hasAddButton() && instance.component.addAnotherPosition !== 'top'">
175
318
  <button mat-raised-button color="primary" (click)="addAnother()">
@@ -185,7 +328,7 @@ MaterialDataGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.
185
328
  <span [instance]="instance" matFormioLabel></span>
186
329
  </mat-card-title>
187
330
  </ng-template>
188
- `, isInline: true, styles: [".datagrid-row{height:auto}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i7.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i9.FormioFormFieldComponent, selector: "mat-formio-form-field", inputs: ["labelTemplate", "renderTopLabel", "showDescription", "renderElementOnly", "instance", "componentTemplate"] }, { kind: "component", type: i10.LabelComponent, selector: "span[matFormioLabel]", inputs: ["instance"] }] });
331
+ `, isInline: true, styles: [".datagrid-row{height:auto}.mat-table{width:100%}.mat-header-cell,.mat-cell{padding:8px}.no-data-message{text-align:center;margin:20px 0;font-size:18px;color:#888}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i7.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "directive", type: i7.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i7.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i8.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i9.FormioFormFieldComponent, selector: "mat-formio-form-field", inputs: ["labelTemplate", "renderTopLabel", "showDescription", "renderElementOnly", "instance", "componentTemplate"] }, { kind: "component", type: i10.LabelComponent, selector: "span[matFormioLabel]", inputs: ["instance"] }] });
189
332
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MaterialDataGridComponent, decorators: [{
190
333
  type: Component,
191
334
  args: [{ selector: 'mat-formio-datagrid', template: `
@@ -206,6 +349,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
206
349
  {{instance.component.addAnother || 'Add Another'}}
207
350
  </button>
208
351
  </mat-card-actions>
352
+ <ng-container *ngIf="!showNewProductPicker">
353
+ <div class="mat-elevation-z8">
209
354
  <table
210
355
  mat-table
211
356
  [dataSource]="dataSource"
@@ -214,7 +359,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
214
359
  cdkDropList
215
360
  [cdkDropListData]="dataSource"
216
361
  (cdkDropListDropped)="dropTable($event)">
217
- >
362
+
363
+
218
364
  <ng-container *ngFor="let column of formColumns" [matColumnDef]="column">
219
365
  <th mat-header-cell *matHeaderCellDef>{{ getColumnLabel(columns[column]) }}</th>
220
366
  <td mat-cell *matCellDef="let i = index;" [attr.rowIndex]="i" [attr.component]="column">
@@ -244,6 +390,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
244
390
  <tr class="datagrid-row" mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
245
391
  </div>
246
392
  </table>
393
+ </div>
394
+ </ng-container>
395
+
396
+ <table mat-table [dataSource]="dataSourceNew" class="mat-table" *ngIf="dataSourceNew.length > 0 && showNewProductPicker; else noData" >
397
+ <!-- Product Name Column -->
398
+ <ng-container matColumnDef="productName">
399
+ <th mat-header-cell *matHeaderCellDef> Product Name </th>
400
+ <td mat-cell *matCellDef="let element"> {{element.text}} </td>
401
+ </ng-container>
402
+
403
+ <!-- Quantity Column -->
404
+ <ng-container matColumnDef="quantity" *ngIf="showQuantity">
405
+ <th mat-header-cell *matHeaderCellDef> Quantity </th>
406
+ <td mat-cell *matCellDef="let element"> {{element.quantity}} </td>
407
+ </ng-container>
408
+
409
+ <!-- Price Column -->
410
+ <ng-container matColumnDef="price" *ngIf="showPrice">
411
+ <th mat-header-cell *matHeaderCellDef> Price </th>
412
+ <td mat-cell *matCellDef="let element"> {{element.price}} </td>
413
+ </ng-container>
414
+
415
+ <!-- Category Column -->
416
+ <ng-container matColumnDef="category" *ngIf="showCategory">
417
+ <th mat-header-cell *matHeaderCellDef> Category </th>
418
+ <td mat-cell *matCellDef="let element"> {{element.category}} </td>
419
+ </ng-container>
420
+
421
+ <!-- Category Column -->
422
+ <ng-container matColumnDef="subCategory" *ngIf="showSubcategory">
423
+ <th mat-header-cell *matHeaderCellDef> Sub Category </th>
424
+ <td mat-cell *matCellDef="let element"> {{element.subCategory}} </td>
425
+ </ng-container>
426
+
427
+ <tr mat-header-row *matHeaderRowDef="displayedColumnsNew"></tr>
428
+ <tr mat-row *matRowDef="let row; columns: displayedColumnsNew;"></tr>
429
+ </table>
430
+ <ng-template #noData>
431
+ <div class="no-data-message" *ngIf="showNewProductPicker">
432
+ No product found please add some products.
433
+ </div>
434
+ </ng-template>
435
+
436
+
437
+
247
438
  </mat-card-content>
248
439
  <mat-card-actions *ngIf="instance.hasAddButton() && instance.component.addAnotherPosition !== 'top'">
249
440
  <button mat-raised-button color="primary" (click)="addAnother()">
@@ -259,8 +450,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
259
450
  <span [instance]="instance" matFormioLabel></span>
260
451
  </mat-card-title>
261
452
  </ng-template>
262
- `, styles: [".datagrid-row{height:auto}\n"] }]
453
+ `, styles: [".datagrid-row{height:auto}.mat-table{width:100%}.mat-header-cell,.mat-cell{padding:8px}.no-data-message{text-align:center;margin:20px 0;font-size:18px;color:#888}\n"] }]
263
454
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.MatDialog }]; } });
264
455
  DataGridComponent.MaterialComponent = MaterialDataGridComponent;
265
456
  export { DataGridComponent };
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlbmRlci1tYXRlcmlhbC1mb3Jtcy9zcmMvbGliL2NvbXBvbmVudHMvZGF0YWdyaWQvZGF0YWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUF5QixNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLGlCQUFpQixNQUFNLDBDQUEwQyxDQUFDO0FBQ3pFLE9BQU8sRUFBZSxlQUFlLEVBQWtCLE1BQU0sd0JBQXdCLENBQUM7QUFHdEYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7Ozs7OztBQStFbkcsTUFBTSxPQUFPLHlCQUEwQixTQUFRLHVCQUF1QjtJQUVwRSxZQUFtQixPQUFtQixFQUFTLEdBQXNCLEVBQVUsTUFBaUI7UUFDOUYsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQURILFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFNaEcsZUFBVSxHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztJQUp0QyxDQUFDO0lBTUQsY0FBYyxDQUFDLE1BQU07UUFDbkIsT0FBTyxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDcEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFhO1FBQ3ZCLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLFNB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IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IE1hdGVyaWFsTmVzdGVkQ29tcG9uZW50IH0gZnJvbSAnLi4vTWF0ZXJpYWxOZXN0ZWRDb21wb25lbnQnO1xyXG5pbXBvcnQgRGF0YUdyaWRDb21wb25lbnQgZnJvbSAnZm9ybWlvanMvY29tcG9uZW50cy9kYXRhZ3JpZC9EYXRhR3JpZC5qcyc7XHJcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXksIERyYWdEcm9wTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IE1hdFRhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuY29tcG9uZW50JztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdtYXQtZm9ybWlvLWRhdGFncmlkJyxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPG1hdC1mb3JtaW8tZm9ybS1maWVsZCBbaW5zdGFuY2VdPVwiaW5zdGFuY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcG9uZW50VGVtcGxhdGVdPVwiY29tcG9uZW50VGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxUZW1wbGF0ZV09XCJsYWJlbFRlbXBsYXRlXCJcclxuICAgID48L21hdC1mb3JtaW8tZm9ybS1maWVsZD5cclxuICAgIDxuZy10ZW1wbGF0ZSAjY29tcG9uZW50VGVtcGxhdGUgbGV0LWhhc0xhYmVsPlxyXG4gICAgICA8bWF0LWNhcmQgZnhGaWxsPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNMYWJlbFwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxhYmVsVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICAgIDxtYXQtY2FyZC1hY3Rpb25zXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW5zdGFuY2UuaGFzQWRkQnV0dG9uKCkgJiYgKGluc3RhbmNlLmNvbXBvbmVudC5hZGRBbm90aGVyUG9zaXRpb24gPT09ICdib3RoJyB8fCBpbnN0YW5jZS5jb21wb25lbnQuYWRkQW5vdGhlclBvc2l0aW9uID09PSAndG9wJylcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwiYWRkQW5vdGhlcigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAge3tpbnN0YW5jZS5jb21wb25lbnQuYWRkQW5vdGhlciB8fCAnQWRkIEFub3RoZXInfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICAgICAgICA8dGFibGVcclxuICAgICAgICAgICAgICAgICAgbWF0LXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejhcIlxyXG4gICAgICAgICAgICAgICAgICBmeEZpbGxcclxuICAgICAgICAgICAgICAgICAgY2RrRHJvcExpc3RcclxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJkYXRhU291cmNlXCJcclxuICAgICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wVGFibGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBmb3JtQ29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj57eyBnZXRDb2x1bW5MYWJlbChjb2x1bW5zW2NvbHVtbl0pIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaSA9IGluZGV4O1wiIFthdHRyLnJvd0luZGV4XT1cImlcIiBbYXR0ci5jb21wb25lbnRdPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NvbXBvbmVudHM+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJfX3JlbW92ZVJvd1wiPlxyXG4gICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+PC90aD5cclxuICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaSA9IGluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uICpuZ0lmPVwiaW5zdGFuY2UuaGFzUmVtb3ZlQnV0dG9ucygpXCIgKGNsaWNrKT1cInJlbW92ZVJvdyhpKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gYXJpYS1oaWRkZW49XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJSZW1vdmUgcm93XCI+ZGVsZXRlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInBvc2l0aW9uXCIgKm5nSWY9XCJpbnN0YW5jZS5jb21wb25lbnQucmVvcmRlclwiPlxyXG4gICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IE5vLjwvdGg+XHJcbiAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPnJlb3JkZXI8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaW5zdGFuY2U/LmNvbXBvbmVudD8ucmVvcmRlclwiPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImRhdGFncmlkLXJvd1wiIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCIgY2RrRHJhZ1xyXG4gICAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwicm93XCI+PC90cj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaW5zdGFuY2U/LmNvbXBvbmVudD8ucmVvcmRlclwiPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImRhdGFncmlkLXJvd1wiIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCI+PC90cj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucyAqbmdJZj1cImluc3RhbmNlLmhhc0FkZEJ1dHRvbigpICYmIGluc3RhbmNlLmNvbXBvbmVudC5hZGRBbm90aGVyUG9zaXRpb24gIT09ICd0b3AnXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJhZGRBbm90aGVyKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIHt7aW5zdGFuY2UuY29tcG9uZW50LmFkZEFub3RoZXIgfHwgJ0FkZCBBbm90aGVyJ319XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cclxuICAgICAgPG1hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgIDxzcGFuIFtpbnN0YW5jZV09XCJpbnN0YW5jZVwiIG1hdEZvcm1pb0xhYmVsPjwvc3Bhbj5cclxuICAgICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtcclxuICAgICcuZGF0YWdyaWQtcm93IHsgaGVpZ2h0OiBhdXRvOyB9J1xyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsRGF0YUdyaWRDb21wb25lbnQgZXh0ZW5kcyBNYXRlcmlhbE5lc3RlZENvbXBvbmVudCB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLCBwdWJsaWMgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZykge1xyXG4gICAgc3VwZXIoZWxlbWVudCwgcmVmKTtcclxuICB9XHJcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW107XHJcbiAgZm9ybUNvbHVtbnM6IHN0cmluZ1tdO1xyXG4gIGNvbHVtbnM6IGFueTtcclxuICBkYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSgpO1xyXG5cclxuICBnZXRDb2x1bW5MYWJlbChjb2x1bW4pIHtcclxuICAgIHJldHVybiBjb2x1bW4ubGFiZWwgfHwgY29sdW1uLmtleTtcclxuICB9XHJcblxyXG4gIHNldEluc3RhbmNlKGluc3RhbmNlOiBhbnkpIHtcclxuICAgIHN1cGVyLnNldEluc3RhbmNlKGluc3RhbmNlKTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gaW5zdGFuY2UuZGF0YVZhbHVlO1xyXG4gICAgdGhpcy5jb2x1bW5zID0ge307XHJcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBbXTtcclxuICAgIHRoaXMuZm9ybUNvbHVtbnMgPSBbXTtcclxuICAgIGluc3RhbmNlLmdldENvbHVtbnMoKS5tYXAoKGNvbHVtbikgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1Db2x1bW5zLnB1c2goY29sdW1uLmtleSk7XHJcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5wdXNoKGNvbHVtbi5rZXkpO1xyXG4gICAgICB0aGlzLmNvbHVtbnNbY29sdW1uLmtleV0gPSBjb2x1bW47XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5wdXNoKCdfX3JlbW92ZVJvdycpO1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LnJlb3JkZXIpIHtcclxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goJ3Bvc2l0aW9uJyk7XHJcbiAgICB9XHJcbiAgICBpbnN0YW5jZS52aWV3Q29udGFpbmVyID0gKGNvbXBvbmVudCkgPT4ge1xyXG4gICAgICBsZXQgdmlld0NvbnRhaW5lcjtcclxuICAgICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmRpc2FibGVkKSB7XHJcbiAgICAgICAgY29tcG9uZW50LmNvbXBvbmVudC5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy52aWV3Q29udGFpbmVycy5mb3JFYWNoKChjb250YWluZXIpID0+IHtcclxuICAgICAgICBjb25zdCB0ZCA9IGNvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjb21wb25lbnQucm93SW5kZXggPT09IHBhcnNlSW50KHRkLmdldEF0dHJpYnV0ZSgncm93SW5kZXgnKSwgMTApICYmXHJcbiAgICAgICAgICBjb21wb25lbnQuY29tcG9uZW50LmtleSA9PT0gdGQuZ2V0QXR0cmlidXRlKCdjb21wb25lbnQnKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdmlld0NvbnRhaW5lciA9IGNvbnRhaW5lcjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIHZpZXdDb250YWluZXIgPyB2aWV3Q29udGFpbmVyIDogbnVsbDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBhZGRBbm90aGVyKCkge1xyXG4gICAgdGhpcy5jaGVja1Jvd3NOdW1iZXIoKTtcclxuICAgIHRoaXMuaW5zdGFuY2UuYWRkUm93KCk7XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoIDwgdGhpcy5pbnN0YW5jZS5yb3dzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5wdXNoKHt9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhXTtcclxuICB9XHJcblxyXG4gIGNoZWNrUm93c051bWJlcigpIHtcclxuICAgIHdoaWxlICh0aGlzLmluc3RhbmNlLnJvd3MubGVuZ3RoIDwgdGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuYWRkUm93KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVSb3coaW5kZXgpIHtcclxuICAgIGxldCBtZXNzYWdlID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBwcm9kdWN0Pyc7XHJcbiAgICBsZXQgc2hvd0J1dHRvbiA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlPy5kYXRhPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgbWVzc2FnZSA9ICdQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBwcm9kdWN0Lic7XHJcbiAgICAgIHNob3dCdXR0b24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgd2lkdGg6ICc5MCUnLFxyXG4gICAgICBtYXhXaWR0aDogJzQwMHB4JyxcclxuICAgICAgZGF0YTogeyBtZXNzYWdlOiBtZXNzYWdlLCBidXR0b25TdGF0dXM6IHNob3dCdXR0b24gfVxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIC8vIFVzZXIgY29uZmlybWVkLCBwcm9jZWVkIHdpdGggZGVsZXRpb25cclxuICAgICAgICB0aGlzLmluc3RhbmNlLnJlbW92ZVJvdyhpbmRleCk7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2UuZGF0YV07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZHJvcFRhYmxlKGV2ZW50OiBDZGtEcmFnRHJvcDxhbnk+KSB7XHJcbiAgICBjb25zdCBwcmV2SW5kZXggPSB0aGlzLmRhdGFTb3VyY2UuZGF0YS5maW5kSW5kZXgoKGQpID0+IGQgPT09IGV2ZW50Lml0ZW0uZGF0YSk7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5jb250cm9sLnZhbHVlLCBwcmV2SW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XHJcbiAgICB0aGlzLnJlbmRlckNvbXBvbmVudHMoKTtcclxuICB9XHJcblxyXG4gIHJlbmRlckNvbXBvbmVudHMoKSB7XHJcbiAgICB0aGlzLmluc3RhbmNlLmdldFJvd3MoKTtcclxuICAgIHRoaXMuaW5zdGFuY2Uuc2V0VmFsdWUodGhpcy5jb250cm9sLnZhbHVlIHx8IFtdKTtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlKHZhbHVlOiBbXSB8IG51bGwpIHtcclxuICAgIGNvbnN0IGdyaWRMZW5ndGggPSB2YWx1ZSA/IHZhbHVlLmxlbmd0aCA6IDA7XHJcblxyXG4gICAgd2hpbGUgKHRoaXMuaW5zdGFuY2Uucm93cy5sZW5ndGggPCBncmlkTGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuYWRkQW5vdGhlcigpO1xyXG4gICAgICB0aGlzLmluc3RhbmNlLmRhdGFWYWx1ZSA9IHZhbHVlO1xyXG4gICAgICB0aGlzLmluc3RhbmNlLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXZhbHVlICYmIHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmNsZWFyT25IaWRlKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy5pbnN0YW5jZS5kZWZhdWx0VmFsdWUpO1xyXG4gICAgfVxyXG4gICAgc3VwZXIuc2V0VmFsdWUodmFsdWUpO1xyXG4gIH1cclxufVxyXG5EYXRhR3JpZENvbXBvbmVudC5NYXRlcmlhbENvbXBvbmVudCA9IE1hdGVyaWFsRGF0YUdyaWRDb21wb25lbnQ7XHJcbmV4cG9ydCB7IERhdGFHcmlkQ29tcG9uZW50IH07XHJcbiJdfQ==
457
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJlbmRlci1tYXRlcmlhbC1mb3Jtcy9zcmMvbGliL2NvbXBvbmVudHMvZGF0YWdyaWQvZGF0YWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0MsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JFLE9BQU8saUJBQWlCLE1BQU0sMENBQTBDLENBQUM7QUFDekUsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7Ozs7Ozs7Ozs7QUFNdEYsTUFBTSxZQUFZLEdBQWMsRUFDL0IsQ0FBQztBQStIRixNQUFNLE9BQU8seUJBQTBCLFNBQVEsdUJBQXVCO0lBRXBFLFlBQW1CLE9BQW1CLEVBQVMsR0FBc0IsRUFBVSxNQUFpQjtRQUM5RixLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBREgsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVUsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQU1oRyxlQUFVLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3RDLGtCQUFhLEdBQUcsWUFBWSxDQUFDO1FBQzdCLHdCQUFtQixHQUFhLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hHLHlCQUFvQixHQUFZLEtBQUss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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1SFQ7MkZBS1UseUJBQXlCO2tCQTlIckMsU0FBUzsrQkFDRSxxQkFBcUIsWUFDckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUhUOztBQXlOSCxpQkFBaUIsQ0FBQyxpQkFBaUIsR0FBRyx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZURhdGFTb3VyY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IE1hdGVyaWFsTmVzdGVkQ29tcG9uZW50IH0gZnJvbSAnLi4vTWF0ZXJpYWxOZXN0ZWRDb21wb25lbnQnO1xyXG5pbXBvcnQgRGF0YUdyaWRDb21wb25lbnQgZnJvbSAnZm9ybWlvanMvY29tcG9uZW50cy9kYXRhZ3JpZC9EYXRhR3JpZC5qcyc7XHJcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkZE9uUHJvZHVjdHNDb21wb25lbnQgfSBmcm9tICcuLi9hZGQtb24tcHJvZHVjdHMvYWRkLW9uLXByb2R1Y3RzLmNvbXBvbmVudCc7XHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJvZHVjdCB7XHJcbiAgcHJvZHVjdE5hbWU6IHN0cmluZztcclxuICBxdWFudGl0eTogbnVtYmVyO1xyXG4gIHByaWNlOiBudW1iZXI7XHJcbn1cclxuY29uc3QgRUxFTUVOVF9EQVRBOiBQcm9kdWN0W10gPSBbXHJcbl07XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbWF0LWZvcm1pby1kYXRhZ3JpZCcsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxtYXQtZm9ybWlvLWZvcm0tZmllbGQgW2luc3RhbmNlXT1cImluc3RhbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBvbmVudFRlbXBsYXRlXT1cImNvbXBvbmVudFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsVGVtcGxhdGVdPVwibGFiZWxUZW1wbGF0ZVwiXHJcbiAgICA+PC9tYXQtZm9ybWlvLWZvcm0tZmllbGQ+XHJcbiAgICA8bmctdGVtcGxhdGUgI2NvbXBvbmVudFRlbXBsYXRlIGxldC1oYXNMYWJlbD5cclxuICAgICAgPG1hdC1jYXJkIGZ4RmlsbD5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzTGFiZWxcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsYWJlbFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XHJcbiAgICAgICAgICA8bWF0LWNhcmQtYWN0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImluc3RhbmNlLmhhc0FkZEJ1dHRvbigpICYmIChpbnN0YW5jZS5jb21wb25lbnQuYWRkQW5vdGhlclBvc2l0aW9uID09PSAnYm90aCcgfHwgaW5zdGFuY2UuY29tcG9uZW50LmFkZEFub3RoZXJQb3NpdGlvbiA9PT0gJ3RvcCcpXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImFkZEFub3RoZXIoKVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIHt7aW5zdGFuY2UuY29tcG9uZW50LmFkZEFub3RoZXIgfHwgJ0FkZCBBbm90aGVyJ319XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dOZXdQcm9kdWN0UGlja2VyXCI+XHJcbjxkaXYgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXo4XCI+XHJcbiAgICAgICAgICA8dGFibGVcclxuICAgICAgICAgICAgICAgICAgbWF0LXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejhcIlxyXG4gICAgICAgICAgICAgICAgICBmeEZpbGxcclxuICAgICAgICAgICAgICAgICAgY2RrRHJvcExpc3RcclxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJkYXRhU291cmNlXCJcclxuICAgICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wVGFibGUoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBmb3JtQ29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj57eyBnZXRDb2x1bW5MYWJlbChjb2x1bW5zW2NvbHVtbl0pIH19PC90aD5cclxuICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaSA9IGluZGV4O1wiIFthdHRyLnJvd0luZGV4XT1cImlcIiBbYXR0ci5jb21wb25lbnRdPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NvbXBvbmVudHM+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJfX3JlbW92ZVJvd1wiPlxyXG4gICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+PC90aD5cclxuICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgaSA9IGluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uICpuZ0lmPVwiaW5zdGFuY2UuaGFzUmVtb3ZlQnV0dG9ucygpXCIgKGNsaWNrKT1cInJlbW92ZVJvdyhpKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gYXJpYS1oaWRkZW49XCJmYWxzZVwiIGFyaWEtbGFiZWw9XCJSZW1vdmUgcm93XCI+ZGVsZXRlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInBvc2l0aW9uXCIgKm5nSWY9XCJpbnN0YW5jZS5jb21wb25lbnQucmVvcmRlclwiPlxyXG4gICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IE5vLjwvdGg+XHJcbiAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjZGtEcmFnSGFuZGxlPnJlb3JkZXI8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaW5zdGFuY2U/LmNvbXBvbmVudD8ucmVvcmRlclwiPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImRhdGFncmlkLXJvd1wiIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCIgY2RrRHJhZ1xyXG4gICAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwicm93XCI+PC90cj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaW5zdGFuY2U/LmNvbXBvbmVudD8ucmVvcmRlclwiPlxyXG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cImRhdGFncmlkLXJvd1wiIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7XCI+PC90cj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZU5ld1wiIGNsYXNzPVwibWF0LXRhYmxlXCIgKm5nSWY9XCJkYXRhU291cmNlTmV3Lmxlbmd0aCA+IDAgJiYgc2hvd05ld1Byb2R1Y3RQaWNrZXI7IGVsc2Ugbm9EYXRhXCIgPlxyXG4gICAgPCEtLSBQcm9kdWN0IE5hbWUgQ29sdW1uIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwcm9kdWN0TmFtZVwiPlxyXG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBQcm9kdWN0IE5hbWUgPC90aD5cclxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj4ge3tlbGVtZW50LnRleHR9fSA8L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLSBRdWFudGl0eSBDb2x1bW4gLS0+XHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInF1YW50aXR5XCIgKm5nSWY9XCJzaG93UXVhbnRpdHlcIj5cclxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gUXVhbnRpdHkgPC90aD5cclxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj4ge3tlbGVtZW50LnF1YW50aXR5fX0gPC90ZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0gUHJpY2UgQ29sdW1uIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJwcmljZVwiICpuZ0lmPVwic2hvd1ByaWNlXCI+XHJcbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IFByaWNlIDwvdGg+XHJcbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+IHt7ZWxlbWVudC5wcmljZX19IDwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgPCEtLSBDYXRlZ29yeSBDb2x1bW4gLS0+XHJcbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNhdGVnb3J5XCIgKm5nSWY9XCJzaG93Q2F0ZWdvcnlcIj5cclxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj4gQ2F0ZWdvcnkgPC90aD5cclxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj4ge3tlbGVtZW50LmNhdGVnb3J5fX0gPC90ZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIENhdGVnb3J5IENvbHVtbiAtLT5cclxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3ViQ2F0ZWdvcnlcIiAqbmdJZj1cInNob3dTdWJjYXRlZ29yeVwiPlxyXG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiBTdWIgQ2F0ZWdvcnkgPC90aD5cclxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj4ge3tlbGVtZW50LnN1YkNhdGVnb3J5fX0gPC90ZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc05ld1wiPjwvdHI+XHJcbiAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc05ldztcIj48L3RyPlxyXG4gIDwvdGFibGU+XHJcbiAgPG5nLXRlbXBsYXRlICNub0RhdGE+XHJcbiAgPGRpdiBjbGFzcz1cIm5vLWRhdGEtbWVzc2FnZVwiICpuZ0lmPVwic2hvd05ld1Byb2R1Y3RQaWNrZXJcIj5cclxuICAgICAgTm8gcHJvZHVjdCBmb3VuZCBwbGVhc2UgYWRkIHNvbWUgcHJvZHVjdHMuXHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcblxyXG4gICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cclxuICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucyAqbmdJZj1cImluc3RhbmNlLmhhc0FkZEJ1dHRvbigpICYmIGluc3RhbmNlLmNvbXBvbmVudC5hZGRBbm90aGVyUG9zaXRpb24gIT09ICd0b3AnXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJhZGRBbm90aGVyKClcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIHt7aW5zdGFuY2UuY29tcG9uZW50LmFkZEFub3RoZXIgfHwgJ0FkZCBBbm90aGVyJ319XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L21hdC1jYXJkLWFjdGlvbnM+XHJcbiAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cclxuICAgICAgPG1hdC1jYXJkLXRpdGxlPlxyXG4gICAgICAgIDxzcGFuIFtpbnN0YW5jZV09XCJpbnN0YW5jZVwiIG1hdEZvcm1pb0xhYmVsPjwvc3Bhbj5cclxuICAgICAgPC9tYXQtY2FyZC10aXRsZT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtcclxuICAgICcuZGF0YWdyaWQtcm93IHsgaGVpZ2h0OiBhdXRvOyB9IC5tYXQtdGFibGV7IHdpZHRoOiAxMDAlIH0gLm1hdC1oZWFkZXItY2VsbCwgLm1hdC1jZWxseyBwYWRkaW5nOiA4cHggfSAubm8tZGF0YS1tZXNzYWdlIHt0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjogMjBweCAwOyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICM4ODg7fSdcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbERhdGFHcmlkQ29tcG9uZW50IGV4dGVuZHMgTWF0ZXJpYWxOZXN0ZWRDb21wb25lbnQge1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZiwgcHVibGljIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2cpIHtcclxuICAgIHN1cGVyKGVsZW1lbnQsIHJlZik7XHJcbiAgfVxyXG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdO1xyXG4gIGZvcm1Db2x1bW5zOiBzdHJpbmdbXTtcclxuICBjb2x1bW5zOiBhbnk7XHJcbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoKTtcclxuICBkYXRhU291cmNlTmV3ID0gRUxFTUVOVF9EQVRBO1xyXG4gIGRpc3BsYXllZENvbHVtbnNOZXc6IHN0cmluZ1tdID0gWydwcm9kdWN0TmFtZScsICdjYXRlZ29yeScsICdzdWJDYXRlZ29yeScsICdxdWFudGl0eScsICdwcmljZSddO1xyXG4gIHNob3dOZXdQcm9kdWN0UGlja2VyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0NhdGVnb3J5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd1N1YmNhdGVnb3J5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd1ByaWNlOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93UXVhbnRpdHk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGNhdGVnb3J5OiBzdHJpbmcgPSAnJztcclxuICBzdWJDYXRlZ29yeTogc3RyaW5nID0gJyc7XHJcbiAgaGFzSW5pdGlhbGl6ZWQ6IGJvb2xlYW49IGZhbHNlO1xyXG4gIGdldENvbHVtbkxhYmVsKGNvbHVtbikge1xyXG4gICAgcmV0dXJuIGNvbHVtbi5sYWJlbCB8fCBjb2x1bW4ua2V5O1xyXG4gIH1cclxuXHJcbiAgY2hlY2tJc0F0dHJpYnV0ZVRydWUobmV3UHJvZHVjdFBpY2tlckZsYWcsIGF0dHJpYnV0ZU5hbWUpIHtcclxuICAgIHJldHVybiBuZXdQcm9kdWN0UGlja2VyRmxhZyAmJiBPYmplY3Qua2V5cyhuZXdQcm9kdWN0UGlja2VyRmxhZykuc29tZShrZXkgPT5cclxuICAgICAga2V5LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICBuZXdQcm9kdWN0UGlja2VyRmxhZ1trZXldLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gIC8vIH1cclxuXHJcbiAgc2V0SW5zdGFuY2UoaW5zdGFuY2U6IGFueSkge1xyXG4gICAgY29uc3QgbmV3UHJvZHVjdFBpY2tlckZsYWcgPSBpbnN0YW5jZT8uY29tcG9uZW50Py5hdHRyaWJ1dGVzO1xyXG4gICAgdGhpcy5zaG93TmV3UHJvZHVjdFBpY2tlciA9IHRoaXMuY2hlY2tJc0F0dHJpYnV0ZVRydWUobmV3UHJvZHVjdFBpY2tlckZsYWcsIFwibmV3cHJvZHVjdHBpY2tlclwiKTtcclxuICAgIHRoaXMuc2hvd0NhdGVnb3J5ID0gdGhpcy5jaGVja0lzQXR0cmlidXRlVHJ1ZShuZXdQcm9kdWN0UGlja2VyRmxhZywgXCJzaG93Q2F0ZWdvcnlcIik7XHJcbiAgICB0aGlzLnNob3dTdWJjYXRlZ29yeSA9IHRoaXMuY2hlY2tJc0F0dHJpYnV0ZVRydWUobmV3UHJvZHVjdFBpY2tlckZsYWcsIFwic2hvd1N1YmNhdGVnb3J5XCIpO1xyXG4gICAgdGhpcy5zaG93UHJpY2UgPSB0aGlzLmNoZWNrSXNBdHRyaWJ1dGVUcnVlKG5ld1Byb2R1Y3RQaWNrZXJGbGFnLCBcInNob3dQcmljZVwiKTtcclxuICAgIHRoaXMuc2hvd1F1YW50aXR5ID0gdGhpcy5jaGVja0lzQXR0cmlidXRlVHJ1ZShuZXdQcm9kdWN0UGlja2VyRmxhZywgXCJzaG93UXVhbnRpdHlcIik7XHJcbiAgICBzdXBlci5zZXRJbnN0YW5jZShpbnN0YW5jZSk7XHJcbiAgICBpZiAodGhpcy5zaG93TmV3UHJvZHVjdFBpY2tlciAmJiAhdGhpcy5oYXNJbml0aWFsaXplZCkge1xyXG4gICAgICBpZiAoIXRoaXMuc2hvd0NhdGVnb3J5KSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDb2x1bW4oJ2NhdGVnb3J5Jyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCF0aGlzLnNob3dRdWFudGl0eSkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQ29sdW1uKCdxdWFudGl0eScpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5zaG93UHJpY2UpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUNvbHVtbigncHJpY2UnKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuc2hvd1N1YmNhdGVnb3J5KSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDb2x1bW4oJ3N1YkNhdGVnb3J5Jyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kYXRhU291cmNlTmV3ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2VsZWN0ZWRQcm9kdWN0cycpKSB8fCBbXTtcclxuICAgICAgLy8gU2V0IGZsYWcgdG8gdHJ1ZSB0byBwcmV2ZW50IGZ1cnRoZXIgZXhlY3V0aW9uXHJcbiAgICAgIHRoaXMuaGFzSW5pdGlhbGl6ZWQgPSB0cnVlOyBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gaW5zdGFuY2UuZGF0YVZhbHVlO1xyXG4gICAgfVxyXG4gXHJcbiAgICB0aGlzLmNvbHVtbnMgPSB7fTtcclxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IFtdO1xyXG4gICAgdGhpcy5mb3JtQ29sdW1ucyA9IFtdO1xyXG4gICAgaW5zdGFuY2UuZ2V0Q29sdW1ucygpLm1hcCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbHVtbnMucHVzaChjb2x1bW4ua2V5KTtcclxuICAgICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goY29sdW1uLmtleSk7XHJcbiAgICAgIHRoaXMuY29sdW1uc1tjb2x1bW4ua2V5XSA9IGNvbHVtbjtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5kaXNwbGF5ZWRDb2x1bW5zLnB1c2goJ19fcmVtb3ZlUm93Jyk7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQucmVvcmRlcikge1xyXG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCgncG9zaXRpb24nKTtcclxuICAgIH1cclxuICAgIGluc3RhbmNlLnZpZXdDb250YWluZXIgPSAoY29tcG9uZW50KSA9PiB7XHJcbiAgICAgIGxldCB2aWV3Q29udGFpbmVyO1xyXG4gICAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQuZGlzYWJsZWQpIHtcclxuICAgICAgICBjb21wb25lbnQuY29tcG9uZW50LmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnZpZXdDb250YWluZXJzLmZvckVhY2goKGNvbnRhaW5lcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRkID0gY29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGNvbXBvbmVudC5yb3dJbmRleCA9PT0gcGFyc2VJbnQodGQuZ2V0QXR0cmlidXRlKCdyb3dJbmRleCcpLCAxMCkgJiZcclxuICAgICAgICAgIGNvbXBvbmVudC5jb21wb25lbnQua2V5ID09PSB0ZC5nZXRBdHRyaWJ1dGUoJ2NvbXBvbmVudCcpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB2aWV3Q29udGFpbmVyID0gY29udGFpbmVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gdmlld0NvbnRhaW5lciA/IHZpZXdDb250YWluZXIgOiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUNvbHVtbihjb2x1bW5OYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlzcGxheWVkQ29sdW1uc05ldyA9IHRoaXMuZGlzcGxheWVkQ29sdW1uc05ldy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbiAhPT0gY29sdW1uTmFtZSk7XHJcbiAgfVxyXG5cclxuICBhZGRBbm90aGVyT2xkKCkge1xyXG4gICAgdGhpcy5jaGVja1Jvd3NOdW1iZXIoKTtcclxuICAgIHRoaXMuaW5zdGFuY2UuYWRkUm93KCk7XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlLmRhdGEubGVuZ3RoIDwgdGhpcy5pbnN0YW5jZS5yb3dzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5wdXNoKHt9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhXTtcclxuICB9XHJcblxyXG4gIGFkZEFub3RoZXIoKSB7XHJcbiAgICBpZiAodGhpcy5zaG93TmV3UHJvZHVjdFBpY2tlcikge1xyXG4gICAgICBjb25zdCBzYXZlZERhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzYXZlQ2F0JykpO1xyXG4gICAgICAvLyBVc2Ugb3B0aW9uYWwgY2hhaW5pbmcgYW5kIG51bGxpc2ggY29hbGVzY2luZyB0byBzZXQgdGhlIHZhbHVlc1xyXG4gICAgICB0aGlzLmNhdGVnb3J5ID0gc2F2ZWREYXRhPy5jYXRlZ29yeSA/PyB0aGlzLmNhdGVnb3J5O1xyXG4gICAgICB0aGlzLnN1YkNhdGVnb3J5ID0gc2F2ZWREYXRhPy5zdWJDYXRlZ29yeSA/PyB0aGlzLnN1YkNhdGVnb3J5O1xyXG4gICAgICBjb25zdCBkaW9sb2dlUmVmID0gdGhpcy5kaWFsb2cub3BlbihBZGRPblByb2R1Y3RzQ29tcG9uZW50LCB7XHJcbiAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgIHdpZHRoOiAnOTAlJyxcclxuICAgICAgICBtYXhXaWR0aDogJzkwMHB4JyxcclxuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgIGRhdGE6IHsgYXR0cmlidXRlc0ZsYWc6IHsgc2hvd05ld1Byb2R1Y3RQaWNrZXI6IHRoaXMuc2hvd05ld1Byb2R1Y3RQaWNrZXIsIHNob3dDYXRlZ29yeTogdGhpcy5zaG93Q2F0ZWdvcnksIHNob3dTdWJjYXRlZ29yeTogdGhpcy5zaG93U3ViY2F0ZWdvcnksIHNob3dQcmljZTogdGhpcy5zaG93UHJpY2UsIHNob3dRdWFudGl0eTogdGhpcy5zaG93UXVhbnRpdHkgfSwgc2VsZWN0ZWRQcm9kdWN0czogdGhpcy5kYXRhU291cmNlTmV3LCBjYXRlZ29yeTogdGhpcy5jYXRlZ29yeSwgc3ViQ2F0ZWdvcnk6IHRoaXMuc3ViQ2F0ZWdvcnkgfVxyXG4gICAgICB9KVxyXG4gICAgICAgIC5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LmRhdGE/LnN0YXR1cykge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd0NhdGVnb3J5KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb2x1bW4oJ2NhdGVnb3J5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnNob3dRdWFudGl0eSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlQ29sdW1uKCdxdWFudGl0eScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zaG93UHJpY2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUNvbHVtbigncHJpY2UnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvd1N1YmNhdGVnb3J5KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDb2x1bW4oJ3N1YkNhdGVnb3J5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWxlY3RlZFByb2R1Y3RzJywgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YS5pdGVtcy5zZWxlY3RlZFByb2R1Y3RzKSlcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlTmV3ID0gcmVzcG9uc2UuZGF0YS5pdGVtcy5zZWxlY3RlZFByb2R1Y3RzO1xyXG4gICAgICAgICAgICB0aGlzLmNhdGVnb3J5ID0gcmVzcG9uc2UuZGF0YS5pdGVtcy5wcm9kdWN0Q2F0ZWdvcnk7XHJcbiAgICAgICAgICAgIHRoaXMuc3ViQ2F0ZWdvcnkgPSByZXNwb25zZS5kYXRhLml0ZW1zLnByb2R1Y3RTdWJjYXRlZ29yeTtcclxuICAgICAgICAgICAgY29uc3QgY2F0T2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLmNhdGVnb3J5LFxyXG4gICAgICAgICAgICAgIHN1YkNhdGVnb3J5OiB0aGlzLnN1YkNhdGVnb3J5XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NhdmVDYXQnLCBKU09OLnN0cmluZ2lmeShjYXRPYmplY3QpKTtcclxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5jb21wb25lbnQuZGVmYXVsdFZhbHVlID0gcmVzcG9uc2UuZGF0YS5pdGVtcy5zZWxlY3RlZFByb2R1Y3RzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jaGVja1Jvd3NOdW1iZXIoKTtcclxuICAgICAgdGhpcy5pbnN0YW5jZS5hZGRSb3coKTtcclxuICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA8IHRoaXMuaW5zdGFuY2Uucm93cy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5wdXNoKHt9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFsuLi50aGlzLmRhdGFTb3VyY2UuZGF0YV07XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgY2hlY2tSb3dzTnVtYmVyKCkge1xyXG4gICAgd2hpbGUgKHRoaXMuaW5zdGFuY2Uucm93cy5sZW5ndGggPCB0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5pbnN0YW5jZS5hZGRSb3coKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVJvdyhpbmRleCkge1xyXG4gICAgbGV0IG1lc3NhZ2UgPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHByb2R1Y3Q/JztcclxuICAgIGxldCBzaG93QnV0dG9uID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBtZXNzYWdlID0gJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIHByb2R1Y3QuJztcclxuICAgICAgc2hvd0J1dHRvbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIHtcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICB3aWR0aDogJzkwJScsXHJcbiAgICAgIG1heFdpZHRoOiAnNDAwcHgnLFxyXG4gICAgICBkYXRhOiB7IG1lc3NhZ2U6IG1lc3NhZ2UsIGJ1dHRvblN0YXR1czogc2hvd0J1dHRvbiB9XHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgLy8gVXNlciBjb25maXJtZWQsIHByb2NlZWQgd2l0aCBkZWxldGlvblxyXG4gICAgICAgIHRoaXMuaW5zdGFuY2UucmVtb3ZlUm93KGluZGV4KTtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gWy4uLnRoaXMuZGF0YVNvdXJjZS5kYXRhXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkcm9wVGFibGUoZXZlbnQ6IENka0RyYWdEcm9wPGFueT4pIHtcclxuICAgIGNvbnN0IHByZXZJbmRleCA9IHRoaXMuZGF0YVNvdXJjZS5kYXRhLmZpbmRJbmRleCgoZCkgPT4gZCA9PT0gZXZlbnQuaXRlbS5kYXRhKTtcclxuICAgIG1vdmVJdGVtSW5BcnJheSh0aGlzLmNvbnRyb2wudmFsdWUsIHByZXZJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICAgIHRoaXMucmVuZGVyQ29tcG9uZW50cygpO1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyQ29tcG9uZW50cygpIHtcclxuICAgIHRoaXMuaW5zdGFuY2UuZ2V0Um93cygpO1xyXG4gICAgdGhpcy5pbnN0YW5jZS5zZXRWYWx1ZSh0aGlzLmNvbnRyb2wudmFsdWUgfHwgW10pO1xyXG4gIH1cclxuXHJcbiAgc2V0VmFsdWUodmFsdWU6IFtdIHwgbnVsbCkge1xyXG4gICAgY29uc3QgZ3JpZExlbmd0aCA9IHZhbHVlID8gdmFsdWUubGVuZ3RoIDogMDtcclxuICAgXHJcbiAgICB3aGlsZSAodGhpcy5pbnN0YW5jZS5yb3dzLmxlbmd0aCA8IGdyaWRMZW5ndGgpIHtcclxuICAgICAgdGhpcy5hZGRBbm90aGVyKCk7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2UuZGF0YVZhbHVlID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuaW5zdGFuY2Uuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdmFsdWUgJiYgdGhpcy5pbnN0YW5jZS5jb21wb25lbnQuY2xlYXJPbkhpZGUpIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZSh0aGlzLmluc3RhbmNlLmRlZmF1bHRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgfVxyXG59XHJcbkRhdGFHcmlkQ29tcG9uZW50Lk1hdGVyaWFsQ29tcG9uZW50ID0gTWF0ZXJpYWxEYXRhR3JpZENvbXBvbmVudDtcclxuZXhwb3J0IHsgRGF0YUdyaWRDb21wb25lbnQgfTtcclxuIl19