styles.css
151 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline; }
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
display: block; }
body {
line-height: 1; }
ol, ul {
list-style: none; }
blockquote, q {
quotes: none; }
blockquote:before, blockquote:after {
content: "";
content: none; }
q:before, q:after {
content: "";
content: none; }
table {
border-collapse: collapse;
border-spacing: 0; }
html {
font-size: 62.5%;
overflow-y: scroll;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
font-family: font-family: 'TheMixPlain', sans-serif; }
#wrap {
display: block;
overflow: hidden; }
.row-f, #wrap, header, section.main, footer {
max-width: 100%;
margin-left: auto;
margin-right: auto; }
.row-f:after, #wrap:after, header:after, section.main:after, footer:after {
content: "";
display: table;
clear: both; }
.row-f:after, #wrap:after, header:after, section.main:after, footer:after {
content: "";
display: table;
clear: both; }
.inner {
max-width: 1024px;
margin-left: auto;
margin-right: auto; }
.inner:after {
content: "";
display: table;
clear: both; }
.inner.space {
padding-left: 1.38889%;
padding-right: 1.38889%; }
@media only screen and (min-width: 48em) {
.inner.space {
padding-left: 4.16667%;
padding-right: 4.16667%; } }
.profilation__container {
max-width: 1360px;
margin-left: auto;
margin-right: auto;
padding-left: 4.16667%;
padding-right: 4.16667%;
min-height: calc(100vh - 200px); }
@media only screen and (min-width: 64em) {
.profilation__container {
max-width: 896px;
margin-left: auto;
margin-right: auto;
padding-left: 11.11111%;
padding-right: 11.11111%; }
.profilation__container:after {
content: "";
display: table;
clear: both; } }
.profilation__container:after {
content: "";
display: table;
clear: both; }
.bigContainer {
max-width: 1360px;
margin-left: auto;
margin-right: auto;
height: 96px;
display: flex;
align-items: center;
background: white;
padding-left: 4.16667%;
padding-right: 4.16667%; }
.bigContainer:after {
content: "";
display: table;
clear: both; }
.bigContainer:after {
content: "";
display: table;
clear: both; }
.bigContainer.space {
padding-left: 1.38889%;
padding-right: 1.38889%; }
@media only screen and (min-width: 48em) {
.bigContainer.space {
padding-left: 4.16667%;
padding-right: 4.16667%; } }
.inside {
max-width: 640px;
margin-left: auto;
margin-right: auto;
padding-left: 1.38889%;
padding-right: 1.38889%; }
.inside:after {
content: "";
display: table;
clear: both; }
@media only screen and (min-width: 48em) {
.inside {
padding-left: 4.16667%;
padding-right: 4.16667%; } }
.anima {
-webkit-transition: all 0.2s ease-in;
-moz-transition: all 0.2s ease-in;
-ms-transition: all 0.2s ease-in;
-o-transition: all 0.2s ease-in;
transition: all 0.2s ease-in; }
.col-l1 {
width: 5.55556%;
float: left;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-l2 {
width: 13.88889%;
float: left;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-l3 {
width: 22.22222%;
float: left;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-l4, section.main .box {
width: 30.55556%;
float: left;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-l5 {
width: 38.88889%;
float: left;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-l6, header .logo, section.main .middle {
width: 47.22222%;
float: left;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-l7 {
width: 55.55556%;
float: left;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-l8 {
width: 63.88889%;
float: left;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-l9 {
width: 72.22222%;
float: left;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-l10 {
width: 80.55556%;
float: left;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-l11 {
width: 88.88889%;
float: left;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-l12, section.main .full {
width: 97.22222%;
float: left;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-r1 {
width: 5.55556%;
float: right;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-r2 {
width: 13.88889%;
float: right;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-r3 {
width: 22.22222%;
float: right;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-r4 {
width: 30.55556%;
float: right;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-r5 {
width: 38.88889%;
float: right;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-r6, header nav.main-navi {
width: 47.22222%;
float: right;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-r7 {
width: 55.55556%;
float: right;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-r8 {
width: 63.88889%;
float: right;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-r9 {
width: 72.22222%;
float: right;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-r10 {
width: 80.55556%;
float: right;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-r11 {
width: 88.88889%;
float: right;
margin-left: 1.38889%;
margin-right: 1.38889%; }
.col-r12 {
width: 97.22222%;
float: right;
margin-left: 1.38889%;
margin-right: 1.38889%; }
header {
background: #ffffff;
border-bottom: 8px solid #A0AC12; }
header .logo {
display: flex; }
.header--payoff {
font-size: 1.4rem;
border-left: 1px solid #5A585A;
padding: 14px 10px;
margin-left: 10px;
color: #5A585A;
line-height: 1.2em;
display: none; }
@media only screen and (min-width: 64em) {
.header--payoff {
display: block; } }
body {
background: #E4EDF4; }
footer .footer--wrapper {
background: #5A585A;
margin-left: auto;
margin-right: auto;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
text-align: center; }
@media only screen and (min-width: 48em) {
footer .footer--wrapper {
flex-direction: row;
text-align: left;
justify-content: space-between;
padding-left: 4.16667%;
padding-right: 4.16667%; } }
.footer--logo {
margin: 35px 0px 35px 0px;
margin: 3.5rem 0rem 3.5rem 0rem; }
.footer--info {
margin: 0px 0px 35px 0px;
margin: 0rem 0rem 3.5rem 0rem;
color: white; }
@media only screen and (min-width: 48em) {
.footer--info {
margin-top: 3.5rem; } }
.footer--info p {
font-size: 1.4rem;
line-height: 1.6em;
font-family: 'themix', sans-serif;
font-weight: lighter; }
.profilation p {
font-size: 2.4rem;
color: #5A585A;
font-family: 'themix', sans-serif;
line-height: 1.7em;
font-weight: lighter; }
.profilation p.profilation__intro {
font-size: 1.4rem;
line-height: 1.6em;
margin: 170px 0px 45px 0px;
margin: 17rem 0rem 4.5rem 0rem; }
@media only screen and (min-width: 64em) {
.profilation p {
font-size: 3.2rem;
line-height: 1.6em; }
.profilation p.profilation__intro {
font-size: 1.8rem; } }
@media only screen and (min-width: 48em) {
.profilation--wrapper {
max-width: 80%; } }
.profilation--step {
margin-bottom: 7em; }
p.profilation--advice {
font-size: 1.4em;
line-height: 1.7em;
margin-top: 30px;
margin: 30px 0px 0px 0px;
margin: 3rem 0rem 0rem 0rem; }
#show-modal {
font-size: 1.4em;
cursor: pointer;
line-height: 1.7em;
text-decoration: underline;
margin: 13px 0px 0px 17px;
margin: 1.3rem 0rem 0rem 1.7rem; }
.profilation--error p {
font-size: 1.6rem;
color: #FF463C;
margin: 50px 0px 0px 0px;
margin: 5rem 0rem 0rem 0rem; }
.profilation--step__one.complete,
.profilation--step__two.complete,
.profilation--step__three.complete,
.profilation--step__four.complete,
.profilation--step__five.complete {
opacity: .5; }
.profilation--step:hover, .profilation--step:focus {
opacity: 1; }
.slide-leave-active,
.slide-enter-active {
transition: .5s; }
.slide-enter {
transform: translate(0, 100%); }
.slide-leave-to {
transform: translate(0, -100%); }
.field.error input {
border-bottom: 1px solid #9F3A38; }
button {
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.15);
background: none;
border: none;
font-size: 1.4rem;
height: 40px;
padding: 0 4rem;
border-radius: 4px;
text-transform: uppercase;
color: white; }
button.is__error {
background: #FF463C;
margin: 30px 0px 0px 0px;
margin: 3rem 0rem 0rem 0rem; }
button.btn__gray {
background: #A3A1A2; }
.modal-mask {
position: fixed;
z-index: 9998;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: table;
transition: opacity .3s ease; }
.modal-wrapper {
display: table-cell;
vertical-align: middle; }
.modal-flex {
display: flex; }
.close_modal {
position: absolute;
right: -50px;
top: 0;
cursor: pointer; }
.modal-container {
width: 300px;
margin: 0px auto;
padding: 40px 75px;
background-color: #fff;
border-radius: 2px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.33);
transition: all .3s ease;
height: 370px;
width: 550px;
position: relative; }
.modal-header h3 {
margin-top: 0;
color: #5A585A;
font-size: 2.4rem; }
.wapper-input__modalePrivacy {
margin: 0px 0px 25px 0px;
margin: 0rem 0rem 2.5rem 0rem;
display: flex;
align-items: center; }
.wapper-input__modalePrivacy .underline {
text-decoration: underline; }
.modal-body {
margin: 20px 0; }
.modal-body p {
font-size: 1.6rem;
margin: 0px 0px 35px 0px;
margin: 0rem 0rem 3.5rem 0rem; }
.modal-body label {
text-transform: uppercase;
font-size: 1.4rem; }
.modal-body input {
height: 58px;
width: 90%;
border: 1px solid #DEDEDE;
padding-left: 10px;
margin: 15px 0px 0px 0px;
margin: 1.5rem 0rem 0rem 0rem; }
.modal-default-button {
float: right; }
/*
* The following styles are auto-applied to elements with
* transition="modal" when their visibility is toggled
* by Vue.js.
*
* You can easily play with the modal transition by editing
* these styles.
*/
.modal-enter {
opacity: 0; }
.modal-leave-active {
opacity: 0; }
.modal-enter .modal-container,
.modal-leave-active .modal-container {
-webkit-transform: scale(1.1);
transform: scale(1.1); }
.profilation .v-select {
transform: translateY(6px); }
.profilation .v-select .open-indicator {
left: 50%;
bottom: -21px;
transform: translateX(-13px); }
.profilation .v-select .open-indicator:before {
border-color: none;
background-image: url(./../img/freccia.svg);
background-size: contain;
background-repeat: no-repeat;
border-width: 0;
transform: none; }
.profilation .v-select input {
display: none !important; }
.profilation .v-select.showInput input {
display: block !important;
color: #5A585A;
position: absolute;
top: 0;
font-size: 2.4rem; }
@media only screen and (min-width: 64em) {
.profilation .v-select.showInput input {
font-size: 3.2rem; } }
.profilation .v-select .dropdown-toggle {
background: none;
border: none;
border-bottom: 1px solid #5A585A;
border-radius: 0;
min-width: 70px;
height: 40px;
margin: 0px 20px 0px 0px;
margin: 0rem 2rem 0rem 0rem; }
.profilation .v-select .dropdown-toggle::focus {
outline: none; }
.profilation .v-select .dropdown-toggle .selected-tag {
background: none;
border: none;
color: #5A585A;
font-family: 'themix', sans-serif;
line-height: 2.1em;
padding: 0;
margin: 0px 0px 13px 0px;
margin: 0rem 0rem 1.3rem 0rem;
font-size: 2.4rem; }
@media only screen and (min-width: 64em) {
.profilation .v-select .dropdown-toggle .selected-tag {
font-size: 3.2rem;
line-height: 1.5em; } }
.profilation input {
background: none;
border: none;
border-bottom: 1px solid #5A585A;
font-size: 2.4rem;
color: #5A585A;
width: 110px; }
@media only screen and (min-width: 64em) {
.profilation input {
font-size: 3.2rem; } }
.profilation input::focus {
outline: none; }
.profilation .wrapper-select {
display: flex;
align-items: baseline;
flex-wrap: wrap; }
.profilation .wrapper-select p {
margin-right: .5em; }
.profilation .wrapper-select p span {
display: inline-block; }
.profilation .v-select .dropdown-menu > .highlight > a {
background: #FBFBFB;
color: #333; }
.v-select.dropdown.open .dropdown-menu {
position: absolute !important;
top: 0;
min-width: 160px;
height: auto;
background: #FFFFFF;
box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1);
border-radius: 10px;
border-color: none;
padding: 10px;
z-index: 9999999999999; }
.v-select .selected-tag {
color: #007AFF; }
.v-select a {
color: #404040;
border-bottom: 1px solid #CECED2;
font-size: 1.7rem; }
.v-select .active a {
background: none;
color: #007AFF; }
.v-select.dropdown .highlight a,
.v-select.dropdown li:hover a {
border-bottom: 1px solid #007AFF;
color: #007AFF;
background: none; }
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVzLmNzcyIsInNvdXJjZXMiOlsic3R5bGVzLnNjc3MiLCJfbWV5ZXItcmVzZXQuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvc3VzeS9zYXNzL19zdXN5LnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL19zdXN5LnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L19zdS5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9zdS9fdXRpbGl0aWVzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L3N1L19zZXR0aW5ncy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9zdS9fdmFsaWRhdGlvbi5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9zdS9fZ3JpZC5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvX2Zsb2F0LnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9fc2hhcmVkLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9fc3VwcG9ydC5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fc3VwcG9ydC5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc3VwcG9ydC9fcHJlZml4LnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19iYWNrZ3JvdW5kLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19ib3gtc2l6aW5nLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zdXBwb3J0L19yZW0uc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3N1cHBvcnQvX2NsZWFyZml4LnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX2luc3BlY3Quc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L3NoYXJlZC9fb3V0cHV0LnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX2RpcmVjdGlvbi5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19iYWNrZ3JvdW5kLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX2NvbnRhaW5lci5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9vdXRwdXQvc2hhcmVkL19tYXJnaW5zLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9zaGFyZWQvX3BhZGRpbmcuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L2Zsb2F0L19jb250YWluZXIuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvc3VzeS9zYXNzL3N1c3kvb3V0cHV0L2Zsb2F0L19zcGFuLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9mbG9hdC9fZW5kLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L291dHB1dC9mbG9hdC9faXNvbGF0ZS5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19zZXR0aW5ncy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L192YWxpZGF0aW9uLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2dyaWRzLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2JveC1zaXppbmcuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fY29udGV4dC5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19iYWNrZ3JvdW5kLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2NvbnRhaW5lci5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19zcGFuLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2d1dHRlcnMuc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9faXNvbGF0ZS5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19nYWxsZXJ5LnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX3Jvd3Muc2NzcyIsIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvc3VzeS9zYXNzL3N1c3kvbGFuZ3VhZ2Uvc3VzeS9fbWFyZ2lucy5zY3NzIiwiLi4vLi4vYm93ZXJfY29tcG9uZW50cy9zdXN5L3Nhc3Mvc3VzeS9sYW5ndWFnZS9zdXN5L19wYWRkaW5nLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2JsZWVkLnNjc3MiLCIuLi8uLi9ib3dlcl9jb21wb25lbnRzL3N1c3kvc2Fzcy9zdXN5L2xhbmd1YWdlL3N1c3kvX2JyZWFrcG9pbnQtcGx1Z2luLnNjc3MiLCJfYmFzZS5zY3NzIiwiX21peGluLnNjc3MiLCJzaXRlL19zdHJ1Y3R1cmUuc2NzcyIsInNpdGUvX2NvbHVtcy5zY3NzIiwic2l0ZS9faGVhZGVyLnNjc3MiLCJzaXRlL19ib2R5LnNjc3MiLCJzaXRlL19mb290ZXIuc2NzcyIsIl9wcm9maWxhdGlvbi5zY3NzIiwiX2J1dHRvbi5zY3NzIiwiX21vZGFsLnNjc3MiLCJfaW5wdXQuc2NzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvL0BpbXBvcnQgXCJub3JtYWxpemVcIjtcbkBpbXBvcnQgXCJtZXllci1yZXNldFwiO1xuQGltcG9ydCBcIi4uLy4uL2Jvd2VyX2NvbXBvbmVudHMvc3VzeS9zYXNzL3N1c3lcIjtcbkBpbXBvcnQgXCJiYXNlXCI7XG5AaW1wb3J0IFwibWl4aW5cIjtcbkBpbXBvcnQgXCJzaXRlL3N0cnVjdHVyZVwiO1xuQGltcG9ydCBcInNpdGUvY29sdW1zXCI7XG5AaW1wb3J0IFwic2l0ZS9oZWFkZXJcIjtcbkBpbXBvcnQgXCJzaXRlL2JvZHlcIjtcbkBpbXBvcnQgXCJzaXRlL2Zvb3RlclwiO1xuQGltcG9ydCBcInByb2ZpbGF0aW9uXCI7XG5AaW1wb3J0IFwiYnV0dG9uXCI7XG5AaW1wb3J0IFwibW9kYWxcIjtcbkBpbXBvcnQgXCJpbnB1dFwiOyIsIkBtaXhpbiBtZXllci1yZXNldCB7XG4gIGh0bWwsIGJvZHksIGRpdiwgc3BhbiwgYXBwbGV0LCBvYmplY3QsIGlmcmFtZSwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgcCwgYmxvY2txdW90ZSwgcHJlLCBhLCBhYmJyLCBhY3JvbnltLCBhZGRyZXNzLCBiaWcsIGNpdGUsIGNvZGUsIGRlbCwgZGZuLCBlbSwgaW1nLCBpbnMsIGtiZCwgcSwgcywgc2FtcCwgc21hbGwsIHN0cmlrZSwgc3Ryb25nLCBzdWIsIHN1cCwgdHQsIHZhciwgYiwgdSwgaSwgY2VudGVyLCBkbCwgZHQsIGRkLCBvbCwgdWwsIGxpLCBmaWVsZHNldCwgZm9ybSwgbGFiZWwsIGxlZ2VuZCwgdGFibGUsIGNhcHRpb24sIHRib2R5LCB0Zm9vdCwgdGhlYWQsIHRyLCB0aCwgdGQsIGFydGljbGUsIGFzaWRlLCBjYW52YXMsIGRldGFpbHMsIGVtYmVkLCBmaWd1cmUsIGZpZ2NhcHRpb24sIGZvb3RlciwgaGVhZGVyLCBoZ3JvdXAsIG1lbnUsIG5hdiwgb3V0cHV0LCBydWJ5LCBzZWN0aW9uLCBzdW1tYXJ5LCB0aW1lLCBtYXJrLCBhdWRpbywgdmlkZW8ge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlcjogMDtcbiAgICBmb250LXNpemU6IDEwMCU7XG4gICAgZm9udDogaW5oZXJpdDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gIH1cbiAgLy8gSFRNTDUgZGlzcGxheS1yb2xlIHJlc2V0IGZvciBvbGRlciBicm93c2Vyc1xuICBhcnRpY2xlLCBhc2lkZSwgZGV0YWlscywgZmlnY2FwdGlvbiwgZmlndXJlLCBmb290ZXIsIGhlYWRlciwgaGdyb3VwLCBtZW51LCBuYXYsIHNlY3Rpb24ge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG4gIGJvZHkge1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICB9XG4gIG9sLCB1bCB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgfVxuICBibG9ja3F1b3RlLCBxIHtcbiAgICBxdW90ZXM6IG5vbmU7XG4gIH1cbiAgYmxvY2txdW90ZSB7XG4gICAgJjpiZWZvcmUsICY6YWZ0ZXIge1xuICAgICAgY29udGVudDogXCJcIjtcbiAgICAgIGNvbnRlbnQ6IG5vbmU7XG4gICAgfVxuICB9XG4gIHEge1xuICAgICY6YmVmb3JlLCAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICBjb250ZW50OiBub25lO1xuICAgIH1cbiAgfVxuICB0YWJsZSB7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgICBib3JkZXItc3BhY2luZzogMDtcbiAgfVxufVxuXG5AaW5jbHVkZSBtZXllci1yZXNldDsiLCIvLyBTdXN5XG4vLyA9PT09XG5cbkBpbXBvcnQgJ3N1c3kvbGFuZ3VhZ2Uvc3VzeSc7XG4iLCIvLyBTdXN5IE5leHQgU3ludGF4XG4vLyA9PT09PT09PT09PT09PT09XG5cbiRzdXN5LXZlcnNpb246IDIuMTtcblxuQGltcG9ydCBcIi4uL3N1XCI7XG5AaW1wb3J0IFwiLi4vb3V0cHV0L2Zsb2F0XCI7XG5cbkBpbXBvcnQgXCJzdXN5L3NldHRpbmdzXCI7XG5AaW1wb3J0IFwic3VzeS92YWxpZGF0aW9uXCI7XG5AaW1wb3J0IFwic3VzeS9ncmlkc1wiO1xuQGltcG9ydCBcInN1c3kvYm94LXNpemluZ1wiO1xuQGltcG9ydCBcInN1c3kvY29udGV4dFwiO1xuQGltcG9ydCBcInN1c3kvYmFja2dyb3VuZFwiO1xuQGltcG9ydCBcInN1c3kvY29udGFpbmVyXCI7XG5AaW1wb3J0IFwic3VzeS9zcGFuXCI7XG5AaW1wb3J0IFwic3VzeS9ndXR0ZXJzXCI7XG5AaW1wb3J0IFwic3VzeS9pc29sYXRlXCI7XG5AaW1wb3J0IFwic3VzeS9nYWxsZXJ5XCI7XG5AaW1wb3J0IFwic3VzeS9yb3dzXCI7XG5AaW1wb3J0IFwic3VzeS9tYXJnaW5zXCI7XG5AaW1wb3J0IFwic3VzeS9wYWRkaW5nXCI7XG5AaW1wb3J0IFwic3VzeS9ibGVlZFwiO1xuQGltcG9ydCBcInN1c3kvYnJlYWtwb2ludC1wbHVnaW5cIjtcbiIsIi8vIFN1XG4vLyA9PVxuXG5AaW1wb3J0IFwic3UvdXRpbGl0aWVzXCI7XG5AaW1wb3J0IFwic3Uvc2V0dGluZ3NcIjtcbkBpbXBvcnQgXCJzdS92YWxpZGF0aW9uXCI7XG5AaW1wb3J0IFwic3UvZ3JpZFwiO1xuIiwiLy8gTWFwIEZ1bmN0aW9uc1xuLy8gPT09PT09PT09PT09PVxuXG5cbi8vIFRydW5jYXRlIExpc3Rcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIC0gUmV0dXJuIGEgbGlzdCwgdHJ1bmNhdGVkIHRvIGEgZ2l2ZW4gbGVuZ3RoXG5AZnVuY3Rpb24gX3N1c3ktdHJ1bmNhdGUtbGlzdChcbiAgJGxpc3QsXG4gICRsZW5ndGhcbikge1xuICAkX3JldHVybjogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJGxpc3QpIHtcbiAgICAkX3JldHVybjogaWYoJGkgPD0gJGxlbmd0aCwgYXBwZW5kKCRfcmV0dXJuLCBudGgoJGxpc3QsICRpKSksICRfcmV0dXJuKTtcbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gRGVlcCBHZXRcbi8vIC0tLS0tLS0tXG4vLyAtIFJldHVybiBhIHZhbHVlIGRlZXAgaW4gbmVzdGVkIG1hcHNcbkBmdW5jdGlvbiBfc3VzeS1kZWVwLWdldChcbiAgJG1hcCxcbiAgJGtleXMuLi5cbikge1xuICAkX3JldHVybjogJG1hcDtcblxuICBAZWFjaCAka2V5IGluICRrZXlzIHtcbiAgICBAaWYgdHlwZS1vZigkX3JldHVybikgPT0gbWFwIHtcbiAgICAgICRfcmV0dXJuOiBtYXAtZ2V0KCRfcmV0dXJuLCAka2V5KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIERlZXAgU2V0XG4vLyAtLS0tLS0tLVxuLy8gLSBTZXQgYSB2YWx1ZSBkZWVwIGluIG5lc3RlZCBtYXBzXG5AZnVuY3Rpb24gX3N1c3ktZGVlcC1zZXQoXG4gICRtYXAsXG4gICRrZXlzLXZhbHVlLi4uXG4pIHtcbiAgJF92YWx1ZTogbnRoKCRrZXlzLXZhbHVlLCAtMSk7XG4gICRfa2V5czogX3N1c3ktdHJ1bmNhdGUtbGlzdCgka2V5cy12YWx1ZSwgbGVuZ3RoKCRrZXlzLXZhbHVlKSAtIDEpO1xuICAkX2xlbmd0aDogbGVuZ3RoKCRfa2V5cyk7XG4gICRfcmV0dXJuOiAoKTtcblxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoICRfbGVuZ3RoIHtcbiAgICAkX246IDAgLSAkaTtcbiAgICAkX2xldmVsOiBfc3VzeS10cnVuY2F0ZS1saXN0KCRfa2V5cywgJF9sZW5ndGggKyAkX24pO1xuICAgICRfbGV2ZWw6IF9zdXN5LWRlZXAtZ2V0KCRtYXAsICRfbGV2ZWwuLi4pO1xuICAgICRfbWVyZ2U6IG50aCgkX2tleXMsICRfbik7XG4gICAgJF9tZXJnZTogKCRfbWVyZ2U6ICRfdmFsdWUpO1xuICAgICRfcmV0dXJuOiBpZigkX2xldmVsLCBtYXAtbWVyZ2UoJF9sZXZlbCwgJF9tZXJnZSksICRfbWVyZ2UpO1xuICAgICRfdmFsdWU6ICRfcmV0dXJuO1xuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBEZWVwIE1lcmdlXG4vLyAtLS0tLS0tLS0tXG4vLyBSZXR1cm4gMiBvYmplY3RzIG9mIGFueSBkZXB0aCwgbWVyZ2VkXG5AZnVuY3Rpb24gX3N1c3ktZGVlcC1tZXJnZShcbiAgJG1hcDEsXG4gICRtYXAyXG4pIHtcblxuICBAaWYgdHlwZS1vZigkbWFwMSkgIT0gbWFwIG9yIHR5cGUtb2YoJG1hcDIpICE9IG1hcCB7XG4gICAgJG1hcDE6ICRtYXAyO1xuICB9IEBlbHNlIHtcbiAgICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJG1hcDIge1xuICAgICAgJF9uZXc6ICgka2V5OiBfc3VzeV9kZWVwLW1lcmdlKG1hcC1nZXQoJG1hcDEsICRrZXkpLCAkdmFsdWUpKTtcbiAgICAgICRtYXAxOiBtYXAtbWVyZ2UoJG1hcDEsICRfbmV3KTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRtYXAxO1xufVxuXG5cbi8vIERlZXAgSGFzLUtleVxuLy8gLS0tLS0tLS0tLS0tXG4vLyAtIFJldHVybiB0cnVlIGlmIGEgZGVlcCBrZXkgZXhpc3RzXG5AZnVuY3Rpb24gX3N1c3ktZGVlcC1oYXMta2V5KFxuICAkbWFwLFxuICAka2V5cy4uLlxuKSB7XG4gICRfcmV0dXJuOiBudWxsO1xuICAkX3N0b3A6IGZhbHNlO1xuXG4gIEBlYWNoICRrZXkgaW4gJGtleXMge1xuICAgIEBpZiBub3QoJF9zdG9wKSB7XG4gICAgICAkX3JldHVybjogbWFwLWhhcy1rZXkoJG1hcCwgJGtleSk7XG4gICAgfVxuXG4gICAgQGlmICRfcmV0dXJuIHtcbiAgICAgICRtYXA6IG1hcC1nZXQoJG1hcCwgJGtleSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkX3N0b3A6IHRydWU7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cbiIsIi8vIFNldHRpbmdzXG4vLyA9PT09PT09PVxuXG4vLyBWZXJzaW9uXG4vLyAtLS0tLS0tXG4kc3UtdmVyc2lvbjogMS4xO1xuXG5cbi8vIERlZmF1bHQgU2V0dGluZ3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vIFBSSVZBVEU6IFRoZSBiYXNpYyBzZXR0aW5nc1xuJHN1c3ktZGVmYXVsdHM6IChcbiAgY29sdW1uczogNCxcbiAgZ3V0dGVyczogLjI1LFxuKTtcblxuXG4vLyBVc2VyIFNldHRpbmdzXG4vLyAtLS0tLS0tLS0tLS0tXG4vLyAtIERlZmluZSB0aGUgJHN1c3kgdmFyaWFibGUgd2l0aCBhIG1hcCBvZiB5b3VyIG93biBzZXR0aW5ncy5cbi8vIC0gU2V0IEVJVEhFUiAkY29sdW1uLXdpZHRoIE9SICRjb250YWluZXJcbi8vIC0gVXNlICRjb2x1bW4td2lkdGggZm9yIHN0YXRpYyBsYXlvdXRzXG4kc3VzeTogKCkgIWRlZmF1bHQ7XG5cblxuLy8gU3VzeSBEZWZhdWx0c1xuLy8gLS0tLS0tLS0tLS0tLVxuLy8gUFJJVkFURTogQWRkIGRlZmF1bHRzIHRvIFN1c3lcbkBtaXhpbiBzdXN5LWRlZmF1bHRzKFxuICAkZGVmYXVsdHNcbikge1xuICAkc3VzeS1kZWZhdWx0czogbWFwLW1lcmdlKCRzdXN5LWRlZmF1bHRzLCAkZGVmYXVsdHMpICFnbG9iYWw7XG59XG5cblxuLy8gU3VzeSBTZXRcbi8vIC0tLS0tLS0tXG4vLyBDaGFuZ2Ugb25lIHNldHRpbmdcbi8vIC0gJGtleSAgIDogc2V0dGluZyBuYW1lXG4vLyAtICR2YWx1ZSA6IHNldHRpbmcgdmFsdWVcbkBtaXhpbiBzdXN5LXNldChcbiAgJGtleS12YWx1ZS4uLlxuKSB7XG4gICRzdXN5OiBfc3VzeS1kZWVwLXNldCgkc3VzeSwgJGtleS12YWx1ZS4uLikgIWdsb2JhbDtcbn1cblxuXG4vLyBTdXN5IEdldFxuLy8gLS0tLS0tLS1cbi8vIFJldHVybiBvbmUgc2V0dGluZyBmcm9tIGEgZ3JpZFxuLy8gLSAka2V5ICAgICA6IDxrZXl3b3JkPlxuLy8gLSAkbGF5b3V0ICA6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBzdXN5LWdldChcbiAgJGtleSxcbiAgJGxheW91dDogbWFwLW1lcmdlKCRzdXN5LWRlZmF1bHRzLCAkc3VzeSlcbikge1xuICAkbGF5b3V0OiBwYXJzZS1ncmlkKCRsYXlvdXQpO1xuICAkX29wdGlvbnM6ICRsYXlvdXQgJHN1c3kgJHN1c3ktZGVmYXVsdHM7XG4gICRfYnJlYWs6IGZhbHNlO1xuICAkX3JldHVybjogbnVsbDtcblxuICBAZWFjaCAkb3B0IGluICRfb3B0aW9ucyB7XG4gICAgQGlmIHR5cGUtb2YoJG9wdCkgPT0gbWFwIGFuZCBub3QoJF9icmVhaykge1xuICAgICAgJF9rZXlzZXQ6IF9zdXN5LWRlZXAtaGFzLWtleSgkb3B0LCAka2V5Li4uKTtcbiAgICAgIEBpZiAkX2tleXNldCB7XG4gICAgICAgICRfcmV0dXJuOiBfc3VzeS1kZWVwLWdldCgkb3B0LCAka2V5Li4uKTtcbiAgICAgICAgJF9icmVhazogdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuIiwiLy8gTWF0aCBWYWxpZGF0aW9uXG4vLyA9PT09PT09PT09PT09PT1cblxuXG4vLyBWYWxpZCBDb2x1bW5zXG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBDaGVjayB0aGF0IGEgY29sdW1uIHNldHRpbmcgaXMgdmFsaWQuXG5AZnVuY3Rpb24gdmFsaWQtY29sdW1ucyhcbiAgJGNvbHVtbnMsXG4gICRzaWxlbnQ6IGZhbHNlXG4pIHtcbiAgJHR5cGU6IHR5cGUtb2YoJGNvbHVtbnMpO1xuICAkcmV0dXJuOiBudWxsO1xuXG4gIEBpZiAkdHlwZSA9PSBudW1iZXIgYW5kIHVuaXRsZXNzKCRjb2x1bW5zKSB7XG4gICAgJHJldHVybjogJGNvbHVtbnM7XG4gIH0gQGVsc2UgaWYgJHR5cGUgPT0gbGlzdCB7XG4gICAgJGZhaWw6IG51bGw7XG4gICAgQGVhY2ggJGNvbCBpbiAkY29sdW1ucyB7XG4gICAgICBAaWYgdHlwZS1vZigkY29sKSA9PSBudW1iZXIge1xuICAgICAgICAkZmFpbDogJGZhaWwgb3IgaWYodW5pdGxlc3MoJGNvbCksIG51bGwsIHRydWUpO1xuICAgICAgfSBAZWxzZSB7XG4gICAgICAgICRmYWlsOiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICAkcmV0dXJuOiBpZigkZmFpbCwgJHJldHVybiwgJGNvbHVtbnMpO1xuICB9XG5cbiAgQGlmICRyZXR1cm4gIT0gJGNvbHVtbnMgYW5kIG5vdCgkc2lsZW50KSB7XG4gICAgJHJldHVybjogbnVsbDtcbiAgICAkd2FybjogJyRjb2x1bW5zIG11c3QgYmUgYSB1bml0bGVzcyBudW1iZXIgb3IgbGlzdCBvZiB1bml0bGVzcyBudW1iZXJzLic7XG4gICAgQHdhcm4gJHdhcm4gKyAnIEN1cnJlbnQgdmFsdWUgWyN7JHR5cGV9XTogI3skY29sdW1uc30nO1xuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuXG5cbi8vIFZhbGlkIEd1dHRlcnNcbi8vIC0tLS0tLS0tLS0tLS1cbi8vIENoZWNrIHRoYXQgYSBndXR0ZXIgc2V0dGluZyBpcyB2YWxpZC5cbkBmdW5jdGlvbiB2YWxpZC1ndXR0ZXJzKFxuICAkZ3V0dGVycyxcbiAgJHNpbGVudDogZmFsc2Vcbikge1xuICAkdHlwZTogdHlwZS1vZigkZ3V0dGVycyk7XG4gICRyZXR1cm46IG51bGw7XG5cbiAgQGlmICR0eXBlID09IG51bWJlciBhbmQgdW5pdGxlc3MoJGd1dHRlcnMpIHtcbiAgICAkcmV0dXJuOiAkZ3V0dGVycztcbiAgfSBAZWxzZSBpZiBub3QoJHNpbGVudCkge1xuICAgICR3YXJuOiAnJGd1dHRlcnMgbXVzdCBiZSBhIHVuaXRsZXNzIG51bWJlci4nO1xuICAgIEB3YXJuICR3YXJuICsgJyBDdXJyZW50IHZhbHVlIFsjeyR0eXBlfV06ICN7JGd1dHRlcnN9JztcbiAgfVxuXG4gIEByZXR1cm4gJHJldHVybjtcbn1cbiIsIi8vIENvbHVtbiBtYXRoXG4vLyA9PT09PT09PT09PVxuXG5cbi8vIElzIFN5bW1ldHJpY2FsXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJucyB0cnVlIGlmIGEgZ3JpZCBpcyBzeW1tZXRyaWNhbC5cbi8vIC0gWyRjb2x1bW5zXSAgIDogPG51bWJlcj4gfCA8bGlzdD5cbkBmdW5jdGlvbiBpcy1zeW1tZXRyaWNhbChcbiAgJGNvbHVtbnM6IHN1c3ktZ2V0KGNvbHVtbnMpXG4pIHtcbiAgJGNvbHVtbnM6IHZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICBAcmV0dXJuIGlmKHR5cGUtb2YoJGNvbHVtbnMpID09IG51bWJlciwgJGNvbHVtbnMsIG51bGwpO1xufVxuXG5cbi8vIFN1c3kgQ291bnRcbi8vIC0tLS0tLS0tLS1cbi8vIEZpbmQgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIGEgZ2l2ZW4gbGF5b3V0XG4vLyAtIFskY29sdW1uc10gICA6IDxudW1iZXI+IHwgPGxpc3Q+XG5AZnVuY3Rpb24gc3VzeS1jb3VudChcbiAgJGNvbHVtbnM6IHN1c3ktZ2V0KGNvbHVtbnMpXG4pIHtcbiAgJGNvbHVtbnM6IHZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICBAcmV0dXJuIGlzLXN5bW1ldHJpY2FsKCRjb2x1bW5zKSBvciBsZW5ndGgoJGNvbHVtbnMpO1xufVxuXG5cbi8vIFN1c3kgU3VtXG4vLyAtLS0tLS0tLVxuLy8gRmluZCB0aGUgdG90YWwgc3VtIG9mIGNvbHVtbi11bml0cyBpbiBhIGxheW91dFxuLy8gLSBbJGNvbHVtbnNdICAgOiA8bnVtYmVyPiB8IDxsaXN0PlxuLy8gLSBbJGd1dHRlcnNdICAgOiA8cmF0aW8+XG4vLyAtIFskc3ByZWFkXSAgICA6IGZhbHNlL25hcnJvdyB8IHdpZGUgfCB3aWRlclxuQGZ1bmN0aW9uIHN1c3ktc3VtKFxuICAkY29sdW1ucyAgOiBzdXN5LWdldChjb2x1bW5zKSxcbiAgJGd1dHRlcnMgIDogc3VzeS1nZXQoZ3V0dGVycyksXG4gICRzcHJlYWQgICA6IGZhbHNlXG4pIHtcbiAgJGNvbHVtbnM6IHZhbGlkLWNvbHVtbnMoJGNvbHVtbnMpO1xuICAkZ3V0dGVyczogdmFsaWQtZ3V0dGVycygkZ3V0dGVycyk7XG5cbiAgJHNwcmVhZDogaWYoJHNwcmVhZCA9PSB3aWRlLCAwLCBpZigkc3ByZWFkID09IHdpZGVyLCAxLCAtMSkpO1xuICAkZ3V0dGVyLXN1bTogKHN1c3ktY291bnQoJGNvbHVtbnMpICsgJHNwcmVhZCkgKiAkZ3V0dGVycztcbiAgJGNvbHVtbi1zdW06IGlzLXN5bW1ldHJpY2FsKCRjb2x1bW5zKTtcblxuICBAaWYgbm90KCRjb2x1bW4tc3VtKSB7XG4gICAgQGVhY2ggJGNvbHVtbiBpbiAkY29sdW1ucyB7XG4gICAgICAkY29sdW1uLXN1bTogKCRjb2x1bW4tc3VtIG9yIDApICsgJGNvbHVtbjtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRjb2x1bW4tc3VtICsgJGd1dHRlci1zdW07XG59XG5cblxuLy8gU3VzeSBTbGljZVxuLy8gLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGEgc3Vic2V0IG9mIGNvbHVtbnMgYXQgYSBnaXZlbiBsb2NhdGlvbi5cbi8vIC0gJHNwYW4gICAgICAgIDogPG51bWJlcj5cbi8vIC0gJGxvY2F0aW9uICAgIDogPG51bWJlcj5cbi8vIC0gWyRjb2x1bW5zXSAgIDogPG51bWJlcj4gfCA8bGlzdD5cbkBmdW5jdGlvbiBzdXN5LXNsaWNlKFxuICAkc3BhbixcbiAgJGxvY2F0aW9uLFxuICAkY29sdW1uczogc3VzeS1nZXQoY29sdW1ucylcbikge1xuICAkY29sdW1uczogdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICRzdWItY29sdW1uczogJHNwYW47XG5cbiAgQGlmIG5vdChpcy1zeW1tZXRyaWNhbCgkY29sdW1ucykpIHtcbiAgICAkbG9jYXRpb246ICRsb2NhdGlvbiBvciAxO1xuICAgICRzdWItY29sdW1uczogKCk7XG4gICAgQGZvciAkaSBmcm9tICRsb2NhdGlvbiB0byAoJGxvY2F0aW9uICsgJHNwYW4pIHtcbiAgICAgICRzdWItY29sdW1uczogYXBwZW5kKCRzdWItY29sdW1ucywgbnRoKCRjb2x1bW5zLCAkaSkpO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJHN1Yi1jb2x1bW5zO1xufVxuXG5cbi8vIFN1c3lcbi8vIC0tLS1cbi8vIEZpbmQgdGhlIHN1bSBvZiBhIGNvbHVtbi1zcGFuLlxuLy8gLSAkc3BhbiAgICAgICAgOiA8bnVtYmVyPlxuLy8gLSAkbG9jYXRpb24gICAgOiA8bnVtYmVyPlxuLy8gLSBbJGNvbHVtbnNdICAgOiA8bnVtYmVyPiB8IDxsaXN0PlxuLy8gLSBbJGd1dHRlcnNdICAgOiA8cmF0aW8+XG4vLyAtIFskc3ByZWFkXSAgICA6IGZhbHNlL25hcnJvdyB8IHdpZGUgfCB3aWRlclxuQGZ1bmN0aW9uIHN1c3koXG4gICRzcGFuLFxuICAkbG9jYXRpb24gICAgIDogZmFsc2UsXG4gICRjb2x1bW5zICAgICAgOiBzdXN5LWdldChjb2x1bW5zKSxcbiAgJGd1dHRlcnMgICAgICA6IHN1c3ktZ2V0KGd1dHRlcnMpLFxuICAkc3ByZWFkICAgICAgIDogZmFsc2Vcbikge1xuICAkY29sdW1uczogdmFsaWQtY29sdW1ucygkY29sdW1ucyk7XG4gICRndXR0ZXJzOiB2YWxpZC1ndXR0ZXJzKCRndXR0ZXJzKTtcbiAgJHNwYW46IHN1c3ktc2xpY2UoJHNwYW4sICRsb2NhdGlvbiwgJGNvbHVtbnMpO1xuXG4gIEByZXR1cm4gc3VzeS1zdW0oJHNwYW4sICRndXR0ZXJzLCAkc3ByZWFkKTtcbn1cbiIsIi8vIEZsb2F0IEFQSVxuLy8gPT09PT09PT09XG5cbkBpbXBvcnQgXCJzaGFyZWRcIjtcblxuQGltcG9ydCBcImZsb2F0L2NvbnRhaW5lclwiO1xuQGltcG9ydCBcImZsb2F0L3NwYW5cIjtcbkBpbXBvcnQgXCJmbG9hdC9lbmRcIjtcbkBpbXBvcnQgXCJmbG9hdC9pc29sYXRlXCI7XG4iLCIvLyBTaGFyZWQgQVBJXG4vLyA9PT09PT09PT09XG5cbkBpbXBvcnQgXCJzdXBwb3J0XCI7XG5cbkBpbXBvcnQgXCJzaGFyZWQvaW5zcGVjdFwiO1xuQGltcG9ydCBcInNoYXJlZC9vdXRwdXRcIjtcbkBpbXBvcnQgXCJzaGFyZWQvZGlyZWN0aW9uXCI7XG5AaW1wb3J0IFwic2hhcmVkL2JhY2tncm91bmRcIjtcbkBpbXBvcnQgXCJzaGFyZWQvY29udGFpbmVyXCI7XG5AaW1wb3J0IFwic2hhcmVkL21hcmdpbnNcIjtcbkBpbXBvcnQgXCJzaGFyZWQvcGFkZGluZ1wiO1xuXG5cblxuIiwiLy8gU3VzeSBCcm93c2VyIFN1cHBvcnRcbi8vID09PT09PT09PT09PT09PT09PT09XG5cbkBpbXBvcnQgXCJzdXBwb3J0L3N1cHBvcnRcIjtcbkBpbXBvcnQgXCJzdXBwb3J0L3ByZWZpeFwiO1xuQGltcG9ydCBcInN1cHBvcnQvYmFja2dyb3VuZFwiO1xuQGltcG9ydCBcInN1cHBvcnQvYm94LXNpemluZ1wiO1xuQGltcG9ydCBcInN1cHBvcnQvcmVtXCI7XG5AaW1wb3J0IFwic3VwcG9ydC9jbGVhcmZpeFwiO1xuIiwiLy8gQnJvd3NlciBTdXBwb3J0XG4vLyA9PT09PT09PT09PT09PT1cblxuLy8gU3VzeSBTdXBwb3J0IERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBpbmNsdWRlIHN1c3ktZGVmYXVsdHMoKFxuICB1c2UtY3VzdG9tOiAoXG4gICAgY2xlYXJmaXg6IGZhbHNlLFxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHRydWUsXG4gICAgYmFja2dyb3VuZC1vcHRpb25zOiBmYWxzZSxcbiAgICBicmVha3BvaW50OiB0cnVlLFxuICAgIGJveC1zaXppbmc6IHRydWUsXG4gICAgcmVtOiB0cnVlLFxuICApLFxuKSk7XG5cblxuLy8gU3VzeSBTdXBwb3J0IFttaXhpbl1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTZW5kIHByb3BlcnR5LXZhbHVlIHBhaXJzIHRvIHRoZSBwcm9wZXIgc3VwcG9ydCBtb2R1bGVzLlxuLy8gLSAkcHJvcCAgOiA8Y3NzIHByb3BlcnR5PlxuLy8gLSAkdmFsICAgOiA8Y3NzIHZhbHVlPlxuQG1peGluIHN1c3ktc3VwcG9ydChcbiAgJHByb3AsXG4gICR2YWxcbikge1xuICAvLyBCYWNrZ3JvdW5kIFN1cHBvcnRcbiAgQGlmICRwcm9wID09IGJhY2tncm91bmQtaW1hZ2Uge1xuICAgIEBpbmNsdWRlIHN1c3ktYmFja2dyb3VuZC1pbWFnZSgkdmFsKTtcbiAgfSBAZWxzZSBpZiAkcHJvcCA9PSBiYWNrZ3JvdW5kLXNpemUge1xuICAgIEBpbmNsdWRlIHN1c3ktYmFja2dyb3VuZC1zaXplKCR2YWwpO1xuICB9IEBlbHNlIGlmICRwcm9wID09IGJhY2tncm91bmQtb3JpZ2luIHtcbiAgICBAaW5jbHVkZSBzdXN5LWJhY2tncm91bmQtb3JpZ2luKCR2YWwpO1xuICB9IEBlbHNlIGlmICRwcm9wID09IGJhY2tncm91bmQtY2xpcCB7XG4gICAgQGluY2x1ZGUgc3VzeS1iYWNrZ3JvdW5kLWNsaXAoJHZhbCk7XG4gIH1cblxuICAvLyBCb3gtU2l6aW5nIFN1cHBvcnRcbiAgQGVsc2UgaWYgJHByb3AgPT0gYm94LXNpemluZyB7XG4gICAgQGluY2x1ZGUgc3VzeS1ib3gtc2l6aW5nKCR2YWwpO1xuICB9XG5cbiAgLy8gUmVtIFN1cHBvcnRcbiAgQGVsc2Uge1xuICAgIEBpbmNsdWRlIHN1c3ktcmVtKCRwcm9wLCAkdmFsKTtcbiAgfVxufVxuXG5cbi8vIFN1c3kgU3VwcG9ydCBbZnVuY3Rpb25dXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hlY2sgZm9yIHN1cHBvcnQgb2YgYSBmZWF0dXJlLlxuLy8gLSAkZmVhdHVyZSAgICAgICA6IDxzdHJpbmc+XG4vLyAgICAgICAgICAgICAgICAgICAgLSBlLmcgXCJyZW1cIiBvciBcImJveC1zaXppbmdcIlxuLy8gLSAkcmVxdWlyZW1lbnRzICA6IDxtYXA+XG4vLyAgICAgICAgICAgICAgICAgICAgLSBlLmcgKHZhcmlhYmxlOiByZW0td2l0aC1weC1mYWxsYmFjaywgbWl4aW46IHJlbSlcbi8vIC0gJHdhcm4gICAgICAgICAgOiA8Ym9vbD5cbkBmdW5jdGlvbiBzdXN5LXN1cHBvcnQoXG4gICRmZWF0dXJlLFxuICAkcmVxdWlyZW1lbnRzOiAoKSxcbiAgJHdhcm46IHRydWVcbikge1xuICAkX3N1cHBvcnQ6IHN1c3ktZ2V0KHVzZS1jdXN0b20gJGZlYXR1cmUpO1xuXG4gIEBpZiAkX3N1cHBvcnQge1xuICAgICRfZmFpbDogZmFsc2U7XG5cbiAgICBAZWFjaCAkX3R5cGUsICRfcmVxIGluICRyZXF1aXJlbWVudHMge1xuICAgICAgQGVhY2ggJF9pIGluICRfcmVxIHtcbiAgICAgICAgJF9wYXNzOiBjYWxsKHVucXVvdGUoXCIjeyRfdHlwZX0tZXhpc3RzXCIpLCAkX2kpO1xuXG4gICAgICAgIEBpZiBub3QoJF9wYXNzKSB7XG4gICAgICAgICAgJF9mYWlsOiB0cnVlO1xuICAgICAgICAgIEBpZiAkd2FybiB7XG4gICAgICAgICAgICBAd2FybiBcIllvdSByZXF1ZXN0ZWQgY3VzdG9tIHN1cHBvcnQgb2YgI3skZmVhdHVyZX0sIGJ1dCB0aGUgI3skX2l9ICN7JF90eXBlfSBpcyBub3QgYXZhaWxhYmxlLlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICRfc3VwcG9ydDogaWYoJF9mYWlsLCBmYWxzZSwgJF9zdXBwb3J0KTtcbiAgfVxuXG4gIEByZXR1cm4gJF9zdXBwb3J0O1xufVxuIiwiLy8gU3VzeSBQcmVmaXhcbi8vID09PT09PT09PT09XG5cbi8vIFByZWZpeFxuLy8gLS0tLS0tXG4vLyBPdXRwdXQgc2ltcGxlIHByZWZpeGVkIHByb3BlcnRpZXMuXG4vLyAtICRwcm9wICAgICAgOiA8Y3NzIHByb3BlcnR5PlxuLy8gLSAkdmFsICAgICAgIDogPGNzcyB2YWx1ZT5cbi8vIC0gWyRwcmVmaXhdICA6IDxicm93c2VyIHByZWZpeCBsaXN0PlxuQG1peGluIHN1c3ktcHJlZml4KFxuICAkcHJvcCxcbiAgJHZhbCxcbiAgJHByZWZpeDogb2ZmaWNpYWxcbikge1xuICBAZWFjaCAkZml4IGluICRwcmVmaXgge1xuICAgICRmaXg6IGlmKCRmaXggPT0gb2ZmaWNpYWwgb3Igbm90KCRmaXgpLCAkcHJvcCwgJy0jeyRmaXh9LSN7JHByb3B9Jyk7XG4gICAgQGluY2x1ZGUgc3VzeS1yZW0oJGZpeCwgJHZhbCk7XG4gIH1cbn1cbiIsIi8vIEJhY2tncm91bmQgUHJvcGVydGllc1xuLy8gPT09PT09PT09PT09PT09PT09PT09XG5cbi8vIFN1c3kgQmFja2dyb3VuZCBJbWFnZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3IgcHJvdmlkZSBhIHNpbXBsZSBmYWxsYmFjay5cbi8vIC0gJGltYWdlOiA8YmFja2dyb3VuZC1pbWFnZT5cbkBtaXhpbiBzdXN5LWJhY2tncm91bmQtaW1hZ2UoXG4gICRpbWFnZVxuKSB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoYmFja2dyb3VuZC1pbWFnZSwgKG1peGluOiBiYWNrZ3JvdW5kLWltYWdlKSwgJHdhcm46IGZhbHNlKSB7XG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC1pbWFnZSgkaW1hZ2UuLi4pO1xuICB9IEBlbHNlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAkaW1hZ2U7XG4gIH1cbn1cblxuLy8gU3VzeSBCYWNrZ3JvdW5kIFNpemVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIHByb3ZpZGUgYSBzaW1wbGUgZmFsbGJhY2suXG4vLyAtICRpbWFnZTogPGJhY2tncm91bmQtc2l6ZT5cbkBtaXhpbiBzdXN5LWJhY2tncm91bmQtc2l6ZShcbiAgJHNpemVcbikge1xuICBAaWYgc3VzeS1zdXBwb3J0KGJhY2tncm91bmQtb3B0aW9ucywgKG1peGluOiBiYWNrZ3JvdW5kLXNpemUpKSB7XG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC1zaXplKCRzaXplKTtcbiAgfSBAZWxzZSB7XG4gICAgYmFja2dyb3VuZC1zaXplOiAkc2l6ZTtcbiAgfVxufVxuXG4vLyBTdXN5IEJhY2tncm91bmQgT3JpZ2luXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDaGVjayBmb3IgYW4gZXhpc3Rpbmcgc3VwcG9ydCBtaXhpbiwgb3IgcHJvdmlkZSBhIHNpbXBsZSBmYWxsYmFjay5cbi8vIC0gJGltYWdlOiA8YmFja2dyb3VuZC1vcmlnaW4+XG5AbWl4aW4gc3VzeS1iYWNrZ3JvdW5kLW9yaWdpbihcbiAgJG9yaWdpblxuKSB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoYmFja2dyb3VuZC1vcHRpb25zLCAobWl4aW46IGJhY2tncm91bmQtb3JpZ2luKSkge1xuICAgIEBpbmNsdWRlIGJhY2tncm91bmQtb3JpZ2luKCRvcmlnaW4pO1xuICB9IEBlbHNlIHtcbiAgICBiYWNrZ3JvdW5kLW9yaWdpbjogJG9yaWdpbjtcbiAgfVxufVxuXG4vLyBTdXN5IEJhY2tncm91bmQgQ2xpcFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIENoZWNrIGZvciBhbiBleGlzdGluZyBzdXBwb3J0IG1peGluLCBvciBwcm92aWRlIGEgc2ltcGxlIGZhbGxiYWNrLlxuLy8gLSAkaW1hZ2U6IDxiYWNrZ3JvdW5kLWNsaXA+XG5AbWl4aW4gc3VzeS1iYWNrZ3JvdW5kLWNsaXAoXG4gICRjbGlwXG4pIHtcbiAgQGlmIHN1c3ktc3VwcG9ydChiYWNrZ3JvdW5kLW9wdGlvbnMsIChtaXhpbjogYmFja2dyb3VuZC1jbGlwKSkge1xuICAgIEBpbmNsdWRlIGJhY2tncm91bmQtY2xpcCgkY2xpcCk7XG4gIH0gQGVsc2Uge1xuICAgIGJhY2tncm91bmQtY2xpcDogJGNsaXA7XG4gIH1cbn1cbiIsIi8vIEJveCBTaXppbmdcbi8vID09PT09PT09PT1cblxuLy8gQm94IFNpemluZ1xuLy8gLS0tLS0tLS0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIHByb3ZpZGUgYSBzaW1wbGUgZmFsbGJhY2suXG4vLyAtICRtb2RlbDogPGJveC1zaXppbmc+XG5AbWl4aW4gc3VzeS1ib3gtc2l6aW5nKFxuICAkbW9kZWw6IGNvbnRlbnQtYm94XG4pIHtcbiAgQGlmICRtb2RlbCB7XG4gICAgQGlmIHN1c3ktc3VwcG9ydChib3gtc2l6aW5nLCAobWl4aW46IGJveC1zaXppbmcpLCAkd2FybjogZmFsc2UpIHtcbiAgICAgIEBpbmNsdWRlIGJveC1zaXppbmcoJG1vZGVsKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRwcmVmaXg6IChtb3osIHdlYmtpdCwgb2ZmaWNpYWwpO1xuICAgICAgQGluY2x1ZGUgc3VzeS1wcmVmaXgoYm94LXNpemluZywgJG1vZGVsLCAkcHJlZml4KTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIHJlbSBTdXBwb3J0XG4vLyA9PT09PT09PT09PVxuXG4vLyByZW1cbi8vIC0tLVxuLy8gQ2hlY2sgZm9yIGFuIGV4aXN0aW5nIHN1cHBvcnQgbWl4aW4sIG9yIG91dHB1dCBkaXJlY3RseS5cbi8vIC0gJHByb3AgIDogPGNzcyBwcm9wZXJ0eT5cbi8vIC0gJHZhbCAgIDogPGNzcyB2YWx1ZT5cbkBtaXhpbiBzdXN5LXJlbShcbiAgJHByb3AsXG4gICR2YWxcbikge1xuICAkX3JlcXM6IChcbiAgICB2YXJpYWJsZTogcmh5dGhtLXVuaXQgcmVtLXdpdGgtcHgtZmFsbGJhY2ssXG4gICAgbWl4aW46IHJlbSxcbiAgKTtcbiAgQGlmIHN1c3ktc3VwcG9ydChyZW0sICRfcmVxcywgJHdhcm46IGZhbHNlKSBhbmQgJHJoeXRobS11bml0ID09IHJlbSB7XG4gICAgQGluY2x1ZGUgcmVtKCRwcm9wLCAkdmFsKTtcbiAgfSBAZWxzZSB7XG4gICAgI3skcHJvcH06ICR2YWw7XG4gIH1cbn1cbiIsIi8vIFN1c3kgRmFsbGJhY2sgQ2xlYXJmaXhcbi8vID09PT09PT09PT09PT09PT09PT09PT1cblxuXG4vLyBDbGVhcmZpeFxuLy8gLS0tLS0tLS1cbi8vIENoZWNrIGZvciBhbiBleGlzdGluZyBzdXBwb3J0IG1peGluLCBvciBwcm92aWRlIGEgc2ltcGxlIGZhbGxiYWNrLlxuQG1peGluIHN1c3ktY2xlYXJmaXgge1xuICBAaWYgc3VzeS1zdXBwb3J0KGNsZWFyZml4LCAobWl4aW46IGNsZWFyZml4KSkge1xuICAgIEBpbmNsdWRlIGNsZWFyZml4O1xuICB9IEBlbHNlIHtcbiAgICAmOmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6IFwiIFwiO1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjbGVhcjogYm90aDtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIERlYnVnZ2luZ1xuLy8gPT09PT09PT09XG5cbi8vIFN1c3kgSW5zcGVjdFxuLy8gLS0tLS0tLS0tLS0tXG4vLyBPdXRwdXQgYXJndW1lbnRzIHBhc3NlZCB0byBhIGluc3BlY3QuXG4vLyAtICRtaXhpbiAgOiA8c3VzeSBtaXhpbj5cbi8vIC0gJGluc3BlYyAgIDogPG1peGluIGFyZ3VtZW50cz5cblxuQG1peGluIHN1c3ktaW5zcGVjdChcbiAgJG1peGluLFxuICAkaW5zcGVjdFxuKSB7XG4gICRzaG93OiBmYWxzZTtcblxuICBAZWFjaCAkaXRlbSBpbiAkaW5zcGVjdCB7XG4gICAgQGlmIGluZGV4KCRpdGVtLCBpbnNwZWN0KSB7XG4gICAgICAkc2hvdzogdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBAaWYgJHNob3cgb3Igc3VzeS1nZXQoZGVidWcgaW5zcGVjdCkge1xuICAgIC1zdXN5LSN7JG1peGlufTogaW5zcGVjdCgkaW5zcGVjdCk7XG4gIH1cbn1cbiIsIi8vIE91dHB1dFxuLy8gPT09PT09XG5cbi8vIE91dHB1dFxuLy8gLS0tLS0tXG4vLyBPdXRwdXQgQ1NTIHdpdGggcHJvcGVyIGJyb3dzZXIgc3VwcG9ydC5cbi8vIC0gJHN0eWxlcyAgOiA8bWFwIG9mIGNzcyBwcm9wZXJ0eS12YWx1ZSBwYWlycz5cbkBtaXhpbiBvdXRwdXQoXG4gICRzdHlsZXNcbikge1xuICBAZWFjaCAkcHJvcCwgJHZhbCBpbiAkc3R5bGVzIHtcbiAgICBAaW5jbHVkZSBzdXN5LXN1cHBvcnQoJHByb3AsICR2YWwpO1xuICB9XG59XG4iLCIvLyBEaXJlY3Rpb24gSGVscGVyc1xuLy8gPT09PT09PT09PT09PT09PT1cblxuLy8gU3VzeSBGbG93IERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gUFJJVkFURVxuQGluY2x1ZGUgc3VzeS1kZWZhdWx0cygoXG4gIGZsb3c6IGx0cixcbikpO1xuXG4vLyBHZXQgRGlyZWN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlICdmcm9tJyBvciAndG8nIGRpcmVjdGlvbiBvZiBhIGx0ciBvciBydGwgZmxvdy5cbi8vIC0gWyRmbG93XSAgOiBsdHIgfCBydGxcbi8vIC0gWyRrZXldICAgOiBmcm9tIHwgdG9cbkBmdW5jdGlvbiBnZXQtZGlyZWN0aW9uKFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdyksXG4gICRrZXk6IGZyb21cbikge1xuICAkcmV0dXJuOiBpZigkZmxvdyA9PSBydGwsIChmcm9tOiByaWdodCwgdG86IGxlZnQpLCAoZnJvbTogbGVmdCwgdG86IHJpZ2h0KSk7XG4gIEByZXR1cm4gbWFwLWdldCgkcmV0dXJuLCAka2V5KTtcbn1cblxuLy8gVG9cbi8vIC0tXG4vLyBSZXR1cm4gdGhlICd0bycgZGlyZWN0aW9uIG9mIGEgZmxvd1xuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQGZ1bmN0aW9uIHRvKFxuICAkZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICBAcmV0dXJuIGdldC1kaXJlY3Rpb24oJGZsb3csIHRvKTtcbn1cblxuLy8gRnJvbVxuLy8gLS0tLVxuLy8gUmV0dXJuIHRoZSAnZnJvbScgZGlyZWN0aW9uIG9mIGEgZmxvd1xuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQGZ1bmN0aW9uIGZyb20oXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gIEByZXR1cm4gZ2V0LWRpcmVjdGlvbigkZmxvdywgZnJvbSk7XG59XG4iLCIvLyBHcmlkIEJhY2tncm91bmQgQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09XG4vLyAtIFN1Yi1waXhlbCByb3VuZGluZyBjYW4gbGVhZCB0byBzZXZlcmFsIHBpeGVscyB2YXJpYXRpb24gYmV0d2VlbiBicm93c2Vycy5cblxuLy8gR3JpZCBCYWNrZ3JvdW5kIE91dHB1dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSAkaW1hZ2U6IGJhY2tncm91bmQtaW1hZ2Vcbi8vIC0gJHNpemU6IGJhY2tncm91bmQtc2l6ZVxuLy8gLSAkY2xpcDogYmFja2dyb3VuZC1jbGlwXG4vLyAtIFskZmxvd106IGx0ciB8IHJ0bFxuQG1peGluIGJhY2tncm91bmQtZ3JpZC1vdXRwdXQgKFxuICAkaW1hZ2UsXG4gICRzaXplOiBudWxsLFxuICAkY2xpcDogbnVsbCxcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgJG91dHB1dDogKFxuICAgIGJhY2tncm91bmQtaW1hZ2U6ICRpbWFnZSxcbiAgICBiYWNrZ3JvdW5kLXNpemU6ICRzaXplLFxuICAgIGJhY2tncm91bmQtb3JpZ2luOiAkY2xpcCxcbiAgICBiYWNrZ3JvdW5kLWNsaXA6ICRjbGlwLFxuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGZyb20oJGZsb3cpIHRvcCxcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG4iLCIvLyBTaGFyZWQgQ29udGFpbmVyIEFQSVxuLy8gPT09PT09PT09PT09PT09PT09PT1cblxuLy8gQ29udGFpbmVyIE91dHB1dFxuLy8gLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSBbJHdpZHRoXSAgICAgICAgIDogPGxlbmd0aD5cbi8vIC0gWyRqdXN0aWZ5XSAgICAgICA6IGxlZnQgfCBjZW50ZXIgfCByaWdodFxuLy8gLSBbJG1hdGhdICAgICAgICAgIDogZmx1aWQgfCBzdGF0aWNcbkBtaXhpbiBjb250YWluZXItb3V0cHV0KFxuICAkd2lkdGgsXG4gICRqdXN0aWZ5OiBhdXRvIGF1dG8sXG4gICRwcm9wZXJ0eTogbWF4LXdpZHRoXG4pIHtcbiAgJG91dHB1dDogKFxuICAgICN7JHByb3BlcnR5fTogJHdpZHRoIG9yIDEwMCUsXG4gICAgbWFyZ2luLWxlZnQ6IG50aCgkanVzdGlmeSwgMSksXG4gICAgbWFyZ2luLXJpZ2h0OiBudGgoJGp1c3RpZnksIDIpLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cbiIsIi8vIE1hcmdpbnMgQVBJXG4vLyA9PT09PT09PT09PVxuXG4vLyBNYXJnaW4gT3V0cHV0XG4vLyAtLS0tLS0tLS0tLS0tXG4vLyAtICRiZWZvcmUgIDogPGxlbmd0aD5cbi8vIC0gJGFmdGVyICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQG1peGluIG1hcmdpbi1vdXRwdXQoXG4gICRiZWZvcmUsXG4gICRhZnRlcixcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgJHRvOiB0bygkZmxvdyk7XG4gICRmcm9tOiBmcm9tKCRmbG93KTtcblxuICAkb3V0cHV0OiAoXG4gICAgbWFyZ2luLSN7JGZyb219OiAkYmVmb3JlLFxuICAgIG1hcmdpbi0jeyR0b306ICRhZnRlcixcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG4iLCIvLyBQYWRkaW5nIEFQSVxuLy8gPT09PT09PT09PT1cblxuLy8gUGFkZGluZyBPdXRwdXRcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLyAtICRiZWZvcmUgIDogPGxlbmd0aD5cbi8vIC0gJGFmdGVyICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQG1peGluIHBhZGRpbmctb3V0cHV0KFxuICAkYmVmb3JlLFxuICAkYWZ0ZXIsXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gICR0bzogdG8oJGZsb3cpO1xuICAkZnJvbTogZnJvbSgkZmxvdyk7XG5cbiAgJG91dHB1dDogKFxuICAgIHBhZGRpbmctI3skZnJvbX06ICRiZWZvcmUsXG4gICAgcGFkZGluZy0jeyR0b306ICRhZnRlcixcbiAgKTtcblxuICBAaW5jbHVkZSBvdXRwdXQoJG91dHB1dCk7XG59XG4iLCIvLyBGbG9hdCBDb250YWluZXIgQVBJXG4vLyA9PT09PT09PT09PT09PT09PT09XG5cbi8vIEZsb2F0IENvbnRhaW5lclxuLy8gLS0tLS0tLS0tLS0tLS0tXG4vLyAtIFskd2lkdGhdICAgICAgICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGp1c3RpZnldICAgICAgIDogbGVmdCB8IGNlbnRlciB8IHJpZ2h0XG4vLyAtIFskbWF0aF0gICA6IGZsdWlkIHwgc3RhdGljXG5AbWl4aW4gZmxvYXQtY29udGFpbmVyKFxuICAkd2lkdGgsXG4gICRqdXN0aWZ5OiBhdXRvIGF1dG8sXG4gICRwcm9wZXJ0eTogbWF4LXdpZHRoXG4pIHtcbiAgQGluY2x1ZGUgc3VzeS1jbGVhcmZpeDtcbiAgQGluY2x1ZGUgY29udGFpbmVyLW91dHB1dCgkd2lkdGgsICRqdXN0aWZ5LCAkcHJvcGVydHkpO1xufVxuIiwiLy8gRmxvYXQgU3BhbiBBUElcbi8vID09PT09PT09PT09PT09XG5cbi8vIEZsb2F0IFNwYW4gT3V0cHV0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSAkd2lkdGggICAgICAgICAgICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGZsb2F0XSAgICAgICAgICAgOiBmcm9tIHwgdG9cbi8vIC0gWyRtYXJnaW4tYmVmb3JlXSAgIDogPGxlbmd0aD5cbi8vIC0gWyRtYXJnaW4tYWZ0ZXJdICAgIDogPGxlbmd0aD5cbi8vIC0gWyRwYWRkaW5nLWJlZm9yZV0gIDogPGxlbmd0aD5cbi8vIC0gWyRwYWRkaW5nLWFmdGVyXSAgIDogPGxlbmd0aD5cbi8vIC0gWyRmbG93XSAgICAgICAgICAgIDogbHRyIHwgcnRsXG5AbWl4aW4gZmxvYXQtc3Bhbi1vdXRwdXQoXG4gICR3aWR0aCxcbiAgJGZsb2F0ICAgICAgICAgICAgOiBmcm9tLFxuICAkbWFyZ2luLWJlZm9yZSAgICA6IG51bGwsXG4gICRtYXJnaW4tYWZ0ZXIgICAgIDogbnVsbCxcbiAgJHBhZGRpbmctYmVmb3JlICAgOiBudWxsLFxuICAkcGFkZGluZy1hZnRlciAgICA6IG51bGwsXG4gICRmbG93ICAgICAgICAgICAgIDogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgZmxvdylcbikge1xuICAkdG8gICAgIDogdG8oJGZsb3cpO1xuICAkZnJvbSAgIDogZnJvbSgkZmxvdyk7XG5cbiAgJG91dHB1dDogKFxuICAgIHdpZHRoOiAkd2lkdGgsXG4gICAgZmxvYXQ6IGlmKCRmbG9hdCA9PSB0bywgJHRvLCBudWxsKSBvciBpZigkZmxvYXQgPT0gZnJvbSwgJGZyb20sIG51bGwpLFxuICAgIG1hcmdpbi0jeyRmcm9tfTogJG1hcmdpbi1iZWZvcmUsXG4gICAgbWFyZ2luLSN7JHRvfTogJG1hcmdpbi1hZnRlcixcbiAgICBwYWRkaW5nLSN7JGZyb219OiAkcGFkZGluZy1iZWZvcmUsXG4gICAgcGFkZGluZy0jeyR0b306ICRwYWRkaW5nLWFmdGVyLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cbiIsIi8vIEZsb2F0IEVuZHMgQVBJXG4vLyA9PT09PT09PT09PT09PVxuXG4vLyBTdXN5IEVuZCBEZWZhdWx0c1xuLy8gLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gUFJJVkFURVxuQGluY2x1ZGUgc3VzeS1kZWZhdWx0cygoXG4gIGxhc3QtZmxvdzogdG8sXG4pKTtcblxuLy8gRmxvYXQgTGFzdFxuLy8gLS0tLS0tLS0tLVxuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQG1peGluIGZsb2F0LWxhc3QoXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KSxcbiAgJGxhc3QtZmxvdzogbWFwLWdldCgkc3VzeS1kZWZhdWx0cywgbGFzdC1mbG93KSxcbiAgJG1hcmdpbjogMFxuKSB7XG4gICR0bzogdG8oJGZsb3cpO1xuXG4gICRvdXRwdXQ6IChcbiAgICBmbG9hdDogaWYoJGxhc3QtZmxvdyA9PSB0bywgJHRvLCBudWxsKSxcbiAgICBtYXJnaW4tI3skdG99OiAkbWFyZ2luLFxuICApO1xuXG4gIEBpbmNsdWRlIG91dHB1dCgkb3V0cHV0KTtcbn1cblxuLy8gRmxvYXQgRmlyc3Rcbi8vIC0tLS0tLS0tLS0tXG4vLyAtIFskZmxvd10gIDogbHRyIHwgcnRsXG5AbWl4aW4gZmxvYXQtZmlyc3QoXG4gICRmbG93OiBtYXAtZ2V0KCRzdXN5LWRlZmF1bHRzLCBmbG93KVxuKSB7XG4gICRvdXRwdXQ6IChcbiAgICBtYXJnaW4tI3tmcm9tKCRmbG93KX06IDAsXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuIiwiLy8gRmxvYXQgSXNvbGF0aW9uIEFQSVxuLy8gPT09PT09PT09PT09PT09PT09PVxuXG4vLyBJc29sYXRlIE91dHB1dFxuLy8gLS0tLS0tLS0tLS0tLS1cbi8vIC0gJHB1c2ggICAgOiA8bGVuZ3RoPlxuLy8gLSBbJGZsb3ddICA6IGx0ciB8IHJ0bFxuQG1peGluIGlzb2xhdGUtb3V0cHV0KFxuICAkcHVzaCxcbiAgJGZsb3c6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGZsb3cpXG4pIHtcbiAgJHRvOiB0bygkZmxvdyk7XG4gICRmcm9tOiBmcm9tKCRmbG93KTtcblxuICAkb3V0cHV0OiAoXG4gICAgZmxvYXQ6ICRmcm9tLFxuICAgIG1hcmdpbi0jeyRmcm9tfTogJHB1c2gsXG4gICAgbWFyZ2luLSN7JHRvfTogLTEwMCUsXG4gICk7XG5cbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuIiwiLy8gU3VzeSBTZXR0aW5nc1xuLy8gPT09PT09PT09PT09PVxuXG4vLyBTdXN5IExhbmd1YWdlIERlZmF1bHRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtIFBSSVZBVEVcbkBpbmNsdWRlIHN1c3ktZGVmYXVsdHMoKFxuICBjb250YWluZXI6IGF1dG8sXG4gIG1hdGg6IGZsdWlkLFxuICBvdXRwdXQ6IGZsb2F0LFxuICBjb250YWluZXItcG9zaXRpb246IGNlbnRlcixcbiAgZ3V0dGVyLXBvc2l0aW9uOiBhZnRlcixcbiAgZ2xvYmFsLWJveC1zaXppbmc6IGNvbnRlbnQtYm94LFxuICBkZWJ1ZzogKFxuICAgIGltYWdlOiBoaWRlLFxuICAgIGNvbG9yOiByZ2JhKCM2NmYsIC4yNSksXG4gICAgb3V0cHV0OiBiYWNrZ3JvdW5kLFxuICAgIHRvZ2dsZTogdG9wIHJpZ2h0LFxuICApLFxuKSk7XG5cblxuLy8gVmFsaWQgS2V5d29yZCBWYWx1ZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtIFBSSVZBVEU6IERPTlQnVCBUT1VDSFxuJHN1c3kta2V5d29yZHM6IChcbiAgY29udGFpbmVyOiBhdXRvLFxuICBtYXRoOiBzdGF0aWMgZmx1aWQsXG4gIG91dHB1dDogaXNvbGF0ZSBmbG9hdCxcbiAgY29udGFpbmVyLXBvc2l0aW9uOiBsZWZ0IGNlbnRlciByaWdodCxcbiAgZmxvdzogbHRyIHJ0bCxcbiAgZ3V0dGVyLXBvc2l0aW9uOiBiZWZvcmUgYWZ0ZXIgc3BsaXQgaW5zaWRlIGluc2lkZS1zdGF0aWMsXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3ggY29udGVudC1ib3gsXG4gIHNwYW46IGZ1bGwsXG4gIGVkZ2U6IGZpcnN0IGFscGhhIGxhc3Qgb21lZ2EgZnVsbCxcbiAgc3ByZWFkOiBuYXJyb3cgd2lkZSB3aWRlcixcbiAgZ3V0dGVyLW92ZXJyaWRlOiBuby1ndXR0ZXJzIG5vLWd1dHRlcixcbiAgcm9sZTogbmVzdCxcbiAgY2xlYXI6IGJyZWFrIG5vYnJlYWssXG4gIGRlYnVnIGltYWdlOiBzaG93IGhpZGUgc2hvdy1jb2x1bW5zIHNob3ctYmFzZWxpbmUsXG4gIGRlYnVnIG91dHB1dDogYmFja2dyb3VuZCBvdmVybGF5LFxuKTtcblxuXG4vLyBQYXJzZSBTdXN5IEtleXdvcmRzIGFuZCBNYXBzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AZnVuY3Rpb24gcGFyc2Utc2V0dGluZ3MoXG4gICRzaG9ydDogJHN1c3lcbikge1xuICAkX3JldHVybjogKCk7XG5cbiAgQGlmIHR5cGUtb2YoJHNob3J0KSA9PSBtYXAge1xuICAgICRfcmV0dXJuOiAkc2hvcnQ7XG4gIH0gQGVsc2Uge1xuICAgIEBlYWNoICRpdGVtIGluICRzaG9ydCB7XG4gICAgICAvLyBzdHJpbmdzXG4gICAgICBAaWYgdHlwZS1vZigkaXRlbSkgPT0gc3RyaW5nIHtcbiAgICAgICAgQGVhY2ggJGtleSwgJHZhbHVlIGluICRzdXN5LWtleXdvcmRzIHtcbiAgICAgICAgICBAaWYgaW5kZXgoJHZhbHVlLCAkaXRlbSkge1xuICAgICAgICAgICAgJF9rZXktdmFsdWU6IGFwcGVuZCgka2V5LCAkaXRlbSk7XG4gICAgICAgICAgICAkX3JldHVybjogX3N1c3ktZGVlcC1zZXQoJF9yZXR1cm4sICRfa2V5LXZhbHVlLi4uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIC8vIG1hcHNcbiAgICAgIH0gQGVsc2UgaWYgdHlwZS1vZigkaXRlbSkgPT0gbWFwIHtcbiAgICAgICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgJGl0ZW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gUGFyc2UgQ29sdW1ucyAmIEd1dHRlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AZnVuY3Rpb24gcGFyc2UtbGF5b3V0KFxuICAkc2hvcnRcbikge1xuICAkX3JldHVybjogKCk7XG4gICRfY29sdW1uczogKCk7XG4gICRfZ3V0dGVyczogbnVsbDtcblxuICBAaWYgbm90KHVuaXRsZXNzKG50aChudGgoJHNob3J0LCAxKSwgMSkpKSB7XG4gICAgJF9ndXR0ZXJzOiBudGgoJHNob3J0LCAxKTtcbiAgfSBAZWxzZSB7XG4gICAgJF9jb2x1bW5zOiAoY29sdW1uczogbnRoKCRzaG9ydCwgMSkpO1xuICAgICRfZ3V0dGVyczogaWYobGVuZ3RoKCRzaG9ydCkgPiAxLCBudGgoJHNob3J0LCAyKSwgJF9ndXR0ZXJzKTtcbiAgfVxuXG4gIEBpZiB0eXBlLW9mKCRfZ3V0dGVycykgPT0gbGlzdCBhbmQgbGVuZ3RoKCRfZ3V0dGVycykgPiAwIHtcbiAgICAkX2d1dHRlcnM6IChcbiAgICAgIGd1dHRlcnM6IG50aCgkX2d1dHRlcnMsIDIpIC8gbnRoKCRfZ3V0dGVycywgMSksXG4gICAgICBjb2x1bW4td2lkdGg6IG50aCgkX2d1dHRlcnMsIDEpLFxuICAgICk7XG4gIH0gQGVsc2Uge1xuICAgICRfZ3V0dGVyczogaWYoJF9ndXR0ZXJzLCAoZ3V0dGVyczogJF9ndXR0ZXJzKSwgKCkpO1xuICB9XG5cbiAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgJF9jb2x1bW5zKTtcbiAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgJF9ndXR0ZXJzKTtcblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuXG5cbi8vIFBhcnNlIEdyaWQvQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG5AZnVuY3Rpb24gcGFyc2UtZ3JpZChcbiAgJHNob3J0OiAkc3VzeVxuKSB7XG4gICRfcmV0dXJuOiBwYXJzZS1zZXR0aW5ncygkc2hvcnQpO1xuICAkX2xheW91dDogKCk7XG5cbiAgQGlmIHR5cGUtb2YoJHNob3J0KSA9PSBtYXAge1xuICAgICRfcmV0dXJuOiAkc2hvcnQ7XG4gIH0gQGVsc2Uge1xuICAgIEBlYWNoICRpdGVtIGluICRzaG9ydCB7XG4gICAgICAvLyBudW1iZXIgb3IgbGlzdFxuICAgICAgQGlmIHR5cGUtb2YoJGl0ZW0pID09IG51bWJlciBvciB0eXBlLW9mKCRpdGVtKSA9PSBsaXN0IHtcbiAgICAgICAgQGlmIHR5cGUtb2YoJGl0ZW0pID09IGxpc3Qgb3IgdW5pdGxlc3MoJGl0ZW0pIHtcbiAgICAgICAgICAkX2xheW91dDogYXBwZW5kKCRfbGF5b3V0LCAkaXRlbSk7XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIChjb250YWluZXI6ICRpdGVtKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAkX2xheW91dDogaWYobGVuZ3RoKCRfbGF5b3V0KSA+IDAsIHBhcnNlLWxheW91dCgkX2xheW91dCksICRfbGF5b3V0KTtcbiAgfVxuXG4gIEByZXR1cm4gbWFwLW1lcmdlKCRfcmV0dXJuLCAkX2xheW91dCk7XG59XG5cblxuLy8gUGFyc2UgU3BhblxuLy8gLS0tLS0tLS0tLVxuQGZ1bmN0aW9uIHBhcnNlLXNwYW4oXG4gICRzaG9ydCxcbiAgJGtleTogc3BhblxuKSB7XG4gICRfcmV0dXJuOiAoKTtcblxuICBAaWYgdHlwZS1vZigkc2hvcnQpID09IG1hcCB7XG4gICAgJF9yZXR1cm46ICRzaG9ydDtcbiAgfSBAZWxzZSB7XG4gICAgJF9hdDogaW5kZXgoJHNob3J0LCBhdCk7XG5cbiAgICBAaWYgJF9hdCB7XG4gICAgICAkX2xvY2k6ICRfYXQgKyAxO1xuICAgICAgJF9sb2NhdGlvbjogbnRoKCRzaG9ydCwgJF9sb2NpKTtcbiAgICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIChsb2NhdGlvbjogJF9sb2NhdGlvbikpO1xuICAgICAgJHNob3J0OiBzZXQtbnRoKCRzaG9ydCwgJF9hdCwgbnVsbCk7XG4gICAgICAkc2hvcnQ6IHNldC1udGgoJHNob3J0LCAkX2xvY2ksIG51bGwpO1xuICAgIH1cblxuICAgICRfaTogMTtcbiAgICAkX3NwYW46ICgpO1xuXG4gICAgQHdoaWxlICRfaSA8PSBsZW5ndGgoJHNob3J0KSB7XG4gICAgICAkX3RoaXM6IG50aCgkc2hvcnQsICRfaSk7XG5cbiAgICAgIEBpZiB0eXBlLW9mKCRfdGhpcykgPT0gbnVtYmVyIHtcbiAgICAgICAgJF9zcGFuOiBhcHBlbmQoJF9zcGFuLCAkX3RoaXMpO1xuICAgICAgICAkc2hvcnQ6IHNldC1udGgoJHNob3J0LCAkX2ksIG51bGwpO1xuICAgICAgfSBAZWxzZSBpZiAkX3RoaXMgPT0gb2Yge1xuICAgICAgICAkc2hvcnQ6IHNldC1udGgoJHNob3J0LCAkX2ksIG51bGwpO1xuICAgICAgICAkX2k6IGxlbmd0aCgkc2hvcnQpICsgMTtcbiAgICAgIH1cblxuICAgICAgJF9pOiAkX2kgKyAxO1xuICAgIH1cblxuICAgIEBpZiBsZW5ndGgoJF9zcGFuKSA+IDAge1xuICAgICAgJF9zcGFuOiBpZihsZW5ndGgoJF9zcGFuKSA9PSAxLCBudGgoJF9zcGFuLCAxKSwgJF9zcGFuKTtcbiAgICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sICgka2V5OiAkX3NwYW4pKTtcbiAgICB9XG5cbiAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCBwYXJzZS1ncmlkKCRzaG9ydCkpO1xuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBQYXJzZSBHdXR0ZXJzXG4vLyAtLS0tLS0tLS0tLS0tXG5AZnVuY3Rpb24gcGFyc2UtZ3V0dGVycyhcbiAgJHNob3J0OiAkc3VzeVxuKSB7XG4gICRfZ3V0dGVyczogcGFyc2Utc3Bhbigkc2hvcnQsIGd1dHRlci1vdmVycmlkZSk7XG4gICRfc3Bhbjogc3VzeS1nZXQoZ3V0dGVyLW92ZXJyaWRlLCAkX2d1dHRlcnMpO1xuXG4gIEBpZiAkX3NwYW4gYW5kIG5vdChtYXAtZ2V0KCRfZ3V0dGVycywgY29sdW1ucykpIHtcbiAgICAkX2NvbnRleHQ6ICgpO1xuICAgICRfbmV3OiAoKTtcblxuICAgIEBlYWNoICRpdGVtIGluICRfc3BhbiB7XG4gICAgICBAaWYgdHlwZS1vZigkaXRlbSkgPT0gbnVtYmVyIGFuZCB1bml0bGVzcygkaXRlbSkge1xuICAgICAgICAkX2NvbnRleHQ6IGFwcGVuZCgkX2NvbnRleHQsICRpdGVtKTtcbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICAkX25ldzogYXBwZW5kKCRfbmV3LCAkaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJF9jb250ZXh0OiBwYXJzZS1ncmlkKCRfY29udGV4dCk7XG4gICAgJF9uZXc6IGlmKGxlbmd0aCgkX25ldykgPT0gMCwgbnVsbCwgJF9uZXcpO1xuICAgICRfbmV3OiBpZihsZW5ndGgoJF9uZXcpID09IDEsIG50aCgkX25ldywgMSksICRfbmV3KTtcbiAgICAkX25ldzogKGd1dHRlci1vdmVycmlkZTogaWYoJF9uZXcgIT0gJF9zcGFuLCAkX25ldywgJF9zcGFuKSk7XG5cbiAgICAkX2d1dHRlcnM6IG1hcC1tZXJnZSgkX2d1dHRlcnMsICRfbmV3KTtcbiAgICAkX2d1dHRlcnM6IG1hcC1tZXJnZSgkX2d1dHRlcnMsICRfY29udGV4dCk7XG4gIH1cblxuICBAcmV0dXJuICRfZ3V0dGVycztcbn1cbiIsIi8vIFZhbGlkYXRpb25cbi8vID09PT09PT09PT1cblxuXG4vLyBWYWxpZGF0ZSBDb2x1bW4gTWF0aFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBmdW5jdGlvbiB2YWxpZC1jb2x1bW4tbWF0aChcbiAgJG1hdGgsXG4gICRjb2x1bW4td2lkdGhcbikge1xuICBAaWYgJG1hdGggPT0gc3RhdGljIGFuZCBub3QoJGNvbHVtbi13aWR0aCkge1xuICAgIEBlcnJvciAnU3RhdGljIG1hdGggcmVxdWlyZXMgYSB2YWxpZCBjb2x1bW4td2lkdGggc2V0dGluZy4nO1xuICB9XG5cbiAgQHJldHVybiAkY29sdW1uLXdpZHRoO1xufVxuIiwiLy8gR3JpZCBTeW50YXhcbi8vID09PT09PT09PT09XG5cblxuLy8gTGF5b3V0XG4vLyAtLS0tLS1cbi8vIFNldCBhIG5ldyBsYXlvdXQgdXNpbmcgYSBzaG9ydGhhbmRcbi8vIC0gJGxheW91dDogPHNldHRpbmdzPlxuLy8gLSAkY2xlYW46IGJvb2xlYW5cbkBtaXhpbiBsYXlvdXQoXG4gICRsYXlvdXQsXG4gICRjbGVhbjogZmFsc2Vcbikge1xuICAkaW5zcGVjdCAgOiAkbGF5b3V0O1xuICAkc3VzeSAgICAgOiBfZ2V0LWxheW91dCgkbGF5b3V0LCAkY2xlYW4pICFnbG9iYWw7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGxheW91dCwgJGluc3BlY3QpO1xufVxuXG5cbi8vIFVzZSBHcmlkXG4vLyAtLS0tLS0tLVxuLy8gVXNlIGFuIGFyYml0cmFyeSBsYXlvdXQgZm9yIGEgc2VjdGlvbiBvZiBjb2RlXG4vLyAtICRsYXlvdXQ6IDxzZXR0aW5ncz5cbi8vIC0gJGNsZWFuOiBib29sZWFuXG5AbWl4aW4gd2l0aC1sYXlvdXQoXG4gICRsYXlvdXQsXG4gICRjbGVhbjogZmFsc2Vcbikge1xuICAkaW5zcGVjdCAgOiAkbGF5b3V0O1xuICAkb2xkICAgICAgOiAkc3VzeTtcbiAgJHN1c3kgICAgIDogX2dldC1sYXlvdXQoJGxheW91dCwgJGNsZWFuKSAhZ2xvYmFsO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdCh3aXRoLWxheW91dCwgJGluc3BlY3QpO1xuXG4gIEBjb250ZW50O1xuXG4gICRzdXN5OiAkb2xkICFnbG9iYWw7XG59XG5cblxuLy8gTGF5b3V0XG4vLyAtLS0tLS1cbi8vIFJldHVybiBhIHBhcnNlZCBsYXlvdXQgbWFwIGJhc2VkIG9uIHNob3J0aGFuZCBzeW50YXhcbi8vIC0gJGxheW91dDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGxheW91dChcbiAgJGxheW91dDogJHN1c3lcbikge1xuICBAcmV0dXJuIHBhcnNlLWdyaWQoJGxheW91dCk7XG59XG5cblxuLy8gR2V0IExheW91dFxuLy8gLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGEgbmV3IGxheW91dCBiYXNlZCBvbiBjdXJyZW50IGFuZCBnaXZlbiBzZXR0aW5nc1xuLy8gLSAkbGF5b3V0OiA8c2V0dGluZ3M+XG4vLyAtICRjbGVhbjogYm9vbGVhblxuQGZ1bmN0aW9uIF9nZXQtbGF5b3V0KFxuICAkbGF5b3V0LFxuICAkY2xlYW46IGZhbHNlXG4pIHtcbiAgJGxheW91dDogbGF5b3V0KCRsYXlvdXQpO1xuICBAcmV0dXJuIGlmKCRjbGVhbiwgJGxheW91dCwgX3N1c3ktZGVlcC1tZXJnZSgkc3VzeSwgJGxheW91dCkpO1xufVxuIiwiLy8gU3VzeSBCb3ggU2l6aW5nXG4vLyA9PT09PT09PT09PT09PT09PVxuXG4vLyBHbG9iYWwgQm94IFNpemluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNldCBhIGJveCBtb2RlbCBnbG9iYWxseSBvbiBhbGwgZWxlbWVudHMuXG4vLyAtIFskYm94XTogYm9yZGVyLWJveCB8IGNvbnRlbnQtYm94XG4vLyAtIFskaW5oZXJpdF06IHRydWUgfCBmYWxzZVxuQG1peGluIGdsb2JhbC1ib3gtc2l6aW5nKFxuICAkYm94OiBzdXN5LWdldChnbG9iYWwtYm94LXNpemluZyksXG4gICRpbmhlcml0OiBmYWxzZVxuKSB7XG4gICRpbnNwZWN0OiAkYm94O1xuXG4gIEBpZiAkaW5oZXJpdCB7XG4gICAgQGF0LXJvb3Qge1xuICAgICAgIGh0bWwgeyBAaW5jbHVkZSBvdXRwdXQoKGJveC1zaXppbmc6ICRib3gpKTsgfVxuICAgICAgICosICo6YmVmb3JlLCAqOmFmdGVyIHsgYm94LXNpemluZzogaW5oZXJpdDsgfVxuICAgICB9XG4gIH0gQGVsc2Uge1xuICAgICosICo6YmVmb3JlLCAqOmFmdGVyIHsgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiAkYm94KSk7IH1cbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChnbG9iYWwtYm94LXNpemluZywgJGluc3BlY3QpO1xuICBAaW5jbHVkZSB1cGRhdGUtYm94LW1vZGVsKCRib3gpO1xufVxuXG4vLyBCb3JkZXIgQm94IFNpemluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEEgbGVnYWN5IHNob3J0Y3V0Li4uXG4vLyAtIFskaW5oZXJpdF06IHRydWUgfCBmYWxzZVxuQG1peGluIGJvcmRlci1ib3gtc2l6aW5nKFxuICAkaW5oZXJpdDogZmFsc2Vcbikge1xuICBAaW5jbHVkZSBnbG9iYWwtYm94LXNpemluZyhib3JkZXItYm94LCAkaW5oZXJpdCk7XG59XG5cbi8vIFVwZGF0ZSBCb3ggTW9kZWxcbi8vIC0tLS0tLS0tLS0tLS0tLS1cbi8vIFBSSVZBVEU6IFVwZGF0ZXMgZ2xvYmFsIGJveCBtb2RlbCBzZXR0aW5nXG5AbWl4aW4gdXBkYXRlLWJveC1tb2RlbChcbiAgJGJveFxuKSB7XG4gIEBpZiAkYm94ICE9IHN1c3ktZ2V0KGdsb2JhbC1ib3gtc2l6aW5nKSB7XG4gIEBpbmNsdWRlIHN1c3ktc2V0KGdsb2JhbC1ib3gtc2l6aW5nLCAkYm94KTtcbiAgfVxufVxuIiwiLy8gQ29udGV4dCBTeW50YXhcbi8vID09PT09PT09PT09PT09XG5cbi8vIE5lc3RlZCBbZnVuY3Rpb25dXG4vLyAtLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0dXJuIGEgc3Vic2V0IGdyaWQgZm9yIG5lc3RlZCBjb250ZXh0LlxuLy8gLSAkY29udGV4dCAgIDogPHNwYW4+XG5AZnVuY3Rpb24gbmVzdGVkKFxuICAkY29udGV4dFxuKSB7XG4gICRjb250ZXh0ICAgIDogcGFyc2Utc3BhbigkY29udGV4dCk7XG4gICRzcGFuICAgICAgIDogc3VzeS1nZXQoc3BhbiwgJGNvbnRleHQpO1xuICAkbG9jYXRpb24gICA6IGdldC1sb2NhdGlvbigkY29udGV4dCk7XG4gICRjb2x1bW5zICAgIDogc3VzeS1nZXQoY29sdW1ucywgJGNvbnRleHQpO1xuXG4gIEByZXR1cm4gc3VzeS1zbGljZSgkc3BhbiwgJGxvY2F0aW9uLCAkY29sdW1ucyk7XG59XG5cbi8vIE5lc3RlZCBbbWl4aW5dXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8gVXNlIGEgc3Vic2V0IGdyaWQgZm9yIGEgbmVzdGVkIGNvbnRleHRcbi8vIC0gJGNvbnRleHQgICA6IDxzcGFuPlxuLy8gLSBAY29udGVudCAgIDogPGNvbnRlbnQ+XG5AbWl4aW4gbmVzdGVkKFxuICAkY29udGV4dFxuKSB7XG4gICRpbnNwZWN0ICA6ICRjb250ZXh0O1xuICAkY29udGV4dCAgOiBwYXJzZS1zcGFuKCRjb250ZXh0KTtcbiAgJG9sZCAgICAgIDogc3VzeS1nZXQoY29sdW1ucyk7XG4gICRzdXN5ICAgICA6IG1hcC1tZXJnZSgkc3VzeSwgKGNvbHVtbnM6IG5lc3RlZCgkY29udGV4dCkpKSAhZ2xvYmFsO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChuZXN0ZWQsICRpbnNwZWN0KTtcbiAgQGNvbnRlbnQ7XG5cbiAgJHN1c3kgICAgIDogbWFwLW1lcmdlKCRzdXN5LCAoY29sdW1uczogJG9sZCkpICFnbG9iYWw7XG59XG4iLCIvLyBCYWNrZ3JvdW5kIEdyaWQgU3ludGF4XG4vLyA9PT09PT09PT09PT09PT09PT09PT09XG5cbiRzdXN5LW92ZXJsYXktZ3JpZC1oZWFkLWV4aXN0czogZmFsc2U7XG5cblxuLy8gU2hvdyBHcmlkL3Ncbi8vIC0tLS0tLS0tLS0tXG4vLyBTaG93IGdyaWQgb24gYW55IGVsZW1lbnQgdXNpbmcgZWl0aGVyIGJhY2tncm91bmQgb3Igb3ZlcmxheS5cbi8vIC0gWyRncmlkXSAgOiA8c2V0dGluZ3M+XG5AbWl4aW4gc2hvdy1ncmlkKFxuICAkZ3JpZDogJHN1c3lcbikge1xuICAkaW5zcGVjdDogJGdyaWQ7XG4gICRfb3V0cHV0OiBkZWJ1Zy1nZXQob3V0cHV0LCAkZ3JpZCk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHNob3ctZ3JpZCwgJGluc3BlY3QpO1xuICBAaWYgJF9vdXRwdXQgPT0gb3ZlcmxheSBhbmQgc3VzeS1nZXQoZGVidWcgaW1hZ2UsICRncmlkKSAhPSBoaWRlIHtcbiAgICBAaW5jbHVkZSBvdmVybGF5LWdyaWQoJGdyaWQpO1xuICB9IEBlbHNlIHtcbiAgICBAaW5jbHVkZSBiYWNrZ3JvdW5kLWdyaWQoJGdyaWQpO1xuICB9XG59XG5cbkBtaXhpbiBzaG93LWdyaWRzKFxuICAkZ3JpZDogJHN1c3lcbikge1xuICBAaW5jbHVkZSBzaG93LWdyaWQoJGdyaWQpO1xufVxuXG4vLyBCYWNrZ3JvdW5kIEdyaWRcbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gU2hvdyBhIGdyaWQgYmFja2dyb3VuZCBvbiBhbnkgZWxlbWVudC5cbi8vIC0gWyRncmlkXSAgOiA8c2V0dGluZ3M+XG5AbWl4aW4gYmFja2dyb3VuZC1ncmlkKFxuICAkZ3JpZDogJHN1c3lcbikge1xuICAkaW5zcGVjdCAgOiAkZ3JpZDtcbiAgJF9vdXRwdXQgIDogZ2V0LWJhY2tncm91bmQoJGdyaWQpO1xuXG4gIEBpZiBsZW5ndGgoJF9vdXRwdXQpID4gMCB7XG4gICAgJF9mbG93OiBzdXN5LWdldChmbG93LCAkZ3JpZCk7XG5cbiAgICAkX2ltYWdlOiAoKTtcbiAgICBAZWFjaCAkbmFtZSwgJGxheWVyIGluIG1hcC1nZXQoJF9vdXRwdXQsIGltYWdlKSB7XG4gICAgICAkX2RpcmVjdGlvbjogaWYoJG5hbWUgPT0gYmFzZWxpbmUsIHRvIGJvdHRvbSwgdG8gdG8oJF9mbG93KSk7XG4gICAgICAkX2ltYWdlOiBhcHBlbmQoJF9pbWFnZSwgbGluZWFyLWdyYWRpZW50KCRfZGlyZWN0aW9uLCAkbGF5ZXIpLCBjb21tYSk7XG4gICAgfVxuICAgICRfb3V0cHV0OiBtYXAtbWVyZ2UoJF9vdXRwdXQsIChpbWFnZTogJF9pbWFnZSkpO1xuXG4gICAgQGluY2x1ZGUgYmFja2dyb3VuZC1ncmlkLW91dHB1dCgkX291dHB1dC4uLik7XG4gICAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGJhY2tncm91bmQtZ3JpZCwgJGluc3BlY3QpO1xuICB9XG59XG5cblxuLy8gT3ZlcmxheSBHcmlkXG4vLyAtLS0tLS0tLS0tLS1cbi8vIEdlbmVyYXRlIGFuIGljb24gdG8gdHJpZ2dlciBncmlkLW92ZXJsYXlzIG9uIGFueSBnaXZlbiBlbGVtZW50cy5cbi8vICRncmlkcy4uLiAgOiA8c2VsZWN0b3I+IFs8c2V0dGluZ3M+XSBbLCA8c2VsZWN0b3I+XSpcbkBtaXhpbiBvdmVybGF5LWdyaWQgKFxuICAkZ3JpZDogJHN1c3lcbikge1xuICBAaWYgbm90KCRzdXN5LW92ZXJsYXktZ3JpZC1oZWFkLWV4aXN0cykge1xuICAgIEBhdC1yb290IGhlYWQgeyBAaW5jbHVkZSBvdmVybGF5LWhlYWQoJGdyaWQpOyB9XG4gICAgQGF0LXJvb3QgaGVhZDpiZWZvcmUgeyBAaW5jbHVkZSBvdmVybGF5LXRyaWdnZXI7IH1cbiAgICBAYXQtcm9vdCBoZWFkOmhvdmVyIHsgQGluY2x1ZGUgb3ZlcmxheS10cmlnZ2VyLWhvdmVyOyB9XG4gICAgJHN1c3ktb3ZlcmxheS1ncmlkLWhlYWQtZXhpc3RzOiB0cnVlICFnbG9iYWw7XG4gIH1cblxuICBoZWFkOmhvdmVyIH4gJixcbiAgaGVhZDpob3ZlciB+IGJvZHkgJiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICY6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGdyaWQtb3ZlcmxheS1iYXNlO1xuICAgICAgQGluY2x1ZGUgYmFja2dyb3VuZC1ncmlkKCRncmlkKTtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBbUHJpdmF0ZV0gT3ZlcmxheSBUcmlnZ2VyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AbWl4aW4gb3ZlcmxheS10cmlnZ2VyIHtcbiAgY29udGVudDogXCJ8fHxcIjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmc6IDVweCAxMHB4O1xuICBmb250OiB7XG4gICAgZmFtaWx5OiBzYW5zLXNlcmlmO1xuICAgIHNpemU6IDE2cHg7XG4gICAgd2VpZ2h0OiBib2xkO1xuICB9XG59XG5cblxuLy8gW1ByaXZhdGVdIE92ZXJsYXkgVHJpZ2dlciBIb3ZlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQG1peGluIG92ZXJsYXktdHJpZ2dlci1ob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEod2hpdGUsIC41KTtcbiAgY29sb3I6IHJlZDtcbn1cblxuXG4vLyBbUHJpdmF0ZV0gT3ZlcmxheSBIZWFkXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyA8aGVhZD4gc3R5bGVzIHRvIGNyZWF0ZSBncmlkIG92ZXJsYXkgdG9nZ2xlXG5AbWl4aW4gb3ZlcmxheS1oZWFkIChcbiAgJGdyaWQ6ICRzdXN5XG4pIHtcbiAgJF90b2dnbGU6IGRlYnVnLWdldCh0b2dnbGUsICRncmlkKTtcbiAgJF9ob3J6OiBudWxsO1xuICAkX3ZlcnQ6IG51bGw7XG5cbiAgQGVhY2ggJHNpZGUgaW4gJF90b2dnbGUge1xuICAgICRfaG9yejogaWYoJHNpZGUgPT0gbGVmdCBvciAkc2lkZSA9PSByaWdodCwgJHNpZGUsICRfaG9yeik7XG4gICAgJF92ZXJ0OiBpZigkc2lkZSA9PSB0b3Agb3IgJHNpZGUgPT0gYm90dG9tLCAkc2lkZSwgJF92ZXJ0KTtcbiAgfVxuXG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gICN7JF9ob3J6fTogMTBweDtcbiAgI3skX3ZlcnR9OiAxMHB4O1xuICB6LWluZGV4OiA5OTk7XG4gIGNvbG9yOiAjMzMzO1xuICBiYWNrZ3JvdW5kOiByZ2JhKHdoaXRlLCAuMjUpO1xufVxuXG5cbi8vIFtQcml2YXRlXSBHcmlkIE92ZXJsYXkgQmFzZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBCYXNlIHN0eWxlcyBmb3IgZ2VuZXJhdGluZyBhIGdyaWQgb3ZlcmxheVxuQG1peGluIGdyaWQtb3ZlcmxheS1iYXNlKCkge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAwO1xuICByaWdodDogMDtcbiAgY29udGVudDogXCIgXCI7XG4gIHotaW5kZXg6IDk5ODtcbn1cblxuXG4vLyBHZXQgU3ltbWV0cmljYWwgQmFja2dyb3VuZFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gJGdyaWQ6IDxtYXA+XG5AZnVuY3Rpb24gZ2V0LWJhY2tncm91bmQtc3ltKFxuICAkZ3JpZFxuKSB7XG4gICRncmlkICAgICAgICAgICA6IHBhcnNlLWdyaWQoJGdyaWQpO1xuICAkX2d1dHRlcnMgICAgICAgOiBzdXN5LWdldChndXR0ZXJzLCAkZ3JpZCk7XG4gICRfY29sdW1uLXdpZHRoICA6IHN1c3ktZ2V0KGNvbHVtbi13aWR0aCwgJGdyaWQpO1xuICAkX21hdGggICAgICAgICAgOiBzdXN5LWdldChtYXRoLCAkZ3JpZCk7XG5cbiAgJF9jb2xvciAgICAgICAgIDogZGVidWctZ2V0KGNvbG9yKTtcbiAgJF90cmFucyAgICAgICAgIDogdHJhbnNwYXJlbnQ7XG4gICRfbGlnaHQgICAgICAgICA6IGxpZ2h0ZW4oJF9jb2xvciwgMTUlKTtcblxuICAkX2VuZCAgICAgICAgICAgOiAxICsgJF9ndXR0ZXJzO1xuICAkX2FmdGVyICAgICAgICAgOiBwZXJjZW50YWdlKDEvJF9lbmQpO1xuICAkX3N0b3BzICAgICAgICAgOiAoKTtcbiAgJF9zaXplICAgICAgICAgIDogc3BhbigxICRncmlkIHdpZGUpO1xuXG4gIEBpZiBpcy1pbnNpZGUoJGdyaWQpIHtcbiAgICAkX3N0b3BzOiAkX2NvbG9yLCAkX2xpZ2h0O1xuICB9IEBlbHNlIGlmIGlzLXNwbGl0KCRncmlkKSB7XG4gICAgJF9zcGxpdDogJF9ndXR0ZXJzLzI7XG4gICAgJF9iZWZvcmU6IHBlcmNlbnRhZ2UoJF9zcGxpdC8kX2VuZCk7XG4gICAgJF9hZnRlcjogcGVyY2VudGFnZSgoMSArICRfc3BsaXQpLyRfZW5kKTtcbiAgICAkX3N0b3BzOiAkX3RyYW5zICRfYmVmb3JlLCAkX2NvbG9yICRfYmVmb3JlLCAkX2xpZ2h0ICRfYWZ0ZXIsICRfdHJhbnMgJF9hZnRlcjtcbiAgfSBAZWxzZSB7XG4gICAgJF9zdG9wczogJF9jb2xvciwgJF9saWdodCAkX2FmdGVyLCAkX3RyYW5zICRfYWZ0ZXI7XG4gIH1cblxuICBAaWYgJF9tYXRoID09IHN0YXRpYyB7XG4gICAgJF9zaXplOiB2YWxpZC1jb2x1bW4tbWF0aCgkX21hdGgsICRfY29sdW1uLXdpZHRoKSAqICRfZW5kO1xuICB9XG5cbiAgJF9vdXRwdXQ6IChcbiAgICBpbWFnZTogKGNvbHVtbnM6ICRfc3RvcHMpLFxuICAgIHNpemU6ICRfc2l6ZSxcbiAgKTtcblxuICBAcmV0dXJuICRfb3V0cHV0O1xufVxuXG5cbi8vIEdldCBBc3ltbWV0cmljYWwgSW5zaWRlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSAkZ3JpZDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGdldC1hc3ltLWluc2lkZShcbiAgJGdyaWRcbikge1xuICAkZ3JpZCAgICAgOiBwYXJzZS1ncmlkKCRncmlkKTtcbiAgJF9jb2x1bW5zIDogc3VzeS1nZXQoY29sdW1ucywgJGdyaWQpO1xuXG4gICRfY29sb3IgICA6IGRlYnVnLWdldChjb2xvcik7XG4gICRfbGlnaHQgICA6IGxpZ2h0ZW4oJF9jb2xvciwgMTUlKTtcbiAgJF9zdG9wcyAgIDogKCk7XG5cbiAgQGZvciAkbG9jYXRpb24gZnJvbSAxIHRocm91Z2ggc3VzeS1jb3VudCgkX2NvbHVtbnMpIHtcbiAgICAkdGhpcy1zdG9wOiAoKTtcblxuICAgIEBpZiAkbG9jYXRpb24gPT0gMSB7XG4gICAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgJF9jb2xvciwgY29tbWEpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHN0YXJ0OiBwYXJzZS1zcGFuKDEgYXQgJGxvY2F0aW9uICRncmlkKTtcbiAgICAgICRzdGFydDogZ2V0LWlzb2xhdGlvbigkc3RhcnQpO1xuICAgICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfY29sb3IgJHN0YXJ0LCBjb21tYSk7XG4gICAgfVxuXG4gICAgQGlmICRsb2NhdGlvbiA9PSBzdXN5LWNvdW50KCRfY29sdW1ucykge1xuICAgICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfbGlnaHQsIGNvbW1hKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRfZW5kOiBwYXJzZS1zcGFuKDEgYXQgKCRsb2NhdGlvbiArIDEpICRncmlkKTtcbiAgICAgICRfZW5kOiBnZXQtaXNvbGF0aW9uKCRfZW5kKTtcbiAgICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2xpZ2h0ICRfZW5kLCBjb21tYSk7XG4gICAgfVxuXG4gICAgJF9zdG9wczogam9pbigkX3N0b3BzLCAkdGhpcy1zdG9wLCBjb21tYSk7XG4gIH1cblxuICBAcmV0dXJuICRfc3RvcHM7XG59XG5cblxuLy8gR2V0IEFzeW1tZXRyaWNhbCBTcGxpdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gLSAkZ3JpZDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGdldC1hc3ltLXNwbGl0KFxuICAkZ3JpZFxuKSB7XG4gICRncmlkICAgICA6IHBhcnNlLWdyaWQoJGdyaWQpO1xuICAkX2NvbHVtbnMgOiBzdXN5LWdldChjb2x1bW5zLCAkZ3JpZCk7XG5cbiAgJF9jb2xvciAgIDogZGVidWctZ2V0KGNvbG9yKTtcbiAgJF9saWdodCAgIDogbGlnaHRlbigkX2NvbG9yLCAxNSUpO1xuICAkX3N0b3BzICAgOiAoKTtcblxuICBAZm9yICRsb2NhdGlvbiBmcm9tIDEgdGhyb3VnaCBzdXN5LWNvdW50KCRfY29sdW1ucykge1xuICAgICR0aGlzLXN0b3A6ICgpO1xuXG4gICAgJHN0YXJ0OiBwYXJzZS1zcGFuKDEgYXQgJGxvY2F0aW9uICRncmlkKTtcbiAgICAkc3RhcnQ6IGdldC1pc29sYXRpb24oJHN0YXJ0KTtcbiAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgdHJhbnNwYXJlbnQgJHN0YXJ0LCBjb21tYSk7XG4gICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfY29sb3IgJHN0YXJ0LCBjb21tYSk7XG5cbiAgICAkX2VuZDogJHN0YXJ0ICsgc3BhbigxIGF0ICRsb2NhdGlvbiAkZ3JpZCk7XG4gICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfbGlnaHQgJF9lbmQsIGNvbW1hKTtcbiAgICAkdGhpcy1zdG9wOiBhcHBlbmQoJHRoaXMtc3RvcCwgdHJhbnNwYXJlbnQgJF9lbmQsIGNvbW1hKTtcblxuICAgICRfc3RvcHM6IGpvaW4oJF9zdG9wcywgJHRoaXMtc3RvcCwgY29tbWEpO1xuICB9XG5cbiAgQHJldHVybiAkX3N0b3BzO1xufVxuXG5cbi8vIEdldCBBc3ltbWV0cmljYWwgT3V0c2lkZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyAtICRncmlkOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gZ2V0LWFzeW0tb3V0c2lkZShcbiAgJGdyaWRcbikge1xuICAkZ3JpZCAgICAgOiBwYXJzZS1ncmlkKCRncmlkKTtcbiAgJF9jb2x1bW5zIDogc3VzeS1nZXQoY29sdW1ucywgJGdyaWQpO1xuXG4gICRfY29sb3IgICA6IGRlYnVnLWdldChjb2xvcik7XG4gICRfbGlnaHQgICA6IGxpZ2h0ZW4oJF9jb2xvciwgMTUlKTtcbiAgJF90cmFucyAgIDogdHJhbnNwYXJlbnQ7XG4gICRfc3RvcHMgICA6ICgpO1xuXG4gIEBmb3IgJGxvY2F0aW9uIGZyb20gMSB0aHJvdWdoIHN1c3ktY291bnQoJF9jb2x1bW5zKSB7XG4gICAgJHRoaXMtc3RvcDogKCk7XG5cbiAgICBAaWYgJGxvY2F0aW9uID09IDEge1xuICAgICAgJHRoaXMtc3RvcDogYXBwZW5kKCR0aGlzLXN0b3AsICRfY29sb3IsIGNvbW1hKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRzdGFydDogcGFyc2Utc3BhbigxIGF0ICRsb2NhdGlvbiAkZ3JpZCk7XG4gICAgICAkc3RhcnQ6IGdldC1pc29sYXRpb24oJHN0YXJ0KTtcbiAgICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2NvbG9yICRzdGFydCwgY29tbWEpO1xuICAgIH1cblxuICAgIEBpZiAkbG9jYXRpb24gPT0gc3VzeS1jb3VudCgkX2NvbHVtbnMpIHtcbiAgICAgICR0aGlzLXN0b3A6IGFwcGVuZCgkdGhpcy1zdG9wLCAkX2xpZ2h0LCBjb21tYSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkZ3V0dGVyOiBnZXQtc3Bhbi13aWR0aChmaXJzdCAkbG9jYXRpb24gJGdyaWQpO1xuXG4gICAgICAkX2VuZDogcGFyc2Utc3BhbigxIGF0ICgkbG9jYXRpb24gKyAxKSAkZ3JpZCk7XG4gICAgICAkX2VuZDogZ2V0LWlzb2xhdGlvbigkX2VuZCk7XG5cbiAgICAgICRndXR0ZXI6ICRfbGlnaHQgJGd1dHRlciwgJF90cmFucyAkZ3V0dGVyLCAkX3RyYW5zICRfZW5kO1xuICAgICAgJHRoaXMtc3RvcDogam9pbigkdGhpcy1zdG9wLCAkZ3V0dGVyLCBjb21tYSk7XG4gICAgfVxuXG4gICAgJF9zdG9wczogam9pbigkX3N0b3BzLCAkdGhpcy1zdG9wLCBjb21tYSk7XG4gIH1cblxuICBAcmV0dXJuICRfc3RvcHM7XG59XG5cblxuLy8gR2V0IEFzeW1tZXRyaWNhbCBCYWNrZ3JvdW5kXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIC0gJGdyaWQ6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBnZXQtYmFja2dyb3VuZC1hc3ltKFxuICAkZ3JpZFxuKSB7XG4gICRfc3RvcHM6ICgpO1xuXG4gIEBpZiBpcy1pbnNpZGUoJGdyaWQpIHtcbiAgICAkX3N0b3BzOiBnZXQtYXN5bS1pbnNpZGUoJGdyaWQpO1xuICB9IEBlbHNlIGlmIGlzLXNwbGl0KCRncmlkKSB7XG4gICAgJF9zdG9wczogZ2V0LWFzeW0tc3BsaXQoJGdyaWQpO1xuICB9IEBlbHNlIHtcbiAgICAkX3N0b3BzOiBnZXQtYXN5bS1vdXRzaWRlKCRncmlkKTtcbiAgfVxuXG4gIEByZXR1cm4gKGltYWdlOiAoY29sdW1uczogJF9zdG9wcykpO1xufVxuXG5cbi8vIEdldCBCYWNrZ3JvdW5kXG4vLyAtLS0tLS0tLS0tLS0tLVxuLy8gLSAkZ3JpZDogPHNldHRpbmdzPlxuQGZ1bmN0aW9uIGdldC1iYWNrZ3JvdW5kKFxuICAkZ3JpZFxuKSB7XG4gICRncmlkICAgICA6IHBhcnNlLWdyaWQoJGdyaWQpO1xuICAkX3Nob3cgICAgOiBzdXN5LWdldChkZWJ1ZyBpbWFnZSwgJGdyaWQpO1xuICAkX3JldHVybiAgOiAoKTtcblxuICBAaWYgJF9zaG93IGFuZCAkX3Nob3cgIT0gJ2hpZGUnIHtcbiAgICAkX2NvbHVtbnM6IHN1c3ktZ2V0KGNvbHVtbnMsICRncmlkKTtcblxuICAgIEBpZiAkX3Nob3cgIT0gJ3Nob3ctYmFzZWxpbmUnIHtcbiAgICAgICRfc3ltOiBpcy1zeW1tZXRyaWNhbCgkX2NvbHVtbnMpO1xuICAgICAgJF9yZXR1cm46IGlmKCRfc3ltLCBnZXQtYmFja2dyb3VuZC1zeW0oJGdyaWQpLCBnZXQtYmFja2dyb3VuZC1hc3ltKCRncmlkKSk7XG4gICAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoY2xpcDogY29udGVudC1ib3gpKTtcbiAgICB9XG5cbiAgICBAaWYgJF9zaG93ICE9ICdzaG93LWNvbHVtbnMnXG4gICAgICBhbmQgZ2xvYmFsLXZhcmlhYmxlLWV4aXN0cyhiYXNlLWxpbmUtaGVpZ2h0KVxuICAgICAgYW5kIHR5cGUtb2YoJGJhc2UtbGluZS1oZWlnaHQpID09ICdudW1iZXInXG4gICAgICBhbmQgbm90IHVuaXRsZXNzKCRiYXNlLWxpbmUtaGVpZ2h0KSB7XG4gICAgICAkX2NvbG9yOiB2YXJpYWJsZS1leGlzdHMoJ2dyaWQtYmFja2dyb3VuZC1iYXNlbGluZS1jb2xvcicpO1xuICAgICAgJF9jb2xvcjogaWYoJF9jb2xvciwgJGdyaWQtYmFja2dyb3VuZC1iYXNlbGluZS1jb2xvciwgIzAwMCk7XG5cbiAgICAgICRfaW1hZ2U6IG1hcC1nZXQoJF9yZXR1cm4sIGltYWdlKTtcbiAgICAgICRfc2l6ZTogbWFwLWdldCgkX3JldHVybiwgc2l6ZSk7XG4gICAgICAkX2Jhc2VsaW5lOiAoYmFzZWxpbmU6ICgkX2NvbG9yIDFweCwgdHJhbnNwYXJlbnQgMXB4KSk7XG4gICAgICAkX2Jhc2VsaW5lLXNpemU6IDEwMCUgJGJhc2UtbGluZS1oZWlnaHQ7XG5cbiAgICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIChcbiAgICAgICAgaW1hZ2U6IGlmKCRfaW1hZ2UsIG1hcC1tZXJnZSgkX2ltYWdlLCAkX2Jhc2VsaW5lKSwgJF9iYXNlbGluZSksXG4gICAgICAgIHNpemU6IGlmKCRfc2l6ZSwgKCRfc2l6ZSwgJF9iYXNlbGluZS1zaXplKSwgJF9iYXNlbGluZS1zaXplKSxcbiAgICAgICkpO1xuXG4gICAgICBAaWYgJF9zaG93ID09ICdzaG93JyB7XG4gICAgICAgICRfY2xpcDogbWFwLWdldCgkX3JldHVybiwgY2xpcCk7XG4gICAgICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sIChjbGlwOiBqb2luKCRfY2xpcCwgYm9yZGVyLWJveCwgY29tbWEpKSk7XG4gICAgICB9XG4gICAgfSBAZWxzZSBpZiAkX3Nob3cgPT0gJ3Nob3ctYmFzZWxpbmUnIHtcbiAgICAgIEB3YXJuICdQbGVhc2UgcHJvdmlkZSBhICRiYXNlLWxpbmUtaGVpZ2h0IHdpdGggdGhlIGRlc2lyZWQgaGVpZ2h0IGFuZCB1bml0cyc7XG4gICAgfVxuICB9XG5cbiAgQGlmIG1hcC1nZXQoJF9yZXR1cm4sIGltYWdlKSB7XG4gICAgJF9yZXR1cm46IG1hcC1tZXJnZSgkX3JldHVybiwgKGZsb3c6IHN1c3ktZ2V0KGZsb3csICRncmlkKSkpO1xuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cblxuXG4vLyBHZXQgRGVidWdcbi8vIC0tLS0tLS0tLVxuLy8gUmV0dXJuIHRoZSB2YWx1ZSBvZiBhIGRlYnVnIHNldHRpbmdcbi8vIC0gJGtleTogPHNldHRpbmc+XG5AZnVuY3Rpb24gZGVidWctZ2V0KFxuICAka2V5LFxuICAkZ3JpZDogJHN1c3lcbikge1xuICAka2V5OiBqb2luKGRlYnVnLCAka2V5LCBzcGFjZSk7XG4gIEByZXR1cm4gc3VzeS1nZXQoJGtleSwgJGdyaWQpO1xufVxuIiwiLy8gQ29udGFpbmVyIFN5bnRheFxuLy8gPT09PT09PT09PT09PT09PVxuXG4vLyBDb250YWluZXIgW21peGluXVxuLy8gLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNldCBhIGNvbnRhaW5lciBlbGVtZW50XG4vLyAtIFskbGF5b3V0XSAgOiA8c2V0dGluZ3M+XG5AbWl4aW4gY29udGFpbmVyKFxuICAkbGF5b3V0OiAkc3VzeVxuKSB7XG4gICRpbnNwZWN0ICAgIDogJGxheW91dDtcbiAgJGxheW91dCAgICAgOiBwYXJzZS1ncmlkKCRsYXlvdXQpO1xuXG4gICRfd2lkdGggICAgIDogZ2V0LWNvbnRhaW5lci13aWR0aCgkbGF5b3V0KTtcbiAgJF9qdXN0aWZ5ICAgOiBwYXJzZS1jb250YWluZXItcG9zaXRpb24oc3VzeS1nZXQoY29udGFpbmVyLXBvc2l0aW9uLCAkbGF5b3V0KSk7XG4gICRfcHJvcGVydHkgIDogaWYoc3VzeS1nZXQobWF0aCwgJGxheW91dCkgPT0gc3RhdGljLCB3aWR0aCwgbWF4LXdpZHRoKTtcblxuICAkX2JveCAgICAgICA6IHN1c3ktZ2V0KGJveC1zaXppbmcsICRsYXlvdXQpO1xuXG4gIEBpZiAkX2JveCB7XG4gICAgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiAkX2JveCkpO1xuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGNvbnRhaW5lciwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBmbG9hdC1jb250YWluZXIoJF93aWR0aCwgJF9qdXN0aWZ5LCAkX3Byb3BlcnR5KTtcbiAgQGluY2x1ZGUgc2hvdy1ncmlkKCRsYXlvdXQpO1xufVxuXG4vLyBDb250YWluZXIgW2Z1bmN0aW9uXVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiBjb250YWluZXIgd2lkdGhcbi8vIC0gWyRsYXlvdXRdICA6IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBjb250YWluZXIoXG4gICRsYXlvdXQ6ICRzdXN5XG4pIHtcbiAgJGxheW91dDogcGFyc2UtZ3JpZCgkbGF5b3V0KTtcbiAgQHJldHVybiBnZXQtY29udGFpbmVyLXdpZHRoKCRsYXlvdXQpO1xufVxuXG4vLyBHZXQgQ29udGFpbmVyIFdpZHRoXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDYWxjdWxhdGUgdGhlIGNvbnRhaW5lciB3aWR0aFxuLy8gLSBbJGxheW91dF06IDxzZXR0aW5ncz5cbkBmdW5jdGlvbiBnZXQtY29udGFpbmVyLXdpZHRoKFxuICAkbGF5b3V0OiAkc3VzeVxuKSB7XG4gICRsYXlvdXQgICAgICAgICA6IHBhcnNlLWdyaWQoJGxheW91dCk7XG4gICRfd2lkdGggICAgICAgICA6IHN1c3ktZ2V0KGNvbnRhaW5lciwgJGxheW91dCk7XG4gICRfY29sdW1uLXdpZHRoICA6IHN1c3ktZ2V0KGNvbHVtbi13aWR0aCwgJGxheW91dCk7XG4gICRfbWF0aCAgICAgICAgICA6IHN1c3ktZ2V0KG1hdGgsICRsYXlvdXQpO1xuXG4gIEBpZiBub3QoJF93aWR0aCkgb3IgJF93aWR0aCA9PSBhdXRvIHtcbiAgICBAaWYgdmFsaWQtY29sdW1uLW1hdGgoJF9tYXRoLCAkX2NvbHVtbi13aWR0aCkge1xuICAgICAgJF9jb2x1bW5zICAgOiBzdXN5LWdldChjb2x1bW5zLCAkbGF5b3V0KTtcbiAgICAgICRfZ3V0dGVycyAgIDogc3VzeS1nZXQoZ3V0dGVycywgJGxheW91dCk7XG4gICAgICAkX3NwcmVhZCAgICA6IGlmKGlzLXNwbGl0KCRsYXlvdXQpLCB3aWRlLCBuYXJyb3cpO1xuICAgICAgJF93aWR0aCAgICAgOiBzdXN5LXN1bSgkX2NvbHVtbnMsICRfZ3V0dGVycywgJF9zcHJlYWQpICogJF9jb2x1bW4td2lkdGg7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkX3dpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gIEByZXR1cm4gJF93aWR0aDtcbn1cblxuLy8gUGFyc2UgQ29udGFpbmVyIFBvc2l0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBhcnNlIHRoZSAkY29udGFpbmVyLXBvc2l0aW9uIGludG8gbWFyZ2luIHZhbHVlcy5cbi8vIC0gWyRqdXN0aWZ5XSAgIDogbGVmdCB8IGNlbnRlciB8IHJpZ2h0IHwgPGxlbmd0aD4gWzxsZW5ndGg+XVxuQGZ1bmN0aW9uIHBhcnNlLWNvbnRhaW5lci1wb3NpdGlvbihcbiAgJGp1c3RpZnk6IG1hcC1nZXQoJHN1c3ktZGVmYXVsdHMsIGNvbnRhaW5lci1wb3NpdGlvbilcbikge1xuICAkX3JldHVybjogaWYoJGp1c3RpZnkgPT0gbGVmdCwgMCwgYXV0bykgaWYoJGp1c3RpZnkgPT0gcmlnaHQsIDAsIGF1dG8pO1xuXG4gIEBpZiBub3QoaW5kZXgobGVmdCByaWdodCBjZW50ZXIsICRqdXN0aWZ5KSkge1xuICAgICRfcmV0dXJuOiBudGgoJGp1c3RpZnksIDEpO1xuICAgICRfcmV0dXJuOiAkX3JldHVybiBpZihsZW5ndGgoJGp1c3RpZnkpID4gMSwgbnRoKCRqdXN0aWZ5LCAyKSwgJF9yZXR1cm4pO1xuICB9XG5cbiAgQHJldHVybiAkX3JldHVybjtcbn1cbiIsIi8vIFNwYW4gU3ludGF4XG4vLyA9PT09PT09PT09PVxuXG4vLyBTcGFuIFttaXhpbl1cbi8vIC0tLS0tLS0tLS0tLVxuLy8gU2V0IGEgc3Bhbm5pbmcgZWxlbWVudCB1c2luZyBzaG9ydGhhbmQgc3ludGF4LlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBtaXhpbiBzcGFuKFxuICAkc3BhblxuKSB7XG4gICRpbnNwZWN0OiAkc3BhbjtcbiAgJHNwYW46IHBhcnNlLXNwYW4oJHNwYW4pO1xuICAkb3V0cHV0OiBzcGFuLW1hdGgoJHNwYW4pO1xuICAkbmVzdGluZzogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuICAkY2xlYXI6IHN1c3ktZ2V0KGNsZWFyLCAkc3Bhbik7XG5cbiAgJGJveDogc3VzeS1nZXQoYm94LXNpemluZywgJHNwYW4pO1xuICAkY29udGVudC1ib3g6IGlmKHN1c3ktZ2V0KGdsb2JhbC1ib3gtc2l6aW5nKSAhPSAnYm9yZGVyLWJveCcsIHRydWUsIGZhbHNlKTtcbiAgJGJveDogJGJveCBvciBpZihpcy1pbnNpZGUoJHNwYW4pIGFuZCAkY29udGVudC1ib3gsIGJvcmRlci1ib3gsIG51bGwpO1xuXG4gIEBpZiAkY2xlYXIgPT0gYnJlYWsge1xuICAgIEBpbmNsdWRlIGJyZWFrO1xuICB9IEBlbHNlIGlmICRjbGVhciA9PSBub2JyZWFrIHtcbiAgICBAaW5jbHVkZSBub2JyZWFrO1xuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHNwYW4sICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiAkYm94KSk7XG4gIEBpbmNsdWRlIGZsb2F0LXNwYW4tb3V0cHV0KCRvdXRwdXQuLi4pO1xuXG4gIEBpZiB2YWxpZC1jb2x1bW5zKCRuZXN0aW5nLCBzaWxlbnQpIHtcbiAgICBAaW5jbHVkZSBuZXN0ZWQoJHNwYW4pIHsgQGNvbnRlbnQ7IH1cbiAgfSBAZWxzZSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuLy8gU3BhbiBbZnVuY3Rpb25dXG4vLyAtLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgd2lkdGggb2YgYSBzcGFuLlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBmdW5jdGlvbiBzcGFuKFxuICAkc3BhblxuKSB7XG4gIEByZXR1cm4gZ2V0LXNwYW4td2lkdGgoJHNwYW4pO1xufVxuXG4vLyBTcGFuIE1hdGhcbi8vIC0tLS0tLS0tLVxuLy8gR2V0IGFsbCB0aGUgc3BhbiByZXN1bHRzLlxuLy8gLSAkc3BhbjogPG1hcD5cbkBmdW5jdGlvbiBzcGFuLW1hdGgoXG4gICRzcGFuXG4pIHtcbiAgJG5lc3QgICAgICAgICAgICAgOiBpZihzdXN5LWdldChyb2xlLCAkc3BhbikgPT0gbmVzdCwgdHJ1ZSwgZmFsc2UpO1xuICAkc3BsaXQtbmVzdCAgICAgICA6IGlmKGlzLXNwbGl0KCRzcGFuKSBhbmQgJG5lc3QsIHRydWUsIGZhbHNlKTtcbiAgJGVkZ2UgICAgICAgICAgICAgOiBnZXQtZWRnZSgkc3Bhbik7XG4gICRsb2NhdGlvbiAgICAgICAgIDogZ2V0LWxvY2F0aW9uKCRzcGFuKTtcblxuICAkZmxvYXQgICAgICAgICAgICA6IGZyb207XG4gICRwYWRkaW5nLWJlZm9yZSAgIDogbnVsbDtcbiAgJHBhZGRpbmctYWZ0ZXIgICAgOiBudWxsO1xuICAkbWFyZ2luLWJlZm9yZSAgICA6IG51bGw7XG4gICRtYXJnaW4tYWZ0ZXIgICAgIDogbnVsbDtcblxuICAvLyBjYWxjdWxhdGUgd2lkdGhzXG4gICRzcHJlYWQ6IGluZGV4KG1hcC12YWx1ZXMoJHNwYW4pLCBzcHJlYWQpO1xuICAkc3BhbjogaWYoJHNwbGl0LW5lc3QgYW5kIG5vdCgkc3ByZWFkKSwgbWFwLW1lcmdlKCRzcGFuLCAoc3ByZWFkOiB3aWRlKSksICRzcGFuKTtcbiAgJHdpZHRoOiBnZXQtc3Bhbi13aWR0aCgkc3Bhbik7XG4gICRndXR0ZXJzOiBnZXQtZ3V0dGVycygkc3Bhbik7XG5cbiAgLy8gYXBwbHkgZ3V0dGVyc1xuICBAaWYgaXMtaW5zaWRlKCRzcGFuKSB7XG4gICAgQGlmIG5vdChzdXN5LWdldChyb2xlLCAkc3BhbikpIHtcbiAgICAgICRwYWRkaW5nLWJlZm9yZTogbWFwLWdldCgkZ3V0dGVycywgYmVmb3JlKTtcbiAgICAgICRwYWRkaW5nLWFmdGVyOiBtYXAtZ2V0KCRndXR0ZXJzLCBhZnRlcik7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAaWYgbm90KCRzcGxpdC1uZXN0KSB7XG4gICAgICAkbWFyZ2luLWJlZm9yZTogbWFwLWdldCgkZ3V0dGVycywgYmVmb3JlKTtcbiAgICAgICRtYXJnaW4tYWZ0ZXI6IG1hcC1nZXQoJGd1dHRlcnMsIGFmdGVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBzcGVjaWFsIG1hcmdpbiBoYW5kbGluZ1xuICBAaWYgc3VzeS1nZXQob3V0cHV0LCAkc3BhbikgPT0gaXNvbGF0ZSBhbmQgJGxvY2F0aW9uIHtcbiAgICAkbWFyZ2luLWJlZm9yZTogZ2V0LWlzb2xhdGlvbigkc3Bhbik7XG4gICAgJG1hcmdpbi1hZnRlcjogLTEwMCU7XG4gIH0gQGVsc2UgaWYgJGVkZ2Uge1xuICAgICRpcy1zcGxpdDogaXMtc3BsaXQoJHNwYW4pO1xuICAgICRwb3M6IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJHNwYW4pO1xuXG4gICAgQGlmICRlZGdlID09IGxhc3Qge1xuICAgICAgJGZsb2F0OiBzdXN5LWdldChsYXN0LWZsb3csICRzcGFuKTtcbiAgICB9XG5cbiAgICBAaWYgbm90KCRpcy1zcGxpdCkge1xuICAgICAgQGlmICRlZGdlID09IGZ1bGwgb3IgKCRlZGdlID09IGZpcnN0IGFuZCAkcG9zID09IGJlZm9yZSkge1xuICAgICAgICAkbWFyZ2luLWJlZm9yZTogMDtcbiAgICAgIH1cbiAgICAgIEBpZiAkZWRnZSA9PSBmdWxsIG9yICgkZWRnZSA9PSBsYXN0IGFuZCAkcG9zID09IGFmdGVyKSB7XG4gICAgICAgICRtYXJnaW4tYWZ0ZXI6IDA7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBAcmV0dXJuIChcbiAgICB3aWR0aCAgICAgICAgICAgOiAkd2lkdGgsXG4gICAgZmxvYXQgICAgICAgICAgIDogJGZsb2F0LFxuICAgIG1hcmdpbi1iZWZvcmUgICA6ICRtYXJnaW4tYmVmb3JlLFxuICAgIG1hcmdpbi1hZnRlciAgICA6ICRtYXJnaW4tYWZ0ZXIsXG4gICAgcGFkZGluZy1iZWZvcmUgIDogJHBhZGRpbmctYmVmb3JlLFxuICAgIHBhZGRpbmctYWZ0ZXIgICA6ICRwYWRkaW5nLWFmdGVyLFxuICAgIGZsb3cgICAgICAgICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKSxcbiAgKTtcbn1cblxuLy8gR2V0IFNwYW4gV2lkdGhcbi8vIC0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gc3BhbiB3aWR0aC5cbi8vIC0gJHNwYW46IDxtYXA+XG5AZnVuY3Rpb24gZ2V0LXNwYW4td2lkdGgoXG4gICRzcGFuXG4pIHtcbiAgJHNwYW4gICAgIDogcGFyc2Utc3Bhbigkc3Bhbik7XG5cbiAgJG4gICAgICAgIDogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuICAkbG9jYXRpb24gOiBnZXQtbG9jYXRpb24oJHNwYW4pO1xuICAkY29sdW1ucyAgOiBzdXN5LWdldChjb2x1bW5zLCAkc3Bhbik7XG4gICRndXR0ZXJzICA6IHN1c3ktZ2V0KGd1dHRlcnMsICRzcGFuKTtcbiAgJHNwcmVhZCAgIDogc3VzeS1nZXQoc3ByZWFkLCAkc3Bhbik7XG5cbiAgJGNvbnRleHQgIDogbnVsbDtcbiAgJHNwYW4tc3VtIDogbnVsbDtcbiAgJHdpZHRoICAgIDogbnVsbDtcblxuICBAaWYgJG4gPT0gJ2Z1bGwnIHtcbiAgICAkcG9zOiBzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRzcGFuKTtcbiAgICAkcm9sZTogc3VzeS1nZXQocm9sZSwgJHNwYW4pO1xuICAgICRuOiBpZigkcG9zID09IHNwbGl0IGFuZCAkcm9sZSAhPSBuZXN0LCBzdXN5LWNvdW50KCRjb2x1bW5zKSwgMTAwJSk7XG4gIH1cblxuICBAaWYgdHlwZS1vZigkbikgIT0gbnVtYmVyIHtcbiAgICBAd2FybiBcIigje3R5cGUtb2YoJG4pfSkgI3skbn0gaXMgbm90IGEgdmFsaWQgc3Bhbi5cIjtcbiAgfSBAZWxzZSBpZiB1bml0bGVzcygkbikge1xuICAgICRjb250ZXh0OiBzdXN5LXN1bSgkY29sdW1ucywgJGd1dHRlcnMsIGlmKGlzLXNwbGl0KCRzcGFuKSwgd2lkZSwgbmFycm93KSk7XG4gICAgJHNwcmVhZDogaWYoaXMtaW5zaWRlKCRzcGFuKSwgJHNwcmVhZCBvciB3aWRlLCAkc3ByZWFkKTtcbiAgICAkc3Bhbi1zdW06IHN1c3koJG4sICRsb2NhdGlvbiwgJGNvbHVtbnMsICRndXR0ZXJzLCAkc3ByZWFkKTtcblxuICAgICRfbWF0aDogc3VzeS1nZXQobWF0aCwgJHNwYW4pO1xuICAgICRfY29sdW1uLXdpZHRoOiBzdXN5LWdldChjb2x1bW4td2lkdGgsICRzcGFuKTtcbiAgICBAaWYgJF9tYXRoID09IHN0YXRpYyB7XG4gICAgICAkd2lkdGg6ICRzcGFuLXN1bSAqIHZhbGlkLWNvbHVtbi1tYXRoKCRfbWF0aCwgJF9jb2x1bW4td2lkdGgpO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHdpZHRoOiBwZXJjZW50YWdlKCRzcGFuLXN1bSAvICRjb250ZXh0KTtcbiAgICB9XG4gIH0gQGVsc2Uge1xuICAgICR3aWR0aDogJG47XG4gIH1cblxuICBAcmV0dXJuICR3aWR0aDtcbn1cbiIsIi8vIEd1dHRlciBTeW50YXhcbi8vID09PT09PT09PT09PT1cblxuXG4vLyBHdXR0ZXJzXG4vLyAtLS0tLS0tXG4vLyBTZXQgZ3V0dGVycyBvbiBhbiBlbGVtZW50LlxuLy8gLSBbJHNwYW5dICAgOiA8c2V0dGluZ3M+XG5AbWl4aW4gZ3V0dGVycyhcbiAgJHNwYW46ICRzdXN5XG4pIHtcbiAgJGluc3BlY3QgIDogJHNwYW47XG4gICRzcGFuICAgICA6IHBhcnNlLWd1dHRlcnMoJHNwYW4pO1xuICAkX2d1dHRlcnMgOiBnZXQtZ3V0dGVycygkc3Bhbik7XG5cbiAgJF9vdXRwdXQ6IChcbiAgICBiZWZvcmU6IG1hcC1nZXQoJF9ndXR0ZXJzLCBiZWZvcmUpLFxuICAgIGFmdGVyOiBtYXAtZ2V0KCRfZ3V0dGVycywgYWZ0ZXIpLFxuICAgIGZsb3c6IHN1c3ktZ2V0KGZsb3csICRzcGFuKSxcbiAgKTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoZ3V0dGVycywgJGluc3BlY3QpO1xuXG4gIEBpZiBpcy1pbnNpZGUoJHNwYW4pIHtcbiAgICBAaW5jbHVkZSBwYWRkaW5nLW91dHB1dCgkX291dHB1dC4uLik7XG4gIH0gQGVsc2Uge1xuICAgIEBpbmNsdWRlIG1hcmdpbi1vdXRwdXQoJF9vdXRwdXQuLi4pO1xuICB9XG59XG5cbkBtaXhpbiBndXR0ZXIoXG4gICRzcGFuOiAkc3VzeVxuKSB7XG4gIEBpbmNsdWRlIGd1dHRlcnMoJHNwYW4pO1xufVxuXG5cbi8vIEd1dHRlclxuLy8gLS0tLS0tXG4vLyBSZXR1cm4gdGhlIHdpZHRoIG9mIGEgZ3V0dGVyLlxuLy8gLSBbJHNwYW5dICAgOiA8c2V0dGluZ3M+XG5AZnVuY3Rpb24gZ3V0dGVyKFxuICAkc3BhbjogJHN1c3lcbikge1xuICAkc3BhbjogcGFyc2UtZ3V0dGVycygkc3Bhbik7XG5cbiAgJF9ndXR0ZXJzOiBnZXQtZ3V0dGVycygkc3Bhbik7XG4gICRfZ3V0dGVyczogbWFwLWdldCgkX2d1dHRlcnMsIGJlZm9yZSkgb3IgbWFwLWdldCgkX2d1dHRlcnMsIGFmdGVyKTtcblxuICBAcmV0dXJuICRfZ3V0dGVycztcbn1cblxuQGZ1bmN0aW9uIGd1dHRlcnMoXG4gICRzcGFuOiAkc3VzeVxuKSB7XG4gIEByZXR1cm4gZ3V0dGVyKCRzcGFuKTtcbn1cblxuXG4vLyBHZXQgR3V0dGVyIFdpZHRoXG4vLyAtLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gZ3V0dGVyIHdpZHRoLlxuLy8gLSBbJGNvbnRleHRdOiA8Y29udGV4dD5cbkBmdW5jdGlvbiBnZXQtZ3V0dGVyLXdpZHRoKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkY29udGV4dCAgOiBwYXJzZS1ndXR0ZXJzKCRjb250ZXh0KTtcblxuICAkX2d1dHRlcnMgOiBzdXN5LWdldChndXR0ZXJzLCAkY29udGV4dCk7XG4gICRfZ3V0dGVyICA6IHN1c3ktZ2V0KGd1dHRlci1vdmVycmlkZSwgJGNvbnRleHQpO1xuXG4gIEBpZiAkX2d1dHRlcnMgYW5kICgkX2d1dHRlcnMgPiAwKSBhbmQgbm90KCRfZ3V0dGVyKSB7XG4gICAgJF9jb2x1bW4td2lkdGg6IHN1c3ktZ2V0KGNvbHVtbi13aWR0aCwgJGNvbnRleHQpO1xuICAgICRfbWF0aDogZ3V0dGVyLW1hdGgoJGNvbnRleHQpO1xuICAgIEBpZiAkX21hdGggPT0gc3RhdGljIHtcbiAgICAgICRfZ3V0dGVyOiAkX2d1dHRlcnMgKiB2YWxpZC1jb2x1bW4tbWF0aCgkX21hdGgsICRfY29sdW1uLXdpZHRoKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRfY29sdW1ucyA6IHN1c3ktZ2V0KGNvbHVtbnMsICRjb250ZXh0KTtcbiAgICAgICRfc3ByZWFkICA6IGlmKGlzLXNwbGl0KCRjb250ZXh0KSwgd2lkZSwgc3VzeS1nZXQoc3ByZWFkLCAkY29udGV4dCkpO1xuICAgICAgJF9ndXR0ZXIgIDogcGVyY2VudGFnZSgkX2d1dHRlcnMgLyBzdXN5LXN1bSgkX2NvbHVtbnMsICRfZ3V0dGVycywgJF9zcHJlYWQpKTtcbiAgICB9XG4gIH1cblxuICAkX2d1dHRlcjogaWYoJF9ndXR0ZXIgPT0gJ25vLWd1dHRlcnMnIG9yICRfZ3V0dGVyID09ICduby1ndXR0ZXInLCBudWxsLCAkX2d1dHRlcik7XG5cbiAgQHJldHVybiAkX2d1dHRlcjtcbn1cblxuXG4vLyBHZXQgR3V0dGVyc1xuLy8gLS0tLS0tLS0tLS1cbi8vIFJldHVybiBiZWZvcmUgYW5kIGFmdGVyIGd1dHRlciB2YWx1ZXMuXG4vLyAtIFskY29udGV4dF06IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGdldC1ndXR0ZXJzKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkY29udGV4dCAgICAgICAgICAgIDogcGFyc2UtZ3V0dGVycygkY29udGV4dCk7XG5cbiAgJF9ndXR0ZXItcG9zaXRpb24gICA6IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGNvbnRleHQpO1xuICAkX2d1dHRlciAgICAgICAgICAgIDogZ2V0LWd1dHRlci13aWR0aCgkY29udGV4dCk7XG5cbiAgJF9yZXR1cm4gICAgICAgICAgICA6IChiZWZvcmU6IG51bGwsIGFmdGVyOiBudWxsKTtcblxuICBAaWYgaXMtc3BsaXQoJGNvbnRleHQpIGFuZCAkX2d1dHRlciB7XG4gICAgJF9ndXR0ZXI6ICRfZ3V0dGVyIC8gMjtcbiAgICAkX3JldHVybjogbWFwLW1lcmdlKCRfcmV0dXJuLCAoYmVmb3JlOiAkX2d1dHRlciwgYWZ0ZXI6ICRfZ3V0dGVyKSk7XG4gIH0gQGVsc2Uge1xuICAgICRfcmV0dXJuOiBtYXAtbWVyZ2UoJF9yZXR1cm4sICgkX2d1dHRlci1wb3NpdGlvbjogJF9ndXR0ZXIpKTtcbiAgfVxuXG4gIEByZXR1cm4gJF9yZXR1cm47XG59XG5cblxuLy8gSXMgSW5zaWRlXG4vLyAtLS0tLS0tLS1cbi8vIFJldHVybnMgdHJ1ZSBpZiBndXR0ZXJzIGFyZSBpbnNpZGUuXG4vLyAkY29udGV4dDogPGNvbnRleHQ+XG5AZnVuY3Rpb24gaXMtaW5zaWRlKFxuICAkY29udGV4dFxuKSB7XG4gICRfaW5zaWRlOiBpbnNpZGUgaW5zaWRlLXN0YXRpYztcbiAgJF9ndXR0ZXItcG9zaXRpb246IHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJGNvbnRleHQpO1xuXG4gIEByZXR1cm4gaWYoaW5kZXgoJF9pbnNpZGUsICRfZ3V0dGVyLXBvc2l0aW9uKSwgdHJ1ZSwgZmFsc2UpO1xufVxuXG5cbi8vIElzIFNwbGl0XG4vLyAtLS0tLS0tLVxuLy8gUmV0dXJucyB0cnVlIGlmIGd1dHRlcnMgYXJlIHNwbGl0LlxuLy8gJGNvbnRleHQ6IDxjb250ZXh0PlxuQGZ1bmN0aW9uIGlzLXNwbGl0KFxuICAkY29udGV4dFxuKSB7XG4gICRfc3BsaXQ6IHNwbGl0IGluc2lkZSBpbnNpZGUtc3RhdGljO1xuICAkX2d1dHRlci1wb3NpdGlvbjogc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkY29udGV4dCk7XG5cbiAgQHJldHVybiBpZihpbmRleCgkX3NwbGl0LCAkX2d1dHRlci1wb3NpdGlvbiksIHRydWUsIGZhbHNlKTtcbn1cblxuXG4vLyBHdXR0ZXIgTWF0aFxuLy8gLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgbWF0aCB0byB1c2UgZm9yIGd1dHRlciBjYWxjdWxhdGlvbnNcbi8vICRjb250ZXh0OiA8Y29udGV4dD5cbkBmdW5jdGlvbiBndXR0ZXItbWF0aChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJF9yZXR1cm4gIDogc3VzeS1nZXQobWF0aCwgJGNvbnRleHQpO1xuICAkX3JldHVybiAgOiBpZihzdXN5LWdldChndXR0ZXItcG9zaXRpb24sICRjb250ZXh0KSA9PSBpbnNpZGUtc3RhdGljLCBzdGF0aWMsICRfcmV0dXJuKTtcblxuICBAcmV0dXJuICRfcmV0dXJuO1xufVxuIiwiLy8gSXNvbGF0aW9uIFN5bnRheFxuLy8gPT09PT09PT09PT09PT09PVxuXG5cbi8vIElzb2xhdGUgW01peGluXVxuLy8gLS0tLS0tLS0tLS0tLS0tXG4vLyBTZXQgaXNvbGF0aW9uIGFzIGFuIG92ZXJyaWRlLlxuLy8gLSAkbG9jYXRpb246IDxzcGFuPlxuQG1peGluIGlzb2xhdGUoXG4gICRpc29sYXRlOiAxXG4pIHtcbiAgJGluc3BlY3Q6ICRpc29sYXRlO1xuXG4gICRvdXRwdXQ6IChcbiAgICBwdXNoOiBpc29sYXRlKCRpc29sYXRlKSxcbiAgICBmbG93OiBzdXN5LWdldChmbG93LCAkaXNvbGF0ZSksXG4gICk7XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGlzb2xhdGUsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgaXNvbGF0ZS1vdXRwdXQoJG91dHB1dC4uLik7XG59XG5cblxuLy8gSXNvbGF0ZSBbZnVuY3Rpb25dXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiBhbiBpc29sYXRpb24gb2Zmc2V0IHdpZHRoLlxuLy8gLSAkbG9jYXRpb246IDxzcGFuPlxuQGZ1bmN0aW9uIGlzb2xhdGUoXG4gICRpc29sYXRlOiAxXG4pIHtcbiAgJGlzb2xhdGU6IHBhcnNlLXNwYW4oJGlzb2xhdGUpO1xuICAkaXNvbGF0aW9uOiBzdXN5LWdldChzcGFuLCAkaXNvbGF0ZSk7XG5cbiAgQGlmICRpc29sYXRpb24gYW5kIG5vdChnZXQtbG9jYXRpb24oJGlzb2xhdGUpKSB7XG4gICAgJG5ldzogKFxuICAgICAgc3BhbjogbnVsbCxcbiAgICAgIGxvY2F0aW9uOiAkaXNvbGF0aW9uLFxuICAgICk7XG4gICAgJGlzb2xhdGU6IG1hcC1tZXJnZSgkaXNvbGF0ZSwgJG5ldyk7XG4gIH1cblxuICBAcmV0dXJuIGdldC1pc29sYXRpb24oJGlzb2xhdGUpO1xufVxuXG5cbi8vIEdldCBJc29sYXRpb25cbi8vIC0tLS0tLS0tLS0tLS1cbi8vIFJldHVybiB0aGUgaXNvbGF0aW9uIG9mZnNldCB3aWR0aFxuLy8gLSAkaW5wdXQ6IDxtYXA+XG5AZnVuY3Rpb24gZ2V0LWlzb2xhdGlvbihcbiAgJGlucHV0XG4pIHtcbiAgJGxvY2F0aW9uICAgOiBnZXQtbG9jYXRpb24oJGlucHV0KTtcbiAgJGNvbHVtbnMgICAgOiBzdXN5LWdldChjb2x1bW5zLCAkaW5wdXQpO1xuICAkd2lkdGggICAgICA6IG51bGw7XG5cbiAgQGlmIHR5cGUtb2YoJGxvY2F0aW9uKSA9PSBudW1iZXIgYW5kIG5vdCh1bml0bGVzcygkbG9jYXRpb24pKSB7XG4gICAgJHdpZHRoOiAkbG9jYXRpb247XG4gIH0gQGVsc2UgaWYgJGxvY2F0aW9uIHtcbiAgICAkcHVzaDogJGxvY2F0aW9uIC0gMTtcbiAgICBAaWYgJHB1c2ggPiAwIHtcbiAgICAgICRwdXNoOiBtYXAtbWVyZ2UoJGlucHV0LCAoXG4gICAgICAgIHNwYW46ICRwdXNoLFxuICAgICAgICBsb2NhdGlvbjogMSxcbiAgICAgICAgc3ByZWFkOiB3aWRlLFxuICAgICAgKSk7XG4gICAgICAkd2lkdGg6IGdldC1zcGFuLXdpZHRoKCRwdXNoKTtcbiAgICB9XG4gIH1cblxuICBAaWYgc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkaW5wdXQpID09IHNwbGl0XG4gICAgICBhbmQgc3VzeS1nZXQoZ3V0dGVycywgJGlucHV0KSA+IDAge1xuICAgICR3aWR0aDogaWYoJHdpZHRoID09IG51bGwsIGd1dHRlcnMoJGlucHV0KSwgJHdpZHRoICsgZ3V0dGVycygkaW5wdXQpKTtcbiAgfVxuXG4gIEByZXR1cm4gJHdpZHRoIG9yIDA7XG59XG4iLCIvLyBHYWxsZXJ5IFN5bnRheFxuLy8gPT09PT09PT09PT09PT1cblxuLy8gR2FsbGVyeVxuLy8gLS0tLS0tLVxuLy8gQ3JlYXRlIGFuIGlzb2xhdGVkIGdhbGxlcnlcbi8vIC0gJHNwYW4gICAgICAgIDogPHNwYW4+XG4vLyAtIFskc2VsZWN0b3JdICA6IGNoaWxkIHwgb2YtdHlwZVxuQG1peGluIGdhbGxlcnkoXG4gICRzcGFuLFxuICAkc2VsZWN0b3I6IGNoaWxkXG4pIHtcbiAgJGluc3BlY3QgICAgOiAkc3BhbjtcbiAgJHNwYW4gICAgICAgOiBwYXJzZS1zcGFuKCRzcGFuKTtcbiAgJHNwYW4gICAgICAgOiBtYXAtbWVyZ2UoJHNwYW4sIChsb2NhdGlvbjogMSkpO1xuXG4gICRuICAgICAgICAgICAgOiBzdXN5LWdldChzcGFuLCAkc3Bhbik7XG4gICRjb2x1bW5zICAgICAgOiBzdXN5LWdldChjb2x1bW5zLCAkc3Bhbik7XG4gICRjb250ZXh0ICAgICAgOiBzdXN5LWNvdW50KCRjb2x1bW5zKTtcbiAgJGZsb3cgICAgICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKTtcblxuICAkaW5zaWRlICAgICAgIDogaXMtaW5zaWRlKCRzcGFuKTtcbiAgJGZyb20gICAgICAgICA6IGZyb20oJGZsb3cpO1xuICAkbGluZSAgICAgICAgIDogZmxvb3IoJGNvbnRleHQgLyAkbik7XG4gICRzeW1tZXRyaWNhbCAgOiBpcy1zeW1tZXRyaWNhbCgkY29sdW1ucyk7XG5cbiAgJG91dHB1dDogKFxuICAgIHdpZHRoICAgICAgICAgICAgIDogbnVsbCxcbiAgICBmbG9hdCAgICAgICAgICAgICA6IGZyb20sXG4gICAgbWFyZ2luLWJlZm9yZSAgICAgOiBudWxsLFxuICAgIG1hcmdpbi1hZnRlciAgICAgIDogbnVsbCxcbiAgICBwYWRkaW5nLWJlZm9yZSAgICA6IG51bGwsXG4gICAgcGFkZGluZy1hZnRlciAgICAgOiBudWxsLFxuICAgIGZsb3cgICAgICAgICAgICAgIDogJGZsb3csXG4gICk7XG5cbiAgQGlmICRpbnNpZGUge1xuICAgICRndXR0ZXJzOiBnZXQtZ3V0dGVycygkc3Bhbik7XG4gICAgJG91dHB1dDogbWFwLW1lcmdlKCRvdXRwdXQsIChcbiAgICAgIHBhZGRpbmctYmVmb3JlOiBtYXAtZ2V0KCRndXR0ZXJzLCBiZWZvcmUpLFxuICAgICAgcGFkZGluZy1hZnRlcjogbWFwLWdldCgkZ3V0dGVycywgYWZ0ZXIpLFxuICAgICkpO1xuICB9XG5cbiAgQGlmICRzeW1tZXRyaWNhbCB7XG4gICAgJG91dHB1dDogbWFwLW1lcmdlKCRvdXRwdXQsICh3aWR0aDogZ2V0LXNwYW4td2lkdGgoJHNwYW4pKSk7XG4gIH1cblxuICAkYm94ICAgICAgICAgIDogc3VzeS1nZXQoYm94LXNpemluZywgJHNwYW4pO1xuICAkZ2xvYmFsLWJveCAgIDogaWYoc3VzeS1nZXQoZ2xvYmFsLWJveC1zaXppbmcpID09ICdib3JkZXItYm94JywgdHJ1ZSwgZmFsc2UpO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChnYWxsZXJ5LCAkaW5zcGVjdCk7XG5cbiAgLy8gQ29sbGVjdGl2ZSBPdXRwdXRcbiAgQGlmICRib3ggPT0gYm9yZGVyLWJveCBvciAoJGluc2lkZSBhbmQgbm90KCRib3gpIGFuZCBub3QoJGdsb2JhbC1ib3gpKSB7XG4gICAgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiBib3JkZXItYm94KSk7XG4gIH0gQGVsc2UgaWYgJGJveCA9PSBjb250ZW50LWJveCB7XG4gICAgQGluY2x1ZGUgb3V0cHV0KChib3gtc2l6aW5nOiBjb250ZW50LWJveCkpO1xuICB9XG5cbiAgQGluY2x1ZGUgZmxvYXQtc3Bhbi1vdXRwdXQoJG91dHB1dC4uLik7XG5cbiAgLy8gSW5kaXZpZHVhbCBMb29wXG4gIEBmb3IgJGl0ZW0gZnJvbSAxIHRocm91Z2ggJGxpbmUge1xuICAgICRudGg6ICcjeyRsaW5lfW4gKyAjeyRpdGVtfSc7XG4gICAgJjpudGgtI3skc2VsZWN0b3J9KCN7JG50aH0pIHtcbiAgICAgIC8vIEluZGl2aWR1YWwgUHJlcFxuICAgICAgJG91dHB1dDogKFxuICAgICAgICB3aWR0aCAgICAgICAgICAgICA6IGlmKCRzeW1tZXRyaWNhbCwgbnVsbCwgZ2V0LXNwYW4td2lkdGgoJHNwYW4pKSxcbiAgICAgICAgZmxvYXQgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBtYXJnaW4tYmVmb3JlICAgICA6IGdldC1pc29sYXRpb24oJHNwYW4pLFxuICAgICAgICBtYXJnaW4tYWZ0ZXIgICAgICA6IC0xMDAlLFxuICAgICAgICBwYWRkaW5nLWJlZm9yZSAgICA6IG51bGwsXG4gICAgICAgIHBhZGRpbmctYWZ0ZXIgICAgIDogbnVsbCxcbiAgICAgICAgZmxvdyAgICAgICAgICAgICAgOiAkZmxvdyxcbiAgICAgICk7XG5cbiAgICAgIC8vIEluZGl2aWR1YWwgT3V0cHV0XG4gICAgICBAaW5jbHVkZSBmbG9hdC1zcGFuLW91dHB1dCgkb3V0cHV0Li4uKTtcblxuICAgICAgQGlmIGdldC1lZGdlKCRzcGFuKSA9PSBmaXJzdCB7XG4gICAgICAgIEBpbmNsdWRlIGJyZWFrO1xuICAgICAgICBAaW5jbHVkZSBmaXJzdCgkc3Bhbik7XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQGluY2x1ZGUgbm9icmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gSW5kaXZpZHVhbCBMb2NhdGlvbiBJbmNyZW1lbnRcbiAgICAgICRsb2NhdGlvbjogZ2V0LWxvY2F0aW9uKCRzcGFuKSArICRuO1xuICAgICAgJGxvY2F0aW9uOiBpZigkbG9jYXRpb24gPiAkY29udGV4dCwgMSwgJGxvY2F0aW9uKTtcbiAgICAgICRzcGFuOiBtYXAtbWVyZ2UoJHNwYW4sIChsb2NhdGlvbjogJGxvY2F0aW9uKSk7XG4gICAgfVxuICB9XG59XG4iLCIvLyBSb3cgU3RhcnQgJiBFbmRcbi8vID09PT09PT09PT09PT09PVxuXG4vLyBCcmVha1xuLy8gLS0tLS1cbi8vIEFwcGx5IHRvIGFueSBlbGVtZW50IHRoYXQgc2hvdWxkIGZvcmNlIGEgbGluZSBicmVhay5cbkBtaXhpbiBicmVhayB7XG4gIEBpbmNsdWRlIG91dHB1dCgoY2xlYXI6IGJvdGgpKTtcbn1cblxuXG4vLyBOb0JyZWFrXG4vLyAtLS0tLS0tXG4vLyBDYW5jZWwgdGhlIGJyZWFrKCkgZWZmZWN0LCBlLmcuIHdoZW4gdXNpbmcgbWVkaWEgcXVlcmllcy5cbkBtaXhpbiBub2JyZWFrIHtcbiAgQGluY2x1ZGUgb3V0cHV0KChjbGVhcjogbm9uZSkpO1xufVxuXG5cbi8vIEZ1bGxcbi8vIC0tLS1cbi8vIC0gWyRjb250ZXh0XTogPGxheW91dCBzaG9ydGhhbmQ+XG5AbWl4aW4gZnVsbChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGluc3BlY3QgOiAkY29udGV4dDtcbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KGZ1bGwsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgc3BhbihmdWxsIG9mIHBhcnNlLWdyaWQoJGNvbnRleHQpIGJyZWFrKTtcbn1cblxuXG4vLyBGaXJzdFxuLy8gLS0tLS1cbi8vIC0gWyRjb250ZXh0XTogPHNldHRpbmdzPlxuQG1peGluIGZpcnN0KFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICAkaW5zcGVjdCAgOiAkY29udGV4dDtcbiAgJGNvbnRleHQgIDogcGFyc2UtZ3JpZCgkY29udGV4dCk7XG4gICRmbG93ICAgICA6IHN1c3ktZ2V0KGZsb3csICRjb250ZXh0KTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoZmlyc3QsICRpbnNwZWN0KTtcbiAgQGlmIG5vdChpcy1zcGxpdCgkY29udGV4dCkpIHtcbiAgICBAaW5jbHVkZSBmbG9hdC1maXJzdCgkZmxvdyk7XG4gIH1cbn1cblxuQG1peGluIGFscGhhKFxuICAkY29udGV4dDogJHN1c3lcbikge1xuICBAaW5jbHVkZSBmaXJzdCgkY29udGV4dCk7XG59XG5cblxuLy8gTGFzdFxuLy8gLS0tLVxuLy8gLSBbJGNvbnRleHRdOiA8c2V0dGluZ3M+XG5AbWl4aW4gbGFzdChcbiAgJGNvbnRleHQ6ICRzdXN5XG4pIHtcbiAgJGluc3BlY3QgIDogJGNvbnRleHQ7XG4gICRjb250ZXh0ICA6IHBhcnNlLWdyaWQoJGNvbnRleHQpO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChsYXN0LCAkaW5zcGVjdCk7XG5cbiAgJG91dHB1dDogKFxuICAgIGZsb3c6IHN1c3ktZ2V0KGZsb3csICRjb250ZXh0KSxcbiAgICBsYXN0LWZsb3c6IHN1c3ktZ2V0KGxhc3QtZmxvdywgJGNvbnRleHQpLFxuICAgIG1hcmdpbjogaWYoaXMtc3BsaXQoJGNvbnRleHQpLCBudWxsLCAwKSxcbiAgKTtcblxuICBAaW5jbHVkZSBmbG9hdC1sYXN0KCRvdXRwdXQuLi4pO1xufVxuXG5AbWl4aW4gb21lZ2EoXG4gICRjb250ZXh0OiAkc3VzeVxuKSB7XG4gIEBpbmNsdWRlIGxhc3QoJGNvbnRleHQpO1xufVxuXG5cbi8vIEdldCBFZGdlXG4vLyAtLS0tLS0tLVxuLy8gQ2FsY3VsYXRlIGVkZ2UgdmFsdWUgYmFzZWQgb24gbG9jYXRpb24sIGlmIHBvc3NpYmxlXG5AZnVuY3Rpb24gZ2V0LWVkZ2UoXG4gICRzcGFuXG4pIHtcbiAgJHNwYW4gICAgICAgOiBwYXJzZS1zcGFuKCRzcGFuKTtcbiAgJGVkZ2UgICAgICAgOiBzdXN5LWdldChlZGdlLCAkc3Bhbik7XG5cbiAgQGlmIG5vdCgkZWRnZSkge1xuICAgICRjb3VudDogc3VzeS1jb3VudChzdXN5LWdldChjb2x1bW5zLCAkc3BhbikpO1xuICAgICRsb2NhdGlvbjogc3VzeS1nZXQobG9jYXRpb24sICRzcGFuKTtcbiAgICAkbjogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuXG4gICAgJG51bWJlcjogaWYodHlwZS1vZigkbG9jYXRpb24pID09IG51bWJlciwgdHJ1ZSwgZmFsc2UpO1xuICAgICRpbmRleDogaWYoJG51bWJlciBhbmQgdW5pdGxlc3MoJGxvY2F0aW9uKSwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgQGlmICRuID09ICRjb3VudCB7XG4gICAgICAkZWRnZTogZnVsbDtcbiAgICB9IEBlbHNlIGlmICRsb2NhdGlvbiBhbmQgJG4gYW5kICRpbmRleCB7XG4gICAgICBAaWYgJGxvY2F0aW9uID09IDEge1xuICAgICAgICAkZWRnZTogaWYoJG4gPT0gJGNvdW50LCBmdWxsLCBmaXJzdCk7XG4gICAgICB9IEBlbHNlIGlmICRsb2NhdGlvbiArICRuIC0gMSA9PSAkY291bnQge1xuICAgICAgICAkZWRnZTogbGFzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaWYgJGVkZ2UgPT0gYWxwaGEgb3IgJGVkZ2UgPT0gb21lZ2Ege1xuICAgICRlZGdlOiBpZigkZWRnZSA9PSBhbHBoYSwgZmlyc3QsIGxhc3QpO1xuICB9XG5cbiAgQHJldHVybiAkZWRnZTtcbn1cblxuXG4vLyBHZXQgTG9jYXRpb25cbi8vIC0tLS0tLS0tLS0tLVxuLy8gQ2FsY3VsYXRlIGxvY2F0aW9uIHZhbHVlIGJhc2VkIG9uIGVkZ2UsIGlmIHBvc3NpYmxlXG5AZnVuY3Rpb24gZ2V0LWxvY2F0aW9uKFxuICAkc3BhblxuKSB7XG4gICRzcGFuICAgICAgIDogcGFyc2Utc3Bhbigkc3Bhbik7XG4gICRsb2NhdGlvbiAgIDogc3VzeS1nZXQobG9jYXRpb24sICRzcGFuKTtcbiAgJGVkZ2UgICAgICAgOiBnZXQtZWRnZSgkc3Bhbik7XG4gICRuICAgICAgICAgIDogc3VzeS1nZXQoc3BhbiwgJHNwYW4pO1xuXG4gIEBpZiAkZWRnZSBhbmQgbm90KCRsb2NhdGlvbikgYW5kIHR5cGUtb2YoJG4pID09IG51bWJlciBhbmQgdW5pdGxlc3MoJG4pIHtcbiAgICBAaWYgJGVkZ2UgPT0gZmlyc3Qge1xuICAgICAgJGxvY2F0aW9uOiAxO1xuICAgIH0gQGVsc2UgaWYgJGVkZ2UgPT0gbGFzdCB7XG4gICAgICAkbG9jYXRpb246IHN1c3ktY291bnQoc3VzeS1nZXQoY29sdW1ucywgJHNwYW4pKSAtICRuICsgMTtcbiAgICB9XG4gIH1cblxuICBAcmV0dXJuICRsb2NhdGlvblxufVxuIiwiLy8gTWFyZ2luIFN5bnRheFxuLy8gPT09PT09PT09PT09PVxuXG4vLyBQcmVcbi8vIC0tLVxuLy8gQWRkIHNwYW5uaW5nLW1hcmdpbnMgYmVmb3JlIGFuIGVsZW1lbnQuXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQG1peGluIHByZShcbiAgJHNwYW5cbikge1xuICAkaW5zcGVjdDogJHNwYW47XG4gICRzcGFuICAgOiBtYXAtbWVyZ2UoKHNwcmVhZDogd2lkZSksIHBhcnNlLXNwYW4oJHNwYW4pKTtcbiAgJGZsb3cgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKTtcbiAgJHNwbGl0ICA6IGlmKHN1c3ktZ2V0KGd1dHRlci1wb3NpdGlvbiwgJHNwYW4pID09IHNwbGl0LCB0cnVlLCBmYWxzZSk7XG4gICRndXR0ZXIgOiBndXR0ZXIoJHNwYW4pO1xuICAkc3BhbiAgIDogc3Bhbigkc3Bhbik7XG4gICR3aWR0aCAgOiBpZigkc3BsaXQgYW5kICRndXR0ZXIsICRzcGFuICsgJGd1dHRlciwgJHNwYW4pO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChwcmUsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgbWFyZ2luLW91dHB1dCgkd2lkdGgsIG51bGwsICRmbG93KTtcbn1cblxuLy8gUG9zdFxuLy8gLS0tLVxuLy8gQWRkIHNwYW5uaW5nLW1hcmdpbnMgYWZ0ZXIgYW4gZWxlbWVudC5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AbWl4aW4gcG9zdChcbiAgJHNwYW5cbikge1xuICAkaW5zcGVjdCAgOiAkc3BhbjtcbiAgJHNwYW4gICAgIDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRzcGFuKSk7XG4gICRmbG93ICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKTtcbiAgJHNwbGl0ICAgIDogaWYoc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkc3BhbikgPT0gc3BsaXQsIHRydWUsIGZhbHNlKTtcbiAgJHdpZHRoICAgIDogaWYoJHNwbGl0LCBzcGFuKCRzcGFuKSArIGd1dHRlcigkc3BhbiksIHNwYW4oJHNwYW4pKTtcblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QocG9zdCwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBtYXJnaW4tb3V0cHV0KG51bGwsICR3aWR0aCwgJGZsb3cpO1xufVxuXG4vLyBQdXNoXG4vLyAtLS0tXG4vLyBTaW1wbGUgc3lub255bW4gZm9yIHByZS5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AbWl4aW4gcHVzaChcbiAgJHNwYW5cbikge1xuICBAaW5jbHVkZSBwcmUoJHNwYW4pO1xufVxuXG4vLyBQdWxsXG4vLyAtLS0tXG4vLyBBZGQgbmVnYXRpdmUgc3Bhbm5pbmctbWFyZ2lucyBiZWZvcmUgYW4gZWxlbWVudC5cbi8vIC0gJHNwYW4gIDogPHNwYW4+XG5AbWl4aW4gcHVsbChcbiAgJHNwYW5cbikge1xuICAkaW5zcGVjdCAgOiAkc3BhbjtcbiAgJHNwYW4gICAgIDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRzcGFuKSk7XG4gICRmbG93ICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKTtcbiAgJHNwbGl0ICAgIDogaWYoc3VzeS1nZXQoZ3V0dGVyLXBvc2l0aW9uLCAkc3BhbikgPT0gc3BsaXQsIHRydWUsIGZhbHNlKTtcbiAgJHdpZHRoICAgIDogaWYoJHNwbGl0LCAwIC0gc3Bhbigkc3BhbikgKyBndXR0ZXIoJHNwYW4pLCAwIC0gc3Bhbigkc3BhbikpO1xuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChwdWxsLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIG1hcmdpbi1vdXRwdXQoJHdpZHRoLCBudWxsLCAkZmxvdyk7XG59XG5cbi8vIFNxdWlzaFxuLy8gLS0tLS0tXG4vLyBBZGQgc3Bhbm5pbmctbWFyZ2lucyBiZWZvcmUgYW5kIGFmdGVyIGFuIGVsZW1lbnQuXG4vLyAtICRwcmUgICAgIDogPHNwYW4+XG4vLyAtIFskcG9zdF0gIDogPHNwYW4+XG5AbWl4aW4gc3F1aXNoKFxuICAkcHJlLFxuICAkcG9zdDogZmFsc2Vcbikge1xuICAkaW5zcGVjdCAgICAgIDogKCRwcmUsICRwb3N0KTtcbiAgJHByZSAgICAgICAgICA6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3BhbigkcHJlKSk7XG5cbiAgQGlmICRwb3N0IHtcbiAgICAkcG9zdDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRwb3N0KSk7XG4gIH0gQGVsc2Uge1xuICAgICRzcGFuOiBzdXN5LWdldChzcGFuLCAkcHJlKTtcbiAgICBAaWYgbGVuZ3RoKCRzcGFuKSA+IDEge1xuICAgICAgJHByZTogbWFwLW1lcmdlKCRwcmUsIChzcGFuOiBudGgoJHNwYW4sIDEpKSk7XG4gICAgICAkcG9zdDogbWFwLW1lcmdlKCRwcmUsIChzcGFuOiBudGgoJHNwYW4sIDIpKSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkcG9zdDogJHByZTtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3Qoc3F1aXNoLCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIHByZSgkcHJlKTtcbiAgQGluY2x1ZGUgcG9zdCgkcG9zdCk7XG59XG4iLCIvLyBQYWRkaW5nIFN5bnRheFxuLy8gPT09PT09PT09PT09PT1cblxuLy8gUHJlZml4XG4vLyAtLS0tLS1cbi8vIEFkZCBzcGFubmluZy1wYWRkaW5nIGJlZm9yZSBhbiBlbGVtZW50LlxuLy8gLSAkc3BhbiAgOiA8c3Bhbj5cbkBtaXhpbiBwcmVmaXgoXG4gICRzcGFuXG4pIHtcbiAgJGluc3BlY3QgIDogJHNwYW47XG4gICRzcGFuICAgICA6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3Bhbigkc3BhbikpO1xuICAkZmxvdyAgICAgOiBzdXN5LWdldChmbG93LCAkc3Bhbik7XG4gICR3aWR0aCAgICA6IHNwYW4oJHNwYW4pO1xuXG4gIEBpZiBpcy1pbnNpZGUoJHNwYW4pIHtcbiAgICAkZ3V0dGVyOiBndXR0ZXIoJHNwYW4pO1xuICAgICR3aWR0aDogaWYoJGd1dHRlciBhbmQgY29tcGFyYWJsZSgkd2lkdGgsICRndXR0ZXIpLCAkd2lkdGggKyAkZ3V0dGVyLCAkd2lkdGgpO1xuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1pbnNwZWN0KHByZWZpeCwgJGluc3BlY3QpO1xuICBAaW5jbHVkZSBwYWRkaW5nLW91dHB1dCgkd2lkdGgsIG51bGwsICRmbG93KTtcbn1cblxuLy8gU3VmZml4XG4vLyAtLS0tLS1cbi8vIEFkZCBzcGFubmluZy1wYWRkaW5nIGFmdGVyIGFuIGVsZW1lbnQuXG4vLyAtICRzcGFuICA6IDxzcGFuPlxuQG1peGluIHN1ZmZpeChcbiAgJHNwYW5cbikge1xuICAkaW5zcGVjdCAgOiAkc3BhbjtcbiAgJHNwYW4gICAgIDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRzcGFuKSk7XG4gICRmbG93ICAgICA6IHN1c3ktZ2V0KGZsb3csICRzcGFuKTtcbiAgJHdpZHRoICAgIDogc3Bhbigkc3Bhbik7XG5cbiAgQGlmIGlzLWluc2lkZSgkc3Bhbikge1xuICAgICRndXR0ZXI6IGd1dHRlcigkc3Bhbik7XG4gICAgJHdpZHRoOiBpZigkZ3V0dGVyIGFuZCBjb21wYXJhYmxlKCR3aWR0aCwgJGd1dHRlciksICR3aWR0aCArICRndXR0ZXIsICR3aWR0aCk7XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3Qoc3VmZml4LCAkaW5zcGVjdCk7XG4gIEBpbmNsdWRlIHBhZGRpbmctb3V0cHV0KG51bGwsICR3aWR0aCwgJGZsb3cpO1xufVxuXG4vLyBQYWRcbi8vIC0tLVxuLy8gQWRkIHNwYW5uaW5nLXBhZGRpbmcgYmVmb3JlIGFuZCBhZnRlciBhbiBlbGVtZW50LlxuLy8gLSAkcHJlICAgICA6IDxzcGFuPlxuLy8gLSBbJHBvc3RdICA6IDxzcGFuPlxuQG1peGluIHBhZChcbiAgJHByZSxcbiAgJHBvc3Q6IGZhbHNlXG4pIHtcbiAgJGluc3BlY3QgIDogKCRwcmUsICRwb3N0KTtcbiAgJHByZSAgICAgIDogbWFwLW1lcmdlKChzcHJlYWQ6IHdpZGUpLCBwYXJzZS1zcGFuKCRwcmUpKTtcblxuICBAaWYgJHBvc3Qge1xuICAgICRwb3N0OiBtYXAtbWVyZ2UoKHNwcmVhZDogd2lkZSksIHBhcnNlLXNwYW4oJHBvc3QpKTtcbiAgfSBAZWxzZSB7XG4gICAgJHNwYW46IHN1c3ktZ2V0KHNwYW4sICRwcmUpO1xuICAgIEBpZiBsZW5ndGgoJHNwYW4pID4gMSB7XG4gICAgICAkcHJlOiBtYXAtbWVyZ2UoJHByZSwgKHNwYW46IG50aCgkc3BhbiwgMSkpKTtcbiAgICAgICRwb3N0OiBtYXAtbWVyZ2UoJHByZSwgKHNwYW46IG50aCgkc3BhbiwgMikpKTtcbiAgICB9IEBlbHNlIHtcbiAgICAgICRwb3N0OiAkcHJlO1xuICAgIH1cbiAgfVxuXG4gIEBpbmNsdWRlIHN1c3ktaW5zcGVjdChwYWQsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgcHJlZml4KCRwcmUpO1xuICBAaW5jbHVkZSBzdWZmaXgoJHBvc3QpO1xuXG59XG4iLCIvLyBCbGVlZCBTeW50YXhcbi8vID09PT09PT09PT09PVxuXG4vLyBCbGVlZFxuLy8gLS0tLS1cbi8vIEFkZCBuZWdhdGl2ZSBtYXJnaW5zLCBhbmQgZXF1YWwgcG9zaXRpdmUgcGFkZGluZyB0byBjcmVhdGUgYmxlZWQuXG4vLyAtICRibGVlZCAgOiA8c3Bhbj5cbkBtaXhpbiBibGVlZChcbiAgJGJsZWVkOiAwIGd1dHRlcigpXG4pIHtcbiAgJGluc3BlY3QgIDogJGJsZWVkO1xuICAkb3V0cHV0ICAgOiBnZXQtYmxlZWQoJGJsZWVkKTtcblxuICBAaWYgc3VzeS1nZXQoZ2xvYmFsLWJveC1zaXppbmcpICE9IGNvbnRlbnQtYm94IHtcbiAgICAkb3V0cHV0OiBtYXAtbWVyZ2UoKGJveC1zaXppbmc6IGNvbnRlbnQtYm94KSwgJG91dHB1dCk7XG4gIH1cblxuICBAaW5jbHVkZSBzdXN5LWluc3BlY3QoYmxlZWQsICRpbnNwZWN0KTtcbiAgQGluY2x1ZGUgb3V0cHV0KCRvdXRwdXQpO1xufVxuXG5cbi8vIEJsZWVkLXhcbi8vIC0tLS0tLS1cbi8vIFNob3J0Y3V0IGZvciBob3Jpem9udGFsIGJsZWVkLlxuLy8gLSAkYmxlZWQgIDogPHNwYW4+XG5AbWl4aW4gYmxlZWQteChcbiAgJGJsZWVkOiBndXR0ZXIoKVxuKSB7XG4gICRibGVlZCAgOiBwYXJzZS1zcGFuKCRibGVlZCk7XG4gICR0cmJsICAgOiBzdXN5LWdldChzcGFuLCAkYmxlZWQpO1xuXG4gIEBpZiBsZW5ndGgoJHRyYmwpID09IDEge1xuICAgICRibGVlZDogbWFwLW1lcmdlKCRibGVlZCwgKHNwYW46IDAgbnRoKCR0cmJsLCAxKSkpO1xuICB9IEBlbHNlIGlmIGxlbmd0aCgkdHJibCkgPT0gMiB7XG4gICAgJGJsZWVkOiBtYXAtbWVyZ2UoJGJsZWVkLCAoc3BhbjogMCBudGgoJHRyYmwsIDIpIDAgbnRoKCR0cmJsLCAxKSkpO1xuICB9IEBlbHNlIHtcbiAgICBAd2FybiAnYmxlZWQteCBvbmx5IHRha2VzIDIgbGVuZ3RocywgYnV0ICN7bGVuZ3RoKCR0cmJsKX0gd2VyZSBwYXNzZWQuJztcbiAgfVxuXG4gIEBpbmNsdWRlIGJsZWVkKCRibGVlZCk7XG59XG5cblxuLy8gQmxlZWQteVxuLy8gLS0tLS0tLVxuLy8gU2hvcnRjdXQgZm9yIHZlcnRpY2FsIGJsZWVkLlxuLy8gLSAkYmxlZWQgIDogPHNwYW4+XG5AbWl4aW4gYmxlZWQteShcbiAgJGJsZWVkOiBpZihmdW5jdGlvbi1leGlzdHMocmh5dGhtKSwgcmh5dGhtKDEpLCAxZW0pXG4pIHtcbiAgJGJsZWVkICA6IHBhcnNlLXNwYW4oJGJsZWVkKTtcbiAgJHRyYmwgICA6IHN1c3ktZ2V0KHNwYW4sICRibGVlZCk7XG5cbiAgQGlmIGxlbmd0aCgkdHJibCkgPT0gMSB7XG4gICAgJGJsZWVkOiBtYXAtbWVyZ2UoJGJsZWVkLCAoc3BhbjogbnRoKCR0cmJsLCAxKSAwKSk7XG4gIH0gQGVsc2UgaWYgbGVuZ3RoKCR0cmJsKSA9PSAyIHtcbiAgICAkYmxlZWQ6IG1hcC1tZXJnZSgkYmxlZWQsIChzcGFuOiBudGgoJHRyYmwsIDEpIDAgbnRoKCR0cmJsLCAyKSAwKSk7XG4gIH0gQGVsc2Uge1xuICAgIEB3YXJuICdibGVlZC15IG9ubHkgdGFrZXMgMiBsZW5ndGhzLCBidXQgI3tsZW5ndGgoJHRyYmwpfSB3ZXJlIHBhc3NlZC4nO1xuICB9XG5cbiAgQGluY2x1ZGUgYmxlZWQoJGJsZWVkKTtcbn1cblxuXG4vLyBHZXQgQmxlZWRcbi8vIC0tLS0tLS0tLVxuLy8gUmV0dXJuIGJsZWVkIG91dHB1dCB2YWx1ZXNcbi8vIC0gJGJsZWVkOiA8c3Bhbj5cbkBmdW5jdGlvbiBnZXQtYmxlZWQoXG4gICRibGVlZFxuKSB7XG4gICRibGVlZCAgICA6IG1hcC1tZXJnZSgoc3ByZWFkOiB3aWRlKSwgcGFyc2Utc3BhbigkYmxlZWQpKTtcbiAgJHRyYmwgICAgIDogc3VzeS1nZXQoc3BhbiwgJGJsZWVkKTtcbiAgJHNob3J0ICAgIDogbnVsbDtcbiAgJG91dHB1dCAgIDogKCk7XG5cbiAgQGZvciAkaSBmcm9tIDEgdGhyb3VnaCBsZW5ndGgoJHRyYmwpIHtcbiAgICAkdGhpczogbnRoKCR0cmJsLCAkaSk7XG4gICAgJG5ldzogKCk7XG4gICAgJG1hcmdpbjogbnVsbDtcbiAgICAkcGFkZGluZzogbnVsbDtcbiAgICAkcGFkZGluZy14OiBudWxsO1xuXG4gICAgQGlmICR0aGlzID4gMCB7XG4gICAgICAkdGhpczogbWFwLW1lcmdlKCRibGVlZCwgKHNwYW46ICR0aGlzKSk7XG4gICAgICAkbWFyZ2luOiBzcGFuKCR0aGlzKTtcbiAgICAgICRwYWRkaW5nOiAkbWFyZ2luO1xuICAgICAgJHBhZGRpbmcteDogJHBhZGRpbmc7XG4gICAgfVxuXG4gICAgQGlmICRtYXJnaW4gYW5kICRtYXJnaW4gPiAwIHtcbiAgICAgICRtYXJnaW46IC0gJG1hcmdpbjtcblxuICAgICAgQGlmIGlzLWluc2lkZSgkdGhpcykge1xuICAgICAgICAkZ3V0dGVyOiBndXR0ZXIoJHRoaXMpO1xuICAgICAgICAkam9pbjogaWYoJGd1dHRlciBhbmQgY29tcGFyYWJsZSgkcGFkZGluZywgJGd1dHRlciksIHRydWUsIGZhbHNlKTtcbiAgICAgICAgJHBhZGRpbmcteDogaWYoJGpvaW4gYW5kICRwYWRkaW5nID4gMCwgJHBhZGRpbmcgKyAkZ3V0dGVyLCAkcGFkZGluZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQGlmICRpID09IDEge1xuICAgICAgJG5ldzogKFxuICAgICAgICBtYXJnaW4tdG9wOiAkbWFyZ2luLFxuICAgICAgICBwYWRkaW5nLXRvcDogJHBhZGRpbmcsXG4gICAgICAgIG1hcmdpbi1yaWdodDogJG1hcmdpbixcbiAgICAgICAgcGFkZGluZy1yaWdodDogJHBhZGRpbmcteCxcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbixcbiAgICAgICAgcGFkZGluZy1ib3R0b206ICRwYWRkaW5nLFxuICAgICAgICBtYXJnaW4tbGVmdDogJG1hcmdpbixcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAkcGFkZGluZy14LFxuICAgICAgKTtcbiAgICB9IEBlbHNlIGlmICRpID09IDIge1xuICAgICAgJG5ldzogKFxuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRtYXJnaW4sXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6ICRwYWRkaW5nLXgsXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkbWFyZ2luLFxuICAgICAgICBwYWRkaW5nLWxlZnQ6ICRwYWRkaW5nLXgsXG4gICAgICApO1xuICAgIH0gQGVsc2UgaWYgJGkgPT0gMyB7XG4gICAgICAkbmV3OiAoXG4gICAgICAgIG1hcmdpbi1ib3R0b206ICRtYXJnaW4sXG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAkcGFkZGluZyxcbiAgICAgICk7XG4gICAgfSBAZWxzZSBpZiAkaSA9PSA0IHtcbiAgICAgICRuZXc6IChcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRtYXJnaW4sXG4gICAgICAgIHBhZGRpbmctbGVmdDogJHBhZGRpbmcteCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgJG91dHB1dDogbWFwLW1lcmdlKCRvdXRwdXQsICRuZXcpO1xuICB9XG5cbiAgQGVhY2ggJHByb3AsICR2YWx1ZSBpbiAkb3V0cHV0IHtcbiAgICAkb3V0cHV0OiBpZigkdmFsdWUgPT0gMCwgbWFwLW1lcmdlKCRvdXRwdXQsICgkcHJvcDogbnVsbCkpLCAkb3V0cHV0KTtcbiAgfVxuXG4gIEByZXR1cm4gYmxlZWQtc2hvcnRoYW5kKCRvdXRwdXQpO1xufVxuXG4vLyBCbGVlZCBTaG9ydGhhbmRcbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gQ29udmVydCBibGVlZCBvdXRwdXQgaW50byBzaG9ydGhhbmQgd2hlbiBwb3NzaWJsZS5cbi8vIC0gJGJsZWVkOiA8b3V0cHV0IG1hcD5cbkBmdW5jdGlvbiBibGVlZC1zaG9ydGhhbmQoXG4gICRibGVlZFxuKSB7XG4gICRtYXJnaW46ICgpO1xuICAkcGFkZGluZzogKCk7XG4gICRyZXR1cm46ICgpO1xuXG4gIEBlYWNoICRrZXksICR2YWx1ZSBpbiAkYmxlZWQge1xuICAgIEBpZiBzdHItaW5kZXgoJGtleSwgbWFyZ2luKSB7XG4gICAgICAkbWFyZ2luOiBtYXAtbWVyZ2UoJG1hcmdpbiwgKCRrZXk6ICR2YWx1ZSkpO1xuICAgIH0gQGVsc2UgaWYgc3RyLWluZGV4KCRrZXksIHBhZGRpbmcpID4gMCB7XG4gICAgICAkcGFkZGluZzogbWFwLW1lcmdlKCRwYWRkaW5nLCAoJGtleTogJHZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAgJHByb3BzOiAoXG4gICAgbWFyZ2luOiAkbWFyZ2luLFxuICAgIHBhZGRpbmc6ICRwYWRkaW5nLFxuICApO1xuXG4gIEBlYWNoICRuYW1lLCAkbWFwIGluICRwcm9wcyB7XG4gICAgJGZvdXI6IGlmKGxlbmd0aChtYXAta2V5cygkbWFwKSkgPT0gNCwgdHJ1ZSwgZmFsc2UpO1xuICAgICRudWxsOiBpZihpbmRleChtYXAtdmFsdWVzKCRtYXApLCBudWxsKSwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgQGlmICRmb3VyIGFuZCBub3QoJG51bGwpIHtcbiAgICAgICR0b3A6IG1hcC1nZXQoJG1hcCwgJyN7JG5hbWV9LXRvcCcpO1xuICAgICAgJHJpZ2h0OiBtYXAtZ2V0KCRtYXAsICcjeyRuYW1lfS1yaWdodCcpO1xuICAgICAgJGJvdHRvbTogbWFwLWdldCgkbWFwLCAnI3skbmFtZX0tYm90dG9tJyk7XG4gICAgICAkbGVmdDogbWFwLWdldCgkbWFwLCAnI3skbmFtZX0tbGVmdCcpO1xuXG4gICAgICAkdGI6IGlmKCR0b3AgPT0gJGJvdHRvbSwgJHRvcCwgbnVsbCk7XG4gICAgICAkcmw6IGlmKCRyaWdodCA9PSAkbGVmdCwgJHJpZ2h0LCBudWxsKTtcbiAgICAgICRhbGw6IGlmKCR0YiA9PSAkcmwsICR0YiwgbnVsbCk7XG5cbiAgICAgICRuZXc6IGlmKCRhbGwsICRhbGwsIG51bGwpO1xuXG4gICAgICBAaWYgbm90KCRuZXcpIHtcbiAgICAgICAgQGlmICR0YiBhbmQgJHJsIHtcbiAgICAgICAgICAkbmV3OiAkdGIgJHJsO1xuICAgICAgICB9IEBlbHNlIGlmICRybCB7XG4gICAgICAgICAgJG5ldzogJHRvcCAkcmwgJGJvdHRvbTtcbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgJG5ldzogJHRvcCAkcmlnaHQgJGJvdHRvbSAkbGVmdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAkcmV0dXJuOiBtYXAtbWVyZ2UoJHJldHVybiwgKCRuYW1lOiAkbmV3KSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkcmV0dXJuOiBtYXAtbWVyZ2UoJHJldHVybiwgJG1hcCk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkcmV0dXJuO1xufVxuIiwiLy8gQnJlYWtwb2ludCBJbnRlZ3JhdGlvblxuLy8gPT09PT09PT09PT09PT09PT09PT09PVxuXG4kc3VzeS1tZWRpYTogKCkgIWRlZmF1bHQ7XG4kc3VzeS1tZWRpYS1mYWxsYmFjazogZmFsc2UgIWRlZmF1bHQ7XG5cbiRfc3VzeS1tZWRpYS1jb250ZXh0OiAoKTtcblxuXG4vLyBTdXN5IEJyZWFrcG9pbnRcbi8vIC0tLS0tLS0tLS0tLS0tLVxuLy8gQ2hhbmdlIGdyaWRzIGF0IGRpZmZlcmVudCBtZWRpYSBxdWVyeSBicmVha3BvaW50cy5cbi8vIC0gJHF1ZXJ5ICAgICA6IDxtaW4td2lkdGg+IFs8bWF4LXdpZHRoPl0gfCA8cHJvcGVydHk+IDx2YWx1ZT4gfCA8bWFwPlxuLy8gLSAkbGF5b3V0ICAgIDogPHNldHRpbmdzPlxuLy8gLSAkbm8tcXVlcnkgIDogPGJvb2xlYW4+IHwgPHNlbGVjdG9yPlxuQG1peGluIHN1c3ktYnJlYWtwb2ludChcbiAgJHF1ZXJ5LFxuICAkbGF5b3V0OiBmYWxzZSxcbiAgJG5vLXF1ZXJ5OiAkc3VzeS1tZWRpYS1mYWxsYmFja1xuKSB7XG4gIEBpbmNsdWRlIHN1c3ktbWVkaWEtcm91dGVyKCRxdWVyeSwgJG5vLXF1ZXJ5KSB7XG4gICAgQGlmICRsYXlvdXQge1xuICAgICAgQGluY2x1ZGUgd2l0aC1sYXlvdXQoJGxheW91dCkge1xuICAgICAgICBAY29udGVudDtcbiAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIFN1c3kgTWVkaWFcbi8vIC0tLS0tLS0tLS1cbi8vIC0gJHF1ZXJ5OiA8bWluLXdpZHRoPiBbPG1heC13aWR0aD5dIHwgPHByb3BlcnR5PiA8dmFsdWU+XG4vLyAtICRuby1xdWVyeTogPGJvb2xlYW4+IHwgPHNlbGVjdG9yPlxuQG1peGluIHN1c3ktbWVkaWEoXG4gICRxdWVyeSxcbiAgJG5vLXF1ZXJ5OiAkc3VzeS1tZWRpYS1mYWxsYmFja1xuKSB7XG4gICRvbGQtY29udGV4dDogJF9zdXN5LW1lZGlhLWNvbnRleHQ7XG4gICRuYW1lOiBpZihtYXAtaGFzLWtleSgkc3VzeS1tZWRpYSwgJHF1ZXJ5KSwgJHF1ZXJ5LCBudWxsKTtcbiAgJHF1ZXJ5OiBzdXN5LWdldC1tZWRpYSgkcXVlcnkpO1xuICAkcXVlcnk6IHN1c3ktcGFyc2UtbWVkaWEoJHF1ZXJ5KTtcblxuICBAaW5jbHVkZSBzdXN5LW1lZGlhLWNvbnRleHQoJHF1ZXJ5LCAkbmFtZSk7XG5cbiAgQGlmICRuby1xdWVyeSBhbmQgdHlwZS1vZigkbm8tcXVlcnkpICE9IHN0cmluZyB7XG4gICAgQGNvbnRlbnQ7XG4gIH0gQGVsc2Uge1xuICAgIEBtZWRpYSAje3N1c3ktcmVuZGVyLW1lZGlhKCRxdWVyeSl9IHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cblxuICAgIEBpZiB0eXBlLW9mKCRuby1xdWVyeSkgPT0gc3RyaW5nIHtcbiAgICAgICN7JG5vLXF1ZXJ5fSAmIHtcbiAgICAgICAgQGNvbnRlbnQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgQGluY2x1ZGUgc3VzeS1tZWRpYS1jb250ZXh0KCRvbGQtY29udGV4dCwgJGNsZWFuOiB0cnVlKTtcbn1cblxuXG4vLyBNZWRpYSBSb3V0ZXJcbi8vIC0tLS0tLS0tLS0tLVxuLy8gUm91dCBtZWRpYSBhcmd1bWVudHMgdG8gdGhlIGNvcnJlY3QgbWl4aW4uXG5AbWl4aW4gc3VzeS1tZWRpYS1yb3V0ZXIoXG4gICRxdWVyeSxcbiAgJG5vLXF1ZXJ5OiAkc3VzeS1tZWRpYS1mYWxsYmFja1xuKSB7XG4gIEBpZiBzdXN5LXN1cHBvcnQoYnJlYWtwb2ludCwgKG1peGluOiBicmVha3BvaW50KSwgJHdhcm46IGZhbHNlKSB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgkcXVlcnksICRuby1xdWVyeSkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAaW5jbHVkZSBzdXN5LW1lZGlhKCRxdWVyeSwgJG5vLXF1ZXJ5KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH1cbn1cblxuXG4vLyBVcGRhdGUgQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLVxuLy8gU2V0IHRoZSBuZXcgbWVkaWEgY29udGV4dFxuQG1peGluIHN1c3ktbWVkaWEtY29udGV4dChcbiAgJHF1ZXJ5LFxuICAkbmFtZTogbnVsbCxcbiAgJGNsZWFuOiBmYWxzZVxuKSB7XG4gICRxdWVyeTogbWFwLW1lcmdlKChuYW1lOiAkbmFtZSksICRxdWVyeSk7XG5cbiAgQGlmICRjbGVhbiB7XG4gICAgJF9zdXN5LW1lZGlhLWNvbnRleHQ6ICRxdWVyeSAhZ2xvYmFsO1xuICB9IEBlbHNlIHtcbiAgICAkX3N1c3ktbWVkaWEtY29udGV4dDogbWFwLW1lcmdlKCRfc3VzeS1tZWRpYS1jb250ZXh0LCAkcXVlcnkpICFnbG9iYWw7XG4gIH1cbn1cblxuXG4vLyBNZWRpYSBDb250ZXh0XG4vLyAtLS0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gdGhlIGZ1bGwgbWVkaWEgY29udGV4dCwgb3IgYSBzaW5nbGUgbWVkaWEgcHJvcGVydHkgKGUuZy4gbWluLXdpZHRoKVxuQGZ1bmN0aW9uIHN1c3ktbWVkaWEtY29udGV4dChcbiAgJHByb3BlcnR5OiBmYWxzZVxuKSB7XG4gIEBpZiAkcHJvcGVydHkge1xuICAgIEByZXR1cm4gbWFwLWdldCgkX3N1c3ktbWVkaWEtY29udGV4dCwgJHByb3BlcnR5KTtcbiAgfSBAZWxzZSB7XG4gICAgQHJldHVybiAkX3N1c3ktbWVkaWEtY29udGV4dDtcbiAgfVxufVxuXG5cbi8vIEdldCBNZWRpYVxuLy8gLS0tLS0tLS0tXG4vLyBSZXR1cm4gYSBuYW1lZCBtZWRpYS1xdWVyeSBmcm9tICRzdXN5LW1lZGlhLlxuLy8gLSAkbmFtZTogPGtleT5cbkBmdW5jdGlvbiBzdXN5LWdldC1tZWRpYShcbiAgJG5hbWVcbikge1xuICBAaWYgbWFwLWhhcy1rZXkoJHN1c3ktbWVkaWEsICRuYW1lKSB7XG4gICAgJG1hcC12YWx1ZTogbWFwLWdldCgkc3VzeS1tZWRpYSwgJG5hbWUpO1xuICAgIEBpZiAoJG5hbWUgPT0gJG1hcC12YWx1ZSkge1xuICAgICAgJG5hbWU6ICRtYXAtdmFsdWU7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbmFtZTogc3VzeS1nZXQtbWVkaWEoJG1hcC12YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQHJldHVybiAkbmFtZTtcbn1cblxuXG4vLyBSZW5kZXIgTWVkaWFcbi8vIC0tLS0tLS0tLS0tLVxuLy8gQnVpbGQgYSBtZWRpYS1xdWVyeSBzdHJpbmcgZnJvbSB2YXJpb3VzIG1lZGlhIHNldHRpbmdzXG5AZnVuY3Rpb24gc3VzeS1yZW5kZXItbWVkaWEoXG4gICRxdWVyeVxuKSB7XG4gICRvdXRwdXQ6IG51bGw7XG4gIEBlYWNoICRwcm9wZXJ0eSwgJHZhbHVlIGluICRxdWVyeSB7XG4gICAgJHN0cmluZzogbnVsbDtcblxuICAgIEBpZiAkcHJvcGVydHkgPT0gbWVkaWEge1xuICAgICAgJHN0cmluZzogJHZhbHVlO1xuICAgIH0gQGVsc2Uge1xuICAgICAgJHN0cmluZzogJygjeyRwcm9wZXJ0eX06ICN7JHZhbHVlfSknO1xuICAgIH1cblxuICAgICRvdXRwdXQ6IGlmKCRvdXRwdXQsICcjeyRvdXRwdXR9IGFuZCAjeyRzdHJpbmd9JywgJHN0cmluZyk7XG4gIH1cblxuICBAcmV0dXJuICRvdXRwdXQ7XG59XG5cblxuLy8gUGFyc2UgTWVkaWFcbi8vIC0tLS0tLS0tLS0tXG4vLyBSZXR1cm4gcGFyc2VkIG1lZGlhLXF1ZXJ5IHNldHRpbmdzIGJhc2VkIG9uIHNob3J0aGFuZFxuQGZ1bmN0aW9uIHN1c3ktcGFyc2UtbWVkaWEoXG4gICRxdWVyeVxuKSB7XG4gICRtcTogbnVsbDtcbiAgQGlmIHR5cGUtb2YoJHF1ZXJ5KSA9PSBtYXAge1xuICAgICRtcTogJHF1ZXJ5O1xuICB9IEBlbHNlIGlmIHR5cGUtb2YoJHF1ZXJ5KSA9PSBudW1iZXIge1xuICAgICRtcTogKG1pbi13aWR0aDogJHF1ZXJ5KTtcbiAgfSBAZWxzZSBpZiB0eXBlLW9mKCRxdWVyeSkgPT0gbGlzdCBhbmQgbGVuZ3RoKCRxdWVyeSkgPT0gMiB7XG4gICAgQGlmIHR5cGUtb2YobnRoKCRxdWVyeSwgMSkpID09IG51bWJlciB7XG4gICAgICAkbXE6IChcbiAgICAgICAgbWluLXdpZHRoOiBtaW4oJHF1ZXJ5Li4uKSxcbiAgICAgICAgbWF4LXdpZHRoOiBtYXgoJHF1ZXJ5Li4uKSxcbiAgICAgICk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkbXE6IChudGgoJHF1ZXJ5LCAxKTogbnRoKCRxdWVyeSwgMikpO1xuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgJG1xOiAobWVkaWE6ICcjeyRxdWVyeX0nKTtcbiAgfVxuXG4gIEByZXR1cm4gJG1xO1xufVxuIiwiJHN1c3k6IChcbiAgICAgICAgZmxvdzogbHRyLFxuICAgICAgICBtYXRoOiBmbHVpZCxcbiAgICAgICAgb3V0cHV0OiBmbG9hdCxcbiAgICAgICAgZ3V0dGVyLXBvc2l0aW9uOiBzcGxpdCxcbiAgICAgICAgY29udGFpbmVyOiBhdXRvLFxuICAgICAgICBjb250YWluZXItcG9zaXRpb246IGNlbnRlcixcbiAgICAgICAgY29sdW1uczogMTIsXG4gICAgICAgIGd1dHRlcnM6IC41LFxuICAgICAgICBjb2x1bW4td2lkdGg6IGZhbHNlLFxuICAgICAgICBnbG9iYWwtYm94LXNpemluZzogY29udGVudC1ib3gsXG4gICAgICAgIGxhc3QtZmxvdzogdG8sXG4gICAgICAgIHVzZS1jdXN0b206IChcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWltYWdlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQtb3B0aW9uczogZmFsc2UsXG4gICAgICAgICAgICAgICAgYm94LXNpemluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjbGVhcmZpeDogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZW06IHRydWUsXG4gICAgICAgIClcbik7IiwiQG1peGluIGNsZWFyZml4IHtcbiAgJjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBkaXNwbGF5OiB0YWJsZTtcbiAgICBjbGVhcjogYm90aDtcbiAgfVxufVxuXG4vLyBSZW1cbkBtaXhpbiByZW0oJHByb3BlcnR5LCAkdmFsdWVzLi4uKSB7XG4gICRuOiBsZW5ndGgoJHZhbHVlcyk7XG4gICRpOiAxO1xuICAkcHhsaXN0OiAoKTtcbiAgJHJlbWxpc3Q6ICgpO1xuICBAd2hpbGUgJGkgPD0gJG4ge1xuICAgICRpdGVtVmFsOiAobnRoKCR2YWx1ZXMsICRpKSk7XG4gICAgQGlmICRpdGVtVmFsICE9IFwiYXV0b1wiIHtcbiAgICAgICRweGxpc3Q6IGFwcGVuZCgkcHhsaXN0LCAkaXRlbVZhbCArIHB4KTtcbiAgICAgICRyZW1saXN0OiBhcHBlbmQoJHJlbWxpc3QsICgkaXRlbVZhbCAvIDEwKSArIHJlbSk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAkcHhsaXN0OiBhcHBlbmQoJHB4bGlzdCwgYXV0byk7XG4gICAgICAkcmVtbGlzdDogYXBwZW5kKCRyZW1saXN0LCBhdXRvKTtcbiAgICB9XG4gICAgJGk6ICRpICsgMTtcbiAgfVxuICAjeyRwcm9wZXJ0eX06ICRweGxpc3Q7XG4gICN7JHByb3BlcnR5fTogJHJlbWxpc3Q7XG59XG5cbi8vIEJvcmRlciBSYWRpdXNcbkBtaXhpbiBib3JkZXItcmFkaXVzKCRyYWRpdXMpIHtcbiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAkcmFkaXVzO1xuICAtbW96LWJvcmRlci1yYWRpdXM6ICRyYWRpdXM7XG4gIC1tcy1ib3JkZXItcmFkaXVzOiAkcmFkaXVzO1xuICBib3JkZXItcmFkaXVzOiAkcmFkaXVzO1xufVxuXG4vLyBVc2VyIFNlbGVjdFxuQG1peGluIHVzZXItc2VsZWN0KCR2YWx1ZSkge1xuICAtbW96LXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6ICR2YWx1ZTtcbiAgLW1zLXVzZXItc2VsZWN0OiAkdmFsdWU7XG4gIHVzZXItc2VsZWN0OiAkdmFsdWU7XG59XG5cbi8vIEJhY2tncm91bmQgT3BhY2l0eVxuQG1peGluIGJhY2tncm91bmQtb3BhY2l0eSgkcmVkLCAkZ3JlZW4sICRibHVlLCAkb3BhY2l0eSkge1xuICBiYWNrZ3JvdW5kOiByZ2IoJHJlZCwgJGdyZWVuLCAkYmx1ZSk7XG4gIGJhY2tncm91bmQ6IHJnYmEoJHJlZCwgJGdyZWVuLCAkYmx1ZSwgJG9wYWNpdHkpO1xufVxuXG4vLyBPcGFjaXR5XG5AbWl4aW4gb3BhY2l0eSgkb3BhY2l0eSkge1xuICBvcGFjaXR5OiAkb3BhY2l0eTtcbiAgJG9wYWNpdHktaWU6ICRvcGFjaXR5ICogMTAwO1xuICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9JG9wYWNpdHktaWUpO1xufVxuXG4vLyBUZXh0IFNoYWRvd1xuQG1peGluIHRleHQtc2hhZG93KCR4OiAwcHgsICR5OiAxcHgsICRibHVyOiAycHgsICRjb2xvcjogIzAwMCkge1xuICB0ZXh0LXNoYWRvdzogJHggJHkgJGJsdXIgJGNvbG9yO1xufVxuXG5AbWl4aW4gbGluZWFyLWdyYWRpZW50LXJnYmEoJHJlZF9zdGFydCwgJGdyZWVuX3N0YXJ0LCAkYmx1ZV9zdGFydCwgJG9wYWNpdHlfc3RhcnQsICRwb2ludF9zdGFydCwgJHJlZF9lbmQsICRncmVlbl9lbmQsICRibHVlX2VuZCwgJG9wYWNpdHlfZW5kLCAkcG9pbnRfZW5kICkge1xuICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoJHJlZF9zdGFydCwgJGdyZWVuX3N0YXJ0LCAkYmx1ZV9zdGFydCwgJG9wYWNpdHlfc3RhcnQpICRwb2ludF9zdGFydCwgcmdiYSgkcmVkX2VuZCwgJGdyZWVuX2VuZCwgJGJsdWVfZW5kLCAkb3BhY2l0eV9lbmQpICRwb2ludF9lbmQpO1xuICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKCRwb2ludF9zdGFydCwgcmdiYSgkcmVkX3N0YXJ0LCAkZ3JlZW5fc3RhcnQsICRibHVlX3N0YXJ0LCAkb3BhY2l0eV9zdGFydCkpLCBjb2xvci1zdG9wKCRwb2ludF9lbmQsIHJnYmEoJHJlZF9lbmQsICRncmVlbl9lbmQsICRibHVlX2VuZCwgJG9wYWNpdHlfZW5kKSkpO1xuICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoJHJlZF9zdGFydCwgJGdyZWVuX3N0YXJ0LCAkYmx1ZV9zdGFydCwgJG9wYWNpdHlfc3RhcnQpICRwb2ludF9zdGFydCwgcmdiYSgkcmVkX2VuZCwgJGdyZWVuX2VuZCwgJGJsdWVfZW5kLCAkb3BhY2l0eV9lbmQpICRwb2ludF9lbmQpO1xuICBiYWNrZ3JvdW5kOiAtby1saW5lYXItZ3JhZGllbnQodG9wLCByZ2JhKCRyZWRfc3RhcnQsICRncmVlbl9zdGFydCwgJGJsdWVfc3RhcnQsICRvcGFjaXR5X3N0YXJ0KSAkcG9pbnRfc3RhcnQsIHJnYmEoJHJlZF9lbmQsICRncmVlbl9lbmQsICRibHVlX2VuZCwgJG9wYWNpdHlfZW5kKSAkcG9pbnRfZW5kKTtcbiAgYmFja2dyb3VuZDogLW1zLWxpbmVhci1ncmFkaWVudCh0b3AsIHJnYmEoJHJlZF9zdGFydCwgJGdyZWVuX3N0YXJ0LCAkYmx1ZV9zdGFydCwgJG9wYWNpdHlfc3RhcnQpICRwb2ludF9zdGFydCwgcmdiYSgkcmVkX2VuZCwgJGdyZWVuX2VuZCwgJGJsdWVfZW5kLCAkb3BhY2l0eV9lbmQpICRwb2ludF9lbmQpO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCByZ2JhKCRyZWRfc3RhcnQsICRncmVlbl9zdGFydCwgJGJsdWVfc3RhcnQsICRvcGFjaXR5X3N0YXJ0KSAkcG9pbnRfc3RhcnQsIHJnYmEoJHJlZF9lbmQsICRncmVlbl9lbmQsICRibHVlX2VuZCwgJG9wYWNpdHlfZW5kKSAkcG9pbnRfZW5kKTtcbn1cblxuQG1peGluIGJveC1zaGFkb3coJHg6IDJweCwgJHk6IDJweCwgJGJsdXI6IDVweCwgJGJveC1zaGFkb3ctcmVkOiAyNTUsICRib3gtc2hhZG93LWdyZWVuOiAyNTUsICRib3gtc2hhZG93LWJsdWU6IDI1NSwgJGJveC1zaGFkb3ctb3BhY2l0eTogMC43NSwgJGluc2V0OiBcIlwiKSB7XG4gIEBpZiAoJGluc2V0ICE9IFwiXCIpIHtcbiAgICAtd2Via2l0LWJveC1zaGFkb3c6ICRpbnNldCAkeCAkeSAkYmx1ciByZ2JhKCRib3gtc2hhZG93LXJlZCwgJGJveC1zaGFkb3ctZ3JlZW4sICRib3gtc2hhZG93LWJsdWUsICRib3gtc2hhZG93LW9wYWNpdHkpO1xuICAgIC1tb3otYm94LXNoYWRvdzogJGluc2V0ICR4ICR5ICRibHVyIHJnYmEoJGJveC1zaGFkb3ctcmVkLCAkYm94LXNoYWRvdy1ncmVlbiwgJGJveC1zaGFkb3ctYmx1ZSwgJGJveC1zaGFkb3ctb3BhY2l0eSk7XG4gICAgYm94LXNoYWRvdzogJGluc2V0ICR4ICR5ICRibHVyIHJnYmEoJGJveC1zaGFkb3ctcmVkLCAkYm94LXNoYWRvdy1ncmVlbiwgJGJveC1zaGFkb3ctYmx1ZSwgJGJveC1zaGFkb3ctb3BhY2l0eSk7XG4gIH0gQGVsc2Uge1xuICAgIC13ZWJraXQtYm94LXNoYWRvdzogJHggJHkgJGJsdXIgcmdiYSgkYm94LXNoYWRvdy1yZWQsICRib3gtc2hhZG93LWdyZWVuLCAkYm94LXNoYWRvdy1ibHVlLCAkYm94LXNoYWRvdy1vcGFjaXR5KTtcbiAgICAtbW96LWJveC1zaGFkb3c6ICR4ICR5ICRibHVyIHJnYmEoJGJveC1zaGFkb3ctcmVkLCAkYm94LXNoYWRvdy1ncmVlbiwgJGJveC1zaGFkb3ctYmx1ZSwgJGJveC1zaGFkb3ctb3BhY2l0eSk7XG4gICAgYm94LXNoYWRvdzogJHggJHkgJGJsdXIgcmdiYSgkYm94LXNoYWRvdy1yZWQsICRib3gtc2hhZG93LWdyZWVuLCAkYm94LXNoYWRvdy1ibHVlLCAkYm94LXNoYWRvdy1vcGFjaXR5KTtcbiAgfVxufVxuXG4vL0FuaW1hdGlvblxuQG1peGluIHRyYW5zaXRpb24oJHRyYW5zaXRpb24tcHJvcGVydHksICR0cmFuc2l0aW9uLXRpbWUsICRtZXRob2QpIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiAkdHJhbnNpdGlvbi1wcm9wZXJ0eSAkdHJhbnNpdGlvbi10aW1lICRtZXRob2Q7XG4gIC1tb3otdHJhbnNpdGlvbjogJHRyYW5zaXRpb24tcHJvcGVydHkgJHRyYW5zaXRpb24tdGltZSAkbWV0aG9kO1xuICAtbXMtdHJhbnNpdGlvbjogJHRyYW5zaXRpb24tcHJvcGVydHkgJHRyYW5zaXRpb24tdGltZSAkbWV0aG9kO1xuICAtby10cmFuc2l0aW9uOiAkdHJhbnNpdGlvbi1wcm9wZXJ0eSAkdHJhbnNpdGlvbi10aW1lICRtZXRob2Q7XG4gIHRyYW5zaXRpb246ICR0cmFuc2l0aW9uLXByb3BlcnR5ICR0cmFuc2l0aW9uLXRpbWUgJG1ldGhvZDtcbn1cblxuQG1peGluIHRyYW5zZm9ybSgkdHJhbnNmb3Jtcykge1xuICAtd2Via2l0LXRyYW5zZm9ybTogJHRyYW5zZm9ybXM7XG4gIC1tb3otdHJhbnNmb3JtOiAkdHJhbnNmb3JtcztcbiAgLW1zLXRyYW5zZm9ybTogJHRyYW5zZm9ybXM7XG4gIC1vLXRyYW5zZm9ybTogJHRyYW5zZm9ybXM7XG4gIHRyYW5zZm9ybTogJHRyYW5zZm9ybXM7XG59XG5cbkBtaXhpbiBhbmltYXRpb24oJHN0cikge1xuICAtd2Via2l0LWFuaW1hdGlvbjogI3skc3RyfTtcbiAgLW1vei1hbmltYXRpb246ICN7JHN0cn07XG4gIC1tcy1hbmltYXRpb246ICN7JHN0cn07XG4gIC1vLWFuaW1hdGlvbjogI3skc3RyfTtcbiAgYW5pbWF0aW9uOiAjeyRzdHJ9O1xufVxuXG5AbWl4aW4gdHJhbnNsYXRlM2QoJHgsICR5LCAkeikge1xuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoJHgsICR5LCAkeik7XG4gIC1tb3otdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgkeCwgJHksICR6KTtcbiAgLW1zLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoJHgsICR5LCAkeik7XG4gIC1vLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoJHgsICR5LCAkeik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoJHgsICR5LCAkeik7XG59XG5cbkBtaXhpbiBrZXlmcmFtZXMoJGFuaW1hdGlvbi1uYW1lKSB7XG4gIEAtd2Via2l0LWtleWZyYW1lcyAjeyRhbmltYXRpb24tbmFtZX0ge1xuICAgIEBjb250ZW50O1xuICB9XG4gIEAtbW96LWtleWZyYW1lcyAjeyRhbmltYXRpb24tbmFtZX0ge1xuICAgIEBjb250ZW50O1xuICB9XG4gIEAtbXMta2V5ZnJhbWVzICN7JGFuaW1hdGlvbi1uYW1lfSB7XG4gICAgQGNvbnRlbnQ7XG4gIH1cbiAgQC1vLWtleWZyYW1lcyAjeyRhbmltYXRpb24tbmFtZX0ge1xuICAgIEBjb250ZW50O1xuICB9XG4gIEBrZXlmcmFtZXMgI3skYW5pbWF0aW9uLW5hbWV9IHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG4vLyBWaWV3cG9ydFxuQG1peGluIGJwLXdpZGUge1xuICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDkwZW0pIHsgLy8xNDQwcHhcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gYnAtZnVsbCB7XG4gIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzcuNWVtKSB7IC8vMTI0MHB4XG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cblxuQG1peGluIGJwLWxhcmdlIHtcbiAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2NGVtKSB7IC8vMTAyNHB4IFxuICAgIEBjb250ZW50O1xuICB9XG59XG5cbkBtaXhpbiBicC1tZWRpdW0ge1xuICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ4ZW0pIHsgLy83NjhweCBcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gYnAtc21hbGwge1xuICBAbWVkaWEgb25seSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDMwZW0pIHsgLy80ODBweCBcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5AbWl4aW4gYnAtbWluaSB7XG4gIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMjIuNWVtKSB7IC8vMzYwcHggXG4gICAgQGNvbnRlbnQ7XG4gIH1cbn1cbiIsIi8vIFN0cnVjdHVyZVxuaHRtbCB7XG4gIGZvbnQtc2l6ZTogNjIuNSU7XG4gIC8vIGZvbnQtc2l6ZTogMTZweDtcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAtbXMtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICBmb250LWZhbWlseTogJ1JvYm90bydcbn1cblxuLy8gRm9udFxuQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Sb2JvdG86MzAwLDQwMCw1MDAnKTtcbiRmb250X19ib2R5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjtcblxuLy8gc2tlbGV0b25cbiN3cmFwIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIEBleHRlbmQgLnJvdy1mO1xufVxuXG4ucm93LWYge1xuICBAaW5jbHVkZSBjb250YWluZXIoMTAwJSk7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xufVxuXG4uaW5uZXIge1xuICBAaW5jbHVkZSBjb250YWluZXIoMTAyNHB4KTtcbiAgJi5zcGFjZSB7XG4gICAgcGFkZGluZy1sZWZ0OiBndXR0ZXIoKTtcbiAgICBwYWRkaW5nLXJpZ2h0OiBndXR0ZXIoKTtcbiAgICBAaW5jbHVkZSBicC1tZWRpdW0ge1xuICAgICAgcGFkZGluZy1sZWZ0OiBndXR0ZXIoKSozO1xuICAgICAgcGFkZGluZy1yaWdodDogZ3V0dGVyKCkqMztcbiAgICB9XG4gIH1cbn1cblxuLnByb2ZpbGF0aW9uX19jb250YWluZXIge1xuICBAaW5jbHVkZSBicC1sYXJnZSB7XG4gICAgQGluY2x1ZGUgY29udGFpbmVyKDg5NnB4KTtcbiAgICBwYWRkaW5nLWxlZnQ6IGd1dHRlcigpKjg7XG4gICAgcGFkZGluZy1yaWdodDogZ3V0dGVyKCkqODtcbiAgfVxuICBAaW5jbHVkZSBjb250YWluZXIoMTM2MHB4KTtcbiAgcGFkZGluZy1sZWZ0OiBndXR0ZXIoKSozO1xuICBwYWRkaW5nLXJpZ2h0OiBndXR0ZXIoKSozO1xuICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjAwcHgpO1xufVxuXG4uYmlnQ29udGFpbmVyIHtcbiAgQGluY2x1ZGUgY29udGFpbmVyKDEzNjBweCk7XG4gIEBpbmNsdWRlIGNsZWFyZml4O1xuXG4gIGhlaWdodDogOTZweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG4gIHBhZGRpbmctbGVmdDogZ3V0dGVyKCkqMztcbiAgcGFkZGluZy1yaWdodDogZ3V0dGVyKCkqMztcbiAgJi5zcGFjZSB7XG4gICAgcGFkZGluZy1sZWZ0OiBndXR0ZXIoKTtcbiAgICBwYWRkaW5nLXJpZ2h0OiBndXR0ZXIoKTtcbiAgICBAaW5jbHVkZSBicC1tZWRpdW0ge1xuICAgICAgcGFkZGluZy1sZWZ0OiBndXR0ZXIoKSozO1xuICAgICAgcGFkZGluZy1yaWdodDogZ3V0dGVyKCkqMztcbiAgICB9XG4gIH1cbn1cblxuLmluc2lkZSB7XG4gIEBpbmNsdWRlIGNvbnRhaW5lcig2NDBweCk7XG4gIHBhZGRpbmctbGVmdDogZ3V0dGVyKCk7XG4gIHBhZGRpbmctcmlnaHQ6IGd1dHRlcigpO1xuICBAaW5jbHVkZSBicC1tZWRpdW0ge1xuICAgIHBhZGRpbmctbGVmdDogZ3V0dGVyKCkqMztcbiAgICBwYWRkaW5nLXJpZ2h0OiBndXR0ZXIoKSozO1xuICB9XG59XG5cbi8vIEFuaW1hdGlvblxuLmFuaW1hIHtcbiAgQGluY2x1ZGUgdHJhbnNpdGlvbihhbGwsIDAuMnMsIGVhc2UtaW4pO1xufVxuIiwiLy8gQ29sdW1zXG4uY29sLWwxIHtcbiAgQGluY2x1ZGUgc3BhbigxKTtcbn1cblxuLmNvbC1sMiB7XG4gIEBpbmNsdWRlIHNwYW4oMik7XG59XG5cbi5jb2wtbDMge1xuICBAaW5jbHVkZSBzcGFuKDMpO1xufVxuXG4uY29sLWw0IHtcbiAgQGluY2x1ZGUgc3Bhbig0KTtcbn1cblxuLmNvbC1sNSB7XG4gIEBpbmNsdWRlIHNwYW4oNSk7XG59XG5cbi5jb2wtbDYge1xuICBAaW5jbHVkZSBzcGFuKDYpO1xufVxuXG4uY29sLWw3IHtcbiAgQGluY2x1ZGUgc3Bhbig3KTtcbn1cblxuLmNvbC1sOCB7XG4gIEBpbmNsdWRlIHNwYW4oOCk7XG59XG5cbi5jb2wtbDkge1xuICBAaW5jbHVkZSBzcGFuKDkpO1xufVxuXG4uY29sLWwxMCB7XG4gIEBpbmNsdWRlIHNwYW4oMTApO1xufVxuXG4uY29sLWwxMSB7XG4gIEBpbmNsdWRlIHNwYW4oMTEpO1xufVxuXG4uY29sLWwxMiB7XG4gIEBpbmNsdWRlIHNwYW4oMTIpO1xufVxuXG4uY29sLXIxIHtcbiAgQGluY2x1ZGUgc3BhbihsYXN0IDEpO1xufVxuXG4uY29sLXIyIHtcbiAgQGluY2x1ZGUgc3BhbihsYXN0IDIpO1xufVxuXG4uY29sLXIzIHtcbiAgQGluY2x1ZGUgc3BhbihsYXN0IDMpO1xufVxuXG4uY29sLXI0IHtcbiAgQGluY2x1ZGUgc3BhbihsYXN0IDQpO1xufVxuXG4uY29sLXI1IHtcbiAgQGluY2x1ZGUgc3BhbihsYXN0IDUpO1xufVxuXG4uY29sLXI2IHtcbiAgQGluY2x1ZGUgc3BhbihsYXN0IDYpO1xufVxuXG4uY29sLXI3IHtcbiAgQGluY2x1ZGUgc3BhbihsYXN0IDcpO1xufVxuXG4uY29sLXI4IHtcbiAgQGluY2x1ZGUgc3BhbihsYXN0IDgpO1xufVxuXG4uY29sLXI5IHtcbiAgQGluY2x1ZGUgc3BhbihsYXN0IDkpO1xufVxuXG4uY29sLXIxMCB7XG4gIEBpbmNsdWRlIHNwYW4obGFzdCAxMCk7XG59XG5cbi5jb2wtcjExIHtcbiAgQGluY2x1ZGUgc3BhbihsYXN0IDExKTtcbn1cblxuLmNvbC1yMTIge1xuICBAaW5jbHVkZSBzcGFuKGxhc3QgMTIpO1xufSIsIi8vIEhlYWRlclxuaGVhZGVyIHtcbiAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgYm9yZGVyLWJvdHRvbTogOHB4IHNvbGlkICNBMEFDMTI7XG4gIEBleHRlbmQgLnJvdy1mO1xuICAubG9nbyB7XG4gICAgQGV4dGVuZCAuY29sLWw2O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cbiAgbmF2Lm1haW4tbmF2aSB7XG4gICAgQGV4dGVuZCAuY29sLXI2O1xuICB9XG59XG5cbi5oZWFkZXItLXBheW9mZiB7XG4gIGZvbnQtc2l6ZTogMS40cmVtO1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICM1QTU4NUE7XG4gIHBhZGRpbmc6IDE0cHggMTBweDtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XG4gIGNvbG9yOiAjNUE1ODVBO1xuICBsaW5lLWhlaWdodDogMS4yZW07XG4gIGRpc3BsYXk6IG5vbmU7XG4gIEBpbmNsdWRlIGJwLWxhcmdlIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufSIsIi8vIEJvZHlcbmJvZHkge1xuICBiYWNrZ3JvdW5kOiAjRTRFREY0O1xufVxuXG5zZWN0aW9uLm1haW4ge1xuICBAZXh0ZW5kIC5yb3ctZjtcbiAgLmZ1bGwge1xuICAgIEBleHRlbmQgLmNvbC1sMTI7XG4gIH1cbiAgLm1pZGRsZSB7XG4gICAgQGV4dGVuZCAuY29sLWw2O1xuICB9XG4gIC5ib3gge1xuICAgIEBleHRlbmQgLmNvbC1sNDtcbiAgfVxufSIsIi8vRm9vdGVyXG5mb290ZXIge1xuICBAZXh0ZW5kIC5yb3ctZjtcbiAgLmZvb3Rlci0td3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogIzVBNTg1QTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIEBpbmNsdWRlIGJwLW1lZGl1bSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIHBhZGRpbmctbGVmdDogZ3V0dGVyKCkqMztcbiAgICAgIHBhZGRpbmctcmlnaHQ6IGd1dHRlcigpKjM7XG4gICAgfVxuICB9XG59XG5cbi5mb290ZXItLWxvZ28ge1xuICBAaW5jbHVkZSByZW0oJ21hcmdpbicsIDM1LCAwLCAzNSwgMCk7XG59XG5cbi5mb290ZXItLWluZm8ge1xuICBAaW5jbHVkZSByZW0oJ21hcmdpbicsIDAsIDAsIDM1LCAwKTtcbiAgY29sb3I6IHdoaXRlO1xuICBAaW5jbHVkZSBicC1tZWRpdW0ge1xuICAgIG1hcmdpbi10b3A6IDMuNXJlbTtcbiAgfVxuICBwIHtcbiAgICBmb250LXNpemU6IDEuNHJlbTtcbiAgICBsaW5lLWhlaWdodDogMS42ZW07XG4gICAgZm9udC1mYW1pbHk6ICd0aGVtaXgnLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtd2VpZ2h0OiBsaWdodGVyO1xuICB9XG59XG4iLCIucHJvZmlsYXRpb24ge1xuICBwIHtcbiAgICBmb250LXNpemU6IDIuNHJlbTtcbiAgICBjb2xvcjogIzVBNTg1QTtcbiAgICBmb250LWZhbWlseTogJ3RoZW1peCcsIHNhbnMtc2VyaWY7XG4gICAgbGluZS1oZWlnaHQ6IDEuN2VtO1xuICAgIGZvbnQtd2VpZ2h0OiBsaWdodGVyO1xuICAgICYucHJvZmlsYXRpb25fX2ludHJvIHtcbiAgICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNmVtO1xuICAgICAgQGluY2x1ZGUgcmVtKCdtYXJnaW4nLCAxNzAsIDAsIDQ1LCAwKTtcbiAgICB9XG4gICAgQGluY2x1ZGUgYnAtbGFyZ2Uge1xuICAgICAgZm9udC1zaXplOiAzLjJyZW07XG4gICAgICBsaW5lLWhlaWdodDogMS42ZW07XG4gICAgICAmLnByb2ZpbGF0aW9uX19pbnRybyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMS44cmVtO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4ucHJvZmlsYXRpb24tLXdyYXBwZXIge1xuXG4gIEBpbmNsdWRlIGJwLW1lZGl1bSB7XG4gICAgbWF4LXdpZHRoOiA4MCU7XG4gIH1cbn1cblxuLnByb2ZpbGF0aW9uLS1zdGVwIHtcbiAgbWFyZ2luLWJvdHRvbTogN2VtO1xufVxuXG5wLnByb2ZpbGF0aW9uLS1hZHZpY2Uge1xuICBmb250LXNpemU6IDEuNGVtO1xuICBsaW5lLWhlaWdodDogMS43ZW07XG4gIG1hcmdpbi10b3A6IDMwcHg7XG4gIEBpbmNsdWRlIHJlbSgnbWFyZ2luJywgMzAsIDAsIDAsIDApO1xufVxuXG4jc2hvdy1tb2RhbCB7XG4gIGZvbnQtc2l6ZTogMS40ZW07XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgbGluZS1oZWlnaHQ6IDEuN2VtO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgQGluY2x1ZGUgcmVtKCdtYXJnaW4nLCAxMywgMCwgMCwgMTcpO1xufVxuXG4ucHJvZmlsYXRpb24tLWVycm9yIHtcbiAgcCB7XG4gICAgZm9udC1zaXplOiAxLjZyZW07XG4gICAgY29sb3I6ICNGRjQ2M0M7XG4gICAgQGluY2x1ZGUgcmVtKCdtYXJnaW4nLCA1MCwgMCwgMCwgMCk7XG4gIH1cbn1cblxuLnByb2ZpbGF0aW9uLS1zdGVwX19vbmUsXG4ucHJvZmlsYXRpb24tLXN0ZXBfX3R3byxcbi5wcm9maWxhdGlvbi0tc3RlcF9fdGhyZWUsXG4ucHJvZmlsYXRpb24tLXN0ZXBfX2ZvdXIsXG4ucHJvZmlsYXRpb24tLXN0ZXBfX2ZpdmUge1xuICAmLmNvbXBsZXRlIHtcbiAgICBvcGFjaXR5OiAuNTtcbiAgfVxufVxuXG4ucHJvZmlsYXRpb24tLXN0ZXAge1xuICAmOmhvdmVyLFxuICAmOmZvY3VzIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbi5zbGlkZS1sZWF2ZS1hY3RpdmUsXG4uc2xpZGUtZW50ZXItYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogLjVzO1xufVxuXG4uc2xpZGUtZW50ZXIge1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgwLCAxMDAlKTtcbn1cblxuLnNsaWRlLWxlYXZlLXRvIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoMCwgLTEwMCUpO1xufVxuXG4uZmllbGQuZXJyb3Ige1xuICBpbnB1dCB7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM5RjNBMzg7XG4gIH1cbn1cbiIsImJ1dHRvbiB7XG4gIGJveC1zaGFkb3c6IDAgNHB4IDhweCAwIHJnYmEoMCwgMCwgMCwgMC4xNSk7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgZm9udC1zaXplOiAxLjRyZW07XG4gIGhlaWdodDogNDBweDtcbiAgcGFkZGluZzogMCA0cmVtO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGNvbG9yOiB3aGl0ZTtcbiAgJi5pc19fZXJyb3Ige1xuICAgIGJhY2tncm91bmQ6ICNGRjQ2M0M7XG4gICAgQGluY2x1ZGUgcmVtKCdtYXJnaW4nLCAzMCwgMCwgMCwgMCk7XG5cbiAgfVxuICAmLmJ0bl9fZ3JheSB7XG4gICAgYmFja2dyb3VuZDogI0EzQTFBMjtcbiAgfVxufVxuXG4iLCIubW9kYWwtbWFzayB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgei1pbmRleDogOTk5ODtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIC41KTtcbiAgZGlzcGxheTogdGFibGU7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgLjNzIGVhc2U7XG59XG5cbi5tb2RhbC13cmFwcGVyIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLm1vZGFsLWZsZXgge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uY2xvc2VfbW9kYWwge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAtNTBweDtcbiAgdG9wOiAwO1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5tb2RhbC1jb250YWluZXIge1xuICB3aWR0aDogMzAwcHg7XG4gIG1hcmdpbjogMHB4IGF1dG87XG4gIHBhZGRpbmc6IDQwcHggNzVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAuMzMpO1xuICB0cmFuc2l0aW9uOiBhbGwgLjNzIGVhc2U7XG4gIGhlaWdodDogMzcwcHg7XG4gIHdpZHRoOiA1NTBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ubW9kYWwtaGVhZGVyIGgzIHtcbiAgbWFyZ2luLXRvcDogMDtcbiAgY29sb3I6ICM1QTU4NUE7XG4gIGZvbnQtc2l6ZTogMi40cmVtO1xufVxuXG4ud2FwcGVyLWlucHV0X19tb2RhbGVQcml2YWN5IHtcbiAgQGluY2x1ZGUgcmVtKCdtYXJnaW4nLCAwLCAwLCAyNSwgMCk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIC51bmRlcmxpbmUge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG59XG5cbi5tb2RhbC1ib2R5IHtcbiAgbWFyZ2luOiAyMHB4IDA7XG4gIHAge1xuICAgIGZvbnQtc2l6ZTogMS42cmVtO1xuICAgIEBpbmNsdWRlIHJlbSgnbWFyZ2luJywgMCwgMCwgMzUsIDApO1xuICB9XG4gIGxhYmVsIHtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICB9XG4gIGlucHV0IHtcbiAgICBoZWlnaHQ6IDU4cHg7XG4gICAgd2lkdGg6IDkwJTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjREVERURFO1xuICAgIHBhZGRpbmctbGVmdDogMTBweDtcbiAgICBAaW5jbHVkZSByZW0oJ21hcmdpbicsIDE1LCAwLCAwLCAwKTtcbiAgfVxufVxuXG4ubW9kYWwtZGVmYXVsdC1idXR0b24ge1xuICBmbG9hdDogcmlnaHQ7XG59XG5cbi8qXG4gKiBUaGUgZm9sbG93aW5nIHN0eWxlcyBhcmUgYXV0by1hcHBsaWVkIHRvIGVsZW1lbnRzIHdpdGhcbiAqIHRyYW5zaXRpb249XCJtb2RhbFwiIHdoZW4gdGhlaXIgdmlzaWJpbGl0eSBpcyB0b2dnbGVkXG4gKiBieSBWdWUuanMuXG4gKlxuICogWW91IGNhbiBlYXNpbHkgcGxheSB3aXRoIHRoZSBtb2RhbCB0cmFuc2l0aW9uIGJ5IGVkaXRpbmdcbiAqIHRoZXNlIHN0eWxlcy5cbiAqL1xuXG4ubW9kYWwtZW50ZXIge1xuICBvcGFjaXR5OiAwO1xufVxuXG4ubW9kYWwtbGVhdmUtYWN0aXZlIHtcbiAgb3BhY2l0eTogMDtcbn1cblxuLm1vZGFsLWVudGVyIC5tb2RhbC1jb250YWluZXIsXG4ubW9kYWwtbGVhdmUtYWN0aXZlIC5tb2RhbC1jb250YWluZXIge1xuICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbiAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpO1xufVxuIiwiQGltcG9ydCBcIm1peGluXCI7XG5cbi5wcm9maWxhdGlvbiB7XG4gIC52LXNlbGVjdCB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDZweCk7XG4gICAgLm9wZW4taW5kaWNhdG9yIHtcbiAgICAgIGxlZnQ6IDUwJTtcbiAgICAgIGJvdHRvbTogLTIxcHg7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEzcHgpO1xuICAgICAgJjpiZWZvcmUge1xuICAgICAgICBib3JkZXItY29sb3I6IG5vbmU7XG4gICAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLy4uL2ltZy9mcmVjY2lhLnN2Zyk7XG4gICAgICAgIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAwO1xuICAgICAgICB0cmFuc2Zvcm06IG5vbmU7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgaW5wdXQge1xuICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICAmLnNob3dJbnB1dCB7XG4gICAgICBpbnB1dCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgY29sb3I6ICM1QTU4NUE7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBmb250LXNpemU6IDIuNHJlbTtcbiAgICAgICAgQGluY2x1ZGUgYnAtbGFyZ2Uge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMy4ycmVtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC5kcm9wZG93bi10b2dnbGUge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNUE1ODVBO1xuICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgIG1pbi13aWR0aDogNzBweDtcbiAgICAgIGhlaWdodDogNDBweDtcbiAgICAgIEBpbmNsdWRlIHJlbSgnbWFyZ2luJywgMCwgMjAsIDAsIDApO1xuICAgICAgJjo6Zm9jdXMge1xuICAgICAgICBvdXRsaW5lOiBub25lO1xuICAgICAgfVxuICAgICAgLnNlbGVjdGVkLXRhZyB7XG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgY29sb3I6ICM1QTU4NUE7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAndGhlbWl4Jywgc2Fucy1zZXJpZjtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDIuMWVtO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBAaW5jbHVkZSByZW0oJ21hcmdpbicsIDAsIDAsIDEzLCAwKTtcbiAgICAgICAgZm9udC1zaXplOiAyLjRyZW07XG4gICAgICAgIEBpbmNsdWRlIGJwLWxhcmdlIHtcbiAgICAgICAgICBmb250LXNpemU6IDMuMnJlbTtcbiAgICAgICAgICBsaW5lLWhlaWdodDogMS41ZW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaW5wdXQge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNUE1ODVBO1xuICAgIGZvbnQtc2l6ZTogMi40cmVtO1xuICAgIGNvbG9yOiAjNUE1ODVBO1xuICAgIHdpZHRoOiAxMTBweDtcbiAgICBAaW5jbHVkZSBicC1sYXJnZSB7XG4gICAgICBmb250LXNpemU6IDMuMnJlbTtcbiAgICB9XG4gICAgJjo6Zm9jdXMge1xuICAgICAgb3V0bGluZTogbm9uZTtcbiAgICB9XG4gIH1cbiAgLndyYXBwZXItc2VsZWN0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbi1yaWdodDogLjVlbTtcbiAgICAgIHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC52LXNlbGVjdCAuZHJvcGRvd24tbWVudSA+IC5oaWdobGlnaHQgPiBhIHtcbiAgICBiYWNrZ3JvdW5kOiAjRkJGQkZCO1xuICAgIGNvbG9yOiAjMzMzO1xuICB9XG59XG5cbi52LXNlbGVjdC5kcm9wZG93bi5vcGVuIC5kcm9wZG93bi1tZW51IHtcbiAgcG9zaXRpb246IGFic29sdXRlICFpbXBvcnRhbnQ7XG4gIHRvcDogMDtcbiAgbWluLXdpZHRoOiAxNjBweDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBiYWNrZ3JvdW5kOiAjRkZGRkZGO1xuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjEwKTtcbiAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgYm9yZGVyLWNvbG9yOiBub25lO1xuICBwYWRkaW5nOiAxMHB4O1xuICB6LWluZGV4OiA5OTk5OTk5OTk5OTk5O1xufVxuXG4udi1zZWxlY3QgLnNlbGVjdGVkLXRhZyB7XG4gIGNvbG9yOiAjMDA3QUZGO1xufVxuXG4udi1zZWxlY3QuZHJvcGRvd24ub3BlbiAuZHJvcGRvd24tdG9nZ2xlLFxuLnYtc2VsZWN0LmRyb3Bkb3duLm9wZW4gLmRyb3Bkb3duLW1lbnUge1xuXG59XG5cbi52LXNlbGVjdCBhIHtcbiAgY29sb3I6ICM0MDQwNDA7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQ0VDRUQyO1xuICBmb250LXNpemU6IDEuN3JlbTtcblxufVxuXG4udi1zZWxlY3QgLmFjdGl2ZSBhIHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgY29sb3I6ICMwMDdBRkY7XG59XG5cbi52LXNlbGVjdC5kcm9wZG93biAuaGlnaGxpZ2h0IGEsXG4udi1zZWxlY3QuZHJvcGRvd24gbGk6aG92ZXIgYSB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMDA3QUZGO1xuICBjb2xvcjogIzAwN0FGRjtcbiAgYmFja2dyb3VuZDogbm9uZTtcbn1cblxuIl0sIm1hcHBpbmdzIjoiQStDV0EsT0FBTyxDQUFDLGlFQUFJO0E5Q1ZWLEFBQUEsSUFBSSxFQUFFLEFBQUEsSUFBSSxFQUFFLEFBQUEsR0FBRyxFQUFFLEFBQUEsSUFBSSxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsQ0FBQyxFQUFFLEFBQUEsVUFBVSxFQUFFLEFBQUEsR0FBRyxFQUFFLEFBQUEsQ0FBQyxFQUFFLEFBQUEsSUFBSSxFQUFFLEFBQUEsT0FBTyxFQUFFLEFBQUEsT0FBTyxFQUFFLEFBQUEsR0FBRyxFQUFFLEFBQUEsSUFBSSxFQUFFLEFBQUEsSUFBSSxFQUFFLEFBQUEsR0FBRyxFQUFFLEFBQUEsR0FBRyxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsR0FBRyxFQUFFLEFBQUEsR0FBRyxFQUFFLEFBQUEsR0FBRyxFQUFFLEFBQUEsQ0FBQyxFQUFFLEFBQUEsQ0FBQyxFQUFFLEFBQUEsSUFBSSxFQUFFLEFBQUEsS0FBSyxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsR0FBRyxFQUFFLEFBQUEsR0FBRyxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsR0FBRyxFQUFFLEFBQUEsQ0FBQyxFQUFFLEFBQUEsQ0FBQyxFQUFFLEFBQUEsQ0FBQyxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsUUFBUSxFQUFFLEFBQUEsSUFBSSxFQUFFLEFBQUEsS0FBSyxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsS0FBSyxFQUFFLEFBQUEsT0FBTyxFQUFFLEFBQUEsS0FBSyxFQUFFLEFBQUEsS0FBSyxFQUFFLEFBQUEsS0FBSyxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsRUFBRSxFQUFFLEFBQUEsT0FBTyxFQUFFLEFBQUEsS0FBSyxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsT0FBTyxFQUFFLEFBQUEsS0FBSyxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsVUFBVSxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsSUFBSSxFQUFFLEFBQUEsR0FBRyxFQUFFLEFBQUEsTUFBTSxFQUFFLEFBQUEsSUFBSSxFQUFFLEFBQUEsT0FBTyxFQUFFLEFBQUEsT0FBTyxFQUFFLEFBQUEsSUFBSSxFQUFFLEFBQUEsSUFBSSxFQUFFLEFBQUEsS0FBSyxFQUFFLEFBQUEsS0FBSyxDQUFDO0VBQ3plLE1BQU0sRUFBRSxDQUFFO0VBQ1YsT0FBTyxFQUFFLENBQUU7RUFDWCxNQUFNLEVBQUUsQ0FBRTtFQUNWLFNBQVMsRUFBRSxJQUFLO0VBQ2hCLElBQUksRUFBRSxPQUFRO0VBQ2QsY0FBYyxFQUFFLFFBQVMsR0FDMUI7O0FBRUQsQUFBQSxPQUFPLEVBQUUsQUFBQSxLQUFLLEVBQUUsQUFBQSxPQUFPLEVBQUUsQUFBQSxVQUFVLEVBQUUsQUFBQSxNQUFNLEVBQUUsQUFBQSxNQUFNLEVBQUUsQUFBQSxNQUFNLEVBQUUsQUFBQSxNQUFNLEVBQUUsQUFBQSxJQUFJLEVBQUUs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 */