valtech-components 4.0.462 → 4.0.463
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.
- package/esm2022/lib/components/organisms/mini-games/chessimals-challenge-progress.service.mjs +55 -1
- package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +68 -5
- package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +3 -1
- package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +124 -5
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/mini-games/chessimals-challenge-progress.service.d.ts +5 -1
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +5 -2
- package/lib/components/organisms/mini-games/types.d.ts +7 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
package/esm2022/lib/components/organisms/mini-games/chessimals-challenge-progress.service.mjs
CHANGED
|
@@ -5,6 +5,7 @@ import { Observable, of } from 'rxjs';
|
|
|
5
5
|
import { FirebaseService } from '../../../services/firebase/firebase.service';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
const EMPTY_POWERS = { eagle: 0, bull: 0, kangaroo: 0, lion: 0 };
|
|
8
|
+
const EMPTY_MODE_RECORD = { played: 0, wins: 0, losses: 0 };
|
|
8
9
|
const LOCAL_ACTIVE_RUN_KEY = 'chessimals.challenge.activeRun';
|
|
9
10
|
export class ChessimalsChallengeProgressService {
|
|
10
11
|
constructor() {
|
|
@@ -92,11 +93,29 @@ export class ChessimalsChallengeProgressService {
|
|
|
92
93
|
},
|
|
93
94
|
powerCaptures: current.powerCaptures + args.roundStats.powerCaptures,
|
|
94
95
|
promotions: current.promotions + args.roundStats.promotions,
|
|
96
|
+
modeStats: {
|
|
97
|
+
...current.modeStats,
|
|
98
|
+
challenge: this.addModeResult(current.modeStats.challenge, args.won),
|
|
99
|
+
},
|
|
95
100
|
updatedAt: new Date().toISOString(),
|
|
96
101
|
};
|
|
97
102
|
await setDoc(this.statsRef(uid), { ...next, updatedAtServer: serverTimestamp() }, { merge: true });
|
|
98
103
|
await this.saveRun(args.run);
|
|
99
104
|
}
|
|
105
|
+
async recordModeResult(mode, won) {
|
|
106
|
+
const uid = await this.ensureUser();
|
|
107
|
+
const current = await this.readStats(uid);
|
|
108
|
+
await setDoc(this.statsRef(uid), {
|
|
109
|
+
...current,
|
|
110
|
+
userId: uid,
|
|
111
|
+
modeStats: {
|
|
112
|
+
...current.modeStats,
|
|
113
|
+
[mode]: this.addModeResult(current.modeStats[mode], won),
|
|
114
|
+
},
|
|
115
|
+
updatedAt: new Date().toISOString(),
|
|
116
|
+
updatedAtServer: serverTimestamp(),
|
|
117
|
+
}, { merge: true });
|
|
118
|
+
}
|
|
100
119
|
emptyStats() {
|
|
101
120
|
return {
|
|
102
121
|
challengesPlayed: 0,
|
|
@@ -109,6 +128,7 @@ export class ChessimalsChallengeProgressService {
|
|
|
109
128
|
powersUsed: { ...EMPTY_POWERS },
|
|
110
129
|
powerCaptures: 0,
|
|
111
130
|
promotions: 0,
|
|
131
|
+
modeStats: this.emptyModeStats(),
|
|
112
132
|
};
|
|
113
133
|
}
|
|
114
134
|
async readStats(uid) {
|
|
@@ -126,6 +146,40 @@ export class ChessimalsChallengeProgressService {
|
|
|
126
146
|
...EMPTY_POWERS,
|
|
127
147
|
...(value.powersUsed ?? {}),
|
|
128
148
|
},
|
|
149
|
+
modeStats: this.normalizeModeStats(value),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
addModeResult(current, won) {
|
|
153
|
+
return {
|
|
154
|
+
played: current.played + 1,
|
|
155
|
+
wins: current.wins + (won ? 1 : 0),
|
|
156
|
+
losses: current.losses + (won ? 0 : 1),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
emptyModeStats() {
|
|
160
|
+
return {
|
|
161
|
+
challenge: { ...EMPTY_MODE_RECORD },
|
|
162
|
+
bot: { ...EMPTY_MODE_RECORD },
|
|
163
|
+
online: { ...EMPTY_MODE_RECORD },
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
normalizeModeStats(value) {
|
|
167
|
+
const empty = this.emptyModeStats();
|
|
168
|
+
return {
|
|
169
|
+
challenge: {
|
|
170
|
+
...empty.challenge,
|
|
171
|
+
played: value.modeStats?.challenge?.played ?? ((value.totalWins ?? 0) + (value.totalLosses ?? 0)),
|
|
172
|
+
wins: value.modeStats?.challenge?.wins ?? (value.totalWins ?? 0),
|
|
173
|
+
losses: value.modeStats?.challenge?.losses ?? (value.totalLosses ?? 0),
|
|
174
|
+
},
|
|
175
|
+
bot: {
|
|
176
|
+
...empty.bot,
|
|
177
|
+
...(value.modeStats?.bot ?? {}),
|
|
178
|
+
},
|
|
179
|
+
online: {
|
|
180
|
+
...empty.online,
|
|
181
|
+
...(value.modeStats?.online ?? {}),
|
|
182
|
+
},
|
|
129
183
|
};
|
|
130
184
|
}
|
|
131
185
|
async ensureUser() {
|
|
@@ -184,4 +238,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
184
238
|
type: Injectable,
|
|
185
239
|
args: [{ providedIn: 'root' }]
|
|
186
240
|
}] });
|
|
187
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1jaGFsbGVuZ2UtcHJvZ3Jlc3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9jaGVzc2ltYWxzLWNoYWxsZW5nZS1wcm9ncmVzcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixHQUFHLEVBQ0gsTUFBTSxFQUNOLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxFQUNQLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLEtBQUssR0FDTixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFPOUUsTUFBTSxZQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakUsTUFBTSxvQkFBb0IsR0FBRyxnQ0FBZ0MsQ0FBQztBQUc5RCxNQUFNLE9BQU8sa0NBQWtDO0lBRC9DO1FBRW1CLGlCQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztLQTRNckQ7SUExTUMsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFD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QixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGdEQUFnRDtRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFvQyxLQUFRO1FBQ2xFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN4RCxJQUFJLEtBQUssS0FBSyxTQUFTO2dCQUFFLEdBQUcsQ0FBQyxHQUFjLENBQUMsR0FBRyxLQUFtQixDQUFDO1lBQ25FLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQU8sQ0FBQyxDQUFDO0lBQ2QsQ0FBQzsrR0E5TVUsa0NBQWtDO21IQUFsQyxrQ0FBa0MsY0FEckIsTUFBTTs7NEZBQ25CLGtDQUFrQztrQkFEOUMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGggfSBmcm9tICdAYW5ndWxhci9maXJlL2F1dGgnO1xuaW1wb3J0IHtcbiAgRmlyZXN0b3JlLFxuICBjb2xsZWN0aW9uLFxuICBkb2MsXG4gIGdldERvYyxcbiAgbGltaXQsXG4gIG9uU25hcHNob3QsXG4gIG9yZGVyQnksXG4gIHF1ZXJ5LFxuICBzZXJ2ZXJUaW1lc3RhbXAsXG4gIHNldERvYyxcbiAgd2hlcmUsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZpcmViYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmViYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2hlc3NpbWFsc0NoYWxsZW5nZVJvdW5kU3RhdHMsXG4gIENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4sXG4gIENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IEVNUFRZX1BPV0VSUyA9IHsgZWFnbGU6IDAsIGJ1bGw6IDAsIGthbmdhcm9vOiAwLCBsaW9uOiAwIH07XG5jb25zdCBMT0NBTF9BQ1RJVkVfUlVOX0tFWSA9ICdjaGVzc2ltYWxzLmNoYWxsZW5nZS5hY3RpdmVSdW4nO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIENoZXNzaW1hbHNDaGFsbGVuZ2VQcm9ncmVzc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcmViYXNlQXV0aCA9IGluamVjdChBdXRoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaXJlc3RvcmUgPSBpbmplY3QoRmlyZXN0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaXJlYmFzZSA9IGluamVjdChGaXJlYmFzZVNlcnZpY2UpO1xuXG4gIGdldCBjdXJyZW50VWlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZWJhc2VBdXRoLmN1cnJlbnRVc2VyPy51aWQ7XG4gIH1cblxuICB3YXRjaFN0YXRzKCk6IE9ic2VydmFibGU8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgdWlkID0gdGhpcy5jdXJyZW50VWlkO1xuICAgIGlmICghdWlkKSByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gb25TbmFwc2hvdChcbiAgICAgICAgdGhpcy5zdGF0c1JlZih1aWQpLFxuICAgICAgICAoc25hcHNob3QpID0+IHN1YnNjcmliZXIubmV4dChcbiAgICAgICAgICBzbmFwc2hvdC5leGlzdHMoKSA/IHRoaXMubm9ybWFsaXplU3RhdHMoc25hcHNob3QuZGF0YSgpIGFzIFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPikgOiB1bmRlZmluZWQsXG4gICAgICAgICksXG4gICAgICAgIChlcnJvcikgPT4gc3Vic2NyaWJlci5lcnJvcihlcnJvciksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICAgIH0pO1xuICB9XG5cbiAgd2F0Y2hSZWNlbnRSdW5zKGxpbWl0Q291bnQgPSA0KTogT2JzZXJ2YWJsZTxDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuW10+IHtcbiAgICBjb25zdCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQ7XG4gICAgaWYgKCF1aWQpIHJldHVybiBvZihbXSk7XG4gICAgY29uc3QgcnVuc1F1ZXJ5ID0gcXVlcnkoXG4gICAgICBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCB0aGlzLnJ1bnNQYXRoKHVpZCkpLFxuICAgICAgb3JkZXJCeSgndXBkYXRlZEF0JywgJ2Rlc2MnKSxcbiAgICAgIGxpbWl0KGxpbWl0Q291bnQpLFxuICAgICk7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBjb25zdCB1bnN1YnNjcmliZSA9IG9uU25hcHNob3QoXG4gICAgICAgIHJ1bnNRdWVyeSxcbiAgICAgICAgKHNuYXBzaG90KSA9PiBzdWJzY3JpYmVyLm5leHQoc25hcHNob3QuZG9jcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0YSgpIGFzIENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4pKSxcbiAgICAgICAgKGVycm9yKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVycm9yKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gICAgfSk7XG4gIH1cblxuICB3YXRjaEFjdGl2ZVJ1bigpOiBPYnNlcnZhYmxlPENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4gfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQ7XG4gICAgaWYgKCF1aWQpIHJldHVybiBvZih0aGlzLnJlYWRMb2NhbEFjdGl2ZVJ1bigpKTtcbiAgICBjb25zdCBhY3RpdmVRdWVyeSA9IHF1ZXJ5KFxuICAgICAgY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgdGhpcy5ydW5zUGF0aCh1aWQpKSxcbiAgICAgIHdoZXJlKCdzdGF0dXMnLCAnPT0nLCAnYWN0aXZlJyksXG4gICAgICBsaW1pdCgxKSxcbiAgICApO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgc3Vic2NyaWJlci5uZXh0KHRoaXMucmVhZExvY2FsQWN0aXZlUnVuKCkpO1xuICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBvblNuYXBzaG90KFxuICAgICAgICBhY3RpdmVRdWVyeSxcbiAgICAgICAgKHNuYXBzaG90KSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuID0gc25hcHNob3QuZG9jc1swXT8uZGF0YSgpIGFzIENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy53cml0ZUxvY2FsQWN0aXZlUnVuKHJ1bik7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJ1bik7XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHN1YnNjcmliZXIubmV4dCh0aGlzLnJlYWRMb2NhbEFjdGl2ZVJ1bigpKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzYXZlUnVuKHJ1bjogQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMud3JpdGVMb2NhbEFjdGl2ZVJ1bihydW4uc3RhdHVzID09PSAnYWN0aXZlJyA/IHJ1biA6IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgYXdhaXQgc2V0RG9jKHRoaXMucnVuUmVmKHVpZCwgcnVuLmlkKSwgdGhpcy53aXRob3V0VW5kZWZpbmVkKHtcbiAgICAgIC4uLnJ1bixcbiAgICAgIHVzZXJJZDogdWlkLFxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB1cGRhdGVkQXRTZXJ2ZXI6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgIH0pLCB7IG1lcmdlOiB0cnVlIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVjb3JkQ2hhbGxlbmdlU3RhcnRlZChydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLndyaXRlTG9jYWxBY3RpdmVSdW4ocnVuKTtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5yZWFkU3RhdHModWlkKTtcbiAgICBhd2FpdCBzZXREb2ModGhpcy5zdGF0c1JlZih1aWQpLCB7XG4gICAgICAuLi5jdXJyZW50LFxuICAgICAgdXNlcklkOiB1aWQsXG4gICAgICBjaGFsbGVuZ2VzUGxheWVkOiBjdXJyZW50LmNoYWxsZW5nZXNQbGF5ZWQgKyAxLFxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB1cGRhdGVkQXRTZXJ2ZXI6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgIH0sIHsgbWVyZ2U6IHRydWUgfSk7XG4gICAgYXdhaXQgdGhpcy5zYXZlUnVuKHJ1bik7XG4gIH1cblxuICBhc3luYyBhcHBseVJvdW5kUmVzdWx0KGFyZ3M6IHtcbiAgICBydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW47XG4gICAgcm91bmRSZWFjaGVkOiBudW1iZXI7XG4gICAgd29uOiBib29sZWFuO1xuICAgIGNvbXBsZXRlZDogYm9vbGVhbjtcbiAgICByb3VuZFN0YXRzOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUm91bmRTdGF0cztcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCB0aGlzLnJlYWRTdGF0cyh1aWQpO1xuICAgIGNvbnN0IG5leHQ6IENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cyA9IHtcbiAgICAgIHVzZXJJZDogdWlkLFxuICAgICAgY2hhbGxlbmdlc1BsYXllZDogY3VycmVudC5jaGFsbGVuZ2VzUGxheWVkLFxuICAgICAgY2hhbGxlbmdlc0NvbXBsZXRlZDogY3VycmVudC5jaGFsbGVuZ2VzQ29tcGxldGVkICsgKGFyZ3MuY29tcGxldGVkID8gMSA6IDApLFxuICAgICAgYmVzdFdpblN0cmVhazogTWF0aC5tYXgoY3VycmVudC5iZXN0V2luU3RyZWFrLCBhcmdzLnJ1bi5iZXN0U3RyZWFrSW5SdW4pLFxuICAgICAgYmVzdFJvdW5kUmVhY2hlZDogTWF0aC5tYXgoY3VycmVudC5iZXN0Um91bmRSZWFjaGVkLCBhcmdzLnJvdW5kUmVhY2hlZCksXG4gICAgICB0b3RhbFdpbnM6IGN1cnJlbnQudG90YWxXaW5zICsgKGFyZ3Mud29uID8gMSA6IDApLFxuICAgICAgdG90YWxMb3NzZXM6IGN1cnJlbnQudG90YWxMb3NzZXMgKyAoYXJncy53b24gPyAwIDogMSksXG4gICAgICBib3RzRGVmZWF0ZWQ6IGN1cnJlbnQuYm90c0RlZmVhdGVkICsgKGFyZ3Mud29uID8gMSA6IDApLFxuICAgICAgcG93ZXJzVXNlZDoge1xuICAgICAgICBlYWdsZTogY3VycmVudC5wb3dlcnNVc2VkLmVhZ2xlICsgYXJncy5yb3VuZFN0YXRzLnBvd2Vyc1VzZWQuZWFnbGUsXG4gICAgICAgIGJ1bGw6IGN1cnJlbnQucG93ZXJzVXNlZC5idWxsICsgYXJncy5yb3VuZFN0YXRzLnBvd2Vyc1VzZWQuYnVsbCxcbiAgICAgICAga2FuZ2Fyb286IGN1cnJlbnQucG93ZXJzVXNlZC5rYW5nYXJvbyArIGFyZ3Mucm91bmRTdGF0cy5wb3dlcnNVc2VkLmthbmdhcm9vLFxuICAgICAgICBsaW9uOiBjdXJyZW50LnBvd2Vyc1VzZWQubGlvbiArIGFyZ3Mucm91bmRTdGF0cy5wb3dlcnNVc2VkLmxpb24sXG4gICAgICB9LFxuICAgICAgcG93ZXJDYXB0dXJlczogY3VycmVudC5wb3dlckNhcHR1cmVzICsgYXJncy5yb3VuZFN0YXRzLnBvd2VyQ2FwdHVyZXMsXG4gICAgICBwcm9tb3Rpb25zOiBjdXJyZW50LnByb21vdGlvbnMgKyBhcmdzLnJvdW5kU3RhdHMucHJvbW90aW9ucyxcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH07XG4gICAgYXdhaXQgc2V0RG9jKHRoaXMuc3RhdHNSZWYodWlkKSwgeyAuLi5uZXh0LCB1cGRhdGVkQXRTZXJ2ZXI6IHNlcnZlclRpbWVzdGFtcCgpIH0sIHsgbWVyZ2U6IHRydWUgfSk7XG4gICAgYXdhaXQgdGhpcy5zYXZlUnVuKGFyZ3MucnVuKTtcbiAgfVxuXG4gIGVtcHR5U3RhdHMoKTogQ2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hhbGxlbmdlc1BsYXllZDogMCxcbiAgICAgIGNoYWxsZW5nZXNDb21wbGV0ZWQ6IDAsXG4gICAgICBiZXN0V2luU3RyZWFrOiAwLFxuICAgICAgYmVzdFJvdW5kUmVhY2hlZDogMCxcbiAgICAgIHRvdGFsV2luczogMCxcbiAgICAgIHRvdGFsTG9zc2VzOiAwLFxuICAgICAgYm90c0RlZmVhdGVkOiAwLFxuICAgICAgcG93ZXJzVXNlZDogeyAuLi5FTVBUWV9QT1dFUlMgfSxcbiAgICAgIHBvd2VyQ2FwdHVyZXM6IDAsXG4gICAgICBwcm9tb3Rpb25zOiAwLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRTdGF0cyh1aWQ6IHN0cmluZyk6IFByb21pc2U8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPiB7XG4gICAgLy8gRmlyZXN0b3JlJ3Mgd2ViIFNESyBkb2VzIG5vdCBuZWVkIGEgdHJhbnNhY3Rpb24gZm9yIHRoZXNlIGNhc3VhbCBnYW1lIHN0YXRzLlxuICAgIC8vIExhc3Qtd3JpdGUtd2lucyBpcyBhY2NlcHRhYmxlIGZvciB0aGlzIGZpcnN0IHZlcnNpb24gYmVjYXVzZSBvbmUgcnVuIGlzIGFjdGl2ZSBwZXIgYnJvd3Nlci5cbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGdldERvYyh0aGlzLnN0YXRzUmVmKHVpZCkpO1xuICAgIHJldHVybiBzbmFwc2hvdC5leGlzdHMoKSA/IHRoaXMubm9ybWFsaXplU3RhdHMoc25hcHNob3QuZGF0YSgpIGFzIFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPikgOiB0aGlzLmVtcHR5U3RhdHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplU3RhdHModmFsdWU6IFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPik6IENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cyB7XG4gICAgY29uc3QgZW1wdHkgPSB0aGlzLmVtcHR5U3RhdHMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZW1wdHksXG4gICAgICAuLi52YWx1ZSxcbiAgICAgIHBvd2Vyc1VzZWQ6IHtcbiAgICAgICAgLi4uRU1QVFlfUE9XRVJTLFxuICAgICAgICAuLi4odmFsdWUucG93ZXJzVXNlZCA/PyB7fSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVVzZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmZpcmViYXNlLndoZW5GaXJlYmFzZUF1dGhSZWFkeSgpO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmZpcmViYXNlQXV0aC5jdXJyZW50VXNlcjtcbiAgICBpZiAodXNlcj8udWlkKSB7XG4gICAgICBhd2FpdCB1c2VyLmdldElkVG9rZW4oKTtcbiAgICAgIHJldHVybiB1c2VyLnVpZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0NIQUxMRU5HRV9MT0dJTl9SRVFVSVJFRCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0c1JlZih1aWQ6IHN0cmluZykge1xuICAgIHJldHVybiBkb2ModGhpcy5maXJlc3RvcmUsIGB1c2Vycy8ke3VpZH0vbWluaUdhbWVzL2NoZXNzaW1hbHMvY2hhbGxlbmdlL3N0YXRzYCk7XG4gIH1cblxuICBwcml2YXRlIHJ1blJlZih1aWQ6IHN0cmluZywgcnVuSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBkb2ModGhpcy5maXJlc3RvcmUsIGAke3RoaXMucnVuc1BhdGgodWlkKX0vJHtydW5JZH1gKTtcbiAgfVxuXG4gIHByaXZhdGUgcnVuc1BhdGgodWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgdXNlcnMvJHt1aWR9L21pbmlHYW1lcy9jaGVzc2ltYWxzL2NoYWxsZW5nZVJ1bnNgO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkTG9jYWxBY3RpdmVSdW4oKTogQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1biB8IHVuZGVmaW5lZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJhdyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKExPQ0FMX0FDVElWRV9SVU5fS0VZKTtcbiAgICAgIGlmICghcmF3KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcnVuID0gSlNPTi5wYXJzZShyYXcpIGFzIENoZXNzaW1hbHNDaGFsbGVuZ2VSdW47XG4gICAgICByZXR1cm4gcnVuLnN0YXR1cyA9PT0gJ2FjdGl2ZScgPyBydW4gOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd3JpdGVMb2NhbEFjdGl2ZVJ1bihydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHJ1bj8uc3RhdHVzID09PSAnYWN0aXZlJykge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMT0NBTF9BQ1RJVkVfUlVOX0tFWSwgSlNPTi5zdHJpbmdpZnkocnVuKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKExPQ0FMX0FDVElWRV9SVU5fS0VZKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIExvY2FsIHBlcnNpc3RlbmNlIGlzIG9ubHkgYSByZWZyZXNoIGZhbGxiYWNrLlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd2l0aG91dFVuZGVmaW5lZDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHZhbHVlOiBUKTogVCB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5yZWR1Y2UoKGFjYywgW2tleSwgZW50cnldKSA9PiB7XG4gICAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCkgYWNjW2tleSBhcyBrZXlvZiBUXSA9IGVudHJ5IGFzIFRba2V5b2YgVF07XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFQpO1xuICB9XG59XG4iXX0=
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1jaGFsbGVuZ2UtcHJvZ3Jlc3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9jaGVzc2ltYWxzLWNoYWxsZW5nZS1wcm9ncmVzcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixHQUFHLEVBQ0gsTUFBTSxFQUNOLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxFQUNQLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLEtBQUssR0FDTixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFROUUsTUFBTSxZQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakUsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsTUFBTSxvQkFBb0IsR0FBRyxnQ0FBZ0MsQ0FBQztBQUc5RCxNQUFNLE9BQU8sa0NBQWtDO0lBRC9DO1FBRW1CLGlCQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7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QVEsRUFBRSxDQUFDO2dCQUM3QixZQUFZLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDaEUsT0FBTztZQUNULENBQUM7WUFDRCxZQUFZLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGdEQUFnRDtRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFvQyxLQUFRO1FBQ2xFLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN4RCxJQUFJLEtBQUssS0FBSyxTQUFTO2dCQUFFLEdBQUcsQ0FBQyxHQUFjLENBQUMsR0FBRyxLQUFtQixDQUFDO1lBQ25FLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQU8sQ0FBQyxDQUFDO0lBQ2QsQ0FBQzsrR0F2UVUsa0NBQWtDO21IQUFsQyxrQ0FBa0MsY0FEckIsTUFBTTs7NEZBQ25CLGtDQUFrQztrQkFEOUMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGggfSBmcm9tICdAYW5ndWxhci9maXJlL2F1dGgnO1xuaW1wb3J0IHtcbiAgRmlyZXN0b3JlLFxuICBjb2xsZWN0aW9uLFxuICBkb2MsXG4gIGdldERvYyxcbiAgbGltaXQsXG4gIG9uU25hcHNob3QsXG4gIG9yZGVyQnksXG4gIHF1ZXJ5LFxuICBzZXJ2ZXJUaW1lc3RhbXAsXG4gIHNldERvYyxcbiAgd2hlcmUsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZpcmViYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmViYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2hlc3NpbWFsc0NoYWxsZW5nZVJvdW5kU3RhdHMsXG4gIENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4sXG4gIENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cyxcbiAgQ2hlc3NpbWFsc1N0YXRzTW9kZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IEVNUFRZX1BPV0VSUyA9IHsgZWFnbGU6IDAsIGJ1bGw6IDAsIGthbmdhcm9vOiAwLCBsaW9uOiAwIH07XG5jb25zdCBFTVBUWV9NT0RFX1JFQ09SRCA9IHsgcGxheWVkOiAwLCB3aW5zOiAwLCBsb3NzZXM6IDAgfTtcbmNvbnN0IExPQ0FMX0FDVElWRV9SVU5fS0VZID0gJ2NoZXNzaW1hbHMuY2hhbGxlbmdlLmFjdGl2ZVJ1bic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ2hlc3NpbWFsc0NoYWxsZW5nZVByb2dyZXNzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlyZWJhc2VBdXRoID0gaW5qZWN0KEF1dGgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcmVzdG9yZSA9IGluamVjdChGaXJlc3RvcmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcmViYXNlID0gaW5qZWN0KEZpcmViYXNlU2VydmljZSk7XG5cbiAgZ2V0IGN1cnJlbnRVaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5maXJlYmFzZUF1dGguY3VycmVudFVzZXI/LnVpZDtcbiAgfVxuXG4gIHdhdGNoU3RhdHMoKTogT2JzZXJ2YWJsZTxDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHMgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQ7XG4gICAgaWYgKCF1aWQpIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBvblNuYXBzaG90KFxuICAgICAgICB0aGlzLnN0YXRzUmVmKHVpZCksXG4gICAgICAgIChzbmFwc2hvdCkgPT4gc3Vic2NyaWJlci5uZXh0KFxuICAgICAgICAgIHNuYXBzaG90LmV4aXN0cygpID8gdGhpcy5ub3JtYWxpemVTdGF0cyhzbmFwc2hvdC5kYXRhKCkgYXMgUGFydGlhbDxDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHM+KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgKSxcbiAgICAgICAgKGVycm9yKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVycm9yKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gICAgfSk7XG4gIH1cblxuICB3YXRjaFJlY2VudFJ1bnMobGltaXRDb3VudCA9IDQpOiBPYnNlcnZhYmxlPENoZXNzaW1hbHNDaGFsbGVuZ2VSdW5bXT4ge1xuICAgIGNvbnN0IHVpZCA9IHRoaXMuY3VycmVudFVpZDtcbiAgICBpZiAoIXVpZCkgcmV0dXJuIG9mKFtdKTtcbiAgICBjb25zdCBydW5zUXVlcnkgPSBxdWVyeShcbiAgICAgIGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHRoaXMucnVuc1BhdGgodWlkKSksXG4gICAgICBvcmRlckJ5KCd1cGRhdGVkQXQnLCAnZGVzYycpLFxuICAgICAgbGltaXQobGltaXRDb3VudCksXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gb25TbmFwc2hvdChcbiAgICAgICAgcnVuc1F1ZXJ5LFxuICAgICAgICAoc25hcHNob3QpID0+IHN1YnNjcmliZXIubmV4dChzbmFwc2hvdC5kb2NzLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRhKCkgYXMgQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bikpLFxuICAgICAgICAoZXJyb3IpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgICB9KTtcbiAgfVxuXG4gIHdhdGNoQWN0aXZlUnVuKCk6IE9ic2VydmFibGU8Q2hlc3NpbWFsc0NoYWxsZW5nZVJ1biB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHVpZCA9IHRoaXMuY3VycmVudFVpZDtcbiAgICBpZiAoIXVpZCkgcmV0dXJuIG9mKHRoaXMucmVhZExvY2FsQWN0aXZlUnVuKCkpO1xuICAgIGNvbnN0IGFjdGl2ZVF1ZXJ5ID0gcXVlcnkoXG4gICAgICBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCB0aGlzLnJ1bnNQYXRoKHVpZCkpLFxuICAgICAgd2hlcmUoJ3N0YXR1cycsICc9PScsICdhY3RpdmUnKSxcbiAgICAgIGxpbWl0KDEpLFxuICAgICk7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBzdWJzY3JpYmVyLm5leHQodGhpcy5yZWFkTG9jYWxBY3RpdmVSdW4oKSk7XG4gICAgICBjb25zdCB1bnN1YnNjcmliZSA9IG9uU25hcHNob3QoXG4gICAgICAgIGFjdGl2ZVF1ZXJ5LFxuICAgICAgICAoc25hcHNob3QpID0+IHtcbiAgICAgICAgICBjb25zdCBydW4gPSBzbmFwc2hvdC5kb2NzWzBdPy5kYXRhKCkgYXMgQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1biB8IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLndyaXRlTG9jYWxBY3RpdmVSdW4ocnVuKTtcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocnVuKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4gc3Vic2NyaWJlci5uZXh0KHRoaXMucmVhZExvY2FsQWN0aXZlUnVuKCkpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVSdW4ocnVuOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy53cml0ZUxvY2FsQWN0aXZlUnVuKHJ1bi5zdGF0dXMgPT09ICdhY3RpdmUnID8gcnVuIDogdW5kZWZpbmVkKTtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBhd2FpdCBzZXREb2ModGhpcy5ydW5SZWYodWlkLCBydW4uaWQpLCB0aGlzLndpdGhvdXRVbmRlZmluZWQoe1xuICAgICAgLi4ucnVuLFxuICAgICAgdXNlcklkOiB1aWQsXG4gICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHVwZGF0ZWRBdFNlcnZlcjogc2VydmVyVGltZXN0YW1wKCksXG4gICAgfSksIHsgbWVyZ2U6IHRydWUgfSk7XG4gIH1cblxuICBhc3luYyByZWNvcmRDaGFsbGVuZ2VTdGFydGVkKHJ1bjogQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMud3JpdGVMb2NhbEFjdGl2ZVJ1bihydW4pO1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCB0aGlzLnJlYWRTdGF0cyh1aWQpO1xuICAgIGF3YWl0IHNldERvYyh0aGlzLnN0YXRzUmVmKHVpZCksIHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB1c2VySWQ6IHVpZCxcbiAgICAgIGNoYWxsZW5nZXNQbGF5ZWQ6IGN1cnJlbnQuY2hhbGxlbmdlc1BsYXllZCArIDEsXG4gICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHVwZGF0ZWRBdFNlcnZlcjogc2VydmVyVGltZXN0YW1wKCksXG4gICAgfSwgeyBtZXJnZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCB0aGlzLnNhdmVSdW4ocnVuKTtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5Um91bmRSZXN1bHQoYXJnczoge1xuICAgIHJ1bjogQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bjtcbiAgICByb3VuZFJlYWNoZWQ6IG51bWJlcjtcbiAgICB3b246IGJvb2xlYW47XG4gICAgY29tcGxldGVkOiBib29sZWFuO1xuICAgIHJvdW5kU3RhdHM6IENoZXNzaW1hbHNDaGFsbGVuZ2VSb3VuZFN0YXRzO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IHRoaXMucmVhZFN0YXRzKHVpZCk7XG4gICAgY29uc3QgbmV4dDogQ2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzID0ge1xuICAgICAgdXNlcklkOiB1aWQsXG4gICAgICBjaGFsbGVuZ2VzUGxheWVkOiBjdXJyZW50LmNoYWxsZW5nZXNQbGF5ZWQsXG4gICAgICBjaGFsbGVuZ2VzQ29tcGxldGVkOiBjdXJyZW50LmNoYWxsZW5nZXNDb21wbGV0ZWQgKyAoYXJncy5jb21wbGV0ZWQgPyAxIDogMCksXG4gICAgICBiZXN0V2luU3RyZWFrOiBNYXRoLm1heChjdXJyZW50LmJlc3RXaW5TdHJlYWssIGFyZ3MucnVuLmJlc3RTdHJlYWtJblJ1biksXG4gICAgICBiZXN0Um91bmRSZWFjaGVkOiBNYXRoLm1heChjdXJyZW50LmJlc3RSb3VuZFJlYWNoZWQsIGFyZ3Mucm91bmRSZWFjaGVkKSxcbiAgICAgIHRvdGFsV2luczogY3VycmVudC50b3RhbFdpbnMgKyAoYXJncy53b24gPyAxIDogMCksXG4gICAgICB0b3RhbExvc3NlczogY3VycmVudC50b3RhbExvc3NlcyArIChhcmdzLndvbiA/IDAgOiAxKSxcbiAgICAgIGJvdHNEZWZlYXRlZDogY3VycmVudC5ib3RzRGVmZWF0ZWQgKyAoYXJncy53b24gPyAxIDogMCksXG4gICAgICBwb3dlcnNVc2VkOiB7XG4gICAgICAgIGVhZ2xlOiBjdXJyZW50LnBvd2Vyc1VzZWQuZWFnbGUgKyBhcmdzLnJvdW5kU3RhdHMucG93ZXJzVXNlZC5lYWdsZSxcbiAgICAgICAgYnVsbDogY3VycmVudC5wb3dlcnNVc2VkLmJ1bGwgKyBhcmdzLnJvdW5kU3RhdHMucG93ZXJzVXNlZC5idWxsLFxuICAgICAgICBrYW5nYXJvbzogY3VycmVudC5wb3dlcnNVc2VkLmthbmdhcm9vICsgYXJncy5yb3VuZFN0YXRzLnBvd2Vyc1VzZWQua2FuZ2Fyb28sXG4gICAgICAgIGxpb246IGN1cnJlbnQucG93ZXJzVXNlZC5saW9uICsgYXJncy5yb3VuZFN0YXRzLnBvd2Vyc1VzZWQubGlvbixcbiAgICAgIH0sXG4gICAgICBwb3dlckNhcHR1cmVzOiBjdXJyZW50LnBvd2VyQ2FwdHVyZXMgKyBhcmdzLnJvdW5kU3RhdHMucG93ZXJDYXB0dXJlcyxcbiAgICAgIHByb21vdGlvbnM6IGN1cnJlbnQucHJvbW90aW9ucyArIGFyZ3Mucm91bmRTdGF0cy5wcm9tb3Rpb25zLFxuICAgICAgbW9kZVN0YXRzOiB7XG4gICAgICAgIC4uLmN1cnJlbnQubW9kZVN0YXRzLFxuICAgICAgICBjaGFsbGVuZ2U6IHRoaXMuYWRkTW9kZVJlc3VsdChjdXJyZW50Lm1vZGVTdGF0cy5jaGFsbGVuZ2UsIGFyZ3Mud29uKSxcbiAgICAgIH0sXG4gICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9O1xuICAgIGF3YWl0IHNldERvYyh0aGlzLnN0YXRzUmVmKHVpZCksIHsgLi4ubmV4dCwgdXBkYXRlZEF0U2VydmVyOiBzZXJ2ZXJUaW1lc3RhbXAoKSB9LCB7IG1lcmdlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHRoaXMuc2F2ZVJ1bihhcmdzLnJ1bik7XG4gIH1cblxuICBhc3luYyByZWNvcmRNb2RlUmVzdWx0KG1vZGU6IEV4Y2x1ZGU8Q2hlc3NpbWFsc1N0YXRzTW9kZSwgJ2NoYWxsZW5nZSc+LCB3b246IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5yZWFkU3RhdHModWlkKTtcbiAgICBhd2FpdCBzZXREb2ModGhpcy5zdGF0c1JlZih1aWQpLCB7XG4gICAgICAuLi5jdXJyZW50LFxuICAgICAgdXNlcklkOiB1aWQsXG4gICAgICBtb2RlU3RhdHM6IHtcbiAgICAgICAgLi4uY3VycmVudC5tb2RlU3RhdHMsXG4gICAgICAgIFttb2RlXTogdGhpcy5hZGRNb2RlUmVzdWx0KGN1cnJlbnQubW9kZVN0YXRzW21vZGVdLCB3b24pLFxuICAgICAgfSxcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdXBkYXRlZEF0U2VydmVyOiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICB9LCB7IG1lcmdlOiB0cnVlIH0pO1xuICB9XG5cbiAgZW1wdHlTdGF0cygpOiBDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHMge1xuICAgIHJldHVybiB7XG4gICAgICBjaGFsbGVuZ2VzUGxheWVkOiAwLFxuICAgICAgY2hhbGxlbmdlc0NvbXBsZXRlZDogMCxcbiAgICAgIGJlc3RXaW5TdHJlYWs6IDAsXG4gICAgICBiZXN0Um91bmRSZWFjaGVkOiAwLFxuICAgICAgdG90YWxXaW5zOiAwLFxuICAgICAgdG90YWxMb3NzZXM6IDAsXG4gICAgICBib3RzRGVmZWF0ZWQ6IDAsXG4gICAgICBwb3dlcnNVc2VkOiB7IC4uLkVNUFRZX1BPV0VSUyB9LFxuICAgICAgcG93ZXJDYXB0dXJlczogMCxcbiAgICAgIHByb21vdGlvbnM6IDAsXG4gICAgICBtb2RlU3RhdHM6IHRoaXMuZW1wdHlNb2RlU3RhdHMoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkU3RhdHModWlkOiBzdHJpbmcpOiBQcm9taXNlPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4ge1xuICAgIC8vIEZpcmVzdG9yZSdzIHdlYiBTREsgZG9lcyBub3QgbmVlZCBhIHRyYW5zYWN0aW9uIGZvciB0aGVzZSBjYXN1YWwgZ2FtZSBzdGF0cy5cbiAgICAvLyBMYXN0LXdyaXRlLXdpbnMgaXMgYWNjZXB0YWJsZSBmb3IgdGhpcyBmaXJzdCB2ZXJzaW9uIGJlY2F1c2Ugb25lIHJ1biBpcyBhY3RpdmUgcGVyIGJyb3dzZXIuXG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBnZXREb2ModGhpcy5zdGF0c1JlZih1aWQpKTtcbiAgICByZXR1cm4gc25hcHNob3QuZXhpc3RzKCkgPyB0aGlzLm5vcm1hbGl6ZVN0YXRzKHNuYXBzaG90LmRhdGEoKSBhcyBQYXJ0aWFsPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4pIDogdGhpcy5lbXB0eVN0YXRzKCk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVN0YXRzKHZhbHVlOiBQYXJ0aWFsPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4pOiBDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHMge1xuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5lbXB0eVN0YXRzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmVtcHR5LFxuICAgICAgLi4udmFsdWUsXG4gICAgICBwb3dlcnNVc2VkOiB7XG4gICAgICAgIC4uLkVNUFRZX1BPV0VSUyxcbiAgICAgICAgLi4uKHZhbHVlLnBvd2Vyc1VzZWQgPz8ge30pLFxuICAgICAgfSxcbiAgICAgIG1vZGVTdGF0czogdGhpcy5ub3JtYWxpemVNb2RlU3RhdHModmFsdWUpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZE1vZGVSZXN1bHQoY3VycmVudDogeyBwbGF5ZWQ6IG51bWJlcjsgd2luczogbnVtYmVyOyBsb3NzZXM6IG51bWJlciB9LCB3b246IGJvb2xlYW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxheWVkOiBjdXJyZW50LnBsYXllZCArIDEsXG4gICAgICB3aW5zOiBjdXJyZW50LndpbnMgKyAod29uID8gMSA6IDApLFxuICAgICAgbG9zc2VzOiBjdXJyZW50Lmxvc3NlcyArICh3b24gPyAwIDogMSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZW1wdHlNb2RlU3RhdHMoKTogQ2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzWydtb2RlU3RhdHMnXSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYWxsZW5nZTogeyAuLi5FTVBUWV9NT0RFX1JFQ09SRCB9LFxuICAgICAgYm90OiB7IC4uLkVNUFRZX01PREVfUkVDT1JEIH0sXG4gICAgICBvbmxpbmU6IHsgLi4uRU1QVFlfTU9ERV9SRUNPUkQgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVNb2RlU3RhdHModmFsdWU6IFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPik6IENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0c1snbW9kZVN0YXRzJ10ge1xuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5lbXB0eU1vZGVTdGF0cygpO1xuICAgIHJldHVybiB7XG4gICAgICBjaGFsbGVuZ2U6IHtcbiAgICAgICAgLi4uZW1wdHkuY2hhbGxlbmdlLFxuICAgICAgICBwbGF5ZWQ6IHZhbHVlLm1vZGVTdGF0cz8uY2hhbGxlbmdlPy5wbGF5ZWQgPz8gKCh2YWx1ZS50b3RhbFdpbnMgPz8gMCkgKyAodmFsdWUudG90YWxMb3NzZXMgPz8gMCkpLFxuICAgICAgICB3aW5zOiB2YWx1ZS5tb2RlU3RhdHM/LmNoYWxsZW5nZT8ud2lucyA/PyAodmFsdWUudG90YWxXaW5zID8/IDApLFxuICAgICAgICBsb3NzZXM6IHZhbHVlLm1vZGVTdGF0cz8uY2hhbGxlbmdlPy5sb3NzZXMgPz8gKHZhbHVlLnRvdGFsTG9zc2VzID8/IDApLFxuICAgICAgfSxcbiAgICAgIGJvdDoge1xuICAgICAgICAuLi5lbXB0eS5ib3QsXG4gICAgICAgIC4uLih2YWx1ZS5tb2RlU3RhdHM/LmJvdCA/PyB7fSksXG4gICAgICB9LFxuICAgICAgb25saW5lOiB7XG4gICAgICAgIC4uLmVtcHR5Lm9ubGluZSxcbiAgICAgICAgLi4uKHZhbHVlLm1vZGVTdGF0cz8ub25saW5lID8/IHt9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlVXNlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IHRoaXMuZmlyZWJhc2Uud2hlbkZpcmViYXNlQXV0aFJlYWR5KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZmlyZWJhc2VBdXRoLmN1cnJlbnRVc2VyO1xuICAgIGlmICh1c2VyPy51aWQpIHtcbiAgICAgIGF3YWl0IHVzZXIuZ2V0SWRUb2tlbigpO1xuICAgICAgcmV0dXJuIHVzZXIudWlkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfQ0hBTExFTkdFX0xPR0lOX1JFUVVJUkVEJyk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRzUmVmKHVpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvYyh0aGlzLmZpcmVzdG9yZSwgYHVzZXJzLyR7dWlkfS9taW5pR2FtZXMvY2hlc3NpbWFscy9jaGFsbGVuZ2Uvc3RhdHNgKTtcbiAgfVxuXG4gIHByaXZhdGUgcnVuUmVmKHVpZDogc3RyaW5nLCBydW5JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvYyh0aGlzLmZpcmVzdG9yZSwgYCR7dGhpcy5ydW5zUGF0aCh1aWQpfS8ke3J1bklkfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBydW5zUGF0aCh1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB1c2Vycy8ke3VpZH0vbWluaUdhbWVzL2NoZXNzaW1hbHMvY2hhbGxlbmdlUnVuc2A7XG4gIH1cblxuICBwcml2YXRlIHJlYWRMb2NhbEFjdGl2ZVJ1bigpOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTE9DQUxfQUNUSVZFX1JVTl9LRVkpO1xuICAgICAgaWYgKCFyYXcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBydW4gPSBKU09OLnBhcnNlKHJhdykgYXMgQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bjtcbiAgICAgIHJldHVybiBydW4uc3RhdHVzID09PSAnYWN0aXZlJyA/IHJ1biA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZUxvY2FsQWN0aXZlUnVuKHJ1bjogQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1biB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBpZiAocnVuPy5zdGF0dXMgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExPQ0FMX0FDVElWRV9SVU5fS0VZLCBKU09OLnN0cmluZ2lmeShydW4pKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTE9DQUxfQUNUSVZFX1JVTl9LRVkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTG9jYWwgcGVyc2lzdGVuY2UgaXMgb25seSBhIHJlZnJlc2ggZmFsbGJhY2suXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3aXRob3V0VW5kZWZpbmVkPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odmFsdWU6IFQpOiBUIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWUpLnJlZHVjZSgoYWNjLCBba2V5LCBlbnRyeV0pID0+IHtcbiAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkKSBhY2Nba2V5IGFzIGtleW9mIFRdID0gZW50cnkgYXMgVFtrZXlvZiBUXTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgVCk7XG4gIH1cbn1cbiJdfQ==
|