valtech-components 4.0.470 → 4.0.472
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/bubble-blitz-game.component.mjs +18 -9
- package/esm2022/lib/components/organisms/mini-games/chessimals-engine.mjs +109 -16
- package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +18 -9
- package/esm2022/lib/components/organisms/mini-games/christianity-card.component.mjs +260 -0
- package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +2253 -0
- package/esm2022/lib/components/organisms/mini-games/memory-game.component.mjs +18 -9
- package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +275 -9
- package/esm2022/lib/components/organisms/mini-games/simon-game.component.mjs +18 -9
- package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
- package/esm2022/lib/directives/light-ripple.directive.mjs +57 -0
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/mini-games/public-api.mjs +34 -2
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/valtech-components-mini-games.mjs +34 -2
- package/fesm2022/valtech-components-mini-games.mjs.map +1 -1
- package/fesm2022/valtech-components.mjs +3013 -58
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/mini-games/bubble-blitz-game.component.d.ts +2 -0
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +3 -1
- package/lib/components/organisms/mini-games/christianity-card.component.d.ts +46 -0
- package/lib/components/organisms/mini-games/christianity-game.component.d.ts +177 -0
- package/lib/components/organisms/mini-games/memory-game.component.d.ts +2 -0
- package/lib/components/organisms/mini-games/simon-game.component.d.ts +2 -0
- package/lib/components/organisms/mini-games/types.d.ts +131 -1
- package/lib/directives/light-ripple.directive.d.ts +8 -0
- package/lib/version.d.ts +1 -1
- package/mini-games/public-api.d.ts +4 -0
- package/package.json +2 -1
- package/public-api.d.ts +2 -0
- package/src/lib/assets/games/christianity/card-symbol.svg +51 -0
- package/src/lib/assets/games/christianity/card-template-reference/front.html +114 -0
- package/src/lib/assets/games/christianity/card-template-reference/front.style.css +352 -0
- package/src/lib/assets/games/christianity/data/01-genesis.bible-reference-suggestions.csv +191 -0
- package/src/lib/assets/games/christianity/data/01-genesis.bible-verses.nbv-open.csv +170 -0
- package/src/lib/assets/games/christianity/data/01-genesis.cards.csv +281 -0
- package/src/lib/assets/games/christianity/data/01-genesis.cards.i18n.csv +281 -0
- package/src/lib/assets/games/christianity/data/01-genesis.cards.json +16453 -0
- package/src/lib/assets/games/christianity/data/01-genesis.unassigned-effects.csv +49 -0
- package/src/lib/assets/games/christianity/data/README.md +40 -0
- package/src/lib/assets/games/christianity/data/data-con-habilides.csv +273 -0
- package/src/lib/assets/games/christianity/data/habilidades-por-tipo.xlsx +0 -0
- package/src/lib/assets/games/christianity/data/listado-edicion.csv +281 -0
- package/src/lib/assets/games/christianity/editions/1/cards/.gitkeep +1 -0
- package/src/lib/assets/games/christianity/editions/1/cards/PLACEHOLDER.png +0 -0
- package/src/lib/assets/games/christianity/editions/README.md +34 -0
- package/src/lib/assets/games/christianity/icons/1-icon.png +0 -0
- package/src/lib/assets/games/christianity/icons/action.png +0 -0
- package/src/lib/assets/games/christianity/icons/character.png +0 -0
- package/src/lib/assets/games/christianity/icons/event.png +0 -0
- package/src/lib/assets/games/christianity/icons/leader.png +0 -0
- package/src/lib/assets/games/christianity/icons/offering.png +0 -0
- package/src/lib/assets/games/christianity/icons/place.png +0 -0
- package/src/lib/assets/games/christianity/icons/tool.png +0 -0
- package/src/lib/assets/games/christianity/icons/wisdom.png +0 -0
- package/src/lib/assets/games/christianity/sources/README.md +16 -0
- package/src/lib/assets/games/christianity/sources/spaonbv_vpl.txt +29102 -0
- package/src/lib/assets/games/christianity/sources/spaonbv_vpl.xml +29104 -0
- package/src/lib/assets/games/christianity/spaonbv.txt +52 -0
|
@@ -0,0 +1,2253 @@
|
|
|
1
|
+
import { Component, computed, inject, signal } from '@angular/core';
|
|
2
|
+
import { CdkDrag, CdkDropList } from '@angular/cdk/drag-drop';
|
|
3
|
+
import { LightRippleDirective } from '../../../directives/light-ripple.directive';
|
|
4
|
+
import { I18nService } from '../../../services/i18n';
|
|
5
|
+
import { ChristianityCardComponent } from './christianity-card.component';
|
|
6
|
+
import { MINI_GAMES_I18N } from './mini-games.i18n';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
const GENESIS_CATALOG_URL = 'assets/games/christianity/data/01-genesis.cards.json';
|
|
9
|
+
const GENESIS_ICON_URL = 'assets/games/christianity/icons/1-icon.png';
|
|
10
|
+
const TUTORIAL_CHARACTER_LIMIT = 12;
|
|
11
|
+
const TUTORIAL_OFFERING_LIMIT = 6;
|
|
12
|
+
const SPLASH_MIN_DURATION_MS = 720;
|
|
13
|
+
const STARTER_CARDS = {
|
|
14
|
+
o_simple: {
|
|
15
|
+
id: 'o_simple',
|
|
16
|
+
name: 'Ofrenda simple',
|
|
17
|
+
type: 'offering',
|
|
18
|
+
cost: 0,
|
|
19
|
+
attack: 0,
|
|
20
|
+
life: 1,
|
|
21
|
+
verseText: 'Una ofrenda sencilla queda lista para sostener tus siguientes jugadas.',
|
|
22
|
+
scripture: 'Genesis 4:4',
|
|
23
|
+
edition: 'GEN',
|
|
24
|
+
collectorNumber: '001/020',
|
|
25
|
+
year: '2026',
|
|
26
|
+
author: 'MVP',
|
|
27
|
+
rarity: 'normal',
|
|
28
|
+
},
|
|
29
|
+
o_forbidden: {
|
|
30
|
+
id: 'o_forbidden',
|
|
31
|
+
name: 'El fruto prohibido',
|
|
32
|
+
type: 'offering',
|
|
33
|
+
cost: 0,
|
|
34
|
+
attack: 0,
|
|
35
|
+
life: 2,
|
|
36
|
+
abilityName: 'Conocimiento del bien y del mal',
|
|
37
|
+
abilityText: 'Al usarla, disminuye en 1 los puntos de vida de tu Líder.',
|
|
38
|
+
abilityCost: 0,
|
|
39
|
+
verseText: 'Dios el Señor puso al hombre en el jardín de Edén para que lo labrara y lo cuidara.',
|
|
40
|
+
scripture: 'Genesis 2:17 NBV',
|
|
41
|
+
edition: 'GEN',
|
|
42
|
+
collectorNumber: '012/180',
|
|
43
|
+
year: '2026',
|
|
44
|
+
author: 'MVP',
|
|
45
|
+
rarity: 'uncommon',
|
|
46
|
+
},
|
|
47
|
+
p_scout: {
|
|
48
|
+
id: 'p_scout',
|
|
49
|
+
name: 'Scout',
|
|
50
|
+
type: 'character',
|
|
51
|
+
cost: 1,
|
|
52
|
+
attack: 1,
|
|
53
|
+
life: 1,
|
|
54
|
+
verseText: 'Un explorador humilde abre camino antes de que llegue la batalla.',
|
|
55
|
+
scripture: 'Genesis 13:17',
|
|
56
|
+
edition: 'GEN',
|
|
57
|
+
collectorNumber: '002/020',
|
|
58
|
+
year: '2026',
|
|
59
|
+
author: 'MVP',
|
|
60
|
+
rarity: 'normal',
|
|
61
|
+
},
|
|
62
|
+
p_guard: { id: 'p_guard', name: 'Guard', type: 'character', cost: 2, attack: 1, life: 3, edition: 'GEN', collectorNumber: '003/020', year: '2026', author: 'MVP', rarity: 'normal' },
|
|
63
|
+
p_warrior: { id: 'p_warrior', name: 'Warrior', type: 'character', cost: 2, attack: 2, life: 2, edition: 'GEN', collectorNumber: '004/020', year: '2026', author: 'MVP', rarity: 'normal' },
|
|
64
|
+
p_elder: { id: 'p_elder', name: 'Elder', type: 'character', cost: 3, attack: 2, life: 4, edition: 'GEN', collectorNumber: '005/020', year: '2026', author: 'MVP', rarity: 'uncommon' },
|
|
65
|
+
p_champion: { id: 'p_champion', name: 'Champion', type: 'character', cost: 4, attack: 4, life: 4, edition: 'GEN', collectorNumber: '006/020', year: '2026', author: 'MVP', rarity: 'rare' },
|
|
66
|
+
};
|
|
67
|
+
const STARTING_SHARED_DECK = [
|
|
68
|
+
'o_simple',
|
|
69
|
+
'p_scout',
|
|
70
|
+
'o_forbidden',
|
|
71
|
+
'o_simple',
|
|
72
|
+
'p_guard',
|
|
73
|
+
'p_warrior',
|
|
74
|
+
'o_simple',
|
|
75
|
+
'p_elder',
|
|
76
|
+
'p_scout',
|
|
77
|
+
'o_simple',
|
|
78
|
+
'p_champion',
|
|
79
|
+
'p_guard',
|
|
80
|
+
'o_simple',
|
|
81
|
+
'p_warrior',
|
|
82
|
+
'p_scout',
|
|
83
|
+
'o_simple',
|
|
84
|
+
'p_elder',
|
|
85
|
+
'p_guard',
|
|
86
|
+
'o_simple',
|
|
87
|
+
];
|
|
88
|
+
const STARTING_GAME = {
|
|
89
|
+
gameId: 'mock-christianity',
|
|
90
|
+
status: 'in_progress',
|
|
91
|
+
mode: 'local_pass',
|
|
92
|
+
turnOwner: 'P1',
|
|
93
|
+
revision: 0,
|
|
94
|
+
turnCount: 1,
|
|
95
|
+
matchScore: { P1: 1, P2: 0 },
|
|
96
|
+
sharedDeck: STARTING_SHARED_DECK,
|
|
97
|
+
historyZone: [],
|
|
98
|
+
players: {
|
|
99
|
+
P1: {
|
|
100
|
+
seat: 'P1',
|
|
101
|
+
displayName: 'Jugador',
|
|
102
|
+
avatar: 'J',
|
|
103
|
+
avatarColor: '#2563eb',
|
|
104
|
+
leaderName: 'Adam',
|
|
105
|
+
leaderHp: 15,
|
|
106
|
+
leaderMaxHp: 15,
|
|
107
|
+
offerings: [
|
|
108
|
+
{ instanceId: 'p1_offering_001', cardId: 'o_simple', name: 'Ofrenda simple', owner: 'P1', ready: true, value: 1 },
|
|
109
|
+
{
|
|
110
|
+
instanceId: 'p1_offering_002',
|
|
111
|
+
cardId: 'o_forbidden',
|
|
112
|
+
name: 'El fruto prohibido',
|
|
113
|
+
owner: 'P1',
|
|
114
|
+
ready: true,
|
|
115
|
+
value: 2,
|
|
116
|
+
abilityName: 'Conocimiento del bien y del mal',
|
|
117
|
+
abilityText: 'Al usarla, disminuye en 1 los puntos de vida de tu Lider.',
|
|
118
|
+
abilityCost: 0,
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
offeringPlayedThisTurn: false,
|
|
122
|
+
hand: ['o_simple', 'p_scout', 'p_warrior', 'p_guard'],
|
|
123
|
+
battleZone: [],
|
|
124
|
+
},
|
|
125
|
+
P2: {
|
|
126
|
+
seat: 'P2',
|
|
127
|
+
displayName: 'Rival',
|
|
128
|
+
avatar: 'R',
|
|
129
|
+
avatarColor: '#b45309',
|
|
130
|
+
leaderName: 'Noah',
|
|
131
|
+
leaderHp: 15,
|
|
132
|
+
leaderMaxHp: 15,
|
|
133
|
+
offerings: [{ instanceId: 'p2_offering_001', cardId: 'o_simple', name: 'Ofrenda simple', owner: 'P2', ready: true, value: 1 }],
|
|
134
|
+
offeringPlayedThisTurn: false,
|
|
135
|
+
handCount: 4,
|
|
136
|
+
battleZone: [
|
|
137
|
+
{
|
|
138
|
+
instanceId: 'opp_001',
|
|
139
|
+
cardId: 'p_scout',
|
|
140
|
+
name: 'Scout',
|
|
141
|
+
owner: 'P2',
|
|
142
|
+
controller: 'P2',
|
|
143
|
+
slot: 0,
|
|
144
|
+
attack: 1,
|
|
145
|
+
currentHp: 1,
|
|
146
|
+
maxHp: 1,
|
|
147
|
+
canAttack: false,
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
log: ['Partida iniciada.'],
|
|
153
|
+
};
|
|
154
|
+
export class ChristianityGameComponent {
|
|
155
|
+
constructor() {
|
|
156
|
+
this.i18n = inject(I18nService);
|
|
157
|
+
this.bootStartedAt = performance.now();
|
|
158
|
+
this.game = signal(structuredClone(STARTING_GAME));
|
|
159
|
+
this.screen = signal('splash');
|
|
160
|
+
this.catalogLoadState = signal('loading');
|
|
161
|
+
this.selectedHandCard = signal(null);
|
|
162
|
+
this.selectedAttacker = signal(null);
|
|
163
|
+
this.selectedPreview = signal(null);
|
|
164
|
+
this.selectedInfo = signal(null);
|
|
165
|
+
this.previewTilt = signal({ rotateX: 5, rotateY: -5, shiftX: 0, shiftY: 0 });
|
|
166
|
+
this.hoveredHandIndex = signal(null);
|
|
167
|
+
this.draggingCardId = signal(null);
|
|
168
|
+
this.showHistory = signal(false);
|
|
169
|
+
this.showGallery = signal(false);
|
|
170
|
+
this.offeringsSeat = signal(null);
|
|
171
|
+
this.cardCatalog = signal(STARTER_CARDS);
|
|
172
|
+
this.allCatalogCards = signal(Object.values(STARTER_CARDS));
|
|
173
|
+
this.catalogLoaded = signal(false);
|
|
174
|
+
this.gallerySearch = signal('');
|
|
175
|
+
this.galleryType = signal('all');
|
|
176
|
+
this.canDropOnBattleSlot = (drag) => {
|
|
177
|
+
const card = this.cardDefinition(drag.data);
|
|
178
|
+
return card.type === 'character' && this.canPlay(card);
|
|
179
|
+
};
|
|
180
|
+
this.canDropOnOfferings = (drag) => {
|
|
181
|
+
const card = this.cardDefinition(drag.data);
|
|
182
|
+
return card.type === 'offering' && this.canPlay(card);
|
|
183
|
+
};
|
|
184
|
+
this.player = computed(() => this.game().players.P1);
|
|
185
|
+
this.opponent = computed(() => this.game().players.P2);
|
|
186
|
+
this.currentPlayer = computed(() => this.game().players[this.game().turnOwner]);
|
|
187
|
+
this.isOwnTurn = computed(() => this.game().turnOwner === 'P1');
|
|
188
|
+
this.hasOpponentGuards = computed(() => this.opponent().battleZone.length > 0);
|
|
189
|
+
this.opponentHandCount = computed(() => this.opponent().handCount ?? this.opponent().hand?.length ?? 0);
|
|
190
|
+
this.galleryCards = computed(() => {
|
|
191
|
+
const query = this.gallerySearch().trim().toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
192
|
+
const type = this.galleryType();
|
|
193
|
+
return this.allCatalogCards()
|
|
194
|
+
.filter(card => type === 'all' || card.type === type)
|
|
195
|
+
.filter(card => {
|
|
196
|
+
if (!query)
|
|
197
|
+
return true;
|
|
198
|
+
const text = this.translatedCardText(card);
|
|
199
|
+
const haystack = [text.name, card.type, text.scripture, text.abilityName, text.abilityText, text.verseText]
|
|
200
|
+
.filter(Boolean)
|
|
201
|
+
.join(' ')
|
|
202
|
+
.toLowerCase()
|
|
203
|
+
.normalize('NFD')
|
|
204
|
+
.replace(/[\u0300-\u036f]/g, '');
|
|
205
|
+
return haystack.includes(query);
|
|
206
|
+
})
|
|
207
|
+
.sort((left, right) => this.cardSortKey(left).localeCompare(this.cardSortKey(right), 'es'));
|
|
208
|
+
});
|
|
209
|
+
this.galleryEditionLabel = computed(() => {
|
|
210
|
+
const count = this.allCatalogCards().length;
|
|
211
|
+
return `${this.t('christianityGenesisEdition')} · ${count} ${this.t('christianityCards')}`;
|
|
212
|
+
});
|
|
213
|
+
this.galleryEditionIcon = computed(() => GENESIS_ICON_URL);
|
|
214
|
+
this.galleryTypeOptions = computed(() => [
|
|
215
|
+
{ value: 'all', label: this.t('christianityAllCards') },
|
|
216
|
+
{ value: 'leader', label: this.t('christianityLeaderCard') },
|
|
217
|
+
{ value: 'offering', label: this.t('christianityOfferingCard') },
|
|
218
|
+
{ value: 'character', label: this.t('christianityCharacterCard') },
|
|
219
|
+
{ value: 'wisdom', label: this.t('christianityWisdomCard') },
|
|
220
|
+
{ value: 'action', label: this.t('christianityActionCard') },
|
|
221
|
+
{ value: 'tool', label: this.t('christianityToolCard') },
|
|
222
|
+
{ value: 'place', label: this.t('christianityPlaceCard') },
|
|
223
|
+
{ value: 'event', label: this.t('christianityEventCard') },
|
|
224
|
+
]);
|
|
225
|
+
this.splashStatusText = computed(() => {
|
|
226
|
+
const state = this.catalogLoadState();
|
|
227
|
+
if (state === 'ready')
|
|
228
|
+
return this.t('christianitySplashReady');
|
|
229
|
+
if (state === 'fallback')
|
|
230
|
+
return this.t('christianitySplashFallback');
|
|
231
|
+
return this.t('christianitySplashLoading');
|
|
232
|
+
});
|
|
233
|
+
this.startFeaturedCards = computed(() => {
|
|
234
|
+
const cards = this.allCatalogCards();
|
|
235
|
+
const preferred = ['GEN-009', 'GEN-013', 'GEN-032']
|
|
236
|
+
.map(id => this.cardCatalog()[id])
|
|
237
|
+
.filter((card) => !!card);
|
|
238
|
+
return (preferred.length ? preferred : cards.slice(0, 3)).slice(0, 3);
|
|
239
|
+
});
|
|
240
|
+
this.futureModes = computed(() => [
|
|
241
|
+
{ title: this.t('christianitySoloBotMode'), body: this.t('christianitySoloBotModeBody') },
|
|
242
|
+
{ title: this.t('christianityTwoPlayerMode'), body: this.t('christianityTwoPlayerModeBody') },
|
|
243
|
+
{ title: this.t('christianityOneDeviceMode'), body: this.t('christianityOneDeviceModeBody') },
|
|
244
|
+
{ title: this.t('christianitySpectatorMode'), body: this.t('christianitySpectatorModeBody') },
|
|
245
|
+
]);
|
|
246
|
+
this.selectedCardDefinition = computed(() => {
|
|
247
|
+
const selected = this.selectedHandCard();
|
|
248
|
+
return selected ? this.cardDefinition(selected) : null;
|
|
249
|
+
});
|
|
250
|
+
this.selectedPreviewCard = computed(() => {
|
|
251
|
+
const cardId = this.selectedPreview()?.cardId;
|
|
252
|
+
return cardId ? this.cardDefinition(cardId) : null;
|
|
253
|
+
});
|
|
254
|
+
this.selectedPreviewRenderCard = computed(() => {
|
|
255
|
+
const preview = this.selectedPreview();
|
|
256
|
+
if (!preview)
|
|
257
|
+
return null;
|
|
258
|
+
const card = this.selectedPreviewCard();
|
|
259
|
+
if (card) {
|
|
260
|
+
return this.definitionToRenderCard(card, {
|
|
261
|
+
statusText: preview.body,
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
if (preview.eyebrow === this.t('christianityLeaderCard')) {
|
|
265
|
+
const [currentHp, maxHp] = preview.meta.split('/').map(value => Number(value));
|
|
266
|
+
return {
|
|
267
|
+
id: `leader-${preview.title.toLowerCase()}`,
|
|
268
|
+
name: preview.title,
|
|
269
|
+
type: 'leader',
|
|
270
|
+
typeLabel: this.t('christianityLeaderCard'),
|
|
271
|
+
currentHp: Number.isFinite(currentHp) ? currentHp : undefined,
|
|
272
|
+
maxHp: Number.isFinite(maxHp) ? maxHp : undefined,
|
|
273
|
+
life: Number.isFinite(currentHp) ? currentHp : undefined,
|
|
274
|
+
abilityName: this.t('christianityLeaderCard'),
|
|
275
|
+
abilityText: preview.body,
|
|
276
|
+
verseText: preview.body,
|
|
277
|
+
edition: 'MVP',
|
|
278
|
+
collectorNumber: 'LIDER',
|
|
279
|
+
year: '2026',
|
|
280
|
+
author: 'MVP',
|
|
281
|
+
rarity: 'legendary',
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
return {
|
|
285
|
+
id: `preview-${preview.title.toLowerCase()}`,
|
|
286
|
+
name: preview.title,
|
|
287
|
+
type: this.previewRenderType(preview.eyebrow),
|
|
288
|
+
typeLabel: preview.eyebrow,
|
|
289
|
+
abilityName: preview.eyebrow,
|
|
290
|
+
abilityText: preview.body,
|
|
291
|
+
verseText: preview.body,
|
|
292
|
+
edition: 'MVP',
|
|
293
|
+
collectorNumber: preview.eyebrow,
|
|
294
|
+
year: '2026',
|
|
295
|
+
author: 'MVP',
|
|
296
|
+
rarity: 'normal',
|
|
297
|
+
statusText: preview.meta,
|
|
298
|
+
};
|
|
299
|
+
});
|
|
300
|
+
this.previewRule = computed(() => {
|
|
301
|
+
const preview = this.selectedPreview();
|
|
302
|
+
if (!preview)
|
|
303
|
+
return null;
|
|
304
|
+
const card = this.selectedPreviewCard();
|
|
305
|
+
if (card?.type === 'offering') {
|
|
306
|
+
return { title: this.t('christianityOfferingCard'), body: this.t('christianityOfferingRuleBody') };
|
|
307
|
+
}
|
|
308
|
+
if (card?.type === 'character') {
|
|
309
|
+
return { title: this.t('christianityCharacterCard'), body: this.t('christianityCharacterRuleBody') };
|
|
310
|
+
}
|
|
311
|
+
if (card?.type === 'wisdom') {
|
|
312
|
+
return { title: this.t('christianityWisdomCard'), body: this.t('christianityWisdomRuleBody') };
|
|
313
|
+
}
|
|
314
|
+
if (card?.type === 'action') {
|
|
315
|
+
return { title: this.t('christianityActionCard'), body: this.t('christianityActionRuleBody') };
|
|
316
|
+
}
|
|
317
|
+
if (card?.type === 'tool') {
|
|
318
|
+
return { title: this.t('christianityToolCard'), body: this.t('christianityToolRuleBody') };
|
|
319
|
+
}
|
|
320
|
+
if (card?.type === 'place') {
|
|
321
|
+
return { title: this.t('christianityPlaceCard'), body: this.t('christianityPlaceRuleBody') };
|
|
322
|
+
}
|
|
323
|
+
if (card?.type === 'event') {
|
|
324
|
+
return { title: this.t('christianityEventCard'), body: this.t('christianityEventRuleBody') };
|
|
325
|
+
}
|
|
326
|
+
if (card?.type === 'leader') {
|
|
327
|
+
return { title: this.t('christianityLeaderCard'), body: this.t('christianityLeaderRuleBody') };
|
|
328
|
+
}
|
|
329
|
+
if (preview.eyebrow === this.t('christianityLeaderCard')) {
|
|
330
|
+
return { title: this.t('christianityLeaderCard'), body: this.t('christianityLeaderRuleBody') };
|
|
331
|
+
}
|
|
332
|
+
return null;
|
|
333
|
+
});
|
|
334
|
+
this.statusText = computed(() => {
|
|
335
|
+
const attacker = this.selectedAttacker();
|
|
336
|
+
const handCard = this.selectedCardDefinition();
|
|
337
|
+
if (!this.isOwnTurn()) {
|
|
338
|
+
return this.t('christianityWaitTurn');
|
|
339
|
+
}
|
|
340
|
+
if (attacker) {
|
|
341
|
+
return this.hasOpponentGuards() ? this.t('christianityChooseCharacterTarget') : this.t('christianityChooseTarget');
|
|
342
|
+
}
|
|
343
|
+
if (handCard) {
|
|
344
|
+
if (!this.canPlay(handCard)) {
|
|
345
|
+
return this.t('christianityNeedOfferings');
|
|
346
|
+
}
|
|
347
|
+
return handCard.type === 'offering' ? this.t('christianityPlaceOffering') : this.t('christianityChooseSlot');
|
|
348
|
+
}
|
|
349
|
+
return this.t('christianityChooseCard');
|
|
350
|
+
});
|
|
351
|
+
this.i18n.registerDefaults('MiniGames', MINI_GAMES_I18N);
|
|
352
|
+
void this.loadGenesisCatalog();
|
|
353
|
+
}
|
|
354
|
+
t(key) {
|
|
355
|
+
this.i18n.lang();
|
|
356
|
+
return this.i18n.t(key, 'MiniGames');
|
|
357
|
+
}
|
|
358
|
+
async loadGenesisCatalog() {
|
|
359
|
+
let loaded = false;
|
|
360
|
+
try {
|
|
361
|
+
const response = await fetch(GENESIS_CATALOG_URL);
|
|
362
|
+
if (response.ok) {
|
|
363
|
+
const catalog = await response.json();
|
|
364
|
+
const cards = (catalog.cards ?? []).map(card => this.normalizeCatalogCard(card, catalog));
|
|
365
|
+
if (cards.length) {
|
|
366
|
+
this.cardCatalog.set(Object.fromEntries(cards.map(card => [card.id, card])));
|
|
367
|
+
this.allCatalogCards.set(cards);
|
|
368
|
+
this.catalogLoaded.set(true);
|
|
369
|
+
this.game.set(this.createTutorialGame(cards));
|
|
370
|
+
loaded = true;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
catch (error) {
|
|
375
|
+
console.warn('Christianity catalog could not be loaded. Falling back to starter cards.', error);
|
|
376
|
+
}
|
|
377
|
+
this.catalogLoadState.set(loaded ? 'ready' : 'fallback');
|
|
378
|
+
this.finishSplash();
|
|
379
|
+
}
|
|
380
|
+
finishSplash() {
|
|
381
|
+
const elapsed = performance.now() - this.bootStartedAt;
|
|
382
|
+
const remaining = Math.max(0, SPLASH_MIN_DURATION_MS - elapsed);
|
|
383
|
+
window.setTimeout(() => {
|
|
384
|
+
if (this.screen() === 'splash') {
|
|
385
|
+
this.screen.set('home');
|
|
386
|
+
}
|
|
387
|
+
}, remaining);
|
|
388
|
+
}
|
|
389
|
+
normalizeCatalogCard(card, catalog) {
|
|
390
|
+
const editionIcon = card.editionIcon ?? catalog.edition?.icon ?? GENESIS_ICON_URL;
|
|
391
|
+
const verseText = card.verseText ?? card.bible?.text;
|
|
392
|
+
const scripture = card.scripture ?? this.formatScripture(card.bible);
|
|
393
|
+
const offeringValue = card.type === 'offering' ? card.offeringValue ?? card.life ?? card.cost ?? 1 : card.offeringValue;
|
|
394
|
+
const life = card.type === 'leader'
|
|
395
|
+
? card.leaderLife ?? card.life ?? 10
|
|
396
|
+
: card.type === 'offering'
|
|
397
|
+
? offeringValue
|
|
398
|
+
: card.life ?? 0;
|
|
399
|
+
return {
|
|
400
|
+
...card,
|
|
401
|
+
cost: card.type === 'offering' ? 0 : card.cost ?? 0,
|
|
402
|
+
offeringValue,
|
|
403
|
+
life,
|
|
404
|
+
leaderLife: card.type === 'leader' ? card.leaderLife ?? life : card.leaderLife,
|
|
405
|
+
attack: card.type === 'character' ? card.attack ?? 0 : card.attack,
|
|
406
|
+
abilityName: card.abilityName ?? card.abilities?.[0]?.name,
|
|
407
|
+
abilityText: card.abilityText ?? card.abilities?.[0]?.text,
|
|
408
|
+
verseText,
|
|
409
|
+
scripture,
|
|
410
|
+
edition: card.edition ?? catalog.edition?.id ?? 'GEN',
|
|
411
|
+
editionNumber: card.editionNumber ?? catalog.edition?.number,
|
|
412
|
+
editionIcon,
|
|
413
|
+
imageUrl: card.imageUrl ?? card.art?.imageUrl,
|
|
414
|
+
author: card.author ?? card.art?.artistCredit,
|
|
415
|
+
year: card.year ?? '2026',
|
|
416
|
+
frontTemplate: card.frontTemplate ?? 'genesis-classic',
|
|
417
|
+
};
|
|
418
|
+
}
|
|
419
|
+
formatScripture(bible) {
|
|
420
|
+
if (!bible?.book || !bible.reference)
|
|
421
|
+
return undefined;
|
|
422
|
+
return `${bible.book} ${bible.reference}${bible.version ? ` ${bible.version}` : ''}`;
|
|
423
|
+
}
|
|
424
|
+
createTutorialGame(cards) {
|
|
425
|
+
const leaders = cards.filter(card => card.type === 'leader');
|
|
426
|
+
const playerLeader = this.findCard(leaders, 'Adán') ?? leaders[0];
|
|
427
|
+
const opponentLeader = this.findCard(leaders, 'Noé') ?? leaders[1] ?? leaders[0];
|
|
428
|
+
const offerings = cards.filter(card => card.type === 'offering').slice(0, TUTORIAL_OFFERING_LIMIT);
|
|
429
|
+
const characters = cards
|
|
430
|
+
.filter(card => card.type === 'character' && (card.cost ?? 0) <= 4 && (card.attack ?? 0) >= 0 && (card.life ?? 0) > 0)
|
|
431
|
+
.slice(0, TUTORIAL_CHARACTER_LIMIT);
|
|
432
|
+
const startingOffering = offerings[0] ?? STARTER_CARDS['o_simple'];
|
|
433
|
+
const tutorialDeck = [
|
|
434
|
+
...offerings.slice(1),
|
|
435
|
+
...characters,
|
|
436
|
+
...offerings.slice(0, 1),
|
|
437
|
+
].slice(0, 20);
|
|
438
|
+
const playerHand = tutorialDeck.slice(0, 4).map(card => card.id);
|
|
439
|
+
const opponentBattleCard = characters[0];
|
|
440
|
+
const sharedDeck = tutorialDeck.slice(4).map(card => card.id);
|
|
441
|
+
return {
|
|
442
|
+
...structuredClone(STARTING_GAME),
|
|
443
|
+
sharedDeck,
|
|
444
|
+
historyZone: [],
|
|
445
|
+
players: {
|
|
446
|
+
P1: this.createTutorialPlayer('P1', playerLeader, startingOffering, playerHand, []),
|
|
447
|
+
P2: this.createTutorialPlayer('P2', opponentLeader, startingOffering, undefined, opponentBattleCard ? [this.createCharacterInstance(opponentBattleCard, 'P2', 0, 'opp_001')] : []),
|
|
448
|
+
},
|
|
449
|
+
log: [this.t('christianityTutorialLoaded')],
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
createTutorialPlayer(seat, leader, startingOffering, hand, battleZone) {
|
|
453
|
+
const base = STARTING_GAME.players[seat];
|
|
454
|
+
const leaderLife = leader?.leaderLife ?? leader?.life ?? base.leaderMaxHp;
|
|
455
|
+
return {
|
|
456
|
+
...structuredClone(base),
|
|
457
|
+
leaderCardId: leader?.id,
|
|
458
|
+
leaderName: leader ? this.translatedCardText(leader).name : base.leaderName,
|
|
459
|
+
leaderHp: leaderLife,
|
|
460
|
+
leaderMaxHp: leaderLife,
|
|
461
|
+
offerings: [this.createOfferingInstance(startingOffering, seat, `${seat.toLowerCase()}_offering_001`)],
|
|
462
|
+
offeringPlayedThisTurn: false,
|
|
463
|
+
hand,
|
|
464
|
+
handCount: hand ? undefined : 4,
|
|
465
|
+
battleZone,
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
createOfferingInstance(card, seat, instanceId) {
|
|
469
|
+
const value = card.offeringValue ?? card.life ?? 1;
|
|
470
|
+
return {
|
|
471
|
+
instanceId,
|
|
472
|
+
cardId: card.id,
|
|
473
|
+
name: this.translatedCardText(card).name,
|
|
474
|
+
owner: seat,
|
|
475
|
+
ready: true,
|
|
476
|
+
value,
|
|
477
|
+
abilityName: card.abilityName,
|
|
478
|
+
abilityText: card.abilityText,
|
|
479
|
+
abilityCost: card.abilityCost,
|
|
480
|
+
};
|
|
481
|
+
}
|
|
482
|
+
createCharacterInstance(card, seat, slot, instanceId) {
|
|
483
|
+
const life = card.life ?? 1;
|
|
484
|
+
return {
|
|
485
|
+
instanceId,
|
|
486
|
+
cardId: card.id,
|
|
487
|
+
name: this.translatedCardText(card).name,
|
|
488
|
+
owner: seat,
|
|
489
|
+
controller: seat,
|
|
490
|
+
slot,
|
|
491
|
+
attack: card.attack ?? 0,
|
|
492
|
+
currentHp: life,
|
|
493
|
+
maxHp: life,
|
|
494
|
+
canAttack: false,
|
|
495
|
+
};
|
|
496
|
+
}
|
|
497
|
+
findCard(cards, namePart) {
|
|
498
|
+
return cards.find(card => this.translatedCardText(card).name.toLowerCase().includes(namePart.toLowerCase()));
|
|
499
|
+
}
|
|
500
|
+
cardSortKey(card) {
|
|
501
|
+
const collector = card.collectorNumber ?? card.id;
|
|
502
|
+
return `${card.edition ?? ''}-${collector.padStart(8, '0')}-${this.translatedCardText(card).name}`;
|
|
503
|
+
}
|
|
504
|
+
cardDefinition(cardId) {
|
|
505
|
+
return this.cardCatalog()[cardId] ?? STARTER_CARDS[cardId] ?? STARTER_CARDS['p_scout'];
|
|
506
|
+
}
|
|
507
|
+
translatedCardText(card) {
|
|
508
|
+
const lang = this.i18n.lang();
|
|
509
|
+
const translation = card.i18n?.[lang] ?? card.i18n?.['es'];
|
|
510
|
+
const primaryAbility = translation?.abilities?.[0] ?? card.abilities?.[0];
|
|
511
|
+
return {
|
|
512
|
+
name: translation?.name ?? card.name,
|
|
513
|
+
fullName: translation?.fullName ?? card.fullName,
|
|
514
|
+
verseText: translation?.verseText ?? card.verseText,
|
|
515
|
+
scripture: translation?.scripture ?? card.scripture,
|
|
516
|
+
abilityName: translation?.abilityName ?? primaryAbility?.name ?? card.abilityName,
|
|
517
|
+
abilityText: translation?.abilityText ?? primaryAbility?.text ?? card.abilityText,
|
|
518
|
+
abilities: translation?.abilities ?? card.abilities,
|
|
519
|
+
};
|
|
520
|
+
}
|
|
521
|
+
cardDisplayName(cardId) {
|
|
522
|
+
return this.translatedCardText(this.cardDefinition(cardId)).name;
|
|
523
|
+
}
|
|
524
|
+
playerLeaderDisplayName(player) {
|
|
525
|
+
return player.leaderCardId ? this.cardDisplayName(player.leaderCardId) : player.leaderName;
|
|
526
|
+
}
|
|
527
|
+
catalogStatusLabel() {
|
|
528
|
+
const state = this.catalogLoadState();
|
|
529
|
+
if (state === 'ready')
|
|
530
|
+
return this.t('christianityCatalogReady');
|
|
531
|
+
if (state === 'fallback')
|
|
532
|
+
return this.t('christianityCatalogFallback');
|
|
533
|
+
return this.t('christianityCatalogLoading');
|
|
534
|
+
}
|
|
535
|
+
startFeaturedCardTransform(index) {
|
|
536
|
+
const transforms = [
|
|
537
|
+
'translateX(-1.4rem) rotate(-9deg)',
|
|
538
|
+
'translateY(-0.55rem) rotate(2deg)',
|
|
539
|
+
'translateX(1.4rem) rotate(10deg)',
|
|
540
|
+
];
|
|
541
|
+
return transforms[index] ?? 'none';
|
|
542
|
+
}
|
|
543
|
+
cardTypeLabel(card) {
|
|
544
|
+
const labels = {
|
|
545
|
+
action: this.t('christianityActionCard'),
|
|
546
|
+
character: this.t('christianityCharacterCard'),
|
|
547
|
+
event: this.t('christianityEventCard'),
|
|
548
|
+
leader: this.t('christianityLeaderCard'),
|
|
549
|
+
offering: this.t('christianityOfferingCard'),
|
|
550
|
+
place: this.t('christianityPlaceCard'),
|
|
551
|
+
tool: this.t('christianityToolCard'),
|
|
552
|
+
wisdom: this.t('christianityWisdomCard'),
|
|
553
|
+
};
|
|
554
|
+
return labels[card.type];
|
|
555
|
+
}
|
|
556
|
+
definitionToRenderCard(card, overrides = {}) {
|
|
557
|
+
const text = this.translatedCardText(card);
|
|
558
|
+
const base = {
|
|
559
|
+
id: card.id,
|
|
560
|
+
name: text.name,
|
|
561
|
+
type: card.type,
|
|
562
|
+
typeLabel: this.cardTypeLabel(card),
|
|
563
|
+
cost: card.cost,
|
|
564
|
+
offeringValue: card.type === 'offering' ? card.offeringValue ?? card.life : undefined,
|
|
565
|
+
attack: card.type === 'character' ? card.attack : undefined,
|
|
566
|
+
life: card.life,
|
|
567
|
+
currentHp: card.life,
|
|
568
|
+
maxHp: card.life,
|
|
569
|
+
abilityName: text.abilityName,
|
|
570
|
+
abilityText: text.abilityText || this.defaultCardBody(card.type),
|
|
571
|
+
verseText: text.verseText,
|
|
572
|
+
scripture: text.scripture,
|
|
573
|
+
edition: card.edition,
|
|
574
|
+
collectorNumber: card.collectorNumber,
|
|
575
|
+
editionIcon: card.editionIcon ?? (card.edition === 'GEN' ? GENESIS_ICON_URL : undefined),
|
|
576
|
+
year: card.year,
|
|
577
|
+
author: card.author,
|
|
578
|
+
rarity: card.rarity,
|
|
579
|
+
imageUrl: card.imageUrl,
|
|
580
|
+
frontTemplate: card.frontTemplate ?? (card.edition === 'GEN' ? 'genesis-classic' : undefined),
|
|
581
|
+
};
|
|
582
|
+
return { ...base, ...overrides };
|
|
583
|
+
}
|
|
584
|
+
defaultCardBody(type) {
|
|
585
|
+
const bodies = {
|
|
586
|
+
action: this.t('christianityActionRuleBody'),
|
|
587
|
+
character: this.t('christianityCharacterBody'),
|
|
588
|
+
event: this.t('christianityEventRuleBody'),
|
|
589
|
+
leader: this.t('christianityLeaderBody'),
|
|
590
|
+
offering: this.t('christianityOfferingBody'),
|
|
591
|
+
place: this.t('christianityPlaceRuleBody'),
|
|
592
|
+
tool: this.t('christianityToolRuleBody'),
|
|
593
|
+
wisdom: this.t('christianityWisdomRuleBody'),
|
|
594
|
+
};
|
|
595
|
+
return bodies[type];
|
|
596
|
+
}
|
|
597
|
+
characterRenderCard(card) {
|
|
598
|
+
const definition = this.cardDefinition(card.cardId);
|
|
599
|
+
return this.definitionToRenderCard(definition, {
|
|
600
|
+
id: card.instanceId,
|
|
601
|
+
attack: card.attack,
|
|
602
|
+
life: card.maxHp,
|
|
603
|
+
currentHp: card.currentHp,
|
|
604
|
+
maxHp: card.maxHp,
|
|
605
|
+
statusText: card.canAttack ? this.t('christianityCharacterReady') : this.t('christianityCharacterExhausted'),
|
|
606
|
+
});
|
|
607
|
+
}
|
|
608
|
+
leaderRenderCard(player) {
|
|
609
|
+
if (player.leaderCardId) {
|
|
610
|
+
const definition = this.cardDefinition(player.leaderCardId);
|
|
611
|
+
return this.definitionToRenderCard(definition, {
|
|
612
|
+
id: `${player.seat}-leader`,
|
|
613
|
+
name: this.translatedCardText(definition).name,
|
|
614
|
+
type: 'leader',
|
|
615
|
+
typeLabel: this.t('christianityLeaderCard'),
|
|
616
|
+
life: player.leaderHp,
|
|
617
|
+
currentHp: player.leaderHp,
|
|
618
|
+
maxHp: player.leaderMaxHp,
|
|
619
|
+
statusText: this.t('christianityLeaderBody'),
|
|
620
|
+
});
|
|
621
|
+
}
|
|
622
|
+
return {
|
|
623
|
+
id: `${player.seat}-leader`,
|
|
624
|
+
name: player.leaderName,
|
|
625
|
+
type: 'leader',
|
|
626
|
+
typeLabel: this.t('christianityLeaderCard'),
|
|
627
|
+
life: player.leaderHp,
|
|
628
|
+
currentHp: player.leaderHp,
|
|
629
|
+
maxHp: player.leaderMaxHp,
|
|
630
|
+
abilityName: this.t('christianityLeaderCard'),
|
|
631
|
+
abilityText: this.t('christianityLeaderBody'),
|
|
632
|
+
verseText: this.t('christianityLeaderBody'),
|
|
633
|
+
edition: 'MVP',
|
|
634
|
+
collectorNumber: 'LIDER',
|
|
635
|
+
editionIcon: GENESIS_ICON_URL,
|
|
636
|
+
year: '2026',
|
|
637
|
+
author: 'MVP',
|
|
638
|
+
rarity: 'legendary',
|
|
639
|
+
frontTemplate: 'genesis-classic',
|
|
640
|
+
};
|
|
641
|
+
}
|
|
642
|
+
offeringRenderCard(offering) {
|
|
643
|
+
const definition = this.cardDefinition(offering.cardId);
|
|
644
|
+
const text = this.translatedCardText(definition);
|
|
645
|
+
return this.definitionToRenderCard(definition, {
|
|
646
|
+
id: offering.instanceId,
|
|
647
|
+
name: text.name,
|
|
648
|
+
type: 'offering',
|
|
649
|
+
typeLabel: this.t('christianityOfferingCard'),
|
|
650
|
+
offeringValue: offering.value,
|
|
651
|
+
life: offering.value,
|
|
652
|
+
currentHp: offering.value,
|
|
653
|
+
maxHp: offering.value,
|
|
654
|
+
abilityName: text.abilityName ?? offering.abilityName,
|
|
655
|
+
abilityText: text.abilityText ?? offering.abilityText ?? this.t('christianityOfferingNoAbility'),
|
|
656
|
+
statusText: offering.ready ? this.t('christianityOfferingReady') : this.t('christianityOfferingExhausted'),
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
previewRenderType(typeLabel) {
|
|
660
|
+
if (typeLabel === this.t('christianityLeaderCard'))
|
|
661
|
+
return 'leader';
|
|
662
|
+
if (typeLabel === this.t('christianityOfferingCard'))
|
|
663
|
+
return 'offering';
|
|
664
|
+
return 'character';
|
|
665
|
+
}
|
|
666
|
+
cardTypeIconUrl(card) {
|
|
667
|
+
return this.cardTypeIconUrlForType(card.type);
|
|
668
|
+
}
|
|
669
|
+
previewTypeIconUrl() {
|
|
670
|
+
const preview = this.selectedPreview();
|
|
671
|
+
if (preview?.eyebrow === this.t('christianityLeaderCard'))
|
|
672
|
+
return this.cardTypeIconUrlForType('leader');
|
|
673
|
+
if (preview?.eyebrow === this.t('christianityOfferingCard'))
|
|
674
|
+
return this.cardTypeIconUrlForType('offering');
|
|
675
|
+
return this.cardTypeIconUrlForType('character');
|
|
676
|
+
}
|
|
677
|
+
cardTypeIconUrlForType(type) {
|
|
678
|
+
const normalized = type.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
|
679
|
+
const icon = normalized === 'lider' ? 'leader' : normalized === 'personaje' ? 'character' : normalized === 'ofrenda' ? 'offering' : normalized;
|
|
680
|
+
return `assets/games/christianity/icons/${icon}.png`;
|
|
681
|
+
}
|
|
682
|
+
offeringPips(value) {
|
|
683
|
+
const count = Number(value);
|
|
684
|
+
if (!Number.isFinite(count) || count <= 0)
|
|
685
|
+
return [];
|
|
686
|
+
return Array.from({ length: Math.min(Math.floor(count), 5) });
|
|
687
|
+
}
|
|
688
|
+
battleSlots(seat) {
|
|
689
|
+
const cards = this.game().players[seat].battleZone;
|
|
690
|
+
const positionedCards = new Map();
|
|
691
|
+
cards.forEach((card, index) => {
|
|
692
|
+
const slot = Number.isInteger(card.slot) ? card.slot ?? index : index;
|
|
693
|
+
if (slot >= 0 && slot < 4 && !positionedCards.has(slot)) {
|
|
694
|
+
positionedCards.set(slot, card);
|
|
695
|
+
}
|
|
696
|
+
});
|
|
697
|
+
return Array.from({ length: 4 }, (_, index) => ({
|
|
698
|
+
trackId: positionedCards.get(index)?.instanceId ?? `${seat}-empty-${index}`,
|
|
699
|
+
card: positionedCards.get(index),
|
|
700
|
+
}));
|
|
701
|
+
}
|
|
702
|
+
battleSlotDropId(index) {
|
|
703
|
+
return `christianity-battle-slot-${index}`;
|
|
704
|
+
}
|
|
705
|
+
dropTargetIds() {
|
|
706
|
+
return ['christianity-offerings-drop', ...this.battleSlots('P1').map((_, index) => this.battleSlotDropId(index))];
|
|
707
|
+
}
|
|
708
|
+
hiddenHandCards(count) {
|
|
709
|
+
return Array.from({ length: count });
|
|
710
|
+
}
|
|
711
|
+
fanTransform(index, total, opponent) {
|
|
712
|
+
if (total <= 1)
|
|
713
|
+
return 'none';
|
|
714
|
+
const center = (total - 1) / 2;
|
|
715
|
+
const offset = index - center;
|
|
716
|
+
const rotate = offset * (opponent ? 6 : 5);
|
|
717
|
+
const lift = Math.abs(offset) * 0.25;
|
|
718
|
+
const hoverLift = opponent ? 0 : this.handWaveLift(index);
|
|
719
|
+
const scale = opponent ? 1 : this.handWaveScale(index);
|
|
720
|
+
const fanLift = opponent ? Math.abs(offset) * 0.22 : lift + hoverLift;
|
|
721
|
+
const fanSpread = opponent ? offset * 0.02 : 0;
|
|
722
|
+
return `translate(${fanSpread}rem, ${fanLift}rem) rotate(${rotate}deg) scale(${scale})`;
|
|
723
|
+
}
|
|
724
|
+
handCardZIndex(index) {
|
|
725
|
+
const hovered = this.hoveredHandIndex();
|
|
726
|
+
if (hovered === null)
|
|
727
|
+
return 2;
|
|
728
|
+
const distance = Math.abs(index - hovered);
|
|
729
|
+
return Math.max(2, 8 - distance);
|
|
730
|
+
}
|
|
731
|
+
setHoveredHandIndex(index) {
|
|
732
|
+
this.hoveredHandIndex.set(index);
|
|
733
|
+
}
|
|
734
|
+
clearHoveredHandIndex() {
|
|
735
|
+
this.hoveredHandIndex.set(null);
|
|
736
|
+
}
|
|
737
|
+
releaseHoveredHand(event) {
|
|
738
|
+
if (event.pointerType !== 'mouse') {
|
|
739
|
+
window.setTimeout(() => this.clearHoveredHandIndex(), 180);
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
handWaveLift(index) {
|
|
743
|
+
const hovered = this.hoveredHandIndex();
|
|
744
|
+
if (hovered === null)
|
|
745
|
+
return 0;
|
|
746
|
+
const distance = Math.abs(index - hovered);
|
|
747
|
+
if (distance === 0)
|
|
748
|
+
return -1.15;
|
|
749
|
+
if (distance === 1)
|
|
750
|
+
return -0.58;
|
|
751
|
+
if (distance === 2)
|
|
752
|
+
return -0.22;
|
|
753
|
+
return 0;
|
|
754
|
+
}
|
|
755
|
+
handWaveScale(index) {
|
|
756
|
+
const hovered = this.hoveredHandIndex();
|
|
757
|
+
if (hovered === null)
|
|
758
|
+
return 1;
|
|
759
|
+
const distance = Math.abs(index - hovered);
|
|
760
|
+
if (distance === 0)
|
|
761
|
+
return 1.06;
|
|
762
|
+
if (distance === 1)
|
|
763
|
+
return 1.03;
|
|
764
|
+
return 1;
|
|
765
|
+
}
|
|
766
|
+
readyOfferings(player) {
|
|
767
|
+
return player.offerings.reduce((total, offering) => total + (offering.ready ? offering.value : 0), 0);
|
|
768
|
+
}
|
|
769
|
+
totalOfferings(player) {
|
|
770
|
+
return player.offerings.reduce((total, offering) => total + offering.value, 0);
|
|
771
|
+
}
|
|
772
|
+
canPlay(card) {
|
|
773
|
+
if (!this.isOwnTurn())
|
|
774
|
+
return false;
|
|
775
|
+
if (card.type === 'offering')
|
|
776
|
+
return !this.player().offeringPlayedThisTurn;
|
|
777
|
+
if (card.type === 'character')
|
|
778
|
+
return this.readyOfferings(this.player()) >= (card.cost ?? 0) && this.player().battleZone.length < 4;
|
|
779
|
+
return false;
|
|
780
|
+
}
|
|
781
|
+
canPlaySelected() {
|
|
782
|
+
const selected = this.selectedHandCard();
|
|
783
|
+
return !!selected && this.canPlay(this.cardDefinition(selected));
|
|
784
|
+
}
|
|
785
|
+
selectedActionLabel() {
|
|
786
|
+
const selected = this.selectedCardDefinition();
|
|
787
|
+
if (!selected)
|
|
788
|
+
return this.t('christianityPlayCard');
|
|
789
|
+
return selected.type === 'offering' ? this.t('christianityPlayOffering') : this.t('christianityPlayCard');
|
|
790
|
+
}
|
|
791
|
+
selectedActionDisabled() {
|
|
792
|
+
const selected = this.selectedCardDefinition();
|
|
793
|
+
if (!selected || !this.canPlay(selected))
|
|
794
|
+
return true;
|
|
795
|
+
return selected.type === 'character';
|
|
796
|
+
}
|
|
797
|
+
canPlaceSelectedCharacter() {
|
|
798
|
+
const selected = this.selectedCardDefinition();
|
|
799
|
+
return !!selected && selected.type === 'character' && this.canPlay(selected);
|
|
800
|
+
}
|
|
801
|
+
canPlaceSelectedOffering() {
|
|
802
|
+
const selected = this.selectedCardDefinition();
|
|
803
|
+
return !!selected && selected.type === 'offering' && this.canPlay(selected);
|
|
804
|
+
}
|
|
805
|
+
isDraggingCharacter() {
|
|
806
|
+
const cardId = this.draggingCardId();
|
|
807
|
+
if (!cardId)
|
|
808
|
+
return false;
|
|
809
|
+
const card = this.cardDefinition(cardId);
|
|
810
|
+
return card.type === 'character' && this.canPlay(card);
|
|
811
|
+
}
|
|
812
|
+
isDraggingOffering() {
|
|
813
|
+
const cardId = this.draggingCardId();
|
|
814
|
+
if (!cardId)
|
|
815
|
+
return false;
|
|
816
|
+
const card = this.cardDefinition(cardId);
|
|
817
|
+
return card.type === 'offering' && this.canPlay(card);
|
|
818
|
+
}
|
|
819
|
+
startDraggingCard(cardId) {
|
|
820
|
+
this.selectedAttacker.set(null);
|
|
821
|
+
this.selectedHandCard.set(cardId);
|
|
822
|
+
this.draggingCardId.set(cardId);
|
|
823
|
+
this.closePreview();
|
|
824
|
+
}
|
|
825
|
+
endDraggingCard() {
|
|
826
|
+
this.draggingCardId.set(null);
|
|
827
|
+
}
|
|
828
|
+
dropOnBattleSlot(event, slotIndex) {
|
|
829
|
+
const card = this.cardDefinition(event.item.data);
|
|
830
|
+
if (card.type !== 'character')
|
|
831
|
+
return;
|
|
832
|
+
this.playCardFromHand(event.item.data, slotIndex);
|
|
833
|
+
}
|
|
834
|
+
dropOnOfferings(event) {
|
|
835
|
+
const card = this.cardDefinition(event.item.data);
|
|
836
|
+
if (card.type !== 'offering')
|
|
837
|
+
return;
|
|
838
|
+
this.playCardFromHand(event.item.data);
|
|
839
|
+
}
|
|
840
|
+
selectHandCard(cardId) {
|
|
841
|
+
const wasSelected = this.selectedHandCard() === cardId;
|
|
842
|
+
this.selectedAttacker.set(null);
|
|
843
|
+
this.selectedHandCard.set(wasSelected ? null : cardId);
|
|
844
|
+
this.closePreview();
|
|
845
|
+
}
|
|
846
|
+
playSelectedCard(slotIndex) {
|
|
847
|
+
const cardId = this.selectedHandCard();
|
|
848
|
+
if (!cardId)
|
|
849
|
+
return;
|
|
850
|
+
this.playCardFromHand(cardId, slotIndex);
|
|
851
|
+
}
|
|
852
|
+
playCardFromHand(cardId, slotIndex) {
|
|
853
|
+
const card = this.cardDefinition(cardId);
|
|
854
|
+
if (!this.canPlay(card))
|
|
855
|
+
return;
|
|
856
|
+
this.game.update(game => {
|
|
857
|
+
const next = structuredClone(game);
|
|
858
|
+
const player = next.players.P1;
|
|
859
|
+
const handIndex = player.hand?.indexOf(cardId) ?? -1;
|
|
860
|
+
if (handIndex < 0 || !player.hand)
|
|
861
|
+
return game;
|
|
862
|
+
player.hand.splice(handIndex, 1);
|
|
863
|
+
if (card.type === 'offering') {
|
|
864
|
+
player.offerings.push({
|
|
865
|
+
instanceId: `p1_offering_${next.revision + 1}`,
|
|
866
|
+
cardId: card.id,
|
|
867
|
+
name: card.name,
|
|
868
|
+
owner: 'P1',
|
|
869
|
+
ready: true,
|
|
870
|
+
value: card.offeringValue ?? card.life ?? 1,
|
|
871
|
+
abilityName: card.abilityName,
|
|
872
|
+
abilityText: card.abilityText,
|
|
873
|
+
abilityCost: card.abilityCost,
|
|
874
|
+
});
|
|
875
|
+
player.offeringPlayedThisTurn = true;
|
|
876
|
+
}
|
|
877
|
+
else {
|
|
878
|
+
this.spendOfferings(player, card.cost ?? 0);
|
|
879
|
+
const occupiedSlots = new Set(player.battleZone.map((character, index) => Number.isInteger(character.slot) ? character.slot ?? index : index));
|
|
880
|
+
const targetSlot = slotIndex ?? [0, 1, 2, 3].find(index => !occupiedSlots.has(index));
|
|
881
|
+
if (targetSlot === undefined || occupiedSlots.has(targetSlot))
|
|
882
|
+
return game;
|
|
883
|
+
player.battleZone.push({
|
|
884
|
+
instanceId: `p1_${next.revision + 1}_${player.battleZone.length}`,
|
|
885
|
+
cardId: card.id,
|
|
886
|
+
name: card.name,
|
|
887
|
+
owner: 'P1',
|
|
888
|
+
controller: 'P1',
|
|
889
|
+
slot: targetSlot,
|
|
890
|
+
attack: card.attack ?? 0,
|
|
891
|
+
currentHp: card.life ?? 1,
|
|
892
|
+
maxHp: card.life ?? 1,
|
|
893
|
+
canAttack: false,
|
|
894
|
+
});
|
|
895
|
+
player.battleZone.sort((left, right) => (left.slot ?? 0) - (right.slot ?? 0));
|
|
896
|
+
}
|
|
897
|
+
next.revision++;
|
|
898
|
+
next.log = [
|
|
899
|
+
card.type === 'offering' ? `${card.name} queda lista como ofrenda.` : `${card.name} entra en batalla.`,
|
|
900
|
+
...next.log,
|
|
901
|
+
].slice(0, 4);
|
|
902
|
+
return next;
|
|
903
|
+
});
|
|
904
|
+
this.selectedHandCard.set(null);
|
|
905
|
+
this.draggingCardId.set(null);
|
|
906
|
+
this.closePreview();
|
|
907
|
+
}
|
|
908
|
+
handleOfferingPile(seat) {
|
|
909
|
+
this.openOfferings(seat);
|
|
910
|
+
}
|
|
911
|
+
selectAttacker(card) {
|
|
912
|
+
this.selectedHandCard.set(null);
|
|
913
|
+
if (!this.isOwnTurn() || !card.canAttack) {
|
|
914
|
+
this.inspectCharacter(card);
|
|
915
|
+
return;
|
|
916
|
+
}
|
|
917
|
+
this.closePreview();
|
|
918
|
+
this.selectedAttacker.set(this.selectedAttacker()?.instanceId === card.instanceId ? null : card);
|
|
919
|
+
}
|
|
920
|
+
handleOpponentCharacter(card) {
|
|
921
|
+
if (this.selectedAttacker()) {
|
|
922
|
+
this.attackCharacter(card);
|
|
923
|
+
return;
|
|
924
|
+
}
|
|
925
|
+
this.inspectCharacter(card);
|
|
926
|
+
}
|
|
927
|
+
handleOpponentLeader() {
|
|
928
|
+
if (this.selectedAttacker() && !this.hasOpponentGuards()) {
|
|
929
|
+
this.attackLeader();
|
|
930
|
+
return;
|
|
931
|
+
}
|
|
932
|
+
this.inspectLeader('P2');
|
|
933
|
+
}
|
|
934
|
+
attackLeader() {
|
|
935
|
+
const attacker = this.selectedAttacker();
|
|
936
|
+
if (!attacker)
|
|
937
|
+
return;
|
|
938
|
+
if (this.hasOpponentGuards()) {
|
|
939
|
+
this.selectedPreview.set({
|
|
940
|
+
title: this.opponent().leaderName,
|
|
941
|
+
eyebrow: this.t('christianityLeaderCard'),
|
|
942
|
+
meta: `${this.opponent().leaderHp}/${this.opponent().leaderMaxHp}`,
|
|
943
|
+
body: this.t('christianityLeaderProtected'),
|
|
944
|
+
});
|
|
945
|
+
return;
|
|
946
|
+
}
|
|
947
|
+
this.game.update(game => {
|
|
948
|
+
const next = structuredClone(game);
|
|
949
|
+
const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
|
|
950
|
+
if (!liveAttacker || !liveAttacker.canAttack)
|
|
951
|
+
return game;
|
|
952
|
+
next.players.P2.leaderHp = Math.max(0, next.players.P2.leaderHp - liveAttacker.attack);
|
|
953
|
+
liveAttacker.canAttack = false;
|
|
954
|
+
next.revision++;
|
|
955
|
+
next.log = [`${liveAttacker.name} ataca al lider rival.`, ...next.log].slice(0, 4);
|
|
956
|
+
return next;
|
|
957
|
+
});
|
|
958
|
+
this.selectedAttacker.set(null);
|
|
959
|
+
}
|
|
960
|
+
attackCharacter(target) {
|
|
961
|
+
const attacker = this.selectedAttacker();
|
|
962
|
+
if (!attacker)
|
|
963
|
+
return;
|
|
964
|
+
this.game.update(game => {
|
|
965
|
+
const next = structuredClone(game);
|
|
966
|
+
const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
|
|
967
|
+
const liveTarget = next.players.P2.battleZone.find(card => card.instanceId === target.instanceId);
|
|
968
|
+
if (!liveAttacker || !liveTarget || !liveAttacker.canAttack)
|
|
969
|
+
return game;
|
|
970
|
+
liveTarget.currentHp -= liveAttacker.attack;
|
|
971
|
+
liveAttacker.currentHp -= liveTarget.attack;
|
|
972
|
+
liveAttacker.canAttack = false;
|
|
973
|
+
this.cleanupDestroyed(next.players.P1, next);
|
|
974
|
+
this.cleanupDestroyed(next.players.P2, next);
|
|
975
|
+
next.revision++;
|
|
976
|
+
next.log = [`${liveAttacker.name} combate contra ${liveTarget.name}.`, ...next.log].slice(0, 4);
|
|
977
|
+
return next;
|
|
978
|
+
});
|
|
979
|
+
this.selectedAttacker.set(null);
|
|
980
|
+
}
|
|
981
|
+
endTurn() {
|
|
982
|
+
this.selectedHandCard.set(null);
|
|
983
|
+
this.selectedAttacker.set(null);
|
|
984
|
+
this.selectedPreview.set(null);
|
|
985
|
+
this.selectedInfo.set(null);
|
|
986
|
+
this.game.update(game => {
|
|
987
|
+
const next = structuredClone(game);
|
|
988
|
+
next.turnOwner = next.turnOwner === 'P1' ? 'P2' : 'P1';
|
|
989
|
+
next.turnCount++;
|
|
990
|
+
const current = next.players[next.turnOwner];
|
|
991
|
+
current.offeringPlayedThisTurn = false;
|
|
992
|
+
current.offerings = current.offerings.map(offering => ({ ...offering, ready: true }));
|
|
993
|
+
current.battleZone = current.battleZone.map(card => ({ ...card, canAttack: true }));
|
|
994
|
+
const drawnCard = next.sharedDeck.shift();
|
|
995
|
+
if (drawnCard) {
|
|
996
|
+
if (current.hand) {
|
|
997
|
+
current.hand.push(drawnCard);
|
|
998
|
+
}
|
|
999
|
+
else {
|
|
1000
|
+
current.handCount = (current.handCount ?? 0) + 1;
|
|
1001
|
+
}
|
|
1002
|
+
}
|
|
1003
|
+
next.revision++;
|
|
1004
|
+
next.log = [
|
|
1005
|
+
drawnCard ? `${current.displayName} roba una carta.` : `El mazo esta vacio.`,
|
|
1006
|
+
`Turno de ${current.displayName}.`,
|
|
1007
|
+
...next.log,
|
|
1008
|
+
].slice(0, 4);
|
|
1009
|
+
return next;
|
|
1010
|
+
});
|
|
1011
|
+
}
|
|
1012
|
+
resetMock() {
|
|
1013
|
+
this.game.set(this.catalogLoaded() ? this.createTutorialGame(this.allCatalogCards()) : structuredClone(STARTING_GAME));
|
|
1014
|
+
this.selectedHandCard.set(null);
|
|
1015
|
+
this.selectedAttacker.set(null);
|
|
1016
|
+
this.selectedPreview.set(null);
|
|
1017
|
+
this.selectedInfo.set(null);
|
|
1018
|
+
this.showHistory.set(false);
|
|
1019
|
+
this.showGallery.set(false);
|
|
1020
|
+
this.offeringsSeat.set(null);
|
|
1021
|
+
}
|
|
1022
|
+
startTutorial() {
|
|
1023
|
+
this.resetMock();
|
|
1024
|
+
this.screen.set('table');
|
|
1025
|
+
}
|
|
1026
|
+
closePreview() {
|
|
1027
|
+
this.selectedPreview.set(null);
|
|
1028
|
+
this.resetPreviewTilt();
|
|
1029
|
+
}
|
|
1030
|
+
closeInfo() {
|
|
1031
|
+
this.selectedInfo.set(null);
|
|
1032
|
+
}
|
|
1033
|
+
openOfferings(seat) {
|
|
1034
|
+
this.selectedPreview.set(null);
|
|
1035
|
+
this.selectedInfo.set(null);
|
|
1036
|
+
this.showHistory.set(false);
|
|
1037
|
+
this.showGallery.set(false);
|
|
1038
|
+
this.offeringsSeat.set(seat);
|
|
1039
|
+
}
|
|
1040
|
+
openHistory() {
|
|
1041
|
+
this.selectedPreview.set(null);
|
|
1042
|
+
this.selectedInfo.set(null);
|
|
1043
|
+
this.offeringsSeat.set(null);
|
|
1044
|
+
this.showGallery.set(false);
|
|
1045
|
+
this.showHistory.set(true);
|
|
1046
|
+
}
|
|
1047
|
+
closeOfferings() {
|
|
1048
|
+
this.offeringsSeat.set(null);
|
|
1049
|
+
}
|
|
1050
|
+
openGallery() {
|
|
1051
|
+
this.selectedPreview.set(null);
|
|
1052
|
+
this.selectedInfo.set(null);
|
|
1053
|
+
this.offeringsSeat.set(null);
|
|
1054
|
+
this.showHistory.set(false);
|
|
1055
|
+
this.showGallery.set(true);
|
|
1056
|
+
}
|
|
1057
|
+
closeGallery() {
|
|
1058
|
+
this.showGallery.set(false);
|
|
1059
|
+
}
|
|
1060
|
+
setGallerySearch(event) {
|
|
1061
|
+
this.gallerySearch.set(event.target.value);
|
|
1062
|
+
}
|
|
1063
|
+
setGalleryType(event) {
|
|
1064
|
+
this.galleryType.set(event.target.value);
|
|
1065
|
+
}
|
|
1066
|
+
tiltPreview(event) {
|
|
1067
|
+
const bounds = event.currentTarget.getBoundingClientRect();
|
|
1068
|
+
const x = (event.clientX - bounds.left) / bounds.width - 0.5;
|
|
1069
|
+
const y = (event.clientY - bounds.top) / bounds.height - 0.5;
|
|
1070
|
+
this.previewTilt.set({
|
|
1071
|
+
rotateX: 5 - y * 18,
|
|
1072
|
+
rotateY: -5 + x * 18,
|
|
1073
|
+
shiftX: x * 10,
|
|
1074
|
+
shiftY: y * 10,
|
|
1075
|
+
});
|
|
1076
|
+
}
|
|
1077
|
+
resetPreviewTilt() {
|
|
1078
|
+
this.previewTilt.set({ rotateX: 5, rotateY: -5, shiftX: 0, shiftY: 0 });
|
|
1079
|
+
}
|
|
1080
|
+
cleanupDestroyed(player, game) {
|
|
1081
|
+
const destroyed = player.battleZone.filter(card => card.currentHp <= 0);
|
|
1082
|
+
if (!destroyed.length)
|
|
1083
|
+
return;
|
|
1084
|
+
game.historyZone.push(...destroyed.map(card => card.cardId));
|
|
1085
|
+
player.battleZone = player.battleZone.filter(card => card.currentHp > 0);
|
|
1086
|
+
}
|
|
1087
|
+
inspectLeader(seat) {
|
|
1088
|
+
this.selectedInfo.set(null);
|
|
1089
|
+
const player = this.game().players[seat];
|
|
1090
|
+
const leader = player.leaderCardId ? this.cardDefinition(player.leaderCardId) : undefined;
|
|
1091
|
+
this.selectedPreview.set({
|
|
1092
|
+
title: leader ? this.translatedCardText(leader).name : player.leaderName,
|
|
1093
|
+
eyebrow: this.t('christianityLeaderCard'),
|
|
1094
|
+
meta: `${player.leaderHp}/${player.leaderMaxHp}`,
|
|
1095
|
+
body: seat === 'P2' && this.hasOpponentGuards() ? this.t('christianityLeaderProtected') : this.t('christianityLeaderBody'),
|
|
1096
|
+
cardId: player.leaderCardId,
|
|
1097
|
+
source: 'board',
|
|
1098
|
+
});
|
|
1099
|
+
}
|
|
1100
|
+
inspectOffering(offering) {
|
|
1101
|
+
this.selectedInfo.set(null);
|
|
1102
|
+
const definition = this.cardDefinition(offering.cardId);
|
|
1103
|
+
const text = this.translatedCardText(definition);
|
|
1104
|
+
this.selectedPreview.set({
|
|
1105
|
+
title: text.name,
|
|
1106
|
+
eyebrow: this.t('christianityOfferingCard'),
|
|
1107
|
+
meta: offering.ready ? this.t('christianityOfferingReady') : this.t('christianityOfferingExhausted'),
|
|
1108
|
+
body: text.abilityText ?? offering.abilityText ?? this.t('christianityOfferingBody'),
|
|
1109
|
+
cardId: offering.cardId,
|
|
1110
|
+
source: 'pile',
|
|
1111
|
+
});
|
|
1112
|
+
}
|
|
1113
|
+
offeringAbilityText(offering) {
|
|
1114
|
+
const text = this.translatedCardText(this.cardDefinition(offering.cardId));
|
|
1115
|
+
return text.abilityText ?? offering.abilityText ?? this.t('christianityOfferingNoAbility');
|
|
1116
|
+
}
|
|
1117
|
+
canUseOfferingAbility(offering, seat) {
|
|
1118
|
+
if (seat !== 'P1' || !this.isOwnTurn())
|
|
1119
|
+
return false;
|
|
1120
|
+
if (!offering.ready || !offering.abilityName)
|
|
1121
|
+
return false;
|
|
1122
|
+
return this.readyOfferings(this.game().players[seat]) >= (offering.abilityCost ?? 0);
|
|
1123
|
+
}
|
|
1124
|
+
useOfferingAbility(offering, seat) {
|
|
1125
|
+
if (!this.canUseOfferingAbility(offering, seat))
|
|
1126
|
+
return;
|
|
1127
|
+
this.game.update(game => {
|
|
1128
|
+
const next = structuredClone(game);
|
|
1129
|
+
const player = next.players[seat];
|
|
1130
|
+
const liveOffering = player.offerings.find(card => card.instanceId === offering.instanceId);
|
|
1131
|
+
if (!liveOffering || !liveOffering.ready)
|
|
1132
|
+
return game;
|
|
1133
|
+
const offeringId = liveOffering.instanceId;
|
|
1134
|
+
this.spendOfferings(player, liveOffering.abilityCost ?? 0);
|
|
1135
|
+
player.offerings = player.offerings.map(card => (card.instanceId === offeringId ? { ...card, ready: false } : card));
|
|
1136
|
+
player.leaderHp = Math.max(0, player.leaderHp - 1);
|
|
1137
|
+
next.revision++;
|
|
1138
|
+
next.log = [`${liveOffering.name}: ${liveOffering.abilityName}.`, ...next.log].slice(0, 4);
|
|
1139
|
+
return next;
|
|
1140
|
+
});
|
|
1141
|
+
}
|
|
1142
|
+
inspectDeck() {
|
|
1143
|
+
const remainingCards = this.game().sharedDeck.length;
|
|
1144
|
+
this.selectedPreview.set(null);
|
|
1145
|
+
this.selectedInfo.set({
|
|
1146
|
+
title: this.t('christianityDeck'),
|
|
1147
|
+
eyebrow: this.t('christianitySharedZone'),
|
|
1148
|
+
meta: `${remainingCards} ${remainingCards === 1 ? this.t('christianityCardRemaining') : this.t('christianityCardsRemaining')}`,
|
|
1149
|
+
body: this.t('christianityDeckBody'),
|
|
1150
|
+
facts: [
|
|
1151
|
+
this.t('christianityDeckRuleShared'),
|
|
1152
|
+
this.t('christianityDeckRuleDraw'),
|
|
1153
|
+
this.t('christianityDeckRuleEmpty'),
|
|
1154
|
+
],
|
|
1155
|
+
});
|
|
1156
|
+
}
|
|
1157
|
+
inspectHowToPlay() {
|
|
1158
|
+
this.selectedPreview.set(null);
|
|
1159
|
+
this.selectedInfo.set({
|
|
1160
|
+
title: this.t('christianityHowToPlay'),
|
|
1161
|
+
eyebrow: this.t('christianityGenesisEdition'),
|
|
1162
|
+
meta: this.t('christianityTutorialMode'),
|
|
1163
|
+
body: this.t('christianityHowToPlayIntro'),
|
|
1164
|
+
facts: [
|
|
1165
|
+
this.t('christianityHowToPlayGoal'),
|
|
1166
|
+
this.t('christianityHowToPlayTurn'),
|
|
1167
|
+
this.t('christianityHowToPlayOfferings'),
|
|
1168
|
+
this.t('christianityHowToPlayBattle'),
|
|
1169
|
+
],
|
|
1170
|
+
});
|
|
1171
|
+
}
|
|
1172
|
+
inspectHandCard(cardId, fromHand = false) {
|
|
1173
|
+
this.selectedInfo.set(null);
|
|
1174
|
+
const card = this.cardDefinition(cardId);
|
|
1175
|
+
const text = this.translatedCardText(card);
|
|
1176
|
+
if (fromHand) {
|
|
1177
|
+
this.selectedAttacker.set(null);
|
|
1178
|
+
this.selectedHandCard.set(cardId);
|
|
1179
|
+
}
|
|
1180
|
+
this.selectedPreview.set({
|
|
1181
|
+
title: text.name,
|
|
1182
|
+
eyebrow: this.cardTypeLabel(card),
|
|
1183
|
+
meta: this.cardPreviewMeta(card),
|
|
1184
|
+
body: this.defaultCardBody(card.type),
|
|
1185
|
+
cardId,
|
|
1186
|
+
source: fromHand ? 'hand' : 'pile',
|
|
1187
|
+
});
|
|
1188
|
+
}
|
|
1189
|
+
inspectGalleryCard(cardId) {
|
|
1190
|
+
this.inspectHandCard(cardId);
|
|
1191
|
+
}
|
|
1192
|
+
inspectHistoryCard(cardId) {
|
|
1193
|
+
this.showHistory.set(false);
|
|
1194
|
+
this.inspectHandCard(cardId);
|
|
1195
|
+
}
|
|
1196
|
+
inspectCharacter(card) {
|
|
1197
|
+
this.selectedInfo.set(null);
|
|
1198
|
+
const definition = this.cardDefinition(card.cardId);
|
|
1199
|
+
this.selectedPreview.set({
|
|
1200
|
+
title: this.translatedCardText(definition).name,
|
|
1201
|
+
eyebrow: this.t('christianityCharacterCard'),
|
|
1202
|
+
meta: `${card.attack}/${card.currentHp}`,
|
|
1203
|
+
body: card.canAttack ? this.t('christianityCharacterReady') : this.t('christianityCharacterExhausted'),
|
|
1204
|
+
cardId: card.cardId,
|
|
1205
|
+
source: 'board',
|
|
1206
|
+
});
|
|
1207
|
+
}
|
|
1208
|
+
cardPreviewMeta(card) {
|
|
1209
|
+
if (card.type === 'offering')
|
|
1210
|
+
return `${card.offeringValue ?? card.life ?? 1}`;
|
|
1211
|
+
if (card.type === 'leader')
|
|
1212
|
+
return `${card.leaderLife ?? card.life ?? 0}`;
|
|
1213
|
+
if (card.type === 'character')
|
|
1214
|
+
return `${this.t('christianityCost')} ${card.cost ?? 0} · ${card.attack ?? 0}/${card.life ?? 0}`;
|
|
1215
|
+
if (card.cost !== undefined)
|
|
1216
|
+
return `${this.t('christianityCost')} ${card.cost}`;
|
|
1217
|
+
return card.collectorNumber ?? card.id;
|
|
1218
|
+
}
|
|
1219
|
+
spendOfferings(player, cost) {
|
|
1220
|
+
let remaining = cost;
|
|
1221
|
+
player.offerings = player.offerings.map(offering => {
|
|
1222
|
+
if (remaining <= 0 || !offering.ready)
|
|
1223
|
+
return offering;
|
|
1224
|
+
remaining -= offering.value;
|
|
1225
|
+
return { ...offering, ready: false };
|
|
1226
|
+
});
|
|
1227
|
+
}
|
|
1228
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1229
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChristianityGameComponent, isStandalone: true, selector: "val-christianity-game", ngImport: i0, template: `
|
|
1230
|
+
<main class="christianity-shell">
|
|
1231
|
+
<section class="christianity-header">
|
|
1232
|
+
<div>
|
|
1233
|
+
<p>{{ t('christianityEyebrow') }}</p>
|
|
1234
|
+
<h1>{{ t('christianityTitle') }}</h1>
|
|
1235
|
+
</div>
|
|
1236
|
+
<div class="christianity-header-actions">
|
|
1237
|
+
@if (screen() !== 'splash') {
|
|
1238
|
+
<button type="button" class="christianity-gallery-open" valLightRipple (click)="openGallery()">
|
|
1239
|
+
{{ t('christianityGallery') }}
|
|
1240
|
+
</button>
|
|
1241
|
+
}
|
|
1242
|
+
@if (screen() === 'table') {
|
|
1243
|
+
<div class="christianity-turn" [class.is-own-turn]="isOwnTurn()">
|
|
1244
|
+
<span>{{ t('christianityTurn') }}</span>
|
|
1245
|
+
<strong>{{ currentPlayer().displayName }}</strong>
|
|
1246
|
+
</div>
|
|
1247
|
+
}
|
|
1248
|
+
</div>
|
|
1249
|
+
</section>
|
|
1250
|
+
|
|
1251
|
+
@if (screen() === 'splash') {
|
|
1252
|
+
<section class="christianity-splash" role="status" aria-live="polite">
|
|
1253
|
+
<div class="christianity-splash__mark">
|
|
1254
|
+
<i aria-hidden="true"></i>
|
|
1255
|
+
<i aria-hidden="true"></i>
|
|
1256
|
+
<i aria-hidden="true"></i>
|
|
1257
|
+
</div>
|
|
1258
|
+
<div>
|
|
1259
|
+
<span>{{ t('christianitySplashEyebrow') }}</span>
|
|
1260
|
+
<h2>{{ t('christianitySplashTitle') }}</h2>
|
|
1261
|
+
<p>{{ splashStatusText() }}</p>
|
|
1262
|
+
</div>
|
|
1263
|
+
</section>
|
|
1264
|
+
} @else if (screen() === 'home') {
|
|
1265
|
+
<section class="christianity-start">
|
|
1266
|
+
<div class="christianity-start__hero">
|
|
1267
|
+
<div class="christianity-start__copy">
|
|
1268
|
+
<span>{{ t('christianityGenesisEdition') }}</span>
|
|
1269
|
+
<h2>{{ t('christianityStartTitle') }}</h2>
|
|
1270
|
+
<p>{{ t('christianityStartBody') }}</p>
|
|
1271
|
+
</div>
|
|
1272
|
+
<div class="christianity-start__fan" aria-hidden="true">
|
|
1273
|
+
@for (card of startFeaturedCards(); track card.id) {
|
|
1274
|
+
<val-christianity-card
|
|
1275
|
+
[card]="definitionToRenderCard(card)"
|
|
1276
|
+
variant="hand"
|
|
1277
|
+
[style.transform]="startFeaturedCardTransform($index)"
|
|
1278
|
+
></val-christianity-card>
|
|
1279
|
+
}
|
|
1280
|
+
</div>
|
|
1281
|
+
</div>
|
|
1282
|
+
<div class="christianity-start__cards">
|
|
1283
|
+
<article>
|
|
1284
|
+
<strong>{{ t('christianityTutorialMode') }}</strong>
|
|
1285
|
+
<p>{{ t('christianityTutorialModeBody') }}</p>
|
|
1286
|
+
<button type="button" class="christianity-primary-action" valLightRipple (click)="startTutorial()">
|
|
1287
|
+
{{ t('christianityStartTutorial') }}
|
|
1288
|
+
</button>
|
|
1289
|
+
</article>
|
|
1290
|
+
<article>
|
|
1291
|
+
<strong>{{ t('christianityGallery') }}</strong>
|
|
1292
|
+
<p>{{ t('christianityGalleryModeBody') }}</p>
|
|
1293
|
+
<button type="button" class="christianity-secondary-action" valLightRipple (click)="openGallery()">
|
|
1294
|
+
{{ t('christianityOpenGallery') }}
|
|
1295
|
+
</button>
|
|
1296
|
+
</article>
|
|
1297
|
+
<article>
|
|
1298
|
+
<strong>{{ t('christianityHowToPlay') }}</strong>
|
|
1299
|
+
<p>{{ t('christianityHowToPlayBody') }}</p>
|
|
1300
|
+
<button type="button" class="christianity-secondary-action" valLightRipple (click)="inspectHowToPlay()">
|
|
1301
|
+
{{ t('learnMore') }}
|
|
1302
|
+
</button>
|
|
1303
|
+
</article>
|
|
1304
|
+
</div>
|
|
1305
|
+
<div class="christianity-start__status" [attr.aria-label]="t('christianityEditionStatus')">
|
|
1306
|
+
<span>{{ galleryEditionLabel() }}</span>
|
|
1307
|
+
<span>{{ t('christianityTutorialActive') }}</span>
|
|
1308
|
+
<span>{{ catalogStatusLabel() }}</span>
|
|
1309
|
+
</div>
|
|
1310
|
+
<section class="christianity-start__modes" [attr.aria-label]="t('christianityFutureModes')">
|
|
1311
|
+
@for (mode of futureModes(); track mode.title) {
|
|
1312
|
+
<article>
|
|
1313
|
+
<strong>{{ mode.title }}</strong>
|
|
1314
|
+
<p>{{ mode.body }}</p>
|
|
1315
|
+
<span>{{ t('soonTitle') }}</span>
|
|
1316
|
+
</article>
|
|
1317
|
+
}
|
|
1318
|
+
</section>
|
|
1319
|
+
</section>
|
|
1320
|
+
} @else {
|
|
1321
|
+
<section class="christianity-match-strip" [attr.aria-label]="t('christianityMatchScore')">
|
|
1322
|
+
<article class="christianity-match-player">
|
|
1323
|
+
<span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
|
|
1324
|
+
<div>
|
|
1325
|
+
<strong>{{ player().displayName }}</strong>
|
|
1326
|
+
<small>{{ playerLeaderDisplayName(player()) }} · {{ player().leaderHp }}/{{ player().leaderMaxHp }}</small>
|
|
1327
|
+
</div>
|
|
1328
|
+
</article>
|
|
1329
|
+
<div class="christianity-scoreboard">
|
|
1330
|
+
<span>{{ t('christianityMatch') }}</span>
|
|
1331
|
+
<strong>{{ game().matchScore.P1 }}-{{ game().matchScore.P2 }}</strong>
|
|
1332
|
+
</div>
|
|
1333
|
+
<article class="christianity-match-player christianity-match-player--opponent">
|
|
1334
|
+
<span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
|
|
1335
|
+
<div>
|
|
1336
|
+
<strong>{{ opponent().displayName }}</strong>
|
|
1337
|
+
<small>{{ playerLeaderDisplayName(opponent()) }} · {{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</small>
|
|
1338
|
+
</div>
|
|
1339
|
+
</article>
|
|
1340
|
+
</section>
|
|
1341
|
+
|
|
1342
|
+
<section class="christianity-hand-shelf christianity-hand-shelf--opponent">
|
|
1343
|
+
<div class="christianity-hand-meter christianity-hand-meter--opponent">
|
|
1344
|
+
<span>{{ t('christianityHand') }}</span>
|
|
1345
|
+
<strong>{{ opponentHandCount() }}</strong>
|
|
1346
|
+
</div>
|
|
1347
|
+
<section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
|
|
1348
|
+
@for (_ of hiddenHandCards(opponentHandCount()); track $index) {
|
|
1349
|
+
<button
|
|
1350
|
+
type="button"
|
|
1351
|
+
class="christianity-card-preview-card christianity-card-frame christianity-card-frame--back"
|
|
1352
|
+
valLightRipple
|
|
1353
|
+
[style.transform]="fanTransform($index, opponentHandCount(), true)"
|
|
1354
|
+
[attr.aria-label]="t('christianityHiddenCard')"
|
|
1355
|
+
></button>
|
|
1356
|
+
}
|
|
1357
|
+
</section>
|
|
1358
|
+
</section>
|
|
1359
|
+
|
|
1360
|
+
<section class="christianity-table" [attr.aria-label]="t('christianityTable')">
|
|
1361
|
+
<section class="christianity-player-side christianity-player-side--opponent">
|
|
1362
|
+
<section class="christianity-player-rack christianity-player-rack--opponent">
|
|
1363
|
+
<div class="christianity-offerings-zone">
|
|
1364
|
+
<button type="button" class="christianity-offering-pile" valLightRipple (click)="openOfferings('P2')">
|
|
1365
|
+
<i aria-hidden="true"></i>
|
|
1366
|
+
<i aria-hidden="true"></i>
|
|
1367
|
+
<i aria-hidden="true"></i>
|
|
1368
|
+
<span>{{ t('christianityOfferings') }}</span>
|
|
1369
|
+
<strong>{{ readyOfferings(opponent()) }}/{{ totalOfferings(opponent()) }}</strong>
|
|
1370
|
+
</button>
|
|
1371
|
+
</div>
|
|
1372
|
+
<button type="button" class="christianity-leader-card christianity-render-card-button" valLightRipple [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
|
|
1373
|
+
<val-christianity-card [card]="leaderRenderCard(opponent())" variant="table"></val-christianity-card>
|
|
1374
|
+
</button>
|
|
1375
|
+
<span class="christianity-rack-spacer" aria-hidden="true"></span>
|
|
1376
|
+
</section>
|
|
1377
|
+
|
|
1378
|
+
<section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
|
|
1379
|
+
@for (slot of battleSlots('P2'); track slot.trackId) {
|
|
1380
|
+
@if (slot.card) {
|
|
1381
|
+
<button
|
|
1382
|
+
type="button"
|
|
1383
|
+
class="christianity-card-preview-card christianity-card-preview-card--battle christianity-render-card-button"
|
|
1384
|
+
valLightRipple
|
|
1385
|
+
[class.is-target]="selectedAttacker()"
|
|
1386
|
+
(click)="handleOpponentCharacter(slot.card)"
|
|
1387
|
+
>
|
|
1388
|
+
<val-christianity-card [card]="characterRenderCard(slot.card)" variant="table"></val-christianity-card>
|
|
1389
|
+
</button>
|
|
1390
|
+
} @else {
|
|
1391
|
+
<span class="christianity-slot"></span>
|
|
1392
|
+
}
|
|
1393
|
+
}
|
|
1394
|
+
</section>
|
|
1395
|
+
</section>
|
|
1396
|
+
|
|
1397
|
+
<section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
|
|
1398
|
+
<button type="button" class="christianity-zone-pile christianity-zone-pile--history" valLightRipple (click)="openHistory()">
|
|
1399
|
+
<i aria-hidden="true"></i>
|
|
1400
|
+
<i aria-hidden="true"></i>
|
|
1401
|
+
<i aria-hidden="true"></i>
|
|
1402
|
+
<span>{{ t('christianityHistory') }}</span>
|
|
1403
|
+
<strong>{{ game().historyZone.length }}</strong>
|
|
1404
|
+
</button>
|
|
1405
|
+
<button type="button" class="christianity-zone-pile christianity-zone-pile--deck" valLightRipple aria-live="polite" (click)="inspectDeck()">
|
|
1406
|
+
<i aria-hidden="true"></i>
|
|
1407
|
+
<i aria-hidden="true"></i>
|
|
1408
|
+
<i aria-hidden="true"></i>
|
|
1409
|
+
<span>{{ t('christianityDeck') }}</span>
|
|
1410
|
+
<strong>{{ game().sharedDeck.length }}</strong>
|
|
1411
|
+
</button>
|
|
1412
|
+
<div class="christianity-zone-card">
|
|
1413
|
+
<span>{{ t('christianityPlace') }}</span>
|
|
1414
|
+
<strong>{{ t('christianityEmpty') }}</strong>
|
|
1415
|
+
</div>
|
|
1416
|
+
</section>
|
|
1417
|
+
|
|
1418
|
+
<section class="christianity-player-side">
|
|
1419
|
+
<section class="christianity-battle-zone" [class.is-placing-card]="canPlaceSelectedCharacter() || isDraggingCharacter()" [attr.aria-label]="t('christianityYourBattle')">
|
|
1420
|
+
@for (slot of battleSlots('P1'); track slot.trackId) {
|
|
1421
|
+
@if (slot.card) {
|
|
1422
|
+
<button
|
|
1423
|
+
type="button"
|
|
1424
|
+
class="christianity-card-preview-card christianity-card-preview-card--battle christianity-render-card-button"
|
|
1425
|
+
valLightRipple
|
|
1426
|
+
[class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
|
|
1427
|
+
[class.is-exhausted]="!slot.card.canAttack"
|
|
1428
|
+
[class.is-ready-attacker]="isOwnTurn() && slot.card.canAttack"
|
|
1429
|
+
(click)="selectAttacker(slot.card)"
|
|
1430
|
+
>
|
|
1431
|
+
<val-christianity-card [card]="characterRenderCard(slot.card)" variant="table"></val-christianity-card>
|
|
1432
|
+
</button>
|
|
1433
|
+
} @else {
|
|
1434
|
+
<button
|
|
1435
|
+
type="button"
|
|
1436
|
+
class="christianity-slot"
|
|
1437
|
+
cdkDropList
|
|
1438
|
+
[id]="battleSlotDropId($index)"
|
|
1439
|
+
[cdkDropListData]="$index"
|
|
1440
|
+
[cdkDropListConnectedTo]="['christianity-hand-source']"
|
|
1441
|
+
[cdkDropListEnterPredicate]="canDropOnBattleSlot"
|
|
1442
|
+
[cdkDropListSortingDisabled]="true"
|
|
1443
|
+
[class.christianity-slot--play-target]="canPlaceSelectedCharacter() || isDraggingCharacter()"
|
|
1444
|
+
valLightRipple
|
|
1445
|
+
(cdkDropListDropped)="dropOnBattleSlot($event, $index)"
|
|
1446
|
+
(click)="playSelectedCard($index)"
|
|
1447
|
+
>
|
|
1448
|
+
@if (canPlaceSelectedCharacter() || isDraggingCharacter()) {
|
|
1449
|
+
<span>{{ t('christianityPlayHere') }}</span>
|
|
1450
|
+
}
|
|
1451
|
+
</button>
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
</section>
|
|
1455
|
+
|
|
1456
|
+
<section class="christianity-player-rack">
|
|
1457
|
+
<div class="christianity-offerings-zone">
|
|
1458
|
+
<button
|
|
1459
|
+
type="button"
|
|
1460
|
+
class="christianity-offering-pile"
|
|
1461
|
+
cdkDropList
|
|
1462
|
+
id="christianity-offerings-drop"
|
|
1463
|
+
valLightRipple
|
|
1464
|
+
[cdkDropListConnectedTo]="['christianity-hand-source']"
|
|
1465
|
+
[class.is-play-target]="canPlaceSelectedOffering() || isDraggingOffering()"
|
|
1466
|
+
[cdkDropListEnterPredicate]="canDropOnOfferings"
|
|
1467
|
+
[cdkDropListSortingDisabled]="true"
|
|
1468
|
+
(cdkDropListDropped)="dropOnOfferings($event)"
|
|
1469
|
+
(click)="handleOfferingPile('P1')"
|
|
1470
|
+
>
|
|
1471
|
+
<i aria-hidden="true"></i>
|
|
1472
|
+
<i aria-hidden="true"></i>
|
|
1473
|
+
<i aria-hidden="true"></i>
|
|
1474
|
+
<span>{{ t('christianityOfferings') }}</span>
|
|
1475
|
+
<strong>{{ readyOfferings(player()) }}/{{ totalOfferings(player()) }}</strong>
|
|
1476
|
+
</button>
|
|
1477
|
+
</div>
|
|
1478
|
+
<button type="button" class="christianity-leader-card christianity-render-card-button" valLightRipple (click)="inspectLeader('P1')">
|
|
1479
|
+
<val-christianity-card [card]="leaderRenderCard(player())" variant="table"></val-christianity-card>
|
|
1480
|
+
</button>
|
|
1481
|
+
<div class="christianity-player-command">
|
|
1482
|
+
<div class="christianity-player-badge">
|
|
1483
|
+
<span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
|
|
1484
|
+
<strong>{{ player().displayName }}</strong>
|
|
1485
|
+
</div>
|
|
1486
|
+
<button
|
|
1487
|
+
type="button"
|
|
1488
|
+
class="christianity-end-turn"
|
|
1489
|
+
(click)="endTurn()"
|
|
1490
|
+
>
|
|
1491
|
+
{{ t('christianityEndTurn') }}
|
|
1492
|
+
</button>
|
|
1493
|
+
</div>
|
|
1494
|
+
</section>
|
|
1495
|
+
</section>
|
|
1496
|
+
</section>
|
|
1497
|
+
|
|
1498
|
+
<section class="christianity-hand-shelf">
|
|
1499
|
+
<div class="christianity-hand-meter">
|
|
1500
|
+
<span>{{ t('christianityHand') }}</span>
|
|
1501
|
+
<strong>{{ player().hand?.length ?? 0 }}</strong>
|
|
1502
|
+
</div>
|
|
1503
|
+
<section
|
|
1504
|
+
class="christianity-hand-fan"
|
|
1505
|
+
cdkDropList
|
|
1506
|
+
id="christianity-hand-source"
|
|
1507
|
+
[cdkDropListConnectedTo]="dropTargetIds()"
|
|
1508
|
+
[attr.aria-label]="t('christianityYourHand')"
|
|
1509
|
+
(pointerleave)="clearHoveredHandIndex()"
|
|
1510
|
+
>
|
|
1511
|
+
@for (cardId of player().hand ?? []; track cardId + $index) {
|
|
1512
|
+
@let card = cardDefinition(cardId);
|
|
1513
|
+
<div
|
|
1514
|
+
class="christianity-hand-card-wrap"
|
|
1515
|
+
[class.is-selected]="selectedHandCard() === cardId"
|
|
1516
|
+
[class.is-dragging]="draggingCardId() === cardId"
|
|
1517
|
+
[style.z-index]="handCardZIndex($index)"
|
|
1518
|
+
[style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
|
|
1519
|
+
(pointerenter)="setHoveredHandIndex($index)"
|
|
1520
|
+
(pointerdown)="setHoveredHandIndex($index)"
|
|
1521
|
+
(pointerup)="releaseHoveredHand($event)"
|
|
1522
|
+
>
|
|
1523
|
+
<button
|
|
1524
|
+
type="button"
|
|
1525
|
+
class="christianity-card-preview-card christianity-card-preview-card--hand christianity-render-card-button"
|
|
1526
|
+
cdkDrag
|
|
1527
|
+
valLightRipple
|
|
1528
|
+
[cdkDragData]="cardId"
|
|
1529
|
+
[cdkDragDisabled]="!canPlay(card)"
|
|
1530
|
+
[class.is-selected]="selectedHandCard() === cardId"
|
|
1531
|
+
[class.is-disabled]="!canPlay(card)"
|
|
1532
|
+
(cdkDragStarted)="startDraggingCard(cardId)"
|
|
1533
|
+
(cdkDragEnded)="endDraggingCard()"
|
|
1534
|
+
(click)="selectHandCard(cardId)"
|
|
1535
|
+
>
|
|
1536
|
+
<val-christianity-card [card]="definitionToRenderCard(card)" variant="hand"></val-christianity-card>
|
|
1537
|
+
</button>
|
|
1538
|
+
<button
|
|
1539
|
+
type="button"
|
|
1540
|
+
class="christianity-card-eye"
|
|
1541
|
+
[attr.aria-label]="t('christianityPreviewCard')"
|
|
1542
|
+
(click)="inspectHandCard(cardId, true); $event.stopPropagation()"
|
|
1543
|
+
></button>
|
|
1544
|
+
</div>
|
|
1545
|
+
}
|
|
1546
|
+
</section>
|
|
1547
|
+
</section>
|
|
1548
|
+
}
|
|
1549
|
+
|
|
1550
|
+
@if (selectedPreview()) {
|
|
1551
|
+
<button type="button" class="christianity-preview-backdrop" [attr.aria-label]="t('christianityClosePreview')" (click)="closePreview()"></button>
|
|
1552
|
+
<aside
|
|
1553
|
+
class="christianity-floating-card-shell"
|
|
1554
|
+
aria-live="polite"
|
|
1555
|
+
>
|
|
1556
|
+
<button type="button" class="christianity-floating-card-close" (click)="closePreview()">
|
|
1557
|
+
{{ t('close') }}
|
|
1558
|
+
</button>
|
|
1559
|
+
<div
|
|
1560
|
+
class="christianity-floating-card"
|
|
1561
|
+
[style.--preview-rotate-x]="previewTilt().rotateX + 'deg'"
|
|
1562
|
+
[style.--preview-rotate-y]="previewTilt().rotateY + 'deg'"
|
|
1563
|
+
[style.--preview-shift-x]="previewTilt().shiftX + 'px'"
|
|
1564
|
+
[style.--preview-shift-y]="previewTilt().shiftY + 'px'"
|
|
1565
|
+
(pointermove)="tiltPreview($event)"
|
|
1566
|
+
(pointerleave)="resetPreviewTilt()"
|
|
1567
|
+
>
|
|
1568
|
+
@if (selectedPreviewRenderCard(); as previewCard) {
|
|
1569
|
+
<val-christianity-card [card]="previewCard" variant="full"></val-christianity-card>
|
|
1570
|
+
}
|
|
1571
|
+
</div>
|
|
1572
|
+
@if (previewRule(); as rule) {
|
|
1573
|
+
<div class="christianity-preview-rule-note">
|
|
1574
|
+
<span class="christianity-rule-note-icon" aria-hidden="true">i</span>
|
|
1575
|
+
<div>
|
|
1576
|
+
<small>{{ t('christianityCardRule') }}</small>
|
|
1577
|
+
<strong>{{ rule.title }}</strong>
|
|
1578
|
+
<p>{{ rule.body }}</p>
|
|
1579
|
+
</div>
|
|
1580
|
+
</div>
|
|
1581
|
+
}
|
|
1582
|
+
</aside>
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1585
|
+
@if (selectedInfo(); as info) {
|
|
1586
|
+
<button type="button" class="christianity-info-backdrop" [attr.aria-label]="t('close')" (click)="closeInfo()"></button>
|
|
1587
|
+
<aside class="christianity-info-panel" aria-live="polite">
|
|
1588
|
+
<button type="button" class="christianity-dialog-close christianity-info-close" (click)="closeInfo()">
|
|
1589
|
+
{{ t('close') }}
|
|
1590
|
+
</button>
|
|
1591
|
+
<div class="christianity-rule-note">
|
|
1592
|
+
<span class="christianity-rule-note-icon" aria-hidden="true">i</span>
|
|
1593
|
+
<div>
|
|
1594
|
+
<small>{{ info.eyebrow }}</small>
|
|
1595
|
+
<h2>{{ info.title }}</h2>
|
|
1596
|
+
<strong>{{ info.meta }}</strong>
|
|
1597
|
+
<p>{{ info.body }}</p>
|
|
1598
|
+
<ul>
|
|
1599
|
+
@for (fact of info.facts; track fact) {
|
|
1600
|
+
<li>{{ fact }}</li>
|
|
1601
|
+
}
|
|
1602
|
+
</ul>
|
|
1603
|
+
</div>
|
|
1604
|
+
</div>
|
|
1605
|
+
</aside>
|
|
1606
|
+
}
|
|
1607
|
+
|
|
1608
|
+
@if (screen() === 'table') {
|
|
1609
|
+
<section class="christianity-actions" aria-live="polite">
|
|
1610
|
+
<p>{{ statusText() }}</p>
|
|
1611
|
+
<div>
|
|
1612
|
+
<button type="button" [disabled]="selectedActionDisabled()" (click)="playSelectedCard()">
|
|
1613
|
+
{{ selectedActionLabel() }}
|
|
1614
|
+
</button>
|
|
1615
|
+
<button type="button" (click)="resetMock()">
|
|
1616
|
+
{{ t('christianityReset') }}
|
|
1617
|
+
</button>
|
|
1618
|
+
</div>
|
|
1619
|
+
</section>
|
|
1620
|
+
}
|
|
1621
|
+
|
|
1622
|
+
@if (showHistory()) {
|
|
1623
|
+
<button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseHistory')" (click)="showHistory.set(false)"></button>
|
|
1624
|
+
<section class="christianity-history-drawer">
|
|
1625
|
+
<header>
|
|
1626
|
+
<h2>{{ t('christianityHistory') }}</h2>
|
|
1627
|
+
<div class="christianity-dialog-actions">
|
|
1628
|
+
<span>{{ game().historyZone.length }}</span>
|
|
1629
|
+
<button type="button" class="christianity-dialog-close" (click)="showHistory.set(false)">
|
|
1630
|
+
{{ t('close') }}
|
|
1631
|
+
</button>
|
|
1632
|
+
</div>
|
|
1633
|
+
</header>
|
|
1634
|
+
@if (game().historyZone.length) {
|
|
1635
|
+
<div class="christianity-history-grid">
|
|
1636
|
+
@for (cardId of game().historyZone; track cardId + $index) {
|
|
1637
|
+
@let card = cardDefinition(cardId);
|
|
1638
|
+
<button type="button" class="christianity-card-preview-card christianity-render-card-button" valLightRipple (click)="inspectHistoryCard(cardId)">
|
|
1639
|
+
<val-christianity-card [card]="definitionToRenderCard(card)" variant="list"></val-christianity-card>
|
|
1640
|
+
</button>
|
|
1641
|
+
}
|
|
1642
|
+
</div>
|
|
1643
|
+
} @else {
|
|
1644
|
+
<p>{{ t('christianityHistoryEmpty') }}</p>
|
|
1645
|
+
}
|
|
1646
|
+
</section>
|
|
1647
|
+
}
|
|
1648
|
+
|
|
1649
|
+
@if (showGallery()) {
|
|
1650
|
+
<button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseGallery')" (click)="closeGallery()"></button>
|
|
1651
|
+
<section class="christianity-history-drawer christianity-gallery-drawer">
|
|
1652
|
+
<header>
|
|
1653
|
+
<div>
|
|
1654
|
+
<h2>{{ t('christianityGallery') }}</h2>
|
|
1655
|
+
<p>{{ galleryEditionLabel() }}</p>
|
|
1656
|
+
</div>
|
|
1657
|
+
<div class="christianity-dialog-actions">
|
|
1658
|
+
<span>{{ galleryCards().length }}</span>
|
|
1659
|
+
<button type="button" class="christianity-dialog-close" (click)="closeGallery()">
|
|
1660
|
+
{{ t('close') }}
|
|
1661
|
+
</button>
|
|
1662
|
+
</div>
|
|
1663
|
+
</header>
|
|
1664
|
+
<div class="christianity-gallery-controls">
|
|
1665
|
+
<label>
|
|
1666
|
+
<span>{{ t('christianityGallerySearch') }}</span>
|
|
1667
|
+
<input type="search" [value]="gallerySearch()" (input)="setGallerySearch($event)" [placeholder]="t('christianityGallerySearchPlaceholder')" />
|
|
1668
|
+
</label>
|
|
1669
|
+
<label>
|
|
1670
|
+
<span>{{ t('christianityGalleryFilter') }}</span>
|
|
1671
|
+
<select [value]="galleryType()" (change)="setGalleryType($event)">
|
|
1672
|
+
@for (option of galleryTypeOptions(); track option.value) {
|
|
1673
|
+
<option [value]="option.value">{{ option.label }}</option>
|
|
1674
|
+
}
|
|
1675
|
+
</select>
|
|
1676
|
+
</label>
|
|
1677
|
+
</div>
|
|
1678
|
+
<div class="christianity-gallery-edition-strip">
|
|
1679
|
+
<button type="button" class="is-active" valLightRipple>
|
|
1680
|
+
<img [src]="galleryEditionIcon()" alt="" />
|
|
1681
|
+
<span>{{ t('christianityGenesisEdition') }}</span>
|
|
1682
|
+
</button>
|
|
1683
|
+
</div>
|
|
1684
|
+
<div class="christianity-gallery-grid">
|
|
1685
|
+
@for (card of galleryCards(); track card.id) {
|
|
1686
|
+
<button type="button" class="christianity-card-preview-card christianity-render-card-button" valLightRipple (click)="inspectGalleryCard(card.id)">
|
|
1687
|
+
<val-christianity-card [card]="definitionToRenderCard(card)" variant="list"></val-christianity-card>
|
|
1688
|
+
</button>
|
|
1689
|
+
} @empty {
|
|
1690
|
+
<p>{{ t('christianityGalleryEmpty') }}</p>
|
|
1691
|
+
}
|
|
1692
|
+
</div>
|
|
1693
|
+
</section>
|
|
1694
|
+
}
|
|
1695
|
+
|
|
1696
|
+
@if (offeringsSeat()) {
|
|
1697
|
+
@let offeringPlayer = game().players[offeringsSeat()!];
|
|
1698
|
+
<button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseOfferings')" (click)="closeOfferings()"></button>
|
|
1699
|
+
<section class="christianity-history-drawer christianity-offerings-drawer">
|
|
1700
|
+
<header>
|
|
1701
|
+
<h2>{{ t('christianityOfferings') }}</h2>
|
|
1702
|
+
<div class="christianity-dialog-actions">
|
|
1703
|
+
<span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
|
|
1704
|
+
<button type="button" class="christianity-dialog-close" (click)="closeOfferings()">
|
|
1705
|
+
{{ t('close') }}
|
|
1706
|
+
</button>
|
|
1707
|
+
</div>
|
|
1708
|
+
</header>
|
|
1709
|
+
<div class="christianity-offerings-note">
|
|
1710
|
+
<span class="christianity-rule-note-icon" aria-hidden="true">i</span>
|
|
1711
|
+
<p>{{ t('christianityOfferingsRuleBody') }}</p>
|
|
1712
|
+
</div>
|
|
1713
|
+
<div class="christianity-offering-list">
|
|
1714
|
+
@for (offering of offeringPlayer.offerings; track offering.instanceId) {
|
|
1715
|
+
<article class="christianity-offering-row" [class.is-exhausted]="!offering.ready">
|
|
1716
|
+
<button type="button" class="christianity-offering-card christianity-render-card-button" valLightRipple (click)="inspectOffering(offering)">
|
|
1717
|
+
<val-christianity-card [card]="offeringRenderCard(offering)" variant="list"></val-christianity-card>
|
|
1718
|
+
</button>
|
|
1719
|
+
<div>
|
|
1720
|
+
<strong>{{ offering.ready ? t('christianityOfferingReady') : t('christianityOfferingExhausted') }}</strong>
|
|
1721
|
+
<p>{{ offeringAbilityText(offering) }}</p>
|
|
1722
|
+
@if (offering.abilityName) {
|
|
1723
|
+
<button
|
|
1724
|
+
type="button"
|
|
1725
|
+
[disabled]="!canUseOfferingAbility(offering, offeringsSeat()!)"
|
|
1726
|
+
(click)="useOfferingAbility(offering, offeringsSeat()!)"
|
|
1727
|
+
>
|
|
1728
|
+
{{ t('christianityUseAbility') }}
|
|
1729
|
+
</button>
|
|
1730
|
+
}
|
|
1731
|
+
</div>
|
|
1732
|
+
</article>
|
|
1733
|
+
}
|
|
1734
|
+
</div>
|
|
1735
|
+
</section>
|
|
1736
|
+
}
|
|
1737
|
+
</main>
|
|
1738
|
+
`, isInline: true, styles: [":host{--christianity-theme-ink: var(--val-text-color, #1f2933);--christianity-theme-surface: #ffffff;--christianity-theme-parchment: #fffaf0;--christianity-theme-olive: #5f6f2a;--christianity-theme-gold: #d6a21d;--christianity-theme-gold-soft: rgba(214, 162, 29, .18);--christianity-theme-gold-ring: rgba(214, 162, 29, .48);--christianity-theme-glow: rgba(245, 199, 85, .32);--christianity-theme-focus: #2563eb;--christianity-theme-shadow: rgba(82, 64, 28, .18);--christianity-theme-shadow-strong: rgba(82, 64, 28, .3);--christianity-card-aspect: 5 / 7.45;--christianity-card-back: linear-gradient(135deg, rgba(16, 42, 67, .16), rgba(16, 42, 67, .03)), repeating-linear-gradient(45deg, #dbeafe 0 .33rem, #ffffff .33rem .66rem);--christianity-card-back-soft: linear-gradient(135deg, rgba(16, 42, 67, .11), rgba(16, 42, 67, .02)), repeating-linear-gradient(45deg, #dbeafe 0 .33rem, #ffffff .33rem .66rem);display:block;max-width:100%;min-width:0;overflow-x:clip;color:var(--christianity-theme-ink)}.christianity-shell{box-sizing:border-box;display:grid;gap:.65rem;width:100%;max-width:100%;min-width:0;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb;overflow-x:clip;overflow-y:visible}.christianity-header,.christianity-match-strip,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-match-player strong,.christianity-match-player small,.christianity-scoreboard span,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header-actions{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;min-width:0}.christianity-gallery-open{min-height:2.2rem;padding:0 .75rem;border:1px solid rgba(214,162,29,.38);border-radius:999px;background:linear-gradient(180deg,#fffaf0fa,#fffffffa),radial-gradient(circle at 20% 0%,rgba(214,162,29,.18),transparent 42%);color:var(--christianity-theme-ink);font:inherit;font-size:.82rem;font-weight:800;box-shadow:0 .55rem 1.2rem #52401c1a}.christianity-splash,.christianity-start{min-height:min(34rem,calc(100dvh - 8rem));border:1px solid rgba(214,162,29,.2);border-radius:.9rem;background:radial-gradient(circle at 50% 18%,rgba(245,199,85,.2),transparent 22rem),linear-gradient(180deg,#fffaf0eb,#fffffff5),var(--christianity-card-back-soft);box-shadow:0 1.2rem 3.2rem #52401c1f}.christianity-splash{display:grid;place-items:center;align-content:center;gap:1.2rem;padding:2.5rem 1.25rem;text-align:center}.christianity-splash__mark{position:relative;width:6.4rem;height:8.9rem;filter:drop-shadow(0 1rem 1.8rem rgba(82,64,28,.18))}.christianity-splash__mark i{position:absolute;inset:0;border:1px solid rgba(36,48,68,.16);border-radius:.7rem;background:radial-gradient(circle at 76% 12%,rgba(250,204,21,.9) 0 .42rem,transparent .45rem),linear-gradient(180deg,#fffffffa,#f8fafcfa)}.christianity-splash__mark i:nth-child(1){transform:translate(-1.1rem) rotate(-9deg)}.christianity-splash__mark i:nth-child(2){transform:translateY(-.32rem)}.christianity-splash__mark i:nth-child(3){transform:translate(1.1rem) rotate(9deg)}.christianity-splash__mark:after{content:\"\";position:absolute;inset:2.1rem 1.05rem 2.5rem;border-radius:.55rem;background:radial-gradient(circle at 50% 44%,rgba(245,199,85,.7),transparent 36%),linear-gradient(135deg,#5f6f2a33,#5f6f2a14)}.christianity-splash span,.christianity-start__copy span{color:var(--christianity-theme-olive);font-size:.76rem;font-weight:900;text-transform:uppercase}.christianity-splash h2,.christianity-start h2,.christianity-start p{margin:0}.christianity-splash h2{margin-top:.2rem;font-size:clamp(1.65rem,7vw,2.7rem);line-height:1}.christianity-splash p{max-width:26rem;margin:.55rem auto 0;color:#1f2933ad;font-size:.96rem}.christianity-start{display:grid;align-content:center;gap:1rem;padding:clamp(1rem,4vw,2.2rem)}.christianity-start__hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,18rem);gap:1rem;align-items:center}.christianity-start__copy{display:grid;gap:.45rem;max-width:36rem}.christianity-start h2{font-size:clamp(1.6rem,6vw,2.5rem);line-height:1.02}.christianity-start__copy p,.christianity-start__cards p,.christianity-start__modes p{color:#1f2933ad;line-height:1.42}.christianity-start__fan{position:relative;display:grid;place-items:center;min-height:13rem;overflow:visible}.christianity-start__fan val-christianity-card{position:absolute;width:clamp(5.7rem,12vw,7.2rem);transform-origin:50% 92%;filter:drop-shadow(0 1rem 1.5rem rgba(82,64,28,.18))}.christianity-start__cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}.christianity-start__cards article,.christianity-start__modes article{display:grid;gap:.65rem;align-content:start;padding:.95rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#ffffffd1;box-shadow:0 .75rem 1.7rem #52401c14}.christianity-start__cards article{min-height:11rem}.christianity-start__cards strong{font-size:1.05rem}.christianity-start__status{display:flex;flex-wrap:wrap;gap:.45rem}.christianity-start__status span,.christianity-start__modes article>span{display:inline-flex;align-items:center;width:fit-content;min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(214,162,29,.26);border-radius:999px;background:#fffaf0e0;color:#1f2933b8;font-size:.75rem;font-weight:850}.christianity-start__modes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.55rem}.christianity-start__modes article{min-height:8.5rem;background:#f8fafcb8;box-shadow:none;opacity:.82}.christianity-start__modes strong{font-size:.92rem}.christianity-start__modes p{margin:0;font-size:.8rem}.christianity-primary-action,.christianity-secondary-action{justify-self:start;min-height:2.5rem;padding:0 .9rem;border-radius:999px;font:inherit;font-weight:900}.christianity-primary-action{border:1px solid rgba(16,42,67,.16);background:#102a43;color:#fff}.christianity-secondary-action{border:1px solid rgba(214,162,29,.38);background:var(--christianity-theme-parchment);color:var(--christianity-theme-ink)}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-match-strip{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);padding:.45rem;border:1px solid rgba(36,48,68,.1);border-radius:.75rem;background:#fff}.christianity-match-player{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.5rem;align-items:center;min-width:0}.christianity-match-player--opponent{direction:rtl}.christianity-match-player--opponent div{direction:ltr;text-align:right}.christianity-match-player div{display:grid;min-width:0}.christianity-match-player strong,.christianity-match-player small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-match-player small,.christianity-scoreboard span{color:#1f293394;font-size:.72rem}.christianity-scoreboard{display:grid;justify-items:center;min-width:4.2rem;padding:0 .55rem;border-right:1px solid rgba(36,48,68,.1);border-left:1px solid rgba(36,48,68,.1)}.christianity-scoreboard strong{font-size:1.2rem;line-height:1}.christianity-table{box-sizing:border-box;display:grid;gap:.45rem;width:100%;max-width:100%;min-width:0;padding:.45rem .35rem;border-radius:.75rem;background:#dceafb;overflow-x:clip;overflow-y:visible}.christianity-player-side{box-sizing:border-box;display:grid;gap:.35rem;width:100%;max-width:100%;min-width:0;padding:.35rem .3rem;border-radius:.7rem;background:#ffffff57;grid-template-rows:minmax(7rem,1fr) auto;min-height:13.75rem}.christianity-player-side--opponent{grid-template-rows:auto minmax(7rem,1fr)}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{--christianity-battle-card-width: clamp(4.8rem, 15vw, 6.6rem);box-sizing:border-box;display:grid;grid-template-columns:repeat(4,var(--christianity-battle-card-width));gap:.5rem;align-items:center;justify-content:center;width:100%;max-width:100%;min-width:0;min-height:clamp(9.1rem,29vw,11rem);padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2;transition:background .16s ease,box-shadow .16s ease}.christianity-battle-zone.is-placing-card{background:linear-gradient(180deg,#fffaf0f5,#ffffffd6),#ffffffc2;box-shadow:inset 0 0 0 .14rem var(--christianity-theme-gold-soft),0 .8rem 1.7rem #5f6f2a1f}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:var(--christianity-theme-gold);box-shadow:0 0 0 .18rem var(--christianity-theme-gold-soft),0 .85rem 1.4rem var(--christianity-theme-shadow)}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{display:grid;place-items:center;justify-self:center;width:var(--christianity-battle-card-width);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73;color:inherit;font:inherit}.christianity-slot--play-target{position:relative;border-color:var(--christianity-theme-gold-ring);background:linear-gradient(180deg,#fffaf0eb,#f8fafcd1),#ffffffb3;color:#5d4305;font-weight:800;overflow:hidden;box-shadow:inset 0 0 0 .12rem #d6a21d33,0 .7rem 1.25rem var(--christianity-theme-shadow);animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-slot--play-target:before{content:\"\";position:absolute;inset:.35rem;border:1px solid rgba(214,162,29,.22);border-radius:.4rem;background:linear-gradient(135deg,rgba(214,162,29,.1),transparent 46%),radial-gradient(circle at 50% 42%,var(--christianity-theme-glow),transparent 58%)}.christianity-slot--play-target span{position:relative;z-index:2;padding:.16rem .44rem;border-radius:999px;background:#ffffffc7;font-size:.78rem}@keyframes christianity-target-pulse{0%,to{box-shadow:inset 0 0 0 .12rem #d6a21d33,0 .7rem 1.25rem var(--christianity-theme-shadow)}50%{box-shadow:inset 0 0 0 .16rem #d6a21d57,0 .9rem 1.65rem var(--christianity-theme-shadow-strong)}}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}.christianity-hand-fan{position:relative;display:flex;justify-content:center;min-height:10.8rem;padding:.25rem .25rem 2.1rem;isolation:isolate;overflow:visible}.christianity-hand-shelf{position:relative;display:grid;z-index:12;min-height:12rem;margin-top:-1.15rem;padding:1.45rem .25rem 1rem;overflow:visible}.christianity-hand-shelf--opponent{z-index:8;min-height:6.85rem;margin-top:0;margin-bottom:0;padding:.45rem .25rem .85rem}.christianity-hand-fan--opponent{min-height:5.9rem;padding-bottom:.75rem;align-items:start}.christianity-hand-fan--opponent .christianity-card-frame--back{width:clamp(3.7rem,12vw,4.9rem);margin-inline:-.9rem;transform-origin:50% 120%}.christianity-hand-fan--opponent .christianity-card-frame--back:first-child{margin-left:0}.christianity-hand-fan--opponent .christianity-card-frame--back:last-child{margin-right:0}.christianity-card-preview-card,.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile,.christianity-end-turn{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card-preview-card{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:.28rem;align-content:stretch;width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);padding:.48rem;text-align:left;transform-origin:50% 115%;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;box-shadow:0 .5rem 1.25rem #2430441a}.christianity-render-card-button{display:block;padding:0;overflow:visible;border:0;background:transparent;box-shadow:none}.christianity-render-card-button>val-christianity-card{display:block;width:100%;height:100%}.christianity-card-preview-card--hand.christianity-render-card-button,.christianity-card-preview-card--battle.christianity-render-card-button,.christianity-leader-card.christianity-render-card-button{aspect-ratio:var(--christianity-card-aspect)}.christianity-card-preview-card--hand.christianity-render-card-button:hover val-christianity-card,.christianity-card-preview-card--hand.christianity-render-card-button.is-selected val-christianity-card,.christianity-card-preview-card--battle.christianity-render-card-button.is-selected val-christianity-card,.christianity-card-preview-card--battle.christianity-render-card-button.is-target val-christianity-card,.christianity-leader-card.christianity-render-card-button.is-target val-christianity-card{filter:drop-shadow(0 0 .55rem rgba(214,162,29,.35))}.christianity-card-preview-card--battle.christianity-render-card-button.is-ready-attacker val-christianity-card{filter:drop-shadow(0 .45rem .8rem rgba(95,111,42,.16))}.christianity-card-preview-card--battle.christianity-render-card-button.is-selected{transform:translateY(-.28rem)}.christianity-card-frame{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:.28rem;align-content:stretch;overflow:hidden;padding:.48rem;text-align:left;background:linear-gradient(180deg,#fffffffa,#f8fafcfa),radial-gradient(circle at 15% 0%,rgba(214,162,29,.12),transparent 44%);box-shadow:0 .5rem 1.25rem #2430441a,inset 0 0 0 .18rem #ffffff9e}.christianity-card-frame-header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.16rem;align-items:start;min-width:0}.christianity-card-frame-header small{grid-column:1;min-width:0;overflow:hidden;color:#1f2933a3;font-size:clamp(.52rem,1.5vw,.68rem);line-height:1;text-overflow:ellipsis;white-space:nowrap}.christianity-card-frame-header strong{grid-column:1;justify-self:start;align-self:start;min-width:0;padding:0;overflow:hidden;border-radius:0;background:transparent;font-size:clamp(.82rem,2.5vw,1.05rem);line-height:1.02;text-overflow:ellipsis;white-space:nowrap}.christianity-card-preview-card--hand .christianity-card-frame-header strong,.christianity-card-preview-card--battle .christianity-card-frame-header strong,.christianity-leader-card .christianity-card-frame-header strong{display:-webkit-box;overflow-wrap:anywhere;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.christianity-card-preview-card--hand .christianity-card-frame-header small{text-transform:uppercase}.christianity-card-preview-card--hand .christianity-card-frame-art>span{display:-webkit-box;max-width:88%;overflow-wrap:anywhere;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.christianity-card-frame-header span{grid-column:2;grid-row:1 / span 2;display:grid;place-items:center;min-width:1.3rem;height:1.3rem;padding:0 .22rem;border-radius:999px;background:#ffd91a;color:#243044;font-size:.8rem;font-weight:900;line-height:1;box-shadow:inset 0 -.08rem #52401c2e}.christianity-card-frame-header span.is-offering-pips,.christianity-full-card-cost.is-offering-pips,.christianity-offering-card span.is-offering-pips{grid-auto-flow:column;gap:.14rem;min-width:auto;padding:0 .28rem}.christianity-card-frame-header span.is-offering-pips i,.christianity-full-card-cost.is-offering-pips i,.christianity-offering-card span.is-offering-pips i,.christianity-full-card-pips i{display:block;width:.72rem;height:.72rem;border-radius:999px;background:radial-gradient(circle at 34% 28%,rgba(255,255,255,.9) 0 .12rem,transparent .13rem),#ffd91a;box-shadow:inset 0 -.08rem #52401c2e,0 .12rem .24rem #102a431a}.christianity-card-frame-art{position:relative;display:grid;place-items:center;min-height:0;overflow:hidden;border-radius:.36rem;background:linear-gradient(135deg,#5f6f2a2e,#d6a21d24),radial-gradient(circle at 50% 18%,rgba(255,255,255,.72),transparent 48%),#dbe7ef;box-shadow:inset 0 0 0 1px #24304414}.christianity-card-frame-art>span{max-width:78%;overflow:hidden;color:#2430447a;font-size:clamp(.82rem,2.2vw,1.05rem);font-weight:900;line-height:1.02;text-align:center;text-overflow:ellipsis}.christianity-card-frame-art small{position:absolute;right:0;bottom:.28rem;max-width:78%;padding:.1rem .34rem;overflow:hidden;border-radius:999px 0 0 999px;background:#ffffffe6;color:#1f2933a8;font-size:.48rem;font-style:italic;font-weight:900;line-height:1;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.christianity-card-frame-effect{display:grid;align-content:center;gap:.1rem;min-height:1.45rem;padding:.24rem;overflow:hidden;border-radius:.34rem;background:radial-gradient(circle at 50% 70%,rgba(36,48,68,.06),transparent 44%),#ffffffdb}.christianity-card-frame-effect strong{justify-self:end;align-self:end;padding:.12rem .32rem;border-radius:999px;background:#edf2f7;font-size:clamp(.66rem,2vw,.82rem);line-height:1.05}.christianity-card-frame-effect p{margin:0;overflow:hidden;color:#1f2933b8;font-size:.58rem;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}.christianity-card-frame-footer{display:flex;justify-content:space-between;gap:.22rem;color:#1f293385;font-size:.46rem;font-weight:800;line-height:1}.christianity-card-frame--battle{gap:.22rem;padding:.42rem}.christianity-card-frame--battle .christianity-card-frame-art{min-height:2.6rem}.christianity-card-frame--leader .christianity-card-frame-art{background:linear-gradient(135deg,#2563eb24,#d6a21d29),radial-gradient(circle at 50% 18%,rgba(255,255,255,.78),transparent 48%),#e7eef8}.christianity-card-frame--list{width:clamp(4.4rem,22vw,5.8rem);padding:.38rem}.christianity-card-frame--list .christianity-card-frame-art{min-height:2.5rem}.christianity-hand-card-wrap{position:relative;display:grid;justify-items:center;flex:0 0 auto;margin-inline:-.42rem;padding-bottom:2rem;transform-origin:50% 115%;transition:transform .16s ease,filter .16s ease}.christianity-hand-card-wrap:hover,.christianity-hand-card-wrap.is-selected,.christianity-hand-card-wrap.is-dragging{z-index:3}.christianity-hand-card-wrap:hover .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-selected .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-dragging .christianity-card-preview-card--hand{border-color:var(--christianity-theme-gold);box-shadow:0 0 0 .12rem var(--christianity-theme-gold-soft),0 1rem 2rem var(--christianity-theme-shadow)}.christianity-card-preview-card--hand{touch-action:none}.christianity-card-preview-card--hand.cdk-drag-disabled{cursor:not-allowed}.christianity-card-preview-card.cdk-drag-preview{width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border:1px solid var(--christianity-theme-gold-ring);box-shadow:0 0 0 .16rem #fff4c2ad,0 1.5rem 3rem var(--christianity-theme-shadow-strong);transform:rotate(2deg) scale(1.03)}.christianity-card-preview-card.cdk-drag-placeholder{width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);opacity:.22}.christianity-slot.cdk-drop-list-dragging,.christianity-offering-pile.cdk-drop-list-dragging{border-color:var(--christianity-theme-gold-ring)}.christianity-slot.cdk-drop-list-receiving,.christianity-offering-pile.cdk-drop-list-receiving{box-shadow:inset 0 0 0 .18rem #d6a21d57,0 1rem 1.9rem var(--christianity-theme-shadow-strong)}.christianity-card-eye{position:absolute;right:50%;bottom:.38rem;width:2.15rem;height:1.55rem;border:1px solid color-mix(in srgb,var(--christianity-theme-focus) 52%,transparent);border-radius:999px;background:#fffffff0;box-shadow:0 .55rem 1.1rem #102a4324;opacity:0;transform:translate(50%,-.2rem) scale(.92);transition:opacity .14s ease,transform .14s ease,border-color .14s ease}.christianity-card-eye:before{content:\"\";position:absolute;top:50%;left:50%;width:1.1rem;height:1.1rem;border:.12rem solid var(--christianity-theme-focus);border-radius:82% 0;background:#fffffff0;transform:translate(-50%,-50%) rotate(45deg)}.christianity-card-eye:after{content:\"\";position:absolute;top:50%;left:50%;width:.42rem;height:.42rem;border:.09rem solid rgba(255,255,255,.95);border-radius:999px;background:radial-gradient(circle at 35% 32%,#ffffff 0 .06rem,transparent .07rem),var(--christianity-theme-focus);transform:translate(-50%,-50%)}.christianity-hand-card-wrap:hover .christianity-card-eye,.christianity-hand-card-wrap.is-selected .christianity-card-eye,.christianity-card-eye:focus-visible{opacity:1;transform:translate(50%) scale(1)}.christianity-offering-pile.is-play-target{border-color:var(--christianity-theme-gold-ring);background:linear-gradient(180deg,#fffaf0f5,#fffffff0),radial-gradient(circle at 82% 14%,rgba(250,204,21,.28) 0 .7rem,transparent .72rem);box-shadow:inset 0 0 0 .12rem #d6a21d3d,0 .8rem 1.55rem var(--christianity-theme-shadow);animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-card-frame--back,.christianity-card-preview-card--back{width:clamp(4rem,14vw,5.7rem);min-height:0;aspect-ratio:var(--christianity-card-aspect);place-items:center;padding:.55rem;overflow:hidden;box-shadow:0 .8rem 1.55rem #24304424;transform-origin:50% -18%;background:var(--christianity-card-back)}.christianity-card-frame--back:before,.christianity-card-preview-card--back:before{content:\"\";position:absolute;inset:.5rem;border:1px solid rgba(16,42,67,.12);border-radius:.38rem;background:linear-gradient(180deg,#ffffff2e,#ffffff0a);box-shadow:inset 0 0 0 .12rem #ffffff1f}.christianity-card-preview-card--battle{justify-self:center;width:var(--christianity-battle-card-width);min-width:0;height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);margin-inline:0}.christianity-card-preview-card>span,.christianity-card-mini>span,.christianity-offering-pile>span,.christianity-offering-card>span,.christianity-leader-card>span,.christianity-zone-card>span,.christianity-zone-pile>span{position:relative;z-index:2;align-self:start;font-weight:700;line-height:1.05}.christianity-card-preview-card>strong,.christianity-card-mini>strong,.christianity-offering-pile>strong,.christianity-offering-card>strong,.christianity-leader-card>strong,.christianity-zone-card>strong,.christianity-zone-pile>strong{position:relative;z-index:3;justify-self:end;align-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{box-sizing:border-box;display:grid;grid-template-columns:minmax(5.9rem,7rem) minmax(5rem,1fr) minmax(4.2rem,7rem);gap:.45rem;align-items:end;justify-items:stretch;width:100%;max-width:100%;min-width:0}.christianity-player-rack--opponent{align-items:start}.christianity-hand-meter{position:absolute;top:0;right:.35rem;z-index:4;display:inline-grid;grid-auto-flow:column;gap:.25rem;align-items:center;min-height:1.7rem;padding:.18rem .46rem;border:1px solid rgba(36,48,68,.12);border-radius:999px;background:#ffffffe6;box-shadow:0 .35rem .8rem #102a4314}.christianity-hand-meter--opponent{top:.15rem}.christianity-hand-meter span{color:#1f293394;font-size:.68rem}.christianity-hand-meter strong{font-size:.86rem}.christianity-player-badge,.christianity-player-command{display:grid;gap:.35rem;justify-items:center;min-width:0}.christianity-player-badge{align-content:start;color:#1f2933c2;font-size:.74rem}.christianity-player-badge--opponent{justify-self:center;grid-auto-flow:column;align-items:center;justify-content:center}.christianity-player-badge strong{max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-avatar{display:grid;place-items:center;width:1.85rem;height:1.85rem;border-radius:999px;color:#fff;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .9rem #102a4329}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-start;justify-self:start;width:100%}.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-frame{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;align-content:stretch}.christianity-offering-pile,.christianity-zone-card,.christianity-zone-pile{grid-template-rows:auto minmax(2.6rem,1fr) auto;align-content:stretch;gap:.32rem}.christianity-card-mini{width:3.5rem}.christianity-offering-pile{position:relative;isolation:isolate;overflow:hidden;justify-self:start;width:min(100%,5.9rem);height:7.1rem;min-height:0;max-height:7.1rem;padding:.95rem .52rem .6rem;background:linear-gradient(180deg,#fff,#f8fafc),linear-gradient(135deg,rgba(250,204,21,.18),transparent 42%)}.christianity-offering-pile>.cdk-drag-placeholder,.christianity-slot>.cdk-drag-placeholder{display:none}.christianity-offering-pile i{position:absolute;top:2.45rem;left:.72rem;z-index:-1;width:2.55rem;height:3.55rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:linear-gradient(180deg,#ffffffeb,#f1f5f9eb),radial-gradient(circle at 78% 18%,#facc15 0 .38rem,transparent .4rem);box-shadow:0 .35rem .85rem #102a431a;transform:rotate(-5deg)}.christianity-offering-pile i:nth-child(2){transform:translate(.28rem,.08rem) rotate(3deg)}.christianity-offering-pile i:nth-child(3){transform:translate(.55rem,.18rem) rotate(-1deg)}.christianity-leader-card{align-self:center;justify-self:center;width:clamp(4.75rem,17vw,6rem);min-height:0;aspect-ratio:var(--christianity-card-aspect)}.christianity-rack-spacer{display:block;min-height:1px}.christianity-battle-zone{grid-template-columns:repeat(4,var(--christianity-battle-card-width))}.christianity-shared-zone{box-sizing:border-box;display:grid;grid-template-columns:repeat(3,minmax(4.3rem,1fr));align-items:stretch;width:100%;max-width:100%;min-width:0}.christianity-zone-card,.christianity-zone-pile{min-height:6.45rem;padding:.7rem .52rem .55rem}.christianity-zone-pile{position:relative;isolation:isolate;overflow:hidden;box-shadow:inset 0 0 0 999px #ffffff1f}.christianity-zone-pile i{position:absolute;top:2.2rem;right:.72rem;z-index:-1;width:2.7rem;height:3.7rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:#f8fafc;box-shadow:0 .35rem .85rem #102a431c;transform:rotate(4deg)}.christianity-zone-pile i:nth-child(2){transform:translate(-.28rem,.12rem) rotate(-3deg)}.christianity-zone-pile i:nth-child(3){background:var(--christianity-card-back);transform:translate(-.54rem,.24rem) rotate(2deg)}.christianity-floating-card-shell{position:fixed;top:50%;left:50%;z-index:80;display:grid;gap:.55rem;width:min(26rem,calc(100vw - 1.25rem));padding-top:2.35rem;transform:translate(-50%,-50%)}.christianity-floating-card{position:relative;z-index:1;display:block;width:100%;min-height:0;padding:0;border:0;border-radius:.75rem;background:transparent;box-shadow:0 0 2.2rem var(--christianity-theme-glow);touch-action:none;transform:translate(var(--preview-shift-x, 0px),var(--preview-shift-y, 0px)) perspective(48rem) rotateX(var(--preview-rotate-x, 5deg)) rotateY(var(--preview-rotate-y, -5deg));transition:transform 90ms ease-out}.christianity-floating-card val-christianity-card{display:block;width:100%}.christianity-full-card-header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.42rem;align-items:center}.christianity-full-card-header strong{min-width:0;display:-webkit-box;overflow:hidden;overflow-wrap:anywhere;text-overflow:clip;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:clamp(1.25rem,5vw,1.85rem);line-height:1.04}.christianity-full-card-type-icon,.christianity-full-card-cost{display:grid;place-items:center;border-radius:999px}.christianity-full-card-type-icon{width:1.6rem;height:1.6rem;background:radial-gradient(circle at 50% 50%,rgba(95,111,42,.72) 0 .22rem,transparent .24rem),#2430441a}.christianity-full-card-type-icon img{width:1rem;height:1rem;object-fit:contain}.christianity-full-card-cost{min-width:2.1rem;height:2.1rem;padding:0 .36rem;background:#ffd91a;color:#243044;font-size:1.1rem;font-weight:900;box-shadow:inset 0 -.12rem #52401c2e}.christianity-full-card-art{position:relative;display:grid;place-items:center;min-height:9rem;overflow:hidden;border-radius:.48rem;background:linear-gradient(135deg,#5f6f2a33,#d6a21d29),radial-gradient(circle at 50% 25%,rgba(255,255,255,.76),transparent 42%),#dbe7ef;box-shadow:inset 0 0 0 1px #24304414}.christianity-full-card-art img{width:100%;height:100%;object-fit:cover}.christianity-full-card-art>span{max-width:80%;color:#24304494;font-size:clamp(1.1rem,5vw,1.8rem);font-weight:900;line-height:1.05;text-align:center}.christianity-full-card-art small{position:absolute;right:0;bottom:.55rem;min-width:5rem;padding:.16rem .48rem;border-radius:999px 0 0 999px;background:#ffffffe6;box-shadow:0 .3rem .8rem #102a431f;color:#1f2933bd;font-size:.68rem;font-style:italic;font-weight:900;text-align:center;text-transform:uppercase}.christianity-full-card-verse,.christianity-full-card-effect{display:grid;gap:.32rem}.christianity-full-card-verse p,.christianity-full-card-effect p{margin:0;line-height:1.25}.christianity-full-card-verse{color:#171923;font-family:Georgia,Times New Roman,serif;font-size:clamp(.72rem,2.7vw,.86rem)}.christianity-full-card-verse strong{font-family:inherit;font-size:.78rem;font-weight:900}.christianity-full-card-effect{position:relative;align-content:start;min-height:7rem;padding:.6rem .7rem;overflow:hidden;border-radius:.45rem;background:radial-gradient(circle at 50% 72%,rgba(36,48,68,.07),transparent 34%),#ffffffdb}.christianity-full-card-stats{display:flex;gap:1rem;min-height:1.35rem}.christianity-full-card-stats strong{font-size:1rem;line-height:1}.christianity-full-card-stats .christianity-full-card-pips{display:inline-grid;grid-auto-flow:column;gap:.2rem;justify-self:start;padding:0;background:transparent}.christianity-full-card-effect>div:last-of-type{display:grid;gap:.12rem}.christianity-full-card-effect>div:last-of-type strong{font-size:.82rem}.christianity-full-card-effect p{font-size:clamp(.78rem,2.9vw,.92rem)}.christianity-full-card-rarity{position:absolute;top:.62rem;right:.62rem;width:.46rem;height:.46rem;border-radius:.12rem;transform:rotate(45deg)}.christianity-full-card-rarity.is-normal{background:#d1d5db}.christianity-full-card-rarity.is-uncommon{background:#22c55e}.christianity-full-card-rarity.is-rare{background:#3b82f6}.christianity-full-card-rarity.is-legendary{background:#eab308}.christianity-full-card-footer{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;gap:.34rem;align-items:center;color:#1f2933ad;font-size:.58rem;line-height:1;text-transform:uppercase}.christianity-full-card-footer span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-floating-card-close{position:absolute;top:0;right:.15rem;z-index:4;min-height:2rem;padding:0 .6rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#ffffffe6;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .45rem 1rem #102a431a}.christianity-preview-backdrop,.christianity-history-backdrop,.christianity-info-backdrop{position:fixed;inset:0;border:0;border-radius:0;background:#0f172a75}.christianity-preview-backdrop{z-index:79}.christianity-info-backdrop{z-index:50}.christianity-info-panel{position:fixed;top:50%;left:50%;z-index:51;width:min(31rem,calc(100vw - 1.25rem));max-height:min(34rem,calc(100vh - 2rem));padding-top:2.35rem;transform:translate(-50%,-50%)}.christianity-info-close{position:absolute;top:0;right:.15rem;z-index:2}.christianity-rule-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.85rem;max-height:inherit;padding:1rem;overflow-y:auto;border:1px solid rgba(36,48,68,.14);border-radius:.9rem;background:linear-gradient(180deg,#fffffff7,#f8fafcf7),radial-gradient(circle at 8% 0%,rgba(37,99,235,.1),transparent 38%);box-shadow:0 1.2rem 2.6rem #102a433d,inset 0 0 0 .25rem #ffffff85}.christianity-rule-note-icon{display:grid;place-items:center;width:2.1rem;height:2.1rem;border-radius:999px;background:color-mix(in srgb,var(--christianity-theme-focus) 12%,#ffffff);color:var(--christianity-theme-focus);font-size:1rem;font-weight:900;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--christianity-theme-focus) 24%,transparent)}.christianity-rule-note small,.christianity-rule-note strong,.christianity-rule-note p,.christianity-rule-note h2{margin:0}.christianity-rule-note small{color:#1f29339e;font-size:.78rem;font-weight:800;text-transform:uppercase}.christianity-rule-note h2{margin-top:.18rem;font-size:clamp(1.5rem,7vw,2.2rem);line-height:1.05}.christianity-rule-note strong{display:inline-flex;width:fit-content;margin-top:.55rem;padding:.22rem .55rem;border-radius:999px;background:#edf2f7;font-size:.92rem}.christianity-rule-note p{margin-top:.75rem;color:#1f2933c7;line-height:1.45}.christianity-rule-note ul{display:grid;gap:.45rem;margin:.8rem 0 0;padding-left:1.05rem;color:#1f2933c7;line-height:1.35}.christianity-floating-card>small,.christianity-floating-card>span{color:#1f2933a3}.christianity-floating-card>strong{font-size:clamp(1.55rem,8vw,2.35rem);line-height:1.05}.christianity-floating-card>p{margin:0;align-self:end;font-size:.95rem;line-height:1.35}.christianity-preview-rule-note{position:relative;z-index:4;display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;padding:.75rem .85rem;border:1px solid rgba(36,48,68,.14);border-radius:.75rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 8% 0%,rgba(37,99,235,.08),transparent 44%);box-shadow:0 .75rem 1.6rem #102a431f}.christianity-preview-rule-note small,.christianity-preview-rule-note strong,.christianity-preview-rule-note p{margin:0}.christianity-preview-rule-note small{color:#1f293394;font-size:.68rem;font-weight:800;text-transform:uppercase}.christianity-preview-rule-note strong{display:block;margin-top:.08rem;font-size:.92rem;line-height:1.1}.christianity-preview-rule-note p{margin-top:.22rem;color:#1f2933bd;font-size:.82rem;line-height:1.32}@media (min-width: 52rem){.christianity-floating-card-shell{width:min(29rem,calc(100vw - 3rem))}.christianity-floating-card{min-height:0;padding:0}}.christianity-history-backdrop{z-index:40}.christianity-history-drawer{position:fixed;right:auto;bottom:max(.5rem,env(safe-area-inset-bottom));left:50%;z-index:41;display:grid;grid-template-rows:auto minmax(0,1fr);gap:.75rem;width:min(calc(100vw - 1rem),44rem);min-height:min(18rem,calc(100dvh - 1rem));max-height:min(32rem,calc(100dvh - 2rem));padding:.8rem;border:1px solid rgba(36,48,68,.16);border-radius:.75rem;background:#fffffffa;box-shadow:0 1.5rem 4rem #102a4347;transform:translate(-50%)}.christianity-history-drawer header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-history-drawer h2,.christianity-history-drawer p{margin:0}.christianity-history-drawer header span{display:grid;place-items:center;min-width:1.85rem;height:1.85rem;border-radius:999px;background:#edf2f7;font-weight:800}.christianity-dialog-actions{display:flex;align-items:center;gap:.45rem}.christianity-dialog-close{min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#fff;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .8rem #102a4314}.christianity-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.4rem,1fr));gap:.55rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .25rem}.christianity-history-grid::-webkit-scrollbar,.christianity-offering-list::-webkit-scrollbar{width:.65rem}.christianity-history-grid::-webkit-scrollbar-track,.christianity-offering-list::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-history-grid::-webkit-scrollbar-thumb,.christianity-offering-list::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.christianity-offerings-drawer{grid-template-rows:auto auto minmax(0,1fr);width:min(calc(100vw - 1rem),48rem);min-height:min(20rem,calc(100dvh - 1rem));max-height:min(34rem,calc(100dvh - 2rem))}.christianity-offerings-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;padding:.72rem .8rem;border:1px solid rgba(36,48,68,.12);border-radius:.7rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 8% 0%,rgba(214,162,29,.12),transparent 42%)}.christianity-offerings-note p{margin:0;color:#1f2933c2;font-size:.86rem;line-height:1.35}.christianity-offering-list{display:grid;gap:.6rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem}.christianity-offering-row{display:grid;grid-template-columns:minmax(5.4rem,6.5rem) minmax(0,1fr);gap:.65rem;align-items:center;padding:.45rem;border:1px solid rgba(36,48,68,.12);border-radius:.65rem;background:#fff}.christianity-offering-row.is-exhausted{opacity:.68}.christianity-gallery-drawer{grid-template-rows:auto auto auto minmax(0,1fr);width:min(calc(100vw - 1rem),58rem);min-height:min(25rem,calc(100dvh - 1rem));max-height:min(42rem,calc(100dvh - 2rem))}.christianity-gallery-drawer header>div:first-child{display:grid;gap:.15rem;min-width:0}.christianity-gallery-drawer header p{color:#1f293394;font-size:.82rem}.christianity-gallery-controls{display:grid;grid-template-columns:minmax(0,1fr) minmax(8.5rem,13rem);gap:.65rem}.christianity-gallery-controls label{display:grid;gap:.25rem;min-width:0;color:#1f29339e;font-size:.74rem;font-weight:800}.christianity-gallery-controls input,.christianity-gallery-controls select{width:100%;min-width:0;min-height:2.35rem;padding:0 .75rem;border:1px solid rgba(36,48,68,.16);border-radius:.65rem;background:#fff;color:var(--christianity-theme-ink);font:inherit;font-size:.9rem}.christianity-gallery-edition-strip{display:flex;gap:.45rem;overflow-x:auto;padding-bottom:.1rem}.christianity-gallery-edition-strip button{display:inline-flex;align-items:center;gap:.45rem;min-height:2.35rem;padding:0 .75rem;border:1px solid rgba(214,162,29,.38);border-radius:999px;background:var(--christianity-theme-parchment);color:var(--christianity-theme-ink);font:inherit;font-size:.82rem;font-weight:800}.christianity-gallery-edition-strip img{width:1.2rem;height:1.2rem;object-fit:contain}.christianity-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(6.4rem,1fr));gap:.65rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .35rem}.christianity-gallery-grid::-webkit-scrollbar{width:.65rem}.christianity-gallery-grid::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-gallery-grid::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.christianity-offering-card{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto;align-content:stretch;gap:.26rem;width:100%;min-height:7.7rem;padding:.58rem;overflow:hidden;text-align:left;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 78% 14%,rgba(250,204,21,.78) 0 .42rem,transparent .44rem);box-shadow:0 .45rem 1rem #102a431a}.christianity-offering-card small{min-width:0;overflow:hidden;color:#1f293394;font-size:.62rem;font-weight:800;line-height:1;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.christianity-offering-card strong{display:-webkit-box;align-self:start;min-width:0;margin-top:.1rem;overflow:hidden;overflow-wrap:anywhere;font-size:.88rem;line-height:1.05;-webkit-box-orient:vertical;-webkit-line-clamp:3}.christianity-offering-card span{position:absolute;right:.42rem;bottom:.42rem;display:grid;place-items:center;min-width:1.55rem;height:1.55rem;padding:0 .28rem;border-radius:999px;background:#edf2f7;font-size:.82rem;font-weight:900}.christianity-offering-card em{align-self:end;max-width:calc(100% - 1.9rem);overflow:hidden;color:#1f29339e;font-size:.64rem;font-style:normal;font-weight:800;line-height:1.05;text-overflow:ellipsis;white-space:nowrap}.christianity-offering-card p,.christianity-offering-row p{margin:0}.christianity-offering-card p{align-self:end;color:#1f2933a3;font-size:.72rem;line-height:1.2}.christianity-offering-row>div{display:grid;gap:.35rem;align-content:center;min-width:0}.christianity-offering-row>div p{color:#1f2933b8;font-size:.85rem;line-height:1.3}.christianity-offering-row>div button{justify-self:start;min-height:2.2rem;padding:0 .7rem;border:1px solid rgba(16,42,67,.16);border-radius:.5rem;background:#102a43;color:#fff;font:inherit;font-weight:800}.christianity-offering-row>div button:disabled{background:#e2e8f0;color:#1f293394}.christianity-history-grid .christianity-render-card-button{justify-self:center;width:min(100%,5.8rem)}.christianity-gallery-grid .christianity-render-card-button{justify-self:center;width:min(100%,6.6rem)}.christianity-offering-card.christianity-render-card-button{width:min(100%,5.8rem);min-height:0;padding:0;border:0;background:transparent;box-shadow:none}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid color-mix(in srgb,var(--christianity-theme-focus) 24%,transparent);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-match-strip{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:.35rem;padding:.35rem}.christianity-match-player{gap:.35rem}.christianity-match-player small{display:none}.christianity-header-actions{align-items:flex-end;flex-direction:column}.christianity-start__cards,.christianity-start__hero{grid-template-columns:minmax(0,1fr)}.christianity-start__fan{min-height:10.5rem}.christianity-start__fan val-christianity-card{width:clamp(5.2rem,22vw,6.4rem)}.christianity-start__modes{grid-template-columns:repeat(2,minmax(0,1fr))}.christianity-splash,.christianity-start{min-height:min(30rem,calc(100dvh - 7rem));border-right:0;border-left:0;border-radius:0}.christianity-scoreboard{min-width:3.65rem;padding:0 .35rem}.christianity-scoreboard strong{font-size:1.05rem}.christianity-table{gap:.35rem;padding-right:.25rem;padding-left:.25rem}.christianity-player-side{padding:.3rem .25rem}.christianity-battle-zone{--christianity-battle-card-width: min(5.2rem, calc((100vw - 4.25rem)/4) );grid-template-columns:repeat(4,var(--christianity-battle-card-width));justify-content:center;min-height:8.75rem;overflow-x:clip}.christianity-hand-fan{min-height:11.45rem;padding-bottom:2rem;overflow:visible}.christianity-hand-shelf{min-height:12.65rem;margin-top:-1rem;padding-top:1.35rem;padding-bottom:.9rem}.christianity-hand-shelf--opponent{min-height:6.65rem;margin-top:0;margin-bottom:0;padding-top:.4rem;padding-bottom:.85rem}.christianity-player-rack{grid-template-columns:minmax(4.5rem,5.7rem) minmax(4.4rem,1fr) minmax(3.5rem,4.8rem)}.christianity-shared-zone{gap:.45rem;grid-template-columns:repeat(3,minmax(0,1fr))}.christianity-zone-card,.christianity-zone-pile{min-height:6.15rem;padding:.58rem .46rem .5rem;gap:.24rem}.christianity-zone-pile i{top:2rem;right:.52rem;width:2.35rem;height:3.25rem}.christianity-offering-pile{height:6.85rem;min-height:0;max-height:6.85rem;padding:.88rem .46rem .55rem;gap:.24rem}.christianity-offering-pile i{top:2.25rem;left:.56rem;width:2.35rem;height:3.25rem}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);height:auto;min-height:0}.christianity-leader-card{width:clamp(4.55rem,20vw,5.7rem);min-height:0}.christianity-offering-row{grid-template-columns:minmax(5rem,5.8rem) minmax(0,1fr);gap:.5rem}.christianity-gallery-controls{grid-template-columns:minmax(0,1fr)}.christianity-gallery-grid{grid-template-columns:repeat(auto-fill,minmax(5.7rem,1fr))}.christianity-offering-card{min-height:7.25rem;padding:.5rem}.christianity-hand-fan--opponent{min-height:5.75rem;padding-bottom:.7rem}.christianity-hand-fan--opponent .christianity-card-frame--back{width:clamp(3.35rem,15vw,4.25rem);margin-inline:-.72rem}}\n"], dependencies: [{ kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: LightRippleDirective, selector: "[valLightRipple]" }, { kind: "component", type: ChristianityCardComponent, selector: "val-christianity-card", inputs: ["card", "variant"] }] }); }
|
|
1739
|
+
}
|
|
1740
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, decorators: [{
|
|
1741
|
+
type: Component,
|
|
1742
|
+
args: [{ selector: 'val-christianity-game', standalone: true, imports: [CdkDrag, CdkDropList, LightRippleDirective, ChristianityCardComponent], template: `
|
|
1743
|
+
<main class="christianity-shell">
|
|
1744
|
+
<section class="christianity-header">
|
|
1745
|
+
<div>
|
|
1746
|
+
<p>{{ t('christianityEyebrow') }}</p>
|
|
1747
|
+
<h1>{{ t('christianityTitle') }}</h1>
|
|
1748
|
+
</div>
|
|
1749
|
+
<div class="christianity-header-actions">
|
|
1750
|
+
@if (screen() !== 'splash') {
|
|
1751
|
+
<button type="button" class="christianity-gallery-open" valLightRipple (click)="openGallery()">
|
|
1752
|
+
{{ t('christianityGallery') }}
|
|
1753
|
+
</button>
|
|
1754
|
+
}
|
|
1755
|
+
@if (screen() === 'table') {
|
|
1756
|
+
<div class="christianity-turn" [class.is-own-turn]="isOwnTurn()">
|
|
1757
|
+
<span>{{ t('christianityTurn') }}</span>
|
|
1758
|
+
<strong>{{ currentPlayer().displayName }}</strong>
|
|
1759
|
+
</div>
|
|
1760
|
+
}
|
|
1761
|
+
</div>
|
|
1762
|
+
</section>
|
|
1763
|
+
|
|
1764
|
+
@if (screen() === 'splash') {
|
|
1765
|
+
<section class="christianity-splash" role="status" aria-live="polite">
|
|
1766
|
+
<div class="christianity-splash__mark">
|
|
1767
|
+
<i aria-hidden="true"></i>
|
|
1768
|
+
<i aria-hidden="true"></i>
|
|
1769
|
+
<i aria-hidden="true"></i>
|
|
1770
|
+
</div>
|
|
1771
|
+
<div>
|
|
1772
|
+
<span>{{ t('christianitySplashEyebrow') }}</span>
|
|
1773
|
+
<h2>{{ t('christianitySplashTitle') }}</h2>
|
|
1774
|
+
<p>{{ splashStatusText() }}</p>
|
|
1775
|
+
</div>
|
|
1776
|
+
</section>
|
|
1777
|
+
} @else if (screen() === 'home') {
|
|
1778
|
+
<section class="christianity-start">
|
|
1779
|
+
<div class="christianity-start__hero">
|
|
1780
|
+
<div class="christianity-start__copy">
|
|
1781
|
+
<span>{{ t('christianityGenesisEdition') }}</span>
|
|
1782
|
+
<h2>{{ t('christianityStartTitle') }}</h2>
|
|
1783
|
+
<p>{{ t('christianityStartBody') }}</p>
|
|
1784
|
+
</div>
|
|
1785
|
+
<div class="christianity-start__fan" aria-hidden="true">
|
|
1786
|
+
@for (card of startFeaturedCards(); track card.id) {
|
|
1787
|
+
<val-christianity-card
|
|
1788
|
+
[card]="definitionToRenderCard(card)"
|
|
1789
|
+
variant="hand"
|
|
1790
|
+
[style.transform]="startFeaturedCardTransform($index)"
|
|
1791
|
+
></val-christianity-card>
|
|
1792
|
+
}
|
|
1793
|
+
</div>
|
|
1794
|
+
</div>
|
|
1795
|
+
<div class="christianity-start__cards">
|
|
1796
|
+
<article>
|
|
1797
|
+
<strong>{{ t('christianityTutorialMode') }}</strong>
|
|
1798
|
+
<p>{{ t('christianityTutorialModeBody') }}</p>
|
|
1799
|
+
<button type="button" class="christianity-primary-action" valLightRipple (click)="startTutorial()">
|
|
1800
|
+
{{ t('christianityStartTutorial') }}
|
|
1801
|
+
</button>
|
|
1802
|
+
</article>
|
|
1803
|
+
<article>
|
|
1804
|
+
<strong>{{ t('christianityGallery') }}</strong>
|
|
1805
|
+
<p>{{ t('christianityGalleryModeBody') }}</p>
|
|
1806
|
+
<button type="button" class="christianity-secondary-action" valLightRipple (click)="openGallery()">
|
|
1807
|
+
{{ t('christianityOpenGallery') }}
|
|
1808
|
+
</button>
|
|
1809
|
+
</article>
|
|
1810
|
+
<article>
|
|
1811
|
+
<strong>{{ t('christianityHowToPlay') }}</strong>
|
|
1812
|
+
<p>{{ t('christianityHowToPlayBody') }}</p>
|
|
1813
|
+
<button type="button" class="christianity-secondary-action" valLightRipple (click)="inspectHowToPlay()">
|
|
1814
|
+
{{ t('learnMore') }}
|
|
1815
|
+
</button>
|
|
1816
|
+
</article>
|
|
1817
|
+
</div>
|
|
1818
|
+
<div class="christianity-start__status" [attr.aria-label]="t('christianityEditionStatus')">
|
|
1819
|
+
<span>{{ galleryEditionLabel() }}</span>
|
|
1820
|
+
<span>{{ t('christianityTutorialActive') }}</span>
|
|
1821
|
+
<span>{{ catalogStatusLabel() }}</span>
|
|
1822
|
+
</div>
|
|
1823
|
+
<section class="christianity-start__modes" [attr.aria-label]="t('christianityFutureModes')">
|
|
1824
|
+
@for (mode of futureModes(); track mode.title) {
|
|
1825
|
+
<article>
|
|
1826
|
+
<strong>{{ mode.title }}</strong>
|
|
1827
|
+
<p>{{ mode.body }}</p>
|
|
1828
|
+
<span>{{ t('soonTitle') }}</span>
|
|
1829
|
+
</article>
|
|
1830
|
+
}
|
|
1831
|
+
</section>
|
|
1832
|
+
</section>
|
|
1833
|
+
} @else {
|
|
1834
|
+
<section class="christianity-match-strip" [attr.aria-label]="t('christianityMatchScore')">
|
|
1835
|
+
<article class="christianity-match-player">
|
|
1836
|
+
<span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
|
|
1837
|
+
<div>
|
|
1838
|
+
<strong>{{ player().displayName }}</strong>
|
|
1839
|
+
<small>{{ playerLeaderDisplayName(player()) }} · {{ player().leaderHp }}/{{ player().leaderMaxHp }}</small>
|
|
1840
|
+
</div>
|
|
1841
|
+
</article>
|
|
1842
|
+
<div class="christianity-scoreboard">
|
|
1843
|
+
<span>{{ t('christianityMatch') }}</span>
|
|
1844
|
+
<strong>{{ game().matchScore.P1 }}-{{ game().matchScore.P2 }}</strong>
|
|
1845
|
+
</div>
|
|
1846
|
+
<article class="christianity-match-player christianity-match-player--opponent">
|
|
1847
|
+
<span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
|
|
1848
|
+
<div>
|
|
1849
|
+
<strong>{{ opponent().displayName }}</strong>
|
|
1850
|
+
<small>{{ playerLeaderDisplayName(opponent()) }} · {{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</small>
|
|
1851
|
+
</div>
|
|
1852
|
+
</article>
|
|
1853
|
+
</section>
|
|
1854
|
+
|
|
1855
|
+
<section class="christianity-hand-shelf christianity-hand-shelf--opponent">
|
|
1856
|
+
<div class="christianity-hand-meter christianity-hand-meter--opponent">
|
|
1857
|
+
<span>{{ t('christianityHand') }}</span>
|
|
1858
|
+
<strong>{{ opponentHandCount() }}</strong>
|
|
1859
|
+
</div>
|
|
1860
|
+
<section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
|
|
1861
|
+
@for (_ of hiddenHandCards(opponentHandCount()); track $index) {
|
|
1862
|
+
<button
|
|
1863
|
+
type="button"
|
|
1864
|
+
class="christianity-card-preview-card christianity-card-frame christianity-card-frame--back"
|
|
1865
|
+
valLightRipple
|
|
1866
|
+
[style.transform]="fanTransform($index, opponentHandCount(), true)"
|
|
1867
|
+
[attr.aria-label]="t('christianityHiddenCard')"
|
|
1868
|
+
></button>
|
|
1869
|
+
}
|
|
1870
|
+
</section>
|
|
1871
|
+
</section>
|
|
1872
|
+
|
|
1873
|
+
<section class="christianity-table" [attr.aria-label]="t('christianityTable')">
|
|
1874
|
+
<section class="christianity-player-side christianity-player-side--opponent">
|
|
1875
|
+
<section class="christianity-player-rack christianity-player-rack--opponent">
|
|
1876
|
+
<div class="christianity-offerings-zone">
|
|
1877
|
+
<button type="button" class="christianity-offering-pile" valLightRipple (click)="openOfferings('P2')">
|
|
1878
|
+
<i aria-hidden="true"></i>
|
|
1879
|
+
<i aria-hidden="true"></i>
|
|
1880
|
+
<i aria-hidden="true"></i>
|
|
1881
|
+
<span>{{ t('christianityOfferings') }}</span>
|
|
1882
|
+
<strong>{{ readyOfferings(opponent()) }}/{{ totalOfferings(opponent()) }}</strong>
|
|
1883
|
+
</button>
|
|
1884
|
+
</div>
|
|
1885
|
+
<button type="button" class="christianity-leader-card christianity-render-card-button" valLightRipple [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
|
|
1886
|
+
<val-christianity-card [card]="leaderRenderCard(opponent())" variant="table"></val-christianity-card>
|
|
1887
|
+
</button>
|
|
1888
|
+
<span class="christianity-rack-spacer" aria-hidden="true"></span>
|
|
1889
|
+
</section>
|
|
1890
|
+
|
|
1891
|
+
<section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
|
|
1892
|
+
@for (slot of battleSlots('P2'); track slot.trackId) {
|
|
1893
|
+
@if (slot.card) {
|
|
1894
|
+
<button
|
|
1895
|
+
type="button"
|
|
1896
|
+
class="christianity-card-preview-card christianity-card-preview-card--battle christianity-render-card-button"
|
|
1897
|
+
valLightRipple
|
|
1898
|
+
[class.is-target]="selectedAttacker()"
|
|
1899
|
+
(click)="handleOpponentCharacter(slot.card)"
|
|
1900
|
+
>
|
|
1901
|
+
<val-christianity-card [card]="characterRenderCard(slot.card)" variant="table"></val-christianity-card>
|
|
1902
|
+
</button>
|
|
1903
|
+
} @else {
|
|
1904
|
+
<span class="christianity-slot"></span>
|
|
1905
|
+
}
|
|
1906
|
+
}
|
|
1907
|
+
</section>
|
|
1908
|
+
</section>
|
|
1909
|
+
|
|
1910
|
+
<section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
|
|
1911
|
+
<button type="button" class="christianity-zone-pile christianity-zone-pile--history" valLightRipple (click)="openHistory()">
|
|
1912
|
+
<i aria-hidden="true"></i>
|
|
1913
|
+
<i aria-hidden="true"></i>
|
|
1914
|
+
<i aria-hidden="true"></i>
|
|
1915
|
+
<span>{{ t('christianityHistory') }}</span>
|
|
1916
|
+
<strong>{{ game().historyZone.length }}</strong>
|
|
1917
|
+
</button>
|
|
1918
|
+
<button type="button" class="christianity-zone-pile christianity-zone-pile--deck" valLightRipple aria-live="polite" (click)="inspectDeck()">
|
|
1919
|
+
<i aria-hidden="true"></i>
|
|
1920
|
+
<i aria-hidden="true"></i>
|
|
1921
|
+
<i aria-hidden="true"></i>
|
|
1922
|
+
<span>{{ t('christianityDeck') }}</span>
|
|
1923
|
+
<strong>{{ game().sharedDeck.length }}</strong>
|
|
1924
|
+
</button>
|
|
1925
|
+
<div class="christianity-zone-card">
|
|
1926
|
+
<span>{{ t('christianityPlace') }}</span>
|
|
1927
|
+
<strong>{{ t('christianityEmpty') }}</strong>
|
|
1928
|
+
</div>
|
|
1929
|
+
</section>
|
|
1930
|
+
|
|
1931
|
+
<section class="christianity-player-side">
|
|
1932
|
+
<section class="christianity-battle-zone" [class.is-placing-card]="canPlaceSelectedCharacter() || isDraggingCharacter()" [attr.aria-label]="t('christianityYourBattle')">
|
|
1933
|
+
@for (slot of battleSlots('P1'); track slot.trackId) {
|
|
1934
|
+
@if (slot.card) {
|
|
1935
|
+
<button
|
|
1936
|
+
type="button"
|
|
1937
|
+
class="christianity-card-preview-card christianity-card-preview-card--battle christianity-render-card-button"
|
|
1938
|
+
valLightRipple
|
|
1939
|
+
[class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
|
|
1940
|
+
[class.is-exhausted]="!slot.card.canAttack"
|
|
1941
|
+
[class.is-ready-attacker]="isOwnTurn() && slot.card.canAttack"
|
|
1942
|
+
(click)="selectAttacker(slot.card)"
|
|
1943
|
+
>
|
|
1944
|
+
<val-christianity-card [card]="characterRenderCard(slot.card)" variant="table"></val-christianity-card>
|
|
1945
|
+
</button>
|
|
1946
|
+
} @else {
|
|
1947
|
+
<button
|
|
1948
|
+
type="button"
|
|
1949
|
+
class="christianity-slot"
|
|
1950
|
+
cdkDropList
|
|
1951
|
+
[id]="battleSlotDropId($index)"
|
|
1952
|
+
[cdkDropListData]="$index"
|
|
1953
|
+
[cdkDropListConnectedTo]="['christianity-hand-source']"
|
|
1954
|
+
[cdkDropListEnterPredicate]="canDropOnBattleSlot"
|
|
1955
|
+
[cdkDropListSortingDisabled]="true"
|
|
1956
|
+
[class.christianity-slot--play-target]="canPlaceSelectedCharacter() || isDraggingCharacter()"
|
|
1957
|
+
valLightRipple
|
|
1958
|
+
(cdkDropListDropped)="dropOnBattleSlot($event, $index)"
|
|
1959
|
+
(click)="playSelectedCard($index)"
|
|
1960
|
+
>
|
|
1961
|
+
@if (canPlaceSelectedCharacter() || isDraggingCharacter()) {
|
|
1962
|
+
<span>{{ t('christianityPlayHere') }}</span>
|
|
1963
|
+
}
|
|
1964
|
+
</button>
|
|
1965
|
+
}
|
|
1966
|
+
}
|
|
1967
|
+
</section>
|
|
1968
|
+
|
|
1969
|
+
<section class="christianity-player-rack">
|
|
1970
|
+
<div class="christianity-offerings-zone">
|
|
1971
|
+
<button
|
|
1972
|
+
type="button"
|
|
1973
|
+
class="christianity-offering-pile"
|
|
1974
|
+
cdkDropList
|
|
1975
|
+
id="christianity-offerings-drop"
|
|
1976
|
+
valLightRipple
|
|
1977
|
+
[cdkDropListConnectedTo]="['christianity-hand-source']"
|
|
1978
|
+
[class.is-play-target]="canPlaceSelectedOffering() || isDraggingOffering()"
|
|
1979
|
+
[cdkDropListEnterPredicate]="canDropOnOfferings"
|
|
1980
|
+
[cdkDropListSortingDisabled]="true"
|
|
1981
|
+
(cdkDropListDropped)="dropOnOfferings($event)"
|
|
1982
|
+
(click)="handleOfferingPile('P1')"
|
|
1983
|
+
>
|
|
1984
|
+
<i aria-hidden="true"></i>
|
|
1985
|
+
<i aria-hidden="true"></i>
|
|
1986
|
+
<i aria-hidden="true"></i>
|
|
1987
|
+
<span>{{ t('christianityOfferings') }}</span>
|
|
1988
|
+
<strong>{{ readyOfferings(player()) }}/{{ totalOfferings(player()) }}</strong>
|
|
1989
|
+
</button>
|
|
1990
|
+
</div>
|
|
1991
|
+
<button type="button" class="christianity-leader-card christianity-render-card-button" valLightRipple (click)="inspectLeader('P1')">
|
|
1992
|
+
<val-christianity-card [card]="leaderRenderCard(player())" variant="table"></val-christianity-card>
|
|
1993
|
+
</button>
|
|
1994
|
+
<div class="christianity-player-command">
|
|
1995
|
+
<div class="christianity-player-badge">
|
|
1996
|
+
<span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
|
|
1997
|
+
<strong>{{ player().displayName }}</strong>
|
|
1998
|
+
</div>
|
|
1999
|
+
<button
|
|
2000
|
+
type="button"
|
|
2001
|
+
class="christianity-end-turn"
|
|
2002
|
+
(click)="endTurn()"
|
|
2003
|
+
>
|
|
2004
|
+
{{ t('christianityEndTurn') }}
|
|
2005
|
+
</button>
|
|
2006
|
+
</div>
|
|
2007
|
+
</section>
|
|
2008
|
+
</section>
|
|
2009
|
+
</section>
|
|
2010
|
+
|
|
2011
|
+
<section class="christianity-hand-shelf">
|
|
2012
|
+
<div class="christianity-hand-meter">
|
|
2013
|
+
<span>{{ t('christianityHand') }}</span>
|
|
2014
|
+
<strong>{{ player().hand?.length ?? 0 }}</strong>
|
|
2015
|
+
</div>
|
|
2016
|
+
<section
|
|
2017
|
+
class="christianity-hand-fan"
|
|
2018
|
+
cdkDropList
|
|
2019
|
+
id="christianity-hand-source"
|
|
2020
|
+
[cdkDropListConnectedTo]="dropTargetIds()"
|
|
2021
|
+
[attr.aria-label]="t('christianityYourHand')"
|
|
2022
|
+
(pointerleave)="clearHoveredHandIndex()"
|
|
2023
|
+
>
|
|
2024
|
+
@for (cardId of player().hand ?? []; track cardId + $index) {
|
|
2025
|
+
@let card = cardDefinition(cardId);
|
|
2026
|
+
<div
|
|
2027
|
+
class="christianity-hand-card-wrap"
|
|
2028
|
+
[class.is-selected]="selectedHandCard() === cardId"
|
|
2029
|
+
[class.is-dragging]="draggingCardId() === cardId"
|
|
2030
|
+
[style.z-index]="handCardZIndex($index)"
|
|
2031
|
+
[style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
|
|
2032
|
+
(pointerenter)="setHoveredHandIndex($index)"
|
|
2033
|
+
(pointerdown)="setHoveredHandIndex($index)"
|
|
2034
|
+
(pointerup)="releaseHoveredHand($event)"
|
|
2035
|
+
>
|
|
2036
|
+
<button
|
|
2037
|
+
type="button"
|
|
2038
|
+
class="christianity-card-preview-card christianity-card-preview-card--hand christianity-render-card-button"
|
|
2039
|
+
cdkDrag
|
|
2040
|
+
valLightRipple
|
|
2041
|
+
[cdkDragData]="cardId"
|
|
2042
|
+
[cdkDragDisabled]="!canPlay(card)"
|
|
2043
|
+
[class.is-selected]="selectedHandCard() === cardId"
|
|
2044
|
+
[class.is-disabled]="!canPlay(card)"
|
|
2045
|
+
(cdkDragStarted)="startDraggingCard(cardId)"
|
|
2046
|
+
(cdkDragEnded)="endDraggingCard()"
|
|
2047
|
+
(click)="selectHandCard(cardId)"
|
|
2048
|
+
>
|
|
2049
|
+
<val-christianity-card [card]="definitionToRenderCard(card)" variant="hand"></val-christianity-card>
|
|
2050
|
+
</button>
|
|
2051
|
+
<button
|
|
2052
|
+
type="button"
|
|
2053
|
+
class="christianity-card-eye"
|
|
2054
|
+
[attr.aria-label]="t('christianityPreviewCard')"
|
|
2055
|
+
(click)="inspectHandCard(cardId, true); $event.stopPropagation()"
|
|
2056
|
+
></button>
|
|
2057
|
+
</div>
|
|
2058
|
+
}
|
|
2059
|
+
</section>
|
|
2060
|
+
</section>
|
|
2061
|
+
}
|
|
2062
|
+
|
|
2063
|
+
@if (selectedPreview()) {
|
|
2064
|
+
<button type="button" class="christianity-preview-backdrop" [attr.aria-label]="t('christianityClosePreview')" (click)="closePreview()"></button>
|
|
2065
|
+
<aside
|
|
2066
|
+
class="christianity-floating-card-shell"
|
|
2067
|
+
aria-live="polite"
|
|
2068
|
+
>
|
|
2069
|
+
<button type="button" class="christianity-floating-card-close" (click)="closePreview()">
|
|
2070
|
+
{{ t('close') }}
|
|
2071
|
+
</button>
|
|
2072
|
+
<div
|
|
2073
|
+
class="christianity-floating-card"
|
|
2074
|
+
[style.--preview-rotate-x]="previewTilt().rotateX + 'deg'"
|
|
2075
|
+
[style.--preview-rotate-y]="previewTilt().rotateY + 'deg'"
|
|
2076
|
+
[style.--preview-shift-x]="previewTilt().shiftX + 'px'"
|
|
2077
|
+
[style.--preview-shift-y]="previewTilt().shiftY + 'px'"
|
|
2078
|
+
(pointermove)="tiltPreview($event)"
|
|
2079
|
+
(pointerleave)="resetPreviewTilt()"
|
|
2080
|
+
>
|
|
2081
|
+
@if (selectedPreviewRenderCard(); as previewCard) {
|
|
2082
|
+
<val-christianity-card [card]="previewCard" variant="full"></val-christianity-card>
|
|
2083
|
+
}
|
|
2084
|
+
</div>
|
|
2085
|
+
@if (previewRule(); as rule) {
|
|
2086
|
+
<div class="christianity-preview-rule-note">
|
|
2087
|
+
<span class="christianity-rule-note-icon" aria-hidden="true">i</span>
|
|
2088
|
+
<div>
|
|
2089
|
+
<small>{{ t('christianityCardRule') }}</small>
|
|
2090
|
+
<strong>{{ rule.title }}</strong>
|
|
2091
|
+
<p>{{ rule.body }}</p>
|
|
2092
|
+
</div>
|
|
2093
|
+
</div>
|
|
2094
|
+
}
|
|
2095
|
+
</aside>
|
|
2096
|
+
}
|
|
2097
|
+
|
|
2098
|
+
@if (selectedInfo(); as info) {
|
|
2099
|
+
<button type="button" class="christianity-info-backdrop" [attr.aria-label]="t('close')" (click)="closeInfo()"></button>
|
|
2100
|
+
<aside class="christianity-info-panel" aria-live="polite">
|
|
2101
|
+
<button type="button" class="christianity-dialog-close christianity-info-close" (click)="closeInfo()">
|
|
2102
|
+
{{ t('close') }}
|
|
2103
|
+
</button>
|
|
2104
|
+
<div class="christianity-rule-note">
|
|
2105
|
+
<span class="christianity-rule-note-icon" aria-hidden="true">i</span>
|
|
2106
|
+
<div>
|
|
2107
|
+
<small>{{ info.eyebrow }}</small>
|
|
2108
|
+
<h2>{{ info.title }}</h2>
|
|
2109
|
+
<strong>{{ info.meta }}</strong>
|
|
2110
|
+
<p>{{ info.body }}</p>
|
|
2111
|
+
<ul>
|
|
2112
|
+
@for (fact of info.facts; track fact) {
|
|
2113
|
+
<li>{{ fact }}</li>
|
|
2114
|
+
}
|
|
2115
|
+
</ul>
|
|
2116
|
+
</div>
|
|
2117
|
+
</div>
|
|
2118
|
+
</aside>
|
|
2119
|
+
}
|
|
2120
|
+
|
|
2121
|
+
@if (screen() === 'table') {
|
|
2122
|
+
<section class="christianity-actions" aria-live="polite">
|
|
2123
|
+
<p>{{ statusText() }}</p>
|
|
2124
|
+
<div>
|
|
2125
|
+
<button type="button" [disabled]="selectedActionDisabled()" (click)="playSelectedCard()">
|
|
2126
|
+
{{ selectedActionLabel() }}
|
|
2127
|
+
</button>
|
|
2128
|
+
<button type="button" (click)="resetMock()">
|
|
2129
|
+
{{ t('christianityReset') }}
|
|
2130
|
+
</button>
|
|
2131
|
+
</div>
|
|
2132
|
+
</section>
|
|
2133
|
+
}
|
|
2134
|
+
|
|
2135
|
+
@if (showHistory()) {
|
|
2136
|
+
<button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseHistory')" (click)="showHistory.set(false)"></button>
|
|
2137
|
+
<section class="christianity-history-drawer">
|
|
2138
|
+
<header>
|
|
2139
|
+
<h2>{{ t('christianityHistory') }}</h2>
|
|
2140
|
+
<div class="christianity-dialog-actions">
|
|
2141
|
+
<span>{{ game().historyZone.length }}</span>
|
|
2142
|
+
<button type="button" class="christianity-dialog-close" (click)="showHistory.set(false)">
|
|
2143
|
+
{{ t('close') }}
|
|
2144
|
+
</button>
|
|
2145
|
+
</div>
|
|
2146
|
+
</header>
|
|
2147
|
+
@if (game().historyZone.length) {
|
|
2148
|
+
<div class="christianity-history-grid">
|
|
2149
|
+
@for (cardId of game().historyZone; track cardId + $index) {
|
|
2150
|
+
@let card = cardDefinition(cardId);
|
|
2151
|
+
<button type="button" class="christianity-card-preview-card christianity-render-card-button" valLightRipple (click)="inspectHistoryCard(cardId)">
|
|
2152
|
+
<val-christianity-card [card]="definitionToRenderCard(card)" variant="list"></val-christianity-card>
|
|
2153
|
+
</button>
|
|
2154
|
+
}
|
|
2155
|
+
</div>
|
|
2156
|
+
} @else {
|
|
2157
|
+
<p>{{ t('christianityHistoryEmpty') }}</p>
|
|
2158
|
+
}
|
|
2159
|
+
</section>
|
|
2160
|
+
}
|
|
2161
|
+
|
|
2162
|
+
@if (showGallery()) {
|
|
2163
|
+
<button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseGallery')" (click)="closeGallery()"></button>
|
|
2164
|
+
<section class="christianity-history-drawer christianity-gallery-drawer">
|
|
2165
|
+
<header>
|
|
2166
|
+
<div>
|
|
2167
|
+
<h2>{{ t('christianityGallery') }}</h2>
|
|
2168
|
+
<p>{{ galleryEditionLabel() }}</p>
|
|
2169
|
+
</div>
|
|
2170
|
+
<div class="christianity-dialog-actions">
|
|
2171
|
+
<span>{{ galleryCards().length }}</span>
|
|
2172
|
+
<button type="button" class="christianity-dialog-close" (click)="closeGallery()">
|
|
2173
|
+
{{ t('close') }}
|
|
2174
|
+
</button>
|
|
2175
|
+
</div>
|
|
2176
|
+
</header>
|
|
2177
|
+
<div class="christianity-gallery-controls">
|
|
2178
|
+
<label>
|
|
2179
|
+
<span>{{ t('christianityGallerySearch') }}</span>
|
|
2180
|
+
<input type="search" [value]="gallerySearch()" (input)="setGallerySearch($event)" [placeholder]="t('christianityGallerySearchPlaceholder')" />
|
|
2181
|
+
</label>
|
|
2182
|
+
<label>
|
|
2183
|
+
<span>{{ t('christianityGalleryFilter') }}</span>
|
|
2184
|
+
<select [value]="galleryType()" (change)="setGalleryType($event)">
|
|
2185
|
+
@for (option of galleryTypeOptions(); track option.value) {
|
|
2186
|
+
<option [value]="option.value">{{ option.label }}</option>
|
|
2187
|
+
}
|
|
2188
|
+
</select>
|
|
2189
|
+
</label>
|
|
2190
|
+
</div>
|
|
2191
|
+
<div class="christianity-gallery-edition-strip">
|
|
2192
|
+
<button type="button" class="is-active" valLightRipple>
|
|
2193
|
+
<img [src]="galleryEditionIcon()" alt="" />
|
|
2194
|
+
<span>{{ t('christianityGenesisEdition') }}</span>
|
|
2195
|
+
</button>
|
|
2196
|
+
</div>
|
|
2197
|
+
<div class="christianity-gallery-grid">
|
|
2198
|
+
@for (card of galleryCards(); track card.id) {
|
|
2199
|
+
<button type="button" class="christianity-card-preview-card christianity-render-card-button" valLightRipple (click)="inspectGalleryCard(card.id)">
|
|
2200
|
+
<val-christianity-card [card]="definitionToRenderCard(card)" variant="list"></val-christianity-card>
|
|
2201
|
+
</button>
|
|
2202
|
+
} @empty {
|
|
2203
|
+
<p>{{ t('christianityGalleryEmpty') }}</p>
|
|
2204
|
+
}
|
|
2205
|
+
</div>
|
|
2206
|
+
</section>
|
|
2207
|
+
}
|
|
2208
|
+
|
|
2209
|
+
@if (offeringsSeat()) {
|
|
2210
|
+
@let offeringPlayer = game().players[offeringsSeat()!];
|
|
2211
|
+
<button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseOfferings')" (click)="closeOfferings()"></button>
|
|
2212
|
+
<section class="christianity-history-drawer christianity-offerings-drawer">
|
|
2213
|
+
<header>
|
|
2214
|
+
<h2>{{ t('christianityOfferings') }}</h2>
|
|
2215
|
+
<div class="christianity-dialog-actions">
|
|
2216
|
+
<span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
|
|
2217
|
+
<button type="button" class="christianity-dialog-close" (click)="closeOfferings()">
|
|
2218
|
+
{{ t('close') }}
|
|
2219
|
+
</button>
|
|
2220
|
+
</div>
|
|
2221
|
+
</header>
|
|
2222
|
+
<div class="christianity-offerings-note">
|
|
2223
|
+
<span class="christianity-rule-note-icon" aria-hidden="true">i</span>
|
|
2224
|
+
<p>{{ t('christianityOfferingsRuleBody') }}</p>
|
|
2225
|
+
</div>
|
|
2226
|
+
<div class="christianity-offering-list">
|
|
2227
|
+
@for (offering of offeringPlayer.offerings; track offering.instanceId) {
|
|
2228
|
+
<article class="christianity-offering-row" [class.is-exhausted]="!offering.ready">
|
|
2229
|
+
<button type="button" class="christianity-offering-card christianity-render-card-button" valLightRipple (click)="inspectOffering(offering)">
|
|
2230
|
+
<val-christianity-card [card]="offeringRenderCard(offering)" variant="list"></val-christianity-card>
|
|
2231
|
+
</button>
|
|
2232
|
+
<div>
|
|
2233
|
+
<strong>{{ offering.ready ? t('christianityOfferingReady') : t('christianityOfferingExhausted') }}</strong>
|
|
2234
|
+
<p>{{ offeringAbilityText(offering) }}</p>
|
|
2235
|
+
@if (offering.abilityName) {
|
|
2236
|
+
<button
|
|
2237
|
+
type="button"
|
|
2238
|
+
[disabled]="!canUseOfferingAbility(offering, offeringsSeat()!)"
|
|
2239
|
+
(click)="useOfferingAbility(offering, offeringsSeat()!)"
|
|
2240
|
+
>
|
|
2241
|
+
{{ t('christianityUseAbility') }}
|
|
2242
|
+
</button>
|
|
2243
|
+
}
|
|
2244
|
+
</div>
|
|
2245
|
+
</article>
|
|
2246
|
+
}
|
|
2247
|
+
</div>
|
|
2248
|
+
</section>
|
|
2249
|
+
}
|
|
2250
|
+
</main>
|
|
2251
|
+
`, styles: [":host{--christianity-theme-ink: var(--val-text-color, #1f2933);--christianity-theme-surface: #ffffff;--christianity-theme-parchment: #fffaf0;--christianity-theme-olive: #5f6f2a;--christianity-theme-gold: #d6a21d;--christianity-theme-gold-soft: rgba(214, 162, 29, .18);--christianity-theme-gold-ring: rgba(214, 162, 29, .48);--christianity-theme-glow: rgba(245, 199, 85, .32);--christianity-theme-focus: #2563eb;--christianity-theme-shadow: rgba(82, 64, 28, .18);--christianity-theme-shadow-strong: rgba(82, 64, 28, .3);--christianity-card-aspect: 5 / 7.45;--christianity-card-back: linear-gradient(135deg, rgba(16, 42, 67, .16), rgba(16, 42, 67, .03)), repeating-linear-gradient(45deg, #dbeafe 0 .33rem, #ffffff .33rem .66rem);--christianity-card-back-soft: linear-gradient(135deg, rgba(16, 42, 67, .11), rgba(16, 42, 67, .02)), repeating-linear-gradient(45deg, #dbeafe 0 .33rem, #ffffff .33rem .66rem);display:block;max-width:100%;min-width:0;overflow-x:clip;color:var(--christianity-theme-ink)}.christianity-shell{box-sizing:border-box;display:grid;gap:.65rem;width:100%;max-width:100%;min-width:0;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb;overflow-x:clip;overflow-y:visible}.christianity-header,.christianity-match-strip,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-match-player strong,.christianity-match-player small,.christianity-scoreboard span,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header-actions{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;min-width:0}.christianity-gallery-open{min-height:2.2rem;padding:0 .75rem;border:1px solid rgba(214,162,29,.38);border-radius:999px;background:linear-gradient(180deg,#fffaf0fa,#fffffffa),radial-gradient(circle at 20% 0%,rgba(214,162,29,.18),transparent 42%);color:var(--christianity-theme-ink);font:inherit;font-size:.82rem;font-weight:800;box-shadow:0 .55rem 1.2rem #52401c1a}.christianity-splash,.christianity-start{min-height:min(34rem,calc(100dvh - 8rem));border:1px solid rgba(214,162,29,.2);border-radius:.9rem;background:radial-gradient(circle at 50% 18%,rgba(245,199,85,.2),transparent 22rem),linear-gradient(180deg,#fffaf0eb,#fffffff5),var(--christianity-card-back-soft);box-shadow:0 1.2rem 3.2rem #52401c1f}.christianity-splash{display:grid;place-items:center;align-content:center;gap:1.2rem;padding:2.5rem 1.25rem;text-align:center}.christianity-splash__mark{position:relative;width:6.4rem;height:8.9rem;filter:drop-shadow(0 1rem 1.8rem rgba(82,64,28,.18))}.christianity-splash__mark i{position:absolute;inset:0;border:1px solid rgba(36,48,68,.16);border-radius:.7rem;background:radial-gradient(circle at 76% 12%,rgba(250,204,21,.9) 0 .42rem,transparent .45rem),linear-gradient(180deg,#fffffffa,#f8fafcfa)}.christianity-splash__mark i:nth-child(1){transform:translate(-1.1rem) rotate(-9deg)}.christianity-splash__mark i:nth-child(2){transform:translateY(-.32rem)}.christianity-splash__mark i:nth-child(3){transform:translate(1.1rem) rotate(9deg)}.christianity-splash__mark:after{content:\"\";position:absolute;inset:2.1rem 1.05rem 2.5rem;border-radius:.55rem;background:radial-gradient(circle at 50% 44%,rgba(245,199,85,.7),transparent 36%),linear-gradient(135deg,#5f6f2a33,#5f6f2a14)}.christianity-splash span,.christianity-start__copy span{color:var(--christianity-theme-olive);font-size:.76rem;font-weight:900;text-transform:uppercase}.christianity-splash h2,.christianity-start h2,.christianity-start p{margin:0}.christianity-splash h2{margin-top:.2rem;font-size:clamp(1.65rem,7vw,2.7rem);line-height:1}.christianity-splash p{max-width:26rem;margin:.55rem auto 0;color:#1f2933ad;font-size:.96rem}.christianity-start{display:grid;align-content:center;gap:1rem;padding:clamp(1rem,4vw,2.2rem)}.christianity-start__hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,18rem);gap:1rem;align-items:center}.christianity-start__copy{display:grid;gap:.45rem;max-width:36rem}.christianity-start h2{font-size:clamp(1.6rem,6vw,2.5rem);line-height:1.02}.christianity-start__copy p,.christianity-start__cards p,.christianity-start__modes p{color:#1f2933ad;line-height:1.42}.christianity-start__fan{position:relative;display:grid;place-items:center;min-height:13rem;overflow:visible}.christianity-start__fan val-christianity-card{position:absolute;width:clamp(5.7rem,12vw,7.2rem);transform-origin:50% 92%;filter:drop-shadow(0 1rem 1.5rem rgba(82,64,28,.18))}.christianity-start__cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}.christianity-start__cards article,.christianity-start__modes article{display:grid;gap:.65rem;align-content:start;padding:.95rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#ffffffd1;box-shadow:0 .75rem 1.7rem #52401c14}.christianity-start__cards article{min-height:11rem}.christianity-start__cards strong{font-size:1.05rem}.christianity-start__status{display:flex;flex-wrap:wrap;gap:.45rem}.christianity-start__status span,.christianity-start__modes article>span{display:inline-flex;align-items:center;width:fit-content;min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(214,162,29,.26);border-radius:999px;background:#fffaf0e0;color:#1f2933b8;font-size:.75rem;font-weight:850}.christianity-start__modes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.55rem}.christianity-start__modes article{min-height:8.5rem;background:#f8fafcb8;box-shadow:none;opacity:.82}.christianity-start__modes strong{font-size:.92rem}.christianity-start__modes p{margin:0;font-size:.8rem}.christianity-primary-action,.christianity-secondary-action{justify-self:start;min-height:2.5rem;padding:0 .9rem;border-radius:999px;font:inherit;font-weight:900}.christianity-primary-action{border:1px solid rgba(16,42,67,.16);background:#102a43;color:#fff}.christianity-secondary-action{border:1px solid rgba(214,162,29,.38);background:var(--christianity-theme-parchment);color:var(--christianity-theme-ink)}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-match-strip{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);padding:.45rem;border:1px solid rgba(36,48,68,.1);border-radius:.75rem;background:#fff}.christianity-match-player{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.5rem;align-items:center;min-width:0}.christianity-match-player--opponent{direction:rtl}.christianity-match-player--opponent div{direction:ltr;text-align:right}.christianity-match-player div{display:grid;min-width:0}.christianity-match-player strong,.christianity-match-player small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-match-player small,.christianity-scoreboard span{color:#1f293394;font-size:.72rem}.christianity-scoreboard{display:grid;justify-items:center;min-width:4.2rem;padding:0 .55rem;border-right:1px solid rgba(36,48,68,.1);border-left:1px solid rgba(36,48,68,.1)}.christianity-scoreboard strong{font-size:1.2rem;line-height:1}.christianity-table{box-sizing:border-box;display:grid;gap:.45rem;width:100%;max-width:100%;min-width:0;padding:.45rem .35rem;border-radius:.75rem;background:#dceafb;overflow-x:clip;overflow-y:visible}.christianity-player-side{box-sizing:border-box;display:grid;gap:.35rem;width:100%;max-width:100%;min-width:0;padding:.35rem .3rem;border-radius:.7rem;background:#ffffff57;grid-template-rows:minmax(7rem,1fr) auto;min-height:13.75rem}.christianity-player-side--opponent{grid-template-rows:auto minmax(7rem,1fr)}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{--christianity-battle-card-width: clamp(4.8rem, 15vw, 6.6rem);box-sizing:border-box;display:grid;grid-template-columns:repeat(4,var(--christianity-battle-card-width));gap:.5rem;align-items:center;justify-content:center;width:100%;max-width:100%;min-width:0;min-height:clamp(9.1rem,29vw,11rem);padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2;transition:background .16s ease,box-shadow .16s ease}.christianity-battle-zone.is-placing-card{background:linear-gradient(180deg,#fffaf0f5,#ffffffd6),#ffffffc2;box-shadow:inset 0 0 0 .14rem var(--christianity-theme-gold-soft),0 .8rem 1.7rem #5f6f2a1f}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:var(--christianity-theme-gold);box-shadow:0 0 0 .18rem var(--christianity-theme-gold-soft),0 .85rem 1.4rem var(--christianity-theme-shadow)}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{display:grid;place-items:center;justify-self:center;width:var(--christianity-battle-card-width);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73;color:inherit;font:inherit}.christianity-slot--play-target{position:relative;border-color:var(--christianity-theme-gold-ring);background:linear-gradient(180deg,#fffaf0eb,#f8fafcd1),#ffffffb3;color:#5d4305;font-weight:800;overflow:hidden;box-shadow:inset 0 0 0 .12rem #d6a21d33,0 .7rem 1.25rem var(--christianity-theme-shadow);animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-slot--play-target:before{content:\"\";position:absolute;inset:.35rem;border:1px solid rgba(214,162,29,.22);border-radius:.4rem;background:linear-gradient(135deg,rgba(214,162,29,.1),transparent 46%),radial-gradient(circle at 50% 42%,var(--christianity-theme-glow),transparent 58%)}.christianity-slot--play-target span{position:relative;z-index:2;padding:.16rem .44rem;border-radius:999px;background:#ffffffc7;font-size:.78rem}@keyframes christianity-target-pulse{0%,to{box-shadow:inset 0 0 0 .12rem #d6a21d33,0 .7rem 1.25rem var(--christianity-theme-shadow)}50%{box-shadow:inset 0 0 0 .16rem #d6a21d57,0 .9rem 1.65rem var(--christianity-theme-shadow-strong)}}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}.christianity-hand-fan{position:relative;display:flex;justify-content:center;min-height:10.8rem;padding:.25rem .25rem 2.1rem;isolation:isolate;overflow:visible}.christianity-hand-shelf{position:relative;display:grid;z-index:12;min-height:12rem;margin-top:-1.15rem;padding:1.45rem .25rem 1rem;overflow:visible}.christianity-hand-shelf--opponent{z-index:8;min-height:6.85rem;margin-top:0;margin-bottom:0;padding:.45rem .25rem .85rem}.christianity-hand-fan--opponent{min-height:5.9rem;padding-bottom:.75rem;align-items:start}.christianity-hand-fan--opponent .christianity-card-frame--back{width:clamp(3.7rem,12vw,4.9rem);margin-inline:-.9rem;transform-origin:50% 120%}.christianity-hand-fan--opponent .christianity-card-frame--back:first-child{margin-left:0}.christianity-hand-fan--opponent .christianity-card-frame--back:last-child{margin-right:0}.christianity-card-preview-card,.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile,.christianity-end-turn{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card-preview-card{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:.28rem;align-content:stretch;width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);padding:.48rem;text-align:left;transform-origin:50% 115%;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;box-shadow:0 .5rem 1.25rem #2430441a}.christianity-render-card-button{display:block;padding:0;overflow:visible;border:0;background:transparent;box-shadow:none}.christianity-render-card-button>val-christianity-card{display:block;width:100%;height:100%}.christianity-card-preview-card--hand.christianity-render-card-button,.christianity-card-preview-card--battle.christianity-render-card-button,.christianity-leader-card.christianity-render-card-button{aspect-ratio:var(--christianity-card-aspect)}.christianity-card-preview-card--hand.christianity-render-card-button:hover val-christianity-card,.christianity-card-preview-card--hand.christianity-render-card-button.is-selected val-christianity-card,.christianity-card-preview-card--battle.christianity-render-card-button.is-selected val-christianity-card,.christianity-card-preview-card--battle.christianity-render-card-button.is-target val-christianity-card,.christianity-leader-card.christianity-render-card-button.is-target val-christianity-card{filter:drop-shadow(0 0 .55rem rgba(214,162,29,.35))}.christianity-card-preview-card--battle.christianity-render-card-button.is-ready-attacker val-christianity-card{filter:drop-shadow(0 .45rem .8rem rgba(95,111,42,.16))}.christianity-card-preview-card--battle.christianity-render-card-button.is-selected{transform:translateY(-.28rem)}.christianity-card-frame{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:.28rem;align-content:stretch;overflow:hidden;padding:.48rem;text-align:left;background:linear-gradient(180deg,#fffffffa,#f8fafcfa),radial-gradient(circle at 15% 0%,rgba(214,162,29,.12),transparent 44%);box-shadow:0 .5rem 1.25rem #2430441a,inset 0 0 0 .18rem #ffffff9e}.christianity-card-frame-header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.16rem;align-items:start;min-width:0}.christianity-card-frame-header small{grid-column:1;min-width:0;overflow:hidden;color:#1f2933a3;font-size:clamp(.52rem,1.5vw,.68rem);line-height:1;text-overflow:ellipsis;white-space:nowrap}.christianity-card-frame-header strong{grid-column:1;justify-self:start;align-self:start;min-width:0;padding:0;overflow:hidden;border-radius:0;background:transparent;font-size:clamp(.82rem,2.5vw,1.05rem);line-height:1.02;text-overflow:ellipsis;white-space:nowrap}.christianity-card-preview-card--hand .christianity-card-frame-header strong,.christianity-card-preview-card--battle .christianity-card-frame-header strong,.christianity-leader-card .christianity-card-frame-header strong{display:-webkit-box;overflow-wrap:anywhere;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.christianity-card-preview-card--hand .christianity-card-frame-header small{text-transform:uppercase}.christianity-card-preview-card--hand .christianity-card-frame-art>span{display:-webkit-box;max-width:88%;overflow-wrap:anywhere;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.christianity-card-frame-header span{grid-column:2;grid-row:1 / span 2;display:grid;place-items:center;min-width:1.3rem;height:1.3rem;padding:0 .22rem;border-radius:999px;background:#ffd91a;color:#243044;font-size:.8rem;font-weight:900;line-height:1;box-shadow:inset 0 -.08rem #52401c2e}.christianity-card-frame-header span.is-offering-pips,.christianity-full-card-cost.is-offering-pips,.christianity-offering-card span.is-offering-pips{grid-auto-flow:column;gap:.14rem;min-width:auto;padding:0 .28rem}.christianity-card-frame-header span.is-offering-pips i,.christianity-full-card-cost.is-offering-pips i,.christianity-offering-card span.is-offering-pips i,.christianity-full-card-pips i{display:block;width:.72rem;height:.72rem;border-radius:999px;background:radial-gradient(circle at 34% 28%,rgba(255,255,255,.9) 0 .12rem,transparent .13rem),#ffd91a;box-shadow:inset 0 -.08rem #52401c2e,0 .12rem .24rem #102a431a}.christianity-card-frame-art{position:relative;display:grid;place-items:center;min-height:0;overflow:hidden;border-radius:.36rem;background:linear-gradient(135deg,#5f6f2a2e,#d6a21d24),radial-gradient(circle at 50% 18%,rgba(255,255,255,.72),transparent 48%),#dbe7ef;box-shadow:inset 0 0 0 1px #24304414}.christianity-card-frame-art>span{max-width:78%;overflow:hidden;color:#2430447a;font-size:clamp(.82rem,2.2vw,1.05rem);font-weight:900;line-height:1.02;text-align:center;text-overflow:ellipsis}.christianity-card-frame-art small{position:absolute;right:0;bottom:.28rem;max-width:78%;padding:.1rem .34rem;overflow:hidden;border-radius:999px 0 0 999px;background:#ffffffe6;color:#1f2933a8;font-size:.48rem;font-style:italic;font-weight:900;line-height:1;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.christianity-card-frame-effect{display:grid;align-content:center;gap:.1rem;min-height:1.45rem;padding:.24rem;overflow:hidden;border-radius:.34rem;background:radial-gradient(circle at 50% 70%,rgba(36,48,68,.06),transparent 44%),#ffffffdb}.christianity-card-frame-effect strong{justify-self:end;align-self:end;padding:.12rem .32rem;border-radius:999px;background:#edf2f7;font-size:clamp(.66rem,2vw,.82rem);line-height:1.05}.christianity-card-frame-effect p{margin:0;overflow:hidden;color:#1f2933b8;font-size:.58rem;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}.christianity-card-frame-footer{display:flex;justify-content:space-between;gap:.22rem;color:#1f293385;font-size:.46rem;font-weight:800;line-height:1}.christianity-card-frame--battle{gap:.22rem;padding:.42rem}.christianity-card-frame--battle .christianity-card-frame-art{min-height:2.6rem}.christianity-card-frame--leader .christianity-card-frame-art{background:linear-gradient(135deg,#2563eb24,#d6a21d29),radial-gradient(circle at 50% 18%,rgba(255,255,255,.78),transparent 48%),#e7eef8}.christianity-card-frame--list{width:clamp(4.4rem,22vw,5.8rem);padding:.38rem}.christianity-card-frame--list .christianity-card-frame-art{min-height:2.5rem}.christianity-hand-card-wrap{position:relative;display:grid;justify-items:center;flex:0 0 auto;margin-inline:-.42rem;padding-bottom:2rem;transform-origin:50% 115%;transition:transform .16s ease,filter .16s ease}.christianity-hand-card-wrap:hover,.christianity-hand-card-wrap.is-selected,.christianity-hand-card-wrap.is-dragging{z-index:3}.christianity-hand-card-wrap:hover .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-selected .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-dragging .christianity-card-preview-card--hand{border-color:var(--christianity-theme-gold);box-shadow:0 0 0 .12rem var(--christianity-theme-gold-soft),0 1rem 2rem var(--christianity-theme-shadow)}.christianity-card-preview-card--hand{touch-action:none}.christianity-card-preview-card--hand.cdk-drag-disabled{cursor:not-allowed}.christianity-card-preview-card.cdk-drag-preview{width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border:1px solid var(--christianity-theme-gold-ring);box-shadow:0 0 0 .16rem #fff4c2ad,0 1.5rem 3rem var(--christianity-theme-shadow-strong);transform:rotate(2deg) scale(1.03)}.christianity-card-preview-card.cdk-drag-placeholder{width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);opacity:.22}.christianity-slot.cdk-drop-list-dragging,.christianity-offering-pile.cdk-drop-list-dragging{border-color:var(--christianity-theme-gold-ring)}.christianity-slot.cdk-drop-list-receiving,.christianity-offering-pile.cdk-drop-list-receiving{box-shadow:inset 0 0 0 .18rem #d6a21d57,0 1rem 1.9rem var(--christianity-theme-shadow-strong)}.christianity-card-eye{position:absolute;right:50%;bottom:.38rem;width:2.15rem;height:1.55rem;border:1px solid color-mix(in srgb,var(--christianity-theme-focus) 52%,transparent);border-radius:999px;background:#fffffff0;box-shadow:0 .55rem 1.1rem #102a4324;opacity:0;transform:translate(50%,-.2rem) scale(.92);transition:opacity .14s ease,transform .14s ease,border-color .14s ease}.christianity-card-eye:before{content:\"\";position:absolute;top:50%;left:50%;width:1.1rem;height:1.1rem;border:.12rem solid var(--christianity-theme-focus);border-radius:82% 0;background:#fffffff0;transform:translate(-50%,-50%) rotate(45deg)}.christianity-card-eye:after{content:\"\";position:absolute;top:50%;left:50%;width:.42rem;height:.42rem;border:.09rem solid rgba(255,255,255,.95);border-radius:999px;background:radial-gradient(circle at 35% 32%,#ffffff 0 .06rem,transparent .07rem),var(--christianity-theme-focus);transform:translate(-50%,-50%)}.christianity-hand-card-wrap:hover .christianity-card-eye,.christianity-hand-card-wrap.is-selected .christianity-card-eye,.christianity-card-eye:focus-visible{opacity:1;transform:translate(50%) scale(1)}.christianity-offering-pile.is-play-target{border-color:var(--christianity-theme-gold-ring);background:linear-gradient(180deg,#fffaf0f5,#fffffff0),radial-gradient(circle at 82% 14%,rgba(250,204,21,.28) 0 .7rem,transparent .72rem);box-shadow:inset 0 0 0 .12rem #d6a21d3d,0 .8rem 1.55rem var(--christianity-theme-shadow);animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-card-frame--back,.christianity-card-preview-card--back{width:clamp(4rem,14vw,5.7rem);min-height:0;aspect-ratio:var(--christianity-card-aspect);place-items:center;padding:.55rem;overflow:hidden;box-shadow:0 .8rem 1.55rem #24304424;transform-origin:50% -18%;background:var(--christianity-card-back)}.christianity-card-frame--back:before,.christianity-card-preview-card--back:before{content:\"\";position:absolute;inset:.5rem;border:1px solid rgba(16,42,67,.12);border-radius:.38rem;background:linear-gradient(180deg,#ffffff2e,#ffffff0a);box-shadow:inset 0 0 0 .12rem #ffffff1f}.christianity-card-preview-card--battle{justify-self:center;width:var(--christianity-battle-card-width);min-width:0;height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);margin-inline:0}.christianity-card-preview-card>span,.christianity-card-mini>span,.christianity-offering-pile>span,.christianity-offering-card>span,.christianity-leader-card>span,.christianity-zone-card>span,.christianity-zone-pile>span{position:relative;z-index:2;align-self:start;font-weight:700;line-height:1.05}.christianity-card-preview-card>strong,.christianity-card-mini>strong,.christianity-offering-pile>strong,.christianity-offering-card>strong,.christianity-leader-card>strong,.christianity-zone-card>strong,.christianity-zone-pile>strong{position:relative;z-index:3;justify-self:end;align-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{box-sizing:border-box;display:grid;grid-template-columns:minmax(5.9rem,7rem) minmax(5rem,1fr) minmax(4.2rem,7rem);gap:.45rem;align-items:end;justify-items:stretch;width:100%;max-width:100%;min-width:0}.christianity-player-rack--opponent{align-items:start}.christianity-hand-meter{position:absolute;top:0;right:.35rem;z-index:4;display:inline-grid;grid-auto-flow:column;gap:.25rem;align-items:center;min-height:1.7rem;padding:.18rem .46rem;border:1px solid rgba(36,48,68,.12);border-radius:999px;background:#ffffffe6;box-shadow:0 .35rem .8rem #102a4314}.christianity-hand-meter--opponent{top:.15rem}.christianity-hand-meter span{color:#1f293394;font-size:.68rem}.christianity-hand-meter strong{font-size:.86rem}.christianity-player-badge,.christianity-player-command{display:grid;gap:.35rem;justify-items:center;min-width:0}.christianity-player-badge{align-content:start;color:#1f2933c2;font-size:.74rem}.christianity-player-badge--opponent{justify-self:center;grid-auto-flow:column;align-items:center;justify-content:center}.christianity-player-badge strong{max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-avatar{display:grid;place-items:center;width:1.85rem;height:1.85rem;border-radius:999px;color:#fff;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .9rem #102a4329}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-start;justify-self:start;width:100%}.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-frame{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;align-content:stretch}.christianity-offering-pile,.christianity-zone-card,.christianity-zone-pile{grid-template-rows:auto minmax(2.6rem,1fr) auto;align-content:stretch;gap:.32rem}.christianity-card-mini{width:3.5rem}.christianity-offering-pile{position:relative;isolation:isolate;overflow:hidden;justify-self:start;width:min(100%,5.9rem);height:7.1rem;min-height:0;max-height:7.1rem;padding:.95rem .52rem .6rem;background:linear-gradient(180deg,#fff,#f8fafc),linear-gradient(135deg,rgba(250,204,21,.18),transparent 42%)}.christianity-offering-pile>.cdk-drag-placeholder,.christianity-slot>.cdk-drag-placeholder{display:none}.christianity-offering-pile i{position:absolute;top:2.45rem;left:.72rem;z-index:-1;width:2.55rem;height:3.55rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:linear-gradient(180deg,#ffffffeb,#f1f5f9eb),radial-gradient(circle at 78% 18%,#facc15 0 .38rem,transparent .4rem);box-shadow:0 .35rem .85rem #102a431a;transform:rotate(-5deg)}.christianity-offering-pile i:nth-child(2){transform:translate(.28rem,.08rem) rotate(3deg)}.christianity-offering-pile i:nth-child(3){transform:translate(.55rem,.18rem) rotate(-1deg)}.christianity-leader-card{align-self:center;justify-self:center;width:clamp(4.75rem,17vw,6rem);min-height:0;aspect-ratio:var(--christianity-card-aspect)}.christianity-rack-spacer{display:block;min-height:1px}.christianity-battle-zone{grid-template-columns:repeat(4,var(--christianity-battle-card-width))}.christianity-shared-zone{box-sizing:border-box;display:grid;grid-template-columns:repeat(3,minmax(4.3rem,1fr));align-items:stretch;width:100%;max-width:100%;min-width:0}.christianity-zone-card,.christianity-zone-pile{min-height:6.45rem;padding:.7rem .52rem .55rem}.christianity-zone-pile{position:relative;isolation:isolate;overflow:hidden;box-shadow:inset 0 0 0 999px #ffffff1f}.christianity-zone-pile i{position:absolute;top:2.2rem;right:.72rem;z-index:-1;width:2.7rem;height:3.7rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:#f8fafc;box-shadow:0 .35rem .85rem #102a431c;transform:rotate(4deg)}.christianity-zone-pile i:nth-child(2){transform:translate(-.28rem,.12rem) rotate(-3deg)}.christianity-zone-pile i:nth-child(3){background:var(--christianity-card-back);transform:translate(-.54rem,.24rem) rotate(2deg)}.christianity-floating-card-shell{position:fixed;top:50%;left:50%;z-index:80;display:grid;gap:.55rem;width:min(26rem,calc(100vw - 1.25rem));padding-top:2.35rem;transform:translate(-50%,-50%)}.christianity-floating-card{position:relative;z-index:1;display:block;width:100%;min-height:0;padding:0;border:0;border-radius:.75rem;background:transparent;box-shadow:0 0 2.2rem var(--christianity-theme-glow);touch-action:none;transform:translate(var(--preview-shift-x, 0px),var(--preview-shift-y, 0px)) perspective(48rem) rotateX(var(--preview-rotate-x, 5deg)) rotateY(var(--preview-rotate-y, -5deg));transition:transform 90ms ease-out}.christianity-floating-card val-christianity-card{display:block;width:100%}.christianity-full-card-header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.42rem;align-items:center}.christianity-full-card-header strong{min-width:0;display:-webkit-box;overflow:hidden;overflow-wrap:anywhere;text-overflow:clip;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:clamp(1.25rem,5vw,1.85rem);line-height:1.04}.christianity-full-card-type-icon,.christianity-full-card-cost{display:grid;place-items:center;border-radius:999px}.christianity-full-card-type-icon{width:1.6rem;height:1.6rem;background:radial-gradient(circle at 50% 50%,rgba(95,111,42,.72) 0 .22rem,transparent .24rem),#2430441a}.christianity-full-card-type-icon img{width:1rem;height:1rem;object-fit:contain}.christianity-full-card-cost{min-width:2.1rem;height:2.1rem;padding:0 .36rem;background:#ffd91a;color:#243044;font-size:1.1rem;font-weight:900;box-shadow:inset 0 -.12rem #52401c2e}.christianity-full-card-art{position:relative;display:grid;place-items:center;min-height:9rem;overflow:hidden;border-radius:.48rem;background:linear-gradient(135deg,#5f6f2a33,#d6a21d29),radial-gradient(circle at 50% 25%,rgba(255,255,255,.76),transparent 42%),#dbe7ef;box-shadow:inset 0 0 0 1px #24304414}.christianity-full-card-art img{width:100%;height:100%;object-fit:cover}.christianity-full-card-art>span{max-width:80%;color:#24304494;font-size:clamp(1.1rem,5vw,1.8rem);font-weight:900;line-height:1.05;text-align:center}.christianity-full-card-art small{position:absolute;right:0;bottom:.55rem;min-width:5rem;padding:.16rem .48rem;border-radius:999px 0 0 999px;background:#ffffffe6;box-shadow:0 .3rem .8rem #102a431f;color:#1f2933bd;font-size:.68rem;font-style:italic;font-weight:900;text-align:center;text-transform:uppercase}.christianity-full-card-verse,.christianity-full-card-effect{display:grid;gap:.32rem}.christianity-full-card-verse p,.christianity-full-card-effect p{margin:0;line-height:1.25}.christianity-full-card-verse{color:#171923;font-family:Georgia,Times New Roman,serif;font-size:clamp(.72rem,2.7vw,.86rem)}.christianity-full-card-verse strong{font-family:inherit;font-size:.78rem;font-weight:900}.christianity-full-card-effect{position:relative;align-content:start;min-height:7rem;padding:.6rem .7rem;overflow:hidden;border-radius:.45rem;background:radial-gradient(circle at 50% 72%,rgba(36,48,68,.07),transparent 34%),#ffffffdb}.christianity-full-card-stats{display:flex;gap:1rem;min-height:1.35rem}.christianity-full-card-stats strong{font-size:1rem;line-height:1}.christianity-full-card-stats .christianity-full-card-pips{display:inline-grid;grid-auto-flow:column;gap:.2rem;justify-self:start;padding:0;background:transparent}.christianity-full-card-effect>div:last-of-type{display:grid;gap:.12rem}.christianity-full-card-effect>div:last-of-type strong{font-size:.82rem}.christianity-full-card-effect p{font-size:clamp(.78rem,2.9vw,.92rem)}.christianity-full-card-rarity{position:absolute;top:.62rem;right:.62rem;width:.46rem;height:.46rem;border-radius:.12rem;transform:rotate(45deg)}.christianity-full-card-rarity.is-normal{background:#d1d5db}.christianity-full-card-rarity.is-uncommon{background:#22c55e}.christianity-full-card-rarity.is-rare{background:#3b82f6}.christianity-full-card-rarity.is-legendary{background:#eab308}.christianity-full-card-footer{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;gap:.34rem;align-items:center;color:#1f2933ad;font-size:.58rem;line-height:1;text-transform:uppercase}.christianity-full-card-footer span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-floating-card-close{position:absolute;top:0;right:.15rem;z-index:4;min-height:2rem;padding:0 .6rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#ffffffe6;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .45rem 1rem #102a431a}.christianity-preview-backdrop,.christianity-history-backdrop,.christianity-info-backdrop{position:fixed;inset:0;border:0;border-radius:0;background:#0f172a75}.christianity-preview-backdrop{z-index:79}.christianity-info-backdrop{z-index:50}.christianity-info-panel{position:fixed;top:50%;left:50%;z-index:51;width:min(31rem,calc(100vw - 1.25rem));max-height:min(34rem,calc(100vh - 2rem));padding-top:2.35rem;transform:translate(-50%,-50%)}.christianity-info-close{position:absolute;top:0;right:.15rem;z-index:2}.christianity-rule-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.85rem;max-height:inherit;padding:1rem;overflow-y:auto;border:1px solid rgba(36,48,68,.14);border-radius:.9rem;background:linear-gradient(180deg,#fffffff7,#f8fafcf7),radial-gradient(circle at 8% 0%,rgba(37,99,235,.1),transparent 38%);box-shadow:0 1.2rem 2.6rem #102a433d,inset 0 0 0 .25rem #ffffff85}.christianity-rule-note-icon{display:grid;place-items:center;width:2.1rem;height:2.1rem;border-radius:999px;background:color-mix(in srgb,var(--christianity-theme-focus) 12%,#ffffff);color:var(--christianity-theme-focus);font-size:1rem;font-weight:900;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--christianity-theme-focus) 24%,transparent)}.christianity-rule-note small,.christianity-rule-note strong,.christianity-rule-note p,.christianity-rule-note h2{margin:0}.christianity-rule-note small{color:#1f29339e;font-size:.78rem;font-weight:800;text-transform:uppercase}.christianity-rule-note h2{margin-top:.18rem;font-size:clamp(1.5rem,7vw,2.2rem);line-height:1.05}.christianity-rule-note strong{display:inline-flex;width:fit-content;margin-top:.55rem;padding:.22rem .55rem;border-radius:999px;background:#edf2f7;font-size:.92rem}.christianity-rule-note p{margin-top:.75rem;color:#1f2933c7;line-height:1.45}.christianity-rule-note ul{display:grid;gap:.45rem;margin:.8rem 0 0;padding-left:1.05rem;color:#1f2933c7;line-height:1.35}.christianity-floating-card>small,.christianity-floating-card>span{color:#1f2933a3}.christianity-floating-card>strong{font-size:clamp(1.55rem,8vw,2.35rem);line-height:1.05}.christianity-floating-card>p{margin:0;align-self:end;font-size:.95rem;line-height:1.35}.christianity-preview-rule-note{position:relative;z-index:4;display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;padding:.75rem .85rem;border:1px solid rgba(36,48,68,.14);border-radius:.75rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 8% 0%,rgba(37,99,235,.08),transparent 44%);box-shadow:0 .75rem 1.6rem #102a431f}.christianity-preview-rule-note small,.christianity-preview-rule-note strong,.christianity-preview-rule-note p{margin:0}.christianity-preview-rule-note small{color:#1f293394;font-size:.68rem;font-weight:800;text-transform:uppercase}.christianity-preview-rule-note strong{display:block;margin-top:.08rem;font-size:.92rem;line-height:1.1}.christianity-preview-rule-note p{margin-top:.22rem;color:#1f2933bd;font-size:.82rem;line-height:1.32}@media (min-width: 52rem){.christianity-floating-card-shell{width:min(29rem,calc(100vw - 3rem))}.christianity-floating-card{min-height:0;padding:0}}.christianity-history-backdrop{z-index:40}.christianity-history-drawer{position:fixed;right:auto;bottom:max(.5rem,env(safe-area-inset-bottom));left:50%;z-index:41;display:grid;grid-template-rows:auto minmax(0,1fr);gap:.75rem;width:min(calc(100vw - 1rem),44rem);min-height:min(18rem,calc(100dvh - 1rem));max-height:min(32rem,calc(100dvh - 2rem));padding:.8rem;border:1px solid rgba(36,48,68,.16);border-radius:.75rem;background:#fffffffa;box-shadow:0 1.5rem 4rem #102a4347;transform:translate(-50%)}.christianity-history-drawer header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-history-drawer h2,.christianity-history-drawer p{margin:0}.christianity-history-drawer header span{display:grid;place-items:center;min-width:1.85rem;height:1.85rem;border-radius:999px;background:#edf2f7;font-weight:800}.christianity-dialog-actions{display:flex;align-items:center;gap:.45rem}.christianity-dialog-close{min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#fff;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .8rem #102a4314}.christianity-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.4rem,1fr));gap:.55rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .25rem}.christianity-history-grid::-webkit-scrollbar,.christianity-offering-list::-webkit-scrollbar{width:.65rem}.christianity-history-grid::-webkit-scrollbar-track,.christianity-offering-list::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-history-grid::-webkit-scrollbar-thumb,.christianity-offering-list::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.christianity-offerings-drawer{grid-template-rows:auto auto minmax(0,1fr);width:min(calc(100vw - 1rem),48rem);min-height:min(20rem,calc(100dvh - 1rem));max-height:min(34rem,calc(100dvh - 2rem))}.christianity-offerings-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;padding:.72rem .8rem;border:1px solid rgba(36,48,68,.12);border-radius:.7rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 8% 0%,rgba(214,162,29,.12),transparent 42%)}.christianity-offerings-note p{margin:0;color:#1f2933c2;font-size:.86rem;line-height:1.35}.christianity-offering-list{display:grid;gap:.6rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem}.christianity-offering-row{display:grid;grid-template-columns:minmax(5.4rem,6.5rem) minmax(0,1fr);gap:.65rem;align-items:center;padding:.45rem;border:1px solid rgba(36,48,68,.12);border-radius:.65rem;background:#fff}.christianity-offering-row.is-exhausted{opacity:.68}.christianity-gallery-drawer{grid-template-rows:auto auto auto minmax(0,1fr);width:min(calc(100vw - 1rem),58rem);min-height:min(25rem,calc(100dvh - 1rem));max-height:min(42rem,calc(100dvh - 2rem))}.christianity-gallery-drawer header>div:first-child{display:grid;gap:.15rem;min-width:0}.christianity-gallery-drawer header p{color:#1f293394;font-size:.82rem}.christianity-gallery-controls{display:grid;grid-template-columns:minmax(0,1fr) minmax(8.5rem,13rem);gap:.65rem}.christianity-gallery-controls label{display:grid;gap:.25rem;min-width:0;color:#1f29339e;font-size:.74rem;font-weight:800}.christianity-gallery-controls input,.christianity-gallery-controls select{width:100%;min-width:0;min-height:2.35rem;padding:0 .75rem;border:1px solid rgba(36,48,68,.16);border-radius:.65rem;background:#fff;color:var(--christianity-theme-ink);font:inherit;font-size:.9rem}.christianity-gallery-edition-strip{display:flex;gap:.45rem;overflow-x:auto;padding-bottom:.1rem}.christianity-gallery-edition-strip button{display:inline-flex;align-items:center;gap:.45rem;min-height:2.35rem;padding:0 .75rem;border:1px solid rgba(214,162,29,.38);border-radius:999px;background:var(--christianity-theme-parchment);color:var(--christianity-theme-ink);font:inherit;font-size:.82rem;font-weight:800}.christianity-gallery-edition-strip img{width:1.2rem;height:1.2rem;object-fit:contain}.christianity-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(6.4rem,1fr));gap:.65rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .35rem}.christianity-gallery-grid::-webkit-scrollbar{width:.65rem}.christianity-gallery-grid::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-gallery-grid::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.christianity-offering-card{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto;align-content:stretch;gap:.26rem;width:100%;min-height:7.7rem;padding:.58rem;overflow:hidden;text-align:left;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 78% 14%,rgba(250,204,21,.78) 0 .42rem,transparent .44rem);box-shadow:0 .45rem 1rem #102a431a}.christianity-offering-card small{min-width:0;overflow:hidden;color:#1f293394;font-size:.62rem;font-weight:800;line-height:1;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.christianity-offering-card strong{display:-webkit-box;align-self:start;min-width:0;margin-top:.1rem;overflow:hidden;overflow-wrap:anywhere;font-size:.88rem;line-height:1.05;-webkit-box-orient:vertical;-webkit-line-clamp:3}.christianity-offering-card span{position:absolute;right:.42rem;bottom:.42rem;display:grid;place-items:center;min-width:1.55rem;height:1.55rem;padding:0 .28rem;border-radius:999px;background:#edf2f7;font-size:.82rem;font-weight:900}.christianity-offering-card em{align-self:end;max-width:calc(100% - 1.9rem);overflow:hidden;color:#1f29339e;font-size:.64rem;font-style:normal;font-weight:800;line-height:1.05;text-overflow:ellipsis;white-space:nowrap}.christianity-offering-card p,.christianity-offering-row p{margin:0}.christianity-offering-card p{align-self:end;color:#1f2933a3;font-size:.72rem;line-height:1.2}.christianity-offering-row>div{display:grid;gap:.35rem;align-content:center;min-width:0}.christianity-offering-row>div p{color:#1f2933b8;font-size:.85rem;line-height:1.3}.christianity-offering-row>div button{justify-self:start;min-height:2.2rem;padding:0 .7rem;border:1px solid rgba(16,42,67,.16);border-radius:.5rem;background:#102a43;color:#fff;font:inherit;font-weight:800}.christianity-offering-row>div button:disabled{background:#e2e8f0;color:#1f293394}.christianity-history-grid .christianity-render-card-button{justify-self:center;width:min(100%,5.8rem)}.christianity-gallery-grid .christianity-render-card-button{justify-self:center;width:min(100%,6.6rem)}.christianity-offering-card.christianity-render-card-button{width:min(100%,5.8rem);min-height:0;padding:0;border:0;background:transparent;box-shadow:none}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid color-mix(in srgb,var(--christianity-theme-focus) 24%,transparent);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-match-strip{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:.35rem;padding:.35rem}.christianity-match-player{gap:.35rem}.christianity-match-player small{display:none}.christianity-header-actions{align-items:flex-end;flex-direction:column}.christianity-start__cards,.christianity-start__hero{grid-template-columns:minmax(0,1fr)}.christianity-start__fan{min-height:10.5rem}.christianity-start__fan val-christianity-card{width:clamp(5.2rem,22vw,6.4rem)}.christianity-start__modes{grid-template-columns:repeat(2,minmax(0,1fr))}.christianity-splash,.christianity-start{min-height:min(30rem,calc(100dvh - 7rem));border-right:0;border-left:0;border-radius:0}.christianity-scoreboard{min-width:3.65rem;padding:0 .35rem}.christianity-scoreboard strong{font-size:1.05rem}.christianity-table{gap:.35rem;padding-right:.25rem;padding-left:.25rem}.christianity-player-side{padding:.3rem .25rem}.christianity-battle-zone{--christianity-battle-card-width: min(5.2rem, calc((100vw - 4.25rem)/4) );grid-template-columns:repeat(4,var(--christianity-battle-card-width));justify-content:center;min-height:8.75rem;overflow-x:clip}.christianity-hand-fan{min-height:11.45rem;padding-bottom:2rem;overflow:visible}.christianity-hand-shelf{min-height:12.65rem;margin-top:-1rem;padding-top:1.35rem;padding-bottom:.9rem}.christianity-hand-shelf--opponent{min-height:6.65rem;margin-top:0;margin-bottom:0;padding-top:.4rem;padding-bottom:.85rem}.christianity-player-rack{grid-template-columns:minmax(4.5rem,5.7rem) minmax(4.4rem,1fr) minmax(3.5rem,4.8rem)}.christianity-shared-zone{gap:.45rem;grid-template-columns:repeat(3,minmax(0,1fr))}.christianity-zone-card,.christianity-zone-pile{min-height:6.15rem;padding:.58rem .46rem .5rem;gap:.24rem}.christianity-zone-pile i{top:2rem;right:.52rem;width:2.35rem;height:3.25rem}.christianity-offering-pile{height:6.85rem;min-height:0;max-height:6.85rem;padding:.88rem .46rem .55rem;gap:.24rem}.christianity-offering-pile i{top:2.25rem;left:.56rem;width:2.35rem;height:3.25rem}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);height:auto;min-height:0}.christianity-leader-card{width:clamp(4.55rem,20vw,5.7rem);min-height:0}.christianity-offering-row{grid-template-columns:minmax(5rem,5.8rem) minmax(0,1fr);gap:.5rem}.christianity-gallery-controls{grid-template-columns:minmax(0,1fr)}.christianity-gallery-grid{grid-template-columns:repeat(auto-fill,minmax(5.7rem,1fr))}.christianity-offering-card{min-height:7.25rem;padding:.5rem}.christianity-hand-fan--opponent{min-height:5.75rem;padding-bottom:.7rem}.christianity-hand-fan--opponent .christianity-card-frame--back{width:clamp(3.35rem,15vw,4.25rem);margin-inline:-.72rem}}\n"] }]
|
|
2252
|
+
}], ctorParameters: () => [] });
|
|
2253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyaXN0aWFuaXR5LWdhbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9taW5pLWdhbWVzL2NocmlzdGlhbml0eS1nYW1lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSx5QkFBeUIsRUFBMkQsTUFBTSwrQkFBK0IsQ0FBQztBQUNuSSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBbUVwRCxNQUFNLG1CQUFtQixHQUFHLHNEQUFzRCxDQUFDO0FBQ25GLE1BQU0sZ0JBQWdCLEdBQUcsNENBQTRDLENBQUM7QUFDdEUsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFDcEMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7QUFDbEMsTUFBTSxzQkFBc0IsR0FBRyxHQUFHLENBQUM7QUFFbkMsTUFBTSxhQUFhLEdBQStDO0lBQ2hFLFFBQVEsRUFBRTtRQUNSLEVBQUUsRUFBRSxVQUFVO1FBQ2QsSUFBSSxFQUFFLGdCQUFnQjtRQUN0QixJQUFJLEVBQUUsVUFBVTtRQUNoQixJQUFJLEVBQUUsQ0FBQztRQUNQLE1BQU0sRUFBRSxDQUFDO1FBQ1QsSUFBSSxFQUFFLENBQUM7UUFDUCxTQUFTLEVBQUUsd0VBQXdFO1FBQ25GLFNBQVMsRUFBRSxhQUFhO1FBQ3hCLE9BQU8sRUFBRSxLQUFLO1FBQ2Qs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QUUsb0JBQW9CLDZEQUFFLHlCQUF5Qjs7NEZBbTZGcEUseUJBQXlCO2tCQXQ2RnJDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUseUJBQXlCLENBQUMsWUFDdEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNmZUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENka0RyYWcsIENka0RyYWdEcm9wLCBDZGtEcm9wTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuXG5pbXBvcnQgeyBMaWdodFJpcHBsZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvbGlnaHQtcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgQ2hyaXN0aWFuaXR5Q2FyZENvbXBvbmVudCwgQ2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsLCBDaHJpc3RpYW5pdHlDYXJkUmVuZGVyVHlwZSB9IGZyb20gJy4vY2hyaXN0aWFuaXR5LWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IE1JTklfR0FNRVNfSTE4TiB9IGZyb20gJy4vbWluaS1nYW1lcy5pMThuJztcbmltcG9ydCB7XG4gIENocmlzdGlhbml0eUNhcmRCaWJsZVJlZmVyZW5jZSxcbiAgQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sXG4gIENocmlzdGlhbml0eUNhcmRUcmFuc2xhdGlvbixcbiAgQ2hyaXN0aWFuaXR5Q2FyZFR5cGUsXG4gIENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlLFxuICBDaHJpc3RpYW5pdHlHYW1lU3RhdGUsXG4gIENocmlzdGlhbml0eU9mZmVyaW5nSW5zdGFuY2UsXG4gIENocmlzdGlhbml0eVBsYXllclN0YXRlLFxuICBDaHJpc3RpYW5pdHlTZWF0LFxufSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIENocmlzdGlhbml0eUNhcmRQcmV2aWV3IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZXllYnJvdzogc3RyaW5nO1xuICBtZXRhOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY2FyZElkPzogc3RyaW5nO1xuICBzb3VyY2U/OiAnaGFuZCcgfCAnYm9hcmQnIHwgJ3BpbGUnO1xufVxuXG5pbnRlcmZhY2UgQ2hyaXN0aWFuaXR5SW5mb1BhbmVsIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgZXllYnJvdzogc3RyaW5nO1xuICBtZXRhOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgZmFjdHM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgQ2hyaXN0aWFuaXR5UHJldmlld1J1bGUge1xuICB0aXRsZTogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDaHJpc3RpYW5pdHlQcmV2aWV3VGlsdCB7XG4gIHJvdGF0ZVg6IG51bWJlcjtcbiAgcm90YXRlWTogbnVtYmVyO1xuICBzaGlmdFg6IG51bWJlcjtcbiAgc2hpZnRZOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBDaHJpc3RpYW5pdHlSZXNvbHZlZENhcmRUZXh0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBmdWxsTmFtZT86IHN0cmluZztcbiAgdmVyc2VUZXh0Pzogc3RyaW5nO1xuICBzY3JpcHR1cmU/OiBzdHJpbmc7XG4gIGFiaWxpdHlOYW1lPzogc3RyaW5nO1xuICBhYmlsaXR5VGV4dD86IHN0cmluZztcbiAgYWJpbGl0aWVzPzogQ2hyaXN0aWFuaXR5Q2FyZFRyYW5zbGF0aW9uWydhYmlsaXRpZXMnXTtcbn1cblxuaW50ZXJmYWNlIENocmlzdGlhbml0eUVkaXRpb25DYXRhbG9nIHtcbiAgZWRpdGlvbj86IHtcbiAgICBpZD86IHN0cmluZztcbiAgICBudW1iZXI/OiBudW1iZXI7XG4gICAgc2x1Zz86IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIGljb24/OiBzdHJpbmc7XG4gIH07XG4gIGNhcmRzPzogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb25bXTtcbn1cblxudHlwZSBDaHJpc3RpYW5pdHlHYWxsZXJ5VHlwZUZpbHRlciA9ICdhbGwnIHwgQ2hyaXN0aWFuaXR5Q2FyZFR5cGU7XG50eXBlIENocmlzdGlhbml0eVNjcmVlbiA9ICdzcGxhc2gnIHwgJ2hvbWUnIHwgJ3RhYmxlJztcbnR5cGUgQ2hyaXN0aWFuaXR5Q2F0YWxvZ0xvYWRTdGF0ZSA9ICdsb2FkaW5nJyB8ICdyZWFkeScgfCAnZmFsbGJhY2snO1xuXG5jb25zdCBHRU5FU0lTX0NBVEFMT0dfVVJMID0gJ2Fzc2V0cy9nYW1lcy9jaHJpc3RpYW5pdHkvZGF0YS8wMS1nZW5lc2lzLmNhcmRzLmpzb24nO1xuY29uc3QgR0VORVNJU19JQ09OX1VSTCA9ICdhc3NldHMvZ2FtZXMvY2hyaXN0aWFuaXR5L2ljb25zLzEtaWNvbi5wbmcnO1xuY29uc3QgVFVUT1JJQUxfQ0hBUkFDVEVSX0xJTUlUID0gMTI7XG5jb25zdCBUVVRPUklBTF9PRkZFUklOR19MSU1JVCA9IDY7XG5jb25zdCBTUExBU0hfTUlOX0RVUkFUSU9OX01TID0gNzIwO1xuXG5jb25zdCBTVEFSVEVSX0NBUkRTOiBSZWNvcmQ8c3RyaW5nLCBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbj4gPSB7XG4gIG9fc2ltcGxlOiB7XG4gICAgaWQ6ICdvX3NpbXBsZScsXG4gICAgbmFtZTogJ09mcmVuZGEgc2ltcGxlJyxcbiAgICB0eXBlOiAnb2ZmZXJpbmcnLFxuICAgIGNvc3Q6IDAsXG4gICAgYXR0YWNrOiAwLFxuICAgIGxpZmU6IDEsXG4gICAgdmVyc2VUZXh0OiAnVW5hIG9mcmVuZGEgc2VuY2lsbGEgcXVlZGEgbGlzdGEgcGFyYSBzb3N0ZW5lciB0dXMgc2lndWllbnRlcyBqdWdhZGFzLicsXG4gICAgc2NyaXB0dXJlOiAnR2VuZXNpcyA0OjQnLFxuICAgIGVkaXRpb246ICdHRU4nLFxuICAgIGNvbGxlY3Rvck51bWJlcjogJzAwMS8wMjAnLFxuICAgIHllYXI6ICcyMDI2JyxcbiAgICBhdXRob3I6ICdNVlAnLFxuICAgIHJhcml0eTogJ25vcm1hbCcsXG4gIH0sXG4gIG9fZm9yYmlkZGVuOiB7XG4gICAgaWQ6ICdvX2ZvcmJpZGRlbicsXG4gICAgbmFtZTogJ0VsIGZydXRvIHByb2hpYmlkbycsXG4gICAgdHlwZTogJ29mZmVyaW5nJyxcbiAgICBjb3N0OiAwLFxuICAgIGF0dGFjazogMCxcbiAgICBsaWZlOiAyLFxuICAgIGFiaWxpdHlOYW1lOiAnQ29ub2NpbWllbnRvIGRlbCBiaWVuIHkgZGVsIG1hbCcsXG4gICAgYWJpbGl0eVRleHQ6ICdBbCB1c2FybGEsIGRpc21pbnV5ZSBlbiAxIGxvcyBwdW50b3MgZGUgdmlkYSBkZSB0dSBMw61kZXIuJyxcbiAgICBhYmlsaXR5Q29zdDogMCxcbiAgICB2ZXJzZVRleHQ6ICdEaW9zIGVsIFNlw7FvciBwdXNvIGFsIGhvbWJyZSBlbiBlbCBqYXJkw61uIGRlIEVkw6luIHBhcmEgcXVlIGxvIGxhYnJhcmEgeSBsbyBjdWlkYXJhLicsXG4gICAgc2NyaXB0dXJlOiAnR2VuZXNpcyAyOjE3IE5CVicsXG4gICAgZWRpdGlvbjogJ0dFTicsXG4gICAgY29sbGVjdG9yTnVtYmVyOiAnMDEyLzE4MCcsXG4gICAgeWVhcjogJzIwMjYnLFxuICAgIGF1dGhvcjogJ01WUCcsXG4gICAgcmFyaXR5OiAndW5jb21tb24nLFxuICB9LFxuICBwX3Njb3V0OiB7XG4gICAgaWQ6ICdwX3Njb3V0JyxcbiAgICBuYW1lOiAnU2NvdXQnLFxuICAgIHR5cGU6ICdjaGFyYWN0ZXInLFxuICAgIGNvc3Q6IDEsXG4gICAgYXR0YWNrOiAxLFxuICAgIGxpZmU6IDEsXG4gICAgdmVyc2VUZXh0OiAnVW4gZXhwbG9yYWRvciBodW1pbGRlIGFicmUgY2FtaW5vIGFudGVzIGRlIHF1ZSBsbGVndWUgbGEgYmF0YWxsYS4nLFxuICAgIHNjcmlwdHVyZTogJ0dlbmVzaXMgMTM6MTcnLFxuICAgIGVkaXRpb246ICdHRU4nLFxuICAgIGNvbGxlY3Rvck51bWJlcjogJzAwMi8wMjAnLFxuICAgIHllYXI6ICcyMDI2JyxcbiAgICBhdXRob3I6ICdNVlAnLFxuICAgIHJhcml0eTogJ25vcm1hbCcsXG4gIH0sXG4gIHBfZ3VhcmQ6IHsgaWQ6ICdwX2d1YXJkJywgbmFtZTogJ0d1YXJkJywgdHlwZTogJ2NoYXJhY3RlcicsIGNvc3Q6IDIsIGF0dGFjazogMSwgbGlmZTogMywgZWRpdGlvbjogJ0dFTicsIGNvbGxlY3Rvck51bWJlcjogJzAwMy8wMjAnLCB5ZWFyOiAnMjAyNicsIGF1dGhvcjogJ01WUCcsIHJhcml0eTogJ25vcm1hbCcgfSxcbiAgcF93YXJyaW9yOiB7IGlkOiAncF93YXJyaW9yJywgbmFtZTogJ1dhcnJpb3InLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogMiwgYXR0YWNrOiAyLCBsaWZlOiAyLCBlZGl0aW9uOiAnR0VOJywgY29sbGVjdG9yTnVtYmVyOiAnMDA0LzAyMCcsIHllYXI6ICcyMDI2JywgYXV0aG9yOiAnTVZQJywgcmFyaXR5OiAnbm9ybWFsJyB9LFxuICBwX2VsZGVyOiB7IGlkOiAncF9lbGRlcicsIG5hbWU6ICdFbGRlcicsIHR5cGU6ICdjaGFyYWN0ZXInLCBjb3N0OiAzLCBhdHRhY2s6IDIsIGxpZmU6IDQsIGVkaXRpb246ICdHRU4nLCBjb2xsZWN0b3JOdW1iZXI6ICcwMDUvMDIwJywgeWVhcjogJzIwMjYnLCBhdXRob3I6ICdNVlAnLCByYXJpdHk6ICd1bmNvbW1vbicgfSxcbiAgcF9jaGFtcGlvbjogeyBpZDogJ3BfY2hhbXBpb24nLCBuYW1lOiAnQ2hhbXBpb24nLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogNCwgYXR0YWNrOiA0LCBsaWZlOiA0LCBlZGl0aW9uOiAnR0VOJywgY29sbGVjdG9yTnVtYmVyOiAnMDA2LzAyMCcsIHllYXI6ICcyMDI2JywgYXV0aG9yOiAnTVZQJywgcmFyaXR5OiAncmFyZScgfSxcbn07XG5cbmNvbnN0IFNUQVJUSU5HX1NIQVJFRF9ERUNLID0gW1xuICAnb19zaW1wbGUnLFxuICAncF9zY291dCcsXG4gICdvX2ZvcmJpZGRlbicsXG4gICdvX3NpbXBsZScsXG4gICdwX2d1YXJkJyxcbiAgJ3Bfd2FycmlvcicsXG4gICdvX3NpbXBsZScsXG4gICdwX2VsZGVyJyxcbiAgJ3Bfc2NvdXQnLFxuICAnb19zaW1wbGUnLFxuICAncF9jaGFtcGlvbicsXG4gICdwX2d1YXJkJyxcbiAgJ29fc2ltcGxlJyxcbiAgJ3Bfd2FycmlvcicsXG4gICdwX3Njb3V0JyxcbiAgJ29fc2ltcGxlJyxcbiAgJ3BfZWxkZXInLFxuICAncF9ndWFyZCcsXG4gICdvX3NpbXBsZScsXG5dO1xuXG5jb25zdCBTVEFSVElOR19HQU1FOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUgPSB7XG4gIGdhbWVJZDogJ21vY2stY2hyaXN0aWFuaXR5JyxcbiAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnLFxuICBtb2RlOiAnbG9jYWxfcGFzcycsXG4gIHR1cm5Pd25lcjogJ1AxJyxcbiAgcmV2aXNpb246IDAsXG4gIHR1cm5Db3VudDogMSxcbiAgbWF0Y2hTY29yZTogeyBQMTogMSwgUDI6IDAgfSxcbiAgc2hhcmVkRGVjazogU1RBUlRJTkdfU0hBUkVEX0RFQ0ssXG4gIGhpc3Rvcnlab25lOiBbXSxcbiAgcGxheWVyczoge1xuICAgIFAxOiB7XG4gICAgICBzZWF0OiAnUDEnLFxuICAgICAgZGlzcGxheU5hbWU6ICdKdWdhZG9yJyxcbiAgICAgIGF2YXRhcjogJ0onLFxuICAgICAgYXZhdGFyQ29sb3I6ICcjMjU2M2ViJyxcbiAgICAgIGxlYWRlck5hbWU6ICdBZGFtJyxcbiAgICAgIGxlYWRlckhwOiAxNSxcbiAgICAgIGxlYWRlck1heEhwOiAxNSxcbiAgICAgIG9mZmVyaW5nczogW1xuICAgICAgICB7IGluc3RhbmNlSWQ6ICdwMV9vZmZlcmluZ18wMDEnLCBjYXJkSWQ6ICdvX3NpbXBsZScsIG5hbWU6ICdPZnJlbmRhIHNpbXBsZScsIG93bmVyOiAnUDEnLCByZWFkeTogdHJ1ZSwgdmFsdWU6IDEgfSxcbiAgICAgICAge1xuICAgICAgICAgIGluc3RhbmNlSWQ6ICdwMV9vZmZlcmluZ18wMDInLFxuICAgICAgICAgIGNhcmRJZDogJ29fZm9yYmlkZGVuJyxcbiAgICAgICAgICBuYW1lOiAnRWwgZnJ1dG8gcHJvaGliaWRvJyxcbiAgICAgICAgICBvd25lcjogJ1AxJyxcbiAgICAgICAgICByZWFkeTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBhYmlsaXR5TmFtZTogJ0Nvbm9jaW1pZW50byBkZWwgYmllbiB5IGRlbCBtYWwnLFxuICAgICAgICAgIGFiaWxpdHlUZXh0OiAnQWwgdXNhcmxhLCBkaXNtaW51eWUgZW4gMSBsb3MgcHVudG9zIGRlIHZpZGEgZGUgdHUgTGlkZXIuJyxcbiAgICAgICAgICBhYmlsaXR5Q29zdDogMCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBvZmZlcmluZ1BsYXllZFRoaXNUdXJuOiBmYWxzZSxcbiAgICAgIGhhbmQ6IFsnb19zaW1wbGUnLCAncF9zY291dCcsICdwX3dhcnJpb3InLCAncF9ndWFyZCddLFxuICAgICAgYmF0dGxlWm9uZTogW10sXG4gICAgfSxcbiAgICBQMjoge1xuICAgICAgc2VhdDogJ1AyJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnUml2YWwnLFxuICAgICAgYXZhdGFyOiAnUicsXG4gICAgICBhdmF0YXJDb2xvcjogJyNiNDUzMDknLFxuICAgICAgbGVhZGVyTmFtZTogJ05vYWgnLFxuICAgICAgbGVhZGVySHA6IDE1LFxuICAgICAgbGVhZGVyTWF4SHA6IDE1LFxuICAgICAgb2ZmZXJpbmdzOiBbeyBpbnN0YW5jZUlkOiAncDJfb2ZmZXJpbmdfMDAxJywgY2FyZElkOiAnb19zaW1wbGUnLCBuYW1lOiAnT2ZyZW5kYSBzaW1wbGUnLCBvd25lcjogJ1AyJywgcmVhZHk6IHRydWUsIHZhbHVlOiAxIH1dLFxuICAgICAgb2ZmZXJpbmdQbGF5ZWRUaGlzVHVybjogZmFsc2UsXG4gICAgICBoYW5kQ291bnQ6IDQsXG4gICAgICBiYXR0bGVab25lOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiAnb3BwXzAwMScsXG4gICAgICAgICAgY2FyZElkOiAncF9zY291dCcsXG4gICAgICAgICAgbmFtZTogJ1Njb3V0JyxcbiAgICAgICAgICBvd25lcjogJ1AyJyxcbiAgICAgICAgICBjb250cm9sbGVyOiAnUDInLFxuICAgICAgICAgIHNsb3Q6IDAsXG4gICAgICAgICAgYXR0YWNrOiAxLFxuICAgICAgICAgIGN1cnJlbnRIcDogMSxcbiAgICAgICAgICBtYXhIcDogMSxcbiAgICAgICAgICBjYW5BdHRhY2s6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBsb2c6IFsnUGFydGlkYSBpbmljaWFkYS4nXSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1jaHJpc3RpYW5pdHktZ2FtZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDZGtEcmFnLCBDZGtEcm9wTGlzdCwgTGlnaHRSaXBwbGVEaXJlY3RpdmUsIENocmlzdGlhbml0eUNhcmRDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxtYWluIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNoZWxsXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oZWFkZXJcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlFeWVicm93JykgfX08L3A+XG4gICAgICAgICAgPGgxPnt7IHQoJ2NocmlzdGlhbml0eVRpdGxlJykgfX08L2gxPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1oZWFkZXItYWN0aW9uc1wiPlxuICAgICAgICAgIEBpZiAoc2NyZWVuKCkgIT09ICdzcGxhc2gnKSB7XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1nYWxsZXJ5LW9wZW5cIiB2YWxMaWdodFJpcHBsZSAoY2xpY2spPVwib3BlbkdhbGxlcnkoKVwiPlxuICAgICAgICAgICAgICB7eyB0KCdjaHJpc3RpYW5pdHlHYWxsZXJ5JykgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNjcmVlbigpID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXR1cm5cIiBbY2xhc3MuaXMtb3duLXR1cm5dPVwiaXNPd25UdXJuKClcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5VHVybicpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IGN1cnJlbnRQbGF5ZXIoKS5kaXNwbGF5TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgQGlmIChzY3JlZW4oKSA9PT0gJ3NwbGFzaCcpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktc3BsYXNoXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktc3BsYXNoX19tYXJrXCI+XG4gICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eVNwbGFzaEV5ZWJyb3cnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxoMj57eyB0KCdjaHJpc3RpYW5pdHlTcGxhc2hUaXRsZScpIH19PC9oMj5cbiAgICAgICAgICAgIDxwPnt7IHNwbGFzaFN0YXR1c1RleHQoKSB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfSBAZWxzZSBpZiAoc2NyZWVuKCkgPT09ICdob21lJykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1zdGFydFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktc3RhcnRfX2hlcm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktc3RhcnRfX2NvcHlcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5R2VuZXNpc0VkaXRpb24nKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGgyPnt7IHQoJ2NocmlzdGlhbml0eVN0YXJ0VGl0bGUnKSB9fTwvaDI+XG4gICAgICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eVN0YXJ0Qm9keScpIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXN0YXJ0X19mYW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgQGZvciAoY2FyZCBvZiBzdGFydEZlYXR1cmVkQ2FyZHMoKTsgdHJhY2sgY2FyZC5pZCkge1xuICAgICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmRcbiAgICAgICAgICAgICAgICAgIFtjYXJkXT1cImRlZmluaXRpb25Ub1JlbmRlckNhcmQoY2FyZClcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImhhbmRcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJzdGFydEZlYXR1cmVkQ2FyZFRyYW5zZm9ybSgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA+PC92YWwtY2hyaXN0aWFuaXR5LWNhcmQ+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzXCI+XG4gICAgICAgICAgICA8YXJ0aWNsZT5cbiAgICAgICAgICAgICAgPHN0cm9uZz57eyB0KCdjaHJpc3RpYW5pdHlUdXRvcmlhbE1vZGUnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlUdXRvcmlhbE1vZGVCb2R5JykgfX08L3A+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXByaW1hcnktYWN0aW9uXCIgdmFsTGlnaHRSaXBwbGUgKGNsaWNrKT1cInN0YXJ0VHV0b3JpYWwoKVwiPlxuICAgICAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVN0YXJ0VHV0b3JpYWwnKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICAgIDxhcnRpY2xlPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2NocmlzdGlhbml0eUdhbGxlcnknKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlHYWxsZXJ5TW9kZUJvZHknKSB9fTwvcD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktc2Vjb25kYXJ5LWFjdGlvblwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJvcGVuR2FsbGVyeSgpXCI+XG4gICAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5T3BlbkdhbGxlcnknKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICAgIDxhcnRpY2xlPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2NocmlzdGlhbml0eUhvd1RvUGxheScpIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eUhvd1RvUGxheUJvZHknKSB9fTwvcD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktc2Vjb25kYXJ5LWFjdGlvblwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJpbnNwZWN0SG93VG9QbGF5KClcIj5cbiAgICAgICAgICAgICAgICB7eyB0KCdsZWFybk1vcmUnKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXN0YXJ0X19zdGF0dXNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eUVkaXRpb25TdGF0dXMnKVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgZ2FsbGVyeUVkaXRpb25MYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5VHV0b3JpYWxBY3RpdmUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGNhdGFsb2dTdGF0dXNMYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2Rlc1wiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5RnV0dXJlTW9kZXMnKVwiPlxuICAgICAgICAgICAgQGZvciAobW9kZSBvZiBmdXR1cmVNb2RlcygpOyB0cmFjayBtb2RlLnRpdGxlKSB7XG4gICAgICAgICAgICAgIDxhcnRpY2xlPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgbW9kZS50aXRsZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxwPnt7IG1vZGUuYm9keSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdzb29uVGl0bGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1tYXRjaC1zdHJpcFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5TWF0Y2hTY29yZScpXCI+XG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWF2YXRhclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInBsYXllcigpLmF2YXRhckNvbG9yXCI+e3sgcGxheWVyKCkuYXZhdGFyIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHBsYXllcigpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8c21hbGw+e3sgcGxheWVyTGVhZGVyRGlzcGxheU5hbWUocGxheWVyKCkpIH19IMK3IHt7IHBsYXllcigpLmxlYWRlckhwIH19L3t7IHBsYXllcigpLmxlYWRlck1heEhwIH19PC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNjb3JlYm9hcmRcIj5cbiAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlNYXRjaCcpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLm1hdGNoU2NvcmUuUDEgfX0te3sgZ2FtZSgpLm1hdGNoU2NvcmUuUDIgfX08L3N0cm9uZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBjaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyLS1vcHBvbmVudFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWF2YXRhclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIm9wcG9uZW50KCkuYXZhdGFyQ29sb3JcIj57eyBvcHBvbmVudCgpLmF2YXRhciB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHN0cm9uZz57eyBvcHBvbmVudCgpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8c21hbGw+e3sgcGxheWVyTGVhZGVyRGlzcGxheU5hbWUob3Bwb25lbnQoKSkgfX0gwrcge3sgb3Bwb25lbnQoKS5sZWFkZXJIcCB9fS97eyBvcHBvbmVudCgpLmxlYWRlck1heEhwIH19PC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kLXNoZWxmIGNocmlzdGlhbml0eS1oYW5kLXNoZWxmLS1vcHBvbmVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhhbmQtbWV0ZXIgY2hyaXN0aWFuaXR5LWhhbmQtbWV0ZXItLW9wcG9uZW50XCI+XG4gICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5SGFuZCcpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgb3Bwb25lbnRIYW5kQ291bnQoKSB9fTwvc3Ryb25nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktaGFuZC1mYW4gY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5T3Bwb25lbnRIYW5kJylcIj5cbiAgICAgICAgICBAZm9yIChfIG9mIGhpZGRlbkhhbmRDYXJkcyhvcHBvbmVudEhhbmRDb3VudCgpKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBjaHJpc3RpYW5pdHktY2FyZC1mcmFtZSBjaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmFja1wiXG4gICAgICAgICAgICAgIHZhbExpZ2h0UmlwcGxlXG4gICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiZmFuVHJhbnNmb3JtKCRpbmRleCwgb3Bwb25lbnRIYW5kQ291bnQoKSwgdHJ1ZSlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eUhpZGRlbkNhcmQnKVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXRhYmxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlUYWJsZScpXCI+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlIGNocmlzdGlhbml0eS1wbGF5ZXItc2lkZS0tb3Bwb25lbnRcIj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1wbGF5ZXItcmFjayBjaHJpc3RpYW5pdHktcGxheWVyLXJhY2stLW9wcG9uZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy16b25lXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGVcIiB2YWxMaWdodFJpcHBsZSAoY2xpY2spPVwib3Blbk9mZmVyaW5ncygnUDInKVwiPlxuICAgICAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5ncycpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcmVhZHlPZmZlcmluZ3Mob3Bwb25lbnQoKSkgfX0ve3sgdG90YWxPZmZlcmluZ3Mob3Bwb25lbnQoKSkgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkIGNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b25cIiB2YWxMaWdodFJpcHBsZSBbY2xhc3MuaXMtdGFyZ2V0XT1cInNlbGVjdGVkQXR0YWNrZXIoKSAmJiAhaGFzT3Bwb25lbnRHdWFyZHMoKVwiIChjbGljayk9XCJoYW5kbGVPcHBvbmVudExlYWRlcigpXCI+XG4gICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmQgW2NhcmRdPVwibGVhZGVyUmVuZGVyQ2FyZChvcHBvbmVudCgpKVwiIHZhcmlhbnQ9XCJ0YWJsZVwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1yYWNrLXNwYWNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1iYXR0bGUtem9uZSBjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUtLW9wcG9uZW50XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlPcHBvbmVudEJhdHRsZScpXCI+XG4gICAgICAgICAgICBAZm9yIChzbG90IG9mIGJhdHRsZVNsb3RzKCdQMicpOyB0cmFjayBzbG90LnRyYWNrSWQpIHtcbiAgICAgICAgICAgICAgQGlmIChzbG90LmNhcmQpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkIGNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlIGNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgdmFsTGlnaHRSaXBwbGVcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy10YXJnZXRdPVwic2VsZWN0ZWRBdHRhY2tlcigpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPcHBvbmVudENoYXJhY3RlcihzbG90LmNhcmQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cImNoYXJhY3RlclJlbmRlckNhcmQoc2xvdC5jYXJkKVwiIHZhcmlhbnQ9XCJ0YWJsZVwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1zbG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktc2hhcmVkLXpvbmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVNoYXJlZFpvbmUnKVwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBjaHJpc3RpYW5pdHktem9uZS1waWxlLS1oaXN0b3J5XCIgdmFsTGlnaHRSaXBwbGUgKGNsaWNrKT1cIm9wZW5IaXN0b3J5KClcIj5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eUhpc3RvcnknKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLmhpc3Rvcnlab25lLmxlbmd0aCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBjaHJpc3RpYW5pdHktem9uZS1waWxlLS1kZWNrXCIgdmFsTGlnaHRSaXBwbGUgYXJpYS1saXZlPVwicG9saXRlXCIgKGNsaWNrKT1cImluc3BlY3REZWNrKClcIj5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eURlY2snKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLnNoYXJlZERlY2subGVuZ3RoIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS16b25lLWNhcmRcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eVBsYWNlJykgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2NocmlzdGlhbml0eUVtcHR5JykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlXCI+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmVcIiBbY2xhc3MuaXMtcGxhY2luZy1jYXJkXT1cImNhblBsYWNlU2VsZWN0ZWRDaGFyYWN0ZXIoKSB8fCBpc0RyYWdnaW5nQ2hhcmFjdGVyKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVlvdXJCYXR0bGUnKVwiPlxuICAgICAgICAgICAgQGZvciAoc2xvdCBvZiBiYXR0bGVTbG90cygnUDEnKTsgdHJhY2sgc2xvdC50cmFja0lkKSB7XG4gICAgICAgICAgICAgIEBpZiAoc2xvdC5jYXJkKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZSBjaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHZhbExpZ2h0UmlwcGxlXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRBdHRhY2tlcigpPy5pbnN0YW5jZUlkID09PSBzbG90LmNhcmQuaW5zdGFuY2VJZFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZXhoYXVzdGVkXT1cIiFzbG90LmNhcmQuY2FuQXR0YWNrXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1yZWFkeS1hdHRhY2tlcl09XCJpc093blR1cm4oKSAmJiBzbG90LmNhcmQuY2FuQXR0YWNrXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RBdHRhY2tlcihzbG90LmNhcmQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cImNoYXJhY3RlclJlbmRlckNhcmQoc2xvdC5jYXJkKVwiIHZhcmlhbnQ9XCJ0YWJsZVwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNsb3RcIlxuICAgICAgICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgICAgICAgIFtpZF09XCJiYXR0bGVTbG90RHJvcElkKCRpbmRleClcIlxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCIkaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0Q29ubmVjdGVkVG9dPVwiWydjaHJpc3RpYW5pdHktaGFuZC1zb3VyY2UnXVwiXG4gICAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZV09XCJjYW5Ecm9wT25CYXR0bGVTbG90XCJcbiAgICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXRdPVwiY2FuUGxhY2VTZWxlY3RlZENoYXJhY3RlcigpIHx8IGlzRHJhZ2dpbmdDaGFyYWN0ZXIoKVwiXG4gICAgICAgICAgICAgICAgICB2YWxMaWdodFJpcHBsZVxuICAgICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wT25CYXR0bGVTbG90KCRldmVudCwgJGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGxheVNlbGVjdGVkQ2FyZCgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBAaWYgKGNhblBsYWNlU2VsZWN0ZWRDaGFyYWN0ZXIoKSB8fCBpc0RyYWdnaW5nQ2hhcmFjdGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5UGxheUhlcmUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1yYWNrXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy16b25lXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlXCJcbiAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICAgIGlkPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1kcm9wXCJcbiAgICAgICAgICAgICAgICB2YWxMaWdodFJpcHBsZVxuICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cIlsnY2hyaXN0aWFuaXR5LWhhbmQtc291cmNlJ11cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1wbGF5LXRhcmdldF09XCJjYW5QbGFjZVNlbGVjdGVkT2ZmZXJpbmcoKSB8fCBpc0RyYWdnaW5nT2ZmZXJpbmcoKVwiXG4gICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGVdPVwiY2FuRHJvcE9uT2ZmZXJpbmdzXCJcbiAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wT25PZmZlcmluZ3MoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9mZmVyaW5nUGlsZSgnUDEnKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlPZmZlcmluZ3MnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHJlYWR5T2ZmZXJpbmdzKHBsYXllcigpKSB9fS97eyB0b3RhbE9mZmVyaW5ncyhwbGF5ZXIoKSkgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkIGNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b25cIiB2YWxMaWdodFJpcHBsZSAoY2xpY2spPVwiaW5zcGVjdExlYWRlcignUDEnKVwiPlxuICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cImxlYWRlclJlbmRlckNhcmQocGxheWVyKCkpXCIgdmFyaWFudD1cInRhYmxlXCI+PC92YWwtY2hyaXN0aWFuaXR5LWNhcmQ+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxheWVyLWNvbW1hbmRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1wbGF5ZXItYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1hdmF0YXJcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJwbGF5ZXIoKS5hdmF0YXJDb2xvclwiPnt7IHBsYXllcigpLmF2YXRhciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHBsYXllcigpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktZW5kLXR1cm5cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJlbmRUdXJuKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5RW5kVHVybicpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhhbmQtc2hlbGZcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kLW1ldGVyXCI+XG4gICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5SGFuZCcpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgcGxheWVyKCkuaGFuZD8ubGVuZ3RoID8/IDAgfX08L3N0cm9uZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktaGFuZC1mYW5cIlxuICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgaWQ9XCJjaHJpc3RpYW5pdHktaGFuZC1zb3VyY2VcIlxuICAgICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImRyb3BUYXJnZXRJZHMoKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlZb3VySGFuZCcpXCJcbiAgICAgICAgICAocG9pbnRlcmxlYXZlKT1cImNsZWFySG92ZXJlZEhhbmRJbmRleCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIEBmb3IgKGNhcmRJZCBvZiBwbGF5ZXIoKS5oYW5kID8/IFtdOyB0cmFjayBjYXJkSWQgKyAkaW5kZXgpIHtcbiAgICAgICAgICAgIEBsZXQgY2FyZCA9IGNhcmREZWZpbml0aW9uKGNhcmRJZCk7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhhbmQtY2FyZC13cmFwXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkSGFuZENhcmQoKSA9PT0gY2FyZElkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLWRyYWdnaW5nXT1cImRyYWdnaW5nQ2FyZElkKCkgPT09IGNhcmRJZFwiXG4gICAgICAgICAgICAgIFtzdHlsZS56LWluZGV4XT1cImhhbmRDYXJkWkluZGV4KCRpbmRleClcIlxuICAgICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cImZhblRyYW5zZm9ybSgkaW5kZXgsIHBsYXllcigpLmhhbmQ/Lmxlbmd0aCA/PyAwLCBmYWxzZSlcIlxuICAgICAgICAgICAgICAocG9pbnRlcmVudGVyKT1cInNldEhvdmVyZWRIYW5kSW5kZXgoJGluZGV4KVwiXG4gICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCJzZXRIb3ZlcmVkSGFuZEluZGV4KCRpbmRleClcIlxuICAgICAgICAgICAgICAocG9pbnRlcnVwKT1cInJlbGVhc2VIb3ZlcmVkSGFuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkIGNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZCBjaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgdmFsTGlnaHRSaXBwbGVcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY2FyZElkXCJcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiFjYW5QbGF5KGNhcmQpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRIYW5kQ2FyZCgpID09PSBjYXJkSWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1kaXNhYmxlZF09XCIhY2FuUGxheShjYXJkKVwiXG4gICAgICAgICAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cInN0YXJ0RHJhZ2dpbmdDYXJkKGNhcmRJZClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnRW5kZWQpPVwiZW5kRHJhZ2dpbmdDYXJkKClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RIYW5kQ2FyZChjYXJkSWQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmQgW2NhcmRdPVwiZGVmaW5pdGlvblRvUmVuZGVyQ2FyZChjYXJkKVwiIHZhcmlhbnQ9XCJoYW5kXCI+PC92YWwtY2hyaXN0aWFuaXR5LWNhcmQ+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1leWVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5UHJldmlld0NhcmQnKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImluc3BlY3RIYW5kQ2FyZChjYXJkSWQsIHRydWUpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChzZWxlY3RlZFByZXZpZXcoKSkge1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1wcmV2aWV3LWJhY2tkcm9wXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlDbG9zZVByZXZpZXcnKVwiIChjbGljayk9XCJjbG9zZVByZXZpZXcoKVwiPjwvYnV0dG9uPlxuICAgICAgICA8YXNpZGVcbiAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkLXNoZWxsXCJcbiAgICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZC1jbG9zZVwiIChjbGljayk9XCJjbG9zZVByZXZpZXcoKVwiPlxuICAgICAgICAgICAge3sgdCgnY2xvc2UnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmRcIlxuICAgICAgICAgICAgW3N0eWxlLi0tcHJldmlldy1yb3RhdGUteF09XCJwcmV2aWV3VGlsdCgpLnJvdGF0ZVggKyAnZGVnJ1wiXG4gICAgICAgICAgICBbc3R5bGUuLS1wcmV2aWV3LXJvdGF0ZS15XT1cInByZXZpZXdUaWx0KCkucm90YXRlWSArICdkZWcnXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLXByZXZpZXctc2hpZnQteF09XCJwcmV2aWV3VGlsdCgpLnNoaWZ0WCArICdweCdcIlxuICAgICAgICAgICAgW3N0eWxlLi0tcHJldmlldy1zaGlmdC15XT1cInByZXZpZXdUaWx0KCkuc2hpZnRZICsgJ3B4J1wiXG4gICAgICAgICAgICAocG9pbnRlcm1vdmUpPVwidGlsdFByZXZpZXcoJGV2ZW50KVwiXG4gICAgICAgICAgICAocG9pbnRlcmxlYXZlKT1cInJlc2V0UHJldmlld1RpbHQoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChzZWxlY3RlZFByZXZpZXdSZW5kZXJDYXJkKCk7IGFzIHByZXZpZXdDYXJkKSB7XG4gICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmQgW2NhcmRdPVwicHJldmlld0NhcmRcIiB2YXJpYW50PVwiZnVsbFwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAocHJldmlld1J1bGUoKTsgYXMgcnVsZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1ydWxlLW5vdGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmk8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNtYWxsPnt7IHQoJ2NocmlzdGlhbml0eUNhcmRSdWxlJykgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcnVsZS50aXRsZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxwPnt7IHJ1bGUuYm9keSB9fTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvYXNpZGU+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2VsZWN0ZWRJbmZvKCk7IGFzIGluZm8pIHtcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktaW5mby1iYWNrZHJvcFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2xvc2UnKVwiIChjbGljayk9XCJjbG9zZUluZm8oKVwiPjwvYnV0dG9uPlxuICAgICAgICA8YXNpZGUgY2xhc3M9XCJjaHJpc3RpYW5pdHktaW5mby1wYW5lbFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWRpYWxvZy1jbG9zZSBjaHJpc3RpYW5pdHktaW5mby1jbG9zZVwiIChjbGljayk9XCJjbG9zZUluZm8oKVwiPlxuICAgICAgICAgICAge3sgdCgnY2xvc2UnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcnVsZS1ub3RlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1ydWxlLW5vdGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmk8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c21hbGw+e3sgaW5mby5leWVicm93IH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgPGgyPnt7IGluZm8udGl0bGUgfX08L2gyPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IGluZm8ubWV0YSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8cD57eyBpbmZvLmJvZHkgfX08L3A+XG4gICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICBAZm9yIChmYWN0IG9mIGluZm8uZmFjdHM7IHRyYWNrIGZhY3QpIHtcbiAgICAgICAgICAgICAgICAgIDxsaT57eyBmYWN0IH19PC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hc2lkZT5cbiAgICAgIH1cblxuICAgICAgQGlmIChzY3JlZW4oKSA9PT0gJ3RhYmxlJykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1hY3Rpb25zXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgPHA+e3sgc3RhdHVzVGV4dCgpIH19PC9wPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwic2VsZWN0ZWRBY3Rpb25EaXNhYmxlZCgpXCIgKGNsaWNrKT1cInBsYXlTZWxlY3RlZENhcmQoKVwiPlxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZEFjdGlvbkxhYmVsKCkgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0TW9jaygpXCI+XG4gICAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVJlc2V0JykgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2hvd0hpc3RvcnkoKSkge1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5LWJhY2tkcm9wXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlDbG9zZUhpc3RvcnknKVwiIChjbGljayk9XCJzaG93SGlzdG9yeS5zZXQoZmFsc2UpXCI+PC9idXR0b24+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyXCI+XG4gICAgICAgICAgPGhlYWRlcj5cbiAgICAgICAgICAgIDxoMj57eyB0KCdjaHJpc3RpYW5pdHlIaXN0b3J5JykgfX08L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1kaWFsb2ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBnYW1lKCkuaGlzdG9yeVpvbmUubGVuZ3RoIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1kaWFsb2ctY2xvc2VcIiAoY2xpY2spPVwic2hvd0hpc3Rvcnkuc2V0KGZhbHNlKVwiPlxuICAgICAgICAgICAgICAgIHt7IHQoJ2Nsb3NlJykgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgICBAaWYgKGdhbWUoKS5oaXN0b3J5Wm9uZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkXCI+XG4gICAgICAgICAgICAgIEBmb3IgKGNhcmRJZCBvZiBnYW1lKCkuaGlzdG9yeVpvbmU7IHRyYWNrIGNhcmRJZCArICRpbmRleCkge1xuICAgICAgICAgICAgICAgIEBsZXQgY2FyZCA9IGNhcmREZWZpbml0aW9uKGNhcmRJZCk7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQgY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvblwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJpbnNwZWN0SGlzdG9yeUNhcmQoY2FyZElkKVwiPlxuICAgICAgICAgICAgICAgICAgPHZhbC1jaHJpc3RpYW5pdHktY2FyZCBbY2FyZF09XCJkZWZpbml0aW9uVG9SZW5kZXJDYXJkKGNhcmQpXCIgdmFyaWFudD1cImxpc3RcIj48L3ZhbC1jaHJpc3RpYW5pdHktY2FyZD5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlIaXN0b3J5RW1wdHknKSB9fTwvcD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChzaG93R2FsbGVyeSgpKSB7XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhpc3RvcnktYmFja2Ryb3BcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eUNsb3NlR2FsbGVyeScpXCIgKGNsaWNrKT1cImNsb3NlR2FsbGVyeSgpXCI+PC9idXR0b24+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIGNocmlzdGlhbml0eS1nYWxsZXJ5LWRyYXdlclwiPlxuICAgICAgICAgIDxoZWFkZXI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8aDI+e3sgdCgnY2hyaXN0aWFuaXR5R2FsbGVyeScpIH19PC9oMj5cbiAgICAgICAgICAgICAgPHA+e3sgZ2FsbGVyeUVkaXRpb25MYWJlbCgpIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWRpYWxvZy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGdhbGxlcnlDYXJkcygpLmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktZGlhbG9nLWNsb3NlXCIgKGNsaWNrKT1cImNsb3NlR2FsbGVyeSgpXCI+XG4gICAgICAgICAgICAgICAge3sgdCgnY2xvc2UnKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9sc1wiPlxuICAgICAgICAgICAgPGxhYmVsPlxuICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlHYWxsZXJ5U2VhcmNoJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwic2VhcmNoXCIgW3ZhbHVlXT1cImdhbGxlcnlTZWFyY2goKVwiIChpbnB1dCk9XCJzZXRHYWxsZXJ5U2VhcmNoKCRldmVudClcIiBbcGxhY2Vob2xkZXJdPVwidCgnY2hyaXN0aWFuaXR5R2FsbGVyeVNlYXJjaFBsYWNlaG9sZGVyJylcIiAvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5R2FsbGVyeUZpbHRlcicpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c2VsZWN0IFt2YWx1ZV09XCJnYWxsZXJ5VHlwZSgpXCIgKGNoYW5nZSk9XCJzZXRHYWxsZXJ5VHlwZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIGdhbGxlcnlUeXBlT3B0aW9ucygpOyB0cmFjayBvcHRpb24udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPnt7IG9wdGlvbi5sYWJlbCB9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktZ2FsbGVyeS1lZGl0aW9uLXN0cmlwXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImlzLWFjdGl2ZVwiIHZhbExpZ2h0UmlwcGxlPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiZ2FsbGVyeUVkaXRpb25JY29uKClcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlHZW5lc2lzRWRpdGlvbicpIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWRcIj5cbiAgICAgICAgICAgIEBmb3IgKGNhcmQgb2YgZ2FsbGVyeUNhcmRzKCk7IHRyYWNrIGNhcmQuaWQpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQgY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvblwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJpbnNwZWN0R2FsbGVyeUNhcmQoY2FyZC5pZClcIj5cbiAgICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cImRlZmluaXRpb25Ub1JlbmRlckNhcmQoY2FyZClcIiB2YXJpYW50PVwibGlzdFwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgICAgPHA+e3sgdCgnY2hyaXN0aWFuaXR5R2FsbGVyeUVtcHR5JykgfX08L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChvZmZlcmluZ3NTZWF0KCkpIHtcbiAgICAgICAgQGxldCBvZmZlcmluZ1BsYXllciA9IGdhbWUoKS5wbGF5ZXJzW29mZmVyaW5nc1NlYXQoKSFdO1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5LWJhY2tkcm9wXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlDbG9zZU9mZmVyaW5ncycpXCIgKGNsaWNrKT1cImNsb3NlT2ZmZXJpbmdzKClcIj48L2J1dHRvbj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1kcmF3ZXJcIj5cbiAgICAgICAgICA8aGVhZGVyPlxuICAgICAgICAgICAgPGgyPnt7IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5ncycpIH19PC9oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktZGlhbG9nLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgcmVhZHlPZmZlcmluZ3Mob2ZmZXJpbmdQbGF5ZXIpIH19L3t7IHRvdGFsT2ZmZXJpbmdzKG9mZmVyaW5nUGxheWVyKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktZGlhbG9nLWNsb3NlXCIgKGNsaWNrKT1cImNsb3NlT2ZmZXJpbmdzKClcIj5cbiAgICAgICAgICAgICAgICB7eyB0KCdjbG9zZScpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZ3Mtbm90ZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaHJpc3RpYW5pdHktcnVsZS1ub3RlLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5pPC9zcGFuPlxuICAgICAgICAgICAgPHA+e3sgdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdzUnVsZUJvZHknKSB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3RcIj5cbiAgICAgICAgICAgIEBmb3IgKG9mZmVyaW5nIG9mIG9mZmVyaW5nUGxheWVyLm9mZmVyaW5nczsgdHJhY2sgb2ZmZXJpbmcuaW5zdGFuY2VJZCkge1xuICAgICAgICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZy1yb3dcIiBbY2xhc3MuaXMtZXhoYXVzdGVkXT1cIiFvZmZlcmluZy5yZWFkeVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvblwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJpbnNwZWN0T2ZmZXJpbmcob2ZmZXJpbmcpXCI+XG4gICAgICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cIm9mZmVyaW5nUmVuZGVyQ2FyZChvZmZlcmluZylcIiB2YXJpYW50PVwibGlzdFwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IG9mZmVyaW5nLnJlYWR5ID8gdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdSZWFkeScpIDogdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdFeGhhdXN0ZWQnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPHA+e3sgb2ZmZXJpbmdBYmlsaXR5VGV4dChvZmZlcmluZykgfX08L3A+XG4gICAgICAgICAgICAgICAgICBAaWYgKG9mZmVyaW5nLmFiaWxpdHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblVzZU9mZmVyaW5nQWJpbGl0eShvZmZlcmluZywgb2ZmZXJpbmdzU2VhdCgpISlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1c2VPZmZlcmluZ0FiaWxpdHkob2ZmZXJpbmcsIG9mZmVyaW5nc1NlYXQoKSEpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVVzZUFiaWxpdHknKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG4gICAgPC9tYWluPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLWluazogdmFyKC0tdmFsLXRleHQtY29sb3IsICMxZjI5MzMpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1zdXJmYWNlOiAjZmZmZmZmO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1wYXJjaG1lbnQ6ICNmZmZhZjA7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLW9saXZlOiAjNWY2ZjJhO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkOiAjZDZhMjFkO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXNvZnQ6IHJnYmEoMjE0LCAxNjIsIDI5LCAwLjE4KTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1yaW5nOiByZ2JhKDIxNCwgMTYyLCAyOSwgMC40OCk7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdsb3c6IHJnYmEoMjQ1LCAxOTksIDg1LCAwLjMyKTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXM6ICMyNTYzZWI7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdzogcmdiYSg4MiwgNjQsIDI4LCAwLjE4KTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtc2hhZG93LXN0cm9uZzogcmdiYSg4MiwgNjQsIDI4LCAwLjMpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdDogNSAvIDcuNDU7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LWNhcmQtYmFjazpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE2LCA0MiwgNjcsIDAuMTYpLCByZ2JhKDE2LCA0MiwgNjcsIDAuMDMpKSxcbiAgICAgICAgICByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZGJlYWZlIDAgMC4zM3JlbSwgI2ZmZmZmZiAwLjMzcmVtIDAuNjZyZW0pO1xuICAgICAgICAtLWNocmlzdGlhbml0eS1jYXJkLWJhY2stc29mdDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE2LCA0MiwgNjcsIDAuMTEpLCByZ2JhKDE2LCA0MiwgNjcsIDAuMDIpKSxcbiAgICAgICAgICByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZGJlYWZlIDAgMC4zM3JlbSwgI2ZmZmZmZiAwLjMzcmVtIDAuNjZyZW0pO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG92ZXJmbG93LXg6IGNsaXA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtaW5rKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGVsbCB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC42NXJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtIDAuMjVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmNmY4ZmI7XG4gICAgICAgIG92ZXJmbG93LXg6IGNsaXA7XG4gICAgICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyLFxuICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1zdHJpcCxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyX19zdW1tYXJ5LFxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBoMSxcbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzbWFsbCxcbiAgICAgIC5jaHJpc3RpYW5pdHktc2NvcmVib2FyZCBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5IGgyLFxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjM1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4xO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlci1hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LW9wZW4ge1xuICAgICAgICBtaW4taGVpZ2h0OiAyLjJyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC43NXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyMTQsIDE2MiwgMjksIDAuMzgpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjUwLCAyNDAsIDAuOTgpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTgpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDIwJSAwJSwgcmdiYSgyMTQsIDE2MiwgMjksIDAuMTgpLCB0cmFuc3BhcmVudCA0MiUpO1xuICAgICAgICBjb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWluayk7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MnJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjU1cmVtIDEuMnJlbSByZ2JhKDgyLCA2NCwgMjgsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoLFxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IG1pbigzNHJlbSwgY2FsYygxMDBkdmggLSA4cmVtKSk7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjlyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgMTglLCByZ2JhKDI0NSwgMTk5LCA4NSwgMC4yKSwgdHJhbnNwYXJlbnQgMjJyZW0pLFxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTAsIDI0MCwgMC45MiksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NikpLFxuICAgICAgICAgIHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWJhY2stc29mdCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMS4ycmVtIDMuMnJlbSByZ2JhKDgyLCA2NCwgMjgsIDAuMTIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNwbGFzaCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAxLjJyZW07XG4gICAgICAgIHBhZGRpbmc6IDIuNXJlbSAxLjI1cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoX19tYXJrIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB3aWR0aDogNi40cmVtO1xuICAgICAgICBoZWlnaHQ6IDguOXJlbTtcbiAgICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDFyZW0gMS44cmVtIHJnYmEoODIsIDY0LCAyOCwgMC4xOCkpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNwbGFzaF9fbWFyayBpIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE2KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNzYlIDEyJSwgcmdiYSgyNTAsIDIwNCwgMjEsIDAuOSkgMCAwLjQycmVtLCB0cmFuc3BhcmVudCAwLjQ1cmVtKSxcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTgpLCByZ2JhKDI0OCwgMjUwLCAyNTIsIDAuOTgpKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2hfX21hcmsgaTpudGgtY2hpbGQoMSkge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEuMXJlbSkgcm90YXRlKC05ZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2hfX21hcmsgaTpudGgtY2hpbGQoMikge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTAuMzJyZW0pO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNwbGFzaF9fbWFyayBpOm50aC1jaGlsZCgzKSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxLjFyZW0pIHJvdGF0ZSg5ZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2hfX21hcms6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDIuMXJlbSAxLjA1cmVtIDIuNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA0NCUsIHJnYmEoMjQ1LCAxOTksIDg1LCAwLjcpLCB0cmFuc3BhcmVudCAzNiUpLFxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoOTUsIDExMSwgNDIsIDAuMiksIHJnYmEoOTUsIDExMSwgNDIsIDAuMDgpKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2ggc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NvcHkgc3BhbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtb2xpdmUpO1xuICAgICAgICBmb250LXNpemU6IDAuNzZyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoIGgyLFxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydCBoMixcbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnQgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2ggaDIge1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjJyZW07XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMS42NXJlbSwgN3Z3LCAyLjdyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2ggcCB7XG4gICAgICAgIG1heC13aWR0aDogMjZyZW07XG4gICAgICAgIG1hcmdpbjogMC41NXJlbSBhdXRvIDA7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjgpO1xuICAgICAgICBmb250LXNpemU6IDAuOTZyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogMXJlbTtcbiAgICAgICAgcGFkZGluZzogY2xhbXAoMXJlbSwgNHZ3LCAyLjJyZW0pO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19oZXJvIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBtaW5tYXgoMTJyZW0sIDE4cmVtKTtcbiAgICAgICAgZ2FwOiAxcmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jb3B5IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgICBtYXgtd2lkdGg6IDM2cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0IGgyIHtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjZyZW0sIDZ2dywgMi41cmVtKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NvcHkgcCxcbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBwIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42OCk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19mYW4ge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEzcmVtO1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fZmFuIHZhbC1jaHJpc3RpYW5pdHktY2FyZCB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDUuN3JlbSwgMTJ2dywgNy4ycmVtKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDkyJTtcbiAgICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDFyZW0gMS41cmVtIHJnYmEoODIsIDY0LCAyOCwgMC4xOCkpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCgwLCAxZnIpKTtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyBhcnRpY2xlLFxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgYXJ0aWNsZSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC42NXJlbTtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3RhcnQ7XG4gICAgICAgIHBhZGRpbmc6IDAuOTVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Mik7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC43NXJlbSAxLjdyZW0gcmdiYSg4MiwgNjQsIDI4LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fY2FyZHMgYXJ0aWNsZSB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDExcmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyBzdHJvbmcge1xuICAgICAgICBmb250LXNpemU6IDEuMDVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX3N0YXR1cyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19zdGF0dXMgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIGFydGljbGUgPiBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICAgICAgbWluLWhlaWdodDogMS44NXJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjYycmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4yNik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjUwLCAyNDAsIDAuODgpO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjcyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogODUwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIG1pbm1heCgwLCAxZnIpKTtcbiAgICAgICAgZ2FwOiAwLjU1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBhcnRpY2xlIHtcbiAgICAgICAgbWluLWhlaWdodDogOC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0OCwgMjUwLCAyNTIsIDAuNzIpO1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICBvcGFjaXR5OiAwLjgyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBzdHJvbmcge1xuICAgICAgICBmb250LXNpemU6IDAuOTJyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXByaW1hcnktYWN0aW9uLFxuICAgICAgLmNocmlzdGlhbml0eS1zZWNvbmRhcnktYWN0aW9uIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBzdGFydDtcbiAgICAgICAgbWluLWhlaWdodDogMi41cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuOXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcHJpbWFyeS1hY3Rpb24ge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE2LCA0MiwgNjcsIDAuMTYpO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTAyYTQzO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zZWNvbmRhcnktYWN0aW9uIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyMTQsIDE2MiwgMjksIDAuMzgpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtcGFyY2htZW50KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1pbmspO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBwLFxuICAgICAgLmNocmlzdGlhbml0eS10dXJuIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncyBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1kZWNrIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYWNlIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBpbGUgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyIHNwYW4ge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjY0KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXR1cm4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlcixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLFxuICAgICAgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGlsZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZGVjayxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxhY2Uge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMTVyZW07XG4gICAgICAgIG1pbi13aWR0aDogNS4yNXJlbTtcbiAgICAgICAgcGFkZGluZzogMC41NXJlbSAwLjY1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktdHVybi5pcy1vd24tdHVybiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxOCwgMTI4LCAxMDgsIDAuMzUpO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWNmZGY1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXN0cmlwIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICBwYWRkaW5nOiAwLjQ1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllci0tb3Bwb25lbnQge1xuICAgICAgICBkaXJlY3Rpb246IHJ0bDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXItLW9wcG9uZW50IGRpdiB7XG4gICAgICAgIGRpcmVjdGlvbjogbHRyO1xuICAgICAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIgZGl2IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzbWFsbCB7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzbWFsbCxcbiAgICAgIC5jaHJpc3RpYW5pdHktc2NvcmVib2FyZCBzcGFuIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC41OCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43MnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAganVzdGlmeS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4td2lkdGg6IDQuMnJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjU1cmVtO1xuICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMSk7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNjb3JlYm9hcmQgc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjJyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXRhYmxlIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIHBhZGRpbmc6IDAuNDVyZW0gMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2RjZWFmYjtcbiAgICAgICAgb3ZlcmZsb3cteDogY2xpcDtcbiAgICAgICAgb3ZlcmZsb3cteTogdmlzaWJsZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItc2lkZSB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4zNXJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBwYWRkaW5nOiAwLjM1cmVtIDAuM3JlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzQpO1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbm1heCg3cmVtLCAxZnIpIGF1dG87XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEzLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlLS1vcHBvbmVudCB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoN3JlbSwgMWZyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUge1xuICAgICAgICAtLWNocmlzdGlhbml0eS1iYXR0bGUtY2FyZC13aWR0aDogY2xhbXAoNC44cmVtLCAxNXZ3LCA2LjZyZW0pO1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCB2YXIoLS1jaHJpc3RpYW5pdHktYmF0dGxlLWNhcmQtd2lkdGgpKTtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG1pbi1oZWlnaHQ6IGNsYW1wKDkuMXJlbSwgMjl2dywgMTFyZW0pO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAuNHJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc2KTtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICBiYWNrZ3JvdW5kIDE2MG1zIGVhc2UsXG4gICAgICAgICAgYm94LXNoYWRvdyAxNjBtcyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLmlzLXBsYWNpbmctY2FyZCB7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1MCwgMjQwLCAwLjk2KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg0KSksXG4gICAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc2KTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICBpbnNldCAwIDAgMCAwLjE0cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXNvZnQpLFxuICAgICAgICAgIDAgMC44cmVtIDEuN3JlbSByZ2JhKDk1LCAxMTEsIDQyLCAwLjEyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMC40cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktZW5kLXR1cm4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMgYnV0dG9uLFxuICAgICAgLmNocmlzdGlhbml0eS1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItLXRhcmdldCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIG1pbi1oZWlnaHQ6IDUuOHJlbTtcbiAgICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNXJlbSAxLjI1cmVtIHJnYmEoMzYsIDQ4LCA2OCwgMC4wOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCBzcGFuIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkIHN0cm9uZyB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogZW5kO1xuICAgICAgICBwYWRkaW5nOiAwLjE1cmVtIDAuMzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLmlzLXNlbGVjdGVkIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZCk7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgMCAwIDAgMC4xOHJlbSB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1zb2Z0KSxcbiAgICAgICAgICAwIDAuODVyZW0gMS40cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3cpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQuaXMtZGlzYWJsZWQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQuaXMtZXhoYXVzdGVkIHtcbiAgICAgICAgb3BhY2l0eTogMC41NTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLmlzLXRhcmdldCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogI2RjMjYyNjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkcyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGdyaWQtYXV0by1jb2x1bW5zOiAwLjdyZW07XG4gICAgICAgIGdhcDogMC4xNnJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGVuZDtcbiAgICAgICAgbWluLWhlaWdodDogMS4wNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkcyBpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAwLjY1cmVtO1xuICAgICAgICBoZWlnaHQ6IDAuOTVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTYsIDQyLCA2NywgMC4yMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMThyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZHMgaS5pcy11c2VkIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2NiZDVlMTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyO1xuICAgICAgICB3aWR0aDogdmFyKC0tY2hyaXN0aWFuaXR5LWJhdHRsZS1jYXJkLXdpZHRoKTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCByZ2JhKDM2LCA0OCwgNjgsIDAuMjIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNsb3QtLXBsYXktdGFyZ2V0IHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXJpbmcpO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTAsIDI0MCwgMC45MiksIHJnYmEoMjQ4LCAyNTAsIDI1MiwgMC44MikpLFxuICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcbiAgICAgICAgY29sb3I6ICM1ZDQzMDU7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgaW5zZXQgMCAwIDAgMC4xMnJlbSByZ2JhKDIxNCwgMTYyLCAyOSwgMC4yKSxcbiAgICAgICAgICAwIDAuN3JlbSAxLjI1cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3cpO1xuICAgICAgICBhbmltYXRpb246IGNocmlzdGlhbml0eS10YXJnZXQtcHVsc2UgMTQ1MG1zIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNsb3QtLXBsYXktdGFyZ2V0OjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyMTQsIDE2MiwgMjksIDAuMjIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjRyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyMTQsIDE2MiwgMjksIDAuMSksIHRyYW5zcGFyZW50IDQ2JSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNDIlLCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ2xvdyksIHRyYW5zcGFyZW50IDU4JSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQgc3BhbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgICAgcGFkZGluZzogMC4xNnJlbSAwLjQ0cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc4KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGNocmlzdGlhbml0eS10YXJnZXQtcHVsc2Uge1xuICAgICAgICAwJSxcbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAgIGluc2V0IDAgMCAwIDAuMTJyZW0gcmdiYSgyMTQsIDE2MiwgMjksIDAuMiksXG4gICAgICAgICAgICAwIDAuN3JlbSAxLjI1cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgNTAlIHtcbiAgICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgICAgaW5zZXQgMCAwIDAgMC4xNnJlbSByZ2JhKDIxNCwgMTYyLCAyOSwgMC4zNCksXG4gICAgICAgICAgICAwIDAuOXJlbSAxLjY1cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3ctc3Ryb25nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLWF1dG8tY29sdW1uczogbWlubWF4KDZyZW0sIDhyZW0pO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNTVyZW07XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIGRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b24sXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgbWluLWhlaWdodDogMi40cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuNzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b246bm90KDpkaXNhYmxlZCksXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzEwMmE0MztcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4ge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBtaW4taGVpZ2h0OiAxMC44cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjI1cmVtIDAuMjVyZW0gMi4xcmVtO1xuICAgICAgICBpc29sYXRpb246IGlzb2xhdGU7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtc2hlbGYge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHotaW5kZXg6IDEyO1xuICAgICAgICBtaW4taGVpZ2h0OiAxMnJlbTtcbiAgICAgICAgbWFyZ2luLXRvcDogLTEuMTVyZW07XG4gICAgICAgIHBhZGRpbmc6IDEuNDVyZW0gMC4yNXJlbSAxcmVtO1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLXNoZWxmLS1vcHBvbmVudCB7XG4gICAgICAgIHotaW5kZXg6IDg7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDYuODVyZW07XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgICAgIHBhZGRpbmc6IDAuNDVyZW0gMC4yNXJlbSAwLjg1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDUuOXJlbTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuNzVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWZhbi0tb3Bwb25lbnQgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1iYWNrIHtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDMuN3JlbSwgMTJ2dywgNC45cmVtKTtcbiAgICAgICAgbWFyZ2luLWlubGluZTogLTAuOXJlbTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDEyMCU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50IC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmFjazpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudCAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWJhY2s6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1yaWdodDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE2KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvIGF1dG87XG4gICAgICAgIGdhcDogMC4yOHJlbTtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3RyZXRjaDtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDQuOXJlbSwgMTd2dywgNy4xcmVtKTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICAgIHBhZGRpbmc6IDAuNDhyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAxMTUlO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIHRyYW5zZm9ybSAxNjBtcyBlYXNlLFxuICAgICAgICAgIGJveC1zaGFkb3cgMTYwbXMgZWFzZSxcbiAgICAgICAgICBib3JkZXItY29sb3IgMTYwbXMgZWFzZTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjVyZW0gMS4yNXJlbSByZ2JhKDM2LCA0OCwgNjgsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbiA+IHZhbC1jaHJpc3RpYW5pdHktY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24sXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYXR0bGUuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbixcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbiB7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYXNwZWN0KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZC5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uOmhvdmVyIHZhbC1jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbi5pcy1zZWxlY3RlZCB2YWwtY2hyaXN0aWFuaXR5LWNhcmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYXR0bGUuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbi5pcy1zZWxlY3RlZCB2YWwtY2hyaXN0aWFuaXR5LWNhcmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYXR0bGUuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbi5pcy10YXJnZXQgdmFsLWNocmlzdGlhbml0eS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZC5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uLmlzLXRhcmdldCB2YWwtY2hyaXN0aWFuaXR5LWNhcmQge1xuICAgICAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMCAwLjU1cmVtIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjM1KSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZS5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uLmlzLXJlYWR5LWF0dGFja2VyIHZhbC1jaHJpc3RpYW5pdHktY2FyZCB7XG4gICAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwLjQ1cmVtIDAuOHJlbSByZ2JhKDk1LCAxMTEsIDQyLCAwLjE2KSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZS5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uLmlzLXNlbGVjdGVkIHtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0wLjI4cmVtKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gbWlubWF4KDAsIDFmcikgYXV0byBhdXRvO1xuICAgICAgICBnYXA6IDAuMjhyZW07XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2g7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHBhZGRpbmc6IDAuNDhyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk4KSwgcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjk4KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAxNSUgMCUsIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjEyKSwgdHJhbnNwYXJlbnQgNDQlKTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAwIDAuNXJlbSAxLjI1cmVtIHJnYmEoMzYsIDQ4LCA2OCwgMC4xKSxcbiAgICAgICAgICBpbnNldCAwIDAgMCAwLjE4cmVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42Mik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIGF1dG87XG4gICAgICAgIGdhcDogMC4xNnJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc21hbGwge1xuICAgICAgICBncmlkLWNvbHVtbjogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjY0KTtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgwLjUycmVtLCAxLjV2dywgMC42OHJlbSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlciBzdHJvbmcge1xuICAgICAgICBncmlkLWNvbHVtbjogMTtcbiAgICAgICAganVzdGlmeS1zZWxmOiBzdGFydDtcbiAgICAgICAgYWxpZ24tc2VsZjogc3RhcnQ7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMC44MnJlbSwgMi41dncsIDEuMDVyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wMjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlciBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYXR0bGUgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlciBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc3Ryb25nIHtcbiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBjbGlwO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAgICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlciBzbWFsbCB7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWFydCA+IHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAgICAgbWF4LXdpZHRoOiA4OCU7XG4gICAgICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBjbGlwO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAgICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1oZWFkZXIgc3BhbiB7XG4gICAgICAgIGdyaWQtY29sdW1uOiAyO1xuICAgICAgICBncmlkLXJvdzogMSAvIHNwYW4gMjtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLXdpZHRoOiAxLjNyZW07XG4gICAgICAgIGhlaWdodDogMS4zcmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuMjJyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZkOTFhO1xuICAgICAgICBjb2xvcjogIzI0MzA0NDtcbiAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIC0wLjA4cmVtIDAgcmdiYSg4MiwgNjQsIDI4LCAwLjE4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlciBzcGFuLmlzLW9mZmVyaW5nLXBpcHMsXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1jb3N0LmlzLW9mZmVyaW5nLXBpcHMsXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgc3Bhbi5pcy1vZmZlcmluZy1waXBzIHtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAwLjE0cmVtO1xuICAgICAgICBtaW4td2lkdGg6IGF1dG87XG4gICAgICAgIHBhZGRpbmc6IDAgMC4yOHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlciBzcGFuLmlzLW9mZmVyaW5nLXBpcHMgaSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWNvc3QuaXMtb2ZmZXJpbmctcGlwcyBpLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkIHNwYW4uaXMtb2ZmZXJpbmctcGlwcyBpLFxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtcGlwcyBpIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAwLjcycmVtO1xuICAgICAgICBoZWlnaHQ6IDAuNzJyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMzQlIDI4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpIDAgMC4xMnJlbSwgdHJhbnNwYXJlbnQgMC4xM3JlbSksXG4gICAgICAgICAgI2ZmZDkxYTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICBpbnNldCAwIC0wLjA4cmVtIDAgcmdiYSg4MiwgNjQsIDI4LCAwLjE4KSxcbiAgICAgICAgICAwIDAuMTJyZW0gMC4yNHJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMzZyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSg5NSwgMTExLCA0MiwgMC4xOCksIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjE0KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgMTglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzIpLCB0cmFuc3BhcmVudCA0OCUpLFxuICAgICAgICAgICNkYmU3ZWY7XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2JhKDM2LCA0OCwgNjgsIDAuMDgpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtYXJ0ID4gc3BhbiB7XG4gICAgICAgIG1heC13aWR0aDogNzglO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBjb2xvcjogcmdiYSgzNiwgNDgsIDY4LCAwLjQ4KTtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgwLjgycmVtLCAyLjJ2dywgMS4wNXJlbSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjAyO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtYXJ0IHNtYWxsIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAwLjI4cmVtO1xuICAgICAgICBtYXgtd2lkdGg6IDc4JTtcbiAgICAgICAgcGFkZGluZzogMC4xcmVtIDAuMzRyZW07XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4IDAgMCA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjY2KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjQ4cmVtO1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWVmZmVjdCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjFyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEuNDVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuMjRyZW07XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMzRyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNzAlLCByZ2JhKDM2LCA0OCwgNjgsIDAuMDYpLCB0cmFuc3BhcmVudCA0NCUpLFxuICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44Nik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1lZmZlY3Qgc3Ryb25nIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBlbmQ7XG4gICAgICAgIGFsaWduLXNlbGY6IGVuZDtcbiAgICAgICAgcGFkZGluZzogMC4xMnJlbSAwLjMycmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2VkZjJmNztcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgwLjY2cmVtLCAydncsIDAuODJyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWVmZmVjdCBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjcyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjU4cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4xO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWZvb3RlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiAwLjIycmVtO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjUyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjQ2cmVtO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1iYXR0bGUge1xuICAgICAgICBnYXA6IDAuMjJyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNDJyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmF0dGxlIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnQge1xuICAgICAgICBtaW4taGVpZ2h0OiAyLjZyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tbGVhZGVyIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnQge1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMTQpLCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4xNikpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDE4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc4KSwgdHJhbnNwYXJlbnQgNDglKSxcbiAgICAgICAgICAjZTdlZWY4O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWxpc3Qge1xuICAgICAgICB3aWR0aDogY2xhbXAoNC40cmVtLCAyMnZ3LCA1LjhyZW0pO1xuICAgICAgICBwYWRkaW5nOiAwLjM4cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWxpc3QgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWFydCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDIuNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAganVzdGlmeS1pdGVtczogY2VudGVyO1xuICAgICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICAgICAgbWFyZ2luLWlubGluZTogLTAuNDJyZW07XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAycmVtO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTE1JTtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICB0cmFuc2Zvcm0gMTYwbXMgZWFzZSxcbiAgICAgICAgICBmaWx0ZXIgMTYwbXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcDpob3ZlcixcbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1jYXJkLXdyYXAuaXMtc2VsZWN0ZWQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtY2FyZC13cmFwLmlzLWRyYWdnaW5nIHtcbiAgICAgICAgei1pbmRleDogMztcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcDpob3ZlciAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kLFxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcC5pcy1zZWxlY3RlZCAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kLFxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcC5pcy1kcmFnZ2luZyAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZCk7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgMCAwIDAgMC4xMnJlbSB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1zb2Z0KSxcbiAgICAgICAgICAwIDFyZW0gMnJlbSB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtc2hhZG93KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZCB7XG4gICAgICAgIHRvdWNoLWFjdGlvbjogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZC5jZGstZHJhZy1kaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQuY2RrLWRyYWctcHJldmlldyB7XG4gICAgICAgIHdpZHRoOiBjbGFtcCg0LjlyZW0sIDE3dncsIDcuMXJlbSk7XG4gICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1hc3BlY3QpO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1yaW5nKTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAwIDAgMCAwLjE2cmVtIHJnYmEoMjU1LCAyNDQsIDE5NCwgMC42OCksXG4gICAgICAgICAgMCAxLjVyZW0gM3JlbSB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtc2hhZG93LXN0cm9uZyk7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDJkZWcpIHNjYWxlKDEuMDMpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLmNkay1kcmFnLXBsYWNlaG9sZGVyIHtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDQuOXJlbSwgMTd2dywgNy4xcmVtKTtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICAgIG9wYWNpdHk6IDAuMjI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdC5jZGstZHJvcC1saXN0LWRyYWdnaW5nLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlLmNkay1kcm9wLWxpc3QtZHJhZ2dpbmcge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXJpbmcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNsb3QuY2RrLWRyb3AtbGlzdC1yZWNlaXZpbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUuY2RrLWRyb3AtbGlzdC1yZWNlaXZpbmcge1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIGluc2V0IDAgMCAwIDAuMThyZW0gcmdiYSgyMTQsIDE2MiwgMjksIDAuMzQpLFxuICAgICAgICAgIDAgMXJlbSAxLjlyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdy1zdHJvbmcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZXllIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogNTAlO1xuICAgICAgICBib3R0b206IDAuMzhyZW07XG4gICAgICAgIHdpZHRoOiAyLjE1cmVtO1xuICAgICAgICBoZWlnaHQ6IDEuNTVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXMpIDUyJSwgdHJhbnNwYXJlbnQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk0KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjU1cmVtIDEuMXJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMTQpO1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg1MCUsIC0wLjJyZW0pIHNjYWxlKDAuOTIpO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIG9wYWNpdHkgMTQwbXMgZWFzZSxcbiAgICAgICAgICB0cmFuc2Zvcm0gMTQwbXMgZWFzZSxcbiAgICAgICAgICBib3JkZXItY29sb3IgMTQwbXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWV5ZTo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgd2lkdGg6IDEuMXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjFyZW07XG4gICAgICAgIGJvcmRlcjogMC4xMnJlbSBzb2xpZCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXMpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA4MiUgMDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk0KTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKDQ1ZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWV5ZTo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB3aWR0aDogMC40MnJlbTtcbiAgICAgICAgaGVpZ2h0OiAwLjQycmVtO1xuICAgICAgICBib3JkZXI6IDAuMDlyZW0gc29saWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk1KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAzNSUgMzIlLCAjZmZmZmZmIDAgMC4wNnJlbSwgdHJhbnNwYXJlbnQgMC4wN3JlbSksXG4gICAgICAgICAgdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWZvY3VzKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1jYXJkLXdyYXA6aG92ZXIgLmNocmlzdGlhbml0eS1jYXJkLWV5ZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1jYXJkLXdyYXAuaXMtc2VsZWN0ZWQgLmNocmlzdGlhbml0eS1jYXJkLWV5ZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1leWU6Zm9jdXMtdmlzaWJsZSB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgMCkgc2NhbGUoMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZS5pcy1wbGF5LXRhcmdldCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQtcmluZyk7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1MCwgMjQwLCAwLjk2KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk0KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MiUgMTQlLCByZ2JhKDI1MCwgMjA0LCAyMSwgMC4yOCkgMCAwLjdyZW0sIHRyYW5zcGFyZW50IDAuNzJyZW0pO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIGluc2V0IDAgMCAwIDAuMTJyZW0gcmdiYSgyMTQsIDE2MiwgMjksIDAuMjQpLFxuICAgICAgICAgIDAgMC44cmVtIDEuNTVyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdyk7XG4gICAgICAgIGFuaW1hdGlvbjogY2hyaXN0aWFuaXR5LXRhcmdldC1wdWxzZSAxNDUwbXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmFjayxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhY2sge1xuICAgICAgICB3aWR0aDogY2xhbXAoNHJlbSwgMTR2dywgNS43cmVtKTtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1hc3BlY3QpO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuOHJlbSAxLjU1cmVtIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNCk7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAtMTglO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1iYWNrKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1iYWNrOjpiZWZvcmUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYWNrOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMC41cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE2LCA0MiwgNjcsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjM4cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDQpKTtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMC4xMnJlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYXR0bGUge1xuICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IHZhcigtLWNocmlzdGlhbml0eS1iYXR0bGUtY2FyZC13aWR0aCk7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICAgIG1hcmdpbi1pbmxpbmU6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQgPiBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLW1pbmkgPiBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlID4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCA+IHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkID4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkID4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlID4gc3BhbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgICAgYWxpZ24tc2VsZjogc3RhcnQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkID4gc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLW1pbmkgPiBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgPiBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgPiBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkID4gc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLWNhcmQgPiBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSA+IHN0cm9uZyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMztcbiAgICAgICAganVzdGlmeS1zZWxmOiBlbmQ7XG4gICAgICAgIGFsaWduLXNlbGY6IGVuZDtcbiAgICAgICAgcGFkZGluZzogMC4xNXJlbSAwLjM1cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2VkZjJmNztcbiAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLXJhY2sge1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCg1LjlyZW0sIDdyZW0pIG1pbm1heCg1cmVtLCAxZnIpIG1pbm1heCg0LjJyZW0sIDdyZW0pO1xuICAgICAgICBnYXA6IDAuNDVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBlbmQ7XG4gICAgICAgIGp1c3RpZnktaXRlbXM6IHN0cmV0Y2g7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItcmFjay0tb3Bwb25lbnQge1xuICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1tZXRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMC4zNXJlbTtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWdyaWQ7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGdhcDogMC4yNXJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLWhlaWdodDogMS43cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjE4cmVtIDAuNDZyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zNXJlbSAwLjhyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLW1ldGVyLS1vcHBvbmVudCB7XG4gICAgICAgIHRvcDogMC4xNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLW1ldGVyIHNwYW4ge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjU4KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjY4cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtbWV0ZXIgc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjg2cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1iYWRnZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLWNvbW1hbmQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMzVyZW07XG4gICAgICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1iYWRnZSB7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHN0YXJ0O1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjc2KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc0cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1iYWRnZS0tb3Bwb25lbnQge1xuICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLWJhZGdlIHN0cm9uZyB7XG4gICAgICAgIG1heC13aWR0aDogNi41cmVtO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hdmF0YXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICB3aWR0aDogMS44NXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjg1cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NnJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjM1cmVtIDAuOXJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMTYpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy16b25lIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDAuMjVyZW07XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICAgICAganVzdGlmeS1zZWxmOiBzdGFydDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBtaW4taGVpZ2h0OiA0LjlyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNDhyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvIGF1dG87XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2g7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUge1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gbWlubWF4KDIuNnJlbSwgMWZyKSBhdXRvO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xuICAgICAgICBnYXA6IDAuMzJyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pIHtcbiAgICAgICAgd2lkdGg6IDMuNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBpc29sYXRpb246IGlzb2xhdGU7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGp1c3RpZnktc2VsZjogc3RhcnQ7XG4gICAgICAgIHdpZHRoOiBtaW4oMTAwJSwgNS45cmVtKTtcbiAgICAgICAgaGVpZ2h0OiA3LjFyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIG1heC1oZWlnaHQ6IDcuMXJlbTtcbiAgICAgICAgcGFkZGluZzogMC45NXJlbSAwLjUycmVtIDAuNnJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZmZmZmZmLCAjZjhmYWZjKSxcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDI1MCwgMjA0LCAyMSwgMC4xOCksIHRyYW5zcGFyZW50IDQyJSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSA+IC5jZGstZHJhZy1wbGFjZWhvbGRlcixcbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdCA+IC5jZGstZHJhZy1wbGFjZWhvbGRlciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSBpIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDIuNDVyZW07XG4gICAgICAgIGxlZnQ6IDAuNzJyZW07XG4gICAgICAgIHotaW5kZXg6IC0xO1xuICAgICAgICB3aWR0aDogMi41NXJlbTtcbiAgICAgICAgaGVpZ2h0OiAzLjU1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE2LCA0MiwgNjcsIDAuMTgpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjM1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45MiksIHJnYmEoMjQxLCAyNDUsIDI0OSwgMC45MikpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNzglIDE4JSwgI2ZhY2MxNSAwIDAuMzhyZW0sIHRyYW5zcGFyZW50IDAuNHJlbSk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zNXJlbSAwLjg1cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xKTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTVkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgaTpudGgtY2hpbGQoMikge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLjI4cmVtLCAwLjA4cmVtKSByb3RhdGUoM2RlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSBpOm50aC1jaGlsZCgzKSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAuNTVyZW0sIDAuMThyZW0pIHJvdGF0ZSgtMWRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQge1xuICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyO1xuICAgICAgICB3aWR0aDogY2xhbXAoNC43NXJlbSwgMTd2dywgNnJlbSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYXNwZWN0KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1yYWNrLXNwYWNlciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtaW4taGVpZ2h0OiAxcHg7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCB2YXIoLS1jaHJpc3RpYW5pdHktYmF0dGxlLWNhcmQtd2lkdGgpKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCg0LjNyZW0sIDFmcikpO1xuICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIHtcbiAgICAgICAgbWluLWhlaWdodDogNi40NXJlbTtcbiAgICAgICAgcGFkZGluZzogMC43cmVtIDAuNTJyZW0gMC41NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGlzb2xhdGlvbjogaXNvbGF0ZTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgOTk5cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUgaSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAyLjJyZW07XG4gICAgICAgIHJpZ2h0OiAwLjcycmVtO1xuICAgICAgICB6LWluZGV4OiAtMTtcbiAgICAgICAgd2lkdGg6IDIuN3JlbTtcbiAgICAgICAgaGVpZ2h0OiAzLjdyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTYsIDQyLCA2NywgMC4xOCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zNXJlbSAwLjg1cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xMSk7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDRkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBpOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0wLjI4cmVtLCAwLjEycmVtKSByb3RhdGUoLTNkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBpOm50aC1jaGlsZCgzKSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWJhY2spO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMC41NHJlbSwgMC4yNHJlbSkgcm90YXRlKDJkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtc2hlbGwge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHotaW5kZXg6IDgwO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNTVyZW07XG4gICAgICAgIHdpZHRoOiBtaW4oMjZyZW0sIGNhbGMoMTAwdncgLSAxLjI1cmVtKSk7XG4gICAgICAgIHBhZGRpbmctdG9wOiAyLjM1cmVtO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCAyLjJyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdsb3cpO1xuICAgICAgICB0b3VjaC1hY3Rpb246IG5vbmU7XG4gICAgICAgIHRyYW5zZm9ybTpcbiAgICAgICAgICB0cmFuc2xhdGUodmFyKC0tcHJldmlldy1zaGlmdC14LCAwcHgpLCB2YXIoLS1wcmV2aWV3LXNoaWZ0LXksIDBweCkpXG4gICAgICAgICAgcGVyc3BlY3RpdmUoNDhyZW0pXG4gICAgICAgICAgcm90YXRlWCh2YXIoLS1wcmV2aWV3LXJvdGF0ZS14LCA1ZGVnKSlcbiAgICAgICAgICByb3RhdGVZKHZhcigtLXByZXZpZXctcm90YXRlLXksIC01ZGVnKSk7XG4gICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSA5MG1zIGVhc2Utb3V0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgdmFsLWNocmlzdGlhbml0eS1jYXJkIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1oZWFkZXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gbWlubWF4KDAsIDFmcikgYXV0bztcbiAgICAgICAgZ2FwOiAwLjQycmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1oZWFkZXIgc3Ryb25nIHtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXA7XG4gICAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgICAgIC13ZWJraXQtbGluZS1jbGFtcDogMjtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjI1cmVtLCA1dncsIDEuODVyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtdHlwZS1pY29uLFxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtY29zdCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC10eXBlLWljb24ge1xuICAgICAgICB3aWR0aDogMS42cmVtO1xuICAgICAgICBoZWlnaHQ6IDEuNnJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA1MCUsIHJnYmEoOTUsIDExMSwgNDIsIDAuNzIpIDAgMC4yMnJlbSwgdHJhbnNwYXJlbnQgMC4yNHJlbSksXG4gICAgICAgICAgcmdiYSgzNiwgNDgsIDY4LCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC10eXBlLWljb24gaW1nIHtcbiAgICAgICAgd2lkdGg6IDFyZW07XG4gICAgICAgIGhlaWdodDogMXJlbTtcbiAgICAgICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtY29zdCB7XG4gICAgICAgIG1pbi13aWR0aDogMi4xcmVtO1xuICAgICAgICBoZWlnaHQ6IDIuMXJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjM2cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZkOTFhO1xuICAgICAgICBjb2xvcjogIzI0MzA0NDtcbiAgICAgICAgZm9udC1zaXplOiAxLjFyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTAuMTJyZW0gMCByZ2JhKDgyLCA2NCwgMjgsIDAuMTgpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1hcnQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDlyZW07XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNDhyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSg5NSwgMTExLCA0MiwgMC4yKSwgcmdiYSgyMTQsIDE2MiwgMjksIDAuMTYpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSAyNSUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NiksIHRyYW5zcGFyZW50IDQyJSksXG4gICAgICAgICAgI2RiZTdlZjtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMzYsIDQ4LCA2OCwgMC4wOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWFydCBpbWcge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtYXJ0ID4gc3BhbiB7XG4gICAgICAgIG1heC13aWR0aDogODAlO1xuICAgICAgICBjb2xvcjogcmdiYSgzNiwgNDgsIDY4LCAwLjU4KTtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjFyZW0sIDV2dywgMS44cmVtKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDU7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtYXJ0IHNtYWxsIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgYm90dG9tOiAwLjU1cmVtO1xuICAgICAgICBtaW4td2lkdGg6IDVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuMTZyZW0gMC40OHJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHggMCAwIDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zcmVtIDAuOHJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMTIpO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjc0KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjY4cmVtO1xuICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtdmVyc2UsXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1lZmZlY3Qge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMzJyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXZlcnNlIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1lZmZlY3QgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXZlcnNlIHtcbiAgICAgICAgY29sb3I6ICMxNzE5MjM7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCAnVGltZXMgTmV3IFJvbWFuJywgc2VyaWY7XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMC43MnJlbSwgMi43dncsIDAuODZyZW0pO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC12ZXJzZSBzdHJvbmcge1xuICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1lZmZlY3Qge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHN0YXJ0O1xuICAgICAgICBtaW4taGVpZ2h0OiA3cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjZyZW0gMC43cmVtO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjQ1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNTAlIDcyJSwgcmdiYSgzNiwgNDgsIDY4LCAwLjA3KSwgdHJhbnNwYXJlbnQgMzQlKSxcbiAgICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODYpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1zdGF0cyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMXJlbTtcbiAgICAgICAgbWluLWhlaWdodDogMS4zNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtc3RhdHMgc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtc3RhdHMgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtcGlwcyB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ncmlkO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBnYXA6IDAuMnJlbTtcbiAgICAgICAganVzdGlmeS1zZWxmOiBzdGFydDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWVmZmVjdCA+IGRpdjpsYXN0LW9mLXR5cGUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMTJyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWVmZmVjdCA+IGRpdjpsYXN0LW9mLXR5cGUgc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjgycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1lZmZlY3QgcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMC43OHJlbSwgMi45dncsIDAuOTJyZW0pO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1yYXJpdHkge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMC42MnJlbTtcbiAgICAgICAgcmlnaHQ6IDAuNjJyZW07XG4gICAgICAgIHdpZHRoOiAwLjQ2cmVtO1xuICAgICAgICBoZWlnaHQ6IDAuNDZyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMTJyZW07XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtcmFyaXR5LmlzLW5vcm1hbCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNkMWQ1ZGI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXJhcml0eS5pcy11bmNvbW1vbiB7XG4gICAgICAgIGJhY2tncm91bmQ6ICMyMmM1NWU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXJhcml0eS5pcy1yYXJlIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzNiODJmNjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtcmFyaXR5LmlzLWxlZ2VuZGFyeSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlYWIzMDg7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWZvb3RlciB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBhdXRvIG1pbm1heCgwLCAxZnIpIGF1dG87XG4gICAgICAgIGdhcDogMC4zNHJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42OCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC41OHJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWZvb3RlciBzcGFuIHtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkLWNsb3NlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAwLjE1cmVtO1xuICAgICAgICB6LWluZGV4OiA0O1xuICAgICAgICBtaW4taGVpZ2h0OiAycmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuNnJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43OCk7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NnJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjQ1cmVtIDFyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctYmFja2Ryb3AsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktYmFja2Ryb3AsXG4gICAgICAuY2hyaXN0aWFuaXR5LWluZm8tYmFja2Ryb3Age1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTUsIDIzLCA0MiwgMC40Nik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1iYWNrZHJvcCB7XG4gICAgICAgIHotaW5kZXg6IDc5O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWluZm8tYmFja2Ryb3Age1xuICAgICAgICB6LWluZGV4OiA1MDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1pbmZvLXBhbmVsIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB6LWluZGV4OiA1MTtcbiAgICAgICAgd2lkdGg6IG1pbigzMXJlbSwgY2FsYygxMDB2dyAtIDEuMjVyZW0pKTtcbiAgICAgICAgbWF4LWhlaWdodDogbWluKDM0cmVtLCBjYWxjKDEwMHZoIC0gMnJlbSkpO1xuICAgICAgICBwYWRkaW5nLXRvcDogMi4zNXJlbTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaW5mby1jbG9zZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMC4xNXJlbTtcbiAgICAgICAgei1pbmRleDogMjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gbWlubWF4KDAsIDFmcik7XG4gICAgICAgIGdhcDogMC44NXJlbTtcbiAgICAgICAgbWF4LWhlaWdodDogaW5oZXJpdDtcbiAgICAgICAgcGFkZGluZzogMXJlbTtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC45cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NyksIHJnYmEoMjQ4LCAyNTAsIDI1MiwgMC45NykpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgOCUgMCUsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMSksIHRyYW5zcGFyZW50IDM4JSk7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgMCAxLjJyZW0gMi42cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4yNCksXG4gICAgICAgICAgaW5zZXQgMCAwIDAgMC4yNXJlbSByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZS1pY29uIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDIuMXJlbTtcbiAgICAgICAgaGVpZ2h0OiAyLjFyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWZvY3VzKSAxMiUsICNmZmZmZmYpO1xuICAgICAgICBjb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWZvY3VzKTtcbiAgICAgICAgZm9udC1zaXplOiAxcmVtO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1mb2N1cykgMjQlLCB0cmFuc3BhcmVudCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHNtYWxsLFxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgcCxcbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIGgyIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBzbWFsbCB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjIpO1xuICAgICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIGgyIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMC4xOHJlbTtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjVyZW0sIDd2dywgMi4ycmVtKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHN0cm9uZyB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgICAgIG1hcmdpbi10b3A6IDAuNTVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuMjJyZW0gMC41NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlZGYyZjc7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45MnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgcCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDAuNzVyZW07XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzgpO1xuICAgICAgICBsaW5lLWhlaWdodDogMS40NTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgdWwge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNDVyZW07XG4gICAgICAgIG1hcmdpbjogMC44cmVtIDAgMDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAxLjA1cmVtO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjc4KTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZCA+IHNtYWxsLFxuICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkID4gc3BhbiB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjQpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgPiBzdHJvbmcge1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDEuNTVyZW0sIDh2dywgMi4zNXJlbSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgPiBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBhbGlnbi1zZWxmOiBlbmQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDQ7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgZ2FwOiAwLjY1cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW0gMC44NXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpLCByZ2JhKDI0OCwgMjUwLCAyNTIsIDAuOTYpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDglIDAlLCByZ2JhKDM3LCA5OSwgMjM1LCAwLjA4KSwgdHJhbnNwYXJlbnQgNDQlKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjc1cmVtIDEuNnJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMTIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHNtYWxsLFxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgc21hbGwge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjU4KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjY4cmVtO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHN0cm9uZyB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjA4cmVtO1xuICAgICAgICBmb250LXNpemU6IDAuOTJyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgcCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDAuMjJyZW07XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzQpO1xuICAgICAgICBmb250LXNpemU6IDAuODJyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjMyO1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1pbi13aWR0aDogNTJyZW0pIHtcbiAgICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkLXNoZWxsIHtcbiAgICAgICAgICB3aWR0aDogbWluKDI5cmVtLCBjYWxjKDEwMHZ3IC0gM3JlbSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkIHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWJhY2tkcm9wIHtcbiAgICAgICAgei1pbmRleDogNDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBib3R0b206IG1heCgwLjVyZW0sIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgei1pbmRleDogNDE7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgICB3aWR0aDogbWluKGNhbGMoMTAwdncgLSAxcmVtKSwgNDRyZW0pO1xuICAgICAgICBtaW4taGVpZ2h0OiBtaW4oMThyZW0sIGNhbGMoMTAwZHZoIC0gMXJlbSkpO1xuICAgICAgICBtYXgtaGVpZ2h0OiBtaW4oMzJyZW0sIGNhbGMoMTAwZHZoIC0gMnJlbSkpO1xuICAgICAgICBwYWRkaW5nOiAwLjhyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45OCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMS41cmVtIDRyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjI4KTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIGhlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIGgyLFxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlciBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIGhlYWRlciBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLXdpZHRoOiAxLjg1cmVtO1xuICAgICAgICBoZWlnaHQ6IDEuODVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWRpYWxvZy1hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWRpYWxvZy1jbG9zZSB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEuODVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC42MnJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzgpO1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuNzZyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zNXJlbSAwLjhyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCg1LjRyZW0sIDFmcikpO1xuICAgICAgICBnYXA6IDAuNTVyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiByZ2JhKDM2LCA0OCwgNjgsIDAuMzIpIHJnYmEoMjI2LCAyMzIsIDI0MCwgMC43Mik7XG4gICAgICAgIHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZTtcbiAgICAgICAgcGFkZGluZzogMC4xcmVtIDAuMXJlbSAwLjI1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXIsXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgICAgd2lkdGg6IDAuNjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10cmFjayxcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjcyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgICAgIGJvcmRlcjogMC4xNHJlbSBzb2xpZCByZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNzIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNiwgNDgsIDY4LCAwLjMyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZ3MtZHJhd2VyIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIGF1dG8gbWlubWF4KDAsIDFmcik7XG4gICAgICAgIHdpZHRoOiBtaW4oY2FsYygxMDB2dyAtIDFyZW0pLCA0OHJlbSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IG1pbigyMHJlbSwgY2FsYygxMDBkdmggLSAxcmVtKSk7XG4gICAgICAgIG1heC1oZWlnaHQ6IG1pbigzNHJlbSwgY2FsYygxMDBkdmggLSAycmVtKSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLW5vdGUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gbWlubWF4KDAsIDFmcik7XG4gICAgICAgIGdhcDogMC42NXJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICAgICAgICBwYWRkaW5nOiAwLjcycmVtIDAuOHJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjEyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NiksIHJnYmEoMjQ4LCAyNTAsIDI1MiwgMC45NikpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgOCUgMCUsIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjEyKSwgdHJhbnNwYXJlbnQgNDIlKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZ3Mtbm90ZSBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjc2KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjg2cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjZyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiByZ2JhKDM2LCA0OCwgNjgsIDAuMzIpIHJnYmEoMjI2LCAyMzIsIDI0MCwgMC43Mik7XG4gICAgICAgIHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZTtcbiAgICAgICAgcGFkZGluZzogMC4xcmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDUuNHJlbSwgNi41cmVtKSBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgZ2FwOiAwLjY1cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwLjQ1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjY1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXJvdy5pcy1leGhhdXN0ZWQge1xuICAgICAgICBvcGFjaXR5OiAwLjY4O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZHJhd2VyIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIGF1dG8gYXV0byBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgd2lkdGg6IG1pbihjYWxjKDEwMHZ3IC0gMXJlbSksIDU4cmVtKTtcbiAgICAgICAgbWluLWhlaWdodDogbWluKDI1cmVtLCBjYWxjKDEwMGR2aCAtIDFyZW0pKTtcbiAgICAgICAgbWF4LWhlaWdodDogbWluKDQycmVtLCBjYWxjKDEwMGR2aCAtIDJyZW0pKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWRyYXdlciBoZWFkZXIgPiBkaXY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMTVyZW07XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWRyYXdlciBoZWFkZXIgcCB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNTgpO1xuICAgICAgICBmb250LXNpemU6IDAuODJyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgbWlubWF4KDguNXJlbSwgMTNyZW0pO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyBsYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4yNXJlbTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjYyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc0cmVtO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgaW5wdXQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgc2VsZWN0IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgbWluLWhlaWdodDogMi4zNXJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjc1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTYpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjY1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgICBjb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWluayk7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZWRpdGlvbi1zdHJpcCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuMXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWVkaXRpb24tc3RyaXAgYnV0dG9uIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgICAgbWluLWhlaWdodDogMi4zNXJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjc1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4zOCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtcGFyY2htZW50KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1pbmspO1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuODJyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1lZGl0aW9uLXN0cmlwIGltZyB7XG4gICAgICAgIHdpZHRoOiAxLjJyZW07XG4gICAgICAgIGhlaWdodDogMS4ycmVtO1xuICAgICAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDYuNHJlbSwgMWZyKSk7XG4gICAgICAgIGdhcDogMC42NXJlbTtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgICAgICBzY3JvbGxiYXItY29sb3I6IHJnYmEoMzYsIDQ4LCA2OCwgMC4zMikgcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjcyKTtcbiAgICAgICAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlO1xuICAgICAgICBwYWRkaW5nOiAwLjFyZW0gMC4xcmVtIDAuMzVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgICAgIHdpZHRoOiAwLjY1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjcyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgICAgICAgYm9yZGVyOiAwLjE0cmVtIHNvbGlkIHJnYmEoMjI2LCAyMzIsIDI0MCwgMC43Mik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM2LCA0OCwgNjgsIDAuMzIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xuICAgICAgICBnYXA6IDAuMjZyZW07XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4taGVpZ2h0OiA3LjdyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNThyZW07XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KSwgcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjk2KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA3OCUgMTQlLCByZ2JhKDI1MCwgMjA0LCAyMSwgMC43OCkgMCAwLjQycmVtLCB0cmFuc3BhcmVudCAwLjQ0cmVtKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjQ1cmVtIDFyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgc21hbGwge1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNTgpO1xuICAgICAgICBmb250LXNpemU6IDAuNjJyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkIHN0cm9uZyB7XG4gICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjFyZW07XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICAgICAgICBmb250LXNpemU6IDAuODhyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA1O1xuICAgICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAgICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDM7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCBzcGFuIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICByaWdodDogMC40MnJlbTtcbiAgICAgICAgYm90dG9tOiAwLjQycmVtO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4td2lkdGg6IDEuNTVyZW07XG4gICAgICAgIGhlaWdodDogMS41NXJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjI4cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2VkZjJmNztcbiAgICAgICAgZm9udC1zaXplOiAwLjgycmVtO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgZW0ge1xuICAgICAgICBhbGlnbi1zZWxmOiBlbmQ7XG4gICAgICAgIG1heC13aWR0aDogY2FsYygxMDAlIC0gMS45cmVtKTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42NHJlbTtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCBwLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkIHAge1xuICAgICAgICBhbGlnbi1zZWxmOiBlbmQ7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjQpO1xuICAgICAgICBmb250LXNpemU6IDAuNzJyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcm93ID4gZGl2IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjM1cmVtO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cgPiBkaXYgcCB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzIpO1xuICAgICAgICBmb250LXNpemU6IDAuODVyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcm93ID4gZGl2IGJ1dHRvbiB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogc3RhcnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDIuMnJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjdyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTYsIDQyLCA2NywgMC4xNik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogIzEwMmE0MztcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcm93ID4gZGl2IGJ1dHRvbjpkaXNhYmxlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlMmU4ZjA7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNTgpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZCAuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbiB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyO1xuICAgICAgICB3aWR0aDogbWluKDEwMCUsIDUuOHJlbSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkIC5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiBtaW4oMTAwJSwgNi42cmVtKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24ge1xuICAgICAgICB3aWR0aDogbWluKDEwMCUsIDUuOHJlbSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uOmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC41NTtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uOmZvY3VzLXZpc2libGUge1xuICAgICAgICBvdXRsaW5lOiAwLjE4NzVyZW0gc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1mb2N1cykgMjQlLCB0cmFuc3BhcmVudCk7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwLjEyNXJlbTtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDcyMHB4KSB7XG4gICAgICAgIC5jaHJpc3RpYW5pdHktc2hlbGwge1xuICAgICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMDtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LXBsYXllcl9fc3VtbWFyeSxcbiAgICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIHtcbiAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1zdHJpcCB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKSBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICAgIGdhcDogMC4zNXJlbTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjM1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIge1xuICAgICAgICAgIGdhcDogMC4zNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHNtYWxsIHtcbiAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1oZWFkZXItYWN0aW9ucyB7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2hlcm8ge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcik7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19mYW4ge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDEwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19mYW4gdmFsLWNocmlzdGlhbml0eS1jYXJkIHtcbiAgICAgICAgICB3aWR0aDogY2xhbXAoNS4ycmVtLCAyMnZ3LCA2LjRyZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0IHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiBtaW4oMzByZW0sIGNhbGMoMTAwZHZoIC0gN3JlbSkpO1xuICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgICBib3JkZXItbGVmdDogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHtcbiAgICAgICAgICBtaW4td2lkdGg6IDMuNjVyZW07XG4gICAgICAgICAgcGFkZGluZzogMCAwLjM1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHN0cm9uZyB7XG4gICAgICAgICAgZm9udC1zaXplOiAxLjA1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS10YWJsZSB7XG4gICAgICAgICAgZ2FwOiAwLjM1cmVtO1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuMjVyZW07XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAwLjI1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItc2lkZSB7XG4gICAgICAgICAgcGFkZGluZzogMC4zcmVtIDAuMjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lIHtcbiAgICAgICAgICAtLWNocmlzdGlhbml0eS1iYXR0bGUtY2FyZC13aWR0aDogbWluKDUuMnJlbSwgY2FsYygoMTAwdncgLSA0LjI1cmVtKSAvIDQpKTtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCB2YXIoLS1jaHJpc3RpYW5pdHktYmF0dGxlLWNhcmQtd2lkdGgpKTtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA4Ljc1cmVtO1xuICAgICAgICAgIG92ZXJmbG93LXg6IGNsaXA7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuIHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAxMS40NXJlbTtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMnJlbTtcbiAgICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1zaGVsZiB7XG4gICAgICAgICAgbWluLWhlaWdodDogMTIuNjVyZW07XG4gICAgICAgICAgbWFyZ2luLXRvcDogLTFyZW07XG4gICAgICAgICAgcGFkZGluZy10b3A6IDEuMzVyZW07XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDAuOXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1zaGVsZi0tb3Bwb25lbnQge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDYuNjVyZW07XG4gICAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAwLjRyZW07XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDAuODVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1yYWNrIHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCg0LjVyZW0sIDUuN3JlbSkgbWlubWF4KDQuNHJlbSwgMWZyKSBtaW5tYXgoMy41cmVtLCA0LjhyZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSB7XG4gICAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCgwLCAxZnIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSB7XG4gICAgICAgICAgbWluLWhlaWdodDogNi4xNXJlbTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjU4cmVtIDAuNDZyZW0gMC41cmVtO1xuICAgICAgICAgIGdhcDogMC4yNHJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIGkge1xuICAgICAgICAgIHRvcDogMnJlbTtcbiAgICAgICAgICByaWdodDogMC41MnJlbTtcbiAgICAgICAgICB3aWR0aDogMi4zNXJlbTtcbiAgICAgICAgICBoZWlnaHQ6IDMuMjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUge1xuICAgICAgICAgIGhlaWdodDogNi44NXJlbTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICAgIG1heC1oZWlnaHQ6IDYuODVyZW07XG4gICAgICAgICAgcGFkZGluZzogMC44OHJlbSAwLjQ2cmVtIDAuNTVyZW07XG4gICAgICAgICAgZ2FwOiAwLjI0cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlIGkge1xuICAgICAgICAgIHRvcDogMi4yNXJlbTtcbiAgICAgICAgICBsZWZ0OiAwLjU2cmVtO1xuICAgICAgICAgIHdpZHRoOiAyLjM1cmVtO1xuICAgICAgICAgIGhlaWdodDogMy4yNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQge1xuICAgICAgICAgIHdpZHRoOiBjbGFtcCg0LjJyZW0sIDIwdncsIDUuN3JlbSk7XG4gICAgICAgICAgaGVpZ2h0OiBhdXRvO1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkIHtcbiAgICAgICAgICB3aWR0aDogY2xhbXAoNC41NXJlbSwgMjB2dywgNS43cmVtKTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDVyZW0sIDUuOHJlbSkgbWlubWF4KDAsIDFmcik7XG4gICAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcik7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZCB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoNS43cmVtLCAxZnIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCB7XG4gICAgICAgICAgbWluLWhlaWdodDogNy4yNXJlbTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudCB7XG4gICAgICAgICAgbWluLWhlaWdodDogNS43NXJlbTtcbiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMC43cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWZhbi0tb3Bwb25lbnQgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1iYWNrIHtcbiAgICAgICAgICB3aWR0aDogY2xhbXAoMy4zNXJlbSwgMTV2dywgNC4yNXJlbSk7XG4gICAgICAgICAgbWFyZ2luLWlubGluZTogLTAuNzJyZW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDaHJpc3RpYW5pdHlHYW1lQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBib290U3RhcnRlZEF0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGdhbWUgPSBzaWduYWw8Q2hyaXN0aWFuaXR5R2FtZVN0YXRlPihzdHJ1Y3R1cmVkQ2xvbmUoU1RBUlRJTkdfR0FNRSkpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2NyZWVuID0gc2lnbmFsPENocmlzdGlhbml0eVNjcmVlbj4oJ3NwbGFzaCcpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2F0YWxvZ0xvYWRTdGF0ZSA9IHNpZ25hbDxDaHJpc3RpYW5pdHlDYXRhbG9nTG9hZFN0YXRlPignbG9hZGluZycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRIYW5kQ2FyZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkQXR0YWNrZXIgPSBzaWduYWw8Q2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkUHJldmlldyA9IHNpZ25hbDxDaHJpc3RpYW5pdHlDYXJkUHJldmlldyB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRJbmZvID0gc2lnbmFsPENocmlzdGlhbml0eUluZm9QYW5lbCB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJldmlld1RpbHQgPSBzaWduYWw8Q2hyaXN0aWFuaXR5UHJldmlld1RpbHQ+KHsgcm90YXRlWDogNSwgcm90YXRlWTogLTUsIHNoaWZ0WDogMCwgc2hpZnRZOiAwIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaG92ZXJlZEhhbmRJbmRleCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRyYWdnaW5nQ2FyZElkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd0hpc3RvcnkgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2hvd0dhbGxlcnkgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb2ZmZXJpbmdzU2VhdCA9IHNpZ25hbDxDaHJpc3RpYW5pdHlTZWF0IHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBjYXJkQ2F0YWxvZyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbj4+KFNUQVJURVJfQ0FSRFMpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxsQ2F0YWxvZ0NhcmRzID0gc2lnbmFsPENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uW10+KE9iamVjdC52YWx1ZXMoU1RBUlRFUl9DQVJEUykpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2F0YWxvZ0xvYWRlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBnYWxsZXJ5U2VhcmNoID0gc2lnbmFsKCcnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGdhbGxlcnlUeXBlID0gc2lnbmFsPENocmlzdGlhbml0eUdhbGxlcnlUeXBlRmlsdGVyPignYWxsJyk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbkRyb3BPbkJhdHRsZVNsb3QgPSAoZHJhZzogQ2RrRHJhZzxzdHJpbmc+KTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oZHJhZy5kYXRhKTtcbiAgICByZXR1cm4gY2FyZC50eXBlID09PSAnY2hhcmFjdGVyJyAmJiB0aGlzLmNhblBsYXkoY2FyZCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbkRyb3BPbk9mZmVyaW5ncyA9IChkcmFnOiBDZGtEcmFnPHN0cmluZz4pOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGVmaW5pdGlvbihkcmFnLmRhdGEpO1xuICAgIHJldHVybiBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycgJiYgdGhpcy5jYW5QbGF5KGNhcmQpO1xuICB9O1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBwbGF5ZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdhbWUoKS5wbGF5ZXJzLlAxKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wcG9uZW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nYW1lKCkucGxheWVycy5QMik7XG4gIHByb3RlY3RlZCByZWFkb25seSBjdXJyZW50UGxheWVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nYW1lKCkucGxheWVyc1t0aGlzLmdhbWUoKS50dXJuT3duZXJdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzT3duVHVybiA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2FtZSgpLnR1cm5Pd25lciA9PT0gJ1AxJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBoYXNPcHBvbmVudEd1YXJkcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3Bwb25lbnQoKS5iYXR0bGVab25lLmxlbmd0aCA+IDApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3Bwb25lbnRIYW5kQ291bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wcG9uZW50KCkuaGFuZENvdW50ID8/IHRoaXMub3Bwb25lbnQoKS5oYW5kPy5sZW5ndGggPz8gMCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBnYWxsZXJ5Q2FyZHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmdhbGxlcnlTZWFyY2goKS50cmltKCkudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nYWxsZXJ5VHlwZSgpO1xuICAgIHJldHVybiB0aGlzLmFsbENhdGFsb2dDYXJkcygpXG4gICAgICAuZmlsdGVyKGNhcmQgPT4gdHlwZSA9PT0gJ2FsbCcgfHwgY2FyZC50eXBlID09PSB0eXBlKVxuICAgICAgLmZpbHRlcihjYXJkID0+IHtcbiAgICAgICAgaWYgKCFxdWVyeSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChjYXJkKTtcbiAgICAgICAgY29uc3QgaGF5c3RhY2sgPSBbdGV4dC5uYW1lLCBjYXJkLnR5cGUsIHRleHQuc2NyaXB0dXJlLCB0ZXh0LmFiaWxpdHlOYW1lLCB0ZXh0LmFiaWxpdHlUZXh0LCB0ZXh0LnZlcnNlVGV4dF1cbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgICAgICByZXR1cm4gaGF5c3RhY2suaW5jbHVkZXMocXVlcnkpO1xuICAgICAgfSlcbiAgICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gdGhpcy5jYXJkU29ydEtleShsZWZ0KS5sb2NhbGVDb21wYXJlKHRoaXMuY2FyZFNvcnRLZXkocmlnaHQpLCAnZXMnKSk7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2FsbGVyeUVkaXRpb25MYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuYWxsQ2F0YWxvZ0NhcmRzKCkubGVuZ3RoO1xuICAgIHJldHVybiBgJHt0aGlzLnQoJ2NocmlzdGlhbml0eUdlbmVzaXNFZGl0aW9uJyl9IMK3ICR7Y291bnR9ICR7dGhpcy50KCdjaHJpc3RpYW5pdHlDYXJkcycpfWA7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2FsbGVyeUVkaXRpb25JY29uID0gY29tcHV0ZWQoKCkgPT4gR0VORVNJU19JQ09OX1VSTCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBnYWxsZXJ5VHlwZU9wdGlvbnMgPSBjb21wdXRlZDxBcnJheTx7IHZhbHVlOiBDaHJpc3RpYW5pdHlHYWxsZXJ5VHlwZUZpbHRlcjsgbGFiZWw6IHN0cmluZyB9Pj4oKCkgPT4gW1xuICAgIHsgdmFsdWU6ICdhbGwnLCBsYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlBbGxDYXJkcycpIH0sXG4gICAgeyB2YWx1ZTogJ2xlYWRlcicsIGxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSB9LFxuICAgIHsgdmFsdWU6ICdvZmZlcmluZycsIGxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQ2FyZCcpIH0sXG4gICAgeyB2YWx1ZTogJ2NoYXJhY3RlcicsIGxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eUNoYXJhY3RlckNhcmQnKSB9LFxuICAgIHsgdmFsdWU6ICd3aXNkb20nLCBsYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlXaXNkb21DYXJkJykgfSxcbiAgICB7IHZhbHVlOiAnYWN0aW9uJywgbGFiZWw6IHRoaXMudCgnY2hyaXN0aWFuaXR5QWN0aW9uQ2FyZCcpIH0sXG4gICAgeyB2YWx1ZTogJ3Rvb2wnLCBsYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlUb29sQ2FyZCcpIH0sXG4gICAgeyB2YWx1ZTogJ3BsYWNlJywgbGFiZWw6IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxhY2VDYXJkJykgfSxcbiAgICB7IHZhbHVlOiAnZXZlbnQnLCBsYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlFdmVudENhcmQnKSB9LFxuICBdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNwbGFzaFN0YXR1c1RleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNhdGFsb2dMb2FkU3RhdGUoKTtcbiAgICBpZiAoc3RhdGUgPT09ICdyZWFkeScpIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eVNwbGFzaFJlYWR5Jyk7XG4gICAgaWYgKHN0YXRlID09PSAnZmFsbGJhY2snKSByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlTcGxhc2hGYWxsYmFjaycpO1xuICAgIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eVNwbGFzaExvYWRpbmcnKTtcbiAgfSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzdGFydEZlYXR1cmVkQ2FyZHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY2FyZHMgPSB0aGlzLmFsbENhdGFsb2dDYXJkcygpO1xuICAgIGNvbnN0IHByZWZlcnJlZCA9IFsnR0VOLTAwOScsICdHRU4tMDEzJywgJ0dFTi0wMzInXVxuICAgICAgLm1hcChpZCA9PiB0aGlzLmNhcmRDYXRhbG9nKClbaWRdKVxuICAgICAgLmZpbHRlcigoY2FyZCk6IGNhcmQgaXMgQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24gPT4gISFjYXJkKTtcbiAgICByZXR1cm4gKHByZWZlcnJlZC5sZW5ndGggPyBwcmVmZXJyZWQgOiBjYXJkcy5zbGljZSgwLCAzKSkuc2xpY2UoMCwgMyk7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZnV0dXJlTW9kZXMgPSBjb21wdXRlZCgoKSA9PiBbXG4gICAgeyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlTb2xvQm90TW9kZScpLCBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eVNvbG9Cb3RNb2RlQm9keScpIH0sXG4gICAgeyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlUd29QbGF5ZXJNb2RlJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5VHdvUGxheWVyTW9kZUJvZHknKSB9LFxuICAgIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5T25lRGV2aWNlTW9kZScpLCBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eU9uZURldmljZU1vZGVCb2R5JykgfSxcbiAgICB7IHRpdGxlOiB0aGlzLnQoJ2NocmlzdGlhbml0eVNwZWN0YXRvck1vZGUnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlTcGVjdGF0b3JNb2RlQm9keScpIH0sXG4gIF0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRDYXJkRGVmaW5pdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpO1xuICAgIHJldHVybiBzZWxlY3RlZCA/IHRoaXMuY2FyZERlZmluaXRpb24oc2VsZWN0ZWQpIDogbnVsbDtcbiAgfSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFByZXZpZXdDYXJkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNhcmRJZCA9IHRoaXMuc2VsZWN0ZWRQcmV2aWV3KCk/LmNhcmRJZDtcbiAgICByZXR1cm4gY2FyZElkID8gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkSWQpIDogbnVsbDtcbiAgfSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFByZXZpZXdSZW5kZXJDYXJkID0gY29tcHV0ZWQ8Q2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLnNlbGVjdGVkUHJldmlldygpO1xuICAgIGlmICghcHJldmlldykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuc2VsZWN0ZWRQcmV2aWV3Q2FyZCgpO1xuICAgIGlmIChjYXJkKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uVG9SZW5kZXJDYXJkKGNhcmQsIHtcbiAgICAgICAgc3RhdHVzVGV4dDogcHJldmlldy5ib2R5LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChwcmV2aWV3LmV5ZWJyb3cgPT09IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpKSB7XG4gICAgICBjb25zdCBbY3VycmVudEhwLCBtYXhIcF0gPSBwcmV2aWV3Lm1ldGEuc3BsaXQoJy8nKS5tYXAodmFsdWUgPT4gTnVtYmVyKHZhbHVlKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogYGxlYWRlci0ke3ByZXZpZXcudGl0bGUudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgICBuYW1lOiBwcmV2aWV3LnRpdGxlLFxuICAgICAgICB0eXBlOiAnbGVhZGVyJyxcbiAgICAgICAgdHlwZUxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgICAgY3VycmVudEhwOiBOdW1iZXIuaXNGaW5pdGUoY3VycmVudEhwKSA/IGN1cnJlbnRIcCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4SHA6IE51bWJlci5pc0Zpbml0ZShtYXhIcCkgPyBtYXhIcCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbGlmZTogTnVtYmVyLmlzRmluaXRlKGN1cnJlbnRIcCkgPyBjdXJyZW50SHAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFiaWxpdHlOYW1lOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgICAgYWJpbGl0eVRleHQ6IHByZXZpZXcuYm9keSxcbiAgICAgICAgdmVyc2VUZXh0OiBwcmV2aWV3LmJvZHksXG4gICAgICAgIGVkaXRpb246ICdNVlAnLFxuICAgICAgICBjb2xsZWN0b3JOdW1iZXI6ICdMSURFUicsXG4gICAgICAgIHllYXI6ICcyMDI2JyxcbiAgICAgICAgYXV0aG9yOiAnTVZQJyxcbiAgICAgICAgcmFyaXR5OiAnbGVnZW5kYXJ5JyxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZDogYHByZXZpZXctJHtwcmV2aWV3LnRpdGxlLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIG5hbWU6IHByZXZpZXcudGl0bGUsXG4gICAgICB0eXBlOiB0aGlzLnByZXZpZXdSZW5kZXJUeXBlKHByZXZpZXcuZXllYnJvdyksXG4gICAgICB0eXBlTGFiZWw6IHByZXZpZXcuZXllYnJvdyxcbiAgICAgIGFiaWxpdHlOYW1lOiBwcmV2aWV3LmV5ZWJyb3csXG4gICAgICBhYmlsaXR5VGV4dDogcHJldmlldy5ib2R5LFxuICAgICAgdmVyc2VUZXh0OiBwcmV2aWV3LmJvZHksXG4gICAgICBlZGl0aW9uOiAnTVZQJyxcbiAgICAgIGNvbGxlY3Rvck51bWJlcjogcHJldmlldy5leWVicm93LFxuICAgICAgeWVhcjogJzIwMjYnLFxuICAgICAgYXV0aG9yOiAnTVZQJyxcbiAgICAgIHJhcml0eTogJ25vcm1hbCcsXG4gICAgICBzdGF0dXNUZXh0OiBwcmV2aWV3Lm1ldGEsXG4gICAgfTtcbiAgfSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBwcmV2aWV3UnVsZSA9IGNvbXB1dGVkPENocmlzdGlhbml0eVByZXZpZXdSdWxlIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLnNlbGVjdGVkUHJldmlldygpO1xuICAgIGlmICghcHJldmlldykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuc2VsZWN0ZWRQcmV2aWV3Q2FyZCgpO1xuICAgIGlmIChjYXJkPy50eXBlID09PSAnb2ZmZXJpbmcnKSB7XG4gICAgICByZXR1cm4geyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ1J1bGVCb2R5JykgfTtcbiAgICB9XG4gICAgaWYgKGNhcmQ/LnR5cGUgPT09ICdjaGFyYWN0ZXInKSB7XG4gICAgICByZXR1cm4geyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJDYXJkJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyUnVsZUJvZHknKSB9O1xuICAgIH1cbiAgICBpZiAoY2FyZD8udHlwZSA9PT0gJ3dpc2RvbScpIHtcbiAgICAgIHJldHVybiB7IHRpdGxlOiB0aGlzLnQoJ2NocmlzdGlhbml0eVdpc2RvbUNhcmQnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlXaXNkb21SdWxlQm9keScpIH07XG4gICAgfVxuICAgIGlmIChjYXJkPy50eXBlID09PSAnYWN0aW9uJykge1xuICAgICAgcmV0dXJuIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5QWN0aW9uQ2FyZCcpLCBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eUFjdGlvblJ1bGVCb2R5JykgfTtcbiAgICB9XG4gICAgaWYgKGNhcmQ/LnR5cGUgPT09ICd0b29sJykge1xuICAgICAgcmV0dXJuIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5VG9vbENhcmQnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlUb29sUnVsZUJvZHknKSB9O1xuICAgIH1cbiAgICBpZiAoY2FyZD8udHlwZSA9PT0gJ3BsYWNlJykge1xuICAgICAgcmV0dXJuIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxhY2VDYXJkJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxhY2VSdWxlQm9keScpIH07XG4gICAgfVxuICAgIGlmIChjYXJkPy50eXBlID09PSAnZXZlbnQnKSB7XG4gICAgICByZXR1cm4geyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlFdmVudENhcmQnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlFdmVudFJ1bGVCb2R5JykgfTtcbiAgICB9XG4gICAgaWYgKGNhcmQ/LnR5cGUgPT09ICdsZWFkZXInKSB7XG4gICAgICByZXR1cm4geyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyUnVsZUJvZHknKSB9O1xuICAgIH1cbiAgICBpZiAocHJldmlldy5leWVicm93ID09PSB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSkge1xuICAgICAgcmV0dXJuIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLCBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlclJ1bGVCb2R5JykgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhdHVzVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhdHRhY2tlciA9IHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpO1xuICAgIGNvbnN0IGhhbmRDYXJkID0gdGhpcy5zZWxlY3RlZENhcmREZWZpbml0aW9uKCk7XG4gICAgaWYgKCF0aGlzLmlzT3duVHVybigpKSB7XG4gICAgICByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlXYWl0VHVybicpO1xuICAgIH1cbiAgICBpZiAoYXR0YWNrZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wcG9uZW50R3VhcmRzKCkgPyB0aGlzLnQoJ2NocmlzdGlhbml0eUNob29zZUNoYXJhY3RlclRhcmdldCcpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlDaG9vc2VUYXJnZXQnKTtcbiAgICB9XG4gICAgaWYgKGhhbmRDYXJkKSB7XG4gICAgICBpZiAoIXRoaXMuY2FuUGxheShoYW5kQ2FyZCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5TmVlZE9mZmVyaW5ncycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGhhbmRDYXJkLnR5cGUgPT09ICdvZmZlcmluZycgPyB0aGlzLnQoJ2NocmlzdGlhbml0eVBsYWNlT2ZmZXJpbmcnKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hvb3NlU2xvdCcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlDaG9vc2VDYXJkJyk7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKCdNaW5pR2FtZXMnLCBNSU5JX0dBTUVTX0kxOE4pO1xuICAgIHZvaWQgdGhpcy5sb2FkR2VuZXNpc0NhdGFsb2coKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdNaW5pR2FtZXMnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEdlbmVzaXNDYXRhbG9nKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGxldCBsb2FkZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChHRU5FU0lTX0NBVEFMT0dfVVJMKTtcbiAgICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCBjYXRhbG9nID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIENocmlzdGlhbml0eUVkaXRpb25DYXRhbG9nO1xuICAgICAgICBjb25zdCBjYXJkcyA9IChjYXRhbG9nLmNhcmRzID8/IFtdKS5tYXAoY2FyZCA9PiB0aGlzLm5vcm1hbGl6ZUNhdGFsb2dDYXJkKGNhcmQsIGNhdGFsb2cpKTtcbiAgICAgICAgaWYgKGNhcmRzLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2FyZENhdGFsb2cuc2V0KE9iamVjdC5mcm9tRW50cmllcyhjYXJkcy5tYXAoY2FyZCA9PiBbY2FyZC5pZCwgY2FyZF0pKSk7XG4gICAgICAgICAgdGhpcy5hbGxDYXRhbG9nQ2FyZHMuc2V0KGNhcmRzKTtcbiAgICAgICAgICB0aGlzLmNhdGFsb2dMb2FkZWQuc2V0KHRydWUpO1xuICAgICAgICAgIHRoaXMuZ2FtZS5zZXQodGhpcy5jcmVhdGVUdXRvcmlhbEdhbWUoY2FyZHMpKTtcbiAgICAgICAgICBsb2FkZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignQ2hyaXN0aWFuaXR5IGNhdGFsb2cgY291bGQgbm90IGJlIGxvYWRlZC4gRmFsbGluZyBiYWNrIHRvIHN0YXJ0ZXIgY2FyZHMuJywgZXJyb3IpO1xuICAgIH1cbiAgICB0aGlzLmNhdGFsb2dMb2FkU3RhdGUuc2V0KGxvYWRlZCA/ICdyZWFkeScgOiAnZmFsbGJhY2snKTtcbiAgICB0aGlzLmZpbmlzaFNwbGFzaCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5pc2hTcGxhc2goKTogdm9pZCB7XG4gICAgY29uc3QgZWxhcHNlZCA9IHBlcmZvcm1hbmNlLm5vdygpIC0gdGhpcy5ib290U3RhcnRlZEF0O1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IE1hdGgubWF4KDAsIFNQTEFTSF9NSU5fRFVSQVRJT05fTVMgLSBlbGFwc2VkKTtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zY3JlZW4oKSA9PT0gJ3NwbGFzaCcpIHtcbiAgICAgICAgdGhpcy5zY3JlZW4uc2V0KCdob21lJyk7XG4gICAgICB9XG4gICAgfSwgcmVtYWluaW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplQ2F0YWxvZ0NhcmQoY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sIGNhdGFsb2c6IENocmlzdGlhbml0eUVkaXRpb25DYXRhbG9nKTogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24ge1xuICAgIGNvbnN0IGVkaXRpb25JY29uID0gY2FyZC5lZGl0aW9uSWNvbiA/PyBjYXRhbG9nLmVkaXRpb24/Lmljb24gPz8gR0VORVNJU19JQ09OX1VSTDtcbiAgICBjb25zdCB2ZXJzZVRleHQgPSBjYXJkLnZlcnNlVGV4dCA/PyBjYXJkLmJpYmxlPy50ZXh0O1xuICAgIGNvbnN0IHNjcmlwdHVyZSA9IGNhcmQuc2NyaXB0dXJlID8/IHRoaXMuZm9ybWF0U2NyaXB0dXJlKGNhcmQuYmlibGUpO1xuICAgIGNvbnN0IG9mZmVyaW5nVmFsdWUgPSBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycgPyBjYXJkLm9mZmVyaW5nVmFsdWUgPz8gY2FyZC5saWZlID8/IGNhcmQuY29zdCA/PyAxIDogY2FyZC5vZmZlcmluZ1ZhbHVlO1xuICAgIGNvbnN0IGxpZmUgPSBjYXJkLnR5cGUgPT09ICdsZWFkZXInXG4gICAgICA/IGNhcmQubGVhZGVyTGlmZSA/PyBjYXJkLmxpZmUgPz8gMTBcbiAgICAgIDogY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnXG4gICAgICAgID8gb2ZmZXJpbmdWYWx1ZVxuICAgICAgICA6IGNhcmQubGlmZSA/PyAwO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jYXJkLFxuICAgICAgY29zdDogY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gMCA6IGNhcmQuY29zdCA/PyAwLFxuICAgICAgb2ZmZXJpbmdWYWx1ZSxcbiAgICAgIGxpZmUsXG4gICAgICBsZWFkZXJMaWZlOiBjYXJkLnR5cGUgPT09ICdsZWFkZXInID8gY2FyZC5sZWFkZXJMaWZlID8/IGxpZmUgOiBjYXJkLmxlYWRlckxpZmUsXG4gICAgICBhdHRhY2s6IGNhcmQudHlwZSA9PT0gJ2NoYXJhY3RlcicgPyBjYXJkLmF0dGFjayA/PyAwIDogY2FyZC5hdHRhY2ssXG4gICAgICBhYmlsaXR5TmFtZTogY2FyZC5hYmlsaXR5TmFtZSA/PyBjYXJkLmFiaWxpdGllcz8uWzBdPy5uYW1lLFxuICAgICAgYWJpbGl0eVRleHQ6IGNhcmQuYWJpbGl0eVRleHQgPz8gY2FyZC5hYmlsaXRpZXM/LlswXT8udGV4dCxcbiAgICAgIHZlcnNlVGV4dCxcbiAgICAgIHNjcmlwdHVyZSxcbiAgICAgIGVkaXRpb246IGNhcmQuZWRpdGlvbiA/PyBjYXRhbG9nLmVkaXRpb24/LmlkID8/ICdHRU4nLFxuICAgICAgZWRpdGlvbk51bWJlcjogY2FyZC5lZGl0aW9uTnVtYmVyID8/IGNhdGFsb2cuZWRpdGlvbj8ubnVtYmVyLFxuICAgICAgZWRpdGlvbkljb24sXG4gICAgICBpbWFnZVVybDogY2FyZC5pbWFnZVVybCA/PyBjYXJkLmFydD8uaW1hZ2VVcmwsXG4gICAgICBhdXRob3I6IGNhcmQuYXV0aG9yID8/IGNhcmQuYXJ0Py5hcnRpc3RDcmVkaXQsXG4gICAgICB5ZWFyOiBjYXJkLnllYXIgPz8gJzIwMjYnLFxuICAgICAgZnJvbnRUZW1wbGF0ZTogY2FyZC5mcm9udFRlbXBsYXRlID8/ICdnZW5lc2lzLWNsYXNzaWMnLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFNjcmlwdHVyZShiaWJsZT86IENocmlzdGlhbml0eUNhcmRCaWJsZVJlZmVyZW5jZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFiaWJsZT8uYm9vayB8fCAhYmlibGUucmVmZXJlbmNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBgJHtiaWJsZS5ib29rfSAke2JpYmxlLnJlZmVyZW5jZX0ke2JpYmxlLnZlcnNpb24gPyBgICR7YmlibGUudmVyc2lvbn1gIDogJyd9YDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVHV0b3JpYWxHYW1lKGNhcmRzOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbltdKTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlIHtcbiAgICBjb25zdCBsZWFkZXJzID0gY2FyZHMuZmlsdGVyKGNhcmQgPT4gY2FyZC50eXBlID09PSAnbGVhZGVyJyk7XG4gICAgY29uc3QgcGxheWVyTGVhZGVyID0gdGhpcy5maW5kQ2FyZChsZWFkZXJzLCAnQWTDoW4nKSA/PyBsZWFkZXJzWzBdO1xuICAgIGNvbnN0IG9wcG9uZW50TGVhZGVyID0gdGhpcy5maW5kQ2FyZChsZWFkZXJzLCAnTm/DqScpID8/IGxlYWRlcnNbMV0gPz8gbGVhZGVyc1swXTtcbiAgICBjb25zdCBvZmZlcmluZ3MgPSBjYXJkcy5maWx0ZXIoY2FyZCA9PiBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpLnNsaWNlKDAsIFRVVE9SSUFMX09GRkVSSU5HX0xJTUlUKTtcbiAgICBjb25zdCBjaGFyYWN0ZXJzID0gY2FyZHNcbiAgICAgIC5maWx0ZXIoY2FyZCA9PiBjYXJkLnR5cGUgPT09ICdjaGFyYWN0ZXInICYmIChjYXJkLmNvc3QgPz8gMCkgPD0gNCAmJiAoY2FyZC5hdHRhY2sgPz8gMCkgPj0gMCAmJiAoY2FyZC5saWZlID8/IDApID4gMClcbiAgICAgIC5zbGljZSgwLCBUVVRPUklBTF9DSEFSQUNURVJfTElNSVQpO1xuICAgIGNvbnN0IHN0YXJ0aW5nT2ZmZXJpbmcgPSBvZmZlcmluZ3NbMF0gPz8gU1RBUlRFUl9DQVJEU1snb19zaW1wbGUnXTtcbiAgICBjb25zdCB0dXRvcmlhbERlY2sgPSBbXG4gICAgICAuLi5vZmZlcmluZ3Muc2xpY2UoMSksXG4gICAgICAuLi5jaGFyYWN0ZXJzLFxuICAgICAgLi4ub2ZmZXJpbmdzLnNsaWNlKDAsIDEpLFxuICAgIF0uc2xpY2UoMCwgMjApO1xuICAgIGNvbnN0IHBsYXllckhhbmQgPSB0dXRvcmlhbERlY2suc2xpY2UoMCwgNCkubWFwKGNhcmQgPT4gY2FyZC5pZCk7XG4gICAgY29uc3Qgb3Bwb25lbnRCYXR0bGVDYXJkID0gY2hhcmFjdGVyc1swXTtcbiAgICBjb25zdCBzaGFyZWREZWNrID0gdHV0b3JpYWxEZWNrLnNsaWNlKDQpLm1hcChjYXJkID0+IGNhcmQuaWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0cnVjdHVyZWRDbG9uZShTVEFSVElOR19HQU1FKSxcbiAgICAgIHNoYXJlZERlY2ssXG4gICAgICBoaXN0b3J5Wm9uZTogW10sXG4gICAgICBwbGF5ZXJzOiB7XG4gICAgICAgIFAxOiB0aGlzLmNyZWF0ZVR1dG9yaWFsUGxheWVyKCdQMScsIHBsYXllckxlYWRlciwgc3RhcnRpbmdPZmZlcmluZywgcGxheWVySGFuZCwgW10pLFxuICAgICAgICBQMjogdGhpcy5jcmVhdGVUdXRvcmlhbFBsYXllcihcbiAgICAgICAgICAnUDInLFxuICAgICAgICAgIG9wcG9uZW50TGVhZGVyLFxuICAgICAgICAgIHN0YXJ0aW5nT2ZmZXJpbmcsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIG9wcG9uZW50QmF0dGxlQ2FyZCA/IFt0aGlzLmNyZWF0ZUNoYXJhY3Rlckluc3RhbmNlKG9wcG9uZW50QmF0dGxlQ2FyZCwgJ1AyJywgMCwgJ29wcF8wMDEnKV0gOiBbXSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICBsb2c6IFt0aGlzLnQoJ2NocmlzdGlhbml0eVR1dG9yaWFsTG9hZGVkJyldLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVR1dG9yaWFsUGxheWVyKFxuICAgIHNlYXQ6IENocmlzdGlhbml0eVNlYXQsXG4gICAgbGVhZGVyOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCxcbiAgICBzdGFydGluZ09mZmVyaW5nOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbixcbiAgICBoYW5kOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgICBiYXR0bGVab25lOiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZVtdLFxuICApOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSB7XG4gICAgY29uc3QgYmFzZSA9IFNUQVJUSU5HX0dBTUUucGxheWVyc1tzZWF0XTtcbiAgICBjb25zdCBsZWFkZXJMaWZlID0gbGVhZGVyPy5sZWFkZXJMaWZlID8/IGxlYWRlcj8ubGlmZSA/PyBiYXNlLmxlYWRlck1heEhwO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdHJ1Y3R1cmVkQ2xvbmUoYmFzZSksXG4gICAgICBsZWFkZXJDYXJkSWQ6IGxlYWRlcj8uaWQsXG4gICAgICBsZWFkZXJOYW1lOiBsZWFkZXIgPyB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChsZWFkZXIpLm5hbWUgOiBiYXNlLmxlYWRlck5hbWUsXG4gICAgICBsZWFkZXJIcDogbGVhZGVyTGlmZSxcbiAgICAgIGxlYWRlck1heEhwOiBsZWFkZXJMaWZlLFxuICAgICAgb2ZmZXJpbmdzOiBbdGhpcy5jcmVhdGVPZmZlcmluZ0luc3RhbmNlKHN0YXJ0aW5nT2ZmZXJpbmcsIHNlYXQsIGAke3NlYXQudG9Mb3dlckNhc2UoKX1fb2ZmZXJpbmdfMDAxYCldLFxuICAgICAgb2ZmZXJpbmdQbGF5ZWRUaGlzVHVybjogZmFsc2UsXG4gICAgICBoYW5kLFxuICAgICAgaGFuZENvdW50OiBoYW5kID8gdW5kZWZpbmVkIDogNCxcbiAgICAgIGJhdHRsZVpvbmUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT2ZmZXJpbmdJbnN0YW5jZShjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbiwgc2VhdDogQ2hyaXN0aWFuaXR5U2VhdCwgaW5zdGFuY2VJZDogc3RyaW5nKTogQ2hyaXN0aWFuaXR5T2ZmZXJpbmdJbnN0YW5jZSB7XG4gICAgY29uc3QgdmFsdWUgPSBjYXJkLm9mZmVyaW5nVmFsdWUgPz8gY2FyZC5saWZlID8/IDE7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluc3RhbmNlSWQsXG4gICAgICBjYXJkSWQ6IGNhcmQuaWQsXG4gICAgICBuYW1lOiB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChjYXJkKS5uYW1lLFxuICAgICAgb3duZXI6IHNlYXQsXG4gICAgICByZWFkeTogdHJ1ZSxcbiAgICAgIHZhbHVlLFxuICAgICAgYWJpbGl0eU5hbWU6IGNhcmQuYWJpbGl0eU5hbWUsXG4gICAgICBhYmlsaXR5VGV4dDogY2FyZC5hYmlsaXR5VGV4dCxcbiAgICAgIGFiaWxpdHlDb3N0OiBjYXJkLmFiaWxpdHlDb3N0LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNoYXJhY3Rlckluc3RhbmNlKGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uLCBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0LCBzbG90OiBudW1iZXIsIGluc3RhbmNlSWQ6IHN0cmluZyk6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlIHtcbiAgICBjb25zdCBsaWZlID0gY2FyZC5saWZlID8/IDE7XG4gICAgcmV0dXJuIHtcbiAgICAgIGluc3RhbmNlSWQsXG4gICAgICBjYXJkSWQ6IGNhcmQuaWQsXG4gICAgICBuYW1lOiB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChjYXJkKS5uYW1lLFxuICAgICAgb3duZXI6IHNlYXQsXG4gICAgICBjb250cm9sbGVyOiBzZWF0LFxuICAgICAgc2xvdCxcbiAgICAgIGF0dGFjazogY2FyZC5hdHRhY2sgPz8gMCxcbiAgICAgIGN1cnJlbnRIcDogbGlmZSxcbiAgICAgIG1heEhwOiBsaWZlLFxuICAgICAgY2FuQXR0YWNrOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQ2FyZChjYXJkczogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb25bXSwgbmFtZVBhcnQ6IHN0cmluZyk6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY2FyZHMuZmluZChjYXJkID0+IHRoaXMudHJhbnNsYXRlZENhcmRUZXh0KGNhcmQpLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhuYW1lUGFydC50b0xvd2VyQ2FzZSgpKSk7XG4gIH1cblxuICBwcml2YXRlIGNhcmRTb3J0S2V5KGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb2xsZWN0b3IgPSBjYXJkLmNvbGxlY3Rvck51bWJlciA/PyBjYXJkLmlkO1xuICAgIHJldHVybiBgJHtjYXJkLmVkaXRpb24gPz8gJyd9LSR7Y29sbGVjdG9yLnBhZFN0YXJ0KDgsICcwJyl9LSR7dGhpcy50cmFuc2xhdGVkQ2FyZFRleHQoY2FyZCkubmFtZX1gO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhcmREZWZpbml0aW9uKGNhcmRJZDogc3RyaW5nKTogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24ge1xuICAgIHJldHVybiB0aGlzLmNhcmRDYXRhbG9nKClbY2FyZElkXSA/PyBTVEFSVEVSX0NBUkRTW2NhcmRJZF0gPz8gU1RBUlRFUl9DQVJEU1sncF9zY291dCddO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2xhdGVkQ2FyZFRleHQoY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24pOiBDaHJpc3RpYW5pdHlSZXNvbHZlZENhcmRUZXh0IHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCB0cmFuc2xhdGlvbiA9IGNhcmQuaTE4bj8uW2xhbmddID8/IGNhcmQuaTE4bj8uWydlcyddO1xuICAgIGNvbnN0IHByaW1hcnlBYmlsaXR5ID0gdHJhbnNsYXRpb24/LmFiaWxpdGllcz8uWzBdID8/IGNhcmQuYWJpbGl0aWVzPy5bMF07XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRyYW5zbGF0aW9uPy5uYW1lID8/IGNhcmQubmFtZSxcbiAgICAgIGZ1bGxOYW1lOiB0cmFuc2xhdGlvbj8uZnVsbE5hbWUgPz8gY2FyZC5mdWxsTmFtZSxcbiAgICAgIHZlcnNlVGV4dDogdHJhbnNsYXRpb24/LnZlcnNlVGV4dCA/PyBjYXJkLnZlcnNlVGV4dCxcbiAgICAgIHNjcmlwdHVyZTogdHJhbnNsYXRpb24/LnNjcmlwdHVyZSA/PyBjYXJkLnNjcmlwdHVyZSxcbiAgICAgIGFiaWxpdHlOYW1lOiB0cmFuc2xhdGlvbj8uYWJpbGl0eU5hbWUgPz8gcHJpbWFyeUFiaWxpdHk/Lm5hbWUgPz8gY2FyZC5hYmlsaXR5TmFtZSxcbiAgICAgIGFiaWxpdHlUZXh0OiB0cmFuc2xhdGlvbj8uYWJpbGl0eVRleHQgPz8gcHJpbWFyeUFiaWxpdHk/LnRleHQgPz8gY2FyZC5hYmlsaXR5VGV4dCxcbiAgICAgIGFiaWxpdGllczogdHJhbnNsYXRpb24/LmFiaWxpdGllcyA/PyBjYXJkLmFiaWxpdGllcyxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhcmREaXNwbGF5TmFtZShjYXJkSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlZENhcmRUZXh0KHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKSkubmFtZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwbGF5ZXJMZWFkZXJEaXNwbGF5TmFtZShwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGxheWVyLmxlYWRlckNhcmRJZCA/IHRoaXMuY2FyZERpc3BsYXlOYW1lKHBsYXllci5sZWFkZXJDYXJkSWQpIDogcGxheWVyLmxlYWRlck5hbWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2F0YWxvZ1N0YXR1c0xhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNhdGFsb2dMb2FkU3RhdGUoKTtcbiAgICBpZiAoc3RhdGUgPT09ICdyZWFkeScpIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eUNhdGFsb2dSZWFkeScpO1xuICAgIGlmIChzdGF0ZSA9PT0gJ2ZhbGxiYWNrJykgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5Q2F0YWxvZ0ZhbGxiYWNrJyk7XG4gICAgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5Q2F0YWxvZ0xvYWRpbmcnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydEZlYXR1cmVkQ2FyZFRyYW5zZm9ybShpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1zID0gW1xuICAgICAgJ3RyYW5zbGF0ZVgoLTEuNHJlbSkgcm90YXRlKC05ZGVnKScsXG4gICAgICAndHJhbnNsYXRlWSgtMC41NXJlbSkgcm90YXRlKDJkZWcpJyxcbiAgICAgICd0cmFuc2xhdGVYKDEuNHJlbSkgcm90YXRlKDEwZGVnKScsXG4gICAgXTtcbiAgICByZXR1cm4gdHJhbnNmb3Jtc1tpbmRleF0gPz8gJ25vbmUnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhcmRUeXBlTGFiZWwoY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGxhYmVsczogUmVjb3JkPENocmlzdGlhbml0eUNhcmRUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgYWN0aW9uOiB0aGlzLnQoJ2NocmlzdGlhbml0eUFjdGlvbkNhcmQnKSxcbiAgICAgIGNoYXJhY3RlcjogdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJDYXJkJyksXG4gICAgICBldmVudDogdGhpcy50KCdjaHJpc3RpYW5pdHlFdmVudENhcmQnKSxcbiAgICAgIGxlYWRlcjogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJyksXG4gICAgICBvZmZlcmluZzogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSxcbiAgICAgIHBsYWNlOiB0aGlzLnQoJ2NocmlzdGlhbml0eVBsYWNlQ2FyZCcpLFxuICAgICAgdG9vbDogdGhpcy50KCdjaHJpc3RpYW5pdHlUb29sQ2FyZCcpLFxuICAgICAgd2lzZG9tOiB0aGlzLnQoJ2NocmlzdGlhbml0eVdpc2RvbUNhcmQnKSxcbiAgICB9O1xuICAgIHJldHVybiBsYWJlbHNbY2FyZC50eXBlXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZpbml0aW9uVG9SZW5kZXJDYXJkKFxuICAgIGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uLFxuICAgIG92ZXJyaWRlczogUGFydGlhbDxDaHJpc3RpYW5pdHlDYXJkUmVuZGVyTW9kZWw+ID0ge30sXG4gICk6IENocmlzdGlhbml0eUNhcmRSZW5kZXJNb2RlbCB7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMudHJhbnNsYXRlZENhcmRUZXh0KGNhcmQpO1xuICAgIGNvbnN0IGJhc2U6IENocmlzdGlhbml0eUNhcmRSZW5kZXJNb2RlbCA9IHtcbiAgICAgIGlkOiBjYXJkLmlkLFxuICAgICAgbmFtZTogdGV4dC5uYW1lLFxuICAgICAgdHlwZTogY2FyZC50eXBlLFxuICAgICAgdHlwZUxhYmVsOiB0aGlzLmNhcmRUeXBlTGFiZWwoY2FyZCksXG4gICAgICBjb3N0OiBjYXJkLmNvc3QsXG4gICAgICBvZmZlcmluZ1ZhbHVlOiBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycgPyBjYXJkLm9mZmVyaW5nVmFsdWUgPz8gY2FyZC5saWZlIDogdW5kZWZpbmVkLFxuICAgICAgYXR0YWNrOiBjYXJkLnR5cGUgPT09ICdjaGFyYWN0ZXInID8gY2FyZC5hdHRhY2sgOiB1bmRlZmluZWQsXG4gICAgICBsaWZlOiBjYXJkLmxpZmUsXG4gICAgICBjdXJyZW50SHA6IGNhcmQubGlmZSxcbiAgICAgIG1heEhwOiBjYXJkLmxpZmUsXG4gICAgICBhYmlsaXR5TmFtZTogdGV4dC5hYmlsaXR5TmFtZSxcbiAgICAgIGFiaWxpdHlUZXh0OiB0ZXh0LmFiaWxpdHlUZXh0IHx8IHRoaXMuZGVmYXVsdENhcmRCb2R5KGNhcmQudHlwZSksXG4gICAgICB2ZXJzZVRleHQ6IHRleHQudmVyc2VUZXh0LFxuICAgICAgc2NyaXB0dXJlOiB0ZXh0LnNjcmlwdHVyZSxcbiAgICAgIGVkaXRpb246IGNhcmQuZWRpdGlvbixcbiAgICAgIGNvbGxlY3Rvck51bWJlcjogY2FyZC5jb2xsZWN0b3JOdW1iZXIsXG4gICAgICBlZGl0aW9uSWNvbjogY2FyZC5lZGl0aW9uSWNvbiA/PyAoY2FyZC5lZGl0aW9uID09PSAnR0VOJyA/IEdFTkVTSVNfSUNPTl9VUkwgOiB1bmRlZmluZWQpLFxuICAgICAgeWVhcjogY2FyZC55ZWFyLFxuICAgICAgYXV0aG9yOiBjYXJkLmF1dGhvcixcbiAgICAgIHJhcml0eTogY2FyZC5yYXJpdHksXG4gICAgICBpbWFnZVVybDogY2FyZC5pbWFnZVVybCxcbiAgICAgIGZyb250VGVtcGxhdGU6IGNhcmQuZnJvbnRUZW1wbGF0ZSA/PyAoY2FyZC5lZGl0aW9uID09PSAnR0VOJyA/ICdnZW5lc2lzLWNsYXNzaWMnIDogdW5kZWZpbmVkKSxcbiAgICB9O1xuICAgIHJldHVybiB7IC4uLmJhc2UsIC4uLm92ZXJyaWRlcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0Q2FyZEJvZHkodHlwZTogQ2hyaXN0aWFuaXR5Q2FyZFR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJvZGllczogUmVjb3JkPENocmlzdGlhbml0eUNhcmRUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgYWN0aW9uOiB0aGlzLnQoJ2NocmlzdGlhbml0eUFjdGlvblJ1bGVCb2R5JyksXG4gICAgICBjaGFyYWN0ZXI6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyQm9keScpLFxuICAgICAgZXZlbnQ6IHRoaXMudCgnY2hyaXN0aWFuaXR5RXZlbnRSdWxlQm9keScpLFxuICAgICAgbGVhZGVyOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckJvZHknKSxcbiAgICAgIG9mZmVyaW5nOiB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQm9keScpLFxuICAgICAgcGxhY2U6IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxhY2VSdWxlQm9keScpLFxuICAgICAgdG9vbDogdGhpcy50KCdjaHJpc3RpYW5pdHlUb29sUnVsZUJvZHknKSxcbiAgICAgIHdpc2RvbTogdGhpcy50KCdjaHJpc3RpYW5pdHlXaXNkb21SdWxlQm9keScpLFxuICAgIH07XG4gICAgcmV0dXJuIGJvZGllc1t0eXBlXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGFyYWN0ZXJSZW5kZXJDYXJkKGNhcmQ6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlKTogQ2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkLmNhcmRJZCk7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvblRvUmVuZGVyQ2FyZChkZWZpbml0aW9uLCB7XG4gICAgICBpZDogY2FyZC5pbnN0YW5jZUlkLFxuICAgICAgYXR0YWNrOiBjYXJkLmF0dGFjayxcbiAgICAgIGxpZmU6IGNhcmQubWF4SHAsXG4gICAgICBjdXJyZW50SHA6IGNhcmQuY3VycmVudEhwLFxuICAgICAgbWF4SHA6IGNhcmQubWF4SHAsXG4gICAgICBzdGF0dXNUZXh0OiBjYXJkLmNhbkF0dGFjayA/IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyUmVhZHknKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyRXhoYXVzdGVkJyksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbGVhZGVyUmVuZGVyQ2FyZChwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlKTogQ2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsIHtcbiAgICBpZiAocGxheWVyLmxlYWRlckNhcmRJZCkge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuY2FyZERlZmluaXRpb24ocGxheWVyLmxlYWRlckNhcmRJZCk7XG4gICAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uVG9SZW5kZXJDYXJkKGRlZmluaXRpb24sIHtcbiAgICAgICAgaWQ6IGAke3BsYXllci5zZWF0fS1sZWFkZXJgLFxuICAgICAgICBuYW1lOiB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChkZWZpbml0aW9uKS5uYW1lLFxuICAgICAgICB0eXBlOiAnbGVhZGVyJyxcbiAgICAgICAgdHlwZUxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgICAgbGlmZTogcGxheWVyLmxlYWRlckhwLFxuICAgICAgICBjdXJyZW50SHA6IHBsYXllci5sZWFkZXJIcCxcbiAgICAgICAgbWF4SHA6IHBsYXllci5sZWFkZXJNYXhIcCxcbiAgICAgICAgc3RhdHVzVGV4dDogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJCb2R5JyksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtwbGF5ZXIuc2VhdH0tbGVhZGVyYCxcbiAgICAgIG5hbWU6IHBsYXllci5sZWFkZXJOYW1lLFxuICAgICAgdHlwZTogJ2xlYWRlcicsXG4gICAgICB0eXBlTGFiZWw6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLFxuICAgICAgbGlmZTogcGxheWVyLmxlYWRlckhwLFxuICAgICAgY3VycmVudEhwOiBwbGF5ZXIubGVhZGVySHAsXG4gICAgICBtYXhIcDogcGxheWVyLmxlYWRlck1heEhwLFxuICAgICAgYWJpbGl0eU5hbWU6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLFxuICAgICAgYWJpbGl0eVRleHQ6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQm9keScpLFxuICAgICAgdmVyc2VUZXh0OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckJvZHknKSxcbiAgICAgIGVkaXRpb246ICdNVlAnLFxuICAgICAgY29sbGVjdG9yTnVtYmVyOiAnTElERVInLFxuICAgICAgZWRpdGlvbkljb246IEdFTkVTSVNfSUNPTl9VUkwsXG4gICAgICB5ZWFyOiAnMjAyNicsXG4gICAgICBhdXRob3I6ICdNVlAnLFxuICAgICAgcmFyaXR5OiAnbGVnZW5kYXJ5JyxcbiAgICAgIGZyb250VGVtcGxhdGU6ICdnZW5lc2lzLWNsYXNzaWMnLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgb2ZmZXJpbmdSZW5kZXJDYXJkKG9mZmVyaW5nOiBDaHJpc3RpYW5pdHlPZmZlcmluZ0luc3RhbmNlKTogQ2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5jYXJkRGVmaW5pdGlvbihvZmZlcmluZy5jYXJkSWQpO1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChkZWZpbml0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uVG9SZW5kZXJDYXJkKGRlZmluaXRpb24sIHtcbiAgICAgIGlkOiBvZmZlcmluZy5pbnN0YW5jZUlkLFxuICAgICAgbmFtZTogdGV4dC5uYW1lLFxuICAgICAgdHlwZTogJ29mZmVyaW5nJyxcbiAgICAgIHR5cGVMYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSxcbiAgICAgIG9mZmVyaW5nVmFsdWU6IG9mZmVyaW5nLnZhbHVlLFxuICAgICAgbGlmZTogb2ZmZXJpbmcudmFsdWUsXG4gICAgICBjdXJyZW50SHA6IG9mZmVyaW5nLnZhbHVlLFxuICAgICAgbWF4SHA6IG9mZmVyaW5nLnZhbHVlLFxuICAgICAgYWJpbGl0eU5hbWU6IHRleHQuYWJpbGl0eU5hbWUgPz8gb2ZmZXJpbmcuYWJpbGl0eU5hbWUsXG4gICAgICBhYmlsaXR5VGV4dDogdGV4dC5hYmlsaXR5VGV4dCA/PyBvZmZlcmluZy5hYmlsaXR5VGV4dCA/PyB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nTm9BYmlsaXR5JyksXG4gICAgICBzdGF0dXNUZXh0OiBvZmZlcmluZy5yZWFkeSA/IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdSZWFkeScpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0V4aGF1c3RlZCcpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmV2aWV3UmVuZGVyVHlwZSh0eXBlTGFiZWw6IHN0cmluZyk6IENocmlzdGlhbml0eUNhcmRSZW5kZXJUeXBlIHtcbiAgICBpZiAodHlwZUxhYmVsID09PSB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSkgcmV0dXJuICdsZWFkZXInO1xuICAgIGlmICh0eXBlTGFiZWwgPT09IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdDYXJkJykpIHJldHVybiAnb2ZmZXJpbmcnO1xuICAgIHJldHVybiAnY2hhcmFjdGVyJztcbiAgfVxuXG4gIHByb3RlY3RlZCBjYXJkVHlwZUljb25VcmwoY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNhcmRUeXBlSWNvblVybEZvclR5cGUoY2FyZC50eXBlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcmV2aWV3VHlwZUljb25VcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5zZWxlY3RlZFByZXZpZXcoKTtcbiAgICBpZiAocHJldmlldz8uZXllYnJvdyA9PT0gdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJykpIHJldHVybiB0aGlzLmNhcmRUeXBlSWNvblVybEZvclR5cGUoJ2xlYWRlcicpO1xuICAgIGlmIChwcmV2aWV3Py5leWVicm93ID09PSB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQ2FyZCcpKSByZXR1cm4gdGhpcy5jYXJkVHlwZUljb25VcmxGb3JUeXBlKCdvZmZlcmluZycpO1xuICAgIHJldHVybiB0aGlzLmNhcmRUeXBlSWNvblVybEZvclR5cGUoJ2NoYXJhY3RlcicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhcmRUeXBlSWNvblVybEZvclR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdHlwZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgIGNvbnN0IGljb24gPSBub3JtYWxpemVkID09PSAnbGlkZXInID8gJ2xlYWRlcicgOiBub3JtYWxpemVkID09PSAncGVyc29uYWplJyA/ICdjaGFyYWN0ZXInIDogbm9ybWFsaXplZCA9PT0gJ29mcmVuZGEnID8gJ29mZmVyaW5nJyA6IG5vcm1hbGl6ZWQ7XG4gICAgcmV0dXJuIGBhc3NldHMvZ2FtZXMvY2hyaXN0aWFuaXR5L2ljb25zLyR7aWNvbn0ucG5nYDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvZmZlcmluZ1BpcHModmFsdWU6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHVua25vd25bXSB7XG4gICAgY29uc3QgY291bnQgPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGNvdW50KSB8fCBjb3VudCA8PSAwKSByZXR1cm4gW107XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IE1hdGgubWluKE1hdGguZmxvb3IoY291bnQpLCA1KSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBiYXR0bGVTbG90cyhzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogQXJyYXk8eyB0cmFja0lkOiBzdHJpbmc7IGNhcmQ/OiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSB9PiB7XG4gICAgY29uc3QgY2FyZHMgPSB0aGlzLmdhbWUoKS5wbGF5ZXJzW3NlYXRdLmJhdHRsZVpvbmU7XG4gICAgY29uc3QgcG9zaXRpb25lZENhcmRzID0gbmV3IE1hcDxudW1iZXIsIENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlPigpO1xuICAgIGNhcmRzLmZvckVhY2goKGNhcmQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzbG90ID0gTnVtYmVyLmlzSW50ZWdlcihjYXJkLnNsb3QpID8gY2FyZC5zbG90ID8/IGluZGV4IDogaW5kZXg7XG4gICAgICBpZiAoc2xvdCA+PSAwICYmIHNsb3QgPCA0ICYmICFwb3NpdGlvbmVkQ2FyZHMuaGFzKHNsb3QpKSB7XG4gICAgICAgIHBvc2l0aW9uZWRDYXJkcy5zZXQoc2xvdCwgY2FyZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDQgfSwgKF8sIGluZGV4KSA9PiAoe1xuICAgICAgdHJhY2tJZDogcG9zaXRpb25lZENhcmRzLmdldChpbmRleCk/Lmluc3RhbmNlSWQgPz8gYCR7c2VhdH0tZW1wdHktJHtpbmRleH1gLFxuICAgICAgY2FyZDogcG9zaXRpb25lZENhcmRzLmdldChpbmRleCksXG4gICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJhdHRsZVNsb3REcm9wSWQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjaHJpc3RpYW5pdHktYmF0dGxlLXNsb3QtJHtpbmRleH1gO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRyb3BUYXJnZXRJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2NocmlzdGlhbml0eS1vZmZlcmluZ3MtZHJvcCcsIC4uLnRoaXMuYmF0dGxlU2xvdHMoJ1AxJykubWFwKChfLCBpbmRleCkgPT4gdGhpcy5iYXR0bGVTbG90RHJvcElkKGluZGV4KSldO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhpZGRlbkhhbmRDYXJkcyhjb3VudDogbnVtYmVyKTogdW5rbm93bltdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmFuVHJhbnNmb3JtKGluZGV4OiBudW1iZXIsIHRvdGFsOiBudW1iZXIsIG9wcG9uZW50OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAodG90YWwgPD0gMSkgcmV0dXJuICdub25lJztcbiAgICBjb25zdCBjZW50ZXIgPSAodG90YWwgLSAxKSAvIDI7XG4gICAgY29uc3Qgb2Zmc2V0ID0gaW5kZXggLSBjZW50ZXI7XG4gICAgY29uc3Qgcm90YXRlID0gb2Zmc2V0ICogKG9wcG9uZW50ID8gNiA6IDUpO1xuICAgIGNvbnN0IGxpZnQgPSBNYXRoLmFicyhvZmZzZXQpICogMC4yNTtcbiAgICBjb25zdCBob3ZlckxpZnQgPSBvcHBvbmVudCA/IDAgOiB0aGlzLmhhbmRXYXZlTGlmdChpbmRleCk7XG4gICAgY29uc3Qgc2NhbGUgPSBvcHBvbmVudCA/IDEgOiB0aGlzLmhhbmRXYXZlU2NhbGUoaW5kZXgpO1xuICAgIGNvbnN0IGZhbkxpZnQgPSBvcHBvbmVudCA/IE1hdGguYWJzKG9mZnNldCkgKiAwLjIyIDogbGlmdCArIGhvdmVyTGlmdDtcbiAgICBjb25zdCBmYW5TcHJlYWQgPSBvcHBvbmVudCA/IG9mZnNldCAqIDAuMDIgOiAwO1xuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7ZmFuU3ByZWFkfXJlbSwgJHtmYW5MaWZ0fXJlbSkgcm90YXRlKCR7cm90YXRlfWRlZykgc2NhbGUoJHtzY2FsZX0pYDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kQ2FyZFpJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBob3ZlcmVkID0gdGhpcy5ob3ZlcmVkSGFuZEluZGV4KCk7XG4gICAgaWYgKGhvdmVyZWQgPT09IG51bGwpIHJldHVybiAyO1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnMoaW5kZXggLSBob3ZlcmVkKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMiwgOCAtIGRpc3RhbmNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRIb3ZlcmVkSGFuZEluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmhvdmVyZWRIYW5kSW5kZXguc2V0KGluZGV4KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhckhvdmVyZWRIYW5kSW5kZXgoKTogdm9pZCB7XG4gICAgdGhpcy5ob3ZlcmVkSGFuZEluZGV4LnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWxlYXNlSG92ZXJlZEhhbmQoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5wb2ludGVyVHlwZSAhPT0gJ21vdXNlJykge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy5jbGVhckhvdmVyZWRIYW5kSW5kZXgoKSwgMTgwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRXYXZlTGlmdChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBob3ZlcmVkID0gdGhpcy5ob3ZlcmVkSGFuZEluZGV4KCk7XG4gICAgaWYgKGhvdmVyZWQgPT09IG51bGwpIHJldHVybiAwO1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnMoaW5kZXggLSBob3ZlcmVkKTtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDApIHJldHVybiAtMS4xNTtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDEpIHJldHVybiAtMC41ODtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDIpIHJldHVybiAtMC4yMjtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZFdhdmVTY2FsZShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBob3ZlcmVkID0gdGhpcy5ob3ZlcmVkSGFuZEluZGV4KCk7XG4gICAgaWYgKGhvdmVyZWQgPT09IG51bGwpIHJldHVybiAxO1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnMoaW5kZXggLSBob3ZlcmVkKTtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDApIHJldHVybiAxLjA2O1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMSkgcmV0dXJuIDEuMDM7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZHlPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBsYXllci5vZmZlcmluZ3MucmVkdWNlKCh0b3RhbCwgb2ZmZXJpbmcpID0+IHRvdGFsICsgKG9mZmVyaW5nLnJlYWR5ID8gb2ZmZXJpbmcudmFsdWUgOiAwKSwgMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG90YWxPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBsYXllci5vZmZlcmluZ3MucmVkdWNlKCh0b3RhbCwgb2ZmZXJpbmcpID0+IHRvdGFsICsgb2ZmZXJpbmcudmFsdWUsIDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhblBsYXkoY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuaXNPd25UdXJuKCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSByZXR1cm4gIXRoaXMucGxheWVyKCkub2ZmZXJpbmdQbGF5ZWRUaGlzVHVybjtcbiAgICBpZiAoY2FyZC50eXBlID09PSAnY2hhcmFjdGVyJykgcmV0dXJuIHRoaXMucmVhZHlPZmZlcmluZ3ModGhpcy5wbGF5ZXIoKSkgPj0gKGNhcmQuY29zdCA/PyAwKSAmJiB0aGlzLnBsYXllcigpLmJhdHRsZVpvbmUubGVuZ3RoIDwgNDtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuUGxheVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEhhbmRDYXJkKCk7XG4gICAgcmV0dXJuICEhc2VsZWN0ZWQgJiYgdGhpcy5jYW5QbGF5KHRoaXMuY2FyZERlZmluaXRpb24oc2VsZWN0ZWQpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RlZEFjdGlvbkxhYmVsKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkQ2FyZERlZmluaXRpb24oKTtcbiAgICBpZiAoIXNlbGVjdGVkKSByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlQbGF5Q2FyZCcpO1xuICAgIHJldHVybiBzZWxlY3RlZC50eXBlID09PSAnb2ZmZXJpbmcnID8gdGhpcy50KCdjaHJpc3RpYW5pdHlQbGF5T2ZmZXJpbmcnKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxheUNhcmQnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RlZEFjdGlvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENhcmREZWZpbml0aW9uKCk7XG4gICAgaWYgKCFzZWxlY3RlZCB8fCAhdGhpcy5jYW5QbGF5KHNlbGVjdGVkKSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHNlbGVjdGVkLnR5cGUgPT09ICdjaGFyYWN0ZXInO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhblBsYWNlU2VsZWN0ZWRDaGFyYWN0ZXIoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkQ2FyZERlZmluaXRpb24oKTtcbiAgICByZXR1cm4gISFzZWxlY3RlZCAmJiBzZWxlY3RlZC50eXBlID09PSAnY2hhcmFjdGVyJyAmJiB0aGlzLmNhblBsYXkoc2VsZWN0ZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhblBsYWNlU2VsZWN0ZWRPZmZlcmluZygpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDYXJkRGVmaW5pdGlvbigpO1xuICAgIHJldHVybiAhIXNlbGVjdGVkICYmIHNlbGVjdGVkLnR5cGUgPT09ICdvZmZlcmluZycgJiYgdGhpcy5jYW5QbGF5KHNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0RyYWdnaW5nQ2hhcmFjdGVyKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNhcmRJZCA9IHRoaXMuZHJhZ2dpbmdDYXJkSWQoKTtcbiAgICBpZiAoIWNhcmRJZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGNhcmRJZCk7XG4gICAgcmV0dXJuIGNhcmQudHlwZSA9PT0gJ2NoYXJhY3RlcicgJiYgdGhpcy5jYW5QbGF5KGNhcmQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzRHJhZ2dpbmdPZmZlcmluZygpOiBib29sZWFuIHtcbiAgICBjb25zdCBjYXJkSWQgPSB0aGlzLmRyYWdnaW5nQ2FyZElkKCk7XG4gICAgaWYgKCFjYXJkSWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgIHJldHVybiBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycgJiYgdGhpcy5jYW5QbGF5KGNhcmQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0RHJhZ2dpbmdDYXJkKGNhcmRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KGNhcmRJZCk7XG4gICAgdGhpcy5kcmFnZ2luZ0NhcmRJZC5zZXQoY2FyZElkKTtcbiAgICB0aGlzLmNsb3NlUHJldmlldygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVuZERyYWdnaW5nQ2FyZCgpOiB2b2lkIHtcbiAgICB0aGlzLmRyYWdnaW5nQ2FyZElkLnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkcm9wT25CYXR0bGVTbG90KGV2ZW50OiBDZGtEcmFnRHJvcDxudW1iZXIsIHVua25vd24sIHN0cmluZz4sIHNsb3RJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oZXZlbnQuaXRlbS5kYXRhKTtcbiAgICBpZiAoY2FyZC50eXBlICE9PSAnY2hhcmFjdGVyJykgcmV0dXJuO1xuICAgIHRoaXMucGxheUNhcmRGcm9tSGFuZChldmVudC5pdGVtLmRhdGEsIHNsb3RJbmRleCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZHJvcE9uT2ZmZXJpbmdzKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duLCB1bmtub3duLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oZXZlbnQuaXRlbS5kYXRhKTtcbiAgICBpZiAoY2FyZC50eXBlICE9PSAnb2ZmZXJpbmcnKSByZXR1cm47XG4gICAgdGhpcy5wbGF5Q2FyZEZyb21IYW5kKGV2ZW50Lml0ZW0uZGF0YSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0SGFuZENhcmQoY2FyZElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCB3YXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpID09PSBjYXJkSWQ7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KHdhc1NlbGVjdGVkID8gbnVsbCA6IGNhcmRJZCk7XG4gICAgdGhpcy5jbG9zZVByZXZpZXcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwbGF5U2VsZWN0ZWRDYXJkKHNsb3RJbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGNhcmRJZCA9IHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpO1xuICAgIGlmICghY2FyZElkKSByZXR1cm47XG4gICAgdGhpcy5wbGF5Q2FyZEZyb21IYW5kKGNhcmRJZCwgc2xvdEluZGV4KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwbGF5Q2FyZEZyb21IYW5kKGNhcmRJZDogc3RyaW5nLCBzbG90SW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgIGlmICghdGhpcy5jYW5QbGF5KGNhcmQpKSByZXR1cm47XG5cbiAgICB0aGlzLmdhbWUudXBkYXRlKGdhbWUgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgICAgIGNvbnN0IHBsYXllciA9IG5leHQucGxheWVycy5QMTtcbiAgICAgIGNvbnN0IGhhbmRJbmRleCA9IHBsYXllci5oYW5kPy5pbmRleE9mKGNhcmRJZCkgPz8gLTE7XG4gICAgICBpZiAoaGFuZEluZGV4IDwgMCB8fCAhcGxheWVyLmhhbmQpIHJldHVybiBnYW1lO1xuICAgICAgcGxheWVyLmhhbmQuc3BsaWNlKGhhbmRJbmRleCwgMSk7XG4gICAgICBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSB7XG4gICAgICAgIHBsYXllci5vZmZlcmluZ3MucHVzaCh7XG4gICAgICAgICAgaW5zdGFuY2VJZDogYHAxX29mZmVyaW5nXyR7bmV4dC5yZXZpc2lvbiArIDF9YCxcbiAgICAgICAgICBjYXJkSWQ6IGNhcmQuaWQsXG4gICAgICAgICAgbmFtZTogY2FyZC5uYW1lLFxuICAgICAgICAgIG93bmVyOiAnUDEnLFxuICAgICAgICAgIHJlYWR5OiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBjYXJkLm9mZmVyaW5nVmFsdWUgPz8gY2FyZC5saWZlID8/IDEsXG4gICAgICAgICAgYWJpbGl0eU5hbWU6IGNhcmQuYWJpbGl0eU5hbWUsXG4gICAgICAgICAgYWJpbGl0eVRleHQ6IGNhcmQuYWJpbGl0eVRleHQsXG4gICAgICAgICAgYWJpbGl0eUNvc3Q6IGNhcmQuYWJpbGl0eUNvc3QsXG4gICAgICAgIH0pO1xuICAgICAgICBwbGF5ZXIub2ZmZXJpbmdQbGF5ZWRUaGlzVHVybiA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNwZW5kT2ZmZXJpbmdzKHBsYXllciwgY2FyZC5jb3N0ID8/IDApO1xuICAgICAgICBjb25zdCBvY2N1cGllZFNsb3RzID0gbmV3IFNldChwbGF5ZXIuYmF0dGxlWm9uZS5tYXAoKGNoYXJhY3RlciwgaW5kZXgpID0+IE51bWJlci5pc0ludGVnZXIoY2hhcmFjdGVyLnNsb3QpID8gY2hhcmFjdGVyLnNsb3QgPz8gaW5kZXggOiBpbmRleCkpO1xuICAgICAgICBjb25zdCB0YXJnZXRTbG90ID0gc2xvdEluZGV4ID8/IFswLCAxLCAyLCAzXS5maW5kKGluZGV4ID0+ICFvY2N1cGllZFNsb3RzLmhhcyhpbmRleCkpO1xuICAgICAgICBpZiAodGFyZ2V0U2xvdCA9PT0gdW5kZWZpbmVkIHx8IG9jY3VwaWVkU2xvdHMuaGFzKHRhcmdldFNsb3QpKSByZXR1cm4gZ2FtZTtcbiAgICAgICAgcGxheWVyLmJhdHRsZVpvbmUucHVzaCh7XG4gICAgICAgICAgaW5zdGFuY2VJZDogYHAxXyR7bmV4dC5yZXZpc2lvbiArIDF9XyR7cGxheWVyLmJhdHRsZVpvbmUubGVuZ3RofWAsXG4gICAgICAgICAgY2FyZElkOiBjYXJkLmlkLFxuICAgICAgICAgIG5hbWU6IGNhcmQubmFtZSxcbiAgICAgICAgICBvd25lcjogJ1AxJyxcbiAgICAgICAgICBjb250cm9sbGVyOiAnUDEnLFxuICAgICAgICAgIHNsb3Q6IHRhcmdldFNsb3QsXG4gICAgICAgICAgYXR0YWNrOiBjYXJkLmF0dGFjayA/PyAwLFxuICAgICAgICAgIGN1cnJlbnRIcDogY2FyZC5saWZlID8/IDEsXG4gICAgICAgICAgbWF4SHA6IGNhcmQubGlmZSA/PyAxLFxuICAgICAgICAgIGNhbkF0dGFjazogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBwbGF5ZXIuYmF0dGxlWm9uZS5zb3J0KChsZWZ0LCByaWdodCkgPT4gKGxlZnQuc2xvdCA/PyAwKSAtIChyaWdodC5zbG90ID8/IDApKTtcbiAgICAgIH1cbiAgICAgIG5leHQucmV2aXNpb24rKztcbiAgICAgIG5leHQubG9nID0gW1xuICAgICAgICBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycgPyBgJHtjYXJkLm5hbWV9IHF1ZWRhIGxpc3RhIGNvbW8gb2ZyZW5kYS5gIDogYCR7Y2FyZC5uYW1lfSBlbnRyYSBlbiBiYXRhbGxhLmAsXG4gICAgICAgIC4uLm5leHQubG9nLFxuICAgICAgXS5zbGljZSgwLCA0KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQobnVsbCk7XG4gICAgdGhpcy5kcmFnZ2luZ0NhcmRJZC5zZXQobnVsbCk7XG4gICAgdGhpcy5jbG9zZVByZXZpZXcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVPZmZlcmluZ1BpbGUoc2VhdDogQ2hyaXN0aWFuaXR5U2VhdCk6IHZvaWQge1xuICAgIHRoaXMub3Blbk9mZmVyaW5ncyhzZWF0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RBdHRhY2tlcihjYXJkOiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQobnVsbCk7XG4gICAgaWYgKCF0aGlzLmlzT3duVHVybigpIHx8ICFjYXJkLmNhbkF0dGFjaykge1xuICAgICAgdGhpcy5pbnNwZWN0Q2hhcmFjdGVyKGNhcmQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlUHJldmlldygpO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQodGhpcy5zZWxlY3RlZEF0dGFja2VyKCk/Lmluc3RhbmNlSWQgPT09IGNhcmQuaW5zdGFuY2VJZCA/IG51bGwgOiBjYXJkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVPcHBvbmVudENoYXJhY3RlcihjYXJkOiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKSkge1xuICAgICAgdGhpcy5hdHRhY2tDaGFyYWN0ZXIoY2FyZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaW5zcGVjdENoYXJhY3RlcihjYXJkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVPcHBvbmVudExlYWRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEF0dGFja2VyKCkgJiYgIXRoaXMuaGFzT3Bwb25lbnRHdWFyZHMoKSkge1xuICAgICAgdGhpcy5hdHRhY2tMZWFkZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnNwZWN0TGVhZGVyKCdQMicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF0dGFja0xlYWRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBhdHRhY2tlciA9IHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpO1xuICAgIGlmICghYXR0YWNrZXIpIHJldHVybjtcbiAgICBpZiAodGhpcy5oYXNPcHBvbmVudEd1YXJkcygpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQoe1xuICAgICAgICB0aXRsZTogdGhpcy5vcHBvbmVudCgpLmxlYWRlck5hbWUsXG4gICAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLFxuICAgICAgICBtZXRhOiBgJHt0aGlzLm9wcG9uZW50KCkubGVhZGVySHB9LyR7dGhpcy5vcHBvbmVudCgpLmxlYWRlck1heEhwfWAsXG4gICAgICAgIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyUHJvdGVjdGVkJyksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5nYW1lLnVwZGF0ZShnYW1lID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gICAgICBjb25zdCBsaXZlQXR0YWNrZXIgPSBuZXh0LnBsYXllcnMuUDEuYmF0dGxlWm9uZS5maW5kKGNhcmQgPT4gY2FyZC5pbnN0YW5jZUlkID09PSBhdHRhY2tlci5pbnN0YW5jZUlkKTtcbiAgICAgIGlmICghbGl2ZUF0dGFja2VyIHx8ICFsaXZlQXR0YWNrZXIuY2FuQXR0YWNrKSByZXR1cm4gZ2FtZTtcbiAgICAgIG5leHQucGxheWVycy5QMi5sZWFkZXJIcCA9IE1hdGgubWF4KDAsIG5leHQucGxheWVycy5QMi5sZWFkZXJIcCAtIGxpdmVBdHRhY2tlci5hdHRhY2spO1xuICAgICAgbGl2ZUF0dGFja2VyLmNhbkF0dGFjayA9IGZhbHNlO1xuICAgICAgbmV4dC5yZXZpc2lvbisrO1xuICAgICAgbmV4dC5sb2cgPSBbYCR7bGl2ZUF0dGFja2VyLm5hbWV9IGF0YWNhIGFsIGxpZGVyIHJpdmFsLmAsIC4uLm5leHQubG9nXS5zbGljZSgwLCA0KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXR0YWNrQ2hhcmFjdGVyKHRhcmdldDogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UpOiB2b2lkIHtcbiAgICBjb25zdCBhdHRhY2tlciA9IHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpO1xuICAgIGlmICghYXR0YWNrZXIpIHJldHVybjtcbiAgICB0aGlzLmdhbWUudXBkYXRlKGdhbWUgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgICAgIGNvbnN0IGxpdmVBdHRhY2tlciA9IG5leHQucGxheWVycy5QMS5iYXR0bGVab25lLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IGF0dGFja2VyLmluc3RhbmNlSWQpO1xuICAgICAgY29uc3QgbGl2ZVRhcmdldCA9IG5leHQucGxheWVycy5QMi5iYXR0bGVab25lLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IHRhcmdldC5pbnN0YW5jZUlkKTtcbiAgICAgIGlmICghbGl2ZUF0dGFja2VyIHx8ICFsaXZlVGFyZ2V0IHx8ICFsaXZlQXR0YWNrZXIuY2FuQXR0YWNrKSByZXR1cm4gZ2FtZTtcbiAgICAgIGxpdmVUYXJnZXQuY3VycmVudEhwIC09IGxpdmVBdHRhY2tlci5hdHRhY2s7XG4gICAgICBsaXZlQXR0YWNrZXIuY3VycmVudEhwIC09IGxpdmVUYXJnZXQuYXR0YWNrO1xuICAgICAgbGl2ZUF0dGFja2VyLmNhbkF0dGFjayA9IGZhbHNlO1xuICAgICAgdGhpcy5jbGVhbnVwRGVzdHJveWVkKG5leHQucGxheWVycy5QMSwgbmV4dCk7XG4gICAgICB0aGlzLmNsZWFudXBEZXN0cm95ZWQobmV4dC5wbGF5ZXJzLlAyLCBuZXh0KTtcbiAgICAgIG5leHQucmV2aXNpb24rKztcbiAgICAgIG5leHQubG9nID0gW2Ake2xpdmVBdHRhY2tlci5uYW1lfSBjb21iYXRlIGNvbnRyYSAke2xpdmVUYXJnZXQubmFtZX0uYCwgLi4ubmV4dC5sb2ddLnNsaWNlKDAsIDQpO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbmRUdXJuKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgbmV4dC50dXJuT3duZXIgPSBuZXh0LnR1cm5Pd25lciA9PT0gJ1AxJyA/ICdQMicgOiAnUDEnO1xuICAgICAgbmV4dC50dXJuQ291bnQrKztcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBuZXh0LnBsYXllcnNbbmV4dC50dXJuT3duZXJdO1xuICAgICAgY3VycmVudC5vZmZlcmluZ1BsYXllZFRoaXNUdXJuID0gZmFsc2U7XG4gICAgICBjdXJyZW50Lm9mZmVyaW5ncyA9IGN1cnJlbnQub2ZmZXJpbmdzLm1hcChvZmZlcmluZyA9PiAoeyAuLi5vZmZlcmluZywgcmVhZHk6IHRydWUgfSkpO1xuICAgICAgY3VycmVudC5iYXR0bGVab25lID0gY3VycmVudC5iYXR0bGVab25lLm1hcChjYXJkID0+ICh7IC4uLmNhcmQsIGNhbkF0dGFjazogdHJ1ZSB9KSk7XG4gICAgICBjb25zdCBkcmF3bkNhcmQgPSBuZXh0LnNoYXJlZERlY2suc2hpZnQoKTtcbiAgICAgIGlmIChkcmF3bkNhcmQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQuaGFuZCkge1xuICAgICAgICAgIGN1cnJlbnQuaGFuZC5wdXNoKGRyYXduQ2FyZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudC5oYW5kQ291bnQgPSAoY3VycmVudC5oYW5kQ291bnQgPz8gMCkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtcbiAgICAgICAgZHJhd25DYXJkID8gYCR7Y3VycmVudC5kaXNwbGF5TmFtZX0gcm9iYSB1bmEgY2FydGEuYCA6IGBFbCBtYXpvIGVzdGEgdmFjaW8uYCxcbiAgICAgICAgYFR1cm5vIGRlICR7Y3VycmVudC5kaXNwbGF5TmFtZX0uYCxcbiAgICAgICAgLi4ubmV4dC5sb2csXG4gICAgICBdLnNsaWNlKDAsIDQpO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRNb2NrKCk6IHZvaWQge1xuICAgIHRoaXMuZ2FtZS5zZXQodGhpcy5jYXRhbG9nTG9hZGVkKCkgPyB0aGlzLmNyZWF0ZVR1dG9yaWFsR2FtZSh0aGlzLmFsbENhdGFsb2dDYXJkcygpKSA6IHN0cnVjdHVyZWRDbG9uZShTVEFSVElOR19HQU1FKSk7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkSW5mby5zZXQobnVsbCk7XG4gICAgdGhpcy5zaG93SGlzdG9yeS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2hvd0dhbGxlcnkuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm9mZmVyaW5nc1NlYXQuc2V0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0VHV0b3JpYWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldE1vY2soKTtcbiAgICB0aGlzLnNjcmVlbi5zZXQoJ3RhYmxlJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xvc2VQcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldChudWxsKTtcbiAgICB0aGlzLnJlc2V0UHJldmlld1RpbHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbG9zZUluZm8oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9wZW5PZmZlcmluZ3Moc2VhdDogQ2hyaXN0aWFuaXR5U2VhdCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkSW5mby5zZXQobnVsbCk7XG4gICAgdGhpcy5zaG93SGlzdG9yeS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2hvd0dhbGxlcnkuc2V0KGZhbHNlKTtcbiAgICB0aGlzLm9mZmVyaW5nc1NlYXQuc2V0KHNlYXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9wZW5IaXN0b3J5KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkSW5mby5zZXQobnVsbCk7XG4gICAgdGhpcy5vZmZlcmluZ3NTZWF0LnNldChudWxsKTtcbiAgICB0aGlzLnNob3dHYWxsZXJ5LnNldChmYWxzZSk7XG4gICAgdGhpcy5zaG93SGlzdG9yeS5zZXQodHJ1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xvc2VPZmZlcmluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5vZmZlcmluZ3NTZWF0LnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvcGVuR2FsbGVyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIHRoaXMub2ZmZXJpbmdzU2VhdC5zZXQobnVsbCk7XG4gICAgdGhpcy5zaG93SGlzdG9yeS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2hvd0dhbGxlcnkuc2V0KHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsb3NlR2FsbGVyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dHYWxsZXJ5LnNldChmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0R2FsbGVyeVNlYXJjaChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmdhbGxlcnlTZWFyY2guc2V0KChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEdhbGxlcnlUeXBlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZ2FsbGVyeVR5cGUuc2V0KChldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpLnZhbHVlIGFzIENocmlzdGlhbml0eUdhbGxlcnlUeXBlRmlsdGVyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0aWx0UHJldmlldyhldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYm91bmRzID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHggPSAoZXZlbnQuY2xpZW50WCAtIGJvdW5kcy5sZWZ0KSAvIGJvdW5kcy53aWR0aCAtIDAuNTtcbiAgICBjb25zdCB5ID0gKGV2ZW50LmNsaWVudFkgLSBib3VuZHMudG9wKSAvIGJvdW5kcy5oZWlnaHQgLSAwLjU7XG4gICAgdGhpcy5wcmV2aWV3VGlsdC5zZXQoe1xuICAgICAgcm90YXRlWDogNSAtIHkgKiAxOCxcbiAgICAgIHJvdGF0ZVk6IC01ICsgeCAqIDE4LFxuICAgICAgc2hpZnRYOiB4ICogMTAsXG4gICAgICBzaGlmdFk6IHkgKiAxMCxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldFByZXZpZXdUaWx0KCk6IHZvaWQge1xuICAgIHRoaXMucHJldmlld1RpbHQuc2V0KHsgcm90YXRlWDogNSwgcm90YXRlWTogLTUsIHNoaWZ0WDogMCwgc2hpZnRZOiAwIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwRGVzdHJveWVkKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGRlc3Ryb3llZCA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwIDw9IDApO1xuICAgIGlmICghZGVzdHJveWVkLmxlbmd0aCkgcmV0dXJuO1xuICAgIGdhbWUuaGlzdG9yeVpvbmUucHVzaCguLi5kZXN0cm95ZWQubWFwKGNhcmQgPT4gY2FyZC5jYXJkSWQpKTtcbiAgICBwbGF5ZXIuYmF0dGxlWm9uZSA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwID4gMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdExlYWRlcihzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIGNvbnN0IHBsYXllciA9IHRoaXMuZ2FtZSgpLnBsYXllcnNbc2VhdF07XG4gICAgY29uc3QgbGVhZGVyID0gcGxheWVyLmxlYWRlckNhcmRJZCA/IHRoaXMuY2FyZERlZmluaXRpb24ocGxheWVyLmxlYWRlckNhcmRJZCkgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KHtcbiAgICAgIHRpdGxlOiBsZWFkZXIgPyB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChsZWFkZXIpLm5hbWUgOiBwbGF5ZXIubGVhZGVyTmFtZSxcbiAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLFxuICAgICAgbWV0YTogYCR7cGxheWVyLmxlYWRlckhwfS8ke3BsYXllci5sZWFkZXJNYXhIcH1gLFxuICAgICAgYm9keTogc2VhdCA9PT0gJ1AyJyAmJiB0aGlzLmhhc09wcG9uZW50R3VhcmRzKCkgPyB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlclByb3RlY3RlZCcpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJCb2R5JyksXG4gICAgICBjYXJkSWQ6IHBsYXllci5sZWFkZXJDYXJkSWQsXG4gICAgICBzb3VyY2U6ICdib2FyZCcsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdE9mZmVyaW5nKG9mZmVyaW5nOiBDaHJpc3RpYW5pdHlPZmZlcmluZ0luc3RhbmNlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmNhcmREZWZpbml0aW9uKG9mZmVyaW5nLmNhcmRJZCk7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMudHJhbnNsYXRlZENhcmRUZXh0KGRlZmluaXRpb24pO1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldCh7XG4gICAgICB0aXRsZTogdGV4dC5uYW1lLFxuICAgICAgZXllYnJvdzogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSxcbiAgICAgIG1ldGE6IG9mZmVyaW5nLnJlYWR5ID8gdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ1JlYWR5JykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nRXhoYXVzdGVkJyksXG4gICAgICBib2R5OiB0ZXh0LmFiaWxpdHlUZXh0ID8/IG9mZmVyaW5nLmFiaWxpdHlUZXh0ID8/IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdCb2R5JyksXG4gICAgICBjYXJkSWQ6IG9mZmVyaW5nLmNhcmRJZCxcbiAgICAgIHNvdXJjZTogJ3BpbGUnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9mZmVyaW5nQWJpbGl0eVRleHQob2ZmZXJpbmc6IENocmlzdGlhbml0eU9mZmVyaW5nSW5zdGFuY2UpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dCh0aGlzLmNhcmREZWZpbml0aW9uKG9mZmVyaW5nLmNhcmRJZCkpO1xuICAgIHJldHVybiB0ZXh0LmFiaWxpdHlUZXh0ID8/IG9mZmVyaW5nLmFiaWxpdHlUZXh0ID8/IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdOb0FiaWxpdHknKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5Vc2VPZmZlcmluZ0FiaWxpdHkob2ZmZXJpbmc6IENocmlzdGlhbml0eU9mZmVyaW5nSW5zdGFuY2UsIHNlYXQ6IENocmlzdGlhbml0eVNlYXQpOiBib29sZWFuIHtcbiAgICBpZiAoc2VhdCAhPT0gJ1AxJyB8fCAhdGhpcy5pc093blR1cm4oKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghb2ZmZXJpbmcucmVhZHkgfHwgIW9mZmVyaW5nLmFiaWxpdHlOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucmVhZHlPZmZlcmluZ3ModGhpcy5nYW1lKCkucGxheWVyc1tzZWF0XSkgPj0gKG9mZmVyaW5nLmFiaWxpdHlDb3N0ID8/IDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVzZU9mZmVyaW5nQWJpbGl0eShvZmZlcmluZzogQ2hyaXN0aWFuaXR5T2ZmZXJpbmdJbnN0YW5jZSwgc2VhdDogQ2hyaXN0aWFuaXR5U2VhdCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5Vc2VPZmZlcmluZ0FiaWxpdHkob2ZmZXJpbmcsIHNlYXQpKSByZXR1cm47XG4gICAgdGhpcy5nYW1lLnVwZGF0ZShnYW1lID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gICAgICBjb25zdCBwbGF5ZXIgPSBuZXh0LnBsYXllcnNbc2VhdF07XG4gICAgICBjb25zdCBsaXZlT2ZmZXJpbmcgPSBwbGF5ZXIub2ZmZXJpbmdzLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IG9mZmVyaW5nLmluc3RhbmNlSWQpO1xuICAgICAgaWYgKCFsaXZlT2ZmZXJpbmcgfHwgIWxpdmVPZmZlcmluZy5yZWFkeSkgcmV0dXJuIGdhbWU7XG4gICAgICBjb25zdCBvZmZlcmluZ0lkID0gbGl2ZU9mZmVyaW5nLmluc3RhbmNlSWQ7XG4gICAgICB0aGlzLnNwZW5kT2ZmZXJpbmdzKHBsYXllciwgbGl2ZU9mZmVyaW5nLmFiaWxpdHlDb3N0ID8/IDApO1xuICAgICAgcGxheWVyLm9mZmVyaW5ncyA9IHBsYXllci5vZmZlcmluZ3MubWFwKGNhcmQgPT4gKGNhcmQuaW5zdGFuY2VJZCA9PT0gb2ZmZXJpbmdJZCA/IHsgLi4uY2FyZCwgcmVhZHk6IGZhbHNlIH0gOiBjYXJkKSk7XG4gICAgICBwbGF5ZXIubGVhZGVySHAgPSBNYXRoLm1heCgwLCBwbGF5ZXIubGVhZGVySHAgLSAxKTtcbiAgICAgIG5leHQucmV2aXNpb24rKztcbiAgICAgIG5leHQubG9nID0gW2Ake2xpdmVPZmZlcmluZy5uYW1lfTogJHtsaXZlT2ZmZXJpbmcuYWJpbGl0eU5hbWV9LmAsIC4uLm5leHQubG9nXS5zbGljZSgwLCA0KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc3BlY3REZWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IHJlbWFpbmluZ0NhcmRzID0gdGhpcy5nYW1lKCkuc2hhcmVkRGVjay5sZW5ndGg7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldCh7XG4gICAgICB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlEZWNrJyksXG4gICAgICBleWVicm93OiB0aGlzLnQoJ2NocmlzdGlhbml0eVNoYXJlZFpvbmUnKSxcbiAgICAgIG1ldGE6IGAke3JlbWFpbmluZ0NhcmRzfSAke3JlbWFpbmluZ0NhcmRzID09PSAxID8gdGhpcy50KCdjaHJpc3RpYW5pdHlDYXJkUmVtYWluaW5nJykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eUNhcmRzUmVtYWluaW5nJyl9YCxcbiAgICAgIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5RGVja0JvZHknKSxcbiAgICAgIGZhY3RzOiBbXG4gICAgICAgIHRoaXMudCgnY2hyaXN0aWFuaXR5RGVja1J1bGVTaGFyZWQnKSxcbiAgICAgICAgdGhpcy50KCdjaHJpc3RpYW5pdHlEZWNrUnVsZURyYXcnKSxcbiAgICAgICAgdGhpcy50KCdjaHJpc3RpYW5pdHlEZWNrUnVsZUVtcHR5JyksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc3BlY3RIb3dUb1BsYXkoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldCh7XG4gICAgICB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlIb3dUb1BsYXknKSxcbiAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5R2VuZXNpc0VkaXRpb24nKSxcbiAgICAgIG1ldGE6IHRoaXMudCgnY2hyaXN0aWFuaXR5VHV0b3JpYWxNb2RlJyksXG4gICAgICBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eUhvd1RvUGxheUludHJvJyksXG4gICAgICBmYWN0czogW1xuICAgICAgICB0aGlzLnQoJ2NocmlzdGlhbml0eUhvd1RvUGxheUdvYWwnKSxcbiAgICAgICAgdGhpcy50KCdjaHJpc3RpYW5pdHlIb3dUb1BsYXlUdXJuJyksXG4gICAgICAgIHRoaXMudCgnY2hyaXN0aWFuaXR5SG93VG9QbGF5T2ZmZXJpbmdzJyksXG4gICAgICAgIHRoaXMudCgnY2hyaXN0aWFuaXR5SG93VG9QbGF5QmF0dGxlJyksXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc3BlY3RIYW5kQ2FyZChjYXJkSWQ6IHN0cmluZywgZnJvbUhhbmQgPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChjYXJkKTtcbiAgICBpZiAoZnJvbUhhbmQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KGNhcmRJZCk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldCh7XG4gICAgICB0aXRsZTogdGV4dC5uYW1lLFxuICAgICAgZXllYnJvdzogdGhpcy5jYXJkVHlwZUxhYmVsKGNhcmQpLFxuICAgICAgbWV0YTogdGhpcy5jYXJkUHJldmlld01ldGEoY2FyZCksXG4gICAgICBib2R5OiB0aGlzLmRlZmF1bHRDYXJkQm9keShjYXJkLnR5cGUpLFxuICAgICAgY2FyZElkLFxuICAgICAgc291cmNlOiBmcm9tSGFuZCA/ICdoYW5kJyA6ICdwaWxlJyxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNwZWN0R2FsbGVyeUNhcmQoY2FyZElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmluc3BlY3RIYW5kQ2FyZChjYXJkSWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc3BlY3RIaXN0b3J5Q2FyZChjYXJkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0hpc3Rvcnkuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmluc3BlY3RIYW5kQ2FyZChjYXJkSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnNwZWN0Q2hhcmFjdGVyKGNhcmQ6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmNhcmREZWZpbml0aW9uKGNhcmQuY2FyZElkKTtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQoe1xuICAgICAgdGl0bGU6IHRoaXMudHJhbnNsYXRlZENhcmRUZXh0KGRlZmluaXRpb24pLm5hbWUsXG4gICAgICBleWVicm93OiB0aGlzLnQoJ2NocmlzdGlhbml0eUNoYXJhY3RlckNhcmQnKSxcbiAgICAgIG1ldGE6IGAke2NhcmQuYXR0YWNrfS8ke2NhcmQuY3VycmVudEhwfWAsXG4gICAgICBib2R5OiBjYXJkLmNhbkF0dGFjayA/IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyUmVhZHknKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyRXhoYXVzdGVkJyksXG4gICAgICBjYXJkSWQ6IGNhcmQuY2FyZElkLFxuICAgICAgc291cmNlOiAnYm9hcmQnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjYXJkUHJldmlld01ldGEoY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHJldHVybiBgJHtjYXJkLm9mZmVyaW5nVmFsdWUgPz8gY2FyZC5saWZlID8/IDF9YDtcbiAgICBpZiAoY2FyZC50eXBlID09PSAnbGVhZGVyJykgcmV0dXJuIGAke2NhcmQubGVhZGVyTGlmZSA/PyBjYXJkLmxpZmUgPz8gMH1gO1xuICAgIGlmIChjYXJkLnR5cGUgPT09ICdjaGFyYWN0ZXInKSByZXR1cm4gYCR7dGhpcy50KCdjaHJpc3RpYW5pdHlDb3N0Jyl9ICR7Y2FyZC5jb3N0ID8/IDB9IMK3ICR7Y2FyZC5hdHRhY2sgPz8gMH0vJHtjYXJkLmxpZmUgPz8gMH1gO1xuICAgIGlmIChjYXJkLmNvc3QgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGAke3RoaXMudCgnY2hyaXN0aWFuaXR5Q29zdCcpfSAke2NhcmQuY29zdH1gO1xuICAgIHJldHVybiBjYXJkLmNvbGxlY3Rvck51bWJlciA/PyBjYXJkLmlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzcGVuZE9mZmVyaW5ncyhwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlLCBjb3N0OiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgcmVtYWluaW5nID0gY29zdDtcbiAgICBwbGF5ZXIub2ZmZXJpbmdzID0gcGxheWVyLm9mZmVyaW5ncy5tYXAob2ZmZXJpbmcgPT4ge1xuICAgICAgaWYgKHJlbWFpbmluZyA8PSAwIHx8ICFvZmZlcmluZy5yZWFkeSkgcmV0dXJuIG9mZmVyaW5nO1xuICAgICAgcmVtYWluaW5nIC09IG9mZmVyaW5nLnZhbHVlO1xuICAgICAgcmV0dXJuIHsgLi4ub2ZmZXJpbmcsIHJlYWR5OiBmYWxzZSB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|