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
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
|
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Session Export</title>
<style>
:root {
--accent: #8abeb7;
--border: #5f87ff;
--borderAccent: #00d7ff;
--borderMuted: #505050;
--success: #b5bd68;
--error: #cc6666;
--warning: #ffff00;
--muted: #808080;
--dim: #666666;
--text: #d4d4d4;
--thinkingText: #808080;
--selectedBg: #3a3a4a;
--userMessageBg: #343541;
--userMessageText: #d4d4d4;
--customMessageBg: #2d2838;
--customMessageText: #d4d4d4;
--customMessageLabel: #9575cd;
--toolPendingBg: #282832;
--toolSuccessBg: #283228;
--toolErrorBg: #3c2828;
--toolTitle: #d4d4d4;
--toolOutput: #808080;
--mdHeading: #f0c674;
--mdLink: #81a2be;
--mdLinkUrl: #666666;
--mdCode: #8abeb7;
--mdCodeBlock: #b5bd68;
--mdCodeBlockBorder: #808080;
--mdQuote: #808080;
--mdQuoteBorder: #808080;
--mdHr: #808080;
--mdListBullet: #8abeb7;
--toolDiffAdded: #b5bd68;
--toolDiffRemoved: #cc6666;
--toolDiffContext: #808080;
--syntaxComment: #6A9955;
--syntaxKeyword: #569CD6;
--syntaxFunction: #DCDCAA;
--syntaxVariable: #9CDCFE;
--syntaxString: #CE9178;
--syntaxNumber: #B5CEA8;
--syntaxType: #4EC9B0;
--syntaxOperator: #D4D4D4;
--syntaxPunctuation: #D4D4D4;
--thinkingOff: #505050;
--thinkingMinimal: #6e6e6e;
--thinkingLow: #5f87af;
--thinkingMedium: #81a2be;
--thinkingHigh: #b294bb;
--thinkingXhigh: #d183e8;
--thinkingMax: #ff5fff;
--bashMode: #b5bd68;
--exportPageBg: #18181e;
--exportCardBg: #1e1e24;
--exportInfoBg: #3c3728;
--body-bg: #18181e;
--container-bg: #1e1e24;
--info-bg: #3c3728;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
:root {
--line-height: 18px; /* 12px font * 1.5 */
--sidebar-width: 400px;
--sidebar-min-width: 240px;
--sidebar-max-width: 840px;
--sidebar-resizer-width: 6px;
}
body {
font-family: ui-monospace, 'Cascadia Code', 'Source Code Pro', Menlo, Consolas, 'DejaVu Sans Mono', monospace;
font-size: 12px;
line-height: var(--line-height);
color: var(--text);
background: var(--body-bg);
}
body.sidebar-resizing {
cursor: col-resize;
user-select: none;
}
#app {
display: flex;
min-height: 100vh;
}
/* Sidebar */
#sidebar {
width: var(--sidebar-width);
min-width: var(--sidebar-width);
max-width: var(--sidebar-width);
background: var(--container-bg);
flex-shrink: 0;
display: flex;
flex-direction: column;
position: sticky;
top: 0;
height: 100vh;
border-right: 1px solid var(--dim);
}
#sidebar-resizer {
width: var(--sidebar-resizer-width);
flex-shrink: 0;
position: sticky;
top: 0;
height: 100vh;
cursor: col-resize;
touch-action: none;
background: transparent;
border-right: 1px solid transparent;
}
#sidebar-resizer:hover,
body.sidebar-resizing #sidebar-resizer {
background: var(--selectedBg);
border-right-color: var(--dim);
}
.sidebar-header {
padding: 8px 12px;
flex-shrink: 0;
}
.sidebar-controls {
padding: 8px 8px 4px 8px;
}
.sidebar-search {
width: 100%;
box-sizing: border-box;
padding: 4px 8px;
font-size: 11px;
font-family: inherit;
background: var(--body-bg);
color: var(--text);
border: 1px solid var(--dim);
border-radius: 3px;
}
.sidebar-filters {
display: flex;
padding: 4px 8px 8px 8px;
gap: 4px;
align-items: center;
flex-wrap: wrap;
}
.sidebar-search:focus {
outline: none;
border-color: var(--accent);
}
.sidebar-search::placeholder {
color: var(--muted);
}
.filter-btn {
padding: 3px 8px;
font-size: 10px;
font-family: inherit;
background: transparent;
color: var(--muted);
border: 1px solid var(--dim);
border-radius: 3px;
cursor: pointer;
}
.filter-btn:hover {
color: var(--text);
border-color: var(--text);
}
.filter-btn.active {
background: var(--accent);
color: var(--body-bg);
border-color: var(--accent);
}
.sidebar-close {
display: none;
padding: 3px 8px;
font-size: 12px;
font-family: inherit;
background: transparent;
color: var(--muted);
border: 1px solid var(--dim);
border-radius: 3px;
cursor: pointer;
margin-left: auto;
}
.sidebar-close:hover {
color: var(--text);
border-color: var(--text);
}
.tree-container {
flex: 1;
overflow: auto;
padding: 4px 0;
}
.tree-node {
padding: 0 8px;
cursor: pointer;
display: flex;
align-items: baseline;
font-size: 11px;
line-height: 13px;
white-space: nowrap;
}
.tree-node:hover {
background: var(--selectedBg);
}
.tree-node.active {
background: var(--selectedBg);
}
.tree-node.active .tree-content {
font-weight: bold;
}
.tree-node.in-path {
background: color-mix(in srgb, var(--accent) 10%, transparent);
}
.tree-node:not(.in-path) {
opacity: 0.5;
}
.tree-node:not(.in-path):hover {
opacity: 1;
}
.tree-prefix {
color: var(--muted);
flex-shrink: 0;
font-family: monospace;
white-space: pre;
}
.tree-marker {
color: var(--accent);
flex-shrink: 0;
}
.tree-content {
color: var(--text);
}
.tree-role-user {
color: var(--accent);
}
.tree-role-skill {
color: var(--customMessageLabel);
}
.tree-role-assistant {
color: var(--success);
}
.tree-role-tool {
color: var(--muted);
}
.tree-muted {
color: var(--muted);
}
.tree-error {
color: var(--error);
}
.tree-compaction {
color: var(--borderAccent);
}
.tree-branch-summary {
color: var(--warning);
}
.tree-custom-message {
color: var(--customMessageLabel);
}
.tree-status {
padding: 4px 12px;
font-size: 10px;
color: var(--muted);
flex-shrink: 0;
}
/* Main content */
#content {
flex: 1;
min-width: 0;
overflow-y: auto;
padding: var(--line-height) calc(var(--line-height) * 2);
display: flex;
flex-direction: column;
align-items: center;
}
#content > * {
width: 100%;
max-width: 800px;
}
/* Help bar */
.help-bar {
font-size: 11px;
color: var(--warning);
margin-bottom: var(--line-height);
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 12px;
}
.help-hint {
flex: 1 1 240px;
}
.help-actions {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 8px;
}
.header-toggle-btn,
.download-json-btn {
font-size: 10px;
padding: 2px 8px;
background: var(--container-bg);
border: 1px solid var(--border);
border-radius: 3px;
color: var(--text);
cursor: pointer;
font-family: inherit;
}
.header-toggle-btn:hover,
.download-json-btn:hover {
background: var(--hover);
border-color: var(--borderAccent);
}
/* Header */
.header {
background: var(--container-bg);
border-radius: 4px;
padding: var(--line-height);
margin-bottom: var(--line-height);
}
.header h1 {
font-size: 12px;
font-weight: bold;
color: var(--borderAccent);
margin-bottom: var(--line-height);
}
.header-info {
display: flex;
flex-direction: column;
gap: 0;
font-size: 11px;
}
.info-item {
color: var(--dim);
display: flex;
align-items: baseline;
}
.info-label {
font-weight: 600;
margin-right: 8px;
min-width: 100px;
}
.info-value {
color: var(--text);
flex: 1;
}
/* Messages */
#messages {
display: flex;
flex-direction: column;
gap: var(--line-height);
}
.message-timestamp {
font-size: 10px;
color: var(--dim);
opacity: 0.8;
}
.user-message {
background: var(--userMessageBg);
color: var(--userMessageText);
padding: var(--line-height);
border-radius: 4px;
position: relative;
}
.assistant-message {
padding: 0;
position: relative;
}
/* Copy link button - appears on hover */
.copy-link-btn {
position: absolute;
top: 8px;
right: 8px;
width: 28px;
height: 28px;
padding: 6px;
background: var(--container-bg);
border: 1px solid var(--dim);
border-radius: 4px;
color: var(--muted);
cursor: pointer;
opacity: 0;
transition: opacity 0.15s, background 0.15s, color 0.15s;
display: flex;
align-items: center;
justify-content: center;
z-index: 10;
}
.user-message:hover .copy-link-btn,
.assistant-message:hover .copy-link-btn,
.skill-user-entry:hover .copy-link-btn {
opacity: 1;
}
.copy-link-btn:hover {
background: var(--accent);
color: var(--body-bg);
border-color: var(--accent);
}
.copy-link-btn.copied {
background: var(--success, #22c55e);
color: white;
border-color: var(--success, #22c55e);
}
/* Highlight effect for deep-linked messages */
.user-message.highlight,
.assistant-message.highlight {
animation: highlight-pulse 2s ease-out;
}
@keyframes highlight-pulse {
0% {
box-shadow: 0 0 0 3px var(--accent);
}
100% {
box-shadow: 0 0 0 0 transparent;
}
}
.assistant-message > .message-timestamp {
padding-left: var(--line-height);
}
.assistant-text {
padding: var(--line-height);
padding-bottom: 0;
}
.message-timestamp + .assistant-text,
.message-timestamp + .thinking-block {
padding-top: 0;
}
.thinking-block + .assistant-text {
padding-top: 0;
}
.thinking-text {
padding: var(--line-height);
color: var(--thinkingText);
font-style: italic;
white-space: pre-wrap;
}
.message-timestamp + .thinking-block .thinking-text,
.message-timestamp + .thinking-block .thinking-collapsed {
padding-top: 0;
}
.thinking-collapsed {
display: none;
padding: var(--line-height);
color: var(--thinkingText);
font-style: italic;
}
/* Tool execution */
.tool-execution {
padding: var(--line-height);
border-radius: 4px;
}
.tool-execution + .tool-execution {
margin-top: var(--line-height);
}
.assistant-text + .tool-execution {
margin-top: var(--line-height);
}
.tool-execution.pending { background: var(--toolPendingBg); }
.tool-execution.success { background: var(--toolSuccessBg); }
.tool-execution.error { background: var(--toolErrorBg); }
.tool-header, .tool-name {
font-weight: bold;
}
.tool-path {
color: var(--accent);
word-break: break-all;
}
.line-numbers {
color: var(--warning);
}
.line-count {
color: var(--dim);
}
.tool-command {
font-weight: bold;
white-space: pre-wrap;
word-wrap: break-word;
overflow-wrap: break-word;
word-break: break-word;
}
.tool-output {
margin-top: var(--line-height);
color: var(--toolOutput);
word-wrap: break-word;
overflow-wrap: break-word;
word-break: break-word;
font-family: inherit;
overflow-x: auto;
}
.tool-output > div,
.output-preview > div,
.output-full > div {
margin: 0;
padding: 0;
line-height: var(--line-height);
}
.tool-output > div:not(.output-preview):not(.output-full),
.output-preview > div:not(.expand-hint),
.output-full > div:not(.expand-hint) {
white-space: pre-wrap;
}
.tool-output pre {
margin: 0;
padding: 0;
font-family: inherit;
color: inherit;
white-space: pre-wrap;
word-wrap: break-word;
overflow-wrap: break-word;
}
.tool-output code {
padding: 0;
background: none;
color: var(--text);
}
.tool-output.expandable {
cursor: pointer;
}
.tool-output.expandable:hover {
opacity: 0.9;
}
.tool-output.expandable .output-full {
display: none;
}
.tool-output.expandable.expanded .output-preview {
display: none;
}
.tool-output.expandable.expanded .output-full {
display: block;
}
.ansi-line {
white-space: pre;
}
.tool-images {
}
.tool-image {
max-width: 100%;
max-height: 500px;
border-radius: 4px;
margin: var(--line-height) 0;
}
.expand-hint {
color: var(--toolOutput);
}
/* Diff */
.tool-diff {
font-size: 11px;
overflow-x: auto;
white-space: pre;
}
.diff-added { color: var(--toolDiffAdded); }
.diff-removed { color: var(--toolDiffRemoved); }
.diff-context { color: var(--toolDiffContext); }
/* Model change */
.model-change {
padding: 0 var(--line-height);
color: var(--dim);
font-size: 11px;
}
.model-name {
color: var(--borderAccent);
font-weight: bold;
}
/* Compaction / Branch Summary - matches customMessage colors from TUI */
.compaction {
background: var(--customMessageBg);
border-radius: 4px;
padding: var(--line-height);
cursor: pointer;
}
.compaction-label {
color: var(--customMessageLabel);
font-weight: bold;
}
.compaction-collapsed {
color: var(--customMessageText);
}
.compaction-content {
display: none;
color: var(--customMessageText);
white-space: pre-wrap;
margin-top: var(--line-height);
}
.compaction.expanded .compaction-collapsed {
display: none;
}
.compaction.expanded .compaction-content {
display: block;
}
/* System prompt */
.system-prompt {
background: var(--customMessageBg);
padding: var(--line-height);
border-radius: 4px;
margin-bottom: var(--line-height);
}
.system-prompt.expandable {
cursor: pointer;
}
.system-prompt-header {
font-weight: bold;
color: var(--customMessageLabel);
}
.system-prompt-preview {
color: var(--customMessageText);
white-space: pre-wrap;
word-wrap: break-word;
font-size: 11px;
margin-top: var(--line-height);
}
.system-prompt-expand-hint {
color: var(--muted);
font-style: italic;
margin-top: 4px;
}
.system-prompt-full {
display: none;
color: var(--customMessageText);
white-space: pre-wrap;
word-wrap: break-word;
font-size: 11px;
margin-top: var(--line-height);
}
.system-prompt.expanded .system-prompt-preview,
.system-prompt.expanded .system-prompt-expand-hint {
display: none;
}
.system-prompt.expanded .system-prompt-full {
display: block;
}
.system-prompt.provider-prompt {
border-left: 3px solid var(--warning);
}
.system-prompt-note {
font-size: 10px;
font-style: italic;
color: var(--muted);
margin-top: 4px;
}
/* Tools list */
.tools-list {
background: var(--customMessageBg);
padding: var(--line-height);
border-radius: 4px;
margin-bottom: var(--line-height);
}
.tools-header {
font-weight: bold;
color: var(--customMessageLabel);
margin-bottom: var(--line-height);
}
.tool-item {
font-size: 11px;
}
.tool-item-name {
font-weight: bold;
color: var(--text);
}
.tool-item-desc {
color: var(--dim);
}
.tool-params-hint {
color: var(--muted);
font-style: italic;
}
.tool-item:has(.tool-params-hint) {
cursor: pointer;
}
.tool-params-hint::after {
content: '[click to show parameters]';
}
.tool-item.params-expanded .tool-params-hint::after {
content: '[hide parameters]';
}
.tool-params-content {
display: none;
margin-top: 4px;
margin-left: 12px;
padding-left: 8px;
border-left: 1px solid var(--dim);
}
.tool-item.params-expanded .tool-params-content {
display: block;
}
.tool-param {
margin-bottom: 4px;
font-size: 11px;
}
.tool-param-name {
font-weight: bold;
color: var(--text);
}
.tool-param-type {
color: var(--dim);
font-style: italic;
}
.tool-param-required {
color: var(--warning, #e8a838);
font-size: 10px;
}
.tool-param-optional {
color: var(--dim);
font-size: 10px;
}
.tool-param-desc {
color: var(--dim);
margin-left: 8px;
}
/* Hook/custom messages */
.hook-message {
background: var(--customMessageBg);
color: var(--customMessageText);
padding: var(--line-height);
border-radius: 4px;
}
.hook-type {
color: var(--customMessageLabel);
font-weight: bold;
}
/* Skill invocation - matches compaction style (clickable, collapsed by default) */
.skill-invocation {
background: var(--customMessageBg);
border-radius: 4px;
padding: var(--line-height);
cursor: pointer;
}
.skill-invocation-label {
color: var(--customMessageLabel);
font-weight: bold;
}
.skill-invocation-collapsed {
color: var(--customMessageText);
}
.skill-invocation-content {
display: none;
color: var(--customMessageText);
margin-top: var(--line-height);
}
.skill-invocation.expanded .skill-invocation-collapsed {
display: none;
}
.skill-invocation.expanded .skill-invocation-content {
display: block;
}
.skill-invocation + .user-message {
margin-top: var(--line-height);
}
.skill-user-entry {
position: relative;
}
/* Branch summary */
.branch-summary {
background: var(--customMessageBg);
padding: var(--line-height);
border-radius: 4px;
}
.branch-summary-header {
font-weight: bold;
color: var(--borderAccent);
}
/* Error */
.error-text {
color: var(--error);
padding: 0 var(--line-height);
}
.tool-error {
color: var(--error);
}
/* Images */
.message-images {
margin-bottom: 12px;
}
.message-image {
max-width: 100%;
max-height: 400px;
border-radius: 4px;
margin: var(--line-height) 0;
}
/* Markdown content */
.markdown-content h1,
.markdown-content h2,
.markdown-content h3,
.markdown-content h4,
.markdown-content h5,
.markdown-content h6 {
color: var(--mdHeading);
margin: var(--line-height) 0 0 0;
font-weight: bold;
}
.markdown-content h1 { font-size: 1em; }
.markdown-content h2 { font-size: 1em; }
.markdown-content h3 { font-size: 1em; }
.markdown-content h4 { font-size: 1em; }
.markdown-content h5 { font-size: 1em; }
.markdown-content h6 { font-size: 1em; }
.markdown-content p { margin: 0; }
.markdown-content p + p { margin-top: var(--line-height); }
.markdown-content a {
color: var(--mdLink);
text-decoration: underline;
}
.markdown-content code {
background: rgba(128, 128, 128, 0.2);
color: var(--mdCode);
padding: 0 4px;
border-radius: 3px;
font-family: inherit;
}
.markdown-content pre {
background: transparent;
margin: var(--line-height) 0;
overflow-x: auto;
}
.markdown-content pre code {
display: block;
background: none;
color: var(--text);
}
.markdown-content blockquote {
border-left: 3px solid var(--mdQuoteBorder);
padding-left: var(--line-height);
margin: var(--line-height) 0;
color: var(--mdQuote);
font-style: italic;
}
.markdown-content ul,
.markdown-content ol {
margin: var(--line-height) 0;
padding-left: calc(var(--line-height) * 2);
}
.markdown-content li { margin: 0; }
.markdown-content li::marker { color: var(--mdListBullet); }
.markdown-content hr {
border: none;
border-top: 1px solid var(--mdHr);
margin: var(--line-height) 0;
}
.markdown-content table {
border-collapse: collapse;
margin: 0.5em 0;
width: 100%;
}
.markdown-content th,
.markdown-content td {
border: 1px solid var(--mdCodeBlockBorder);
padding: 6px 10px;
text-align: left;
}
.markdown-content th {
background: rgba(128, 128, 128, 0.1);
font-weight: bold;
}
.markdown-content img {
max-width: 100%;
border-radius: 4px;
}
/* Syntax highlighting */
.hljs { background: transparent; color: var(--text); }
.hljs-comment, .hljs-quote { color: var(--syntaxComment); }
.hljs-keyword, .hljs-selector-tag { color: var(--syntaxKeyword); }
.hljs-number, .hljs-literal { color: var(--syntaxNumber); }
.hljs-string, .hljs-doctag { color: var(--syntaxString); }
/* Function names: hljs v11 uses .hljs-title.function_ compound class */
.hljs-function, .hljs-title, .hljs-title.function_, .hljs-section, .hljs-name { color: var(--syntaxFunction); }
/* Types: hljs v11 uses .hljs-title.class_ for class names */
.hljs-type, .hljs-class, .hljs-title.class_, .hljs-built_in { color: var(--syntaxType); }
.hljs-attr, .hljs-variable, .hljs-variable.language_, .hljs-params, .hljs-property { color: var(--syntaxVariable); }
.hljs-meta, .hljs-meta .hljs-keyword, .hljs-meta .hljs-string { color: var(--syntaxKeyword); }
.hljs-operator { color: var(--syntaxOperator); }
.hljs-punctuation { color: var(--syntaxPunctuation); }
.hljs-subst { color: var(--text); }
/* Footer */
.footer {
margin-top: 48px;
padding: 20px;
text-align: center;
color: var(--dim);
font-size: 10px;
}
/* Mobile */
#hamburger {
display: none;
position: fixed;
top: 10px;
left: 10px;
z-index: 100;
padding: 3px 8px;
font-size: 12px;
font-family: inherit;
background: transparent;
color: var(--muted);
border: 1px solid var(--dim);
border-radius: 3px;
cursor: pointer;
}
#hamburger:hover {
color: var(--text);
border-color: var(--text);
}
#sidebar-overlay {
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.5);
z-index: 98;
}
@media (max-width: 900px) {
#sidebar {
position: fixed;
left: 0;
width: min(var(--sidebar-width), 100vw);
min-width: min(var(--sidebar-width), 100vw);
max-width: min(var(--sidebar-width), 100vw);
top: 0;
bottom: 0;
height: 100vh;
z-index: 99;
transform: translateX(-100%);
transition: transform 0.3s;
}
#sidebar.open {
transform: translateX(0);
}
#sidebar-resizer {
display: none;
}
#sidebar-overlay.open {
display: block;
}
#hamburger {
display: block;
}
.sidebar-close {
display: block;
}
#content {
padding: var(--line-height) 16px;
}
#content > * {
max-width: 100%;
}
}
@media print {
#sidebar, #sidebar-resizer, #sidebar-toggle { display: none !important; }
body { background: white; color: black; }
#content { max-width: none; }
}
</style>
</head>
<body>
<button id="hamburger" title="Open sidebar"><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor" stroke="none"><circle cx="6" cy="6" r="2.5"/><circle cx="6" cy="18" r="2.5"/><circle cx="18" cy="12" r="2.5"/><rect x="5" y="6" width="2" height="12"/><path d="M6 12h10c1 0 2 0 2-2V8"/></svg></button>
<div id="sidebar-overlay"></div>
<div id="app">
<aside id="sidebar">
<div class="sidebar-header">
<div class="sidebar-controls">
<input type="text" class="sidebar-search" id="tree-search" placeholder="Search...">
</div>
<div class="sidebar-filters">
<button class="filter-btn active" data-filter="default" title="Hide settings entries">Default</button>
<button class="filter-btn" data-filter="no-tools" title="Default minus tool results">No-tools</button>
<button class="filter-btn" data-filter="user-only" title="Only user messages">User</button>
<button class="filter-btn" data-filter="labeled-only" title="Only labeled entries">Labeled</button>
<button class="filter-btn" data-filter="all" title="Show everything">All</button>
<button class="sidebar-close" id="sidebar-close" title="Close">✕</button>
</div>
</div>
<div class="tree-container" id="tree-container"></div>
<div class="tree-status" id="tree-status"></div>
</aside>
<div id="sidebar-resizer" role="separator" aria-orientation="vertical" aria-label="Resize session tree sidebar"></div>
<main id="content">
<div id="header-container"></div>
<div id="messages"></div>
</main>
<div id="image-modal" class="image-modal">
<img id="modal-image" src="" alt="">
</div>
</div>
<script id="session-data" type="application/json">eyJoZWFkZXIiOnsidHlwZSI6InNlc3Npb24iLCJ2ZXJzaW9uIjozLCJpZCI6IjAxOWY5OTk5LWNjZGQtNzIzNC05MTJhLTYyZTViNjhhN2U5ZCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDc6MDEuMzQxWiIsImN3ZCI6Ii9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIifSwiZW50cmllcyI6W3sidHlwZSI6Im1vZGVsX2NoYW5nZSIsImlkIjoiZWM1ZjI0YjUiLCJwYXJlbnRJZCI6bnVsbCwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDowNzowMS4zOTZaIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbElkIjoiZ3B0LTUuNi1zb2wifSx7InR5cGUiOiJ0aGlua2luZ19sZXZlbF9jaGFuZ2UiLCJpZCI6ImE0OTBjZmRkIiwicGFyZW50SWQiOiJlYzVmMjRiNSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDc6MDEuMzk2WiIsInRoaW5raW5nTGV2ZWwiOiJtZWRpdW0ifSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI3YjI0OWE0NCIsInBhcmVudElkIjoiYTQ5MGNmZGQiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjA3OjEyLjAwMVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiaW4gdGhpcyByZXBvIGkgaGF2ZSBhbHQtcm9vdGZzLWluc3RhbGxlciBzY3JpcHRzIHRoYXQgYXJlIHVzZWQgdG8gZmxhc2ggcm9vdGZzIHRvIHNvbWUgZGlmZmVyZW50IFNCQ3MuIENyZWF0ZSBpZGlvbWF0aWMgYWR3YWl0YSBndGsgaW50ZXJmYWNlXG50aGF0IGlzIHNvbWV3aGF0IG1pcnJvcnMgdGhpcyBzY3JpcHQuIHlvdSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGltcGxlbWVudCB0aGUgZmxhc2hpbmcsIGp1c3QgdGhlIGludGVyZmFjZS4gZG8gaXQgaW4gY3VycmVudCBydXN0IHByb2plY3QuIGFzayBpZiBhbnkgcXVlc3Rpb25zIGFyaXNlLiJ9XSwidGltZXN0YW1wIjoxNzg0OTg4NDMxOTk4fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZDliYjgzNDciLCJwYXJlbnRJZCI6IjdiMjQ5YTQ0IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDowNzoxOC4zMjBaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlBsYW5uaW5nIHJlcG9zaXRvcnkgaW5zcGVjdGlvbioqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMTNhZTdjODE5MTg5ZDJiZmZkMmYzMDBiYWZcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1NV0JKMmxMM3NjRGdXM2xMeUtrY1EyeDdOelgyaGIyU2NXQ1lJV2xOSk5TbGM1OHFBTnpiZFVKQl9fRlBPdTBpTjhYMGU3b011S2syMW1HNVpIUlJCUmxSLVU3SjdTMDNMbFA2QS13aWpNSXlyS3BRd3JJdExiQk9xUTNuYmU4aTQ4SHlpZG5kOFpwRGppZG4yRENUMDdUUmNBVkltYjFIQXZmWHZ1TjFHLW53WjJHOFpvMENVWS1tT2gxa0prSDlrNng3QXJTMzdRYk1wUTdpb25fT3E5MzJVNnZYdVdyMUZUQXlHSUh5ZkhMYUV4UXdRSlpabDhHU2puMFJkUDhzTFBuTVE0Szlac1U0Z05kX2N1VUlaV2FuVi1LdnRjQkw5SFQ2R09PT2lLclF4NFhXYUZ5eXJCUVBsZkhWQVNBclJCemNOQjRnUnYzM3J4QkhtaDlJb0g1ZmYzam1wLXhzTENFTXNKNjVHcGExVlBYLXp0aXdVUEl1YV8xejYydWJGaFhYdTNzV1U2VVI3SGUzTXRxdkY3d2ltYzhBVmZaLTl1dFZsVFpvS2JrTFVZdUdRQW9kSTkycGNNR1hyNDRKNlg5OE1UV2VlRVh2WVMxa1pUeF9QQWtkTlRJT1Z4bFVEeDJKVy1fclFzOXZZUnp3enhJZXRlU3RsZl94RFcySHdfVWFPWFBlNFdjRkhhWjZ4VS0yN1hjcklyZ0FzYkh0NUNoUDJLMWtoUU5zZW1LaW1pM3g3ZHJFemRWVzZuQ29qVW9DemVveDdMelEtNzM5U19FUFhYNWduRUJSa2hTcDVyVlNrUXYxZUVUU3FOUmd3UzZOTE9VOWJNcnhpNVhab215dEx6YWlEVDJ0VWdYZU9GQm5ITm5WUjdxcE1FMzRBY1hRVGN2NUNMeVN2MTVjckNqMWUyVXpmZEx6ZmV2elJ4WUZjNXd2czduZkV4ZTd1QjEteUNRNlJwd3pyLWIzaVBoeXJtRVZQT1FpSlBZNjFVMFNoeXU2MW5oNEdEYmFhd3RoMWpFUWR2OENGR3JLY0p4QTZXV1RPcWM3Sy0wdE5sLTQ5UHU3emd4aXZ2ZnZwR2pxbmVUMXQ3U3dUdXgzWGVfc0NQaGxwOVZZam5aZ3FWb3BUeWhKeC1xLWduY0RvU2c1SWVMMmd3VkZJQ3BKUFlxTTEzRDAxeFBiNmM0dUVwQkZnSlRXczNjcGpHT2dscFA1SDE3bDJ2bGR0Rl84dHRzZnpyZkR3dDZsWWw4VlVlVTdZb1R5RlN5SUc2NVNGUlwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqUGxhbm5pbmcgcmVwb3NpdG9yeSBpbnNwZWN0aW9uKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX3dPSjB3ckdSUlZGUVZEYzJxWHRIWFA1c3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzMxNjJjOTA4MTkxYTg5ZmFhYTU3NzIzZDFjMyIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJwcmludGYgJyVzXFxuJyAnLS0tIGVudiAtLS0nOyBlbnYgfCBncmVwICdeUElfJyB8fCB0cnVlOyBwcmludGYgJyVzXFxuJyAnLS0tIGZpbGVzIC0tLSc7IGZpbmQgLiAtbWF4ZGVwdGggMyAtdHlwZSBmIC1wcmludCB8IHNvcnQgfCBoZWFkIC0zMDAifX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfS1FxRUpjS04zeEcwbXJYd1g5TGMwRWFYfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjMzE2MmNiMDgxOTE4Y2M3Yjg0ZGFhYzg3YjdlIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImZpbmQgLi4gLW1heGRlcHRoIDQgLXR5cGUgZiBcXCggLWluYW1lICcqYWx0KnJvb3RmcyonIC1vIC1pbmFtZSAnKi5zaCcgXFwpIC1wcmludCB8IHNvcnQifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjEzMTEsIm91dHB1dCI6MTQwLCJjYWNoZVJlYWQiOjAsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6OSwidG90YWxUb2tlbnMiOjE0NTEsImNvc3QiOnsiaW5wdXQiOjAuMDA2NTU1MDAwMDAwMDAwMDAxLCJvdXRwdXQiOjAuMDA0MiwiY2FjaGVSZWFkIjowLCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wMTA3NTV9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODg0MzIwMTIsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjMzEyNjNiODgxOTE4YzlkY2M5YjJhMWViNTkzIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImUwOGZjOTZhIiwicGFyZW50SWQiOiJkOWJiODM0NyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDc6MTkuNDkzWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF93T0owd3JHUlJWRlFWRGMycVh0SFhQNXN8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMTYyYzkwODE5MWE4OWZhYWE1NzcyM2QxYzMiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiItLS0gZW52IC0tLVxuUElfQ09ESU5HX0FHRU5UPXRydWVcblBJX1JFQVNPTklOR19MRVZFTD1tZWRpdW1cblBJX1NFU1NJT05fRklMRT0vaG9tZS9hZ3VzY2hpbi8ucGkvYWdlbnQvc2Vzc2lvbnMvLS1ob21lLWFndXNjaGluLVByb2plY3RzLWZsYXNoZXItLS8yMDI2LTA3LTI1VDE0LTA3LTAxLTM0MVpfMDE5Zjk5OTktY2NkZC03MjM0LTkxMmEtNjJlNWI2OGE3ZTlkLmpzb25sXG5QSV9QUk9WSURFUj1vcGVuYWktY29kZXhcblBJX01PREVMPWdwdC01LjYtc29sXG5QSV9TRVNTSU9OX0lEPTAxOWY5OTk5LWNjZGQtNzIzNC05MTJhLTYyZTViNjhhN2U5ZFxuLS0tIGZpbGVzIC0tLVxuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9hbHQtcm9vdGZzLWluc3RhbGxlclxuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9hbHQtcm9vdGZzLWluc3RhbGxlci5zcGVjXG4uL2FsdC1yb290ZnMtaW5zdGFsbGVyL0FVVEhPUlNcbi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvQ09QWUlOR1xuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9FWFRSQV9PUFRJT05TXG4uL2FsdC1yb290ZnMtaW5zdGFsbGVyL2Z1bmN0aW9uc1xuLi9hbHQtcm9vdGZzLWluc3RhbGxlci8uZ2Vhci9ydWxlc1xuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9sb2dcbi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvUkVBRE1FXG4uL2FsdC1yb290ZnMtaW5zdGFsbGVyL3NoZWxsLWNvbmZpZ1xuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9zaGVsbC1lcnJvclxuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9zaGVsbC10ZXJtaW5mb1xuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9zb2NzLmQvQWxsV2lubmVyLWFhcmNoNjQuc2hcbi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvc29jcy5kL0FsbFdpbm5lci1yaXNjdjY0LnNoXG4uL2FsdC1yb290ZnMtaW5zdGFsbGVyL3NvY3MuZC9LMXgtcmlzY3Y2NC5zaFxuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9zb2NzLmQvUm9ja2NoaXBzLWFhcmNoNjQuc2hcbi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvc29jcy5kL1NpRml2ZS1yaXNjdjY0LnNoXG4uL2FsdC1yb290ZnMtaW5zdGFsbGVyL3NvY3MuZC9TdGFyRml2ZS1yaXNjdjY0LnNoXG4uL2FsdC1yb290ZnMtaW5zdGFsbGVyL3NvY3MuZC91bmtub3duLXNvYy5zaFxuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9TVVBQT1JURUQtQk9BUkRTXG4uL0NhcmdvLmxvY2tcbi4vQ2FyZ28udG9tbFxuLi8uZ2l0L0NPTU1JVF9FRElUTVNHXG4uLy5naXQvY29uZmlnXG4uLy5naXQvZGVzY3JpcHRpb25cbi4vLmdpdC9IRUFEXG4uLy5naXRpZ25vcmVcbi4vLmdpdC9pbmRleFxuLi8uZ2l0L2luZm8vZXhjbHVkZVxuLi8uZ2l0L2xvZ3MvSEVBRFxuLi9zcmMvbWFpbi5yc1xuLi90YXJnZXQvQ0FDSEVESVIuVEFHXG4uL3RhcmdldC9kZWJ1Zy8uY2FyZ28tYXJ0aWZhY3QtbG9ja1xuLi90YXJnZXQvZGVidWcvLmNhcmdvLWJ1aWxkLWxvY2tcbi4vdGFyZ2V0L2RlYnVnLy5jYXJnby1sb2NrXG4uL3RhcmdldC9kZWJ1Zy9mbGFzaGVyXG4uL3RhcmdldC9kZWJ1Zy9mbGFzaGVyLmRcbi4vdGFyZ2V0Ly5ydXN0Y19pbmZvLmpzb25cbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4ODQzOTQ5M319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjFhZWRmMzVhIiwicGFyZW50SWQiOiJlMDhmYzk2YSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDc6MTkuNDkzWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9LUXFFSmNLTjN4RzBtclh3WDlMYzBFYVh8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMTYyY2IwODE5MThjYzdiODRkYWFjODdiN2UiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIuLi9hbHQtY29udHJvbGxlci1pbnN0YWxsZXIvYWx0LXJvb3Rmcy1pbnN0YWxsZXJcbi4uL2FsdC1jb250cm9sbGVyLWluc3RhbGxlci9hbHQtcm9vdGZzLWluc3RhbGxlci5zcGVjXG4uLi9hbHQtY29udHJvbGxlci1pbnN0YWxsZXIvc29jcy5kL0FsbFdpbm5lci1hYXJjaDY0LnNoXG4uLi9hbHQtY29udHJvbGxlci1pbnN0YWxsZXIvc29jcy5kL0FsbFdpbm5lci1yaXNjdjY0LnNoXG4uLi9hbHQtY29udHJvbGxlci1pbnN0YWxsZXIvc29jcy5kL2JibC1yaXNjdjY0LnNoXG4uLi9hbHQtY29udHJvbGxlci1pbnN0YWxsZXIvc29jcy5kL2dlbmVyaWMteDg2LnNoXG4uLi9hbHQtY29udHJvbGxlci1pbnN0YWxsZXIvc29jcy5kL0hpRml2ZVVubGVhc2hlZC1yaXNjdjY0LnNoXG4uLi9hbHQtY29udHJvbGxlci1pbnN0YWxsZXIvc29jcy5kL0hpRml2ZVVubWF0Y2hlZC1yaXNjdjY0LnNoXG4uLi9hbHQtY29udHJvbGxlci1pbnN0YWxsZXIvc29jcy5kL1JvY2tjaGlwcy1hYXJjaDY0LnNoXG4uLi9hbHQtY29udHJvbGxlci1pbnN0YWxsZXIvc29jcy5kL1NpRml2ZS1yaXNjdjY0LnNoXG4uLi9hbHQtY29udHJvbGxlci1pbnN0YWxsZXIvc29jcy5kL3Vua25vd24tc29jLnNoXG4uLi9jb252ZXJ0X3BuZ190b19hdmlmLnNoXG4uLi9jb252LnNoXG4uLi9jb3Vyc2V3b3JrLXllYXIyL3JlcG9ydC9tZXJnZS5zaFxuLi4vZG90ZmlsZXMvLmNvbmZpZy9wb2x5YmFyL2xhdW5jaC5zaFxuLi4vZmZtcGVnLXJvY2tjaGlwL2RvYy9kb3h5LXdyYXBwZXIuc2hcbi4uL2ZmbXBlZy1yb2NrY2hpcC9mZmJ1aWxkL2xpYnZlcnNpb24uc2hcbi4uL2ZmbXBlZy1yb2NrY2hpcC9mZmJ1aWxkL3BrZ2NvbmZpZ19nZW5lcmF0ZS5zaFxuLi4vZmZtcGVnLXJvY2tjaGlwL2ZmYnVpbGQvdmVyc2lvbi5zaFxuLi4vZmZtcGVnLXJvY2tjaGlwL3Rlc3RzL2NvcHljb29rZXIuc2hcbi4uL2ZmbXBlZy1yb2NrY2hpcC90ZXN0cy9mYXRlLXJ1bi5zaFxuLi4vZmZtcGVnLXJvY2tjaGlwL3Rlc3RzL2ZhdGUuc2hcbi4uL2ZmbXBlZy1yb2NrY2hpcC90ZXN0cy9mYXRlL3NvdXJjZS1jaGVjay5zaFxuLi4vZmZtcGVnLXJvY2tjaGlwL3Rlc3RzL21kNS5zaFxuLi4vZmZtcGVnLXJvY2tjaGlwL3Rvb2xzL3RhcmdldF9kZWNfZmF0ZS5zaFxuLi4vZmxhc2hlci9hbHQtcm9vdGZzLWluc3RhbGxlci9hbHQtcm9vdGZzLWluc3RhbGxlclxuLi4vZmxhc2hlci9hbHQtcm9vdGZzLWluc3RhbGxlci9hbHQtcm9vdGZzLWluc3RhbGxlci5zcGVjXG4uLi9mbGFzaGVyL2FsdC1yb290ZnMtaW5zdGFsbGVyL3NvY3MuZC9BbGxXaW5uZXItYWFyY2g2NC5zaFxuLi4vZmxhc2hlci9hbHQtcm9vdGZzLWluc3RhbGxlci9zb2NzLmQvQWxsV2lubmVyLXJpc2N2NjQuc2hcbi4uL2ZsYXNoZXIvYWx0LXJvb3Rmcy1pbnN0YWxsZXIvc29jcy5kL0sxeC1yaXNjdjY0LnNoXG4uLi9mbGFzaGVyL2FsdC1yb290ZnMtaW5zdGFsbGVyL3NvY3MuZC9Sb2NrY2hpcHMtYWFyY2g2NC5zaFxuLi4vZmxhc2hlci9hbHQtcm9vdGZzLWluc3RhbGxlci9zb2NzLmQvU2lGaXZlLXJpc2N2NjQuc2hcbi4uL2ZsYXNoZXIvYWx0LXJvb3Rmcy1pbnN0YWxsZXIvc29jcy5kL1N0YXJGaXZlLXJpc2N2NjQuc2hcbi4uL2ZsYXNoZXIvYWx0LXJvb3Rmcy1pbnN0YWxsZXIvc29jcy5kL3Vua25vd24tc29jLnNoXG4uLi9nYW1vdmEvZG9jL21ha2VyLnNoXG4uLi9saW51eC9hcmNoL202OGsvaW5zdGFsbC5zaFxuLi4vbGludXgvYXJjaC9wYXJpc2MvaW5zdGFsbC5zaFxuLi4vbGludXgva2VybmVsL2dlbl9raGVhZGVycy5zaFxuLi4vbGludXgvbGliL3Rlc3RfZm9ydGlmeS90ZXN0X2ZvcnRpZnkuc2hcbi4uL2xpbnV4L3NhbXBsZXMvYnBmL2RvX2hibV90ZXN0LnNoXG4uLi9saW51eC9zYW1wbGVzL2JwZi9sd3RfbGVuX2hpc3Quc2hcbi4uL2xpbnV4L3NhbXBsZXMvYnBmL3J1bl9jb29raWVfdWlkX2hlbHBlcl9leGFtcGxlLnNoXG4uLi9saW51eC9zYW1wbGVzL2JwZi90Y19sMl9yZWRpcmVjdC5zaFxuLi4vbGludXgvc2FtcGxlcy9icGYvdGVzdF9jbHNfYnBmLnNoXG4uLi9saW51eC9zYW1wbGVzL2JwZi90ZXN0X2x3dF9icGYuc2hcbi4uL2xpbnV4L3NhbXBsZXMvYnBmL3hkcDJza2JfbWV0YS5zaFxuLi4vbGludXgvc2FtcGxlcy9jaGVjay1leGVjL3J1bi1zY3JpcHQtYXNrLnNoXG4uLi9saW51eC9zYW1wbGVzL3BrdGdlbi9mdW5jdGlvbnMuc2hcbi4uL2xpbnV4L3NhbXBsZXMvcGt0Z2VuL3BhcmFtZXRlcnMuc2hcbi4uL2xpbnV4L3NhbXBsZXMvcGt0Z2VuL3BrdGdlbl9iZW5jaF94bWl0X21vZGVfbmV0aWZfcmVjZWl2ZS5zaFxuLi4vbGludXgvc2FtcGxlcy9wa3RnZW4vcGt0Z2VuX2JlbmNoX3htaXRfbW9kZV9xdWV1ZV94bWl0LnNoXG4uLi9saW51eC9zYW1wbGVzL3BrdGdlbi9wa3RnZW5fc2FtcGxlMDFfc2ltcGxlLnNoXG4uLi9saW51eC9zYW1wbGVzL3BrdGdlbi9wa3RnZW5fc2FtcGxlMDJfbXVsdGlxdWV1ZS5zaFxuLi4vbGludXgvc2FtcGxlcy9wa3RnZW4vcGt0Z2VuX3NhbXBsZTAzX2J1cnN0X3NpbmdsZV9mbG93LnNoXG4uLi9saW51eC9zYW1wbGVzL3BrdGdlbi9wa3RnZW5fc2FtcGxlMDRfbWFueV9mbG93cy5zaFxuLi4vbGludXgvc2FtcGxlcy9wa3RnZW4vcGt0Z2VuX3NhbXBsZTA1X2Zsb3dfcGVyX3RocmVhZC5zaFxuLi4vbGludXgvc2FtcGxlcy9wa3RnZW4vcGt0Z2VuX3NhbXBsZTA2X251bWFfYXdhcmVkX3F1ZXVlX2lycV9hZmZpbml0eS5zaFxuLi4vbGludXgvc2NyaXB0cy9hcy12ZXJzaW9uLnNoXG4uLi9saW51eC9zY3JpcHRzL2F0b21pYy9hdG9taWMtdGJsLnNoXG4uLi9saW51eC9zY3JpcHRzL2F0b21pYy9nZW4tYXRvbWljLWZhbGxiYWNrLnNoXG4uLi9saW51eC9zY3JpcHRzL2F0b21pYy9nZW4tYXRvbWljLWluc3RydW1lbnRlZC5zaFxuLi4vbGludXgvc2NyaXB0cy9hdG9taWMvZ2VuLWF0b21pYy1sb25nLnNoXG4uLi9saW51eC9zY3JpcHRzL2F0b21pYy9nZW4tYXRvbWljcy5zaFxuLi4vbGludXgvc2NyaXB0cy9hdG9taWMvZ2VuLXJ1c3QtYXRvbWljLWhlbHBlcnMuc2hcbi4uL2xpbnV4L3NjcmlwdHMvY2MtY2FuLWxpbmsuc2hcbi4uL2xpbnV4L3NjcmlwdHMvY2MtdmVyc2lvbi5zaFxuLi4vbGludXgvc2NyaXB0cy9jaGVja2VyLXZhbGlkLnNoXG4uLi9saW51eC9zY3JpcHRzL2NoZWNrX2V4dGFibGUuc2hcbi4uL2xpbnV4L3NjcmlwdHMvY2hlY2stZnVuY3Rpb24tbmFtZXMuc2hcbi4uL2xpbnV4L3NjcmlwdHMvY2hlY2tzeXNjYWxscy5zaFxuLi4vbGludXgvc2NyaXB0cy9jaGVjay11YXBpLnNoXG4uLi9saW51eC9zY3JpcHRzL2RlY29kZV9zdGFja3RyYWNlLnNoXG4uLi9saW51eC9zY3JpcHRzL2RlcG1vZC5zaFxuLi4vbGludXgvc2NyaXB0cy9kZXYtbmVlZHMuc2hcbi4uL2xpbnV4L3NjcmlwdHMvZHRjL3VwZGF0ZS1kdGMtc291cmNlLnNoXG4uLi9saW51eC9zY3JpcHRzL2ZpbGUtc2l6ZS5zaFxuLi4vbGludXgvc2NyaXB0cy9nZW4tYnRmLnNoXG4uLi9saW51eC9zY3JpcHRzL2dlbi1yYW5kc3RydWN0LXNlZWQuc2hcbi4uL2xpbnV4L3NjcmlwdHMvZ2l0LXJlc29sdmUuc2hcbi4uL2xpbnV4L3NjcmlwdHMvaGVhZGVyc19pbnN0YWxsLnNoXG4uLi9saW51eC9zY3JpcHRzL2luc3RhbGwuc2hcbi4uL2xpbnV4L3NjcmlwdHMva2NvbmZpZy9nY29uZi1jZmcuc2hcbi4uL2xpbnV4L3NjcmlwdHMva2NvbmZpZy9tY29uZi1jZmcuc2hcbi4uL2xpbnV4L3NjcmlwdHMva2NvbmZpZy9tZXJnZV9jb25maWcuc2hcbi4uL2xpbnV4L3NjcmlwdHMva2NvbmZpZy9uY29uZi1jZmcuc2hcbi4uL2xpbnV4L3NjcmlwdHMva2NvbmZpZy9xY29uZi1jZmcuc2hcbi4uL2xpbnV4L3NjcmlwdHMvbGQtdmVyc2lvbi5zaFxuLi4vbGludXgvc2NyaXB0cy9saW5rLXZtbGludXguc2hcbi4uL2xpbnV4L3NjcmlwdHMvbWluLXRvb2wtdmVyc2lvbi5zaFxuLi4vbGludXgvc2NyaXB0cy9ta3Vib290LnNoXG4uLi9saW51eC9zY3JpcHRzL21vZHVsZXMtY2hlY2suc2hcbi4uL2xpbnV4L3NjcmlwdHMvb3JjX2hhc2guc2hcbi4uL2xpbnV4L3NjcmlwdHMvcGFob2xlLXZlcnNpb24uc2hcbi4uL2xpbnV4L3NjcmlwdHMvcmVsb2NzX2NoZWNrLnNoXG4uLi9saW51eC9zY3JpcHRzL3J1c3RjLWxsdm0tdmVyc2lvbi5zaFxuLi4vbGludXgvc2NyaXB0cy9ydXN0Yy12ZXJzaW9uLnNoXG4uLi9saW51eC9zY3JpcHRzL3J1c3RfaXNfYXZhaWxhYmxlLnNoXG4uLi9saW51eC9zY3JpcHRzL3NlbGludXgvaW5zdGFsbF9wb2xpY3kuc2hcbi4uL2xpbnV4L3NjcmlwdHMvc3BkeGNoZWNrLXRlc3Quc2hcbi4uL2xpbnV4L3NjcmlwdHMvc3lzY2FsbGhkci5zaFxuLi4vbGludXgvc2NyaXB0cy9zeXNjYWxsbnIuc2hcbi4uL2xpbnV4L3NjcmlwdHMvc3lzY2FsbHRibC5zaFxuLi4vbGludXgvc2NyaXB0cy90YWdzLnNoXG4uLi9saW51eC9zY3JpcHRzL3Rvb2xzLXN1cHBvcnQtcmVsci5zaFxuLi4vbGludXgvc2NyaXB0cy90cmFjaW5nL2Z0cmFjZS1iaXNlY3Quc2hcbi4uL2xpbnV4L3NjcmlwdHMveGVuLWh5cGVyY2FsbHMuc2hcbi4uL2xpbnV4L3NjcmlwdHMveHpfd3JhcC5zaFxuLi4vbGludXgvdG9vbHMvYm9vdGNvbmZpZy90ZXN0LWJvb3Rjb25maWcuc2hcbi4uL2xpbnV4L3Rvb2xzL2NlcnRzL3ByaW50LWNlcnQtdGJzLWhhc2guc2hcbi4uL2xpbnV4L3Rvb2xzL2RvY3MvZmVhdHVyZXMtcmVmcmVzaC5zaFxuLi4vbGludXgvdG9vbHMvZG9jcy9maW5kLXVudXNlZC1kb2NzLnNoXG4uLi9saW51eC90b29scy9kb2NzL2xpc3QtYXJjaC5zaFxuLi4vbGludXgvdG9vbHMvZ3Bpby9ncGlvLXNsb3BweS1sb2dpYy1hbmFseXplci5zaFxuLi4vbGludXgvdG9vbHMvaHYvaHZfZ2V0X2RoY3BfaW5mby5zaFxuLi4vbGludXgvdG9vbHMvaHYvaHZfZ2V0X2Ruc19pbmZvLnNoXG4uLi9saW51eC90b29scy9odi9odl9zZXRfaWZjb25maWcuc2hcbi4uL2xpbnV4L3Rvb2xzL2xlZHMvZ2V0X2xlZF9kZXZpY2VfaW5mby5zaFxuLi4vbGludXgvdG9vbHMvbW0vc2xhYmluZm8tZ251cGxvdC5zaFxuLi4vbGludXgvdG9vbHMvb2JqdG9vbC9zeW5jLWNoZWNrLnNoXG4uLi9saW51eC90b29scy9wZXJmL2NoZWNrLWhlYWRlcnMuc2hcbi4uL2xpbnV4L3Rvb2xzL3BlcmYvcGVyZi1hcmNoaXZlLnNoXG4uLi9saW51eC90b29scy9wZXJmL3BlcmYtY29tcGxldGlvbi5zaFxuLi4vbGludXgvdG9vbHMvcGVyZi9wZXJmLWlvc3RhdC5zaFxuLi4vbGludXgvdG9vbHMvcmN1L2V4dHJhY3Qtc3RhbGwuc2hcbi4uL2xpbnV4L3Rvb2xzL3JjdS9yY3UtdXBkYXRlcnMuc2hcbi4uL2xpbnV4L3Rvb2xzL3RpbWUvdWRlbGF5X3Rlc3Quc2hcbi4uL2xpbnV4L3Rvb2xzL3VzYi9oY2QtdGVzdHMuc2hcbi4uL2xpbnV4L3Vzci9nZW5faW5pdHJhbWZzLnNoXG4uLi9ta2ltYWdlLXByb2ZpbGVzL2ZlYXR1cmVzLmluLzAwZXhhbXBsZS9nZW5lcmF0ZS5zaFxuLi4vbXBwL2J1aWxkL2FuZHJvaWQvZW52X3NldHVwLnNoXG4uLi9tcHAvYnVpbGQvYW5kcm9pZC91cGRhdGUuc2hcbi4uL21wcC9idWlsZC9saW51eC9vcHRfcHJvYy5zaFxuLi4vbXBwL21lcmdlX3N0YXRpY19saWIuc2hcbi4uL21wcC90b29scy9jaGFuZ2Vsb2cuc2hcbi4uL21wcC90b29scy9tcHBfYXN0eWxlLnNoXG4uLi9tcHAvdG9vbHMvcmVzb2x1dGlvbl90ZXN0LnNoXG4uLi9uYXMtc2VydmljZXMvdGVtcC5zaFxuLi4vbm9zbGVlcC5zaFxuLi4vb3B1cy1yZXNlYXJjaC9jaGVjay5zaFxuLi4vb3B1cy1yZXNlYXJjaC9raXMvY2hlY2suc2hcbi4uL29wdXMtcmVzZWFyY2gva2lzL3J1bi5zaFxuLi4vb3B1cy1yZXNlYXJjaC9ydW4uc2hcbi4uL29wdXMtcmVzZWFyY2gvc29hZC9jaGVjay5zaFxuLi4vb3B1cy1yZXNlYXJjaC9zb2FkL3J1bi5zaFxuLi4vb3dydC9nZXRzc2guc2hcbi4uL3NzdS1ncmFwaGljcy1jb3Vyc2Uvb2xkbGF0ZXgvbGVzc29uMDEvbWFrZXIuc2hcbi4uL3NzdS1ncmFwaGljcy1jb3Vyc2Uvb2xkbGF0ZXgvbGVzc29uMDMvbWFrZXIuc2hcbi4uL3NzdS1ncmFwaGljcy1jb3Vyc2Uvb2xkbGF0ZXgvbWFrZXIuc2hcbi4uL3NzdS1ncmFwaGljcy1yYXlsaWIvc3N1LWdyYXBoaWNzLW9wZW5nbC9tYWtlci5zaFxuLi4vc3N1LWdyYXBoaWNzLXJheWxpYi9zc3UtZ3JhcGhpY3MtcmF5bGliL21ha2VyLnNoXG4uLi91LWJvb3QvZG9jL3NwaGlueC9wYXJhbGxlbC13cmFwcGVyLnNoXG4uLi91LWJvb3Qvc2NyaXB0cy9iaW51dGlscy12ZXJzaW9uLnNoXG4uLi91LWJvb3Qvc2NyaXB0cy9idWlsZC1jYi5zaFxuLi4vdS1ib290L3NjcmlwdHMvYnVpbGQtZWZpLnNoXG4uLi91LWJvb3Qvc2NyaXB0cy9jaGVjay1vZi5zaFxuLi4vdS1ib290L3NjcmlwdHMvY2xhbmctdmVyc2lvbi5zaFxuLi4vdS1ib290L3NjcmlwdHMvZHRjL3VwZGF0ZS1kdGMtc291cmNlLnNoXG4uLi91LWJvb3Qvc2NyaXB0cy9kdGMtdmVyc2lvbi5zaFxuLi4vdS1ib290L3NjcmlwdHMvZ2NjLXN0YWNrLXVzYWdlLnNoXG4uLi91LWJvb3Qvc2NyaXB0cy9nY2MtdmVyc2lvbi5zaFxuLi4vdS1ib290L3NjcmlwdHMvZ2VuX2xsX2FkZHJlc3NhYmxlX3N5bWJvbHMuc2hcbi4uL3UtYm9vdC9zY3JpcHRzL2dldF9kZWZhdWx0X2VudnMuc2hcbi4uL3UtYm9vdC9zY3JpcHRzL2tjb25maWcvZ2NvbmYtY2ZnLnNoXG4uLi91LWJvb3Qvc2NyaXB0cy9rY29uZmlnL21jb25mLWNmZy5zaFxuLi4vdS1ib290L3NjcmlwdHMva2NvbmZpZy9tZXJnZV9jb25maWcuc2hcbi4uL3UtYm9vdC9zY3JpcHRzL2tjb25maWcvbmNvbmYtY2ZnLnNoXG4uLi91LWJvb3Qvc2NyaXB0cy9rY29uZmlnL3Fjb25mLWNmZy5zaFxuLi4vdS1ib290L3NjcmlwdHMvbGQtdmVyc2lvbi5zaFxuLi4vdS1ib290L3NjcmlwdHMvbWFrZV9waXAuc2hcbi4uL3UtYm9vdC90ZXN0L2ZzL2ZhdC1ub25jb250aWctdGVzdC5zaFxuLi4vdS1ib290L3Rlc3QvZnMvZnMtdGVzdC5zaFxuLi4vdS1ib290L3Rlc3QvaW1hZ2UvdGVzdC1pbWFnZXRvb2xzLnNoXG4uLi91LWJvb3QvdGVzdC9zdGRpbnQvdGVzdC1pbmNsdWRlcy5zaFxuLi4vdS1ib290L3Rvb2xzL2lteDhtX2ltYWdlLnNoXG4uLi91LWJvb3QvdG9vbHMvaW14OV9pbWFnZS5zaFxuLi4vdS1ib290L3Rvb2xzL2lteF9jbnRyX2ltYWdlLnNoXG4uLi91LWJvb3QvdG9vbHMvaW90MjA1MC1zaWduLWZ3LnNoXG4uLi91LWJvb3QvdG9vbHMvdXBkYXRlLXN1YnRyZWUuc2hcbi4uL3UtYm9vdC90b29scy96eW5xbXBfcHN1X2luaXRfbWluaW1pemUuc2hcbi4uL3YycmF5Ti9wYWNrYWdlLWRlYmlhbi1sb29uZy5zaFxuLi4vdjJyYXlOL3BhY2thZ2UtZGViaWFuLXJpc2N2LnNoXG4uLi92MnJheU4vcGFja2FnZS1kZWJpYW4uc2hcbi4uL3YycmF5Ti9wYWNrYWdlLW9zeC5zaFxuLi4vdjJyYXlOL3BhY2thZ2UtcmhlbC1yaXNjdi5zaFxuLi4vdjJyYXlOL3BhY2thZ2UtcmhlbC5zaFxuLi4vdnRjLWRlcGxveS92dGMtaW5mcmEvaW5pdC1zZXJ2LnNoXG4uLi93bHJvb3RzL2JhY2tlbmQvZHJtL2dlbl9wbnBpZHMuc2hcbi4uL3hwYWRuZW8vY29uZmlndXJlLnNoXG4uLi94cGFkbmVvL2luc3RhbGwuc2hcbi4uL3hwYWRuZW8vbGliL2luc3RhbGxlci5zaFxuLi4veHBhZG5lby9saWIvdmVyYm9zZS5zaFxuLi4veHBhZG5lby91bmluc3RhbGwuc2hcbi4uL3hwYWRuZW8vdXBkYXRlLnNoXG4uLi95dC1kbHAveXQtZGxwLnNoXG4uLi96eDJjNC9HaXRUb29scy9vbGQvTWlncmF0ZUZyb21HaXR3ZWJVbml4UGVybVRvR2l0b2xpdGUuc2hcbi4uL3p4MmM0L0dpdFRvb2xzL29sZC9OZXdDR2l0VW5peFBlcm1HaXRQcm9qZWN0LnNoXG4uLi96eDJjNC9HaXRUb29scy9vbGQvVXBsb2FkQ29udGVudHNUb0FueWNsaXBTZXJ2ZXIuc2hcbi4uL3p4MmM0L0dpdFRvb2xzL29sZC9VcGxvYWROZXdHaXRHaXR3ZWJVbml4UGVybS5zaFxuLi4vengyYzQvR2l0VG9vbHMvdXBsb2FkTmV3R2l0LnNoXG4uLi96eDJjNC9TdHJpcGUtQ1RGL2xldmVsMDEuc2hcbi4uL3p4MmM0L1N0cmlwZS1DVEYvbGV2ZWwwMi5zaFxuLi4vengyYzQvU3RyaXBlLUNURi9sZXZlbDAzLnNoXG4uLi96eDJjNC9TdHJpcGUtQ1RGL2xldmVsMDQuc2hcbi4uL3p4MmM0L1N0cmlwZS1DVEYvbGV2ZWwwNS5zaFxuLi4vengyYzQvd2lyZWd1YXJkLWhzL3Rlc3RzL2JlbmNoLnNoXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODg0Mzk0OTN9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI2ZWYwYzQ1ZSIsInBhcmVudElkIjoiMWFlZGYzNWEiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjA3OjI0LjEwNFoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqUmV2aWV3aW5nIGNhcmdvIHNjcmlwdCBvcHRpb25zKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzMxOTJiMTQ4MTkxODdkYWEyZDRlNzFlYTg3MFwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTU1iTUZORlpsalVPT2F3YXFkYWM5c2Y2Z2JUZnU4OVNFbzNzVU1PZnM2WU52RlVwTVpoRnp4RTJmOW9pQlllczhEUkR0aDVOXzAtZUlQRktxNGJWYVJpUGRrSjdlUVJUbDR2YXAyaHZtYXpNSHdUQlZYSmp6eE54NjhzQmJCamJwV3ZXOW9OemNQa1oxQVFrM2E2dUtIYmRyZVRxRTdaOE03eUlGcjM0ckEwelh5MV9kUFJjSkZ2Q3VjcG5IalNKNThLTVFXaHdyZExQZlgzZGJaamFENlV3UnVIVlBtNUdnaUxiY2hLTnVxVWJIQ1pIX1h3X3BVc195MG8zQ3Z0M3Z3em82V2tfWVZvZHFyaUMyVGdmblctYVVZczloRk5PbjZMZFFrZHRWTFg4VlZKcG5VRnRRVHdzY2g2MjhfbXI2dVE5QlRhT1FoN3R3cnFiQTVUQmpmd052MjdZSHNHTjFVcThtNjZReGk2R2ZrWVZMOVlxazF6QTBMVHFNOTA2dnd3T3M4N1BUTElMemxGc0dGMDc2YVdDMmxicm5TRWQ1Z2RrYjk4V0xOTUQ2ekg3WjRaUFkzZUZsYW1BczVEaXZNM2lHWTFTSlNTVU56MmJtU05PSXJiMnFuS2pFQUttejlqMUZ0bTA5cjBrdC1pZEw2TkhyZ2JXUi1rcXNJcl9GMzBwOE91dHlxT2pxX0JCS2UxYWszZXBocXVtQ1dLM3M1Nm9FVGV0aFJuT0h2dU16bTNuZ3k3cmdIa1FOWHE1cXFOdnpidXhHaFllNUtZMnBydV9tYzZWTEpvcm5pZUl0SExqZmdOaldYS2Y3d2puUjhZeTBGTWVUTUF6VGRKZVJ3d1RzcGZUbG1Xa0FEajJVdUZEX20ydEx4WnM3dldsZWpCUmRQbmtrOUJHSWc2V0pmeFFQWktiTEpsVHhITWxRWVFJY0hMVmJGbjRCMmI0S2RvRHVPVE02bmpmVFVlRVdTOHRad2wxQy12MGs3SEJ0WGJVTFhkU1p3QnBMWW5xcUhrbng3LWt6OXhXWTl1RjdVU2Jod0hKbmVEbER0aS1CRGZRUmR6QzYxWF92WGFVcjktb2NTWEVhXzQwbFl1a3R4SzFjOXoyWHU3bEZCcndtX3F6Nm1DNHk4T1ZqVUluUDBVY0NiRmxsNUsxMk9zR0R5MGZZOFdERnpnS0xULU1oc1R4cFVLTE5maHJ3TWh5bm5GMWtHZERoMUJmTnZnVGxzU3dfcUlmRHBzbWRGMlVoOGVhejV5SUVnUHZMTEFXOEh0R2x5M0FVeWxoSlpmSGdFR0tXbURxZzRHUXZvT2dtLW83eDBXaGlCTE42dz1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlJldmlld2luZyBjYXJnbyBzY3JpcHQgb3B0aW9ucyoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9Wa0hOZmkzNnRwMkZPSWpHSjRMeUlWeTd8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMWJlZjdjODE5MWEzM2MzOTcxZjg2Mjg1OWYiLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiQ2FyZ28udG9tbCJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF95VERPU3Vpak1IU2x5dFh2aFh2bmhkQWh8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMWJlZjk0ODE5MTkzMWE2N2M4YjE1ZGYwYWUiLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoic3JjL21haW4ucnMifX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfNVJsa1E4c3QzdE8zN2ZWZG15a1ZjaEIzfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjMzFiZWY5YzgxOTFiMjk2MzUxZmNmN2ZlMTk5IiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6ImFsdC1yb290ZnMtaW5zdGFsbGVyL1JFQURNRSJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF85eTlrenU3Q2dRcHQ0dmFKU3BIb1R1Vkp8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMWJlZmE4ODE5MTgxMTAxYWQ0ZjU5ZTBmMWMiLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiYWx0LXJvb3Rmcy1pbnN0YWxsZXIvRVhUUkFfT1BUSU9OUyJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9aazdXRzFTYlk3TFlPdUx1cVJsdGRaR1h8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMWJlZmIwODE5MWFhNTAwM2VjZWVhOWE2YTMiLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiYWx0LXJvb3Rmcy1pbnN0YWxsZXIvU1VQUE9SVEVELUJPQVJEUyJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF81dHdaeDRuMmhxN2taTEJyZnVjQ1ZjYTl8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMWJlZmI4ODE5MTgzMjhhMjgzMzgxNDBiZDYiLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiYWx0LXJvb3Rmcy1pbnN0YWxsZXIvYWx0LXJvb3Rmcy1pbnN0YWxsZXIiLCJsaW1pdCI6MTAwMH19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0Ijo0Mzk0LCJvdXRwdXQiOjE1NiwiY2FjaGVSZWFkIjowLCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjEzLCJ0b3RhbFRva2VucyI6NDU1MCwiY29zdCI6eyJpbnB1dCI6MC4wMjE5NzAwMDAwMDAwMDAwMDMsIm91dHB1dCI6MC4wMDQ2OCwiY2FjaGVSZWFkIjowLCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wMjY2NTAwMDAwMDAwMDAwMDR9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODg0Mzk0OTQsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjMzE3ZDYzNDgxOTE5YzQ4Nzg0YWQ2YzVlNzczIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImYzNTQ1NDc0IiwicGFyZW50SWQiOiI2ZWYwYzQ1ZSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDc6MjQuMTA4WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9Wa0hOZmkzNnRwMkZPSWpHSjRMeUlWeTd8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMWJlZjdjODE5MWEzM2MzOTcxZjg2Mjg1OWYiLCJ0b29sTmFtZSI6InJlYWQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJbcGFja2FnZV1cbm5hbWUgPSBcImZsYXNoZXJcIlxudmVyc2lvbiA9IFwiMC4xLjBcIlxuZWRpdGlvbiA9IFwiMjAyNFwiXG5cbltkZXBlbmRlbmNpZXNdXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODg0NDQxMDh9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJkYzNmYjU0NiIsInBhcmVudElkIjoiZjM1NDU0NzQiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjA3OjI0LjEwOVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfeVRET1N1aWpNSFNseXRYdmhYdm5oZEFofGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjMzFiZWY5NDgxOTE5MzFhNjdjOGIxNWRmMGFlIiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiZm4gbWFpbigpIHtcbiAgICBwcmludGxuIShcIkhlbGxvLCB3b3JsZCFcIik7XG59XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODg0NDQxMDl9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI3NTE3MTM2NiIsInBhcmVudElkIjoiZGMzZmI1NDYiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjA3OjI0LjEwOVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfNVJsa1E4c3QzdE8zN2ZWZG15a1ZjaEIzfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjMzFiZWY5YzgxOTFiMjk2MzUxZmNmN2ZlMTk5IiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiVG9vbHMgZm9yIHdyaXRpbmcgcm9vdGZzIGFyY2hpdmVcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5hbHQtcm9vdGZzLWluc3RhbGxlclxuLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGlzIHNjcmlwdCB3aWxsIGF1dG9tYXRlIHRoZSBwcm9jZXNzIG9mIHByZXBhcmluZyBhbiBBTFQgTGludXhcbnJvb3RmcyBhcmNoaXZlIGZvciB1c2Ugd2l0aCB2YXJpb3VzIGhhcmR3YXJlIHRhcmdldHMuXG5cbiAtIFdyaXRlIHRoZSBzZWxlY3RlZCBhcmNoaXZlIHJvb3RmcyB0byBtZWRpYSAob3B0aW9uYWwpXG4gLSBjdXN0b21pemUgbWVkaWEgd2l0aCBwbGF0Zm9ybSBzcGVjaWZpYyBVLUJvb3QgZmlsZShzKVxuIC0gVXBkYXRlIFUtQm9vdCBmb3IgYW5vdGhlciBUYXJnZXRcblxuVG8gYWRkIGFkZGl0aW9uYWwgc3VwcG9ydCwgY3JlYXRlIGEgY29kZSBzbmlwcGV0IGZpbGVcbihiYXNoIHNjcmlwdCkgaW4gdGhlIFwiYm9hcmRzLmRcIiBzdWJkaXJlY3Rvcnkgd2l0aCB0aGUgY29tbWFuZHNcbm5lZWRlZCB0byB3cml0ZSBVLUJvb3QgZm9yIHRoZSB0YXJnZXQgYm9hcmQuXG5cblVzYWdlOiBleGFtaW5lIGBhbHQtcm9vdGZzLWluc3RhbGxlciAtLWhlbHBgIHRvIGdldCBtb3JlIGluZm9ybWF0aW9uLlxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg4NDQ0MTA5fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNTYxMWRlNmYiLCJwYXJlbnRJZCI6Ijc1MTcxMzY2IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDowNzoyNC4xMDlaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsXzl5OWt6dTdDZ1FwdDR2YUpTcEhvVHVWSnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzMxYmVmYTg4MTkxODExMDFhZDRmNTllMGYxYyIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiNERUZBVUxUX0tFUk5FTD02LjEyLjMzLTYuMTItYWx0MVxuI0ZBU1RfQk9PVD0xXG4jQk9PVF9USU1FT1VUPTBcbiMjIHBhdGggdG8gZGlyZWN0b3J5IHdpdGggKi5ycG1cbiNSUE1fSU5TVEFMTD0vcGF0aC90by9kaXJuYW1lXG4jIyBwYXRoIHRvIGZpbGUgY29udGFpbiBwYXNzd29yZCBoYXNoXG4jUk9PVF9QQVNTV0Q9L3BhdGgvdG8vaGFzaF9maWxlXG4jVVNFUl9QQVNTV0Q9L3BhdGgvdG8vaGFzaF9maWxlXG4jVVNFUl9OQU1FPXVzZXJcbiMjIHVzZSAvZXRjL2luaXRyZC5tay5vZW0gaW4gcm9vdGZzOlxuI0lOSVRSRF9PRU09MVxuI1VCT09UPS9wYXRoL3RvL2V4dGVybmFsX3Vib290X2RpcmVjdG9yeVxuI0FERE9OPS9wYXRoL3RvL2FkZG9uLnRhclxuI1NZU0NPTj10dHlTMiwxNTAwMDAwbjhcbiMjIGlmIG9uZSBvZiB0aGUgRFRCXyBvcHRpb25zIGFyZSB1c2VkLCB0aGUgb3RoZXIgdHdvIG5lZWQgdG8gYmUgc2V0IHRvb1xuI0RUQl9GSUxFPS9wYXRoL3RvL2R0Yl9maWxlXG4jRFRCX1ZFTkRPUj12ZW5kb3JfbmFtZSAoZS5nLiByb2NrY2hpcClcbiNEVEJfS1ZFUj1rZXJuZWwudmVyc2lvbiAoZS5nLiA2LjEyKVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg4NDQ0MTA5fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMjIwYWI0NmMiLCJwYXJlbnRJZCI6IjU2MTFkZTZmIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDowNzoyNC4xMDlaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX1prN1dHMVNiWTdMWU91THVxUmx0ZFpHWHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzMxYmVmYjA4MTkxYWE1MDAzZWNlZWE5YTZhMyIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkFsbFdpbm5lciBEZXZpY2VzIChhYXJjaDY0KTpcbmE2NC1vbGludXhpbm9cdFx0XHRvcmFuZ2VwaV9wcmltZVxuYTY0LW9saW51eGluby1lbW1jXHRcdG9yYW5nZXBpX3dpblxuYW1hcnVsYV9hNjRfcmVsaWNcdFx0b3JhbmdlcGlfemVybzJcbmFuYmVybmljX3JnMzV4eF9oNzAwXHRcdG9yYW5nZXBpX3plcm8yd1xuYmFuYW5hcGlfbTJfcGx1c19oNVx0XHRvcmFuZ2VwaV96ZXJvM1xuYmFuYW5hcGlfbTY0XHRcdFx0b3JhbmdlcGlfemVyb19wbHVzXG5iZWVsaW5rX2dzMVx0XHRcdG9yYW5nZXBpX3plcm9fcGx1czJcbmVtbGlkX25ldXRpc19uNV9kZXZib2FyZFx0cGluZTY0LWx0c1xubGlicmV0ZWNoX2FsbF9oM19jY19oNVx0XHRwaW5lNjRfcGx1c1xubGlicmV0ZWNoX2FsbF9oM19pdF9oNVx0XHRwaW5lYm9va1xubGlicmV0ZWNoX2FsbF9oNV9jY19oNVx0XHRwaW5lX2g2NFxubGljaGVlX3J2XHRcdFx0cGluZXBob25lXG5uYW5vcGlfYTY0XHRcdFx0cGluZXRhYlxubmFub3BpX25lbzJcdFx0XHRyZXBrYV9waTNcbm5hbm9waV9uZW9fcGx1czJcdFx0cmVwa2FfcGk0XG5uYW5vcGlfcjFzX2g1XHRcdFx0c29waW5lX2Jhc2Vib2FyZFxubmV6aGFcdFx0XHRcdHRhbml4X3R4MVxub2NlYW5pY181MjA1XzVpbm1mZFx0XHR0YW5peF90eDZcbm9yYW5nZXBpXzNcdFx0XHR0ZXJlc19pXG5vcmFuZ2VwaV9saXRlMlx0XHRcdHRyYW5zcGVlZC04azYxOC10XG5vcmFuZ2VwaV9vbmVfcGx1c1x0XHR4OTZfbWF0ZVxub3JhbmdlcGlfcGMyXG5cbkFsbFdpbm5lciBEZXZpY2VzIChyaXNjdjY0KTpcbmxpY2hlZV9ydlxubmV6aGFcblxuUm9ja2NoaXAgRGV2aWNlcyAoYWFyY2g2NCk6XG5hbmJlcm5pYy1yZzU1Mi1yazMzOTlcdFx0b3JhbmdlcGktM2ItcmszNTY2XG5hbmJlcm5pYy1yZ3h4My1yazM1NjZcdFx0b3JhbmdlcGktNC1sdHMtcmszMzk5XG5hdGItdXNwZDIwa1x0XHRcdG9yYW5nZXBpLTQtcmszMzk5XG5icGktcjItcHJvLXJrMzU2OFx0XHRvcmFuZ2VwaS01LW1heC1yazM1ODhcbmNocm9tZWJvb2tfYm9iXHRcdFx0b3JhbmdlcGktNS1wbHVzLXJrMzU4OFxuY2hyb21lYm9va19rZXZpblx0XHRvcmFuZ2VwaS01LXJrMzU4OHNcbmNtMzU4OC1uYXMtcmszNTg4XHRcdG9yYW5nZXBpLTUtdWx0cmEtcmszNTg4XG5jb29scGktNGItcmszNTg4c1x0XHRvcmFuZ2VwaS1yMS1wbHVzLWx0cy1yazMzMjhcbmNvb2xwaS1jbTUtZXZiLXJrMzU4OFx0XHRvcmFuZ2VwaS1yMS1wbHVzLXJrMzMyOFxuY29vbHBpLWNtNS1nZW5ib29rLXJrMzU4OFx0b3JhbmdlcGktcmszMzk5XG5lYWlkay02MTAtcmszMzk5XHRcdHBpbmVib29rLXByby1yazMzOTlcbmV2Yi1weDMwXHRcdFx0cGluZXBob25lLXByby1yazMzOTlcbmV2Yi1yazMzMjhcdFx0XHRwaW5ldGFiMi1yazM1NjZcbmV2Yi1yazMzOTlcdFx0XHRwb3draWRkeS14MzVzLXJrMzU2NlxuZXZiLXJrMzU2OFx0XHRcdHBvd2tpZGR5LXg1NS1yazM1NjZcbmV2Yi1yazM1ODhcdFx0XHRwdW1hLXJrMzM5OVxuZmljdXMtcmszMzk5XHRcdFx0cHgzMC1jb3JlLWN0b3VjaDItb2YxMC1weDMwXG5maXJlZmx5LXB4MzBcdFx0XHRweDMwLWNvcmUtY3RvdWNoMi1weDMwXG5maXJlZmx5LXJrMzM5OVx0XHRcdHB4MzAtY29yZS1lZGltbTIuMi1weDMwXG5nYW1lZm9yY2UtYWNlLXJrMzU4OHNcdFx0cW5hcC10czQzMy1yazM1NjhcbmdlbmVyaWMtcmszNTY4XHRcdFx0cXVhcnR6NjQtYS1yazM1NjZcbmdlbmVyaWMtcmszNTg4XHRcdFx0cXVhcnR6NjQtYi1yazM1NjZcbmphZ3Vhci1yazM1ODhcdFx0XHRxdWFydHpwcm82NC1yazM1ODhcbmtoYWRhcy1lZGdlMi1yazM1ODhzXHRcdHJhZHhhLWNtMy1pby1yazM1NjZcbmtoYWRhcy1lZGdlLWNhcHRhaW4tcmszMzk5XHRyYWR4YS1lMjUtcmszNTY4XG5raGFkYXMtZWRnZS1yazMzOTlcdFx0cmFkeGEtemVyby0zLXJrMzU2Nlxua2hhZGFzLWVkZ2Utdi1yazMzOTlcdFx0cmluZ25lY2stcHgzMFxubGNrZmItdHNwaS1yazM1NjZcdFx0cm9jLWNjLXJrMzMyOFxubGVlei1yazMzOTlcdFx0XHRyb2NrLTNhLXJrMzU2OFxubHViYW5jYXQtMi1yazM1NjhcdFx0cm9jay0zYi1yazM1Njhcbm5hbm9wYy10NC1yazMzOTlcdFx0cm9jay0zYy1yazM1NjZcbm5hbm9wYy10Ni1yazM1ODhcdFx0cm9jay00Yy1wbHVzLXJrMzM5OVxubmFub3BpLW00LTJnYi1yazMzOTlcdFx0cm9jay00c2UtcmszMzk5XG5uYW5vcGktbTRiLXJrMzM5OVx0XHRyb2NrNWEtcmszNTg4c1xubmFub3BpLW00LXJrMzM5OVx0XHRyb2NrNWItcmszNTg4XG5uYW5vcGktbmVvNC1yazMzOTlcdFx0cm9jay01Yy1yazM1ODhzXG5uYW5vcGktcjJjLXBsdXMtcmszMzI4XHRcdHJvY2stNS1pdHgtcmszNTg4XG5uYW5vcGktcjJjLXJrMzMyOFx0XHRyb2NrNjQtcmszMzI4XG5uYW5vcGktcjJzLXBsdXMtcmszMzI4XHRcdHJvY2s5NjAtcmszMzk5XG5uYW5vcGktcjJzLXJrMzMyOFx0XHRyb2NrLXBpLTRjLXJrMzM5OVxubmFub3BpLXIzcy1yazM1NjZcdFx0cm9jay1waS00LXJrMzM5OVxubmFub3BpLXI0cy1yazMzOTlcdFx0cm9jay1waS1lLXJrMzMyOFxubmFub3BpLXI1Yy1yazM1NjhcdFx0cm9jay1waS1lLXYzLXJrMzMyOFxubmFub3BpLXI1cy1yazM1NjhcdFx0cm9jay1waS1uMTAtcmszMzk5cHJvXG5uYW5vcGktcjZjLXJrMzU4OHNcdFx0cm9ja3BybzY0LXJrMzM5OVxubmFub3BpLXI2cy1yazM1ODhzXHRcdHJvYy1wYy1tZXp6YW5pbmUtcmszMzk5XG5uZXU2YS1pby1yazM1ODhcdFx0XHRyb2MtcGMtcmszMzk5XG5uZXU2Yi1pby1yazM1ODhcdFx0XHRzaWdlNy1yazM1ODhcbm5vdmEtcmszNTg4c1x0XHRcdHNvcXVhcnR6LWJsYWRlLXJrMzU2NlxubnAtNTA0YS1yazM1NjhcdFx0XHRzb3F1YXJ0ei1jbTQtcmszNTY2XG5vZHJvaWQtZ28yXHRcdFx0c29xdWFydHotbW9kZWwtYS1yazM1NjZcbm9kcm9pZC1tMS1yazM1NjhcdFx0dGlnZXItcmszNTg4XG5vZHJvaWQtbTFzLXJrMzU2Nlx0XHR0b3licmljay1yazM1ODhcbm9kcm9pZC1tMi1yazM1ODhzXHRcdHR1cmluZy1yazEtcmszNTg4XG5cblNpRml2ZSBEZXZpY2VzIChyaXNjdjY0KTpcbiBzaWZpdmVfdW5sZWFzaGVkXG4gc2lmaXZlX3VubWF0Y2hlZFxuXG5TdGFyRml2ZSBEZXZpY2VzIChyaXNjdjY0KTpcbiBzdGFyZml2ZV92aXNpb25maXZlMlxuIHBpbmU2NF9zdGFyNjRcblxuSzF4IERldmljZXMgKHJpc2N2NjQpOlxuIG9yYW5nZXBpLXJ2MlxuIGJhbmFuYXBpLWYzXG4gbWlsa3YtanVwaXRlclxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg4NDQ0MTA5fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNzU5MDEwYWMiLCJwYXJlbnRJZCI6IjIyMGFiNDZjIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDowNzoyNC4xMDlaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsXzV0d1p4NG4yaHE3a1pMQnJmdWNDVmNhOXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzMxYmVmYjg4MTkxODMyOGEyODMzODE0MGJkNiIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiMhL2Jpbi9iYXNoXG4jICB2aW06c3c9ODpub2V0XG4jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAgR1BMLTIuMC1vci1sYXRlclxuI1xuIyByb290ZnMgaW5zdGFsbGVyIGZvciBBTFQgTGludXhcbiMgQ3VycmVudCB2ZXJzaW9uXG5WRVJTSU9OPTAuNy40XG5cbiMgVmFyaWFibGVcbkVYVDQ9MEZDNjNEQUYtODQ4My00NzcyLThFNzktM0Q2OUQ4NDc3REU0XG5ERUZBVUxUX0VYVDRfT1BUSU9OUz1cIi1tIDUgLWIgNDA5NiAtaSA4MTkyIC1JIDI1NlwiXG5UTVBST09UPVxuWyAtbiBcIiRUTVBcIiBdIHx8IFRNUD0vdG1wXG5QUk9HTkFNRT1cIiR7MCMjKi99XCJcbnVuc2V0IFJPT1RQQVJUX1VJRFxuXG4jIG9uZSBNZWJpYnl0ZSA9IDJeMjBcbk1CPTEwNDg1NzZcblxuIyB1c2FnZSBtZXNzYWdlXG51c2FnZSgpIHtcblx0ZWNobyBcIlxuVXNhZ2U6ICRQUk9HTkFNRSAtLXRhcmdldD1UQVJHRVQgPC0tcm9vdGZzPVJPT1RGUyB8IC0taW1hZ2UtaW49SU1BR0U+IDwtLW1lZGlhPURFVklDRSB8IC0taW1hZ2Utb3V0PUZJTEU+IFtvcHRpb25zXVxuXG5PcHRpb25zOlxuICAgIC0tdGFyZ2V0IFRBUkdFVCAgICAgIC0gdGFyZ2V0IGJvYXJkXG4gICAgLS1leHRyYS1vcHRpb25zICAgICAgLSBwYXRoIHRvIGZpbGUgd2l0aCBleHRyYSBvcHRpb25zIChzZWUgZXh0cmEtb3B0aW9ucylcbiAgICAtLWVmaSAgICAgICAgICAgICAgICAtIGFkZCBFRkkgcGFydGl0aW9uLCBzZXQgcGFydGl0aW9uIHRhYmxlIGdwdFxuICAgIC0tZWZpLW1iciAgICAgICAgICAgIC0gYWRkIEVGSSBwYXJ0aXRpb24sIHNldCBwYXJ0aXRpb24gdGFibGUgbXNkb3NcbiAgICAtLWJvb3RwYXJ0ICAgICAgICAgICAtIGFkZCBib290IHBhcnRpdGlvblxuICAgIC0tcm9vdC1mc3R5cGUgVFlQRSAgIC0gc3BlY2lmeSByb290IHBhcnRpdGlvbiBmaWxlc3lzdGVtXG4gICAgLS1yb290LWZzLW9wdCBPUFRTVFIgLSByb290IGZpbGVzeXN0ZW0gb3B0aW9uc1xuICAgIC0tdm5jIDEgICAgICAgICAgICAgIC0gZW5hYmxlIHZuYyBtb2RlIGZvciBhbHRlcmF0b3Itc2V0dXBcbiAgICAtLXZuYyAwICAgICAgICAgICAgICAtIGRpc2FibGUgdm5jIG1vZGUgZm9yIGFsdGVyYXRvci1zZXR1cFxuXG4gICAgLS1yb290ZnMgUk9PVEZTICAgICAgLSBhcmNoaXZlIHJvb3RmcyBmaWxlIG5hbWVcbiAgICAtLWltYWdlLWluIElNQUdFICAgICAtIGltYWdlIGZpbGUgbmFtZSAoaW1nfGltZy54eilcblxuICAgIC0tbWVkaWEgREVWSUNFICAgICAgIC0gbWVkaWEgZGV2aWNlIGZpbGUgKC9kZXYvW3NkWHxtbWNibGtYXSlcbiAgICAtLWltYWdlLW91dCBGSUxFICAgICAtIG91dCBpbWFnZSBmaWxlXG5cbiAgICAtLWx1a3MgICAgICAgICAgICAgICAtIGVuY3J5cHQgcm9vdCBwYXJ0aXRpb25cbiAgICAtLWx1a3Mtb3B0IE9QVFNUUiAgICAtIG9wdGlvbnMgZm9yIGx1a3MgY3JlYXRpb25cblxuICAgIC0tYWRkY29uc29sZSAgICAgICAgIC0gQWRkIHN5c3RlbSBzZXJpYWwgY29uc29sZVxuXG4gICAgLS1pbWFnZS1zaXplIFNJWkUgICAgLSBzaXplIG91dCBpbWFnZSBmaWxlIChNaUIpXG4gICAgLS1yZXNpemUgICAgICAgICAgICAgLSBSZXNpemUgUk9PVCBwYXJ0aXRpb25cbiAgICAtLXN1cHBvcnRlZCAgICAgICAgICAtIExpc3Qgb2Ygc3VwcG9ydGVkIGhhcmR3YXJlXG4gICAgLS12ZXJzaW9uICAgICAgICAgICAgLSBEaXNwbGF5IHZlcnNpb24gYW5kIGV4aXRcbiAgICAtLWRlYnVnICAgICAgICAgICAgICAtIFByaW50IGRlYnVnIGluZm8sIHBhc3MgaXQgYXMgZmlyc3QgYXJndW1lbnRcbiAgICAtLXN0ZG91dCAgICAgICAgICAgICAtIERvbid0IHVzZSBsb2cgZmlsZSwgcHV0IGV2ZXJ5dGhpbmcgdG8gc3Rkb3V0XG4gICAgLS1sb2c9RklMRSAgICAgICAgICAgLSBMb2cgZmlsZSAoZGVmYXVsdCAkTE9HX0ZJTEUpXG4gICAgLXkgICAgICAgICAgICAgICAgICAgLSBBc3N1bWVzIHllcywgd2lsbCBub3Qgd2FpdCBmb3IgY29uZmlybWF0aW9uXG5cbkV4YW1wbGU6ICRQUk9HTkFNRSAtLXJvb3RmcyByZWd1bGFyLWx4cXQtMjAxOTAyMTMtYWFyY2g2NC50YXIueHogLS10YXJnZXQgb3JhbmdlcGlfcHJpbWUgLS1tZWRpYSAvZGV2L21tY2JsazBcblxuVXBkYXRlIFUtQm9vdCBmb3IgYW5vdGhlciBUYXJnZXRcblVwZGF0ZSB0byBhIG5ldyB1LWJvb3QgZnJvbSBhIGxvY2FsIGhvc3QgaW5zdGFsbC5cblxuRXhhbXBsZTogJFBST0dOQU1FIC0tdGFyZ2V0IG9yYW5nZXBpX3ByaW1lIC0tbWVkaWEgL2Rldi9tbWNibGswXG5cblwiXG59XG5cbnByZV9leGl0KCkge1xuXHRsb2NhbCByYz0kP1xuXHR0cmFwIC0gRVhJVFxuXHRzeW5jXG5cblx0dW5tb3VudF9jaHJvb3Rcblx0dW5tb3VudF9wYXJ0aXRpb25cblxuXHRpZiBbIC1uIFwiJElNQUdFX09VVFwiIC1hIC1uIFwiJE1FRElBXCIgXTsgdGhlblxuXHRcdGtwYXJ0eCAtZCAtcyBcIiRNRURJQVwiIHx8IHtcblx0XHRcdHNsZWVwIDEwXG5cdFx0XHRrcGFydHggLWQgLXMgLXYgXCIkTUVESUFcIlxuXHRcdH1cblx0XHRsb3NldHVwIC0tZGV0YWNoIFwiJE1FRElBXCJcblx0Zmlcblx0ZXhpdCAkcmNcbn1cblxuZmluYWxfZXhpdCgpIHtcblx0cHJpbnRuICdJbnN0YWxsYXRpb24gQ29tcGxldGUhJ1xuXHRpZiBbIC1uIFwiJElNQUdFX09VVFwiIF07IHRoZW5cblx0XHRwcmludG4gJ0ltYWdlIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5Lidcblx0ZWxzZVxuXHRcdHByaW50biAnSW5zZXJ0IGludG8geW91ciBkZXZpY2UgYW5kIHRyeSBib290Lidcblx0XHRwcmludG4gJ0dvb2QgbHVjayEhISdcblx0Zmlcblx0ZXhpdCAwXG59XG5cbkRJUj1cIiQoZGlybmFtZSAkMClcIlxuLiBzaGVsbC1lcnJvciAyPi9kZXYvbnVsbCB8fCAuICRESVIvc2hlbGwtZXJyb3IgMj4vZGV2L251bGxcbi4gc2hlbGwtdGVybWluZm8gMj4vZGV2L251bGwgfHwgLiAkRElSL3NoZWxsLXRlcm1pbmZvIDI+L2Rldi9udWxsXG4uIHNoZWxsLWNvbmZpZyAyPi9kZXYvbnVsbCB8fCAuICRESVIvc2hlbGwtY29uZmlnIDI+L2Rldi9udWxsXG5cbiMgU2V0IHNvbWUgZ2xvYmFsIHZhcmlhYmxlcyBmb3IgdGhlIGNvbW1hbmQgZGlyZWN0b3J5LCB0YXJnZXQgYm9hcmQgZGlyZWN0b3J5LFxuIyBhbmQgdmFsaWQgdGFyZ2V0cy5cblsgLWQgXCIke0RJUn0vYm9hcmRzLmRcIiBdIHx8XG5cdERJUj0vdXNyL3NoYXJlL2FsdC1yb290ZnMtaW5zdGFsbGVyXG5bIC1kIFwiJHtESVJ9L2JvYXJkcy5kXCIgXSB8fFxuXHRmYXRhbCBcImVycm9yOiBkaXJlY3RvcnkgYm9hcmRzLmQgbm90IGV4aXN0XCJcbkJPQVJERElSPVwiJHtESVJ9L2JvYXJkcy5kXCJcblNPQ1NESVI9XCIke0RJUn0vc29jcy5kXCJcblxuIyBtaXNzaW5nIG9yIHdyb25ncyBhcmd1bWVudHNcblsgJCMgLWdlIDEgXSAmJlxuVE1QQVJHUz1cIiQoZ2V0b3B0IC1uIFwiJDBcIiAtbyBoeSAtbCBhZGRjb25zb2xlLGRlYnVnLGhlbHAsXFxcbmVmaSxlZmktbWJyLGJvb3RwYXJ0LHJvb3QtZnN0eXBlOixyb290LWZzLW9wdDosdGFyZ2V0Oixyb290ZnM6LFxcXG5tZWRpYTosaW1hZ2UtaW46LGltYWdlLW91dDosbHVrcyxsdWtzLW9wdDosaW1hZ2Utc2l6ZToscmVzaXplLHN1cHBvcnRlZCxcXFxudmVyc2lvbixzdGRvdXQsbG9nOix2bmMsXFxcbmV4dHJhLW9wdGlvbnM6IC0tIFwiJEBcIilcIlxuaWYgWyAkPyAtbmUgMCBdOyB0aGVuXG5cdHVzYWdlID4mMlxuXHRleGl0IDFcbmZpXG5cbmV2YWwgc2V0IC0tIFwiJFRNUEFSR1NcIlxuIyBjaGVjayB0aGUgYXJnc1xud2hpbGUgOjsgZG9cblx0Y2FzZSAkMSBpblxuXHRcdC0tKVxuXHRcdFx0c2hpZnQ7IGJyZWFrXG5cdFx0XHQ7O1xuXHRcdC0tYWRkY29uc29sZSlcblx0XHRcdENPTlNPTEU9MVxuXHRcdFx0Oztcblx0XHQtLWRlYnVnKVxuXHRcdFx0c2V0IC14XG5cdFx0XHQ7O1xuXHRcdC1ofC0taGVscClcblx0XHRcdHVzYWdlOyBleGl0IDBcblx0XHRcdDs7XG5cdFx0LS10YXJnZXQpXG5cdFx0XHRzaGlmdDsgVEFSR0VUPVwiJDFcIlxuXHRcdFx0Oztcblx0XHQtLWV4dHJhLW9wdGlvbnMpXG5cdFx0XHRzaGlmdDsgRVhUUkFfT1BUSU9OUz1cIiQxXCJcblx0XHRcdDs7XG5cdFx0LS1lZmkpXG5cdFx0XHRFRkk9XCIxXCJcblx0XHRcdE1FRElBVEFCTEU9Z3B0XG5cdFx0XHQ7O1xuXHRcdC0tZWZpLW1icilcblx0XHRcdEVGST1cIjFcIlxuXHRcdFx0TUVESUFUQUJMRT1tc2Rvc1xuXHRcdFx0Oztcblx0XHQtLWx1a3Mtb3B0KVxuXHRcdFx0c2hpZnQ7IExVS1NfT1BUPVwiJDFcIlxuXHRcdFx0Oztcblx0XHQtLWx1a3MpXG5cdFx0XHRMVUtTPVwiMVwiXG5cdFx0XHQ7O1xuXHRcdC0tYm9vdHBhcnQpXG5cdFx0XHRBRERfQk9PVFBBUlQ9XCIxXCJcblx0XHRcdDs7XG5cdFx0LS1yb290LWZzdHlwZSlcblx0XHRcdHNoaWZ0OyBST09UX0ZTVFlQRT1cIiQxXCJcblx0XHRcdDs7XG5cdFx0LS1yb290LWZzLW9wdClcblx0XHRcdHNoaWZ0OyBST09UX0ZTX09QVD1cIiQxXCJcblx0XHRcdDs7XG5cdFx0LS12bmMpXG5cdFx0XHRzaGlmdDsgVk5DPVwiJDFcIlxuXHRcdFx0Oztcblx0XHQtLXJvb3Rmcylcblx0XHRcdHNoaWZ0OyBST09URlM9XCIkMVwiXG5cdFx0XHQ7O1xuXHRcdC0taW1hZ2UtaW4pXG5cdFx0XHRzaGlmdDsgSU1BR0U9XCIkMVwiXG5cdFx0XHQ7O1xuXHRcdC0tbWVkaWEpXG5cdFx0XHRzaGlmdDsgTUVESUE9XCIkMVwiXG5cdFx0XHQ7O1xuXHRcdC0taW1hZ2Utb3V0KVxuXHRcdFx0c2hpZnQ7IElNQUdFX09VVD1cIiQxXCJcblx0XHRcdDs7XG5cdFx0LS1pbWFnZS1zaXplKVxuXHRcdFx0c2hpZnQ7IElNQUdFX1NJWkU9XCIkMVwiXG5cdFx0XHQ7O1xuXHRcdC0tcmVzaXplKVxuXHRcdFx0UkVTSVpFPVwiMVwiXG5cdFx0XHQ7O1xuXHRcdC0tc3VwcG9ydGVkKVxuXHRcdFx0Y2F0IFwiJERJUi9TVVBQT1JURUQtQk9BUkRTXCJcblx0XHRcdGV4aXQgMFxuXHRcdFx0Oztcblx0XHQtLXZlcnNpb24pXG5cdFx0XHRlY2hvIFwiJFBST0dOQU1FLSRWRVJTSU9OXCJcblx0XHRcdGV4aXQgMFxuXHRcdFx0Oztcblx0XHQtLWxvZylcblx0XHRcdHNoaWZ0XG5cdFx0XHRMT0dfRklMRT1cIiQocmVhZGxpbmsgLWYgXCIkMVwiKVwiXG5cdFx0XHQ7O1xuXHRcdC0tc3Rkb3V0KVxuXHRcdFx0TE9HX01PREU9XCJjb25cIlxuXHRcdFx0Oztcblx0XHQteSlcblx0XHRcdE5PQVNLPTFcblx0XHRcdDs7XG5cdFx0Kilcblx0XHRcdGVjaG8gXCJJbnZhbGlkIGFyZ3VtZW50ICQxXCJcblx0XHRcdHVzYWdlID4mMlxuXHRcdFx0ZXhpdCAxXG5cdFx0XHQ7O1xuXHRlc2FjXG5cdHNoaWZ0XG5kb25lXG5cbmlmIFsgLW4gXCIkVEFSR0VUXCIgXTsgdGhlblxuXHQjIGNoZWNrIGJvYXJkIHNjcmlwdCB0YXJnZXRcblx0aWYgWyAhIC1zICBcIiRCT0FSRERJUi8kVEFSR0VUXCIgXTsgdGhlblxuXHRcdGZhdGFsIFwiZXJyb3I6ICRUQVJHRVQgaXMgbm90IHN1cHBvcnRlZFwiXG5cdGZpXG5maVxuXG5pZiBbIC16ICRST09UX0ZTVFlQRSBdOyB0aGVuXG5cdFJPT1RfRlNUWVBFPWV4dDRcbmZpXG5cbmlmIFsgLXogXCIkUk9PVF9GU19PUFRcIiBdOyB0aGVuXG5cdGlmIFsgXCIkUk9PVF9GU1RZUEVcIiA9IGV4dDQgXTsgdGhlblxuXHRcdFJPT1RfRlNfT1BUPSRERUZBVUxUX0VYVDRfT1BUSU9OU1xuXHRmaVxuZmlcblxuaWYgWyAkUk9PVF9GU1RZUEUgPSBcImYyZnNcIiBdOyB0aGVuXG5cdCMgVS1Cb290IGRvZXNuJ3Qgc3VwcG9ydCBmMmZzLCBzbyAvYm9vdFxuXHQjIHdpdGggY29tcGF0aWJsZSBmaWxlc3lzdGVtIGlzIG5lZWRlZC5cblx0QUREX0JPT1RQQVJUPVwiMVwiXG5cdCMgRm9yY2Ugb3ZlcndyaXRlIGV4aXN0aW5nIGZpbGVzeXN0ZW1cblx0Uk9PVF9GU19PUFQ9JFJPT1RfRlNfT1BUXCIgLWZcIlxuZmlcblxuaWYgWyAtbiBcIiRMVUtTX09QVFwiIF07IHRoZW5cblx0TFVLUz1cIjFcIlxuZmlcblxuaWYgWyAtbiBcIiRMVUtTXCIgXTsgdGhlblxuXHQjIExVS1MgcmVxdWlyZXMgc2VwYXJhdGUgL2Jvb3QgcGFydGl0aW9uXG5cdEFERF9CT09UUEFSVD1cIjFcIlxuZmlcblxuaWYgWyAtbiBcIiRFWFRSQV9PUFRJT05TXCIgXTsgdGhlblxuXHRbIC1zIFwiJEVYVFJBX09QVElPTlNcIiBdIHx8IGZhdGFsIFwiZXJyb3I6IGZpbGUgJEVYVFJBX09QVElPTlMgZG9lcyBub3QgZXhpc3QhISFcIlxuXHRERUZBVUxUX0tFUk5FTD1cIiQoc2hlbGxfY29uZmlnX2dldCBcIiRFWFRSQV9PUFRJT05TXCIgXCJERUZBVUxUX0tFUk5FTFwiKVwiXG5cdEZBU1RfQk9PVD1cIiQoc2hlbGxfY29uZmlnX2dldCBcIiRFWFRSQV9PUFRJT05TXCIgXCJGQVNUX0JPT1RcIilcIlxuXHRCT09UX1RJTUVPVVQ9XCIkKHNoZWxsX2NvbmZpZ19nZXQgXCIkRVhUUkFfT1BUSU9OU1wiIFwiQk9PVF9USU1FT1VUXCIpXCJcblx0UlBNX0lOU1RBTEw9XCIkKHNoZWxsX2NvbmZpZ19nZXQgXCIkRVhUUkFfT1BUSU9OU1wiIFwiUlBNX0lOU1RBTExcIilcIlxuXHRST09UX1BBU1NXRD1cIiQoc2hlbGxfY29uZmlnX2dldCBcIiRFWFRSQV9PUFRJT05TXCIgXCJST09UX1BBU1NXRFwiKVwiXG5cdFVTRVJfUEFTU1dEPVwiJChzaGVsbF9jb25maWdfZ2V0IFwiJEVYVFJBX09QVElPTlNcIiBcIlVTRVJfUEFTU1dEXCIpXCJcblx0VVNFUl9OQU1FPVwiJChzaGVsbF9jb25maWdfZ2V0IFwiJEVYVFJBX09QVElPTlNcIiBcIlVTRVJfTkFNRVwiKVwiXG5cdElOSVRSRF9PRU09XCIkKHNoZWxsX2NvbmZpZ19nZXQgXCIkRVhUUkFfT1BUSU9OU1wiIFwiSU5JVFJEX09FTVwiKVwiXG5cdFVCT09UPVwiJChzaGVsbF9jb25maWdfZ2V0IFwiJEVYVFJBX09QVElPTlNcIiBcIlVCT09UXCIpXCJcblx0QURET049XCIkKHNoZWxsX2NvbmZpZ19nZXQgXCIkRVhUUkFfT1BUSU9OU1wiIEFERE9OKVwiXG5cdFNZU0NPTj1cIiQoc2hlbGxfY29uZmlnX2dldCBcIiRFWFRSQV9PUFRJT05TXCIgXCJTWVNDT05cIilcIlxuXHREVEJfRklMRT1cIiQoc2hlbGxfY29uZmlnX2dldCBcIiRFWFRSQV9PUFRJT05TXCIgXCJEVEJfRklMRVwiKVwiXG5cdERUQl9WRU5ET1I9XCIkKHNoZWxsX2NvbmZpZ19nZXQgXCIkRVhUUkFfT1BUSU9OU1wiIFwiRFRCX1ZFTkRPUlwiKVwiXG5cdERUQl9LVkVSPVwiJChzaGVsbF9jb25maWdfZ2V0IFwiJEVYVFJBX09QVElPTlNcIiBcIkRUQl9LVkVSXCIpXCJcbmZpXG5cbiMgZ2V0dGluZyBmdWxsIFBBVEhcblsgLW4gXCIkUk9PVEZTXCIgXSAmJiBST09URlNfUEFUSD1cIiQocmVhZGxpbmsgLWYgXCIkUk9PVEZTXCIpXCJcblsgLW4gXCIkSU1BR0VcIiBdICYmIElNQUdFX1BBVEg9XCIkKHJlYWRsaW5rIC1mIFwiJElNQUdFXCIpXCJcblsgLW4gXCIkUk9PVF9QQVNTV0RcIiBdICYmIFJPT1RfUEFTU1dEX1BBVEg9XCIkKHJlYWRsaW5rIC1mIFwiJFJPT1RfUEFTU1dEXCIpXCJcblsgLW4gXCIkVVNFUl9QQVNTV0RcIiBdICYmIFVTRVJfUEFTU1dEX1BBVEg9XCIkKHJlYWRsaW5rIC1mIFwiJFVTRVJfUEFTU1dEXCIpXCJcblsgLW4gXCIkQURET05cIiBdICYmIEFERE9OX1BBVEg9XCIkKHJlYWRsaW5rIC1mIFwiJEFERE9OXCIpXCJcblsgLW4gXCIkVUJPT1RcIiBdICYmIFVCT09UX1BBVEg9XCIkKHJlYWRsaW5rIC1mIFwiJFVCT09UXCIpXCJcblsgLW4gXCIkUlBNX0lOU1RBTExcIiBdICYmIFJQTV9JTlNUQUxMX1BBVEg9XCIkKHJlYWRsaW5rIC1mIFwiJFJQTV9JTlNUQUxMXCIpXCJcblsgLW4gXCIkRFRCX0ZJTEVcIiBdICYmIERUQl9GSUxFX1BBVEg9XCIkKHJlYWRsaW5rIC1mIFwiJERUQl9GSUxFXCIpXCJcblxuIyBjaGVja2luZyBmaWxlcyBleGlzdGluZ1xuaWYgWyAtbiBcIiRST09URlNcIiBdOyB0aGVuXG5cdFsgLWYgXCIkUk9PVEZTX1BBVEhcIiBdIHx8IGZhdGFsIFwiZXJyb3I6IFJPT1RGUyBkb2VzIG5vdCBleGlzdFwiXG5cdFJPT1RGUz1cIiRST09URlNfUEFUSFwiXG5maVxuaWYgWyAtbiBcIiRJTUFHRVwiIF07IHRoZW5cblx0WyAtZiBcIiRJTUFHRV9QQVRIXCIgXSB8fCBmYXRhbCBcImVycm9yOiBJTUFHRSBkb2VzIG5vdCBleGlzdFwiXG5cdElNQUdFPVwiJElNQUdFX1BBVEhcIlxuZmlcbmlmIFsgLW4gXCIkUk9PVF9QQVNTV0RcIiBdOyB0aGVuXG5cdFsgLWYgXCIkUk9PVF9QQVNTV0RfUEFUSFwiIF0gfHwgZmF0YWwgXCJlcnJvcjogZmlsZSAkUk9PVF9QQVNTV0QgZG9lcyBub3QgZXhpc3RcIlxuXHRST09UX1BBU1NXRD1cIiRST09UX1BBU1NXRF9QQVRIXCJcbmZpXG5pZiBbIC1uIFwiJFVTRVJfUEFTU1dEXCIgXTsgdGhlblxuXHRbIC1mIFwiJFVTRVJfUEFTU1dEX1BBVEhcIiBdIHx8IGZhdGFsIFwiZXJyb3I6IGZpbGUgJFVTRVJfUEFTU1dEIGRvZXMgbm90IGV4aXN0XCJcblx0VVNFUl9QQVNTV0Q9XCIkVVNFUl9QQVNTV0RfUEFUSFwiXG5maVxuaWYgWyAtbiBcIiRBRERPTlwiIF07IHRoZW5cblx0WyAtZiBcIiRBRERPTl9QQVRIXCIgXSB8fCBmYXRhbCBcImVycm9yOiBmaWxlICRBRERPTiBkb2VzIG5vdCBleGlzdFwiXG5cdEFERE9OPVwiJEFERE9OX1BBVEhcIlxuZmlcbmlmIFsgLW4gXCIkVUJPT1RcIiBdOyB0aGVuXG5cdFsgLWQgXCIkVUJPT1RcIiBdIHx8IGZhdGFsIFwiZXJyb3I6IHUtYm9vdCBkaXJlY3RvcnkgJFVCT09UIGRvZXMgbm90IGV4aXN0XCJcbmZpXG5pZiBbIC1uIFwiJFJQTV9JTlNUQUxMXCIgXTsgdGhlblxuXHRbIC1kIFwiJFJQTV9JTlNUQUxMXCIgXSB8fCBmYXRhbCBcImVycm9yOiBycG0gZGlyZWN0b3J5ICRSUE1fSU5TVEFMTCBkb2VzIG5vdCBleGlzdFwiXG5maVxuaWYgWyAtbiBcIiREVEJfRklMRVwiIF07IHRoZW5cblx0WyAtZiBcIiREVEJfRklMRV9QQVRIXCIgXSB8fCBmYXRhbCBcImVycm9yOiBmaWxlICREVEJfRklMRSBkb2VzIG5vdCBleGlzdFwiXG5cdERUQl9GSUxFPVwiJERUQl9GSUxFX1BBVEhcIlxuZmlcblxuIyBjaGVja2luZyB0aGUgZW50ZXJlZCB2YWx1ZSAtLWltYWdlLXNpemVcbmlmIFsgLW4gXCIke0lNQUdFX1NJWkUtfVwiIF07IHRoZW5cblx0W1sgXCIkSU1BR0VfU0laRVwiID1+IFteMC05XSsgXV0gJiYgZmF0YWwgXCJlcnJvcjogYmFkIGltYWdlIHNpemVcIlxuZmlcblxuIyBlbnN1cmUgc3VkbyB1c2VyXG5pZiBbIFwiJCh3aG9hbWkpXCIgIT0gXCJyb290XCIgXTsgdGhlblxuXHRmYXRhbCBcImVycm9yOiB0aGlzIHNjcmlwdCByZXF1aXJlcyAnc3VkbycgcHJpdmlsZWdlcyBpbiBvcmRlciB0byB3cml0ZSB0byBkaXNrICYgbW91bnQgbWVkaWFcIlxuZmlcblxuaWYgWyAteiBcIiRJTUFHRV9PVVRcIiAtYSAteiBcIiRNRURJQVwiIF07IHRoZW5cblx0ZmF0YWwgXCJlcnJvcjogb25lIG9mIHRoZSBvcHRpb25zIG11c3QgYmUgZGVmaW5lZDogLS1tZWRpYSBvciAtLWltYWdlLW91dFwiXG5maVxuXG5pZiBbIC1uIFwiJElNQUdFX09VVFwiIC1hIC1uIFwiJE1FRElBXCIgXTsgdGhlblxuXHRmYXRhbCBcImVycm9yOiBBdCB0aGUgc2FtZSB0aW1lLCBtdXR1YWxseSBleGNsdXNpdmUgb3B0aW9ucyBhcmUgaW5kaWNhdGVkOiAtLW1lZGlhIGFuZCAtLWltYWdlLW91dFwiXG5maVxuXG5pZiBbIC1uIFwiJElNQUdFXCIgLWEgLW4gXCIkUk9PVEZTXCIgXTsgdGhlblxuXHRmYXRhbCBcImVycm9yOiBBdCB0aGUgc2FtZSB0aW1lLCBtdXR1YWxseSBleGNsdXNpdmUgb3B0aW9ucyBhcmUgaW5kaWNhdGVkOiAtLWltYWdlLWluIGFuZCAtLXJvb3Rmc1wiXG5maVxuXG5pZiBbIC1uIFwiJElNQUdFXCIgLWEgLW4gXCIkSU1BR0VfT1VUXCIgXTsgdGhlblxuXHRmYXRhbCBcImVycm9yOiBBdCB0aGUgc2FtZSB0aW1lLCBtdXR1YWxseSBleGNsdXNpdmUgb3B0aW9ucyBhcmUgaW5kaWNhdGVkOiAtLWltYWdlLWluIGFuZCAtLWltYWdlLW91dFwiXG5maVxuXG5cbmlmIFsgLW4gXCIkTUVESUFcIiBdICYmIFtbIFwiJChyZWFkbGluayAtZiAvZGV2L3Jvb3QpXCIgPT0gIFwiJE1FRElBXCIqIF1dOyB0aGVuXG5cdGZhdGFsIFwiZXJyb3I6ICRNRURJQSBpcyBhIGRldmljZSBjb250YWlucyBhIGhvc3Qgc3lzdGVtIHJvb3Rmc1wiXG5maVxuXG4jIHJvb3RmcyBleGlzdHNcbmlmIFsgLW4gXCIkUk9PVEZTXCIgLWEgISAtZiBcIiRST09URlNcIiBdOyB0aGVuXG5cdGZhdGFsIFwiZXJyb3I6ICRST09URlMgbm90IGZvdW5kISBQbGVhc2UgY2hvb3NlIGFuIGV4aXN0aW5nIHJvb3Rmc1wiXG5maVxuXG4jIGltYWdlIGV4aXN0c1xuaWYgWyAtbiBcIiRJTUFHRVwiIC1hICEgLWYgXCIkSU1BR0VcIiBdOyB0aGVuXG5cdGZhdGFsIFwiZXJyb3I6ICRJTUFHRSBub3QgZm91bmQhIFBsZWFzZSBjaG9vc2UgYW4gZXhpc3RpbmcgaW1hZ2VcIlxuZmlcblxuIyBkZXZpY2UgZXhpc3RzXG5pZiBbIC16IFwiJElNQUdFX09VVFwiIC1hICEgLWUgXCIkTUVESUFcIiBdOyB0aGVuXG5cdGZhdGFsIFwiZXJyb3I6ICRNRURJQSBub3QgZm91bmQhIFBsZWFzZSBjaG9vc2UgYW4gZXhpc3RpbmcgZGV2aWNlXCJcbmZpXG5cbiMgdGFyZ2V0IGJvYXJkIGV4aXN0c1xuaWYgWyAtbiBcIiRUQVJHRVRcIiAtYSAhIC1lIFwiJHtCT0FSRERJUn0vJHtUQVJHRVR9XCIgXTsgdGhlblxuXHRmYXRhbCBcImVycm9yOiAkVEFSR0VUIGlzIG5vdCBhIHN1cHBvcnRlZCBib2FyZFwiXG5maVxuXG5pZiBbIC1uIFwiJEFERE9OXCIgXTsgdGhlblxuXHRjYXNlIFwiJEFERE9OXCIgaW5cblx0XHQqLnRhcikgOztcblx0XHQqKSBmYXRhbCBcImVycm9yOiAkQURET04gaXMgbm90IGEgdGFyIGFyY2hpdmUhISFcIjs7XG5cdGVzYWNcblx0WyAtcyBcIiRBRERPTlwiIF0gfHwgZmF0YWwgXCJlcnJvcjogJEFERE9OIGRvZXMgbm90IGV4aXN0ISEhXCJcbmZpXG5cbmlmIFsgLW4gXCIkRFRCX0ZJTEVcIiBdIHx8IFsgLW4gXCIkRFRCX1ZFTkRPUlwiIF0gfHwgWyAtbiBcIiREVEJfS1ZFUlwiIF07IHRoZW5cblx0WyAteiBcIiREVEJfRklMRVwiIF0gJiYgZmF0YWwgXCJlcnJvcjogRFRCX0ZJTEUgaXMgdW5zZXRcIlxuXHRbIC16IFwiJERUQl9WRU5ET1JcIiBdICYmIGZhdGFsIFwiZXJyb3I6IERUQl9WRU5ET1IgaXMgdW5zZXRcIlxuXHRbIC16IFwiJERUQl9LVkVSXCIgXSAmJiBmYXRhbCBcImVycm9yOiBEVEJfS1ZFUiBpcyB1bnNldFwiXG5maVxuXG4jIGNoZWNrIGltYWdlIGZvcm1hdFxuaWYgWyAtbiBcIiRJTUFHRVwiIF07IHRoZW5cblx0Y2FzZSBcIiRJTUFHRVwiIGluXG5cdFx0Ki5pbWcpXG5cdFx0XHRDQVQ9J2NhdCdcblx0XHRcdDs7XG5cdFx0Ki5pbWcueHopXG5cdFx0XHRDQVQ9J3h6Y2F0J1xuXHRcdFx0Oztcblx0XHQqKSBmYXRhbCBcImVycm9yOiB1bmtub3duIGltYWdlIGZvcm1hdFwiXG5cdFx0XHQ7O1xuXHRlc2FjXG5cdCMgTk9URTogV2UgYXNzdW1lIHRoZXJlIGlzIG5vIGFyY2ggbmFtZXMgY29udGFpbmluZyAnLScgb3IgJy4nXG5cdEFSQ0g9XCIke0lNQUdFIyMqLX1cIlxuXHRBUkNIPVwiJHtBUkNIJSUuKn1cIlxuZmlcblxuIyBvdXRwdXQgY3VycmVudCBzdGF0dXMgb2YgdGFyIHRvIC9kZXYvdHR5IGV2ZXJ5IDUxMiByZWNvcmRzICg1IE1iKVxuIyB3aXRoIGRlZmF1bHQgYmxvY2tpbmcgZmFjdG9yIDIwICgxIHJlY29yZCA9IDIwKjUxMiBieXRlcylcblRBUj0ndGFyIC0tY2hlY2twb2ludD01MDAgLS1jaGVja3BvaW50LWFjdGlvbj10dHlvdXQ9JXM6JXt9VFxccidcbiMgZGVmaW5pdGlvbiBvZiB0aGUgcm9vdGZzIGFyY2hpdmUgZm9ybWF0IGFuZCBBUkNIXG5pZiBbIC1uIFwiJFJPT1RGU1wiIF07IHRoZW5cblx0Y2FzZSBcIiRST09URlNcIiBpblxuXHRcdCoudGFyKVxuXHRcdFx0VEFSPVwiJFRBUiAteGZcIlxuXHRcdFx0bGV0IFwiVEFSX1NJWkUgPSAkKHN0YXQgLUxjICVzIFwiJFJPT1RGU1wiKSAvICRNQlwiXG5cdFx0XHQ7O1xuXHRcdCoudGFyLmd6KVxuXHRcdFx0VEFSPVwiJFRBUiAtenhmXCJcblx0XHRcdGxldCBcIlRBUl9TSVpFID0gJChnemlwIC0tbGlzdCBcIiRST09URlNcIiB8IGF3ayAnRU5Ee3ByaW50ICQyfScpIC8gJE1CXCJcblx0XHRcdDs7XG5cdFx0Ki50YXIueHopXG5cdFx0XHRUQVI9XCIkVEFSIC1KeGZcIlxuXHRcdFx0bGV0IFwiVEFSX1NJWkUgPSAkKHh6IC0tcm9ib3QgLS1saXN0IFwiJFJPT1RGU1wiIHwgYXdrICcvXnRvdGFscy97cHJpbnQgJDV9JykgLyAkTUJcIlxuXHRcdFx0Oztcblx0XHQqKSBmYXRhbCBcImVycm9yOiB1bmtub3duIHJvb3RmcyBhcmNoaXZlIGZvcm1hdFwiXG5cdFx0XHQ7O1xuXHRlc2FjXG5cdCMgTk9URTogV2UgYXNzdW1lIHRoZXJlIGlzIG5vIGFyY2ggbmFtZXMgY29udGFpbmluZyAnLScgb3IgJy4nXG5cdEFSQ0g9XCIke1JPT1RGUyMjKi19XCJcblx0QVJDSD1cIiR7QVJDSCUlLip9XCJcbmZpXG5cbmNhc2UgXCIkTUVESUFcIiBpblxuXHQvZGV2L21tY2Jsayp8L2Rldi9sb29wKnwvZGV2L252bWUqKVxuXHRcdHBhcnRzdWZmaXg9XCJwXCJcblx0XHQ7O1xuXHQqKVxuXHRcdHVuc2V0IHBhcnRzdWZmaXhcblx0XHQ7O1xuZXNhY1xuXG4jIyMgaW5jbHVkZSBsb2dnaW5nXG4uICRESVIvbG9nXG5cbmxvZ19pbml0XG5cbiMgU291cmNlIGNvbW1vbiBzaGVsbCBmdW5jdGlvbnNcbi4gJERJUi9mdW5jdGlvbnNcblxuIyBTb3VyY2UgYm9hcmQgc3BlY2lmaWMgc2hlbGwgc2NyaXB0XG5pZiBbIC1uIFwiJFRBUkdFVFwiIF07IHRoZW5cblx0LiBcIiRCT0FSRERJUi8kVEFSR0VUXCJcbmVsc2Vcblx0LiBcIiRTT0NTRElSL3Vua25vd24tc29jLnNoXCJcbmZpXG5cblsgLXogXCIkRkFTVF9CT09UXCIgXSB8fCBCT09UX1RJTUVPVVQ9MFxuXG4jIEFkZCBkZWZhdWx0IHN5c3RlbSBjb25zb2xlXG5pZiBbIC1uIFwiJENPTlNPTEVcIiBdICYmIFsgLXogXCIkU1lTQ09OXCIgXTsgdGhlblxuXHRTWVNDT049dHR5UzAsMTE1MjAwbjhcbmZpXG5cbiMgQWRkIEVGSSBQYXJ0aXRpb25zXG5pZiBbIC1uIFwiJEVGSVwiIC1hIC1uIFwiJFJPT1RGU1wiIF07IHRoZW5cblx0aWYgWyAteiBcIiRGSVJNUEFSVF9OVU1cIiBdOyB0aGVuXG5cdFx0RklSTVBBUlRfTlVNPVwiJHtST09UUEFSVF9OVU19XCJcblx0XHRsZXQgUk9PVFBBUlRfTlVNPSR7RklSTVBBUlRfTlVNfSsxXG5cdGZpXG5maVxuXG4jIEFkZCBhIGJvb3QgcGFydGl0aW9uXG5pZiBbIC1uIFwiJEFERF9CT09UUEFSVFwiIF07IHRoZW5cblx0aWYgWyAteiBcIiRCT09UUEFSVF9OVU1cIiBdOyB0aGVuXG5cdFx0Qk9PVFBBUlRfTlVNPVwiJHtST09UUEFSVF9OVU19XCJcblx0XHRsZXQgUk9PVFBBUlRfTlVNPSR7Qk9PVFBBUlRfTlVNfSsxXG5cdGZpXG5maVxuXG5pZiBbIC16IFwiJFJPT1RGU1wiIC1hIC16IFwiJElNQUdFXCIgXTsgdGhlblxuXHRmaW5kX3BhcnRpdGlvbnNcbmZpXG5cbiMgZGVmYXVsdCBzaXplIG9mIHBhcnRpdGlvbnMgKE1pQilcblsgLXogXCIkRklSTVBBUlRfTlVNXCIgXSB8fCBGSVJNUEFSVF9TSVpFPTEyOFxuWyAteiBcIiRCT09UUEFSVF9OVU1cIiBdIHx8IEJPT1RQQVJUX1NJWkU9NTEyXG5cbmNoYW5nZV9wYXJ0aXRpb25cblxuIyBJbWFnZSBzaXplIGNhbGN1bGF0aW9uXG5pZiBbIC1uIFwiJFJPT1RGU1wiIC1hIC1uIFwiJElNQUdFX09VVFwiIF07IHRoZW5cblx0IyBJbmNyZWFzZSBzaXplIGJ5IDEwJSB3aGljaCBpcyByZXNlcnZlZCBieSBGUywgdGFrZSBpbnRvIGFjY291bnQgaS1ub2RlIHJhdGlvIGFuZCByZXNlcnZlZCAzMk1iLlxuXHQjIEFkZCAxIGp1c3QgaW4gY2FzZS5cblx0SU1BR0VfU0laRV9NSU49XCIkKGF3ayAtdlRTPVwiJFRBUl9TSVpFXCIgLXZNPVwiJE1CXCIgJ0JFR0lOeyBwcmludGYgKFwiJWRcIiwgKChUUys1MTIrMzIpKigxKzEwMjQvODE5MikqMS4xKzEpKSB9JylcIlxuXHRbIC16IFwiJEZJUk1QQVJUX1NJWkVcIiBdIHx8IGxldCBJTUFHRV9TSVpFX01JTj0kSU1BR0VfU0laRV9NSU4rJEZJUk1QQVJUX1NJWkVcblx0WyAteiBcIiRCT09UUEFSVF9TSVpFXCIgXSB8fCBsZXQgSU1BR0VfU0laRV9NSU49JElNQUdFX1NJWkVfTUlOKyRCT09UUEFSVF9TSVpFXG5cdCMgQ2hhbmdlIGltYWdlIHNpemVcblx0aWYgWyAteiBcIiR7SU1BR0VfU0laRS19XCIgXSB8fCBbIFwiJElNQUdFX1NJWkVfTUlOXCIgLWdlIFwiJElNQUdFX1NJWkVcIiBdOyB0aGVuXG5cdFx0SU1BR0VfU0laRT1cIiRJTUFHRV9TSVpFX01JTlwiXG5cdGZpXG5cdGxldCBcIkVORF9TRUNUT1IgPSAkSU1BR0VfU0laRSAtIDFcIlxuXHRFTkRfU0VDVE9SPVwiJEVORF9TRUNUT1JcIk1pQlxuZmlcblxuIyBMYXN0IGNoYW5jZSB0byBiYWNrIG91dFxuaWYgWyAtbiBcIiRJTUFHRV9PVVRcIiAtYSAtbiBcIiRJTUFHRV9TSVpFXCIgXTsgdGhlblxuXHRwcmludHggJ0ltYWdlIG91dDogJzsgcHJpbnRuIFwiJElNQUdFX09VVFwiIGdyZWVuIDIwXG5cdHByaW50eCAnSW1hZ2Ugc2l6ZTogJzsgcHJpbnRuIFwiJElNQUdFX1NJWkUgTWlCXCIgZ3JlZW4gMjBcbmVsc2Vcblx0cHJpbnR4ICdTZWxlY3RlZCBNZWRpYTogJzsgcHJpbnRuIFwiJE1FRElBXCIgZ3JlZW4gMjBcbmZpXG4jIHRhcmdldCBoYXJkd2FyZSBBUkNIXG5pZiBbIC1uIFwiJFRBUkdFVFwiIF07IHRoZW5cblx0cHJpbnR4ICdUYXJnZXQ6ICc7IHByaW50biBcIiRUQVJHRVRcIiBncmVlbiAyMFxuZmlcbiMgcm9vdGZzIGlmIGluY2x1ZGVkXG5pZiBbIC1uIFwiJFJPT1RGU1wiIF07IHRoZW5cblx0cHJpbnR4ICdTZWxlY3RlZCByb290ZnM6ICc7IHByaW50biBcIiRST09URlNcIiBncmVlbiAyMFxuZmlcbiMgaW1hZ2UtaW4gaWYgaW5jbHVkZWRcbmlmIFsgLW4gXCIkSU1BR0VcIiBdOyB0aGVuXG5cdHByaW50eCAnU2VsZWN0ZWQgaW1hZ2U6ICc7IHByaW50biBcIiRJTUFHRVwiIGdyZWVuIDIwXG5maVxuIyBhZGRvblxuaWYgWyAtbiBcIiRBRERPTlwiIF07IHRoZW5cblx0cHJpbnR4ICdBZGRvbjogJzsgcHJpbnRuIFwiJEFERE9OXCIgZ3JlZW4gMjBcbmZpXG5pZiBbIC1uIFwiJFVCT09UXCIgXTsgdGhlblxuXHRwcmludHggJ1UtYm9vdCBkaXJlY3Rvcnk6ICc7IHByaW50biBcIiRVQk9PVFwiIGdyZWVuIDIwXG5maVxuaWYgWyAtbiBcIiRSUE1fSU5TVEFMTFwiIF07IHRoZW5cblx0cHJpbnR4ICdSUE0gZGlyZWN0b3J5OiAnOyBwcmludG4gXCIkUlBNX0lOU1RBTExcIiBncmVlbiAyMFxuZmlcbmlmIFsgLW4gXCIkRFRCX0ZJTEVcIiBdOyB0aGVuXG5cdHByaW50eCAnRFRCIGZpbGU6ICc7IHByaW50biBcIiREVEJfRklMRVwiIGdyZWVuIDIwXG5maVxuaWYgWyAtbiBcIiREVEJfVkVORE9SXCIgXTsgdGhlblxuXHRwcmludHggJ0RUQiB2ZW5kb3I6ICc7IHByaW50biBcIiREVEJfVkVORE9SXCIgZ3JlZW4gMjBcbmZpXG5pZiBbIC1uIFwiJERUQl9LVkVSXCIgXTsgdGhlblxuXHRwcmludHggJ0RUQiBrZXJuZWwgdmVyc2lvbjogJzsgcHJpbnRuIFwiJERUQl9LVkVSXCIgZ3JlZW4gMjBcbmZpXG5pZiBbIC1uIFwiJERFRkFVTFRfS0VSTkVMXCIgXTsgdGhlblxuXHRwcmludHggJ0RlZmF1bHQga2VybmVsOiAnOyBwcmludG4gXCIkREVGQVVMVF9LRVJORUxcIiBncmVlbiAyMFxuZmlcbiMgYWRkY29uc29sZSBpZiBpbmNsdWRlZFxuaWYgWyAtbiBcIiRDT05TT0xFXCIgXTsgdGhlblxuXHRwcmludHggJ1N5c3RlbSBjb25zb2xlOiAnOyBwcmludG4gXCIkU1lTQ09OXCIgZ3JlZW4gMjBcbmZpXG5pZiBbIFwiJElOSVRSRF9PRU1cIiA9IDEgXTsgdGhlblxuXHRwcmludHggJ0luaXRyZCBPRU0gY29uZmlnOiAnOyBwcmludG4gXCJFbmFibGVkXCIgZ3JlZW4gMjBcbmZpXG5pZiBbIC1uIFwiJEZBU1RfQk9PVFwiIF07IHRoZW5cblx0cHJpbnR4ICdGYXN0IGJvb3Q6ICc7IHByaW50biBcIkVuYWJsZWRcIiBncmVlbiAyMFxuZmlcbmlmIFsgLW4gXCIkQk9PVF9USU1FT1VUXCIgXTsgdGhlblxuXHRwcmludHggJ0Jvb3QgdGltZW91dDogJzsgcHJpbnRuIFwiJEJPT1RfVElNRU9VVFwiIGdyZWVuIDIwXG5maVxuaWYgWyAtbiBcIiRST09UX1BBU1NXRFwiIF07IHRoZW5cblx0cHJpbnR4ICdyb290IHBhc3N3b3JkOiAnOyBwcmludG4gXCIkUk9PVF9QQVNTV0RcIiBncmVlbiAyMFxuZmlcbmlmIFsgLW4gXCIkVVNFUl9OQU1FXCIgXSAmJiBbIC1uIFwiJFVTRVJfUEFTU1dEXCIgXTsgdGhlblxuXHRwcmludHggJ1VzZXI6ICc7IHByaW50biBcIiRVU0VSX05BTUVcIiBncmVlbiAyMFxuXHRwcmludHggJ1VzZXIgcGFzc3dvcmQ6ICc7IHByaW50biBcIiRVU0VSX1BBU1NXRFwiIGdyZWVuIDIwXG5maVxuXG5pZiBbIC1uIFwiJExPR19GSUxFXCIgXTsgdGhlblxuXHRwcmludHggJ0xvZyBmaWxlOiAnOyBwcmludG4gXCIkTE9HX0ZJTEVcIiBncmVlbiAyMFxuZmlcblxuY2FzZSBcIiRWTkNcIiBpblxuXHQxKVxuXHRcdHByaW50eCAnVk5DOiAnOyBwcmludG4gXCJlbmFibGVkXCIgZ3JlZW4gMjBcblx0Oztcblx0MClcblx0XHRwcmludHggJ1ZOQzogJzsgcHJpbnRuIFwiZGlzYWJsZWRcIiByZWQgMjBcblx0OztcbmVzYWNcblxuaWYgWyAteiBcIiRJTUFHRV9PVVRcIiBdOyB0aGVuXG5cdGlmIFsgLW4gXCIkSU1BR0VcIiAtbyAtbiBcIiRST09URlNcIiBdOyB0aGVuXG5cdFx0cHJpbnRuIFwiV0FSTklORyEgQUxMIERBVEEgV0lMTCBCRSBERVNUUk9ZRURcIiByZWRcblx0ZWxzZVxuXHRcdHByaW50biBcIldBUk5JTkchIEJPT1RMT0FERVIgV0lMTCBCRSBPVkVSV1JJVFRFTlwiIHJlZFxuXHRmaVxuZmlcblxuaWYgWyBcIiROT0FTS1wiICE9IDEgXTsgdGhlblxuXHQjIEFzayB1c2VyIGJlZm9yZSBzdGFydFxuXHRwcmludG4gXCJXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT8gW1llcy9Ob10gXCIgYm9sZFxuXHRyZWFkIFBST0NFRURcblx0Y2FzZSBcIiRQUk9DRUVEXCIgaW5cblx0XHRbWXldW0VlXVtTc10pXG5cdFx0XHQ7O1xuXHRcdCopXG5cdFx0XHRwcmludG4gXCJVc2VyIGV4aXQsIG5vIHJvb3RmcyB3cml0dGVuLlwiXG5cdFx0XHRleGl0IDBcblx0XHRcdDs7XG5cdGVzYWNcbmZpXG5cbnRyYXAgcHJlX2V4aXQgRVhJVCBIVVAgUElQRSBJTlQgUVVJVCBURVJNXG5cbiMgQ2hlY2sgdG8gbWFrZSBpbWFnZSBmaWxlXG5pZiBbIC1uIFwiJElNQUdFX09VVFwiIF07IHRoZW5cblx0TUVESUE9XCIkKGxvc2V0dXAgLS1maW5kKVwiXG5cdFsgLW4gXCIkTUVESUFcIiBdIHx8IGZhdGFsX2Vycm9yIFwiL2Rldi9sb29wKiBpcyBub3QgYWxsb3dlZCEhIVwiXG5maVxuXG4jIFByZXBhcmUgbWVkaWFcblsgLXogXCIke01FRElBLX1cIiBdIHx8IHByZXBhcmVfbWVkaWFcblxuIyBXcml0ZSBpbWFnZSBmaWxlIHRvIHRoZSBtZWRpYSBkZXZpY2VcbmlmIFsgLW4gXCIkSU1BR0VcIiBdOyB0aGVuXG5cdGltYWdlX3RvX21lZGlhXG5maVxuXG5pZiBbIC1uIFwiJFJPT1RGU1wiIF07IHRoZW5cblx0WyAteiBcIiR7SU1BR0VfT1VULX1cIiBdIHx8IHByZXBhcmVfaW1hZ2Vcblx0Y3JlYXRlX2Rpc2tsYWJlbFxuXHRjcmVhdGVfcGFydGl0aW9uXG5cdHN5bmNfcGFydGl0aW9uc1xuXHRmb3JtYXRfcGFydGl0aW9uXG5cdG1vdW50X3BhcnRpdGlvblxuXHR3cml0ZV9yb290ZnNcblx0c2V0dXBfZnN0YWJcdFxuXHR1cGRhdGVfY21kbGluZV90eHRcbmZpXG5cbnNvY193cml0ZV9ib290bG9hZGVyXG5cbiMgU2V0dXAgYm9vdCBmbGFnXG5zZXRfYm9vdGZsYWdcblxuIyBVcGRhdGUgYm9vdCBjb25maWdzXG5CT09UQ09ORj1cIiR7VE1QUk9PVC19L2Jvb3QvZXh0bGludXgvZXh0bGludXguY29uZlwiXG5pZiBbIC1zIFwiJEJPT1RDT05GXCIgXTsgdGhlblxuXHQjIENoYW5nZSBzeXN0ZW0gY29uc29sZVxuXHRpZiBbIC1uIFwiJENPTlNPTEVcIiBdOyB0aGVuXG5cdFx0c2VkIC1pIC1lICcvYXBwZW5kLyBzL1tbOnNwYWNlOl1dY29uc29sZT1bYS16QS1aMC05LF0qLy9nJyBcXFxuXHRcdCAgICAtZSBcIi9hcHBlbmQvIHMvJC8gY29uc29sZT10dHkwIGNvbnNvbGU9JFNZU0NPTi9nXCIgXFxcblx0XHQgICAgLWUgXCIvYXBwZW5kLyBzLyBxdWlldC8vZ1wiIFxcXG5cdFx0ICAgIFwiJEJPT1RDT05GXCJcblx0Zmlcblx0IyBDaGFuZ2UgZmFzdCBib290XG5cdGlmIFsgLW4gXCIkRkFTVF9CT09UXCIgXTsgdGhlblxuXHRcdHNlZCAtaSBcIi9ecHJvbXB0IC4qL2Q7cy9ebWVudSBcXCguKlxcKS9tZW51IFxcMVxcbnByb21wdCAwL1wiIFwiJEJPT1RDT05GXCJcblx0Zmlcblx0IyBDaGFuZ2UgbWVudSB0aW1lb3V0XG5cdGlmIFsgLW4gXCIkQk9PVF9USU1FT1VUXCIgXTsgdGhlblxuXHRcdHNlZCAtaSBcIi9edGltZW91dCAuKi9kO3MvXm1lbnUgXFwoLipcXCkvbWVudSBcXDFcXG50aW1lb3V0ICRCT09UX1RJTUVPVVQvXCIgXCIkQk9PVENPTkZcIlxuXHRmaVxuZmlcbkJPT1RDT05GPVwiJHtUTVBST09ULX0vYm9vdC9ncnViL2dydWIuY2ZnXCJcbmlmIFsgLXMgXCIkQk9PVENPTkZcIiBdOyB0aGVuXG5cdGlmIFsgLW4gXCIkQ09OU09MRVwiIF07IHRoZW5cblx0XHRzZWQgLWkgLWUgJy9bWzpzcGFjZTpdXWxpbnV4LyBzL1tbOnNwYWNlOl1dY29uc29sZT1bYS16QS1aMC05LF0qLy9nJyBcXFxuXHRcdCAgICAtZSBcIi9bWzpzcGFjZTpdXWxpbnV4LyBzLyQvIGNvbnNvbGU9dHR5MCBjb25zb2xlPSRTWVNDT04vZ1wiIFxcXG5cdFx0ICAgIC1lIFwiL1tbOnNwYWNlOl1dbGludXgvIHMvIHF1aWV0Ly9nXCIgXFxcblx0XHQgICAgXCIkQk9PVENPTkZcIlxuXHRmaVxuXHQjIENoYW5nZSBtZW51IHRpbWVvdXRcblx0aWYgWyAtbiBcIiRCT09UX1RJTUVPVVRcIiBdOyB0aGVuXG5cdFx0c2VkIC1pIFwicy9zZXQgdGltZW91dD0uKi9zZXQgdGltZW91dD0kQk9PVF9USU1FT1VUL1wiIFwiJEJPT1RDT05GXCJcblx0ZmlcbmZpXG5CT09UQ09ORj1cIiR7VE1QUk9PVC19L2V0Yy9zeXNjb25maWcvZ3J1YjJcIlxuaWYgWyAtcyBcIiRCT09UQ09ORlwiIF07IHRoZW5cblx0aWYgWyAtbiBcIiRDT05TT0xFXCIgXTsgdGhlblxuXHRcdHNlZCAtaSAtZSAnL0dSVUJfQ01ETElORV9MSU5VWC8gcy9bWzpzcGFjZTpdXWNvbnNvbGU9W2EtekEtWjAtOSxdKi8vZycgXFxcblx0XHQgICAgLWUgXCIvR1JVQl9DTURMSU5FX0xJTlVYLyBzLyckLyBjb25zb2xlPXR0eTAgY29uc29sZT0kU1lTQ09OJy9nXCIgXFxcblx0XHQgICAgLWUgXCIvR1JVQl9DTURMSU5FX0xJTlVYLyBzLyBxdWlldCAvIC9nO3MvIHF1aWV0Jy8nL2dcIiBcXFxuXHRcdCAgICBcIiRCT09UQ09ORlwiXG5cdGZpXG5cdCMgQ2hhbmdlIG1lbnUgdGltZW91dFxuXHRpZiBbIC1uIFwiJEJPT1RfVElNRU9VVFwiIF07IHRoZW5cblx0XHRzaGVsbF9jb25maWdfc2V0IFwiJEJPT1RDT05GXCIgR1JVQl9USU1FT1VUIFwiJEJPT1RfVElNRU9VVFwiXG5cdGZpXG5maVxudW5zZXQgQk9PVENPTkZcblxuIyBFbmFibGUgdm5jIG1vZGUgZm9yIGFsdGVyYXRvci1zZXR1cFxuQUxURVJBVE9SX1NFVFVQX0NPTkY9JHtUTVBST09ULX0vZXRjL2FsdGVyYXRvci1zZXR1cC9jb25maWdcbmlmIFsgLWYgXCIkQUxURVJBVE9SX1NFVFVQX0NPTkZcIiBdOyB0aGVuXG5cdGNhc2UgXCIkVk5DXCIgaW5cblx0XHQxKVxuXHRcdFx0c2VkICcvQUxURVJBVE9SX1NFVFVQX1ZOQz0vZCcgLWkgXCIkQUxURVJBVE9SX1NFVFVQX0NPTkZcIlxuXHRcdFx0ZWNobyAnQUxURVJBVE9SX1NFVFVQX1ZOQz0xJyA+PiBcIiRBTFRFUkFUT1JfU0VUVVBfQ09ORlwiXG5cdFx0Oztcblx0XHQwKVxuXHRcdFx0c2VkICcvXkFMVEVSQVRPUl9TRVRVUF9WTkM9L3MvXi8jLycgLWkgXCIkQUxURVJBVE9SX1NFVFVQX0NPTkZcIlxuXHRcdDs7XG5cdGVzYWNcbmZpXG5cbiMgZXh0cmFjdCBhZGRvbi50YXJcbmlmIFsgLW4gXCIkQURET05cIiBdOyB0aGVuXG5cdHByaW50X21lc3NhZ2UgXCJFeHRyYWN0IGFyY2hpdmUgJEFERE9OIHRvIHJvb3Rmcy4uLlwiXG5cdHRhciAteCAtQyBcIiRUTVBST09UXCIgLWYgXCIkQURET05cIiB8fFxuXHRcdGZhdGFsX2Vycm9yIFwiRXh0cmFjdCAkQURET04gZmFpbGVkISEhXCJcblx0cHJpbnRfZG9uZVxuZmlcblxuIyB1c2UgL2V0Yy9pbml0cmQubWsub2VtIGluIHJvb3Rmc1xuaWYgWyBcIiRJTklUUkRfT0VNXCIgPSAxIF07IHRoZW5cblx0cHJpbnRfbWVzc2FnZSBcIkNvcHlpbmcgaW5pdHJkLm1rLm9lbSB0byBpbml0cmQubWsgLi4uXCJcblx0Y3AgJFRNUFJPT1QvZXRjL2luaXRyZC5ta3sub2VtLH1cblx0cHJpbnRfZG9uZVxuZmlcblxuIyBtb3VudCBjaHJvb3QgaWYgbmVlZGVkXG5pZiBbIC1uIFwiJFJQTV9JTlNUQUxMXCIgXSB8fCBbIC1uIFwiJFJPT1RfUEFTU1dEXCIgXSB8fFxuICAgWyAtbiBcIiRVU0VSX05BTUVcIiBdIHx8IFsgLW4gXCIkVVNFUl9QQVNTV0RcIiBdIHx8XG4gICBbIC1uIFwiJERFRkFVTFRfS0VSTkVMXCIgXSB8fCBbIC1uIFwiJEVGSVwiIF07IHRoZW5cblx0cHJpbnRfbWVzc2FnZSBcIk1vdW50IGNocm9vdCAuLi5cIlxuXHRtb3VudF9jaHJvb3QgfHwgZmF0YWxfZXJyb3IgXCJNb3VudCBjaHJvb3QgZmFpbGVkISEhXCJcblx0cHJpbnRfZG9uZVxuZmlcblxuIyBpbnN0YWxsIGFkZGl0aW9ucyBwYWNrYWdlc1xuaWYgWyAtbiBcIiRSUE1fSU5TVEFMTFwiIF07IHRoZW5cblx0cHJpbnRfbWVzc2FnZSBcIkluc3RhbGwgYWRkaXRpb25zIHJwbSBwYWNrYWdlcyAuLi5cIlxuXHRycG1faW5zdGFsbCBcIiRSUE1fSU5TVEFMTFwiIHx8XG5cdFx0ZmF0YWxfZXJyb3IgXCJGYWlsZWQgaW5zdGFsbCBycG0gcGFja2FnZXMhISFcIlxuXHRwcmludF9kb25lXG5maVxuXG5pZiBbIC1uIFwiJERFRkFVTFRfS0VSTkVMXCIgXTsgdGhlblxuXHRwcmludF9tZXNzYWdlIFwiU2V0IGRlZmF1bHQga2VybmVsOiAkREVGQVVMVF9LRVJORUwgLi4uXCJcblx0ZXhlY19jaHJvb3QgaW5zdGFsbGtlcm5lbCAtLWtlZXAtaW5pdHJkIC11IFwiJERFRkFVTFRfS0VSTkVMXCIgfHxcblx0XHRmYXRhbF9lcnJvciBcIkZhaWxlZCB0byBzZXQgZGVmYXVsdCBrZXJuZWwhISFcIlxuXHRwcmludF9kb25lXG5maVxuXG5pZiBbIC1uIFwiJFJPT1RfUEFTU1dEXCIgXTsgdGhlblxuXHRwcmludF9tZXNzYWdlIFwiU2V0IHJvb3QgcGFzc3dvcmQgLi4uXCJcblx0ZXhlY19jaHJvb3QgdXNlcm1vZCAtcCBcIiQoaGVhZCAtbjEgXCIkUk9PVF9QQVNTV0RcIilcIiBcInJvb3RcIiB8fFxuXHRcdGZhdGFsX2Vycm9yIFwiRmFpbGVkIHRvIHNldCByb290IHBhc3N3b3JkISEhXCJcblx0cHJpbnRfZG9uZVxuZmlcblxuaWYgWyAtbiBcIiRVU0VSX05BTUVcIiBdICYmIFsgLW4gXCIkVVNFUl9QQVNTV0RcIiBdOyB0aGVuXG5cdHByaW50X21lc3NhZ2UgXCJDcmVhdGUgdXNlciBcXFwiJFVTRVJfTkFNRVxcXCIgLi4uXCJcblx0ZXhlY19jaHJvb3QgdXNlcmFkZCAtbSBcIiRVU0VSX05BTUVcIiB8fFxuXHRcdGZhdGFsX2Vycm9yIFwiRmFpbGVkIHRvIGFkZCB1c2VyIFxcXCIke1VTRVJfTkFNRX1cXFwiISEhXCJcblx0cHJpbnRfZG9uZVxuXHRwcmludF9tZXNzYWdlIFwiU2V0IHBhc3N3b3JkIGZvciB1c2VyIFxcXCIkVVNFUl9OQU1FXFxcIiAuLi5cIlxuXHRleGVjX2Nocm9vdCB1c2VybW9kIC1wIFwiJChoZWFkIC1uMSBcIiRVU0VSX1BBU1NXRFwiKVwiIFwiJFVTRVJfTkFNRVwiIHx8XG5cdFx0ZmF0YWxfZXJyb3IgXCJGYWlsZWQgdG8gc2V0ICRVU0VSX05BTUUgcGFzc3dvcmQhISFcIlxuXHRwcmludF9kb25lXG5maVxuXG5pZiBbIC1uIFwiJERUQl9GSUxFXCIgXSAmJiBbIC1uIFwiJERUQl9WRU5ET1JcIiBdICYmIFsgLW4gXCIkRFRCX0tWRVJcIiBdOyB0aGVuXG5cdHByaW50X21lc3NhZ2UgXCJJbnN0YWxsIGV4dGVybmFsIGR0YiAuLi5cIlxuXHRhZGRfZHRiIHx8IGZhdGFsX2Vycm9yIFwiRmFpbGVkIHRvIGluc3RhbGwgdmVuZG9yIGR0YiEhIVwiXG5cdHByaW50X2RvbmVcbmZpXG5cbiMgZ3J1Yi1lZmkgaW5zdGFsbFxuaWYgWyAtbiBcIiRFRklcIiBdICYmIFsgLW4gXCIkRklSTVBBUlRfTlVNXCIgXSAmJiBbIC1mIFwiJFRNUFJPT1RcIi9ldGMvc3lzY29uZmlnL2dydWIyIF07IHRoZW5cblx0cHJpbnRfbWVzc2FnZSBcIlRyeWluZyBncnViLWVmaSBpbnN0YWxsLi4uXCJcblx0Y2FzZSBcIiQoZXhlY19jaHJvb3QgYXJjaClcIiBpblxuXHRcdHg4Nl82NCkgZXhlY19jaHJvb3QgZ3J1Yi1pbnN0YWxsIC0tdGFyZ2V0PXg4Nl82NC1lZmkgLS1yZWNoZWNrIC0tcmVtb3ZhYmxlIFxcXG5cdFx0XHQtLXVlZmktc2VjdXJlLWJvb3QgfHwgZmF0YWxfZXJyb3IgXCJncnViLWluc3RhbGwgeDg2XzY0LWVmaSBmYWlsZWQhISFcIlxuXHRcdDs7XG5cdFx0YWFyY2g2NCkgZXhlY19jaHJvb3QgZ3J1Yi1pbnN0YWxsIC0tdGFyZ2V0PWFybTY0LWVmaSAtLXJlY2hlY2sgLS1yZW1vdmFibGUgXFxcblx0XHRcdC0tdWVmaS1zZWN1cmUtYm9vdCB8fCBmYXRhbF9lcnJvciBcImdydWItaW5zdGFsbCBhcm02NC1lZmkgZmFpbGVkISEhXCJcblx0XHQ7O1xuXHRcdHJpc2N2NjQpIGV4ZWNfY2hyb290IGdydWItaW5zdGFsbCAtLXRhcmdldD1yaXNjdjY0LWVmaSAtLXJlY2hlY2sgLS1yZW1vdmFibGUgXFxcblx0XHRcdC0tdWVmaS1zZWN1cmUtYm9vdCB8fCBmYXRhbF9lcnJvciBcImdydWItaW5zdGFsbCByaXNjdjY0LWVmaSBmYWlsZWQhISFcIlxuXHRcdDs7XG5cdFx0bG9vbmdhcmNoNjQpIGV4ZWNfY2hyb290IGdydWItaW5zdGFsbCAtLXRhcmdldD1sb29uZ2FyY2g2NC1lZmkgLS1yZWNoZWNrIC0tcmVtb3ZhYmxlIFxcXG5cdFx0XHQtLXVlZmktc2VjdXJlLWJvb3QgfHwgZmF0YWxfZXJyb3IgXCJncnViLWluc3RhbGwgbG9vbmdhcmNoNjQtZWZpIGZhaWxlZCEhIVwiXG5cdFx0Oztcblx0XHQqKSBmYXRhbF9lcnJvciBcIlVua25vd24gQVJDSCEhIVwiXG5cdFx0Oztcblx0ZXNhY1xuXHRleGVjX2Nocm9vdCB1cGRhdGUtZ3J1YiB8fCBmYXRhbF9lcnJvciBcInVwZGF0ZS1ncnViIGZhaWxlZCEhIVwiXG5cdHByaW50X2RvbmVcbmZpXG5cbmZpbmFsX2V4aXRcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4ODQ0NDEwOX19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjcwNDkyOTZhIiwicGFyZW50SWQiOiI3NTkwMTBhYyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDc6MjkuMDkyWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipDaGVja2luZyBhdmFpbGFibGUgR1RLIHBhY2thZ2VzIHdpdGggcGtnLWNvbmZpZyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMWRmYjFjODE5MWEwNTQwY2M0MTc2N2ZlMjdcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1NZ2ZfbWFEWjNDbDBhWnktbFdNOWVVajdBdHRGX0RhdzdZV3hWOFBILUQ4Y1N2VGpBREktdnpQZy1wQkZMbkJzUnh6d1U2Y3lOaGU3NkVqQ1cwb2dsZTMtY0lwaktsYmlUT2JiYkdmUUJOeVlhR1RveHE4V0NSdmJUWGVobTJsWkM0MGdnT19Idy1XRUE2a2VmUElJSjJYdGphZVdkYzNWbzJ5WVZtblJ5NTBtZ2NBS3gyd3FXbGJkXzhVOEE2cG9VQTlRVnRHRFZneEw5d3FOZEl3cUc1ZnpPZEhIa1FKSmQwSFBXRTdIVmtuLWcxbk9zejRja3d4aHY0QXRfemczTWVBaWI2UzktdnJOSnJHSXFWaEI1OG51anJNX2NQUHItTlJNMVFHSHd0UnY3bmJwc1E0OXhBMFcxMGhXMjg5cVptMTVoVHByUXB1YW9kX3dqQTU1SHZISzRXdk5qVlBGTkJiU2d2bEh3LWhqQlBFR3NDQmxHUURBbzJCcXBvZ0FSRUtneWlDcjVNUjUtWnJBYnhiWFhiNk1xbVBwQXRmUWl2Wms4NUtKTnhGVXpvWTQzVVpUd3BNUE53WkVqMDFzNmNUWGxDSEtNdDhldzQ3aWROTmhCMGlGUTloTGc4aWYwMkpudV9oMTVoRWJabmhUbzFTLVN0WXV3WVdaTDloS0xma19wLTJHZ19RdUcyWlExcUQtX3BVRjVNbG5mZ0UwWkVvUThrZ3dLbC0xU183a2xrOXFaSHpBeGo4OGRVeUJRX2h0Zmk5VVpZX1FVTG9WYU9abHZRMXR0VGlWMm1ZTjVTay1GUDNrZEtCLUVXakRlUkE5Z3ZWMk01cWlkcUl1Y3ZPZ2VQVEtmTVg4MVgzbHM3Mm9DWl8yZEVwcF8wY05ETktYa1RYRHk4SG0wU1VOSnlOQ1ZOeTVjYnNta2xLbzduV2tNV19qOE1UZXFPdWRGSmJkU1lmSkdCaHBnZlBrTWJGVWM1N1NKTi1tR1MxNG10QzVnd0hKci1BUmZmNVNIcnZBbG1aOEtEMXF0ZXFiQTY5aDRqbnhqY2xPWGVweUgtY1pQdHgyUUtBNkVXNWRmRS1Idk1KUDZtVVJZNVR3SHV4UU5WSkZaYUJkMXR5cG56amM3ZmZkSVQ3ZmhOMjYteU9aMGVmaFk4aXNON2x5X3lvUjYzMkpicE9fdkgyUk5VY2E0NGtPbWplaF9LWnNSS0lqTUotb19GNWdMUkYxU3JGVktSY0hVU0dNWFg5WlVKMEMwT1pHV0JBbHNIVjVUeWY5bjNXQTZzdTFDVDg5d2FERXNtSVdhcm82X1RpZ0ZOSlJSaXJabXhxVlVXQS1GWGFRRzZONkd5Vk90TVFHQ3JcIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkNoZWNraW5nIGF2YWlsYWJsZSBHVEsgcGFja2FnZXMgd2l0aCBwa2ctY29uZmlnKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsXzBlaENRa0hvRkZCMWVWc2pmbDdhOWJGQnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzMyMGYxZDA4MTkxODE0NTRmMTBkNzc5ZDVjMSIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJwa2ctY29uZmlnIC0tbW9kdmVyc2lvbiBndGs0IGxpYmFkd2FpdGEtMSAyPiYxOyBydXN0YyAtLXZlcnNpb247IGNhcmdvIC0tdmVyc2lvbiJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9BclF3MTZXTmZwSzRQcHJlVXVhTU1kQ3Z8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMjBmMWUwODE5MThkZDJkODFmM2M5ZjNmMWUiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiZmluZCBhbHQtcm9vdGZzLWluc3RhbGxlciAtbWF4ZGVwdGggMiAtdHlwZSBkIC1wcmludDsgaWYgWyAtZCBhbHQtcm9vdGZzLWluc3RhbGxlci9ib2FyZHMuZCBdOyB0aGVuIGZpbmQgYWx0LXJvb3Rmcy1pbnN0YWxsZXIvYm9hcmRzLmQgLW1heGRlcHRoIDEgLXR5cGUgZiAtcHJpbnRmICclZlxcbicgfCBzb3J0IHwgaGVhZDsgZmk7IGdpdCBzdGF0dXMgLS1zaG9ydCJ9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MTMyMjMsIm91dHB1dCI6MTU3LCJjYWNoZVJlYWQiOjAsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MTcsInRvdGFsVG9rZW5zIjoxMzM4MCwiY29zdCI6eyJpbnB1dCI6MC4wNjYxMTUwMDAwMDAwMDAwMSwib3V0cHV0IjowLjAwNDcxLCJjYWNoZVJlYWQiOjAsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA3MDgyNTAwMDAwMDAwMDAxfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg4NDQ0MTA5LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzMxYzZjODQ4MTkxOGU1ZTFlYjkwMzM0MzYxMiJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI2NDc0MjNmYyIsInBhcmVudElkIjoiNzA0OTI5NmEiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjA3OjI5LjExOFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfMGVoQ1FrSG9GRkIxZVZzamZsN2E5YkZCfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjMzIwZjFkMDgxOTE4MTQ1NGYxMGQ3NzlkNWMxIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiUGFja2FnZSBndGs0IHdhcyBub3QgZm91bmQgaW4gdGhlIHBrZy1jb25maWcgc2VhcmNoIHBhdGguXG5QZXJoYXBzIHlvdSBzaG91bGQgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBgZ3RrNC5wYydcbnRvIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGVcbk5vIHBhY2thZ2UgJ2d0azQnIGZvdW5kXG5QYWNrYWdlIGxpYmFkd2FpdGEtMSB3YXMgbm90IGZvdW5kIGluIHRoZSBwa2ctY29uZmlnIHNlYXJjaCBwYXRoLlxuUGVyaGFwcyB5b3Ugc2hvdWxkIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYGxpYmFkd2FpdGEtMS5wYydcbnRvIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGVcbk5vIHBhY2thZ2UgJ2xpYmFkd2FpdGEtMScgZm91bmRcbnJ1c3RjIDEuOTYuMCAoYWM2OGZhYTIwIDIwMjYtMDUtMjUpIChidWlsdCBmcm9tIGEgc291cmNlIHRhcmJhbGwpXG5jYXJnbyAxLjk2LjAgKDMwYTM0YzY4MiAyMDI2LTA1LTI1KSAoYnVpbHQgZnJvbSBhIHNvdXJjZSB0YXJiYWxsKVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg4NDQ5MTE4fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNWQ2NTNiY2UiLCJwYXJlbnRJZCI6IjY0NzQyM2ZjIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDowNzoyOS4xMThaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX0FyUXcxNldOZnBLNFBwcmVVdWFNTWRDdnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzMyMGYxZTA4MTkxOGRkMmQ4MWYzYzlmM2YxZSIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6ImFsdC1yb290ZnMtaW5zdGFsbGVyXG5hbHQtcm9vdGZzLWluc3RhbGxlci9zb2NzLmRcbmFsdC1yb290ZnMtaW5zdGFsbGVyLy5nZWFyXG5hbHQtcm9vdGZzLWluc3RhbGxlci8uZ2Vhci90YWdzXG5hbHQtcm9vdGZzLWluc3RhbGxlci8uZ2Vhci91cHN0cmVhbVxuYWx0LXJvb3Rmcy1pbnN0YWxsZXIvYm9hcmRzLmRcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4ODQ0OTExOH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImE4OGU1NjJmIiwicGFyZW50SWQiOiI1ZDY1M2JjZSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDc6MzIuMzYxWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipJbnZlc3RpZ2F0aW5nIGdpdCBzdWJtb2R1bGUgc3RydWN0dXJlKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzMyMjdjN2M4MTkxOTQyMzBiNmNmYTQyNTc0M1wiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTU1qRmFOTm5laDJwWVhnUGlFYldjd1lyVm1DeEFGMy1mRjN4QjBsLU1oQXhMaTlVeGFTdjk3QWE1N3hWeGozOEtWNUJJQ2hLRWFvZFNBQWJpNVZ6a0xrVFBLM1dGUDJ6UWlMcmt6M19YbHlIRDVLaWRfcHdRcFlLbTM2S3NCZ0FtckF3RWowQUV5Z2x1V3o2X0FQVnhTWGVLeHZPWTJDa2tjSXU4bzlSNU1fbnd1OXViMXhFWWlJLW83Q3dUcTdxY3ZfVDI3ZFNrT2tfS1MyNERXTXJHS3BpUkhOQXItQmVSbEN1cGljczd1Z0Z3WGlmMFFzczV5VU14bzh1QWNueTNNNi1Yb25MWERRR20yb29UalhvbUxKVEVjVWpITktFcnAweWxiNkxBQlFxZDJpVEkxUnRveUVYVFkyQUxCaEc0MEFSLWpGa3BKd0NTRDh0X1JzWXVidE10ZDBneV9KN1J3MHlkNldmRnpseGVKMGZSSVQwRGlyamk1MU95SGZxZVBkTkhNbDFVejBqeHhXYjJmQ2ltYTFLczdxSEIyNENjTDlHcno0TXFWTEROVmJDWHVPckhsRFROdnJpNzI2cTVWNXBydmNyQjROTDRuaUdhY21OVzk0ZlI3UnpGbjZWTjNzMERudmtwZDlUUnl4eElidXFOS2ZCb0Jzamd3SkZxRmZkeFkzdWZ2ZmtsQVdKV0N3bHBZdVNmV1NNdVI4RUI1Q2x5OGNadzlJMU9LcURWOVJTSzN5VEMwZmdFVzhpdEJGV1FnUDdudHpEbmQzRW9vcXdBMGRJcV9pVDl2ajhSLUdDRE0ySWd5cTZZOEtEYWJNTnBsUmkxMjdtM3Q5Tk54TjJBblRPR21qQmxHWHRDMjBLYm5aenJacW9hT3ZnNUZhSkdiRXpLc19ONVprQUV0YWV6Qld5TktYZHo4SWRqUG0yXzJUbkQ5NzBleWVjVTltZ1N6UldTeHctZE1GNkJQdDFMcUtZeURWZy03QWVLTzI2Mmx1UzBKd0NrSlZRUE5wMTlMWXFYeW0yTFJpSmZUQUNqa2VNUkV0aW9VWmlhQzVwMmFXcWJHVFZCRzRCSk9iV1VrdE11VVIyNG0zZUJ0RXJfTU84VEtOSDZuekM3aUJFVHFESzlueWw0SDZPNy10enBqdi01X2xXYjV3T1pnOUJfVHZ4MmlrQ3pjUldheDB4Tkl1Z29SSkZFb05IWjdiQkI2Y1JsMHBMcFlsNUJvNXFPX3hQSjBVMjNEc3hHV2x5QXhhU2xPMmFXNXEtaHhwV21nVGxCeEExMVY2bTB0SFhoMkFYODl6VDRmLXJpa0dPSFdBWjJuZFdJMD1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkludmVzdGlnYXRpbmcgZ2l0IHN1Ym1vZHVsZSBzdHJ1Y3R1cmUqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfSjYxYkc3TDZEN0FSWUprbUxUVkZEYnNCfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjMzIzNWU3YzgxOTE4MmY4YzFmOWQ3NWE2MzE2IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImZpbmQgYWx0LXJvb3Rmcy1pbnN0YWxsZXIvYm9hcmRzLmQgLW1heGRlcHRoIDEgLXR5cGUgZiB8IHdjIC1sOyBscyAtbGEgYWx0LXJvb3Rmcy1pbnN0YWxsZXIvYm9hcmRzLmQgfCBoZWFkIC0zMDsgZ3JlcCAtUmhvICduYW1lID0gXCJsaWJhZHdhaXRhXCInIH4vLmNhcmdvL3JlZ2lzdHJ5L3NyYyAyPi9kZXYvbnVsbCB8IGhlYWQifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjgwNiwib3V0cHV0Ijo5NywiY2FjaGVSZWFkIjoxMjgwMCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoxNCwidG90YWxUb2tlbnMiOjEzNzAzLCJjb3N0Ijp7ImlucHV0IjowLjAwNDAzMDAwMDAwMDAwMDAwMSwib3V0cHV0IjowLjAwMjkxMDAwMDAwMDAwMDAwMDMsImNhY2hlUmVhZCI6MC4wMDYzOTk5OTk5OTk5OTk5OTk0LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wMTMzNDAwMDAwMDAwMDAwMDF9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODg0NDkxMTgsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjMzIxNzQxYzgxOTE4ZTYxZWY0ODYwNjQ4YTYwIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6Ijc0MzBhMjhjIiwicGFyZW50SWQiOiJhODhlNTYyZiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDc6MzIuMzczWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9KNjFiRzdMNkQ3QVJZSmttTFRWRkRic0J8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMjM1ZTdjODE5MTgyZjhjMWY5ZDc1YTYzMTYiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIwXG50b3RhbCA4XG5kcnd4ci14ci14IDIgYWd1c2NoaW4gYWd1c2NoaW4gNDA5NiBKdWwgMjUgMTg6MDAgLlxuZHJ3eHIteHIteCA1IGFndXNjaGluIGFndXNjaGluIDQwOTYgSnVsIDI1IDE4OjAwIC4uXG5scnd4cnd4cnd4IDEgYWd1c2NoaW4gYWd1c2NoaW4gICAzMCBKdWwgMjUgMTg6MDAgYTY0LW9saW51eGlubyAtPiAuLi9zb2NzLmQvQWxsV2lubmVyLWFhcmNoNjQuc2hcbmxyd3hyd3hyd3ggMSBhZ3VzY2hpbiBhZ3VzY2hpbiAgIDMwIEp1bCAyNSAxODowMCBhNjQtb2xpbnV4aW5vLWVtbWMgLT4gLi4vc29jcy5kL0FsbFdpbm5lci1hYXJjaDY0LnNoXG5scnd4cnd4cnd4IDEgYWd1c2NoaW4gYWd1c2NoaW4gICAzMCBKdWwgMjUgMTg6MDAgYW1hcnVsYV9hNjRfcmVsaWMgLT4gLi4vc29jcy5kL0FsbFdpbm5lci1hYXJjaDY0LnNoXG5scnd4cnd4cnd4IDEgYWd1c2NoaW4gYWd1c2NoaW4gICAzMCBKdWwgMjUgMTg6MDAgYW5iZXJuaWNfcmczNXh4X2g3MDAgLT4gLi4vc29jcy5kL0FsbFdpbm5lci1hYXJjaDY0LnNoXG5scnd4cnd4cnd4IDEgYWd1c2NoaW4gYWd1c2NoaW4gICAzMCBKdWwgMjUgMTg6MDAgYW5iZXJuaWMtcmc1NTItcmszMzk5IC0+IC4uL3NvY3MuZC9Sb2NrY2hpcHMtYWFyY2g2NC5zaFxubHJ3eHJ3eHJ3eCAxIGFndXNjaGluIGFndXNjaGluICAgMzAgSnVsIDI1IDE4OjAwIGFuYmVybmljLXJneHgzLXJrMzU2NiAtPiAuLi9zb2NzLmQvUm9ja2NoaXBzLWFhcmNoNjQuc2hcbmxyd3hyd3hyd3ggMSBhZ3VzY2hpbiBhZ3VzY2hpbiAgIDMwIEp1bCAyNSAxODowMCBhdGItdXNwZDIwayAtPiAuLi9zb2NzLmQvUm9ja2NoaXBzLWFhcmNoNjQuc2hcbmxyd3hyd3hyd3ggMSBhZ3VzY2hpbiBhZ3VzY2hpbiAgIDI0IEp1bCAyNSAxODowMCBiYW5hbmFwaS1mMyAtPiAuLi9zb2NzLmQvSzF4LXJpc2N2NjQuc2hcbmxyd3hyd3hyd3ggMSBhZ3VzY2hpbiBhZ3VzY2hpbiAgIDMwIEp1bCAyNSAxODowMCBiYW5hbmFwaV9tMl9wbHVzX2g1IC0+IC4uL3NvY3MuZC9BbGxXaW5uZXItYWFyY2g2NC5zaFxubHJ3eHJ3eHJ3eCAxIGFndXNjaGluIGFndXNjaGluICAgMzAgSnVsIDI1IDE4OjAwIGJhbmFuYXBpX202NCAtPiAuLi9zb2NzLmQvQWxsV2lubmVyLWFhcmNoNjQuc2hcbmxyd3hyd3hyd3ggMSBhZ3VzY2hpbiBhZ3VzY2hpbiAgIDMwIEp1bCAyNSAxODowMCBiZWVsaW5rX2dzMSAtPiAuLi9zb2NzLmQvQWxsV2lubmVyLWFhcmNoNjQuc2hcbmxyd3hyd3hyd3ggMSBhZ3VzY2hpbiBhZ3VzY2hpbiAgIDMwIEp1bCAyNSAxODowMCBicGktcjItcHJvLXJrMzU2OCAtPiAuLi9zb2NzLmQvUm9ja2NoaXBzLWFhcmNoNjQuc2hcbmxyd3hyd3hyd3ggMSBhZ3VzY2hpbiBhZ3VzY2hpbiAgIDMwIEp1bCAyNSAxODowMCBjaHJvbWVib29rX2JvYiAtPiAuLi9zb2NzLmQvUm9ja2NoaXBzLWFhcmNoNjQuc2hcbmxyd3hyd3hyd3ggMSBhZ3VzY2hpbiBhZ3VzY2hpbiAgIDMwIEp1bCAyNSAxODowMCBjaHJvbWVib29rX2tldmluIC0+IC4uL3NvY3MuZC9Sb2NrY2hpcHMtYWFyY2g2NC5zaFxubHJ3eHJ3eHJ3eCAxIGFndXNjaGluIGFndXNjaGluICAgMzAgSnVsIDI1IDE4OjAwIGNtMzU4OC1uYXMtcmszNTg4IC0+IC4uL3NvY3MuZC9Sb2NrY2hpcHMtYWFyY2g2NC5zaFxubHJ3eHJ3eHJ3eCAxIGFndXNjaGluIGFndXNjaGluICAgMzAgSnVsIDI1IDE4OjAwIGNvb2xwaS00Yi1yazM1ODhzIC0+IC4uL3NvY3MuZC9Sb2NrY2hpcHMtYWFyY2g2NC5zaFxubHJ3eHJ3eHJ3eCAxIGFndXNjaGluIGFndXNjaGluICAgMzAgSnVsIDI1IDE4OjAwIGNvb2xwaS1jbTUtZXZiLXJrMzU4OCAtPiAuLi9zb2NzLmQvUm9ja2NoaXBzLWFhcmNoNjQuc2hcbmxyd3hyd3hyd3ggMSBhZ3VzY2hpbiBhZ3VzY2hpbiAgIDMwIEp1bCAyNSAxODowMCBjb29scGktY201LWdlbmJvb2stcmszNTg4IC0+IC4uL3NvY3MuZC9Sb2NrY2hpcHMtYWFyY2g2NC5zaFxubHJ3eHJ3eHJ3eCAxIGFndXNjaGluIGFndXNjaGluICAgMzAgSnVsIDI1IDE4OjAwIGVhaWRrLTYxMC1yazMzOTkgLT4gLi4vc29jcy5kL1JvY2tjaGlwcy1hYXJjaDY0LnNoXG5scnd4cnd4cnd4IDEgYWd1c2NoaW4gYWd1c2NoaW4gICAzMCBKdWwgMjUgMTg6MDAgZW1saWRfbmV1dGlzX241X2RldmJvYXJkIC0+IC4uL3NvY3MuZC9BbGxXaW5uZXItYWFyY2g2NC5zaFxubHJ3eHJ3eHJ3eCAxIGFndXNjaGluIGFndXNjaGluICAgMzAgSnVsIDI1IDE4OjAwIGV2Yi1weDMwIC0+IC4uL3NvY3MuZC9Sb2NrY2hpcHMtYWFyY2g2NC5zaFxubHJ3eHJ3eHJ3eCAxIGFndXNjaGluIGFndXNjaGluICAgMzAgSnVsIDI1IDE4OjAwIGV2Yi1yazMzMjggLT4gLi4vc29jcy5kL1JvY2tjaGlwcy1hYXJjaDY0LnNoXG5scnd4cnd4cnd4IDEgYWd1c2NoaW4gYWd1c2NoaW4gICAzMCBKdWwgMjUgMTg6MDAgZXZiLXJrMzM5OSAtPiAuLi9zb2NzLmQvUm9ja2NoaXBzLWFhcmNoNjQuc2hcbmxyd3hyd3hyd3ggMSBhZ3VzY2hpbiBhZ3VzY2hpbiAgIDMwIEp1bCAyNSAxODowMCBldmItcmszNTY4IC0+IC4uL3NvY3MuZC9Sb2NrY2hpcHMtYWFyY2g2NC5zaFxubHJ3eHJ3eHJ3eCAxIGFndXNjaGluIGFndXNjaGluICAgMzAgSnVsIDI1IDE4OjAwIGV2Yi1yazM1ODggLT4gLi4vc29jcy5kL1JvY2tjaGlwcy1hYXJjaDY0LnNoXG5scnd4cnd4cnd4IDEgYWd1c2NoaW4gYWd1c2NoaW4gICAzMCBKdWwgMjUgMTg6MDAgZmljdXMtcmszMzk5IC0+IC4uL3NvY3MuZC9Sb2NrY2hpcHMtYWFyY2g2NC5zaFxubHJ3eHJ3eHJ3eCAxIGFndXNjaGluIGFndXNjaGluICAgMzAgSnVsIDI1IDE4OjAwIGZpcmVmbHktcHgzMCAtPiAuLi9zb2NzLmQvUm9ja2NoaXBzLWFhcmNoNjQuc2hcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4ODQ1MjM3Mn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjZjYjNkOGJiIiwicGFyZW50SWQiOiI3NDMwYTI4YyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDg6MTAuMzIyWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipQbGFubmluZyBHVEs0L0Fkd2FpdGEgVUkgY29tcG9uZW50cyoqXG5cbioqRGVzaWduaW5nIGRldmljZSBzZWxlY3Rpb24gYW5kIGRpYWxvZ3MqKlxuXG4qKlNldHRpbmcgdGFyZ2V0IGNvZGUgc2l6ZSBsaW1pdCoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzMjcxMTQ0ODE5MWJjNDkzMzA0YWU0MDNkYWRcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1NNExvVG1PY2c5YlVRTVBUNDR1dkJLbnlFSzlET19vemV0UHd3M1FlQlFHa2pmSjNjcDZacVVWbERGV2FHRlhXeVhHSWZYTEJXZWxWU2hpMkFUamJoWjE2WUhaSW05WkQ4NHlRS1F1aDVGOEpqU09KZHVNb1FGRDZIeHc4Umt0SGNrQlJROHR6NjBDYUNXbDVsQjlOX1huVGhncGFQd3pBaVE2THctNzc4STlCNVRQLXV4azNsVEZYRzlNQzd2VXNUSE5OSzBUaXBSd1B6b3VtSVRLWWN5TFBjRGZmajB3N09xa0tQU1VoQ2g3dGVsd3pvcFU4T19WMFhXQzZSRlRSWmpISXB5ekZQUU94c0psQ0hRcDU3aDFYdWdjQjVFR3ZUanNTcU9XcU9kOHVJNG1FSUd6RTAzQ1BCeU5iYU1tQnZkdXB3bkpPZDgtbFlrbWVtdDZaLXdzQkVlVy1DMkFJeVlvb1BVcWRWMGI2RWRBc0w4ZDNqUmRNcmxjcHM2elQ2bWdFZTR0UHpsSndGWHdFbVdYUkNUbEQ5Yk1lYkdZVHdhZlNNMkQ1bG04azRUOEl6NElIYm5SNTRNblZnX0Z1bFhYNVdXYXNnNU80YVJPZmVfVUFFanVPTmt3SGV4SEhoN2dCRDlqTzNHVnc2Z1MtNEZodlctLTJuSFNWYVVLZWNvOFZvWkRLY1JqLUJhdU9pODAtbVdfWEJGRE9vR3JTYXlYS3EwT3ZrQUZvNTZLekhsMlJOU3Z6TzdnUEpDeDZyQ00xTGR5c0Fnb0hsUExMRWc1OENMNjlHWm9QLUJMdmZJeTQ3dlNWLUJTQXROdkdnc2xEOUgwb2lxeGxTb21YZlpFS2dEajdBZ29OYkNGTkZBM0Z4cFcxQVY4ZVI3ME1mQXYtQjNBcHdtTTc2c2lybElLN2h2WlRMZndhczQ1YS1RbVhOVlRoM0xHSFpObXN1Z2kyd2dmYzI5SEZOSmp0Q3FDQ28tcldpWHJkbGdIT2lKTHFHd0s3Zi00V2N4RzEzMUtiUmFHTm5RMGxlZmlNY0VQcC01RjY4MDBNOEI3UVlNSWZUZDZ2V3pnbjRtWHZLTDlYREVTRUJjWHFHeVNJM3dIRDJtV2lTS2xTaGZob2hDVnZhRUJYbW5PUUZuTTliRElWSjJvYW53SjhPX19lRWVVdE5QVkNPMUh2VWRhdkNTZDV5WTFYNWxueUk0R2lkUk02cEwyV0xxR3ZVY2JfRWdDUFhOU3NwZzhWX3RnY0hySmZTazlkd2JfNVZENlNoVExvclJpTjlUTFRXX3NvbWpUR29jRXBXVkotRDlLeW9qZ2VqbS1OVnRBR0VMX2hGbDhMaThoTGliQUpxYlRBcm8wbkZobXpSR3BIUnJZQTdka1ZvcmhzT0FXb2thYVZNS2RoRUhVRnhZWDY2YTlsa3Q2OEwyOFVhT0JyNEhjbU90a1pOYWlraGFlTVl5RTFsZDY3bkY2QXp1SkJqbjBjTEVuMzZROE5Zbk9HSTQ3MUZ2Y2Q2M0UxWVdNeWVyMlhWUXhSalFYT2o4VEI2RktDb0lMZGVkcTRHakR6d1JuQXo1ekNGV1RDY24tUFpIcTRLcVhNUnpUeXhRNmMzbUpKMmp5aTM4SFhPVzZEaGhSTFBPWm8wNlN6NS1XejRoblVMTkxSSTZtQWtac29JSjFqTWZZaTBBME1xaDBoMTVoSUZkY3J2YVZzaUotcmw0X05JYVA2VWN0QUh2bnBhb3NwcDY0Um5veVBMTUZySHNCbFM4Y1dlYzRLS0x5OXRyMzFJUTVSaGl2ZmpHTWhGVHJFOHlXbVJ4Q3BPMC1ScTFFWmdRSmo3RTJFamxzdGFPbzNYb1hPVFlXSGtKQThGdjNwMTlMV0xUMFdzTmtLYnNhUUZPeXoyZUtMWFc1RkFNOWN5Qm55VzA0WDd1bnM5QUZHay0ybUVzMHhEU1diQi1FWWllVkZrVzdMTjhva3I4RmRON0JMWF9DVE9DN2hYQ3drWjYxaVowSEczZ282SVR4TVZvbXZzR0wweVdSRkwwV09sdG9pQ3VNR0xwdlllOVVzcFliNS1hUHphd3JNTzBjM0FLc2lqZmVYZzB6aHZraFV2czY5OTBFUEFUVllycjdicEw4TW5PQm1aUjd4WXJzSEotU2dZRjFDb3dsOVZTR0cyWjJpcU9QNEIwdDFNNHBxUGcxWE1qQldtRTFOcW9aR1FKTTVYUmY2Tm90ZnRQekRnbHRuSVJTalFQT3FQcGxvcGZVb0NxdnliRnBJVUlTakpieWNqa09Ybi1KWjZuWmctMHAzSHV3RlF4YnR6U1djRjdldHdwR1luMTZ3TXY1Ykg2N0hVVzE0dFE3bFE4YTRxQkZ3YkZ5QWhkalZqVDVVY2hybUZfMFdMMmUyRFhWME9OdU1nVlBOWU42clI5cngzdGlJNGZDWk9jM3RONnQ2RU15Vy1uSEpqbVl6ZUo5Vm00YjVSSFQ4LTZVNXZSaUhFSUM0Q3ZLMDMzOGg5c1pNQmR4LU1YZ3RTeTJxaUxiQlo1YzBseS1LemppeF9XOXlZa1ZWdkkwV2tFMkswZUgyVmhqQ3Y5a3lYaW5hTjN2WGFZS1dCOV9NQ3dDNmRvbXAycGQ5OGlFZERGRVVCdktUNjlYYnh0WDctaUw0SkhROE5sUzBvWXFFZVNXNU5qQzN2aTYtTlZxLWhHSmQ1SjRna1hnS0dodEdyZDJ1em5ldGZVczVqTmVJTTZ6UTRPMkQzTWliYjk2WVRXZzFOVTU3NHRFVUE2eTF3MHRWc3ZWVElXSm5KTU96bm9lRWstbEpoUDlLM25PaXJva29yeUw2aGxsVjNHRnRQV0c0YjVkSVV4dUhVQlZFSkwwOXJGZlpCR29IRjAyVDFxTVVfQXVseHZNN3FYa3Vrd0VlZFdtc2NOOHVzZWdNc1Q1N1BoSmNwa1ZUZXhCb1UtZ0Z0SEN5bHJad0c4UUxialJtNXowWFRrT1hlaUYzR0pTcWVjSlNYSHVlcUVEa3JxNklOOVlWaWhDbUpDNUo2TnA4RUJhaXdrVlBYTkhtcWUtVGtJbTdIVXBlWU5NVHZ2a1lOUTM0WWhDc2JJcmpJbVB4NDd1Q0J2d19BTmRrMmMzU2o0TXhQVXcyWXJzZjRFOXgtVm1OMXU3ZkFhTE5ZYmd0WnlqLUlKV21UWmxxTUlUdUE5OEI1a3pnREZEei1SRnNpVmg3aGVITmxKMXVocmExSnR6Qi10M0hySmZTeXUwRzRqNGw4TDBvNDNtUGpmNmNleFVib0p4a3lGdThtRDZjUnVJZmMwY3dBbzFlNHFxNXUwc292OGdwc0N3c3BrTHVmbEVQWDZicV84dm5jbzl2M0RENTUxbDY5ZHhUb2puY1F3eWpTSlpfZ2d6VDVsc1FoWS1SdkdlZkdYZERndEViY0hwZVZvT3lsb1RhMDU3eGs3VkJUODlRclBsbU5ZVlZNbW9PNm9JdU1NUEhFMkpNdFZDN2xKRC1mVTBIXzBxQjdzandDcVllZzV5bzljMC1pVVM0Z3Q5dDNLdTFTcU01cVRCZFZJdVhpUExSdEVVeUtha0dfNzlfcEF2XzZudzZtQmJmX2tzR2FEdERoRENjQ284clJmVHVxMy0zSURic0w2YTQ4aVdtUWl6Vk1nWm5uWWphT1BQZkVoeU94M1NzeUFyVVpMYkVkVm9fRGxmdGYwT0dHRHNmRzkyOVlGX1QwWXZJYUJnNGJkeF9oQjBSc0s0a0F1bTNNcHMyYzFxY3hnbURuWWlsNDNFbW80cDFJSW9MbWVqeENVM1JmcUNwOHpmbUlZVzBhX1hrTkJiSHFYeEdFZnlLbU9EalhxTmdJaG45Slh0QkxtY0lVaVFBTTVQQWdacXNneTlYVjc5bzVGNEZGSTdGclRkNlBLSHJqY0NWOGo3TVY1WGw4RDEyOEppaFd2ZXBiQ1hrSnlhVWFhOGY0VTJpQmpsbnlxVTh1bVp6alVQaTAxWTQwZzFOXzVqMU1QMld3alpmM0x5MWk1Q2lxbXBSMUdfOU1Pam9XcUYtTFAxR2U2TzZ0WEFCbmJSZjZmQ3kwdHB5MGV3ZGo5d2Q3U3RxQzFRSmNQMXViX2dRSkozT0Z2ellZcnFaajROVXU4T2lDN0stVThDUkxPQkUtMXhFQ3VWdDk0TExhYk52Q0g4bG13YUJmWHZxTm51Z2ROYy1qaTgwOTZVdW96bFA3RDV4Rzhwc0FubEhsUUU4WWV2dGNFZTVhM0x6MW5YdHB0cmQ4MFQwT3ZseUdIMnQ3cGpudE5FMWlKUXNSQjE1akFNbGtiREtGdU9IaWRwTEF4MURBbVZXSlFZZEF4QW5FcERYTlNPZ1dwUmV1Smo1WGNadGpGQ3BaNmlBZG8yQlMwVFpoWmkyWW5rRm5pM0JmelBpUjJQZ0NZbjlLMDIwdHJCQlEzRUpSUHVnY2NFT2tYa1JfVmkyNklYM0RYS0xNTmZRcWlid0c3eDFNcUlvZmNMUk4tWm9KRHdMRUM0QVZINzVkbHJFSWpwTl9kQVQ2ekpPNGxKckhEUERDdFgxeGdBWk9SY0dDcmEwVEFqdDdDa0QwNDhjVmc5dnA2a0FKdjltbWFGd0FGaERkZ3pNZGVaOHVSbWFJMTJYeEpNTVhheFVodnhFV1RhaXdPcy1WaGY5bDdodHMxSUs2UjNjS3B4ZzdYVGMxbUk2T0U3c2JUXzRTTGIyYTVIbjFaMFFCcVR2S1hiVkRuU1RjalZ1T3ItS1lzdzRha1Bncmotd0pVRUgybU41MWJVZXNybGt3STNSSEdLdk5RSHE4aWVUYlFVUjQ2U3UwYnFNUXk0eVdzTmhoV2lxaFNRQzlEN2VIb1Zkb2RLSGE5UXpfM3VMVFNMdHVocWp3V1pEYTVCeDRvMHhFbWxxbjFhMkZvX2RKRjR1bFZUcHFHUXpqTUxiRTNBcFo0RmRyZERxTV9Rb1JPOTFkRXVhVDZZb1FESDltRk5feGJSMi05QmIzZlJCMDU4MnA3Zlh3SmJGZHl1YUZnajg5dVdNZ1FGMDloaC1yaFo4NGJMVjVSWjBFdzY2YS1qcVZJNFoyWlJxZGVTdEoxVk5iTkgyLURlU1lBU2NjNlMwZ09tTlQxLTQ0RFcxY0dYUWRONENlV21wZV92anJObnpLZmk2VnpfdXUyWXhyU3VycDRtdVhBbDk4Z3U4VEI5bDk5UDBYck1sTG5zX2Z5ekdEellaVlNLVnJBUFRwUzdWNzFQbEFLWGhWZFdmZ0ZRUlZnOW9tOU9ybFliQ0g5UC00cWdrVFVtRmNyTzhkWm5KOGJoc2pnUE83LVdhT0lOd0VpUXZNZ185NUYwcTd3TnVxeEZmRGlQZnc0WkRIUGtwUTBXMlMwbjllaFF0cHhHSUx3bU9ERHRkZ2hrVHhhckVsQzBrYjRNcHFPb1VNdEpScS1HcEJhV3ZsUlNmaTZCcHJUeWhGZHNnV2hseTBnX29DWnJIcnVENFg3SHNTX2NXUVdmMU9paXdaU282OEVGTG5qa3RERDM3aEhiaEdDYzFkejd2VzUzR0NRbEdmbFhhRnpXbGVQMEoxYkhBdUVvUXdFbmxJTWNkTWpCeXhpRHNwb2VmWUtQdkMtekJUZ1wiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqUGxhbm5pbmcgR1RLNC9BZHdhaXRhIFVJIGNvbXBvbmVudHMqKlwifSx7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqRGVzaWduaW5nIGRldmljZSBzZWxlY3Rpb24gYW5kIGRpYWxvZ3MqKlwifSx7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqU2V0dGluZyB0YXJnZXQgY29kZSBzaXplIGxpbWl0KipcIn1dfSJ9LHsidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkRlc2lnbmluZyBHVEs0IEFQSSBzdHJ1Y3R1cmUqKlxuXG4qKlJlZmluaW5nIGJvYXJkIHNlbGVjdGlvbiBwYXJzaW5nIGFuZCBVSSBkZXNpZ24qKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjMzM4ZWUxNDgxOTFiYzBlYWFhODE1MmM3NzM0XCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNTklNcURIQm9nYzQteU0yTGY1OEUzOTNSakJzWF9nSUhfVElzVVRCb1VoZ1JtLTNxMnl4WmFET0dmNTVKYzNVa18wVGZ0UDRVS3k4aHlEaTVDRkpTcjlOMTM5UW5KNnNVbDVQellzeWRGcW5Fcmh1N2tMQU1SUnJYRGlsYk9qOURFSkZBRnpiTWNvOHJPdGpoaG83ck9VaVlHOXc5S0VqS01RQU9icUJtVWMxSE9GLXBzNDcyTTZmcFQyVmx2OUcwa1NuUDNTVTh5eklHSDJ2WWhiazFUd1lMSFNrOGFDb2VVTGlMRU1KeXNqT0dSTVZnTm45WEJ5ZzZ1OFE1X2ItSmRSNGo2Z3dqeDNFZGo1VGtXTV9hUDVPbmZVQktSeHhJNjZLQ05NN0hPNXFHUG9YZHdWWjdtOE1hbktGd0ppQ2pjMWFwX3puNGFFUGJMcThPdVRTcFNxdjk3NVJCMEVHWFNJWUIwT0J6WE5GUFhSWHZLdTlrU3NpZ2pZTHdOOEd6QXFBNWx1Y2tNeFdxRm5ZVE1OamxLM0t2VmtnVU9mUmFPRG0zUmJOZmp2N0VCdG1ITTk2SWw5ekgtTmM1YzIzUTJXcXhXR3Q0LXJTY0xQZG5PVXlGMGxyX0c1ckpxUU4wQnpmbEZ1T2FhaGhtTC1kdDRaeC1La1pLZkxMYVpIV0U4SEVEMTBFcXhrZmVSTDR3MjFrY21mR2xobWh2MUgtcGhOQUg4d0RtdER1eHNMRnQ1TG5QNlJGbmFwaUk1cnV5WVdxUHpLeXliX2xfMklPTEg4UnpYcEd0eS1kb0hjbnpyVVRMcmR4cFdpQU84MWIzTGhUTk1zZ0hnQ012clB2UEdIaVFYSkNOUjdPTXgydnI4T0VwcHVxWUh0cllGTjlFaWVUenJPSTMxTEZNQ2FxQkJLX1N0RE5uZ1U3M3B2Y29CMVV5TUVyOGktU1JUUGpaNl9lTnJUZUctdTF2SVlIV0pvR1FLaXJYQUllbUFKaDBsbjZOOGliZGZ5WjFxNl9DcHUyUGE0WVBMRGRITlhQSUhIVVMtMTBVdUJzZmgtWlBFcjZKcHVqUmZfdDJxUFVIRTFKTGRBZE9ZX1A3M0cwUHBxWWUzMmxmWk9tU1NjVm0taURzRFdjU2N1TzhXNGxhWFhyd2hSN3JIcjRlbnh0bmVtU2VBdElzOVZ6RnJWLWdwY1FoWEhMbFc4VU84V25OUDRoc2h1bmg5Vkd3aUJqcU9MUXM2X185cXkwTnhQakhOMWdqQVNDTS1zZXZaMzB5QVNQQk9aOEVJWUxXR0JKa2FFMTdhcnhMemE1QTZBQ1NvcWFzQklUQklvbWplZ1p0UXVBYkY2bmg4WVd5VEpPa1A0RjhvVWpieFNoNlQtRmVEbXVxaVBPOVZ1ZndHMmd3WkFHVDdfcVRBM3RtYUN4ZFhfNDRxbzZiN196Tm5QV0YydFNraXdabnZCQVpLWWRubFltRnQzSmpiX2I2LVg3Y1hOaHpyNEJldmRDUGVqYklXWHp2d3VOZ2NBVERJZjJ5UW85a2FfeDc2eWVwbU9tZnFXOEdMZ09lN2xkWXhmeWpzcTRVWVlkYUh0TTZqZ2QzVGxBcDI2SEp1dDBsNjcweVhjcHJ6R1d0LVFLVWFfVnFCamRMZVM3UXk3bV91VEdHZDdCeUU1c2o2anpmbTFibGJtRWw1eDNHTVNic2J3RkZRVGptZkhURlpUY1pmTlRodmZCY2luOVlRLURTWjJBU1Q5MG01VzBsZ1c0ZUdjNXlmb2ZoLXV0elVZeU9QOFNlV0c2XzdQMHI3a3RKcE1UME91LXdpN2FoYVNMVUtFMUE3TV9TbXNCZ3FNRzdwalJyblE1R2s0Z0kzMHZ2RWEzZ1FjcmxybUlMd0d1RmdEVzBkVDAwcEpYc3ljSEZvYU1JVFZ4azVXSDJ4bXhIZFE5aDBRWENxOU9EZEFGaUtjTWRjUTF4aEdhTWlrQVVqREE4anZXVXFBRERfS3p5dGxSX04wOXFaWHNtbG5nb3NyV2gwTFAzYWM2eWFaVWJaSWlMRUkzckdiTzctMWVnQ2VyenRTWmtxZWFYMDktYmNOQ0tuN0ZGV0NsOTlxWmpDT3QtTGxNMnN5ZWhzTjd6UWItUlFubnY1MU52d1FvLWtYUFp2bURZQ0dOYkFwNG9QTHJ4MVNuT2tCVUl1dlRra1BWdGE3d3JzemlaQjZXYlNuODkxNEk5ZzkxSWp5T0FGWjhKcHNiTFRaUU8zOXVBa0xyVzV5TVItTjFJdlFwYTBRR1hOeTQ2WWkwQkp4YnZYZVlycXB2b0VLREZQWFdzMVlOanJ6UjJaVElUMWczaHZDQnBIVXBJek52ZXI1VFh3aDJWbXJuQi1FNVBSWHVOWGZkR09WT0VCcVNvWFVqX01ScDdYbElva0NCWG1WY2cxQlE3MlRISVdsdkZPVm02ejhxa3I0dlN3SkZIUmNDRDY2NGtmVDV2aWVGc0xpR3BiLURMdmZza2RhNUhXaXcxV1ZiQnpOR0QwMlhSWjlkampsRVo5dnZISjlYbXdOanhyMElUVzA4eUh4dzZfWS1BOHpYaWlNN3RBcWdmZ2pHLTVMY3UwTTRQc0NRN1dXckhfMnZNU1pRNFdycnhyel9fM2N2T1l4S0pTZWxUaUlOd0NrZDMyTTZMSmY1Q0VVWW96UzRKZjlfazNNWFBCbkxEUzdWNlpMMEpFanpkUlRiUm5Ea09hQ2JUSElSRENNeXRDMEFxb1dVa2NXaWwyaFQ5MmYzSGxXOXE3X1dURnNFOW95MkY3eXVuVzJtWGZ0bnRvd1RIT0ZHY3djRnRDQ05rLUZTNWJkbWFPbEYxRFkwejdNSWtfelVUTTBpa0h1dk9xWmVRR012SVFaTVJSWDBUZkJzZHM5Z2liVkJTNUlPdEJCNjBiMng4S3NQemJfeW52MHk3WUNibGd5X014Z3Btbzc1U3ZyZlBIMUVmQ1RpSThjeTcxNFlJY0ZxMThBczM3NjNlOTA2ZTROa1dscWczSEZ5aXY1WjhNTXBta1hnR3M5LUhNZlFveEFOTWlXeTI4Qmg4SGoxVE1CYjlHbEw5WGJJR2ZTWjBKa3ppY1hfSVd5V1Zta2pvWTRUSjJ3OC1ockFTV1hyZG1HSnR6Vi1oN3k0dnlhS05Sa1dyNWNBTmZha1NNRDJ3N3hVWUNKVm5pNkxvYVlDVnVkdHlteklIYTBOX0dFWkwzSnd4aUUyZnBzNDliQjd5M0d3Q2tCdG0zTnNELWdZcDR2V2VTMXVtVEtReVd1NWVTVXBhZE5nbzJRQjVLN3dlUnF3THFYUGhFOUd3OWl4aEJUM1pPUkVSSFAtUWkyNk9PUXJBSWwtUUZMem1VZm5GUlV2X3RhWTV2U1lYSEVXckJEcDgyMGdlUzd1eGxuVnoxeTdVdHBHbWpCdjNYbEZVd0hFZ1FpaXZIaEpVZHB5U0daRURFVWN5VldTeTBJVmZBemJWWlh1T1VROERNeE5YUS14ZDItR0J4NTYxZkQ1SEFmVjR5UDdneUZVdnVqMWZ5bkFfOFZfelhhZVpIY0RuVV9xUHNkWTJKNktadmtqTjZpOF9Nb2xlOWlWNjB6bTJqU0F2NlNuTjdOZXRXYjY1cTVXMEE4NmpDNmo2OVNINDVQcWNtRk5sR2pCN2JfQ2x6TkUwMmpOU1RQQkR0VEF1a21tYm5IMWhpNnNvOVhmeVJZYlQ2QXFJbEZRN0k4YnlqLUJ2djIwS1Y1cEw4alJWUzA5M1R4NDU4d0U4VkEzTGRhU3VhZ0FVb0E0eDZvbnNBY3U3ajdHdHExUGMwc19xSHBpeWJkQXNxdkprMHRNTFM0MHR6ODAtY3RIMDh4TldxTklva3JJRUVYRDFWM1BfUDJVeVJnRXhqQ0tqd1ZLSnhWejlSZGJybmEwbmluRUkycEJ1Y1haY09rUkM2VUp5cHotdUxkVHY4Tkh3LXZScldRTUtwOGxhNWxzZkNLak51RE5oVUdtRVJnWl81eXcySGVRY001eVdRUy04VUZHMGtZWXE2TDdlYUxFUmc4Ql9WYkNzQ1MtX2JOT04tNnZrbnhaUjBBamdmcmo0RE9wdXIwRFpndFdrOEZlRzVkU3AxX3lKSUMyWHBjRlVOenpvSnB3dHRzZVZPWk85d0N3WUZLTGFFYWJDb3pyOG1WOWRLWTMwMFdTNEpIQmJ2aWNGM1BzTGg0WnUyNm5LVEhGNGxsX3cycGtTZXNQNkFxVWtzLVlxekk5VVdNMnhXMlwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqRGVzaWduaW5nIEdUSzQgQVBJIHN0cnVjdHVyZSoqXCJ9LHtcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipSZWZpbmluZyBib2FyZCBzZWxlY3Rpb24gcGFyc2luZyBhbmQgVUkgZGVzaWduKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX1RIcWhDVmRyM0pXejdxUXVmWUE5Q3pwV3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzM0ODMxYWM4MTkxOGE3YzQzNzdlZmYwMzZlYSIsIm5hbWUiOiJ3cml0ZSIsImFyZ3VtZW50cyI6eyJwYXRoIjoiQ2FyZ28udG9tbCIsImNvbnRlbnQiOiJbcGFja2FnZV1cbm5hbWUgPSBcImZsYXNoZXJcIlxudmVyc2lvbiA9IFwiMC4xLjBcIlxuZWRpdGlvbiA9IFwiMjAyNFwiXG5kZXNjcmlwdGlvbiA9IFwiQSBHVEsgaW50ZXJmYWNlIGZvciBwcmVwYXJpbmcgQUxUIExpbnV4IGltYWdlcyBmb3Igc2luZ2xlLWJvYXJkIGNvbXB1dGVyc1wiXG5saWNlbnNlID0gXCJHUEwtMi4wLW9yLWxhdGVyXCJcblxuW2RlcGVuZGVuY2llc11cbmFkdyA9IHsgcGFja2FnZSA9IFwibGliYWR3YWl0YVwiLCB2ZXJzaW9uID0gXCIwLjhcIiwgZmVhdHVyZXMgPSBbXCJ2MV81XCJdIH1cbmd0ayA9IHsgcGFja2FnZSA9IFwiZ3RrNFwiLCB2ZXJzaW9uID0gXCIwLjEwXCIsIGZlYXR1cmVzID0gW1widjRfMTBcIl0gfVxuIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoyMTA4LCJvdXRwdXQiOjEwMTIsImNhY2hlUmVhZCI6MTI4MDAsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6ODY5LCJ0b3RhbFRva2VucyI6MTU5MjAsImNvc3QiOnsiaW5wdXQiOjAuMDEwNTQsIm91dHB1dCI6MC4wMzAzNiwiY2FjaGVSZWFkIjowLjAwNjM5OTk5OTk5OTk5OTk5OTQsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA0NzMwMDAwMDAwMDAwMDAxfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg4NDUyMzczLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzMyNGIwNWM4MTkxOGEwOTJkOTJjMzhhNDNlNyJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIyMWZkM2RkMCIsInBhcmVudElkIjoiNmNiM2Q4YmIiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjA4OjEwLjMyN1oiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfVEhxaENWZHIzSld6N3FRdWZZQTlDenBXfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjMzQ4MzFhYzgxOTE4YTdjNDM3N2VmZjAzNmVhIiwidG9vbE5hbWUiOiJ3cml0ZSIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IlN1Y2Nlc3NmdWxseSB3cm90ZSAzMzUgYnl0ZXMgdG8gQ2FyZ28udG9tbCJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4ODQ5MDMyN319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjYyYWFhNjI2IiwicGFyZW50SWQiOiIyMWZkM2RkMCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDk6NDEuMzY1WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9xWExndWg3Snc1Vkw1M09OTmh5R3JRTjl8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzNGJlZmNjODE5MWJkODQ3Y2FlMWFiNGEyOGYiLCJuYW1lIjoid3JpdGUiLCJhcmd1bWVudHMiOnsicGF0aCI6InNyYy9tYWluLnJzIiwiY29udGVudCI6InVzZSBhZHc6OnByZWx1ZGU6Oio7XG51c2UgZ3RrOjp7Z2lvLCBnbGlifTtcbnVzZSBzdGQ6OntjZWxsOjpSZWZDZWxsLCBmcywgcGF0aDo6UGF0aCwgcmM6OlJjfTtcblxuY29uc3QgQVBQX0lEOiAmc3RyID0gXCJvcmcuYWx0bGludXguRmxhc2hlclwiO1xuY29uc3QgQk9BUkRTOiAmc3RyID0gaW5jbHVkZV9zdHIhKFwiLi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvU1VQUE9SVEVELUJPQVJEU1wiKTtcblxuI1tkZXJpdmUoRGVmYXVsdCldXG5zdHJ1Y3QgU3RhdGUge1xuICAgIHNvdXJjZTogT3B0aW9uPFN0cmluZz4sXG4gICAgc291cmNlX2lzX2ltYWdlOiBib29sLFxuICAgIG91dHB1dF9maWxlOiBPcHRpb248U3RyaW5nPixcbiAgICBvdXRwdXRfaXNfZmlsZTogYm9vbCxcbn1cblxuZm4gbWFpbigpIC0+IGdsaWI6OkV4aXRDb2RlIHtcbiAgICBsZXQgYXBwID0gYWR3OjpBcHBsaWNhdGlvbjo6YnVpbGRlcigpLmFwcGxpY2F0aW9uX2lkKEFQUF9JRCkuYnVpbGQoKTtcbiAgICBhcHAuY29ubmVjdF9hY3RpdmF0ZShidWlsZF91aSk7XG4gICAgYXBwLnJ1bigpXG59XG5cbmZuIGJ1aWxkX3VpKGFwcDogJmFkdzo6QXBwbGljYXRpb24pIHtcbiAgICBsZXQgc3RhdGUgPSBSYzo6bmV3KFJlZkNlbGw6Om5ldyhTdGF0ZTo6ZGVmYXVsdCgpKSk7XG5cbiAgICBsZXQgd2luZG93ID0gYWR3OjpBcHBsaWNhdGlvbldpbmRvdzo6YnVpbGRlcigpXG4gICAgICAgIC5hcHBsaWNhdGlvbihhcHApXG4gICAgICAgIC50aXRsZShcIkFMVCBJbWFnZSBXcml0ZXJcIilcbiAgICAgICAgLmRlZmF1bHRfd2lkdGgoNzIwKVxuICAgICAgICAuZGVmYXVsdF9oZWlnaHQoNzYwKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGxldCB0b2FzdF9vdmVybGF5ID0gYWR3OjpUb2FzdE92ZXJsYXk6Om5ldygpO1xuICAgIGxldCB0b29sYmFyX3ZpZXcgPSBhZHc6OlRvb2xiYXJWaWV3OjpuZXcoKTtcbiAgICB0b2FzdF9vdmVybGF5LnNldF9jaGlsZChTb21lKCZ0b29sYmFyX3ZpZXcpKTtcblxuICAgIGxldCBoZWFkZXIgPSBhZHc6OkhlYWRlckJhcjo6bmV3KCk7XG4gICAgbGV0IGFib3V0X2J1dHRvbiA9IGd0azo6QnV0dG9uOjpidWlsZGVyKClcbiAgICAgICAgLmljb25fbmFtZShcImhlbHAtYWJvdXQtc3ltYm9saWNcIilcbiAgICAgICAgLnRvb2x0aXBfdGV4dChcIkFib3V0IEFMVCBJbWFnZSBXcml0ZXJcIilcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgaGVhZGVyLnBhY2tfZW5kKCZhYm91dF9idXR0b24pO1xuICAgIHRvb2xiYXJfdmlldy5hZGRfdG9wX2JhcigmaGVhZGVyKTtcblxuICAgIGxldCBwYWdlID0gYWR3OjpQcmVmZXJlbmNlc1BhZ2U6Om5ldygpO1xuICAgIHBhZ2Uuc2V0X3RpdGxlKFwiQ3JlYXRlIEluc3RhbGxhdGlvbiBNZWRpYVwiKTtcbiAgICBwYWdlLnNldF9kZXNjcmlwdGlvbihTb21lKFxuICAgICAgICBcIlByZXBhcmUgYW4gQUxUIExpbnV4IHJvb3QgZmlsZXN5c3RlbSBvciBkaXNrIGltYWdlIGZvciB5b3VyIGJvYXJkLlwiLFxuICAgICkpO1xuICAgIHRvb2xiYXJfdmlldy5zZXRfY29udGVudChTb21lKCZwYWdlKSk7XG5cbiAgICAvLyBTb3VyY2VcbiAgICBsZXQgc291cmNlX2dyb3VwID0gYWR3OjpQcmVmZXJlbmNlc0dyb3VwOjpidWlsZGVyKClcbiAgICAgICAgLnRpdGxlKFwiSW5zdGFsbGF0aW9uIFNvdXJjZVwiKVxuICAgICAgICAuZGVzY3JpcHRpb24oXCJDaG9vc2UgYSByb290IGZpbGVzeXN0ZW0gYXJjaGl2ZSBvciBhIHJlYWR5LW1hZGUgZGlzayBpbWFnZS5cIilcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBsZXQgc291cmNlX3R5cGVfcm93ID0gYWR3OjpBY3Rpb25Sb3c6OmJ1aWxkZXIoKS50aXRsZShcIlNvdXJjZSB0eXBlXCIpLmJ1aWxkKCk7XG4gICAgbGV0IHNvdXJjZV90eXBlcyA9IGd0azo6Qm94OjpuZXcoZ3RrOjpPcmllbnRhdGlvbjo6SG9yaXpvbnRhbCwgMCk7XG4gICAgc291cmNlX3R5cGVzLmFkZF9jc3NfY2xhc3MoXCJsaW5rZWRcIik7XG4gICAgc291cmNlX3R5cGVzLnNldF92YWxpZ24oZ3RrOjpBbGlnbjo6Q2VudGVyKTtcbiAgICBsZXQgYXJjaGl2ZV9idXR0b24gPSBndGs6OlRvZ2dsZUJ1dHRvbjo6d2l0aF9sYWJlbChcIlJvb3QgZmlsZXN5c3RlbVwiKTtcbiAgICBhcmNoaXZlX2J1dHRvbi5zZXRfYWN0aXZlKHRydWUpO1xuICAgIGxldCBpbWFnZV9idXR0b24gPSBndGs6OlRvZ2dsZUJ1dHRvbjo6d2l0aF9sYWJlbChcIkRpc2sgaW1hZ2VcIik7XG4gICAgaW1hZ2VfYnV0dG9uLnNldF9ncm91cChTb21lKCZhcmNoaXZlX2J1dHRvbikpO1xuICAgIHNvdXJjZV90eXBlcy5hcHBlbmQoJmFyY2hpdmVfYnV0dG9uKTtcbiAgICBzb3VyY2VfdHlwZXMuYXBwZW5kKCZpbWFnZV9idXR0b24pO1xuICAgIHNvdXJjZV90eXBlX3Jvdy5hZGRfc3VmZml4KCZzb3VyY2VfdHlwZXMpO1xuICAgIHNvdXJjZV9ncm91cC5hZGQoJnNvdXJjZV90eXBlX3Jvdyk7XG5cbiAgICBsZXQgc291cmNlX3JvdyA9IGFkdzo6QWN0aW9uUm93OjpidWlsZGVyKClcbiAgICAgICAgLnRpdGxlKFwiTm8gc291cmNlIHNlbGVjdGVkXCIpXG4gICAgICAgIC5zdWJ0aXRsZShcIlN1cHBvcnRlZDogLnRhciwgLnRhci5neiwgLnRhci54elwiKVxuICAgICAgICAuYWN0aXZhdGFibGUodHJ1ZSlcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgc291cmNlX3Jvdy5hZGRfcHJlZml4KCZpbWFnZShcImRvY3VtZW50LW9wZW4tc3ltYm9saWNcIikpO1xuICAgIGxldCBzb3VyY2VfY2hvb3NlID0gZ3RrOjpCdXR0b246OmJ1aWxkZXIoKVxuICAgICAgICAubGFiZWwoXCJDaG9vc2XigKZcIilcbiAgICAgICAgLnZhbGlnbihndGs6OkFsaWduOjpDZW50ZXIpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIHNvdXJjZV9yb3cuYWRkX3N1ZmZpeCgmc291cmNlX2Nob29zZSk7XG4gICAgc291cmNlX3Jvdy5zZXRfYWN0aXZhdGFibGVfd2lkZ2V0KFNvbWUoJnNvdXJjZV9jaG9vc2UpKTtcbiAgICBzb3VyY2VfZ3JvdXAuYWRkKCZzb3VyY2Vfcm93KTtcbiAgICBwYWdlLmFkZCgmc291cmNlX2dyb3VwKTtcblxuICAgIC8vIEhhcmR3YXJlXG4gICAgbGV0IGhhcmR3YXJlX2dyb3VwID0gYWR3OjpQcmVmZXJlbmNlc0dyb3VwOjpidWlsZGVyKClcbiAgICAgICAgLnRpdGxlKFwiVGFyZ2V0IEhhcmR3YXJlXCIpXG4gICAgICAgIC5kZXNjcmlwdGlvbihcIlRoZSBtYXRjaGluZyBib290bG9hZGVyIGFuZCBkZXZpY2UgdHJlZSB3aWxsIGJlIGluc3RhbGxlZC5cIilcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgbGV0IGJvYXJkX25hbWVzID0gc3VwcG9ydGVkX2JvYXJkcygpO1xuICAgIGxldCBib2FyZF9tb2RlbCA9IGd0azo6U3RyaW5nTGlzdDo6bmV3KFxuICAgICAgICAmYm9hcmRfbmFtZXNcbiAgICAgICAgICAgIC5pdGVyKClcbiAgICAgICAgICAgIC5tYXAoU3RyaW5nOjphc19zdHIpXG4gICAgICAgICAgICAuY29sbGVjdDo6PFZlYzxfPj4oKSxcbiAgICApO1xuICAgIGxldCBib2FyZF9yb3cgPSBhZHc6OkNvbWJvUm93OjpidWlsZGVyKClcbiAgICAgICAgLnRpdGxlKFwiQm9hcmRcIilcbiAgICAgICAgLnN1YnRpdGxlKFwiU2VsZWN0IHRoZSBzaW5nbGUtYm9hcmQgY29tcHV0ZXIgbW9kZWxcIilcbiAgICAgICAgLm1vZGVsKCZib2FyZF9tb2RlbClcbiAgICAgICAgLmVuYWJsZV9zZWFyY2godHJ1ZSlcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgaGFyZHdhcmVfZ3JvdXAuYWRkKCZib2FyZF9yb3cpO1xuICAgIHBhZ2UuYWRkKCZoYXJkd2FyZV9ncm91cCk7XG5cbiAgICAvLyBEZXN0aW5hdGlvblxuICAgIGxldCBkZXN0aW5hdGlvbl9ncm91cCA9IGFkdzo6UHJlZmVyZW5jZXNHcm91cDo6YnVpbGRlcigpXG4gICAgICAgIC50aXRsZShcIkRlc3RpbmF0aW9uXCIpXG4gICAgICAgIC5kZXNjcmlwdGlvbihcIldyaXRlIHRvIHJlbW92YWJsZSBtZWRpYSBvciBjcmVhdGUgYW4gaW1hZ2UgZmlsZS5cIilcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgbGV0IGRlc3RpbmF0aW9uX3R5cGVfcm93ID0gYWR3OjpBY3Rpb25Sb3c6OmJ1aWxkZXIoKS50aXRsZShcIk91dHB1dCB0eXBlXCIpLmJ1aWxkKCk7XG4gICAgbGV0IGRlc3RpbmF0aW9uX3R5cGVzID0gZ3RrOjpCb3g6Om5ldyhndGs6Ok9yaWVudGF0aW9uOjpIb3Jpem9udGFsLCAwKTtcbiAgICBkZXN0aW5hdGlvbl90eXBlcy5hZGRfY3NzX2NsYXNzKFwibGlua2VkXCIpO1xuICAgIGRlc3RpbmF0aW9uX3R5cGVzLnNldF92YWxpZ24oZ3RrOjpBbGlnbjo6Q2VudGVyKTtcbiAgICBsZXQgZHJpdmVfYnV0dG9uID0gZ3RrOjpUb2dnbGVCdXR0b246OndpdGhfbGFiZWwoXCJEcml2ZVwiKTtcbiAgICBkcml2ZV9idXR0b24uc2V0X2FjdGl2ZSh0cnVlKTtcbiAgICBsZXQgZmlsZV9idXR0b24gPSBndGs6OlRvZ2dsZUJ1dHRvbjo6d2l0aF9sYWJlbChcIkltYWdlIGZpbGVcIik7XG4gICAgZmlsZV9idXR0b24uc2V0X2dyb3VwKFNvbWUoJmRyaXZlX2J1dHRvbikpO1xuICAgIGRlc3RpbmF0aW9uX3R5cGVzLmFwcGVuZCgmZHJpdmVfYnV0dG9uKTtcbiAgICBkZXN0aW5hdGlvbl90eXBlcy5hcHBlbmQoJmZpbGVfYnV0dG9uKTtcbiAgICBkZXN0aW5hdGlvbl90eXBlX3Jvdy5hZGRfc3VmZml4KCZkZXN0aW5hdGlvbl90eXBlcyk7XG4gICAgZGVzdGluYXRpb25fZ3JvdXAuYWRkKCZkZXN0aW5hdGlvbl90eXBlX3Jvdyk7XG5cbiAgICBsZXQgZHJpdmVfbW9kZWwgPSBndGs6OlN0cmluZ0xpc3Q6Om5ldyhcbiAgICAgICAgJmF2YWlsYWJsZV9kcml2ZXMoKVxuICAgICAgICAgICAgLml0ZXIoKVxuICAgICAgICAgICAgLm1hcChTdHJpbmc6OmFzX3N0cilcbiAgICAgICAgICAgIC5jb2xsZWN0Ojo8VmVjPF8+PigpLFxuICAgICk7XG4gICAgbGV0IGRyaXZlX3JvdyA9IGFkdzo6Q29tYm9Sb3c6OmJ1aWxkZXIoKVxuICAgICAgICAudGl0bGUoXCJTdG9yYWdlIGRldmljZVwiKVxuICAgICAgICAuc3VidGl0bGUoXCJPbmx5IHJlbW92YWJsZSBkZXZpY2VzIGFyZSBzaG93blwiKVxuICAgICAgICAubW9kZWwoJmRyaXZlX21vZGVsKVxuICAgICAgICAuYnVpbGQoKTtcbiAgICBkZXN0aW5hdGlvbl9ncm91cC5hZGQoJmRyaXZlX3Jvdyk7XG5cbiAgICBsZXQgb3V0cHV0X3JvdyA9IGFkdzo6QWN0aW9uUm93OjpidWlsZGVyKClcbiAgICAgICAgLnRpdGxlKFwiQ2hvb3NlIHdoZXJlIHRvIHNhdmUgdGhlIGltYWdlXCIpXG4gICAgICAgIC5zdWJ0aXRsZShcIlJhdyBkaXNrIGltYWdlICguaW1nKVwiKVxuICAgICAgICAudmlzaWJsZShmYWxzZSlcbiAgICAgICAgLmFjdGl2YXRhYmxlKHRydWUpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIG91dHB1dF9yb3cuYWRkX3ByZWZpeCgmaW1hZ2UoXCJkb2N1bWVudC1zYXZlLXN5bWJvbGljXCIpKTtcbiAgICBsZXQgb3V0cHV0X2Nob29zZSA9IGd0azo6QnV0dG9uOjpidWlsZGVyKClcbiAgICAgICAgLmxhYmVsKFwiQ2hvb3Nl4oCmXCIpXG4gICAgICAgIC52YWxpZ24oZ3RrOjpBbGlnbjo6Q2VudGVyKVxuICAgICAgICAuYnVpbGQoKTtcbiAgICBvdXRwdXRfcm93LmFkZF9zdWZmaXgoJm91dHB1dF9jaG9vc2UpO1xuICAgIG91dHB1dF9yb3cuc2V0X2FjdGl2YXRhYmxlX3dpZGdldChTb21lKCZvdXRwdXRfY2hvb3NlKSk7XG4gICAgZGVzdGluYXRpb25fZ3JvdXAuYWRkKCZvdXRwdXRfcm93KTtcbiAgICBwYWdlLmFkZCgmZGVzdGluYXRpb25fZ3JvdXApO1xuXG4gICAgLy8gT3B0aW9ucyBtaXJyb3JpbmcgdGhlIGNvbW1hbmQgbGluZSdzIGNvbW1vbmx5IHVzZWQgc3dpdGNoZXMuXG4gICAgbGV0IG9wdGlvbnNfZ3JvdXAgPSBhZHc6OlByZWZlcmVuY2VzR3JvdXA6OmJ1aWxkZXIoKVxuICAgICAgICAudGl0bGUoXCJPcHRpb25zXCIpXG4gICAgICAgIC5kZXNjcmlwdGlvbihcIlBhcnRpdGlvbmluZyBhbmQgZmlyc3QtYm9vdCBzZXR0aW5nc1wiKVxuICAgICAgICAuYnVpbGQoKTtcbiAgICBsZXQgZmlsZXN5c3RlbV9tb2RlbCA9IGd0azo6U3RyaW5nTGlzdDo6bmV3KCZbXCJleHQ0XCIsIFwiZjJmc1wiXSk7XG4gICAgbGV0IGZpbGVzeXN0ZW1fcm93ID0gYWR3OjpDb21ib1Jvdzo6YnVpbGRlcigpXG4gICAgICAgIC50aXRsZShcIlJvb3QgZmlsZXN5c3RlbVwiKVxuICAgICAgICAubW9kZWwoJmZpbGVzeXN0ZW1fbW9kZWwpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIG9wdGlvbnNfZ3JvdXAuYWRkKCZmaWxlc3lzdGVtX3Jvdyk7XG4gICAgb3B0aW9uc19ncm91cC5hZGQoJnN3aXRjaF9yb3coXG4gICAgICAgIFwiUmVzaXplIHJvb3QgcGFydGl0aW9uXCIsXG4gICAgICAgIFwiR3JvdyB0aGUgcm9vdCBmaWxlc3lzdGVtIHRvIGZpbGwgdGhlIGRlc3RpbmF0aW9uXCIsXG4gICAgICAgIFwidmlldy1mdWxsc2NyZWVuLXN5bWJvbGljXCIsXG4gICAgICAgIHRydWUsXG4gICAgKSk7XG4gICAgb3B0aW9uc19ncm91cC5hZGQoJnN3aXRjaF9yb3coXG4gICAgICAgIFwiU2VwYXJhdGUgYm9vdCBwYXJ0aXRpb25cIixcbiAgICAgICAgXCJDcmVhdGUgYSA1MTIgTWlCIGJvb3QgcGFydGl0aW9uXCIsXG4gICAgICAgIFwiZHJpdmUtaGFyZGRpc2stc3ltYm9saWNcIixcbiAgICAgICAgZmFsc2UsXG4gICAgKSk7XG4gICAgb3B0aW9uc19ncm91cC5hZGQoJnN3aXRjaF9yb3coXG4gICAgICAgIFwiRW5jcnlwdCByb290IHBhcnRpdGlvblwiLFxuICAgICAgICBcIlByb3RlY3QgdGhlIHJvb3QgZmlsZXN5c3RlbSB3aXRoIExVS1NcIixcbiAgICAgICAgXCJjaGFuZ2VzLXByZXZlbnQtc3ltYm9saWNcIixcbiAgICAgICAgZmFsc2UsXG4gICAgKSk7XG4gICAgb3B0aW9uc19ncm91cC5hZGQoJnN3aXRjaF9yb3coXG4gICAgICAgIFwiU2VyaWFsIGNvbnNvbGVcIixcbiAgICAgICAgXCJBZGQgdGhlIHN5c3RlbSBzZXJpYWwgY29uc29sZSB0byBib290IGFyZ3VtZW50c1wiLFxuICAgICAgICBcInV0aWxpdGllcy10ZXJtaW5hbC1zeW1ib2xpY1wiLFxuICAgICAgICBmYWxzZSxcbiAgICApKTtcbiAgICBwYWdlLmFkZCgmb3B0aW9uc19ncm91cCk7XG5cbiAgICBsZXQgYWR2YW5jZWRfZ3JvdXAgPSBhZHc6OlByZWZlcmVuY2VzR3JvdXA6OmJ1aWxkZXIoKS50aXRsZShcIkFkdmFuY2VkXCIpLmJ1aWxkKCk7XG4gICAgbGV0IGVmaV9tb2RlbCA9IGd0azo6U3RyaW5nTGlzdDo6bmV3KCZbXCJOb25lXCIsIFwiRUZJIChHUFQpXCIsIFwiRUZJIChNQlIpXCJdKTtcbiAgICBhZHZhbmNlZF9ncm91cC5hZGQoXG4gICAgICAgICZhZHc6OkNvbWJvUm93OjpidWlsZGVyKClcbiAgICAgICAgICAgIC50aXRsZShcIkVGSSBzeXN0ZW0gcGFydGl0aW9uXCIpXG4gICAgICAgICAgICAubW9kZWwoJmVmaV9tb2RlbClcbiAgICAgICAgICAgIC5idWlsZCgpLFxuICAgICk7XG4gICAgbGV0IHZuY19tb2RlbCA9IGd0azo6U3RyaW5nTGlzdDo6bmV3KCZbXCJVc2UgaW1hZ2UgZGVmYXVsdFwiLCBcIkVuYWJsZWRcIiwgXCJEaXNhYmxlZFwiXSk7XG4gICAgYWR2YW5jZWRfZ3JvdXAuYWRkKFxuICAgICAgICAmYWR3OjpDb21ib1Jvdzo6YnVpbGRlcigpXG4gICAgICAgICAgICAudGl0bGUoXCJGaXJzdC1ib290IFZOQ1wiKVxuICAgICAgICAgICAgLm1vZGVsKCZ2bmNfbW9kZWwpXG4gICAgICAgICAgICAuYnVpbGQoKSxcbiAgICApO1xuICAgIGxldCBleHRyYV9yb3cgPSBhZHc6OkFjdGlvblJvdzo6YnVpbGRlcigpXG4gICAgICAgIC50aXRsZShcIkV4dHJhIG9wdGlvbnMgZmlsZVwiKVxuICAgICAgICAuc3VidGl0bGUoXCJPcHRpb25hbCBpbnN0YWxsZXIgY29uZmlndXJhdGlvblwiKVxuICAgICAgICAuYnVpbGQoKTtcbiAgICBleHRyYV9yb3cuYWRkX3N1ZmZpeChcbiAgICAgICAgJmd0azo6QnV0dG9uOjpidWlsZGVyKClcbiAgICAgICAgICAgIC5pY29uX25hbWUoXCJkb2N1bWVudC1vcGVuLXN5bWJvbGljXCIpXG4gICAgICAgICAgICAudG9vbHRpcF90ZXh0KFwiQ2hvb3NlIGV4dHJhIG9wdGlvbnMgZmlsZVwiKVxuICAgICAgICAgICAgLnZhbGlnbihndGs6OkFsaWduOjpDZW50ZXIpXG4gICAgICAgICAgICAuYnVpbGQoKSxcbiAgICApO1xuICAgIGFkdmFuY2VkX2dyb3VwLmFkZCgmZXh0cmFfcm93KTtcbiAgICBwYWdlLmFkZCgmYWR2YW5jZWRfZ3JvdXApO1xuXG4gICAgbGV0IGFjdGlvbl9iYXIgPSBndGs6OkJveDo6bmV3KGd0azo6T3JpZW50YXRpb246Okhvcml6b250YWwsIDEyKTtcbiAgICBhY3Rpb25fYmFyLnNldF9tYXJnaW5fdG9wKDEyKTtcbiAgICBhY3Rpb25fYmFyLnNldF9tYXJnaW5fYm90dG9tKDEyKTtcbiAgICBhY3Rpb25fYmFyLnNldF9tYXJnaW5fc3RhcnQoMTIpO1xuICAgIGFjdGlvbl9iYXIuc2V0X21hcmdpbl9lbmQoMTIpO1xuICAgIGxldCBhY3Rpb25faGludCA9IGd0azo6TGFiZWw6Om5ldyhTb21lKFwiTm90aGluZyB3aWxsIGJlIHdyaXR0ZW4gdW50aWwgeW91IGNvbmZpcm0uXCIpKTtcbiAgICBhY3Rpb25faGludC5hZGRfY3NzX2NsYXNzKFwiZGltLWxhYmVsXCIpO1xuICAgIGFjdGlvbl9oaW50LnNldF9oZXhwYW5kKHRydWUpO1xuICAgIGFjdGlvbl9oaW50LnNldF9oYWxpZ24oZ3RrOjpBbGlnbjo6U3RhcnQpO1xuICAgIGxldCBzdGFydF9idXR0b24gPSBndGs6OkJ1dHRvbjo6d2l0aF9sYWJlbChcIlJldmlldyBhbmQgV3JpdGVcIik7XG4gICAgc3RhcnRfYnV0dG9uLmFkZF9jc3NfY2xhc3MoXCJzdWdnZXN0ZWQtYWN0aW9uXCIpO1xuICAgIHN0YXJ0X2J1dHRvbi5zZXRfc2Vuc2l0aXZlKGZhbHNlKTtcbiAgICBhY3Rpb25fYmFyLmFwcGVuZCgmYWN0aW9uX2hpbnQpO1xuICAgIGFjdGlvbl9iYXIuYXBwZW5kKCZzdGFydF9idXR0b24pO1xuICAgIHRvb2xiYXJfdmlldy5hZGRfYm90dG9tX2JhcigmYWN0aW9uX2Jhcik7XG5cbiAgICB3aW5kb3cuc2V0X2NvbnRlbnQoU29tZSgmdG9hc3Rfb3ZlcmxheSkpO1xuXG4gICAgLy8gSW50ZXJhY3Rpb25zXG4gICAge1xuICAgICAgICBsZXQgd2luZG93ID0gd2luZG93LmNsb25lKCk7XG4gICAgICAgIGFib3V0X2J1dHRvbi5jb25uZWN0X2NsaWNrZWQobW92ZSB8X3wge1xuICAgICAgICAgICAgYWR3OjpBYm91dERpYWxvZzo6YnVpbGRlcigpXG4gICAgICAgICAgICAgICAgLmFwcGxpY2F0aW9uX25hbWUoXCJBTFQgSW1hZ2UgV3JpdGVyXCIpXG4gICAgICAgICAgICAgICAgLmFwcGxpY2F0aW9uX2ljb24oQVBQX0lEKVxuICAgICAgICAgICAgICAgIC5kZXZlbG9wZXJfbmFtZShcIkFMVCBMaW51eCBUZWFtXCIpXG4gICAgICAgICAgICAgICAgLnZlcnNpb24oZW52IShcIkNBUkdPX1BLR19WRVJTSU9OXCIpKVxuICAgICAgICAgICAgICAgIC5jb21tZW50cyhcIlByZXBhcmUgQUxUIExpbnV4IGluc3RhbGxhdGlvbiBtZWRpYSBmb3Igc3VwcG9ydGVkIHNpbmdsZS1ib2FyZCBjb21wdXRlcnMuXCIpXG4gICAgICAgICAgICAgICAgLndlYnNpdGUoXCJodHRwczovL3d3dy5hbHRsaW51eC5vcmdcIilcbiAgICAgICAgICAgICAgICAubGljZW5zZV90eXBlKGd0azo6TGljZW5zZTo6R3BsMjApXG4gICAgICAgICAgICAgICAgLmJ1aWxkKClcbiAgICAgICAgICAgICAgICAucHJlc2VudChTb21lKCZ3aW5kb3cpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHtcbiAgICAgICAgbGV0IHNvdXJjZV9yb3cgPSBzb3VyY2Vfcm93LmNsb25lKCk7XG4gICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgIGFyY2hpdmVfYnV0dG9uLmNvbm5lY3RfdG9nZ2xlZChtb3ZlIHxidXR0b258IHtcbiAgICAgICAgICAgIGlmIGJ1dHRvbi5pc19hY3RpdmUoKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuYm9ycm93X211dCgpLnNvdXJjZV9pc19pbWFnZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHNvdXJjZV9yb3cuc2V0X3N1YnRpdGxlKFwiU3VwcG9ydGVkOiAudGFyLCAudGFyLmd6LCAudGFyLnh6XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAge1xuICAgICAgICBsZXQgc291cmNlX3JvdyA9IHNvdXJjZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgbGV0IHN0YXRlID0gc3RhdGUuY2xvbmUoKTtcbiAgICAgICAgaW1hZ2VfYnV0dG9uLmNvbm5lY3RfdG9nZ2xlZChtb3ZlIHxidXR0b258IHtcbiAgICAgICAgICAgIGlmIGJ1dHRvbi5pc19hY3RpdmUoKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuYm9ycm93X211dCgpLnNvdXJjZV9pc19pbWFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgc291cmNlX3Jvdy5zZXRfc3VidGl0bGUoXCJTdXBwb3J0ZWQ6IC5pbWcsIC5pbWcueHpcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB7XG4gICAgICAgIGxldCB3aW5kb3cgPSB3aW5kb3cuY2xvbmUoKTtcbiAgICAgICAgbGV0IHJvdyA9IHNvdXJjZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgbGV0IHN0YXRlID0gc3RhdGUuY2xvbmUoKTtcbiAgICAgICAgbGV0IGJvYXJkX3JvdyA9IGJvYXJkX3Jvdy5jbG9uZSgpO1xuICAgICAgICBsZXQgZHJpdmVfcm93ID0gZHJpdmVfcm93LmNsb25lKCk7XG4gICAgICAgIGxldCBzdGFydF9idXR0b24gPSBzdGFydF9idXR0b24uY2xvbmUoKTtcbiAgICAgICAgc291cmNlX2Nob29zZS5jb25uZWN0X2NsaWNrZWQobW92ZSB8X3wge1xuICAgICAgICAgICAgbGV0IGNob29zZXIgPSBndGs6OkZpbGVDaG9vc2VyTmF0aXZlOjpidWlsZGVyKClcbiAgICAgICAgICAgICAgICAudGl0bGUoXCJDaG9vc2UgSW5zdGFsbGF0aW9uIFNvdXJjZVwiKVxuICAgICAgICAgICAgICAgIC50cmFuc2llbnRfZm9yKCZ3aW5kb3cpXG4gICAgICAgICAgICAgICAgLmFjdGlvbihndGs6OkZpbGVDaG9vc2VyQWN0aW9uOjpPcGVuKVxuICAgICAgICAgICAgICAgIC5hY2NlcHRfbGFiZWwoXCJTZWxlY3RcIilcbiAgICAgICAgICAgICAgICAuY2FuY2VsX2xhYmVsKFwiQ2FuY2VsXCIpXG4gICAgICAgICAgICAgICAgLmJ1aWxkKCk7XG4gICAgICAgICAgICBsZXQgcm93ID0gcm93LmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBzdGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgbGV0IGJvYXJkX3JvdyA9IGJvYXJkX3Jvdy5jbG9uZSgpO1xuICAgICAgICAgICAgbGV0IGRyaXZlX3JvdyA9IGRyaXZlX3Jvdy5jbG9uZSgpO1xuICAgICAgICAgICAgbGV0IHN0YXJ0X2J1dHRvbiA9IHN0YXJ0X2J1dHRvbi5jbG9uZSgpO1xuICAgICAgICAgICAgY2hvb3Nlci5jb25uZWN0X3Jlc3BvbnNlKG1vdmUgfGRpYWxvZywgcmVzcG9uc2V8IHtcbiAgICAgICAgICAgICAgICBpZiByZXNwb25zZSA9PSBndGs6OlJlc3BvbnNlVHlwZTo6QWNjZXB0XG4gICAgICAgICAgICAgICAgICAgICYmIGxldCBTb21lKHBhdGgpID0gZGlhbG9nLmZpbGUoKS5hbmRfdGhlbih8ZnwgZi5wYXRoKCkpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByb3cuc2V0X3RpdGxlKCZkaXNwbGF5X25hbWUoJnBhdGgpKTtcbiAgICAgICAgICAgICAgICAgICAgcm93LnNldF9zdWJ0aXRsZShwYXRoLnBhcmVudCgpLmFuZF90aGVuKFBhdGg6OnRvX3N0cikudW53cmFwX29yKFwiXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYm9ycm93X211dCgpLnNvdXJjZSA9IFNvbWUocGF0aC5kaXNwbGF5KCkudG9fc3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVfc3RhcnQoJnN0YXJ0X2J1dHRvbiwgJnN0YXRlLCAmYm9hcmRfcm93LCAmZHJpdmVfcm93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY2hvb3Nlci5zaG93KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB7XG4gICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgbGV0IHN0YXJ0X2J1dHRvbiA9IHN0YXJ0X2J1dHRvbi5jbG9uZSgpO1xuICAgICAgICBib2FyZF9yb3cuY29ubmVjdF9zZWxlY3RlZF9ub3RpZnkobW92ZSB8cm93fCB7XG4gICAgICAgICAgICB1cGRhdGVfc3RhcnQoJnN0YXJ0X2J1dHRvbiwgJnN0YXRlLCByb3csICZkcml2ZV9yb3cpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB7XG4gICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgIGxldCBib2FyZF9yb3cgPSBib2FyZF9yb3cuY2xvbmUoKTtcbiAgICAgICAgbGV0IHN0YXJ0X2J1dHRvbiA9IHN0YXJ0X2J1dHRvbi5jbG9uZSgpO1xuICAgICAgICBkcml2ZV9yb3cuY29ubmVjdF9zZWxlY3RlZF9ub3RpZnkobW92ZSB8cm93fCB7XG4gICAgICAgICAgICB1cGRhdGVfc3RhcnQoJnN0YXJ0X2J1dHRvbiwgJnN0YXRlLCAmYm9hcmRfcm93LCByb3cpXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB7XG4gICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgbGV0IG91dHB1dF9yb3cgPSBvdXRwdXRfcm93LmNsb25lKCk7XG4gICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgIGxldCBib2FyZF9yb3cgPSBib2FyZF9yb3cuY2xvbmUoKTtcbiAgICAgICAgbGV0IHN0YXJ0X2J1dHRvbiA9IHN0YXJ0X2J1dHRvbi5jbG9uZSgpO1xuICAgICAgICBmaWxlX2J1dHRvbi5jb25uZWN0X3RvZ2dsZWQobW92ZSB8YnV0dG9ufCB7XG4gICAgICAgICAgICBsZXQgZmlsZSA9IGJ1dHRvbi5pc19hY3RpdmUoKTtcbiAgICAgICAgICAgIGRyaXZlX3Jvdy5zZXRfdmlzaWJsZSghZmlsZSk7XG4gICAgICAgICAgICBvdXRwdXRfcm93LnNldF92aXNpYmxlKGZpbGUpO1xuICAgICAgICAgICAgc3RhdGUuYm9ycm93X211dCgpLm91dHB1dF9pc19maWxlID0gZmlsZTtcbiAgICAgICAgICAgIHVwZGF0ZV9zdGFydCgmc3RhcnRfYnV0dG9uLCAmc3RhdGUsICZib2FyZF9yb3csICZkcml2ZV9yb3cpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAge1xuICAgICAgICBsZXQgd2luZG93ID0gd2luZG93LmNsb25lKCk7XG4gICAgICAgIGxldCByb3cgPSBvdXRwdXRfcm93LmNsb25lKCk7XG4gICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgIGxldCBib2FyZF9yb3cgPSBib2FyZF9yb3cuY2xvbmUoKTtcbiAgICAgICAgbGV0IGRyaXZlX3JvdyA9IGRyaXZlX3Jvdy5jbG9uZSgpO1xuICAgICAgICBsZXQgc3RhcnRfYnV0dG9uID0gc3RhcnRfYnV0dG9uLmNsb25lKCk7XG4gICAgICAgIG91dHB1dF9jaG9vc2UuY29ubmVjdF9jbGlja2VkKG1vdmUgfF98IHtcbiAgICAgICAgICAgIGxldCBjaG9vc2VyID0gZ3RrOjpGaWxlQ2hvb3Nlck5hdGl2ZTo6YnVpbGRlcigpXG4gICAgICAgICAgICAgICAgLnRpdGxlKFwiQ3JlYXRlIERpc2sgSW1hZ2VcIilcbiAgICAgICAgICAgICAgICAudHJhbnNpZW50X2Zvcigmd2luZG93KVxuICAgICAgICAgICAgICAgIC5hY3Rpb24oZ3RrOjpGaWxlQ2hvb3NlckFjdGlvbjo6U2F2ZSlcbiAgICAgICAgICAgICAgICAuYWNjZXB0X2xhYmVsKFwiU2VsZWN0XCIpXG4gICAgICAgICAgICAgICAgLmNhbmNlbF9sYWJlbChcIkNhbmNlbFwiKVxuICAgICAgICAgICAgICAgIC5idWlsZCgpO1xuICAgICAgICAgICAgY2hvb3Nlci5zZXRfY3VycmVudF9uYW1lKFwiYWx0LWxpbnV4LmltZ1wiKTtcbiAgICAgICAgICAgIGxldCByb3cgPSByb3cuY2xvbmUoKTtcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgYm9hcmRfcm93ID0gYm9hcmRfcm93LmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgZHJpdmVfcm93ID0gZHJpdmVfcm93LmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgc3RhcnRfYnV0dG9uID0gc3RhcnRfYnV0dG9uLmNsb25lKCk7XG4gICAgICAgICAgICBjaG9vc2VyLmNvbm5lY3RfcmVzcG9uc2UobW92ZSB8ZGlhbG9nLCByZXNwb25zZXwge1xuICAgICAgICAgICAgICAgIGlmIHJlc3BvbnNlID09IGd0azo6UmVzcG9uc2VUeXBlOjpBY2NlcHRcbiAgICAgICAgICAgICAgICAgICAgJiYgbGV0IFNvbWUocGF0aCkgPSBkaWFsb2cuZmlsZSgpLmFuZF90aGVuKHxmfCBmLnBhdGgoKSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5zZXRfdGl0bGUoJmRpc3BsYXlfbmFtZSgmcGF0aCkpO1xuICAgICAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKHBhdGgucGFyZW50KCkuYW5kX3RoZW4oUGF0aDo6dG9fc3RyKS51bndyYXBfb3IoXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5ib3Jyb3dfbXV0KCkub3V0cHV0X2ZpbGUgPSBTb21lKHBhdGguZGlzcGxheSgpLnRvX3N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3N0YXJ0KCZzdGFydF9idXR0b24sICZzdGF0ZSwgJmJvYXJkX3JvdywgJmRyaXZlX3Jvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNob29zZXIuc2hvdygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAge1xuICAgICAgICBsZXQgd2luZG93ID0gd2luZG93LmNsb25lKCk7XG4gICAgICAgIGxldCB0b2FzdF9vdmVybGF5ID0gdG9hc3Rfb3ZlcmxheS5jbG9uZSgpO1xuICAgICAgICBsZXQgc3RhdGUgPSBzdGF0ZS5jbG9uZSgpO1xuICAgICAgICBsZXQgYm9hcmRfcm93ID0gYm9hcmRfcm93LmNsb25lKCk7XG4gICAgICAgIGxldCBib2FyZF9uYW1lcyA9IGJvYXJkX25hbWVzLmNsb25lKCk7XG4gICAgICAgIGxldCBkcml2ZV9tb2RlbCA9IGRyaXZlX21vZGVsLmNsb25lKCk7XG4gICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgc3RhcnRfYnV0dG9uLmNvbm5lY3RfY2xpY2tlZChtb3ZlIHxffCB7XG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBzdGF0ZS5ib3Jyb3coKTtcbiAgICAgICAgICAgIGxldCBib2FyZCA9IGJvYXJkX25hbWVzXG4gICAgICAgICAgICAgICAgLmdldChib2FyZF9yb3cuc2VsZWN0ZWQoKSBhcyB1c2l6ZSlcbiAgICAgICAgICAgICAgICAubWFwKFN0cmluZzo6YXNfc3RyKVxuICAgICAgICAgICAgICAgIC51bndyYXBfb3IoXCJVbmtub3duIGJvYXJkXCIpO1xuICAgICAgICAgICAgbGV0IGRlc3RpbmF0aW9uID0gaWYgc3RhdGUub3V0cHV0X2lzX2ZpbGUge1xuICAgICAgICAgICAgICAgIHN0YXRlLm91dHB1dF9maWxlLmFzX2RlcmVmKCkudW53cmFwX29yKFwiTm8gb3V0cHV0IGZpbGVcIilcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHJpdmVfbW9kZWxcbiAgICAgICAgICAgICAgICAgICAgLnN0cmluZyhkcml2ZV9yb3cuc2VsZWN0ZWQoKSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCh8c3wgcy50b19zdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgLnVud3JhcF9vcl9lbHNlKHx8IFwiTm8gZHJpdmVcIi5pbnRvKCkpXG4gICAgICAgICAgICAgICAgICAgIC5sZWFrKClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBsZXQgZGlhbG9nID0gYWR3OjpBbGVydERpYWxvZzo6YnVpbGRlcigpXG4gICAgICAgICAgICAgICAgLmhlYWRpbmcoXCJSZWFkeSB0byB3cml0ZT9cIilcbiAgICAgICAgICAgICAgICAuYm9keShmb3JtYXQhKFxuICAgICAgICAgICAgICAgICAgICBcIkJvYXJkOiB7Ym9hcmR9XFxuRGVzdGluYXRpb246IHtkZXN0aW5hdGlvbn1cXG5cXG5UaGlzIGlzIGFuIGludGVyZmFjZSBwcmV2aWV3LiBObyBkYXRhIHdpbGwgYmUgd3JpdHRlbi5cIlxuICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgLmJ1aWxkKCk7XG4gICAgICAgICAgICBkaWFsb2cuYWRkX3Jlc3BvbnNlKFwiY2FuY2VsXCIsIFwiQ2FuY2VsXCIpO1xuICAgICAgICAgICAgZGlhbG9nLmFkZF9yZXNwb25zZShcIndyaXRlXCIsIFwiV3JpdGVcIik7XG4gICAgICAgICAgICBkaWFsb2cuc2V0X3Jlc3BvbnNlX2FwcGVhcmFuY2UoXCJ3cml0ZVwiLCBhZHc6OlJlc3BvbnNlQXBwZWFyYW5jZTo6RGVzdHJ1Y3RpdmUpO1xuICAgICAgICAgICAgZGlhbG9nLnNldF9kZWZhdWx0X3Jlc3BvbnNlKFNvbWUoXCJjYW5jZWxcIikpO1xuICAgICAgICAgICAgZGlhbG9nLnNldF9jbG9zZV9yZXNwb25zZShcImNhbmNlbFwiKTtcbiAgICAgICAgICAgIGxldCB0b2FzdF9vdmVybGF5ID0gdG9hc3Rfb3ZlcmxheS5jbG9uZSgpO1xuICAgICAgICAgICAgZGlhbG9nLmNvbm5lY3RfcmVzcG9uc2UoU29tZShcIndyaXRlXCIpLCBtb3ZlIHxfLCBffCB7XG4gICAgICAgICAgICAgICAgdG9hc3Rfb3ZlcmxheS5hZGRfdG9hc3QoYWR3OjpUb2FzdDo6bmV3KFwiRmxhc2hpbmcgaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJldmlld1wiKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGRpYWxvZy5wcmVzZW50KFNvbWUoJndpbmRvdykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB3aW5kb3cucHJlc2VudCgpO1xufVxuXG5mbiBpbWFnZShpY29uX25hbWU6ICZzdHIpIC0+IGd0azo6SW1hZ2Uge1xuICAgIGxldCBpbWFnZSA9IGd0azo6SW1hZ2U6OmZyb21faWNvbl9uYW1lKGljb25fbmFtZSk7XG4gICAgaW1hZ2Uuc2V0X3BpeGVsX3NpemUoMjApO1xuICAgIGltYWdlXG59XG5cbmZuIHN3aXRjaF9yb3codGl0bGU6ICZzdHIsIHN1YnRpdGxlOiAmc3RyLCBpY29uX25hbWU6ICZzdHIsIGFjdGl2ZTogYm9vbCkgLT4gYWR3OjpTd2l0Y2hSb3cge1xuICAgIGxldCByb3cgPSBhZHc6OlN3aXRjaFJvdzo6YnVpbGRlcigpXG4gICAgICAgIC50aXRsZSh0aXRsZSlcbiAgICAgICAgLnN1YnRpdGxlKHN1YnRpdGxlKVxuICAgICAgICAuYWN0aXZlKGFjdGl2ZSlcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgcm93LmFkZF9wcmVmaXgoJmltYWdlKGljb25fbmFtZSkpO1xuICAgIHJvd1xufVxuXG5mbiBkaXNwbGF5X25hbWUocGF0aDogJlBhdGgpIC0+IFN0cmluZyB7XG4gICAgcGF0aC5maWxlX25hbWUoKVxuICAgICAgICAuYW5kX3RoZW4ofG5hbWV8IG5hbWUudG9fc3RyKCkpXG4gICAgICAgIC51bndyYXBfb3IoXCJTZWxlY3RlZCBmaWxlXCIpXG4gICAgICAgIC50b19vd25lZCgpXG59XG5cbmZuIHVwZGF0ZV9zdGFydChcbiAgICBidXR0b246ICZndGs6OkJ1dHRvbixcbiAgICBzdGF0ZTogJlJjPFJlZkNlbGw8U3RhdGU+PixcbiAgICBib2FyZDogJmFkdzo6Q29tYm9Sb3csXG4gICAgZHJpdmU6ICZhZHc6OkNvbWJvUm93LFxuKSB7XG4gICAgbGV0IHN0YXRlID0gc3RhdGUuYm9ycm93KCk7XG4gICAgbGV0IGhhc19kZXN0aW5hdGlvbiA9IGlmIHN0YXRlLm91dHB1dF9pc19maWxlIHtcbiAgICAgICAgc3RhdGUub3V0cHV0X2ZpbGUuaXNfc29tZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgZHJpdmUubW9kZWwoKS5tYXAofG18IG0ubl9pdGVtcygpID4gMCkudW53cmFwX29yKGZhbHNlKVxuICAgIH07XG4gICAgYnV0dG9uLnNldF9zZW5zaXRpdmUoc3RhdGUuc291cmNlLmlzX3NvbWUoKSAmJiBib2FyZC5zZWxlY3RlZCgpICE9IGd0azo6SU5WQUxJRF9MSVNUX1BPU0lUSU9OICYmIGhhc19kZXN0aW5hdGlvbik7XG59XG5cbmZuIHN1cHBvcnRlZF9ib2FyZHMoKSAtPiBWZWM8U3RyaW5nPiB7XG4gICAgbGV0IG11dCByZXN1bHQgPSBWZWM6Om5ldygpO1xuICAgIGxldCBtdXQgZmFtaWx5ID0gXCJPdGhlclwiO1xuICAgIGZvciBsaW5lIGluIEJPQVJEUy5saW5lcygpIHtcbiAgICAgICAgbGV0IGxpbmUgPSBsaW5lLnRyaW0oKTtcbiAgICAgICAgaWYgbGluZS5pc19lbXB0eSgpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIGxldCBTb21lKGhlYWRpbmcpID0gbGluZS5zdHJpcF9zdWZmaXgoJzonKSB7XG4gICAgICAgICAgICBmYW1pbHkgPSBoZWFkaW5nO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIGJvYXJkIGluIGxpbmUuc3BsaXRfd2hpdGVzcGFjZSgpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZvcm1hdCEoXCJ7Ym9hcmR9ICDCtyAge2ZhbWlseX1cIikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlc3VsdFxufVxuXG5mbiBhdmFpbGFibGVfZHJpdmVzKCkgLT4gVmVjPFN0cmluZz4ge1xuICAgIGxldCBtdXQgZHJpdmVzID0gVmVjOjpuZXcoKTtcbiAgICBsZXQgT2soZW50cmllcykgPSBmczo6cmVhZF9kaXIoXCIvc3lzL2Jsb2NrXCIpIGVsc2Uge1xuICAgICAgICByZXR1cm4gZHJpdmVzO1xuICAgIH07XG4gICAgZm9yIGVudHJ5IGluIGVudHJpZXMuZmxhdHRlbigpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBlbnRyeS5maWxlX25hbWUoKS50b19zdHJpbmdfbG9zc3koKS5pbnRvX293bmVkKCk7XG4gICAgICAgIGlmIG5hbWUuc3RhcnRzX3dpdGgoXCJsb29wXCIpIHx8IG5hbWUuc3RhcnRzX3dpdGgoXCJyYW1cIikgfHwgbmFtZS5zdGFydHNfd2l0aChcInpyYW1cIikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJlbW92YWJsZSA9IGZzOjpyZWFkX3RvX3N0cmluZyhlbnRyeS5wYXRoKCkuam9pbihcInJlbW92YWJsZVwiKSlcbiAgICAgICAgICAgIC5tYXAofHZhbHVlfCB2YWx1ZS50cmltKCkgPT0gXCIxXCIpXG4gICAgICAgICAgICAudW53cmFwX29yKGZhbHNlKTtcbiAgICAgICAgaWYgIXJlbW92YWJsZSAmJiAhbmFtZS5zdGFydHNfd2l0aChcIm1tY2Jsa1wiKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc2VjdG9ycyA9IGZzOjpyZWFkX3RvX3N0cmluZyhlbnRyeS5wYXRoKCkuam9pbihcInNpemVcIikpXG4gICAgICAgICAgICAub2soKVxuICAgICAgICAgICAgLmFuZF90aGVuKHx2YWx1ZXwgdmFsdWUudHJpbSgpLnBhcnNlOjo8dTY0PigpLm9rKCkpXG4gICAgICAgICAgICAudW53cmFwX29yKDApO1xuICAgICAgICBsZXQgc2l6ZSA9IGZvcm1hdF9zaXplKHNlY3RvcnMuc2F0dXJhdGluZ19tdWwoNTEyKSk7XG4gICAgICAgIGxldCBtb2RlbCA9IGZzOjpyZWFkX3RvX3N0cmluZyhlbnRyeS5wYXRoKCkuam9pbihcImRldmljZS9tb2RlbFwiKSlcbiAgICAgICAgICAgIC51bndyYXBfb3JfZGVmYXVsdCgpXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAudG9fb3duZWQoKTtcbiAgICAgICAgaWYgbW9kZWwuaXNfZW1wdHkoKSB7XG4gICAgICAgICAgICBkcml2ZXMucHVzaChmb3JtYXQhKFwiL2Rldi97bmFtZX0gIMK3ICB7c2l6ZX1cIikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZHJpdmVzLnB1c2goZm9ybWF0IShcInttb2RlbH0gIMK3ICB7c2l6ZX0gIMK3ICAvZGV2L3tuYW1lfVwiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJpdmVzLnNvcnQoKTtcbiAgICBkcml2ZXNcbn1cblxuZm4gZm9ybWF0X3NpemUoYnl0ZXM6IHU2NCkgLT4gU3RyaW5nIHtcbiAgICBjb25zdCBHSUI6IGY2NCA9IDEwMjQuMCAqIDEwMjQuMCAqIDEwMjQuMDtcbiAgICBjb25zdCBNSUI6IGY2NCA9IDEwMjQuMCAqIDEwMjQuMDtcbiAgICBpZiBieXRlcyBhcyBmNjQgPj0gR0lCIHtcbiAgICAgICAgZm9ybWF0IShcIns6LjF9IEdCXCIsIGJ5dGVzIGFzIGY2NCAvIEdJQilcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtYXQhKFwiezouMH0gTUJcIiwgYnl0ZXMgYXMgZjY0IC8gTUlCKVxuICAgIH1cbn1cbiJ9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MjExNSwib3V0cHV0Ijo0OTY3LCJjYWNoZVJlYWQiOjEzODI0LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjAsInRvdGFsVG9rZW5zIjoyMDkwNiwiY29zdCI6eyJpbnB1dCI6MC4wMTA1NzUwMDAwMDAwMDAwMDEsIm91dHB1dCI6MC4xNDkwMSwiY2FjaGVSZWFkIjowLjAwNjkxMiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMTY2NDk3fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg4NDkwMzI4LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzM0YWJkMDg4MTkxYjUwMDhjYzliZTE3MDY4OCJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJmNDFmMGU1MCIsInBhcmVudElkIjoiNjJhYWE2MjYiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjA5OjQxLjM3MloiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfcVhMZ3VoN0p3NVZMNTNPTk5oeUdyUU45fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjMzRiZWZjYzgxOTFiZDg0N2NhZTFhYjRhMjhmIiwidG9vbE5hbWUiOiJ3cml0ZSIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IlN1Y2Nlc3NmdWxseSB3cm90ZSAxODcxMCBieXRlcyB0byBzcmMvbWFpbi5ycyJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4ODU4MTM3Mn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImNhYjQxZGUzIiwicGFyZW50SWQiOiJmNDFmMGU1MCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDk6NDcuMzk2WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipGaXhpbmcgbGVhayBtZXRob2QgYW5kIGRlZmF1bHQgc2VsZWN0aW9uKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNhN2ViOTg4MTkxOWQ1ZWU0ZDcwNjBmYzUxZFwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTU9yWVV4ZTEtUjRJU0V2OVJTWVo0VE5TcklaVWthUmpncVkwblA3bXNUa1JMaFhsVEFWc1BuU2Faa05hUHdyWTJBU0RycXdSbDhXUEZOZWhtVDQyTW5vOVkxanJpQkcyallrdlNHZjRPazZLWHp5cTFsOGpjaG12dFQtTmV2SDVoUHAyU3p4SFpuLTA1MUZfdDRjQi00S0k4cS1GWnIydWpfZmV0RFpyOU93R0RxZThmaVNDY3RoMm5LUVJHbFVoSExCZjZUdWFmN0s3RzNVQ3VmRFNEZjJUcHpZcDNHTThlR1VVTEd2cV9xSUdFYm95S213OHBZeFhfNFAtaHZ0ZVVKcWlkSHU3OVhERnlTcXgzeHp4VGUyZXJwdmNGeFpZMXNoNkwwdHlUQzBQZldYSmVfYlJHdURnZlN6VlRpOXB4cVpzcHdDNHBNSml6MV9PRU1KQ2VWbzE4eDdTcUhUd3VudE5fZlVKQ2RPOHhaZWptVGlGU0NMdFJPQnVTWkctTFJnNktWd21WcWdVWXVScXdnajJ2Ry10RWJTN2R1dkdYWUNYSF9tNkVnRXJhS3huVGNuQ1R2MGs1T2FHUVFUWlEtX3ZZNUlrcnd3U2hwZjEtZ2VSNHhLTUJmSFBzUVhSZ3A5c2JwZTRwcnh0NXdnLV9PU1dpZ0tSdmtaNmJBdU9xb3FVckpqdDloS2JFWmc2ZjZQM1Z4NGRkUXhmam45djZNRGYxdy1oSlZRTVlSN0FIZjhzOEM1M1pjSUdVdll1aEVkTjBHSS1wemVKQ3lNM2dPTWhEeE5vdnVUVkFjRlpJU0o4c3l3NDFKMHU5U1JGVHUtRk5hcmx2R1R3ZzlQWXpJaWFTZFE2QjI5dV8tVi16MGpGN01FZmxZRFRFQlhZMVN6N3owOEIwM2ZvVzJXRVhjVXFCU3EycWlMeXVLRTJPVnFvOWZ2RlN4bkZ3LUZ1OW1FZDZzVE5kWEpoX2I0U0dkakFjT3p2b1hHdFZKRGhFU0lQbi10Zk9KUVlFVXc5b3JnQ1hMaXRGc3VkZ1VlNkF5WlpjQUp0N0xKUzRMU0tOY1E3LWtTVWFtVktUSExGVFZncnNYOHVCNjFLbXpLbVlVVzZ4Q0piZ2lLcEdpTmNsQlBXZGx4ZUhXWkhhQ3dMMDRZTUlRcGlobndlZmZ6VnZLTmN6eUlDMWxlay1CZTVteWZycVBGM1BBbElwLU83QWxIRzZzdkpOREZuME1Jbl91c1FfcEdkTkVQUWREcHM2dGZrZDNwWnhRR1pWZWl4dVZNMGVFYmppVmI5eWNEc3l4Vm5wVGF4VnNjMW1RZ09tclp1Zmw1enBZTVN0ZXFYWEVJT2I0S21NdzdCRjBFTkJzNkhVd0FNYTJUMFlQR2VHNDFVQnp3cG9nX253RnNkUVFjRlRldW9nTVluRFhPQkxIaGpNMW1ubVlENXhSNnVCZEVZZmlrQjJzcmUzR3lQUHRpalBUQTAzMUFfaTctdDNsekhqak5DeTlSY0kyR0F2LXlGS1VmNUVZWE04Xy01OTVyYldSRFJaSksxbG1ma0NaeGhPYVJfdUpJRTdoWnpFdUFPZUhaOUVzazBWbmExd3U4NjBoOUJCdXVNZVhyVjV5S1RSY0Z4LUNGX2xKcUhTQ3F2WGp4SHdTS29ENGdmT0hzNWhyZmE3OVdYMTg0SzdWZUs5dDZ0SWw2bUNCenZfSWtZZkJVZmNuSmtzZEd1bmttcUZVVkN3PT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkZpeGluZyBsZWFrIG1ldGhvZCBhbmQgZGVmYXVsdCBzZWxlY3Rpb24qKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfZkhGVjJKVzA5TEVrUnB0eTN5UlVydjMzfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjM2FiMmVjMDgxOTFhODA1ODA2OWQ2NmQxOTMxIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImNhcmdvIGZtdCAtLSAtLWNoZWNrIiwidGltZW91dCI6MTIwfX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfTlhza2NrdGlYbHFoOE94OUd6dElYWmJNfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjM2FiMmVjYzgxOTE4NmQzYjU4Y2FlMTFiM2Y1IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImNhcmdvIGNoZWNrIiwidGltZW91dCI6MTIwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjE3MzQyLCJvdXRwdXQiOjEyMiwiY2FjaGVSZWFkIjozNTg0LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjU5LCJ0b3RhbFRva2VucyI6MjEwNDgsImNvc3QiOnsiaW5wdXQiOjAuMDg2NzEwMDAwMDAwMDAwMDEsIm91dHB1dCI6MC4wMDM2NiwiY2FjaGVSZWFkIjowLjAwMTc5MiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDkyMTYyMDAwMDAwMDAwMDF9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODg1ODEzNzIsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjM2E1YzdjMDgxOTE5OTU5NjU0NTQwNmM0Njg5In19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjViMjcxZDYwIiwicGFyZW50SWQiOiJjYWI0MWRlMyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDk6NTcuMDQ1WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9mSEZWMkpXMDlMRWtScHR5M3lSVXJ2MzN8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzYWIyZWMwODE5MWE4MDU4MDY5ZDY2ZDE5MzEiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJlcnJvcjogbm8gc3VjaCBjb21tYW5kOiBgZm10YFxuXG5oZWxwOiBhIGNvbW1hbmQgd2l0aCBhIHNpbWlsYXIgbmFtZSBleGlzdHM6IGBmaXhgXG5cbmhlbHA6IHZpZXcgYWxsIGluc3RhbGxlZCBjb21tYW5kcyB3aXRoIGBjYXJnbyAtLWxpc3RgXG5oZWxwOiBmaW5kIGEgcGFja2FnZSB0byBpbnN0YWxsIGBmbXRgIHdpdGggYGNhcmdvIHNlYXJjaCBjYXJnby1mbXRgXG5cblxuQ29tbWFuZCBleGl0ZWQgd2l0aCBjb2RlIDEwMSJ9XSwiZGV0YWlscyI6e30sImlzRXJyb3IiOnRydWUsInRpbWVzdGFtcCI6MTc4NDk4ODU5NzA0NH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6Ijg4M2UxMzNkIiwicGFyZW50SWQiOiI1YjI3MWQ2MCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MDk6NTcuMDQ1WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9OWHNrY2t0aVhscWg4T3g5R3p0SVhaYk18ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzYWIyZWNjODE5MTg2ZDNiNThjYWUxMWIzZjUiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIgICAgVXBkYXRpbmcgY3JhdGVzLmlvIGluZGV4XG4gICAgIExvY2tpbmcgNjcgcGFja2FnZXMgdG8gbGF0ZXN0IFJ1c3QgMS45Ni4wIGNvbXBhdGlibGUgdmVyc2lvbnNcbiAgICAgIEFkZGluZyBhdXRvY2ZnIHYxLjUuMVxuICAgICAgQWRkaW5nIGJpdGZsYWdzIHYyLjEzLjFcbiAgICAgIEFkZGluZyBjYWlyby1ycyB2MC4yMS41XG4gICAgICBBZGRpbmcgY2Fpcm8tc3lzLXJzIHYwLjIxLjVcbiAgICAgIEFkZGluZyBjZmctZXhwciB2MC4yMC44XG4gICAgICBBZGRpbmcgZXF1aXZhbGVudCB2MS4wLjJcbiAgICAgIEFkZGluZyBmaWVsZC1vZmZzZXQgdjAuMy42XG4gICAgICBBZGRpbmcgZnV0dXJlcy1jaGFubmVsIHYwLjMuMzNcbiAgICAgIEFkZGluZyBmdXR1cmVzLWNvcmUgdjAuMy4zM1xuICAgICAgQWRkaW5nIGZ1dHVyZXMtZXhlY3V0b3IgdjAuMy4zM1xuICAgICAgQWRkaW5nIGZ1dHVyZXMtaW8gdjAuMy4zM1xuICAgICAgQWRkaW5nIGZ1dHVyZXMtbWFjcm8gdjAuMy4zM1xuICAgICAgQWRkaW5nIGZ1dHVyZXMtdGFzayB2MC4zLjMzXG4gICAgICBBZGRpbmcgZnV0dXJlcy11dGlsIHYwLjMuMzNcbiAgICAgIEFkZGluZyBnZGstcGl4YnVmIHYwLjIxLjVcbiAgICAgIEFkZGluZyBnZGstcGl4YnVmLXN5cyB2MC4yMS41XG4gICAgICBBZGRpbmcgZ2RrNCB2MC4xMC4zXG4gICAgICBBZGRpbmcgZ2RrNC1zeXMgdjAuMTAuM1xuICAgICAgQWRkaW5nIGdpbyB2MC4yMS41XG4gICAgICBBZGRpbmcgZ2lvLXN5cyB2MC4yMS41XG4gICAgICBBZGRpbmcgZ2xpYiB2MC4yMS41XG4gICAgICBBZGRpbmcgZ2xpYi1tYWNyb3MgdjAuMjEuNVxuICAgICAgQWRkaW5nIGdsaWItc3lzIHYwLjIxLjVcbiAgICAgIEFkZGluZyBnb2JqZWN0LXN5cyB2MC4yMS41XG4gICAgICBBZGRpbmcgZ3JhcGhlbmUtcnMgdjAuMjEuNVxuICAgICAgQWRkaW5nIGdyYXBoZW5lLXN5cyB2MC4yMS41XG4gICAgICBBZGRpbmcgZ3NrNCB2MC4xMC4zXG4gICAgICBBZGRpbmcgZ3NrNC1zeXMgdjAuMTAuM1xuICAgICAgQWRkaW5nIGd0azQgdjAuMTAuMyAoYXZhaWxhYmxlOiB2MC4xMS40KVxuICAgICAgQWRkaW5nIGd0azQtbWFjcm9zIHYwLjEwLjNcbiAgICAgIEFkZGluZyBndGs0LXN5cyB2MC4xMC4zXG4gICAgICBBZGRpbmcgaGFzaGJyb3duIHYwLjE3LjFcbiAgICAgIEFkZGluZyBoZWNrIHYwLjUuMFxuICAgICAgQWRkaW5nIGluZGV4bWFwIHYyLjE0LjBcbiAgICAgIEFkZGluZyBsaWJhZHdhaXRhIHYwLjguMSAoYXZhaWxhYmxlOiB2MC45LjIpXG4gICAgICBBZGRpbmcgbGliYWR3YWl0YS1zeXMgdjAuOC4xXG4gICAgICBBZGRpbmcgbGliYyB2MC4yLjE4OVxuICAgICAgQWRkaW5nIG1lbWNociB2Mi44LjNcbiAgICAgIEFkZGluZyBtZW1vZmZzZXQgdjAuOS4xXG4gICAgICBBZGRpbmcgcGFuZ28gdjAuMjEuNVxuICAgICAgQWRkaW5nIHBhbmdvLXN5cyB2MC4yMS41XG4gICAgICBBZGRpbmcgcGluLXByb2plY3QtbGl0ZSB2MC4yLjE3XG4gICAgICBBZGRpbmcgcGtnLWNvbmZpZyB2MC4zLjMzXG4gICAgICBBZGRpbmcgcHJvYy1tYWNyby1jcmF0ZSB2My41LjBcbiAgICAgIEFkZGluZyBwcm9jLW1hY3JvMiB2MS4wLjEwN1xuICAgICAgQWRkaW5nIHF1b3RlIHYxLjAuNDdcbiAgICAgIEFkZGluZyBydXN0Y192ZXJzaW9uIHYwLjQuMVxuICAgICAgQWRkaW5nIHNlbXZlciB2MS4wLjI4XG4gICAgICBBZGRpbmcgc2VyZGVfY29yZSB2MS4wLjIyOVxuICAgICAgQWRkaW5nIHNlcmRlX2Rlcml2ZSB2MS4wLjIyOVxuICAgICAgQWRkaW5nIHNlcmRlX3NwYW5uZWQgdjEuMS4xXG4gICAgICBBZGRpbmcgc2xhYiB2MC40LjEyXG4gICAgICBBZGRpbmcgc21hbGx2ZWMgdjEuMTUuMlxuICAgICAgQWRkaW5nIHN5biB2Mi4wLjExOVxuICAgICAgQWRkaW5nIHN5biB2My4wLjNcbiAgICAgIEFkZGluZyBzeXN0ZW0tZGVwcyB2Ny4wLjhcbiAgICAgIEFkZGluZyB0YXJnZXQtbGV4aWNvbiB2MC4xMy41XG4gICAgICBBZGRpbmcgdG9tbCB2MS4xLjMrc3BlYy0xLjEuMFxuICAgICAgQWRkaW5nIHRvbWxfZGF0ZXRpbWUgdjEuMS4xK3NwZWMtMS4xLjBcbiAgICAgIEFkZGluZyB0b21sX2VkaXQgdjAuMjUuMTMrc3BlYy0xLjEuMFxuICAgICAgQWRkaW5nIHRvbWxfcGFyc2VyIHYxLjEuMitzcGVjLTEuMS4wXG4gICAgICBBZGRpbmcgdG9tbF93cml0ZXIgdjEuMS4yK3NwZWMtMS4xLjBcbiAgICAgIEFkZGluZyB1bmljb2RlLWlkZW50IHYxLjAuMjRcbiAgICAgIEFkZGluZyB2ZXJzaW9uLWNvbXBhcmUgdjAuMi4xXG4gICAgICBBZGRpbmcgd2luZG93cy1saW5rIHYwLjIuMVxuICAgICAgQWRkaW5nIHdpbmRvd3Mtc3lzIHYwLjYxLjJcbiAgICAgIEFkZGluZyB3aW5ub3cgdjEuMC40XG4gRG93bmxvYWRpbmcgY3JhdGVzIC4uLlxuICBEb3dubG9hZGVkIGF1dG9jZmcgdjEuNS4xXG4gIERvd25sb2FkZWQgYml0ZmxhZ3MgdjIuMTMuMVxuICBEb3dubG9hZGVkIGdkay1waXhidWYtc3lzIHYwLjIxLjVcbiAgRG93bmxvYWRlZCBmaWVsZC1vZmZzZXQgdjAuMy42XG4gIERvd25sb2FkZWQgZnV0dXJlcy10YXNrIHYwLjMuMzNcbiAgRG93bmxvYWRlZCBmdXR1cmVzLW1hY3JvIHYwLjMuMzNcbiAgRG93bmxvYWRlZCBmdXR1cmVzLWlvIHYwLjMuMzNcbiAgRG93bmxvYWRlZCBncmFwaGVuZS1zeXMgdjAuMjEuNVxuICBEb3dubG9hZGVkIGZ1dHVyZXMtY29yZSB2MC4zLjMzXG4gIERvd25sb2FkZWQgZ3RrNC1tYWNyb3MgdjAuMTAuM1xuICBEb3dubG9hZGVkIGdzazQtc3lzIHYwLjEwLjNcbiAgRG93bmxvYWRlZCBjYWlyby1zeXMtcnMgdjAuMjEuNVxuICBEb3dubG9hZGVkIGdyYXBoZW5lLXJzIHYwLjIxLjVcbiAgRG93bmxvYWRlZCBnb2JqZWN0LXN5cyB2MC4yMS41XG4gIERvd25sb2FkZWQgZ2RrLXBpeGJ1ZiB2MC4yMS41XG4gIERvd25sb2FkZWQgZnV0dXJlcy1leGVjdXRvciB2MC4zLjMzXG4gIERvd25sb2FkZWQgcGtnLWNvbmZpZyB2MC4zLjMzXG4gIERvd25sb2FkZWQgdmVyc2lvbi1jb21wYXJlIHYwLjIuMVxuICBEb3dubG9hZGVkIHBhbmdvLXN5cyB2MC4yMS41XG4gIERvd25sb2FkZWQgdGFyZ2V0LWxleGljb24gdjAuMTMuNVxuICBEb3dubG9hZGVkIHNtYWxsdmVjIHYxLjE1LjJcbiAgRG93bmxvYWRlZCB0b21sX3dyaXRlciB2MS4xLjIrc3BlYy0xLjEuMFxuICBEb3dubG9hZGVkIHN5c3RlbS1kZXBzIHY3LjAuOFxuICBEb3dubG9hZGVkIGZ1dHVyZXMtY2hhbm5lbCB2MC4zLjMzXG4gIERvd25sb2FkZWQgY2ZnLWV4cHIgdjAuMjAuOFxuICBEb3dubG9hZGVkIGxpYmFkd2FpdGEtc3lzIHYwLjguMVxuICBEb3dubG9hZGVkIHF1b3RlIHYxLjAuNDdcbiAgRG93bmxvYWRlZCBnc2s0IHYwLjEwLjNcbiAgRG93bmxvYWRlZCBjYWlyby1ycyB2MC4yMS41XG4gIERvd25sb2FkZWQgcGFuZ28gdjAuMjEuNVxuICBEb3dubG9hZGVkIHNlcmRlX2NvcmUgdjEuMC4yMjlcbiAgRG93bmxvYWRlZCB0b21sIHYxLjEuMytzcGVjLTEuMS4wXG4gIERvd25sb2FkZWQgdG9tbF9lZGl0IHYwLjI1LjEzK3NwZWMtMS4xLjBcbiAgRG93bmxvYWRlZCBtZW1jaHIgdjIuOC4zXG4gIERvd25sb2FkZWQgaW5kZXhtYXAgdjIuMTQuMFxuICBEb3dubG9hZGVkIGhhc2hicm93biB2MC4xNy4xXG4gIERvd25sb2FkZWQgbGliYWR3YWl0YSB2MC44LjFcbiAgRG93bmxvYWRlZCBmdXR1cmVzLXV0aWwgdjAuMy4zM1xuICBEb3dubG9hZGVkIHdpbm5vdyB2MS4wLjRcbiAgRG93bmxvYWRlZCBnaW8gdjAuMjEuNVxuICBEb3dubG9hZGVkIGd0azQtc3lzIHYwLjEwLjNcbiAgRG93bmxvYWRlZCBnZGs0IHYwLjEwLjNcbiAgRG93bmxvYWRlZCBwcm9jLW1hY3JvMiB2MS4wLjEwN1xuICBEb3dubG9hZGVkIGdsaWItc3lzIHYwLjIxLjVcbiAgRG93bmxvYWRlZCBnbGliLW1hY3JvcyB2MC4yMS41XG4gIERvd25sb2FkZWQgZ2RrNC1zeXMgdjAuMTAuM1xuICBEb3dubG9hZGVkIGdsaWIgdjAuMjEuNVxuICBEb3dubG9hZGVkIHN5biB2Mi4wLjExOVxuICBEb3dubG9hZGVkIGd0azQgdjAuMTAuM1xuICBEb3dubG9hZGVkIGxpYmMgdjAuMi4xODlcbiAgRG93bmxvYWRlZCBnaW8tc3lzIHYwLjIxLjVcbiAgIENvbXBpbGluZyB3aW5ub3cgdjEuMC40XG4gICBDb21waWxpbmcgdG9tbF9kYXRldGltZSB2MS4xLjErc3BlYy0xLjEuMFxuICAgQ29tcGlsaW5nIHRhcmdldC1sZXhpY29uIHYwLjEzLjVcbiAgIENvbXBpbGluZyBzbWFsbHZlYyB2MS4xNS4yXG4gICBDb21waWxpbmcgaGVjayB2MC41LjBcbiAgIENvbXBpbGluZyBzZXJkZV9zcGFubmVkIHYxLjEuMVxuICAgQ29tcGlsaW5nIHBrZy1jb25maWcgdjAuMy4zM1xuICAgQ29tcGlsaW5nIHZlcnNpb24tY29tcGFyZSB2MC4yLjFcbiAgIENvbXBpbGluZyBsaWJjIHYwLjIuMTg5XG4gICBDb21waWxpbmcgcHJvYy1tYWNybzIgdjEuMC4xMDdcbiAgIENvbXBpbGluZyB1bmljb2RlLWlkZW50IHYxLjAuMjRcbiAgIENvbXBpbGluZyBxdW90ZSB2MS4wLjQ3XG4gICBDb21waWxpbmcgaGFzaGJyb3duIHYwLjE3LjFcbiAgIENvbXBpbGluZyBlcXVpdmFsZW50IHYxLjAuMlxuICAgIENoZWNraW5nIGZ1dHVyZXMtY29yZSB2MC4zLjMzXG4gICAgQ2hlY2tpbmcgcGluLXByb2plY3QtbGl0ZSB2MC4yLjE3XG4gICAgQ2hlY2tpbmcgZnV0dXJlcy10YXNrIHYwLjMuMzNcbiAgICBDaGVja2luZyBzbGFiIHYwLjQuMTJcbiAgICBDaGVja2luZyBmdXR1cmVzLWNoYW5uZWwgdjAuMy4zM1xuICAgIENoZWNraW5nIGJpdGZsYWdzIHYyLjEzLjFcbiAgICBDaGVja2luZyBtZW1jaHIgdjIuOC4zXG4gICAgQ2hlY2tpbmcgZnV0dXJlcy1pbyB2MC4zLjMzXG4gICBDb21waWxpbmcgc2VtdmVyIHYxLjAuMjhcbiAgIENvbXBpbGluZyBhdXRvY2ZnIHYxLjUuMVxuICAgQ29tcGlsaW5nIHJ1c3RjX3ZlcnNpb24gdjAuNC4xXG4gICBDb21waWxpbmcgbWVtb2Zmc2V0IHYwLjkuMVxuICAgQ29tcGlsaW5nIGluZGV4bWFwIHYyLjE0LjBcbiAgIENvbXBpbGluZyBmaWVsZC1vZmZzZXQgdjAuMy42XG4gICBDb21waWxpbmcgY2ZnLWV4cHIgdjAuMjAuOFxuICAgQ29tcGlsaW5nIHN5biB2Mi4wLjExOVxuICAgQ29tcGlsaW5nIHRvbWxfcGFyc2VyIHYxLjEuMitzcGVjLTEuMS4wXG4gICBDb21waWxpbmcgdG9tbCB2MS4xLjMrc3BlYy0xLjEuMFxuICAgQ29tcGlsaW5nIHRvbWxfZWRpdCB2MC4yNS4xMytzcGVjLTEuMS4wXG4gICBDb21waWxpbmcgc3lzdGVtLWRlcHMgdjcuMC44XG4gICBDb21waWxpbmcgcHJvYy1tYWNyby1jcmF0ZSB2My41LjBcbiAgIENvbXBpbGluZyBnbGliLXN5cyB2MC4yMS41XG4gICBDb21waWxpbmcgZ29iamVjdC1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGdpby1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIHBhbmdvLXN5cyB2MC4yMS41XG4gICBDb21waWxpbmcgZ2RrLXBpeGJ1Zi1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGNhaXJvLXN5cy1ycyB2MC4yMS41XG4gICBDb21waWxpbmcgZ3JhcGhlbmUtc3lzIHYwLjIxLjVcbiAgIENvbXBpbGluZyBnZGs0LXN5cyB2MC4xMC4zXG4gICBDb21waWxpbmcgZ3NrNC1zeXMgdjAuMTAuM1xuICAgQ29tcGlsaW5nIGd0azQtc3lzIHYwLjEwLjNcbiAgIENvbXBpbGluZyBsaWJhZHdhaXRhLXN5cyB2MC44LjFcbndhcm5pbmc6IGdyYXBoZW5lLXN5c0AwLjIxLjU6IFxuZXJyb3I6IGZhaWxlZCB0byBydW4gY3VzdG9tIGJ1aWxkIGNvbW1hbmQgZm9yIGBncmFwaGVuZS1zeXMgdjAuMjEuNWBcblxuQ2F1c2VkIGJ5OlxuICBwcm9jZXNzIGRpZG4ndCBleGl0IHN1Y2Nlc3NmdWxseTogYC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2dyYXBoZW5lLXN5cy0wZjYyZDgyYTlhYjhkMGM2L2J1aWxkLXNjcmlwdC1idWlsZGAgKGV4aXQgc3RhdHVzOiAxKVxuICAtLS0gc3Rkb3V0XG4gIGNhcmdvOnJlcnVuLWlmLWNoYW5nZWQ9L2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ncmFwaGVuZS1zeXMtMC4yMS41L0NhcmdvLnRvbWxcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9R1JBUEhFTkVfR09CSkVDVF8xLjBfTk9fUEtHX0NPTkZJR1xuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX3g4Nl82NC11bmtub3duLWxpbnV4LWdudVxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX3g4Nl82NF91bmtub3duX2xpbnV4X2dudVxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1IT1NUX1BLR19DT05GSUdcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR1xuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX1BBVEhfeDg2XzY0LXVua25vd24tbGludXgtZ251XG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPVBLR19DT05GSUdfUEFUSF94ODZfNjRfdW5rbm93bl9saW51eF9nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9SE9TVF9QS0dfQ09ORklHX1BBVEhcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19QQVRIXG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPVBLR19DT05GSUdfTElCRElSX3g4Nl82NC11bmtub3duLWxpbnV4LWdudVxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX0xJQkRJUl94ODZfNjRfdW5rbm93bl9saW51eF9nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9SE9TVF9QS0dfQ09ORklHX0xJQkRJUlxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX0xJQkRJUlxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX1NZU1JPT1RfRElSX3g4Nl82NC11bmtub3duLWxpbnV4LWdudVxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX1NZU1JPT1RfRElSX3g4Nl82NF91bmtub3duX2xpbnV4X2dudVxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1IT1NUX1BLR19DT05GSUdfU1lTUk9PVF9ESVJcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19TWVNST09UX0RJUlxuICBjYXJnbzp3YXJuaW5nPVxuICBwa2ctY29uZmlnIGV4aXRlZCB3aXRoIHN0YXR1cyBjb2RlIDFcbiAgPiBQS0dfQ09ORklHX0FMTE9XX1NZU1RFTV9DRkxBR1M9MSBwa2ctY29uZmlnIC0tbGlicyAtLWNmbGFncyBncmFwaGVuZS1nb2JqZWN0LTEuMCAnZ3JhcGhlbmUtZ29iamVjdC0xLjAgPj0gMS4xMCdcblxuICBwa2ctY29uZmlnIG91dHB1dDpcbiAgICBQYWNrYWdlIGdyYXBoZW5lLWdvYmplY3QtMS4wIHdhcyBub3QgZm91bmQgaW4gdGhlIHBrZy1jb25maWcgc2VhcmNoIHBhdGguXG4gICAgUGVyaGFwcyB5b3Ugc2hvdWxkIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYGdyYXBoZW5lLWdvYmplY3QtMS4wLnBjJ1xuICAgIHRvIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgICBObyBwYWNrYWdlICdncmFwaGVuZS1nb2JqZWN0LTEuMCcgZm91bmRcbiAgICBQYWNrYWdlIGdyYXBoZW5lLWdvYmplY3QtMS4wIHdhcyBub3QgZm91bmQgaW4gdGhlIHBrZy1jb25maWcgc2VhcmNoIHBhdGguXG4gICAgUGVyaGFwcyB5b3Ugc2hvdWxkIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYGdyYXBoZW5lLWdvYmplY3QtMS4wLnBjJ1xuICAgIHRvIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgICBObyBwYWNrYWdlICdncmFwaGVuZS1nb2JqZWN0LTEuMCcgZm91bmRcblxuICBUaGUgc3lzdGVtIGxpYnJhcnkgYGdyYXBoZW5lLWdvYmplY3QtMS4wYCByZXF1aXJlZCBieSBjcmF0ZSBgZ3JhcGhlbmUtc3lzYCB3YXMgbm90IGZvdW5kLlxuICBUaGUgZmlsZSBgZ3JhcGhlbmUtZ29iamVjdC0xLjAucGNgIG5lZWRzIHRvIGJlIGluc3RhbGxlZCBhbmQgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IGNvbnRhaW4gaXRzIHBhcmVudCBkaXJlY3RvcnkuXG4gIFRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldC5cblxuICBISU5UOiBpZiB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIGxpYnJhcnksIHRyeSBzZXR0aW5nIFBLR19DT05GSUdfUEFUSCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYGdyYXBoZW5lLWdvYmplY3QtMS4wLnBjYC5cblxud2FybmluZzogYnVpbGQgZmFpbGVkLCB3YWl0aW5nIGZvciBvdGhlciBqb2JzIHRvIGZpbmlzaC4uLlxud2FybmluZzogZ3RrNC1zeXNAMC4xMC4zOiBcbmVycm9yOiBmYWlsZWQgdG8gcnVuIGN1c3RvbSBidWlsZCBjb21tYW5kIGZvciBgZ3RrNC1zeXMgdjAuMTAuM2BcblxuQ2F1c2VkIGJ5OlxuICBwcm9jZXNzIGRpZG4ndCBleGl0IHN1Y2Nlc3NmdWxseTogYC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2d0azQtc3lzLTUyMzljMzU2YmE2ZmNkZDEvYnVpbGQtc2NyaXB0LWJ1aWxkYCAoZXhpdCBzdGF0dXM6IDEpXG4gIC0tLSBzdGRvdXRcbiAgY2FyZ286cmVydW4taWYtY2hhbmdlZD0vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2d0azQtc3lzLTAuMTAuMy9DYXJnby50b21sXG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPUdUSzRfTk9fUEtHX0NPTkZJR1xuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX3g4Nl82NC11bmtub3duLWxpbnV4LWdudVxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX3g4Nl82NF91bmtub3duX2xpbnV4X2dudVxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1IT1NUX1BLR19DT05GSUdcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR1xuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX1BBVEhfeDg2XzY0LXVua25vd24tbGludXgtZ251XG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPVBLR19DT05GSUdfUEFUSF94ODZfNjRfdW5rbm93bl9saW51eF9nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9SE9TVF9QS0dfQ09ORklHX1BBVEhcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19QQVRIXG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPVBLR19DT05GSUdfTElCRElSX3g4Nl82NC11bmtub3duLWxpbnV4LWdudVxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX0xJQkRJUl94ODZfNjRfdW5rbm93bl9saW51eF9nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9SE9TVF9QS0dfQ09ORklHX0xJQkRJUlxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX0xJQkRJUlxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX1NZU1JPT1RfRElSX3g4Nl82NC11bmtub3duLWxpbnV4LWdudVxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX1NZU1JPT1RfRElSX3g4Nl82NF91bmtub3duX2xpbnV4X2dudVxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1IT1NUX1BLR19DT05GSUdfU1lTUk9PVF9ESVJcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19TWVNST09UX0RJUlxuICBjYXJnbzp3YXJuaW5nPVxuICBwa2ctY29uZmlnIGV4aXRlZCB3aXRoIHN0YXR1cyBjb2RlIDFcbiAgPiBQS0dfQ09ORklHX0FMTE9XX1NZU1RFTV9DRkxBR1M9MSBwa2ctY29uZmlnIC0tbGlicyAtLWNmbGFncyBndGs0ICdndGs0ID49IDQuMTAnXG5cbiAgcGtnLWNvbmZpZyBvdXRwdXQ6XG4gICAgUGFja2FnZSBndGs0IHdhcyBub3QgZm91bmQgaW4gdGhlIHBrZy1jb25maWcgc2VhcmNoIHBhdGguXG4gICAgUGVyaGFwcyB5b3Ugc2hvdWxkIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYGd0azQucGMnXG4gICAgdG8gdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgIE5vIHBhY2thZ2UgJ2d0azQnIGZvdW5kXG4gICAgUGFja2FnZSBndGs0IHdhcyBub3QgZm91bmQgaW4gdGhlIHBrZy1jb25maWcgc2VhcmNoIHBhdGguXG4gICAgUGVyaGFwcyB5b3Ugc2hvdWxkIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYGd0azQucGMnXG4gICAgdG8gdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuICAgIE5vIHBhY2thZ2UgJ2d0azQnIGZvdW5kXG5cbiAgVGhlIHN5c3RlbSBsaWJyYXJ5IGBndGs0YCByZXF1aXJlZCBieSBjcmF0ZSBgZ3RrNC1zeXNgIHdhcyBub3QgZm91bmQuXG4gIFRoZSBmaWxlIGBndGs0LnBjYCBuZWVkcyB0byBiZSBpbnN0YWxsZWQgYW5kIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBjb250YWluIGl0cyBwYXJlbnQgZGlyZWN0b3J5LlxuICBUaGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBzZXQuXG5cbiAgSElOVDogaWYgeW91IGhhdmUgaW5zdGFsbGVkIHRoZSBsaWJyYXJ5LCB0cnkgc2V0dGluZyBQS0dfQ09ORklHX1BBVEggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGBndGs0LnBjYC5cblxuXG5cbkNvbW1hbmQgZXhpdGVkIHdpdGggY29kZSAxMDEifV0sImRldGFpbHMiOnt9LCJpc0Vycm9yIjp0cnVlLCJ0aW1lc3RhbXAiOjE3ODQ5ODg1OTcwNDV9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJiYTk5M2FhNCIsInBhcmVudElkIjoiODgzZTEzM2QiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjEwOjAyLjQ3N1oiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqRXhwbG9yaW5nIFJ1c3QgZG9jc19ycyBidWlsZCBvcHRpbWl6YXRpb24qKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjM2I3MzZkMDgxOTE4YzBkNGZmOTRmZDM5Y2M5XCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNTzZKSjY0ZV81UkhpT1JZSHYyRkR3bVZ2ZHZDc2ZudjBrTzM3dTQzbmxpZ0tUX3c0Y214aWxOa2VjaVd6UFg3Uk1KckVkM0NHTGNWZWotZnBXNjBQMFJJMktMZ1llaXJkQy0tRVNEREVGWkd5aWYxTzltY0NsRlFKenVRb3RSYVE2Z3dLRWZFNjVzQlVCbUZaSkk3Ri14NzNKQmRVWmVCTlQ3V3o4S2ViRzh1TFdJSUlYN09SNGtxSGxRY3UwbTlSYnZIWGd2WGp5MUc1U3o2QjJJRFh0TFdvZ09tYURQUFdUNGtjR0taUVEtT0VNRzBnX09FZC01eHJMdm5CRTJVRzZrV3c4aHo0WUI3Z3YxV0hDNDk5M0ZlbHJGazVkdGM0dDljcXNlcEdmMEpxSGRHMEs3Z1ZWMDBNZDN1eE5Jd3pkdEVvNFhNOTVSc0pVQzFRUHdlOVpjZ1BJdGQ4Q2s3VlhlZXFManhUNkFOdGp2SnJKUzROQk1lci1xVXJtTXVQd3ZYblVGX2VTd1hGcWh0cDdEMm5EU193MGc1SFZlXzBIR1JPcE42VjFsWVN6SHdPSWxEaDB6MjZ1WmlaOVZQb2tuNmt3S3BGRmUzaVZKMzQxa01RTFJ2bHNydHJZcTQ2dlZNWWE4WE1JOE44b2dRaWFaMGRsemstdDNQRGlZR2JiNENiTGFUZUVUMHRNVUNBUVoteUt3Y19oanAtQ3NTSkdyMl8tbDBkVmFxQmtQUHdEM3l5Vmc4ZzFIQndQUDdULWdLNndvVzF1RzF5N25aU0Mzejktdml3aGFEbEZEM3ZITUp3X18yRmE0TlBFVGxCYWc4c3lYX2liRjNTVmhmODJNLS0tbHRlNDVQZVN3M2pmMWNrYVJudUtYZkdSTzBpeFp3SktCRTNKUklzeE11SUV6bk8yOGdraUZOVVlHanluWWtKQi1XZjNOa01Qemk2TzRCVGN2MGhtLXFBbGdTMXNnUHdueWNYN2FHQkNxRjN2eEJQb3FXeDJVcVNnZjFqMHVRQmxrcmZXSXJJczFBZDI2X0JiTmRtbFNNXzNLQmxXOUFJVjZFRmRycDBmWk1EMDBpT280Wjdac2RlMVltM3FBTlk2di1MMjVKZmVZOHlYU0EtSWlKWHRIS0F3X0xXYlBob1I2VlllNjB0Wm9fSnlLb2NCbFlrMXJaZ0NlQ04zUWYwWkxobTdveWJmQ05TQ2dHcVIxcnFJOFBoRENJMFVLM1RtdlBVN1hMQ29uRVh6bWRGYXVDZlNPRF9hLTI0eFFvRkhtSjVPdklkaUdzelJHdVVSWW92UUk0Y3BfZU9NUkl1LU4tVTdqLXNUOENGN21yZjV4RHRwTHV6NFZ2a3p1Qkt1LTdJWklkTzdJMG9lS1M1RGtkWnRlei15Q3FoNk9lUE5jSkZZbUNxeFNSTENGY0VrdnZldGU5VmQxU3Njb0Zod3BYUXAwWDl5c2pyUVhRSm9OZVdVWnFLSnkzNTkzNXpQR281Wi1sakFKczVGVGthU2plSVhqNnJQUndURkE3RVBqRmo0VFVNZWVka2JZaW9ReGRRZjlJMEg4VEdFdFllOGRKbElYYWE4TzVib2JVcUduWkhRRG9yYWNiMHh5V2NPQVFUazl6RHNuSzk2aXE1NUV1SHlyaG5pQl9Idnp3VnhTbHkzcWpKQT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkV4cGxvcmluZyBSdXN0IGRvY3NfcnMgYnVpbGQgb3B0aW1pemF0aW9uKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX2NXZG14bnRyRGtXaERNUXI4SmYyT3FlTnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNiYTU5YTg4MTkxYWMxZjJmMDdlNThmODAzOSIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJydXN0Zm10IC0tdmVyc2lvbiAmJiBydXN0Zm10IC0tY2hlY2sgc3JjL21haW4ucnMiLCJ0aW1lb3V0IjoxMjB9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9BeG9Db0psY0FCV2hGR011eWd6ZmoxaFR8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzYmE1OWJjODE5MWIzYzA5ZjZkYzkzOGM4NGMiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiRE9DU19SUz0xIGNhcmdvIGNoZWNrIiwidGltZW91dCI6MTIwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjQ4NDMsIm91dHB1dCI6MTMyLCJjYWNoZVJlYWQiOjE5OTY4LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjU3LCJ0b3RhbFRva2VucyI6MjQ5NDMsImNvc3QiOnsiaW5wdXQiOjAuMDI0MjE1LCJvdXRwdXQiOjAuMDAzOTYsImNhY2hlUmVhZCI6MC4wMDk5ODQsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAzODE1OX19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4ODU5NzA0NiwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzYjU2Mjg0ODE5MWI2YWU1YTNlYmFmZDk0M2EifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMzkyZGQzY2QiLCJwYXJlbnRJZCI6ImJhOTkzYWE0IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMDowNC4zNjdaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX2NXZG14bnRyRGtXaERNUXI4SmYyT3FlTnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNiYTU5YTg4MTkxYWMxZjJmMDdlNThmODAzOSIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii9iaW4vYmFzaDogbGluZSAxOiBydXN0Zm10OiBjb21tYW5kIG5vdCBmb3VuZFxuXG5cbkNvbW1hbmQgZXhpdGVkIHdpdGggY29kZSAxMjcifV0sImRldGFpbHMiOnt9LCJpc0Vycm9yIjp0cnVlLCJ0aW1lc3RhbXAiOjE3ODQ5ODg2MDQzNjd9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIzMDQ3YzE1ZCIsInBhcmVudElkIjoiMzkyZGQzY2QiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjEwOjA0LjM2N1oiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfQXhvQ29KbGNBQldoRkdNdXlnemZqMWhUfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjM2JhNTliYzgxOTFiM2MwOWY2ZGM5MzhjODRjIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiICAgQ29tcGlsaW5nIGZ1dHVyZXMtbWFjcm8gdjAuMy4zM1xuICAgQ29tcGlsaW5nIGdsaWItbWFjcm9zIHYwLjIxLjVcbiAgIENvbXBpbGluZyBndGs0LW1hY3JvcyB2MC4xMC4zXG4gICBDb21waWxpbmcgZ2xpYi1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGdpby1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGNhaXJvLXN5cy1ycyB2MC4yMS41XG4gICBDb21waWxpbmcgZ2RrLXBpeGJ1Zi1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGdyYXBoZW5lLXN5cyB2MC4yMS41XG4gICBDb21waWxpbmcgZ2RrNC1zeXMgdjAuMTAuM1xuICAgQ29tcGlsaW5nIGdzazQtc3lzIHYwLjEwLjNcbiAgIENvbXBpbGluZyBndGs0LXN5cyB2MC4xMC4zXG4gICBDb21waWxpbmcgbGliYWR3YWl0YS1zeXMgdjAuOC4xXG53YXJuaW5nOiBsaWJhZHdhaXRhLXN5c0AwLjguMTogXG5lcnJvcjogZmFpbGVkIHRvIHJ1biBjdXN0b20gYnVpbGQgY29tbWFuZCBmb3IgYGxpYmFkd2FpdGEtc3lzIHYwLjguMWBcblxuQ2F1c2VkIGJ5OlxuICBwcm9jZXNzIGRpZG4ndCBleGl0IHN1Y2Nlc3NmdWxseTogYC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2xpYmFkd2FpdGEtc3lzLTk1ZjNmOWFhOGNlNjIyODUvYnVpbGQtc2NyaXB0LWJ1aWxkYCAoZXhpdCBzdGF0dXM6IDEpXG4gIC0tLSBzdGRvdXRcbiAgY2FyZ286cmVydW4taWYtY2hhbmdlZD0vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2xpYmFkd2FpdGEtc3lzLTAuOC4xL0NhcmdvLnRvbWxcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9TElCQURXQUlUQV8xX05PX1BLR19DT05GSUdcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR194ODZfNjQtdW5rbm93bi1saW51eC1nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR194ODZfNjRfdW5rbm93bl9saW51eF9nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9SE9TVF9QS0dfQ09ORklHXG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPVBLR19DT05GSUdcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19QQVRIX3g4Nl82NC11bmtub3duLWxpbnV4LWdudVxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX1BBVEhfeDg2XzY0X3Vua25vd25fbGludXhfZ251XG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPUhPU1RfUEtHX0NPTkZJR19QQVRIXG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPVBLR19DT05GSUdfUEFUSFxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX0xJQkRJUl94ODZfNjQtdW5rbm93bi1saW51eC1nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19MSUJESVJfeDg2XzY0X3Vua25vd25fbGludXhfZ251XG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPUhPU1RfUEtHX0NPTkZJR19MSUJESVJcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19MSUJESVJcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19TWVNST09UX0RJUl94ODZfNjQtdW5rbm93bi1saW51eC1nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19TWVNST09UX0RJUl94ODZfNjRfdW5rbm93bl9saW51eF9nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9SE9TVF9QS0dfQ09ORklHX1NZU1JPT1RfRElSXG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPVBLR19DT05GSUdfU1lTUk9PVF9ESVJcbiAgY2FyZ286d2FybmluZz1cbiAgcGtnLWNvbmZpZyBleGl0ZWQgd2l0aCBzdGF0dXMgY29kZSAxXG4gID4gUEtHX0NPTkZJR19BTExPV19TWVNURU1fQ0ZMQUdTPTEgcGtnLWNvbmZpZyAtLWxpYnMgLS1jZmxhZ3MgbGliYWR3YWl0YS0xICdsaWJhZHdhaXRhLTEgPj0gMS41J1xuXG4gIHBrZy1jb25maWcgb3V0cHV0OlxuICAgIFBhY2thZ2UgbGliYWR3YWl0YS0xIHdhcyBub3QgZm91bmQgaW4gdGhlIHBrZy1jb25maWcgc2VhcmNoIHBhdGguXG4gICAgUGVyaGFwcyB5b3Ugc2hvdWxkIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYGxpYmFkd2FpdGEtMS5wYydcbiAgICB0byB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAgTm8gcGFja2FnZSAnbGliYWR3YWl0YS0xJyBmb3VuZFxuICAgIFBhY2thZ2UgbGliYWR3YWl0YS0xIHdhcyBub3QgZm91bmQgaW4gdGhlIHBrZy1jb25maWcgc2VhcmNoIHBhdGguXG4gICAgUGVyaGFwcyB5b3Ugc2hvdWxkIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYGxpYmFkd2FpdGEtMS5wYydcbiAgICB0byB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlXG4gICAgTm8gcGFja2FnZSAnbGliYWR3YWl0YS0xJyBmb3VuZFxuXG4gIFRoZSBzeXN0ZW0gbGlicmFyeSBgbGliYWR3YWl0YS0xYCByZXF1aXJlZCBieSBjcmF0ZSBgbGliYWR3YWl0YS1zeXNgIHdhcyBub3QgZm91bmQuXG4gIFRoZSBmaWxlIGBsaWJhZHdhaXRhLTEucGNgIG5lZWRzIHRvIGJlIGluc3RhbGxlZCBhbmQgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IGNvbnRhaW4gaXRzIHBhcmVudCBkaXJlY3RvcnkuXG4gIFRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IHNldC5cblxuICBISU5UOiBpZiB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIGxpYnJhcnksIHRyeSBzZXR0aW5nIFBLR19DT05GSUdfUEFUSCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYGxpYmFkd2FpdGEtMS5wY2AuXG5cbndhcm5pbmc6IGJ1aWxkIGZhaWxlZCwgd2FpdGluZyBmb3Igb3RoZXIgam9icyB0byBmaW5pc2guLi5cblxuXG5Db21tYW5kIGV4aXRlZCB3aXRoIGNvZGUgMTAxIn1dLCJkZXRhaWxzIjp7fSwiaXNFcnJvciI6dHJ1ZSwidGltZXN0YW1wIjoxNzg0OTg4NjA0MzY3fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNzg0NGNhZjEiLCJwYXJlbnRJZCI6IjMwNDdjMTVkIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMDoxMi4yOTNaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkluc3BlY3RpbmcgZ2VuZXJhdGVkIEFQSXMgc291cmNlKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNiZTc0ODQ4MTkxYTU5ZDk1MWM3M2U2YmRhYlwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTVBFUmI0RUpSdkoyNlFZeWhBX3AzQ2pTSW9CYTc0OXUxSzJDTllESnNjT2lPbDlndjF6UVFJa0hYdVI1SFJEWktHT3ZrYjcweEFsV2dBTFVpdlUySWkxdnBkc0d3ME9xLUJJRjdscGpKTXNPV0JTZHNsVkdrcmlmb182VjFiYUs0dDFlUC1EcFRPRUZOUGxPZDMzWVJudEdhYWp5X05lUlI3Wm9ZSncyUy0xRnhkNmFCV2pWci1XUjN1c3lMR2dFMnRQNER1Q0RxeXJCSUg2ZUVnT28zRDFJUTNhRGN6cUhwZnptQ2J5U3d4YmRHRUx5TDYtSmQtRW9vNW02eUhYb2VVMVpPSG1HSzlmYjVzUHo2ZFlnV1lGaGNaM000TnIyNU9sXzFiNVhoaXV1S25Xdk9GVFpGaHhPVFhNVG80NjFLbGg3RzIxUjhncWt3VVZnVG9BLVo1TVRGMkhqWVNRei1CT0JsRkVXVHpUTWdMNkhPWVJtMU11OThUVEJCMzlKRHE3WGVYSzg1Si1oTEMwdXNDMEhxcmYwejdCc1ZCSzI4b2pPVTcxVWlvZU1GWWlXS3NXUU1SMFZmdzc0U3NCNlROOVpzaTg0NjZYM0xhdW9LUm9QWjFaaGlRRUdFOHhnX2FiVjVaSGVqcllmOTlDY1h6SDZBUWZMbUJhQ1BCUzVpVjBuc1N1ZW83NV9jT1NLSHJtUWxWWWloZHVSUDFTaGpGRmw4UHlEZEdCM1RQWENndV94aHRlaXhoUkFPUzZLSjNHX2I4VWcxUzlVeXhsV3BUWTg0NHZsV1gzeWpwZkttOS1kV3djb25uZnNOUWxhVkVrejJWQ3l0WmhfSFprb1hhTzcySHo1d0o3cEI3QnRTVUFWZ2UxNjRQTkJFa0h1MWw2MkZGQWlrUzJHb3pMbWNiUHkzZExGc2ZxNGV1SGpWaUM4a054NmpZVnBBS1VsbTVWNG5oQXBUWF9POE5BTVlLVC1faG9ZQXIzWkYxcmFpa0lBMktidzlvYzFYVWFHNXhwSXRnelFUUnBsNGI3eWF0OWR5ZjFFNER3ODd3MXBKV3FZWHV1VzZHUkp4Zy1mNjRMUU5jNlByN0wxWEtERVpfYWYxTkhPTFg2enVUZE44dm1tOHNSUnFORmtnM1NCWmFLZG5CcklUMllZZjhkaTNnb1Y3NEF1aksyOUdTTlF1dWR5NXI4ZHB6ZGtyMlA5R0hCZFRzVnl5MzlCbFg0R095S2tlcXdNblJWSEZMdFFqXy1NTlQwTjFyWk1zQnh4MTVXVjVWakhKbjVIWXIwcjBoZFZUM2F3V3BfdEdYbDMzVWRBNkx5ckNuR2VWR0NOZGFDQVhISFpRMkhWQ1UwQzJodi1qb2JuempaQmtyb0FiUnA1XzlWTTgzaUVPUFRPb213dC1LTGRsZzNkXzF5M2FzTEJfNDZxUFpESlhuYzJyV2NwWXVSY3ozY1ZEWHN3VW5LcXV0WHA2ek9KNDk4cy1KUXhza1B5NGVVOFlKdFFURzdJQUM1VDJwYkZqTzZxc0VWSnBIcmV0UmJZdkxudG8zOWhXMFM1dz09XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipJbnNwZWN0aW5nIGdlbmVyYXRlZCBBUElzIHNvdXJjZSoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF84UEFZWVdrUUhEbkNSNGNhMWgwdG5Eeml8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzYzQyNzI4ODE5MTg4NzJlZjYzZGI0ZDk5ZmMiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoicmcgJ2ZuIHNldF9kZWZhdWx0X3Jlc3BvbnNlfGZuIHNldF9jbG9zZV9yZXNwb25zZXxmbiBjb25uZWN0X3Jlc3BvbnNlfHN0cnVjdCBBbGVydERpYWxvZycgfi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjLyovbGliYWR3YWl0YS0wLjguMS9zcmMgLW4gfCBoZWFkIC0zMCJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9ncXFZTWVkMWZvaVJ3NllpOU5pQU5GOGh8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzYzQyNzQwODE5MWIzMWYxYTE4OWM2MTg3Y2IiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoicmcgJ2ZuIHNldF9jdXJyZW50X25hbWV8Zm4gZGVzdHJveVxcKCcgfi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjLyovZ3RrNC0wLjEwLjMvc3JjL2F1dG8vZmlsZV9jaG9vc2VyX25hdGl2ZS5ycyB+Ly5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvKi9ndGs0LTAuMTAuMy9zcmMvYXV0by9uYXRpdmVfZGlhbG9nLnJzIC1uOyByZyAnZm4gc3RyaW5nXFwoJyB+Ly5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvKi9ndGs0LTAuMTAuMy9zcmMvYXV0by9zdHJpbmdfbGlzdC5ycyAtbiJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9lUjZDYkRkSklaMXJmSWx4TXE1c1lSd0N8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzYzQyNzUwODE5MTgwNzIzMjgwNGQxNzkzMjQiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoicmcgJ2ZuIHNldF9kZXNjcmlwdGlvbnxkZXNjcmlwdGlvblxcKCcgfi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjLyovbGliYWR3YWl0YS0wLjguMS9zcmMvYXV0by9wcmVmZXJlbmNlc19wYWdlLnJzIC1uOyByZyAnZW5hYmxlX3NlYXJjaCcgfi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjLyovbGliYWR3YWl0YS0wLjguMS9zcmMvYXV0by9jb21ib19yb3cucnMgLW4ifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjE4NzMsIm91dHB1dCI6MzE2LCJjYWNoZVJlYWQiOjI0MDY0LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjQwLCJ0b3RhbFRva2VucyI6MjYyNTMsImNvc3QiOnsiaW5wdXQiOjAuMDA5MzY1LCJvdXRwdXQiOjAuMDA5NDgsImNhY2hlUmVhZCI6MC4wMTIwMzIsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAzMDg3N319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4ODYwNDM2OCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzYmNjMjAwODE5MWI1MzRlOGQ2MGY3MWVhZTcifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMWE1MzlkZjYiLCJwYXJlbnRJZCI6Ijc4NDRjYWYxIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMDoxMi4zMTFaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsXzhQQVlZV2tRSERuQ1I0Y2ExaDB0bkR6aXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNjNDI3Mjg4MTkxODg3MmVmNjNkYjRkOTlmYyIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbGliYWR3YWl0YS0wLjguMS9zcmMvYXV0by9hbGVydF9kaWFsb2cucnM6MTc6ICAgIHB1YiBzdHJ1Y3QgQWxlcnREaWFsb2coT2JqZWN0PGZmaTo6QWR3QWxlcnREaWFsb2csIGZmaTo6QWR3QWxlcnREaWFsb2dDbGFzcz4pIEBleHRlbmRzIERpYWxvZywgZ3RrOjpXaWRnZXQsIEBpbXBsZW1lbnRzIGd0azo6QWNjZXNzaWJsZSwgZ3RrOjpCdWlsZGFibGUsIGd0azo6Q29uc3RyYWludFRhcmdldCwgZ3RrOjpTaG9ydGN1dE1hbmFnZXI7XG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2xpYmFkd2FpdGEtMC44LjEvc3JjL2F1dG8vYWxlcnRfZGlhbG9nLnJzOjYxOnB1YiBzdHJ1Y3QgQWxlcnREaWFsb2dCdWlsZGVyIHtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbGliYWR3YWl0YS0wLjguMS9zcmMvYXV0by9hbGVydF9kaWFsb2cucnM6NTg4OiAgICBmbiBzZXRfY2xvc2VfcmVzcG9uc2UoJnNlbGYsIHJlc3BvbnNlOiAmc3RyKSB7XG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2xpYmFkd2FpdGEtMC44LjEvc3JjL2F1dG8vYWxlcnRfZGlhbG9nLnJzOjU5OTogICAgZm4gc2V0X2RlZmF1bHRfcmVzcG9uc2UoJnNlbGYsIHJlc3BvbnNlOiBPcHRpb248JnN0cj4pIHtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbGliYWR3YWl0YS0wLjguMS9zcmMvYXV0by9hbGVydF9kaWFsb2cucnM6NjkwOiAgICBmbiBjb25uZWN0X3Jlc3BvbnNlPEY6IEZuKCZTZWxmLCAmc3RyKSArICdzdGF0aWM+KFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9saWJhZHdhaXRhLTAuOC4xL3NyYy9hdXRvL21lc3NhZ2VfZGlhbG9nLnJzOjcwNDogICAgZm4gc2V0X2Nsb3NlX3Jlc3BvbnNlKCZzZWxmLCByZXNwb25zZTogJnN0cikge1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9saWJhZHdhaXRhLTAuOC4xL3NyYy9hdXRvL21lc3NhZ2VfZGlhbG9nLnJzOjcxNzogICAgZm4gc2V0X2RlZmF1bHRfcmVzcG9uc2UoJnNlbGYsIHJlc3BvbnNlOiBPcHRpb248JnN0cj4pIHtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvbGliYWR3YWl0YS0wLjguMS9zcmMvYXV0by9tZXNzYWdlX2RpYWxvZy5yczo4MDg6ICAgIGZuIGNvbm5lY3RfcmVzcG9uc2U8RjogRm4oJlNlbGYsICZzdHIpICsgJ3N0YXRpYz4oXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODg2MTIzMTF9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIxYWU0YjQ5ZCIsInBhcmVudElkIjoiMWE1MzlkZjYiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjEwOjEyLjMxMVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfZ3FxWU1lZDFmb2lSdzZZaTlOaUFORjhofGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjM2M0Mjc0MDgxOTFiMzFmMWExODljNjE4N2NiIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ndGs0LTAuMTAuMy9zcmMvYXV0by9uYXRpdmVfZGlhbG9nLnJzOjI5OiAgICBmbiBkZXN0cm95KCZzZWxmKSB7XG40MDogICAgcHViIGZuIHN0cmluZygmc2VsZiwgcG9zaXRpb246IHUzMikgLT4gT3B0aW9uPGdsaWI6OkdTdHJpbmc+IHtcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4ODYxMjMxMX19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjAyOWNlNWYzIiwicGFyZW50SWQiOiIxYWU0YjQ5ZCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MTA6MTIuMzExWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9lUjZDYkRkSklaMXJmSWx4TXE1c1lSd0N8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzYzQyNzUwODE5MTgwNzIzMjgwNGQxNzkzMjQiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiI3NjogICAgcHViIGZuIGRlc2NyaXB0aW9uKHNlbGYsIGRlc2NyaXB0aW9uOiBpbXBsIEludG88Z2xpYjo6R1N0cmluZz4pIC0+IFNlbGYge1xuMzM4OiAgICBmbiBkZXNjcmlwdGlvbigmc2VsZikgLT4gZ2xpYjo6R1N0cmluZyB7XG4zNDA6ICAgICAgICAgICAgZnJvbV9nbGliX25vbmUoZmZpOjphZHdfcHJlZmVyZW5jZXNfcGFnZV9nZXRfZGVzY3JpcHRpb24oXG40NjM6ICAgIGZuIHNldF9kZXNjcmlwdGlvbigmc2VsZiwgZGVzY3JpcHRpb246ICZzdHIpIHtcbjQ2NTogICAgICAgICAgICBmZmk6OmFkd19wcmVmZXJlbmNlc19wYWdlX3NldF9kZXNjcmlwdGlvbihcbjQ3NjogICAgZm4gc2V0X2Rlc2NyaXB0aW9uX2NlbnRlcmVkKCZzZWxmLCBjZW50ZXJlZDogYm9vbCkge1xuNjU6ICAgIHB1YiBmbiBlbmFibGVfc2VhcmNoKHNlbGYsIGVuYWJsZV9zZWFyY2g6IGJvb2wpIC0+IFNlbGYge1xuNjc6ICAgICAgICAgICAgYnVpbGRlcjogc2VsZi5idWlsZGVyLnByb3BlcnR5KFwiZW5hYmxlLXNlYXJjaFwiLCBlbmFibGVfc2VhcmNoKSxcbjQzODogICAgI1tkb2MoYWxpYXMgPSBcImFkd19jb21ib19yb3dfZ2V0X2VuYWJsZV9zZWFyY2hcIildXG40Mzk6ICAgICNbZG9jKGFsaWFzID0gXCJnZXRfZW5hYmxlX3NlYXJjaFwiKV1cbjQ0MzogICAgICAgICAgICBmcm9tX2dsaWIoZmZpOjphZHdfY29tYm9fcm93X2dldF9lbmFibGVfc2VhcmNoKFxuNTQyOiAgICAjW2RvYyhhbGlhcyA9IFwiYWR3X2NvbWJvX3Jvd19zZXRfZW5hYmxlX3NlYXJjaFwiKV1cbjU0NDogICAgZm4gc2V0X2VuYWJsZV9zZWFyY2goJnNlbGYsIGVuYWJsZV9zZWFyY2g6IGJvb2wpIHtcbjU0NjogICAgICAgICAgICBmZmk6OmFkd19jb21ib19yb3dfc2V0X2VuYWJsZV9zZWFyY2goXG41NDg6ICAgICAgICAgICAgICAgIGVuYWJsZV9zZWFyY2guaW50b19nbGliKCksXG42NDU6ICAgIGZuIGNvbm5lY3RfZW5hYmxlX3NlYXJjaF9ub3RpZnk8RjogRm4oJlNlbGYpICsgJ3N0YXRpYz4oJnNlbGYsIGY6IEYpIC0+IFNpZ25hbEhhbmRsZXJJZCB7XG42NDY6ICAgICAgICB1bnNhZmUgZXh0ZXJuIFwiQ1wiIGZuIG5vdGlmeV9lbmFibGVfc2VhcmNoX3RyYW1wb2xpbmU8XG42NjM6ICAgICAgICAgICAgICAgICAgICBub3RpZnlfZW5hYmxlX3NlYXJjaF90cmFtcG9saW5lOjo8U2VsZiwgRj4gYXMgKmNvbnN0ICgpLFxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg4NjEyMzExfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYjYzOWJhMDUiLCJwYXJlbnRJZCI6IjAyOWNlNWYzIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMDoyNS41NTJaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkZpeGluZyBzZXRfZGVzY3JpcHRpb24gdXNhZ2UgYW5kIHJlbW92aW5nIHVudXNlZCBpbXBvcnRzKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNjNzMwZTA4MTkxODZjZjJlOTFiM2E1OTM4ZlwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTVBOU2pqUmF5YTlvdGU5ZzNyWmYzLTNWOUpvbF9oWjFBOERqY2ZIVVRGQUFMNzBPVkwwZ1ZjNWVEMGFDc3Vtai1PMGtkVWJvcWFEWjVaWkx5RkFKajRUWG8yMDZDWVNod3dMTEwwZ0VpYmdGQ2QyaVZ0UThxenJNZWI3TVlRX095VElSZEdOQ3lnYnNIT25vT3RyZXdSdTZfYl9Hb2FLWnQ3ZEs1SGRuS1RBelR6bXJ5aUFkbGROR3BVMjBfZTFBdXFUMEYxUDlGOS1XSUd4OXpObzI5NHY3UDFfRFZsUllWX0RsQ010UVFEUFd0YXdkYlRINFYxWkdBZFFEQjBIRDF4aXFweFdfSGE0Q1FSeVhjenVQbm1KTGZzd1RscGhsbm5ISUcxV3A5QjRfVTE5NDg4TDRsV21QZlpkdzA1aVVtZEJMdE81c2N4NkxTX2k3WkpLTGV6WUVoTjlOMmx3ZmFSUnk3R2dMRzVWM254X0FVcDQ3NFZCX3ZZdncyWnN0Z2Q4VFQwX3RyMUR5UW1keWFTQUM0SVg3dVRMWFFodHp1c21tdWxKU2Vna0pfUkhXcWtxMmprX0prVmkySkU5SldKZ2JhQ3VNUzkzU2V0OVc5MGJuQXlTSF9SNkJPdGgwa0dQd3RMcm5OZS04ek5vRGgtRExsZ3BTQmJJQmtMdmg1UGhOcVR2Wmh6VkV6aEtXZ294M2ZoM3YyUXBBd2hKc25jOWZOQUx3b3ktQ3VOTjk1clNVX0NFQUhPMGRFdGpZT2dGUHNPbmh5Z3MydnJXc19feFF5NW1Nc05TNkYwQnBtbWF6R0QxZFNoMS1HOG1ZX1duMjZmVHM2Z21ZOTVUcjRObjJTMXBOMkNyNzFzUFlYdnpjWHBmOFVDMURkYWV6amRaNnJZZ3BhWUd3bTA5VlFwM3gydTBKbmh3dzB2V2hpa2FFckNiZkxtNUVpVWw0Y0hPcGtoSEhxMFBOemRtRi1KMTIzV1RQd1RWSFBZTG00TnBQZXRQZDhtNkZTUEdmRGxXc2phUzU2dUs4eFZ0Uk94UmpRRWg4d0IyZGllOHl0a01kMlhQMjdMenQ5MnRRa2ZtUGtOVTZ0QVp4YjNqQkJrTWowc2FIUlBFYmlodUd4TEhLVVZla25kT1F0eUVZSUtlcmRoWGRGb1I4ZS1Nc3E5cTlIdi1SZnZ3X04tcWdxTDlFQ3VaOTJkMWFyZVVld3lBSUxoWHNDZWNRV2Z4Q0owRHVtQVFNRV9wM2xHZ2VncVRMVXVPc3A3T1luU0ZrbVNPWXRIU3BzS09RVlpHUFJUUjBoeXBYRVh4SllxNTRGXzYyVjdEa3FvSWJQbjJON2ExQkx2Zk1aS3hNaHh5UllZclhCRjZBbXN3eEU3YXR1TGNvck1BdVZ5Zi15bDJZVzVqVmNBMTZmSkxBYmxYSWxjUkt0aU5qOEF1OHJSM0ZPRzlZSWk2RDc2WldfUF9mY0Z6ZHNCb0xMSXdZX1ZZbXBxSmVKdHZCXzRLTWRaNHV5czJYU2d3ajNtUm9aOFhhTll1VTZSV2ZBOXpST1lIemtITE02azRLVFlXbksxaXQtUnhvMC1HamNKRmFpTkdLNVJJdXQ1MU9NamtZOGtlcEhDLW9xRzg5OUNlWk1jSEc0QnRZMi00Unl0bzQ1X1JDY0VwYm9ka2JKc2RsNFdjVTNzZzg1bEhzOUc3VTMyNnhOcHJxd0xvX0p4dnhBcXIzNkh5c2RiYndPV0h6NGNtTUhqY2Q3dGdDZWlPdmV4SmR5S0xhS2hTeGRLTTZYbjc4Z1FFdzEwUHd0YlpzMXpuUnJ6b2dNb2ZBUGRTSjcyX1BSVEhYSXpKLWhaMml0bElURnNrdEExeXZBVEhXRXRVU0prUHZQZ1kxcjBqQWFLa0VidUY2d3l0X1F5TkxkRUg0WjFjeHVXYlZMTDUwb0V5bW9HZ3Fhb0VDWGQ5MXJ6MU83YVlSX0gyd3JnUTYyckJJc2lUbDNOMjhLRjhEM2EwVXBYQmQ5NTNGNm5aaHBKalNHX21GTHR6bEdFRmZGRXBkcm51bnpUczJFcGxhSVVsQlBjYnFpeHptMmtiejB0MHIwbUI4bnFCcDJ6OVJpMEtsb3J2dDVGQ3AzWndxQnpqUTV1Q2s2ZkRadktlV0NQbW9HdFBrZnNsZEo4TktkTEk2Yk5lMzJIeU9UVEEwaXRZMnNWZ3ZpaU5pWFFJc0drMVBZZzhpcFZ5Q0Q0TFZuY29jb1UwUWxSaTlfeEpfeWM0alY4YXZFUWRzMFpzNXgwLTV5anl4MG53dk5MVFdEUS1xMGtmRmxnQ2FyUGkxTmRJdUtpRjVYbVlOMF8wN0FuU1h1YmUzVDNHejVLOHVTdV9pZC1xQWxnZk54bGJtdGVXVENFeHN3bWhpdGp3OWVKbFRWSTA2d19NeThPSHdRUl9TZm5DUnp3b3I1dzNZZk5yY2lkbnh4TV9XcGpsbGRlTDVQRmI5WjM5NEhGVGFValVSM2dvU2gxRWNUanFpc2stUTBwT1ZjU0hHSmxlS0ZvaFRTanZEMDlnYlc5am9SM2staUVGSTZrRm13U0hkQVE4czNNR05FcG84UUVOd0NTRFctTXZ2bWw5OU1xRENBUHR0MkVoZnI3cTlaQnRadEQzTjFnVVNQa1JLa0RrMjlCUzFvSkdZOFI4R3ZyenVjVGRSZTlfbmE5SmJnRV9JTzV4dk5KSUFXS0dDWlF3ZFdZSF9tVzlUc3NFZHZpWFM1S0ZTdGFiSXZpcVNQd3AtdmNkeGRZV1BVOWlrUnZadHVrPVwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqRml4aW5nIHNldF9kZXNjcmlwdGlvbiB1c2FnZSBhbmQgcmVtb3ZpbmcgdW51c2VkIGltcG9ydHMqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfTXhhSHBFdVZTbkROQ2NKQ0lGbWFJR1lXfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjM2NkNGYzNDgxOTFiNjc1NWI0OGZkZTQyZGNhIiwibmFtZSI6ImVkaXQiLCJhcmd1bWVudHMiOnsicGF0aCI6InNyYy9tYWluLnJzIiwiZWRpdHMiOlt7Im9sZFRleHQiOiJ1c2UgZ3RrOjp7Z2lvLCBnbGlifTsiLCJuZXdUZXh0IjoidXNlIGd0azo6Z2xpYjsifSx7Im9sZFRleHQiOiIgICAgcGFnZS5zZXRfZGVzY3JpcHRpb24oU29tZShcbiAgICAgICAgXCJQcmVwYXJlIGFuIEFMVCBMaW51eCByb290IGZpbGVzeXN0ZW0gb3IgZGlzayBpbWFnZSBmb3IgeW91ciBib2FyZC5cIixcbiAgICApKTsiLCJuZXdUZXh0IjoiICAgIHBhZ2Uuc2V0X2Rlc2NyaXB0aW9uKFxuICAgICAgICBcIlByZXBhcmUgYW4gQUxUIExpbnV4IHJvb3QgZmlsZXN5c3RlbSBvciBkaXNrIGltYWdlIGZvciB5b3VyIGJvYXJkLlwiLFxuICAgICk7In0seyJvbGRUZXh0IjoiICAgICAgICAgICAgbGV0IGRlc3RpbmF0aW9uID0gaWYgc3RhdGUub3V0cHV0X2lzX2ZpbGUge1xuICAgICAgICAgICAgICAgIHN0YXRlLm91dHB1dF9maWxlLmFzX2RlcmVmKCkudW53cmFwX29yKFwiTm8gb3V0cHV0IGZpbGVcIilcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHJpdmVfbW9kZWxcbiAgICAgICAgICAgICAgICAgICAgLnN0cmluZyhkcml2ZV9yb3cuc2VsZWN0ZWQoKSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcCh8c3wgcy50b19zdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgLnVud3JhcF9vcl9lbHNlKHx8IFwiTm8gZHJpdmVcIi5pbnRvKCkpXG4gICAgICAgICAgICAgICAgICAgIC5sZWFrKClcbiAgICAgICAgICAgIH07IiwibmV3VGV4dCI6IiAgICAgICAgICAgIGxldCBkZXN0aW5hdGlvbiA9IGlmIHN0YXRlLm91dHB1dF9pc19maWxlIHtcbiAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICAgICAgICAub3V0cHV0X2ZpbGVcbiAgICAgICAgICAgICAgICAgICAgLmNsb25lKClcbiAgICAgICAgICAgICAgICAgICAgLnVud3JhcF9vcl9lbHNlKHx8IFwiTm8gb3V0cHV0IGZpbGVcIi5pbnRvKCkpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRyaXZlX21vZGVsXG4gICAgICAgICAgICAgICAgICAgIC5zdHJpbmcoZHJpdmVfcm93LnNlbGVjdGVkKCkpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAofHN8IHMudG9fc3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgICAgIC51bndyYXBfb3JfZWxzZSh8fCBcIk5vIGRyaXZlXCIuaW50bygpKVxuICAgICAgICAgICAgfTsifV19fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MjA4OSwib3V0cHV0Ijo0NTgsImNhY2hlUmVhZCI6MjUwODgsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MTcxLCJ0b3RhbFRva2VucyI6Mjc2MzUsImNvc3QiOnsiaW5wdXQiOjAuMDEwNDQ1MDAwMDAwMDAwMDAxLCJvdXRwdXQiOjAuMDEzNzQsImNhY2hlUmVhZCI6MC4wMTI1NDQsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAzNjcyOX19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4ODYxMjMxMiwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzYzRhYmJjODE5MWFjNTVlZDZmMjAxZWM4NGYifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiY2M4ZDBmNzgiLCJwYXJlbnRJZCI6ImI2MzliYTA1IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMDoyNS41NjFaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX014YUhwRXVWU25ETkNjSkNJRm1hSUdZV3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNjZDRmMzQ4MTkxYjY3NTViNDhmZGU0MmRjYSIsInRvb2xOYW1lIjoiZWRpdCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IlN1Y2Nlc3NmdWxseSByZXBsYWNlZCAzIGJsb2NrKHMpIGluIHNyYy9tYWluLnJzLiJ9XSwiZGV0YWlscyI6eyJkaWZmIjoiICAgMSB1c2UgYWR3OjpwcmVsdWRlOjoqO1xuLSAgMiB1c2UgZ3RrOjp7Z2lvLCBnbGlifTtcbisgIDIgdXNlIGd0azo6Z2xpYjtcbiAgIDMgdXNlIHN0ZDo6e2NlbGw6OlJlZkNlbGwsIGZzLCBwYXRoOjpQYXRoLCByYzo6UmN9O1xuICAgNCBcbiAgIDUgY29uc3QgQVBQX0lEOiAmc3RyID0gXCJvcmcuYWx0bGludXguRmxhc2hlclwiO1xuICAgNiBjb25zdCBCT0FSRFM6ICZzdHIgPSBpbmNsdWRlX3N0ciEoXCIuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9TVVBQT1JURUQtQk9BUkRTXCIpO1xuICAgICAuLi5cbiAgNDIgICAgIHRvb2xiYXJfdmlldy5hZGRfdG9wX2JhcigmaGVhZGVyKTtcbiAgNDMgXG4gIDQ0ICAgICBsZXQgcGFnZSA9IGFkdzo6UHJlZmVyZW5jZXNQYWdlOjpuZXcoKTtcbiAgNDUgICAgIHBhZ2Uuc2V0X3RpdGxlKFwiQ3JlYXRlIEluc3RhbGxhdGlvbiBNZWRpYVwiKTtcbi0gNDYgICAgIHBhZ2Uuc2V0X2Rlc2NyaXB0aW9uKFNvbWUoXG4rIDQ2ICAgICBwYWdlLnNldF9kZXNjcmlwdGlvbihcbiAgNDcgICAgICAgICBcIlByZXBhcmUgYW4gQUxUIExpbnV4IHJvb3QgZmlsZXN5c3RlbSBvciBkaXNrIGltYWdlIGZvciB5b3VyIGJvYXJkLlwiLFxuLSA0OCAgICAgKSk7XG4rIDQ4ICAgICApO1xuICA0OSAgICAgdG9vbGJhcl92aWV3LnNldF9jb250ZW50KFNvbWUoJnBhZ2UpKTtcbiAgNTAgXG4gIDUxICAgICAvLyBTb3VyY2VcbiAgNTIgICAgIGxldCBzb3VyY2VfZ3JvdXAgPSBhZHc6OlByZWZlcmVuY2VzR3JvdXA6OmJ1aWxkZXIoKVxuICAgICAuLi5cbiAzODMgICAgICAgICAgICAgICAgIC5nZXQoYm9hcmRfcm93LnNlbGVjdGVkKCkgYXMgdXNpemUpXG4gMzg0ICAgICAgICAgICAgICAgICAubWFwKFN0cmluZzo6YXNfc3RyKVxuIDM4NSAgICAgICAgICAgICAgICAgLnVud3JhcF9vcihcIlVua25vd24gYm9hcmRcIik7XG4gMzg2ICAgICAgICAgICAgIGxldCBkZXN0aW5hdGlvbiA9IGlmIHN0YXRlLm91dHB1dF9pc19maWxlIHtcbi0zODcgICAgICAgICAgICAgICAgIHN0YXRlLm91dHB1dF9maWxlLmFzX2RlcmVmKCkudW53cmFwX29yKFwiTm8gb3V0cHV0IGZpbGVcIilcbiszODcgICAgICAgICAgICAgICAgIHN0YXRlXG4rMzg4ICAgICAgICAgICAgICAgICAgICAgLm91dHB1dF9maWxlXG4rMzg5ICAgICAgICAgICAgICAgICAgICAgLmNsb25lKClcbiszOTAgICAgICAgICAgICAgICAgICAgICAudW53cmFwX29yX2Vsc2UofHwgXCJObyBvdXRwdXQgZmlsZVwiLmludG8oKSlcbiAzODggICAgICAgICAgICAgfSBlbHNlIHtcbiAzODkgICAgICAgICAgICAgICAgIGRyaXZlX21vZGVsXG4gMzkwICAgICAgICAgICAgICAgICAgICAgLnN0cmluZyhkcml2ZV9yb3cuc2VsZWN0ZWQoKSlcbiAzOTEgICAgICAgICAgICAgICAgICAgICAubWFwKHxzfCBzLnRvX3N0cmluZygpKVxuIDM5MiAgICAgICAgICAgICAgICAgICAgIC51bndyYXBfb3JfZWxzZSh8fCBcIk5vIGRyaXZlXCIuaW50bygpKVxuLTM5MyAgICAgICAgICAgICAgICAgICAgIC5sZWFrKClcbiAzOTQgICAgICAgICAgICAgfTtcbiAzOTUgICAgICAgICAgICAgbGV0IGRpYWxvZyA9IGFkdzo6QWxlcnREaWFsb2c6OmJ1aWxkZXIoKVxuIDM5NiAgICAgICAgICAgICAgICAgLmhlYWRpbmcoXCJSZWFkeSB0byB3cml0ZT9cIilcbiAzOTcgICAgICAgICAgICAgICAgIC5ib2R5KGZvcm1hdCEoXG4gICAgIC4uLiIsInBhdGNoIjoiLS0tIHNyYy9tYWluLnJzXG4rKysgc3JjL21haW4ucnNcbkBAIC0xLDYgKzEsNiBAQFxuIHVzZSBhZHc6OnByZWx1ZGU6Oio7XG4tdXNlIGd0azo6e2dpbywgZ2xpYn07XG4rdXNlIGd0azo6Z2xpYjtcbiB1c2Ugc3RkOjp7Y2VsbDo6UmVmQ2VsbCwgZnMsIHBhdGg6OlBhdGgsIHJjOjpSY307XG4gXG4gY29uc3QgQVBQX0lEOiAmc3RyID0gXCJvcmcuYWx0bGludXguRmxhc2hlclwiO1xuIGNvbnN0IEJPQVJEUzogJnN0ciA9IGluY2x1ZGVfc3RyIShcIi4uL2FsdC1yb290ZnMtaW5zdGFsbGVyL1NVUFBPUlRFRC1CT0FSRFNcIik7XG5AQCAtNDIsMTEgKzQyLDExIEBAXG4gICAgIHRvb2xiYXJfdmlldy5hZGRfdG9wX2JhcigmaGVhZGVyKTtcbiBcbiAgICAgbGV0IHBhZ2UgPSBhZHc6OlByZWZlcmVuY2VzUGFnZTo6bmV3KCk7XG4gICAgIHBhZ2Uuc2V0X3RpdGxlKFwiQ3JlYXRlIEluc3RhbGxhdGlvbiBNZWRpYVwiKTtcbi0gICAgcGFnZS5zZXRfZGVzY3JpcHRpb24oU29tZShcbisgICAgcGFnZS5zZXRfZGVzY3JpcHRpb24oXG4gICAgICAgICBcIlByZXBhcmUgYW4gQUxUIExpbnV4IHJvb3QgZmlsZXN5c3RlbSBvciBkaXNrIGltYWdlIGZvciB5b3VyIGJvYXJkLlwiLFxuLSAgICApKTtcbisgICAgKTtcbiAgICAgdG9vbGJhcl92aWV3LnNldF9jb250ZW50KFNvbWUoJnBhZ2UpKTtcbiBcbiAgICAgLy8gU291cmNlXG4gICAgIGxldCBzb3VyY2VfZ3JvdXAgPSBhZHc6OlByZWZlcmVuY2VzR3JvdXA6OmJ1aWxkZXIoKVxuQEAgLTM4MywxNSArMzgzLDE3IEBAXG4gICAgICAgICAgICAgICAgIC5nZXQoYm9hcmRfcm93LnNlbGVjdGVkKCkgYXMgdXNpemUpXG4gICAgICAgICAgICAgICAgIC5tYXAoU3RyaW5nOjphc19zdHIpXG4gICAgICAgICAgICAgICAgIC51bndyYXBfb3IoXCJVbmtub3duIGJvYXJkXCIpO1xuICAgICAgICAgICAgIGxldCBkZXN0aW5hdGlvbiA9IGlmIHN0YXRlLm91dHB1dF9pc19maWxlIHtcbi0gICAgICAgICAgICAgICAgc3RhdGUub3V0cHV0X2ZpbGUuYXNfZGVyZWYoKS51bndyYXBfb3IoXCJObyBvdXRwdXQgZmlsZVwiKVxuKyAgICAgICAgICAgICAgICBzdGF0ZVxuKyAgICAgICAgICAgICAgICAgICAgLm91dHB1dF9maWxlXG4rICAgICAgICAgICAgICAgICAgICAuY2xvbmUoKVxuKyAgICAgICAgICAgICAgICAgICAgLnVud3JhcF9vcl9lbHNlKHx8IFwiTm8gb3V0cHV0IGZpbGVcIi5pbnRvKCkpXG4gICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgZHJpdmVfbW9kZWxcbiAgICAgICAgICAgICAgICAgICAgIC5zdHJpbmcoZHJpdmVfcm93LnNlbGVjdGVkKCkpXG4gICAgICAgICAgICAgICAgICAgICAubWFwKHxzfCBzLnRvX3N0cmluZygpKVxuICAgICAgICAgICAgICAgICAgICAgLnVud3JhcF9vcl9lbHNlKHx8IFwiTm8gZHJpdmVcIi5pbnRvKCkpXG4tICAgICAgICAgICAgICAgICAgICAubGVhaygpXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICBsZXQgZGlhbG9nID0gYWR3OjpBbGVydERpYWxvZzo6YnVpbGRlcigpXG4gICAgICAgICAgICAgICAgIC5oZWFkaW5nKFwiUmVhZHkgdG8gd3JpdGU/XCIpXG4gICAgICAgICAgICAgICAgIC5ib2R5KGZvcm1hdCEoXG4iLCJmaXJzdENoYW5nZWRMaW5lIjoyfSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4ODYyNTU2MX19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjBlMGI5NmM5IiwicGFyZW50SWQiOiJjYzhkMGY3OCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MTA6MzQuOTE2WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipQbGFubmluZyBjb21waWxlLXRpbWUgdHlwZSBjaGVja2luZyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzZDgzOGRjODE5MTk1M2FlMzI0ZmUwYmRjNTJcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1QYTZTS3M5WnNEcnZPVHp2dmdBTUY2cmZKMXdKSmxTSUxneEhVTG1hbTFDeUxhbFRneDhMMVpXVkdLZ3pyNUhtNWUwVUh3RlZnVm53RXV3YnJ6c1ZLaXJXY3UwQ1B4WEVta0lvM2NydDd2VTVkRnRWdWZLc2hKblRzNWZPNzhjSFRpVDFCMDJuZlZibk9DbGRlVEcyNllQUjUwNW5tMHZGMlBHdUZxS0h4LUNsQTQzT205UDF6NmpMdlFST0NnTGQxdzA3ZldETjN6eG92akRrb29INUc0OUs4QlZTODRJV29nYzdaZldRcFkzeVliVXY4di1nNTN2LXM1cjdwTG1rcUxWRWFRYXFGcDR6NkgzeThDT3dqcjBlUS04aDlvQ2IteC1DWGVzQzlic1RnamVCQWtMZFJlb0l3Q0hCQ0M3eFZvU0ZwSW5Ca3p2N1p0WEJ6X0tmRkRvUlZmdmhhVV9Da1pwRFVRUVJiWC1CVlluU3ctQkhCOHJrM25aeWtBU3NTOVg2cFVnQXpmS01USXc4QWMtOWJ1U2ZWaVF4TWlOQ2lEMUhVa1hjYU1Vbnd5WktyRm1IdmNDUlJYTVRkRnlObUgxVGRhelBoR1F0aGJhc0U3ZzFJYnpUTUJxTUZkUXltaWF0UlVfNUc5c0JUTVZYVGg4WGRKVXB2bWFwc0ZTZUdDVnpZQmc3QW5jT2NCb0NfNW5OcUdVdzVqOHBXTGxTVDhET1RPdFE4QVJ5TUJ3bm51c1VfMW1OaUo2Q2tCSi01cVRITTZfQ3ZJZWJpU2hPVllkcE9DVTM3WkFHakM2ZG1KQ25KX2dER0p2Y0dQRnMtVWFnZHBOZ1JtSVczWVNocWs3OExSSlZhY0dLR1ZVUzZTZFpSQl81ZlhtdEY2S09KYnhJUHpQUEZkenpmTEphLVRDMWxkMV9naHFzR0c5MFJRWmhzNVU3b24ydXdjSlgyYmFuV1V1ekVual9SUlJHTEQzYVNCN2JTV2lRQ092YVZmUU5VbkNjOS1OMnF3NUZjRFV0cEF5VVpuRElHVVNMME05ZEdocDBzc3JhMmxVb1VLZ3ZxZnBjY3RCRWFaRDZZNnRneFpHdlhpalNydll5aWd3aFFIZ2dQcURIRGhNcmFWTW83N1ltTk1VbFNPc053MmhBRGo5LXNFeDA4b1dvVGtjSm85eFhiRmVsZEp4Qm1iYlhQbnQxX3JYRmdLcVlpNm1jTXdCQ3RldWtkU2dQdENUZm4wSDhsV19UdnpmX0p6dlBLb25hRXYxMDNuNnhSZERrbFNfRG56LXhSbUF6TDRWeEd5dGxDNWlqX0x4bGc3Mk5BMWNmWGhRV0U3c0J3THJMZWV2RlZVRkJNRmNJcm5PbkFSMWtkd2w5TTVHTEUtZFktVVZtRVlaRUJmVGpGQ183NTFTZFYyY2NOX1Bnajh1eVo4NkZDWHZROThZWVp5YmkzeUFQMmN3dzE2QjZfWmduTS0wcExzVTJqcDlCZnlud2ZldDZsa3ZsdWJDWGJac3FLSzVxclhscWZOaEpzeDFJeHhuR0tLZU1NcnlOM0wzTXlLWUxMUDVLV3BZbDZQRjBVRkRhek9SR009XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipQbGFubmluZyBjb21waWxlLXRpbWUgdHlwZSBjaGVja2luZyoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF8xemgwN2tNNkJaNG5IY3J1VTM1YkxQb1B8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzZGE0ZWRjODE5MTlmNDY0NzYzZTgzZWUyYmQiLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9saWJhZHdhaXRhLXN5cy0wLjguMS9idWlsZC5ycyIsImxpbWl0Ijo4MH19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoxNTQ1LCJvdXRwdXQiOjExMCwiY2FjaGVSZWFkIjoyNjExMiwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjo0NSwidG90YWxUb2tlbnMiOjI3NzY3LCJjb3N0Ijp7ImlucHV0IjowLjAwNzcyNTAwMDAwMDAwMDAwMSwib3V0cHV0IjowLjAwMzMsImNhY2hlUmVhZCI6MC4wMTMwNTYsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAyNDA4MDk5OTk5OTk5OTk5OH19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4ODYyNTU2MiwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzZDIwNjk4ODE5MWJmY2E0MjM1NWU3NGQ3M2UifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZDNlMzIxMzUiLCJwYXJlbnRJZCI6IjBlMGI5NmM5IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMDozNC45MTlaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsXzF6aDA3a002Qlo0bkhjcnVVMzViTFBvUHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNkYTRlZGM4MTkxOWY0NjQ3NjNlODNlZTJiZCIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii8vIEdlbmVyYXRlZCBieSBnaXIgKGh0dHBzOi8vZ2l0aHViLmNvbS9ndGstcnMvZ2lyIEAgYjNkNDQ0YTA1OGNmKVxuLy8gZnJvbVxuLy8gZnJvbSBnaXItZmlsZXMgKGh0dHBzOi8vZ2l0aHViLmNvbS9ndGstcnMvZ2lyLWZpbGVzLmdpdCBAIDVjMWU0OTBmZTUwYSlcbi8vIERPIE5PVCBFRElUXG5cbiNbY2ZnKG5vdChkb2NzcnMpKV1cbnVzZSBzdGQ6OnByb2Nlc3M7XG5cbiNbY2ZnKGRvY3NycyldXG5mbiBtYWluKCkge30gLy8gcHJldmVudCBsaW5raW5nIGxpYnJhcmllcyB0byBhdm9pZCBkb2N1bWVudGF0aW9uIGZhaWx1cmVcblxuI1tjZmcobm90KGRvY3NycykpXVxuZm4gbWFpbigpIHtcbiAgICBpZiBsZXQgRXJyKHMpID0gc3lzdGVtX2RlcHM6OkNvbmZpZzo6bmV3KCkucHJvYmUoKSB7XG4gICAgICAgIHByaW50bG4hKFwiY2FyZ286d2FybmluZz17c31cIik7XG4gICAgICAgIHByb2Nlc3M6OmV4aXQoMSk7XG4gICAgfVxufVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg4NjM0OTE5fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNjQ5N2UwMzIiLCJwYXJlbnRJZCI6ImQzZTMyMTM1IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMDozNy44MzhaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkNoZWNraW5nIGNyYXRlIGZlYXR1cmUgZmxhZ3MqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjM2RjYmNhMDgxOTE4MGQ4ZDFmY2EzNTIzMDQ1XCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNUGRlc3FRbW84Q18tN1EtVEhWVkhCV2VmN3BDYXcwb2JGZWg1d0I5MTQweFpPLUNzbk1hTmJIbEp2dGhOTUttODdHNU1NWHNSQTVFZ3ZYa2Vxa2tQcDVhRExGeWZsQ29ZSzREeHRWbGswUmwtZjJjazNtaWdDY1pUVFlJeDU4RVFpRFp4akNQcEVlR0xTZXJCaXRCNUhnek15bXlhdVRaTFR3cE1kdmpjNVBZNzdwc213bmlpUFJPN2lYZlVXOV9HMXpQMktwcWJFOTk3SXQ3MlNRdWdXN3NNOHpaeTBMeUdmMnZJcHVLc1FBdzBMS0JlVGRpN1I5cmR5VUNjQ2pGamViUnUyd0xyTTZONlY1b3JXNnRXVWw4VzNmai1uaVVGUjZ4UWFwenR0X1FBYVg0VG5OVGk4bEtKcDdVclpWLTFEcHYyV0RueXNqOWJ0T0FqY283Zmd5eWd5bnQ3ZXU5aDhPUU1TeXdpbXBEZFlGX3NQOWs4QzhVc3hocWpaMTE0eEZfWDRFejBfYVZNUmpPVjN5djhmYkNwdzQ4eFRzdDNveDBwdWo5Ukw1b08tZ2FzeTIwU2luQ04zaVI4UXZkaWZ0TC1UVVByRFlRVzRxU19zaW9VY2pPY2wzcEVwOG1CeHVFeDQ5SWNwdjNTd2pUU2c4eUtIUDIxNXhpWkdTRzV1MHhWeE1PZDk2SGhWcFpDOFc1Q0VsMl9UWms3STJhVjF5TlRBbllLMGZZWU9pOWZ0N1J4eTNKSTZNUWRqckpIX0ZEcUlVakI3R2NrTzl6T0t6U2tWLWpIVXVRWjg4QlcyeEx0SVB5Szg3ekRuR0c1aFl1RjU5cDd5aVVOMTVBQkVTQkFLc1daaXBZYVZ1UW5jZkhXalNib0FGNUpVRXVlTkhfX1BNVWJQX2hUWVpkZ2hTeC05UXE2N2J5cjF5YjRfRFRDN3FWYjlLcHVxdzA4Rkt6WXVKbHZNbE1kamJnc0pSUDFDTkpJckVVY1NxakZaRkVwMFQySHp0TmMzQ3VTY09Ga1M2S3RGVU1tRUNzcHJzNWRXdUduZEN1ei04eDZ1bGtJWlpEQ1c5LWFFb0xqWGhhU1lQNGNjSFBrZXVQYUZ2VDhLVWFNbGpDSXRnMnZ5dHBVeGRJdmRFaVhLNTR1WkpHLU9zbnNUMC1nOXBFcGxHQ25faHJtbnQySFlJTGpTWDVmQU92VUhDeW56T0szWGY4ZEFUY1cwODJBM2VRTjFpVEJoeHpfckpQcDJuVlYzVkgyZEprX3RqS2pROVJCSm5Rb1F2UmRIVGJ5YkxmTHN5NldYYjZQMzZKTzZwb3RGRHBLemtHZmhtM011Q1dYTFlna0hzYzh3TlF1VDhfSjZjXCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipDaGVja2luZyBjcmF0ZSBmZWF0dXJlIGZsYWdzKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX2FGRE9tUmRCcDRIYTV1VkxqNlBBa3pIa3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNkZDlkZTg4MTkxYTBhZTVhODIyZDJmODU1NyIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJSVVNURkxBR1M9Jy0tY2ZnIGRvY3NycycgY2FyZ28gY2hlY2siLCJ0aW1lb3V0IjoxMjB9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6Nzc4LCJvdXRwdXQiOjU2LCJjYWNoZVJlYWQiOjI3MTM2LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjIyLCJ0b3RhbFRva2VucyI6Mjc5NzAsImNvc3QiOnsiaW5wdXQiOjAuMDAzODkwMDAwMDAwMDAwMDAwMiwib3V0cHV0IjowLjAwMTY4LCJjYWNoZVJlYWQiOjAuMDEzNTY4LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wMTkxMzgwMDAwMDAwMDAwMDJ9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODg2MzQ5MjAsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjM2RiM2NlMDgxOTE5ZDY2ZDRkZDQ0N2Q4MDk5In19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6Ijg2MDM2MDY0IiwicGFyZW50SWQiOiI2NDk3ZTAzMiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MTA6MzguNzc2WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9hRkRPbVJkQnA0SGE1dVZMajZQQWt6SGt8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzZGQ5ZGU4ODE5MWEwYWU1YTgyMmQyZjg1NTciLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIgICBDb21waWxpbmcgd2lubm93IHYxLjAuNFxuICAgQ29tcGlsaW5nIHRvbWxfZGF0ZXRpbWUgdjEuMS4xK3NwZWMtMS4xLjBcbiAgIENvbXBpbGluZyB0YXJnZXQtbGV4aWNvbiB2MC4xMy41XG4gICBDb21waWxpbmcgaGVjayB2MC41LjBcbiAgIENvbXBpbGluZyBzbWFsbHZlYyB2MS4xNS4yXG4gICBDb21waWxpbmcgc2VyZGVfc3Bhbm5lZCB2MS4xLjFcbiAgIENvbXBpbGluZyB2ZXJzaW9uLWNvbXBhcmUgdjAuMi4xXG4gICBDb21waWxpbmcgcGtnLWNvbmZpZyB2MC4zLjMzXG4gICBDb21waWxpbmcgbGliYyB2MC4yLjE4OVxuICAgQ29tcGlsaW5nIHByb2MtbWFjcm8yIHYxLjAuMTA3XG4gICBDb21waWxpbmcgcXVvdGUgdjEuMC40N1xuICAgQ29tcGlsaW5nIHVuaWNvZGUtaWRlbnQgdjEuMC4yNFxuICAgQ29tcGlsaW5nIGhhc2hicm93biB2MC4xNy4xXG4gICBDb21waWxpbmcgZXF1aXZhbGVudCB2MS4wLjJcbiAgICBDaGVja2luZyBmdXR1cmVzLWNvcmUgdjAuMy4zM1xuICAgIENoZWNraW5nIHBpbi1wcm9qZWN0LWxpdGUgdjAuMi4xN1xuZXJyb3JbRTA1NTRdOiBgIyFbZmVhdHVyZV1gIG1heSBub3QgYmUgdXNlZCBvbiB0aGUgc3RhYmxlIHJlbGVhc2UgY2hhbm5lbFxuIC0tPiAvaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3RvbWxfZGF0ZXRpbWUtMS4xLjErc3BlYy0xLjEuMC9zcmMvbGliLnJzOjU6MjFcbiAgfFxuNSB8ICMhW2NmZ19hdHRyKGRvY3NycywgZmVhdHVyZShkb2NfY2ZnKSldXG4gIHwgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXl5eXG5cbmVycm9yW0UwNTU0XTogYCMhW2ZlYXR1cmVdYCBtYXkgbm90IGJlIHVzZWQgb24gdGhlIHN0YWJsZSByZWxlYXNlIGNoYW5uZWxcbiAtLT4gL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9zZXJkZV9zcGFubmVkLTEuMS4xL3NyYy9saWIucnM6ODoyMVxuICB8XG44IHwgIyFbY2ZnX2F0dHIoZG9jc3JzLCBmZWF0dXJlKGRvY19jZmcpKV1cbiAgfCAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5cblxuZXJyb3JbRTA1NTRdOiBgIyFbZmVhdHVyZV1gIG1heSBub3QgYmUgdXNlZCBvbiB0aGUgc3RhYmxlIHJlbGVhc2UgY2hhbm5lbFxuICAtLT4gL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9zbWFsbHZlYy0xLjE1LjIvc3JjL2xpYi5yczo5MzoyMVxuICAgfFxuOTMgfCAjIVtjZmdfYXR0cihkb2NzcnMsIGZlYXR1cmUoZG9jX2NmZykpXVxuICAgfCAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5cblxuICAgIENoZWNraW5nIGZ1dHVyZXMtdGFzayB2MC4zLjMzXG4gICAgQ2hlY2tpbmcgc2xhYiB2MC40LjEyXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGVycm9yLCB0cnkgYHJ1c3RjIC0tZXhwbGFpbiBFMDU1NGAuXG5lcnJvcjogY291bGQgbm90IGNvbXBpbGUgYHNlcmRlX3NwYW5uZWRgIChsaWIpIGR1ZSB0byAxIHByZXZpb3VzIGVycm9yXG53YXJuaW5nOiBidWlsZCBmYWlsZWQsIHdhaXRpbmcgZm9yIG90aGVyIGpvYnMgdG8gZmluaXNoLi4uXG5lcnJvcltFMDU1NF06IGAjIVtmZWF0dXJlXWAgbWF5IG5vdCBiZSB1c2VkIG9uIHRoZSBzdGFibGUgcmVsZWFzZSBjaGFubmVsXG4gIC0tPiAvaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3dpbm5vdy0xLjAuNC9zcmMvbGliLnJzOjQ5OjIxXG4gICB8XG40OSB8ICMhW2NmZ19hdHRyKGRvY3NycywgZmVhdHVyZShkb2NfY2ZnKSldXG4gICB8ICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXlxuICAgfFxuICAgPSBoZWxwOiB0aGUgZmVhdHVyZSBgZXh0ZW5kZWRfa2V5X3ZhbHVlX2F0dHJpYnV0ZXNgIGhhcyBiZWVuIHN0YWJsZSBzaW5jZSBgMS41NC4wYCBhbmQgbm8gbG9uZ2VyIHJlcXVpcmVzIGFuIGF0dHJpYnV0ZSB0byBlbmFibGVcblxuZXJyb3I6IGNvdWxkIG5vdCBjb21waWxlIGB0b21sX2RhdGV0aW1lYCAobGliKSBkdWUgdG8gMSBwcmV2aW91cyBlcnJvclxuZXJyb3I6IGNvdWxkIG5vdCBjb21waWxlIGBzbWFsbHZlY2AgKGxpYikgZHVlIHRvIDEgcHJldmlvdXMgZXJyb3JcbmVycm9yOiBjb3VsZCBub3QgY29tcGlsZSBgd2lubm93YCAobGliKSBkdWUgdG8gMSBwcmV2aW91cyBlcnJvclxuXG5cbkNvbW1hbmQgZXhpdGVkIHdpdGggY29kZSAxMDEifV0sImRldGFpbHMiOnt9LCJpc0Vycm9yIjp0cnVlLCJ0aW1lc3RhbXAiOjE3ODQ5ODg2Mzg3NzZ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI1MTU2ZDM4ZSIsInBhcmVudElkIjoiODYwMzYwNjQiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjEwOjQzLjA2MloiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjM2UxZTA1YzgxOTFhOGY4ZTQyZDNmMjk2ODU1XCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNUGlrSGMzN0s4ZW1XX3BsWVFDQW8wUEtoamtJOW1Ic0xVZ1BNVjdHblNyOTdsWnVOT2VSdUJOdl9WMDhlZEtPWnJ6YlpEd0FBVThtemVBcldfLTkzTlhadWlDdFJnUDhMUUdwVE9COGQxNnRqMV9xM3d5VlJyaWlLQWd4VGdSRFg5blN0QWFxY3ZNSVhZeW5ld18wQnhiMFhNSDZvdjR5QU5YQXNWTFF0dzhqbm4yZ05SbjRVYUstb01rd01GM1ZYVkJ4Sm0yLV92MXVDbnZJUEFrakZYTDRRZUxtWlN1YTBQaElvVmJweUpwZVprQXA1ZksyVU84aW02c3F3ekhGTVVWLUgtWDdaNlpreGFLWmlWTnZTY3BubkRHQ2MxRGtNUXNhWEhWaFl6RF9QRjROMG9GRTA3OWVXUmRraFUyaVkzdTlPRHpQNWJ2aVZsWElBdHpDdm45QnhpRU52MTAzRGJGNkpVTi1zMURRaUhfUU1OQ25BV2hTYVFPR2dOUzhHejNVU3dGMDBsYno4b0owQXQxYkZWamtuS3gzaFNsbl94TkVWT1NyZjYwa2NodF9xRkpkazhEWmx2a1B5OVJReUhTOW1IUE9tNE9JN2NWWHB6RTJFVEFXOTlrQVBRQ01zYU5nUVhxUkxiYXVKT3hZMTc0X2VqaEdWUl9aUXZYMUUxZDVqdGJJUEN4ZlBYTWhTa0ZpdHRfTlF3dF9KWkF0QmpIbHV6bjVKSEU2SUxRcFBuX09rOFBsX0V2ZThLajM3a25hdnd0UkNuQXoxTVh2enQ2SmdudFFWRGdYSFZXem8xZ0lkWHlYX2JmYnhQZWFQdkRIYzdTOEFwYUNjS21rUnBmSmdjdkNtM1ctR3g2S1lvS2Z0MmZlQkk3bmxFTXRHT3d4UEVGbnVpQXFhbGxTUklKX2JtZGxmMUJKZDJiQjNZcHVYLW44czlqelZNUE1CU215Z2xKTlRNczhvT1dTOGI1aGE5M08xdTAxamlCUjVBWmYwZ3haR2doaEFaOEpqQ1hKUDN2Yy1UUnd6VTBseEo1YXZOZGY5eF9KTGxEYVpPQncyRTRISFY0ZXFrV0ZZQ2VYN3VhZDBrckhOSVE1ZUxxQ01GSzAxZTV2QmRHUUZjUlFJbVlNUmRGSUtpNXBvREFjWEZ3S25DZmJXWVVPLVNTS1AtdzNqWE5LOFJ0TGY1RnphN0ZyNjV0NXRIRlZGQVNBb0FQTmNVLTdpNnlQQjFpSlhEQ251RE9oSFJhZ25XMVZPYlR3MnQzaUl3SkNQQzlcIixcInN1bW1hcnlcIjpbXX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9wY0E0NlFycVVQWXB4VzhvUENnNk5ueTl8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzZTJkNzE4ODE5MTgwNjY3Zjc4YzZmNjExNWMiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiUlVTVENfQk9PVFNUUkFQPTEgUlVTVEZMQUdTPSctLWNmZyBkb2NzcnMnIGNhcmdvIGNoZWNrIiwidGltZW91dCI6MTIwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjE1OTksIm91dHB1dCI6NTUsImNhY2hlUmVhZCI6MjcxMzYsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MTMsInRvdGFsVG9rZW5zIjoyODc5MCwiY29zdCI6eyJpbnB1dCI6MC4wMDc5OTUsIm91dHB1dCI6MC4wMDE2NSwiY2FjaGVSZWFkIjowLjAxMzU2OCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDIzMjEzfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg4NjM4Nzc3LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNkZjE5MzQ4MTkxYjRmOWRlNDg2NjUzNDNkYSJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIzOGUyODJkZiIsInBhcmVudElkIjoiNTE1NmQzOGUiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjEwOjQ1LjgxM1oiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfcGNBNDZRcnFVUFlweFc4b1BDZzZObnk5fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjM2UyZDcxODgxOTE4MDY2N2Y3OGM2ZjYxMTVjIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiICAgQ29tcGlsaW5nIHdpbm5vdyB2MS4wLjRcbiAgIENvbXBpbGluZyB0b21sX2RhdGV0aW1lIHYxLjEuMStzcGVjLTEuMS4wXG4gICBDb21waWxpbmcgc21hbGx2ZWMgdjEuMTUuMlxuICAgQ29tcGlsaW5nIHNlcmRlX3NwYW5uZWQgdjEuMS4xXG4gICBDb21waWxpbmcgdGFyZ2V0LWxleGljb24gdjAuMTMuNVxuICAgQ29tcGlsaW5nIGxpYmMgdjAuMi4xODlcbiAgIENvbXBpbGluZyBwcm9jLW1hY3JvMiB2MS4wLjEwN1xuICAgQ29tcGlsaW5nIHF1b3RlIHYxLjAuNDdcbiAgIENvbXBpbGluZyBpbmRleG1hcCB2Mi4xNC4wXG4gICAgQ2hlY2tpbmcgZnV0dXJlcy1jaGFubmVsIHYwLjMuMzNcbiAgICBDaGVja2luZyBtZW1jaHIgdjIuOC4zXG4gICAgQ2hlY2tpbmcgYml0ZmxhZ3MgdjIuMTMuMVxuICAgIENoZWNraW5nIGZ1dHVyZXMtaW8gdjAuMy4zM1xuICAgQ29tcGlsaW5nIHNlbXZlciB2MS4wLjI4XG4gICBDb21waWxpbmcgYXV0b2NmZyB2MS41LjFcbiAgIENvbXBpbGluZyBydXN0Y192ZXJzaW9uIHYwLjQuMVxuICAgQ29tcGlsaW5nIGNmZy1leHByIHYwLjIwLjhcbiAgIENvbXBpbGluZyBtZW1vZmZzZXQgdjAuOS4xXG4gICBDb21waWxpbmcgZmllbGQtb2Zmc2V0IHYwLjMuNlxuICAgQ29tcGlsaW5nIHN5biB2Mi4wLjExOVxuICAgQ29tcGlsaW5nIHRvbWxfcGFyc2VyIHYxLjEuMitzcGVjLTEuMS4wXG4gICBDb21waWxpbmcgdG9tbCB2MS4xLjMrc3BlYy0xLjEuMFxuICAgQ29tcGlsaW5nIHRvbWxfZWRpdCB2MC4yNS4xMytzcGVjLTEuMS4wXG4gICBDb21waWxpbmcgc3lzdGVtLWRlcHMgdjcuMC44XG4gICBDb21waWxpbmcgcHJvYy1tYWNyby1jcmF0ZSB2My41LjBcbiAgIENvbXBpbGluZyBnbGliLXN5cyB2MC4yMS41XG4gICBDb21waWxpbmcgZ29iamVjdC1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGdpby1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIHBhbmdvLXN5cyB2MC4yMS41XG4gICBDb21waWxpbmcgZ2RrLXBpeGJ1Zi1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGNhaXJvLXN5cy1ycyB2MC4yMS41XG4gICBDb21waWxpbmcgZ3JhcGhlbmUtc3lzIHYwLjIxLjVcbiAgIENvbXBpbGluZyBnZGs0LXN5cyB2MC4xMC4zXG4gICBDb21waWxpbmcgZ3NrNC1zeXMgdjAuMTAuM1xuICAgQ29tcGlsaW5nIGd0azQtc3lzIHYwLjEwLjNcbiAgIENvbXBpbGluZyBsaWJhZHdhaXRhLXN5cyB2MC44LjFcbndhcm5pbmc6IGd0azQtc3lzQDAuMTAuMzogXG5lcnJvcjogZmFpbGVkIHRvIHJ1biBjdXN0b20gYnVpbGQgY29tbWFuZCBmb3IgYGd0azQtc3lzIHYwLjEwLjNgXG5cbkNhdXNlZCBieTpcbiAgcHJvY2VzcyBkaWRuJ3QgZXhpdCBzdWNjZXNzZnVsbHk6IGAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9ndGs0LXN5cy03ZjU1M2FhYjQzYjdkODY2L2J1aWxkLXNjcmlwdC1idWlsZGAgKGV4aXQgc3RhdHVzOiAxKVxuICAtLS0gc3Rkb3V0XG4gIGNhcmdvOnJlcnVuLWlmLWNoYW5nZWQ9L2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ndGs0LXN5cy0wLjEwLjMvQ2FyZ28udG9tbFxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1HVEs0X05PX1BLR19DT05GSUdcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR194ODZfNjQtdW5rbm93bi1saW51eC1nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR194ODZfNjRfdW5rbm93bl9saW51eF9nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9SE9TVF9QS0dfQ09ORklHXG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPVBLR19DT05GSUdcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19QQVRIX3g4Nl82NC11bmtub3duLWxpbnV4LWdudVxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX1BBVEhfeDg2XzY0X3Vua25vd25fbGludXhfZ251XG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPUhPU1RfUEtHX0NPTkZJR19QQVRIXG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPVBLR19DT05GSUdfUEFUSFxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1QS0dfQ09ORklHX0xJQkRJUl94ODZfNjQtdW5rbm93bi1saW51eC1nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19MSUJESVJfeDg2XzY0X3Vua25vd25fbGludXhfZ251XG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPUhPU1RfUEtHX0NPTkZJR19MSUJESVJcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19MSUJESVJcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19TWVNST09UX0RJUl94ODZfNjQtdW5rbm93bi1saW51eC1nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UEtHX0NPTkZJR19TWVNST09UX0RJUl94ODZfNjRfdW5rbm93bl9saW51eF9nbnVcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9SE9TVF9QS0dfQ09ORklHX1NZU1JPT1RfRElSXG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPVBLR19DT05GSUdfU1lTUk9PVF9ESVJcbiAgY2FyZ286d2FybmluZz1cbiAgcGtnLWNvbmZpZyBleGl0ZWQgd2l0aCBzdGF0dXMgY29kZSAxXG4gID4gUEtHX0NPTkZJR19BTExPV19TWVNURU1fQ0ZMQUdTPTEgcGtnLWNvbmZpZyAtLWxpYnMgLS1jZmxhZ3MgZ3RrNCAnZ3RrNCA+PSA0LjEwJ1xuXG4gIHBrZy1jb25maWcgb3V0cHV0OlxuICAgIFBhY2thZ2UgZ3RrNCB3YXMgbm90IGZvdW5kIGluIHRoZSBwa2ctY29uZmlnIHNlYXJjaCBwYXRoLlxuICAgIFBlcmhhcHMgeW91IHNob3VsZCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGBndGs0LnBjJ1xuICAgIHRvIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgICBObyBwYWNrYWdlICdndGs0JyBmb3VuZFxuICAgIFBhY2thZ2UgZ3RrNCB3YXMgbm90IGZvdW5kIGluIHRoZSBwa2ctY29uZmlnIHNlYXJjaCBwYXRoLlxuICAgIFBlcmhhcHMgeW91IHNob3VsZCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGBndGs0LnBjJ1xuICAgIHRvIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGVcbiAgICBObyBwYWNrYWdlICdndGs0JyBmb3VuZFxuXG4gIFRoZSBzeXN0ZW0gbGlicmFyeSBgZ3RrNGAgcmVxdWlyZWQgYnkgY3JhdGUgYGd0azQtc3lzYCB3YXMgbm90IGZvdW5kLlxuICBUaGUgZmlsZSBgZ3RrNC5wY2AgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGFuZCB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIG11c3QgY29udGFpbiBpdHMgcGFyZW50IGRpcmVjdG9yeS5cbiAgVGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3Qgc2V0LlxuXG4gIEhJTlQ6IGlmIHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgbGlicmFyeSwgdHJ5IHNldHRpbmcgUEtHX0NPTkZJR19QQVRIIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBgZ3RrNC5wY2AuXG5cbndhcm5pbmc6IGJ1aWxkIGZhaWxlZCwgd2FpdGluZyBmb3Igb3RoZXIgam9icyB0byBmaW5pc2guLi5cblxuXG5Db21tYW5kIGV4aXRlZCB3aXRoIGNvZGUgMTAxIn1dLCJkZXRhaWxzIjp7fSwiaXNFcnJvciI6dHJ1ZSwidGltZXN0YW1wIjoxNzg0OTg4NjQ1ODEzfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNGFhYjRkNjMiLCJwYXJlbnRJZCI6IjM4ZTI4MmRmIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMDo1MS44ODBaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkludmVzdGlnYXRpbmcgYnVpbGQgc2NyaXB0IFJVU1RGTEFHUyB2aXNpYmlsaXR5KioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNlN2RjNWM4MTkxOGI2ODNmZWE1YWExZDE3YlwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTVByUWJuSmcxdDBvazZZQTV4Y25BajRoUHpyQUhfcDZCajloamllVFZyRy1uWEhCei1KTE1iSmZZdHNIMW9hU3pKQzBVUHppTWpxTlBHU2xfX2NiWE54NVpxOHE1N3FMbXFWSXJvNzFqYS16eURpRmZMalh2bjhzR2Z2eTk3VnVGa1k3UmplNXU0NC15ZDVJbEN4X2VrenBuV0xYRlR1c2tXcUVrb1ZBVjByRkh1ZW5PVTk5RW1HZjFJbkQtUG9FYndCcUVVWVJhYkUyT2NDRlFGTWtrZ2ZaNjhOWGJWbzEzUHZlRUdwX2UyR0lWWTYzdHQycjF2MkZtY09udUx5TkM5OVNTWmZYNXR3ZUpZLWJyVnNNeFdNb3RxeUFQdXZYSkt6Qk1HNnpuZEV4czdsZlBEMjR0ODZremhOSDJDY2txazlBTnVqQVZ2OUctYUk4YkIwdXp0Tjh1eXVXaEpnWTJKWWV4Z3gwUHA1LVZUZWgtWUtfYnVPZnY1Q3h5QnlSTTdNRnNBcjYwUHBvd1R4ZkgzR3VyRnUtb2VGU1Q3MjBBUTBLczBmN294MHBZV0hYTUJ4S24tN3JKSE9XdXNZTkN5QndrTTFiU3ZWMDk0ZXN2dlFDbERSMVltdWlQZXc5b2FNbFJPeEJBN0htRE15OFhhWTFYSTFDSE9Ub3hZS19TOGRaREtuOTNTR3Z4THdJM2t2N2lCT1RaZElLQ0ROanp2Rms5VlcyQS1SanNpX0pLdUkwODJlQzRCOFpISUk3MzFmUFdnTmlhVlRJdnVhSXVuZUdYOGVmajRXU3RkbjUzcDhtTmctMGJSVFk5bThTVWo5Tk5FRE9jOXdsb0JNRnhhaEdaQVF0RGFFckNPYjR4bjAyMmZZN3k0UjNtYnZZRXVkUDQ1ZXVpMzhpMTFwRlZfNU50bWlZR3p0eVJ6Vk41Nmc4TUNSM2lLVXlJWWs4MVU5LUpQMUtsYkNkQTNmR1ZKemtnbVJiZTRQekE0eUZNaFEtb3BaaVk3WE9ULW5zUTB0c0NQMWlhcGkzUWViUDcwemNsU1c0V1JzNEZhdFNnUHB2QnlmaEpsWl8ySUJIcHNEajlmd3JoMGVnMmhhZFlWakFocmktMXREbFRULV9MdTN4MEZ5YTB0Mmp1dVIwVXZCYng2VHE4bFJnVFlFd2Z5UUNkUnU4RjhqbVhxajkyWVB6YVdzTndsWGFPWUlGazdfSkNGWU9SUFd5ZGtOMkhCNml5cDIxVGpOamN6OTR5cjM2bjBFM1JpYloyZG8wXzRzY21ZSm12M3p0WVlTc2JYR0ZHUGFKbDdscFBKMDZlZG9IZ2tUNjFDMjJwcDVyRjBoVVJuYnY1WlNHM3M3U3VLTDEwZm9BZEkzQXQ3M29Jc01XMFc4S2tiZ2JFbzFHUG5tUTJCNHdGN09aeHM5NnVXajZqRXRRMk1JWFdFVG5nQlZvQXNkZmM2cFhpM2xZa2NZTG5pUXd2N1h3ZGdlLXJVSFhWY2lVWlJ4Y1E5VU5temtKd0RUbHl0N1RtYXo5V1ZTMFdQWE1SN2FPTk1VeDdLeGFrRGx3elQxLVA0NmhZRGlMREJLRmFVdVpNVT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkludmVzdGlnYXRpbmcgYnVpbGQgc2NyaXB0IFJVU1RGTEFHUyB2aXNpYmlsaXR5KipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX0tyck9UQ0wxaHBOS3pIN1lvQW1YOURQUHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNlYmE3OWM4MTkxODJlZWRmZmQ1Y2ZjZmFjMSIsIm5hbWUiOiJyZWFkIiwiYXJndW1lbnRzIjp7InBhdGgiOiIvaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2d0azQtc3lzLTAuMTAuMy9idWlsZC5ycyIsImxpbWl0Ijo0MH19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoxODY1LCJvdXRwdXQiOjExNCwiY2FjaGVSZWFkIjoyODE2MCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjo1MCwidG90YWxUb2tlbnMiOjMwMTM5LCJjb3N0Ijp7ImlucHV0IjowLjAwOTMyNSwib3V0cHV0IjowLjAwMzQyMDAwMDAwMDAwMDAwMDMsImNhY2hlUmVhZCI6MC4wMTQwNzk5OTk5OTk5OTk5OTksImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAyNjgyNDk5OTk5OTk5OTk5OH19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4ODY0NTgxNSwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzZTYyM2NjODE5MTk5ZGMxYjJhYWU5NzViZGMifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNmRlNjI3ZmYiLCJwYXJlbnRJZCI6IjRhYWI0ZDYzIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMDo1MS44ODNaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX0tyck9UQ0wxaHBOS3pIN1lvQW1YOURQUHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNlYmE3OWM4MTkxODJlZWRmZmQ1Y2ZjZmFjMSIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii8vIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IGdpciAoaHR0cHM6Ly9naXRodWIuY29tL2d0ay1ycy9naXIpXG4vLyBmcm9tIGdpci1maWxlcyAoaHR0cHM6Ly9naXRodWIuY29tL2d0ay1ycy9naXItZmlsZXMpXG4vLyBETyBOT1QgRURJVFxuXG5mbiBtYWluKCkge1xuICAgIGlmIHN0ZDo6ZW52Ojp2YXIoXCJET0NTX1JTXCIpLmlzX29rKCkge1xuICAgICAgICAvLyBwcmV2ZW50IGxpbmtpbmcgbGlicmFyaWVzIHRvIGF2b2lkIGRvY3VtZW50YXRpb24gZmFpbHVyZVxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgbGV0IEVycihzKSA9IHN5c3RlbV9kZXBzOjpDb25maWc6Om5ldygpLnByb2JlKCkge1xuICAgICAgICBwcmludGxuIShcImNhcmdvOndhcm5pbmc9e3N9XCIpO1xuICAgICAgICBzdGQ6OnByb2Nlc3M6OmV4aXQoMSk7XG4gICAgfVxufVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg4NjUxODgyfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiODgwMjJlZTgiLCJwYXJlbnRJZCI6IjZkZTYyN2ZmIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMDo1Ny4zMTlaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkNvbWJpbmluZyBET0NTX1JTIGFuZCBydXN0IGNmZyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGMzZWZiYTZjODE5MWEzYTc5Yzg0MDc3NTEwOTNcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1QdzNaQWF3cUFXVzRmeU5OaV9VdWQ5SVF4amI4Y2F0ekdpWXFnNGFteTFyUlJjVzRmMDEwVW5xWW1JVDJvZHFzNEdxM0RwTndEeGJJeHBrV2xDYWpzU00ya3NNQ2JMS3ZmNTVnOFp0TXJjXzVNdWdRdTBUM2oyLUpPcXpweXFhengzNXROWEYzbkNxaEpWN0swR3kycTBEYm5rVXFpWnZCNUdjQmZOa0gwUFVJd2d3aHBzczBMY2lCaVVROEtJeTlRMGFYaGd2LUdDN2drWk8yOF8xdzVHbDRVZE5mSjRTemktV2ZmcjZyOGtuTnphSjNYRExhX25VRnliajhVYlpZY2dDaUJrSUEzUWJDVzdpaERWRjJzM0NocnJyNXZ5LWswc1VSZXUzQTZCNS0yb2NCal9abHY2bzNLVFc2dDVhX1dyejNITzJTNFJtOUJHeXRDRklLZVU0QXg1ZXRmTU16X2N1UnJwSExiYW5ENGo2RDFwdG9OTUIxVXFUdl9GSnZnczRNc3JaeGRaWUVWZmpKY1VBdEUxVG45UGRyVDFDZTE5SlVydVBMWVVoVUZLV3RwSi03Z0xpbUl4TEY0eW9ra2duS3BuZ2Nqby03S3hLMGU1ZVBSLVNKMHFXWklYU2NSUjJhZUNPU3ZBRU14Zmh0U2xzY1VVNG9xNGtBMVdHQ1RrY0w3NFV3QWd0ekNQNTFJRFI3eUxHUE1uRU1HM0ppRHZqVktiaFlsSlZJNDg2dC14OFpDN0JhMV9BdHV0RHRwTUJ5dlRVUXFudmdNU3R4TDVoSUhuMEVlaVFGS1ZWZS1oS1hmQ3ctX3ZuU25QX09FQjJrTEpXcW12eDRPajZGRjNjOWdpNmRXQW03UEE0emRuaGRpeHBjdTZGZVk3MWNtTkg3ejkyZnJHRmkzMmxXM1NKbGZTZkZ3ZEpDZk0xYzFRNFdnSVI0OUx2WEw4STBidjRoMURQSmdKaEFKR0FRcjF1WE9ndGFxVGh5Nkp2SWdMc3hPZ2pYRWcwQjJBbGs4RjRtc3NiWWxiMkdOUkltM2xfVmZQMEVDbnYyY0lJbnNENzZsUEFkQXhQRXNkZUtmeU13TnFkWXRCS0stM3NZcFRwM3NDQUtLMERVSU1VTzJpZDgzUUczS0ZkUDhieGhGc3BLY1JOV3J5QjdLaGFkT0VqQUhyUk5ucjlQc05XOWdKV3pxeUJCQlltV1UxODZ2aUVQaWZmckV4YmhCMGY0ZlVZV0dWSUFVNEZETkc4akJhSzVNcl92MDgtdFFUSGswNDA3bWNUYUNQakEtVmQzSUVnYng4RWFsMWt5NFVCMm9DalJ4eGpiTjZUUHp6YUh6Z0VtNVVfSU1KRkVsdWlTd1lUR0NyR05tbDVvSWVNNHRhQWlrUWpJWHMxakZTeWV2NldxdjluQlN6XzAwPVwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqQ29tYmluaW5nIERPQ1NfUlMgYW5kIHJ1c3QgY2ZnKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX0t2OUlHWE9aWDBvdGN4b0Q3Z1BSQ0pCRXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNmMGI0OTg4MTkxYjA3YzkwMmVlN2RhN2RhNSIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJET0NTX1JTPTEgUlVTVENfQk9PVFNUUkFQPTEgUlVTVEZMQUdTPSctLWNmZyBkb2NzcnMnIGNhcmdvIGNoZWNrIiwidGltZW91dCI6MTIwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjEwNzgsIm91dHB1dCI6ODMsImNhY2hlUmVhZCI6MjkxODQsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MzYsInRvdGFsVG9rZW5zIjozMDM0NSwiY29zdCI6eyJpbnB1dCI6MC4wMDUzOTAwMDAwMDAwMDAwMDEsIm91dHB1dCI6MC4wMDI0OSwiY2FjaGVSZWFkIjowLjAxNDU5MTk5OTk5OTk5OTk5OSwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDIyNDcyfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg4NjUxODgzLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzNlYzM0YzQ4MTkxYTU1ZmFjZjYwZGQxNjhjMiJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIwYjAwOTc2NSIsInBhcmVudElkIjoiODgwMjJlZTgiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjExOjM2LjU0N1oiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfS3Y5SUdYT1pYMG90Y3hvRDdnUFJDSkJFfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjM2YwYjQ5ODgxOTFiMDdjOTAyZWU3ZGE3ZGE1IiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiICAgQ29tcGlsaW5nIGZ1dHVyZXMtbWFjcm8gdjAuMy4zM1xuICAgQ29tcGlsaW5nIGdsaWItbWFjcm9zIHYwLjIxLjVcbiAgIENvbXBpbGluZyBndGs0LW1hY3JvcyB2MC4xMC4zXG4gICBDb21waWxpbmcgZ2xpYi1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGdvYmplY3Qtc3lzIHYwLjIxLjVcbiAgIENvbXBpbGluZyBnaW8tc3lzIHYwLjIxLjVcbiAgIENvbXBpbGluZyBwYW5nby1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGdkazQtc3lzIHYwLjEwLjNcbiAgIENvbXBpbGluZyBncmFwaGVuZS1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGdzazQtc3lzIHYwLjEwLjNcbiAgIENvbXBpbGluZyBndGs0LXN5cyB2MC4xMC4zXG4gICBDb21waWxpbmcgbGliYWR3YWl0YS1zeXMgdjAuOC4xXG4gICAgQ2hlY2tpbmcgY2Fpcm8tc3lzLXJzIHYwLjIxLjVcbiAgICBDaGVja2luZyBmdXR1cmVzLXV0aWwgdjAuMy4zM1xuICAgIENoZWNraW5nIGdkay1waXhidWYtc3lzIHYwLjIxLjVcbiAgICBDaGVja2luZyBmdXR1cmVzLWV4ZWN1dG9yIHYwLjMuMzNcbiAgICBDaGVja2luZyBnbGliIHYwLjIxLjVcbiAgICBDaGVja2luZyBnaW8gdjAuMjEuNVxuICAgIENoZWNraW5nIGNhaXJvLXJzIHYwLjIxLjVcbiAgICBDaGVja2luZyBncmFwaGVuZS1ycyB2MC4yMS41XG4gICAgQ2hlY2tpbmcgcGFuZ28gdjAuMjEuNVxuICAgIENoZWNraW5nIGdkay1waXhidWYgdjAuMjEuNVxuICAgIENoZWNraW5nIGdkazQgdjAuMTAuM1xuICAgIENoZWNraW5nIGdzazQgdjAuMTAuM1xuICAgIENoZWNraW5nIGd0azQgdjAuMTAuM1xuICAgIENoZWNraW5nIGxpYmFkd2FpdGEgdjAuOC4xXG4gICAgQ2hlY2tpbmcgZmxhc2hlciB2MC4xLjAgKC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIpXG53YXJuaW5nOiB1c2Ugb2YgZGVwcmVjYXRlZCBzdHJ1Y3QgYGd0azQ6OkZpbGVDaG9vc2VyTmF0aXZlYDogU2luY2UgNC4xMFxuICAgLS0+IHNyYy9tYWluLnJzOjI4MTozMlxuICAgIHxcbjI4MSB8ICAgICAgICAgICAgIGxldCBjaG9vc2VyID0gZ3RrOjpGaWxlQ2hvb3Nlck5hdGl2ZTo6YnVpbGRlcigpXG4gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5cbiAgICB8XG4gICAgPSBub3RlOiBgI1t3YXJuKGRlcHJlY2F0ZWQpXWAgb24gYnkgZGVmYXVsdFxuXG53YXJuaW5nOiB1c2Ugb2YgZGVwcmVjYXRlZCBzdHJ1Y3QgYGd0azQ6OkZpbGVDaG9vc2VyTmF0aXZlYDogU2luY2UgNC4xMFxuICAgLS0+IHNyYy9tYWluLnJzOjM0NTozMlxuICAgIHxcbjM0NSB8ICAgICAgICAgICAgIGxldCBjaG9vc2VyID0gZ3RrOjpGaWxlQ2hvb3Nlck5hdGl2ZTo6YnVpbGRlcigpXG4gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXl5cblxud2FybmluZzogdXNlIG9mIGRlcHJlY2F0ZWQgYXNzb2NpYXRlZCBmdW5jdGlvbiBgZ3RrNDo6RmlsZUNob29zZXJOYXRpdmU6OmJ1aWxkZXJgOiBTaW5jZSA0LjEwXG4gICAtLT4gc3JjL21haW4ucnM6MjgxOjUxXG4gICAgfFxuMjgxIHwgICAgICAgICAgICAgbGV0IGNob29zZXIgPSBndGs6OkZpbGVDaG9vc2VyTmF0aXZlOjpidWlsZGVyKClcbiAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXlxuXG53YXJuaW5nOiB1c2Ugb2YgZGVwcmVjYXRlZCBtZXRob2QgYGd0azQ6OmJ1aWxkZXJzOjpGaWxlQ2hvb3Nlck5hdGl2ZUJ1aWxkZXI6OnRpdGxlYDogU2luY2UgNC4xMFxuICAgLS0+IHNyYy9tYWluLnJzOjI4MjoxOFxuICAgIHxcbjI4MiB8ICAgICAgICAgICAgICAgICAudGl0bGUoXCJDaG9vc2UgSW5zdGFsbGF0aW9uIFNvdXJjZVwiKVxuICAgIHwgICAgICAgICAgICAgICAgICBeXl5eXlxuXG53YXJuaW5nOiB1c2Ugb2YgZGVwcmVjYXRlZCBtZXRob2QgYGd0azQ6OmJ1aWxkZXJzOjpGaWxlQ2hvb3Nlck5hdGl2ZUJ1aWxkZXI6OnRyYW5zaWVudF9mb3JgOiBTaW5jZSA0LjEwXG4gICAtLT4gc3JjL21haW4ucnM6MjgzOjE4XG4gICAgfFxuMjgzIHwgICAgICAgICAgICAgICAgIC50cmFuc2llbnRfZm9yKCZ3aW5kb3cpXG4gICAgfCAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5cblxud2FybmluZzogdXNlIG9mIGRlcHJlY2F0ZWQgbWV0aG9kIGBndGs0OjpidWlsZGVyczo6RmlsZUNob29zZXJOYXRpdmVCdWlsZGVyOjphY3Rpb25gOiBTaW5jZSA0LjEwXG4gICAtLT4gc3JjL21haW4ucnM6Mjg0OjE4XG4gICAgfFxuMjg0IHwgICAgICAgICAgICAgICAgIC5hY3Rpb24oZ3RrOjpGaWxlQ2hvb3NlckFjdGlvbjo6T3BlbilcbiAgICB8ICAgICAgICAgICAgICAgICAgXl5eXl5eXG5cbndhcm5pbmc6IHVzZSBvZiBkZXByZWNhdGVkIG1ldGhvZCBgZ3RrNDo6YnVpbGRlcnM6OkZpbGVDaG9vc2VyTmF0aXZlQnVpbGRlcjo6YWNjZXB0X2xhYmVsYDogU2luY2UgNC4xMFxuICAgLS0+IHNyYy9tYWluLnJzOjI4NToxOFxuICAgIHxcbjI4NSB8ICAgICAgICAgICAgICAgICAuYWNjZXB0X2xhYmVsKFwiU2VsZWN0XCIpXG4gICAgfCAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXlxuXG53YXJuaW5nOiB1c2Ugb2YgZGVwcmVjYXRlZCBtZXRob2QgYGd0azQ6OmJ1aWxkZXJzOjpGaWxlQ2hvb3Nlck5hdGl2ZUJ1aWxkZXI6OmNhbmNlbF9sYWJlbGA6IFNpbmNlIDQuMTBcbiAgIC0tPiBzcmMvbWFpbi5yczoyODY6MThcbiAgICB8XG4yODYgfCAgICAgICAgICAgICAgICAgLmNhbmNlbF9sYWJlbChcIkNhbmNlbFwiKVxuICAgIHwgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5cblxud2FybmluZzogdXNlIG9mIGRlcHJlY2F0ZWQgbWV0aG9kIGBndGs0OjpidWlsZGVyczo6RmlsZUNob29zZXJOYXRpdmVCdWlsZGVyOjpidWlsZGA6IFNpbmNlIDQuMTBcbiAgIC0tPiBzcmMvbWFpbi5yczoyODc6MThcbiAgICB8XG4yODcgfCAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XG4gICAgfCAgICAgICAgICAgICAgICAgIF5eXl5eXG5cbndhcm5pbmc6IHVzZSBvZiBkZXByZWNhdGVkIG1ldGhvZCBgbGliYWR3YWl0YTo6cHJlbHVkZTo6RmlsZUNob29zZXJFeHQ6OmZpbGVgOiBTaW5jZSA0LjEwXG4gICAtLT4gc3JjL21haW4ucnM6Mjk1OjQ4XG4gICAgfFxuMjk1IHwgICAgICAgICAgICAgICAgICAgICAmJiBsZXQgU29tZShwYXRoKSA9IGRpYWxvZy5maWxlKCkuYW5kX3RoZW4ofGZ8IGYucGF0aCgpKVxuICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXG5cbndhcm5pbmc6IHVzZSBvZiBkZXByZWNhdGVkIGFzc29jaWF0ZWQgZnVuY3Rpb24gYGd0azQ6OkZpbGVDaG9vc2VyTmF0aXZlOjpidWlsZGVyYDogU2luY2UgNC4xMFxuICAgLS0+IHNyYy9tYWluLnJzOjM0NTo1MVxuICAgIHxcbjM0NSB8ICAgICAgICAgICAgIGxldCBjaG9vc2VyID0gZ3RrOjpGaWxlQ2hvb3Nlck5hdGl2ZTo6YnVpbGRlcigpXG4gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5cblxud2FybmluZzogdXNlIG9mIGRlcHJlY2F0ZWQgbWV0aG9kIGBndGs0OjpidWlsZGVyczo6RmlsZUNob29zZXJOYXRpdmVCdWlsZGVyOjp0aXRsZWA6IFNpbmNlIDQuMTBcbiAgIC0tPiBzcmMvbWFpbi5yczozNDY6MThcbiAgICB8XG4zNDYgfCAgICAgICAgICAgICAgICAgLnRpdGxlKFwiQ3JlYXRlIERpc2sgSW1hZ2VcIilcbiAgICB8ICAgICAgICAgICAgICAgICAgXl5eXl5cblxud2FybmluZzogdXNlIG9mIGRlcHJlY2F0ZWQgbWV0aG9kIGBndGs0OjpidWlsZGVyczo6RmlsZUNob29zZXJOYXRpdmVCdWlsZGVyOjp0cmFuc2llbnRfZm9yYDogU2luY2UgNC4xMFxuICAgLS0+IHNyYy9tYWluLnJzOjM0NzoxOFxuICAgIHxcbjM0NyB8ICAgICAgICAgICAgICAgICAudHJhbnNpZW50X2Zvcigmd2luZG93KVxuICAgIHwgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5eXG5cbndhcm5pbmc6IHVzZSBvZiBkZXByZWNhdGVkIG1ldGhvZCBgZ3RrNDo6YnVpbGRlcnM6OkZpbGVDaG9vc2VyTmF0aXZlQnVpbGRlcjo6YWN0aW9uYDogU2luY2UgNC4xMFxuICAgLS0+IHNyYy9tYWluLnJzOjM0ODoxOFxuICAgIHxcbjM0OCB8ICAgICAgICAgICAgICAgICAuYWN0aW9uKGd0azo6RmlsZUNob29zZXJBY3Rpb246OlNhdmUpXG4gICAgfCAgICAgICAgICAgICAgICAgIF5eXl5eXlxuXG53YXJuaW5nOiB1c2Ugb2YgZGVwcmVjYXRlZCBtZXRob2QgYGd0azQ6OmJ1aWxkZXJzOjpGaWxlQ2hvb3Nlck5hdGl2ZUJ1aWxkZXI6OmFjY2VwdF9sYWJlbGA6IFNpbmNlIDQuMTBcbiAgIC0tPiBzcmMvbWFpbi5yczozNDk6MThcbiAgICB8XG4zNDkgfCAgICAgICAgICAgICAgICAgLmFjY2VwdF9sYWJlbChcIlNlbGVjdFwiKVxuICAgIHwgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXl5cblxud2FybmluZzogdXNlIG9mIGRlcHJlY2F0ZWQgbWV0aG9kIGBndGs0OjpidWlsZGVyczo6RmlsZUNob29zZXJOYXRpdmVCdWlsZGVyOjpjYW5jZWxfbGFiZWxgOiBTaW5jZSA0LjEwXG4gICAtLT4gc3JjL21haW4ucnM6MzUwOjE4XG4gICAgfFxuMzUwIHwgICAgICAgICAgICAgICAgIC5jYW5jZWxfbGFiZWwoXCJDYW5jZWxcIilcbiAgICB8ICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXG5cbndhcm5pbmc6IHVzZSBvZiBkZXByZWNhdGVkIG1ldGhvZCBgZ3RrNDo6YnVpbGRlcnM6OkZpbGVDaG9vc2VyTmF0aXZlQnVpbGRlcjo6YnVpbGRgOiBTaW5jZSA0LjEwXG4gICAtLT4gc3JjL21haW4ucnM6MzUxOjE4XG4gICAgfFxuMzUxIHwgICAgICAgICAgICAgICAgIC5idWlsZCgpO1xuICAgIHwgICAgICAgICAgICAgICAgICBeXl5eXlxuXG53YXJuaW5nOiB1c2Ugb2YgZGVwcmVjYXRlZCBtZXRob2QgYGxpYmFkd2FpdGE6OnByZWx1ZGU6OkZpbGVDaG9vc2VyRXh0OjpzZXRfY3VycmVudF9uYW1lYDogU2luY2UgNC4xMFxuICAgLS0+IHNyYy9tYWluLnJzOjM1MjoyMVxuICAgIHxcbjM1MiB8ICAgICAgICAgICAgIGNob29zZXIuc2V0X2N1cnJlbnRfbmFtZShcImFsdC1saW51eC5pbWdcIik7XG4gICAgfCAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXl5eXl5eXl5cblxud2FybmluZzogdXNlIG9mIGRlcHJlY2F0ZWQgbWV0aG9kIGBsaWJhZHdhaXRhOjpwcmVsdWRlOjpGaWxlQ2hvb3NlckV4dDo6ZmlsZWA6IFNpbmNlIDQuMTBcbiAgIC0tPiBzcmMvbWFpbi5yczozNjA6NDhcbiAgICB8XG4zNjAgfCAgICAgICAgICAgICAgICAgICAgICYmIGxldCBTb21lKHBhdGgpID0gZGlhbG9nLmZpbGUoKS5hbmRfdGhlbih8ZnwgZi5wYXRoKCkpXG4gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5cblxud2FybmluZzogYGZsYXNoZXJgIChiaW4gXCJmbGFzaGVyXCIpIGdlbmVyYXRlZCAxOSB3YXJuaW5nc1xuICAgIEZpbmlzaGVkIGBkZXZgIHByb2ZpbGUgW3Vub3B0aW1pemVkICsgZGVidWdpbmZvXSB0YXJnZXQocykgaW4gMzkuMjFzXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODg2OTY1NDd9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIzNjU5N2JlNiIsInBhcmVudElkIjoiMGIwMDk3NjUiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjExOjQxLjIzNVoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqUGxhbm5pbmcgYXN5bmMgR1RLIDQuMTAgRmlsZURpYWxvZyB1c2FnZSoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM0MWFkZGE0ODE5MWFkNzMzNTQwNThhYjlkMmZcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1RYkRnSTdFZTNkdUFRX2s1ODZPSUJVV29oZzFJVDU0dUc5SUVBSWRsZVpvcFVKOGxlNzZNdVFIdTRFemNRaG1LNVlRbGRuS2FzSzNqdnZKRUdCeGJRWjQ5bjFpM2puWFpsNFR1OG5KUXhTN3BWR3l6ejBzWmVhZlRHOWFURC1BVWhBRzRrMVYyS3FHMjliMVVjcjloR3ozbXNQT2I0ZFFpX3N4RWJDSXdNRDRkOEdnSXdWd2tFMW1SbzBrZEtlM0lDTV93Nm5xbkNjQ1RSQUYtUktyQzV3SFNUblM3X1BtNVJRbDNaY3BSRGs2UUNhM1hzeHplY1lfTTRzQjlEV0JGZEhpWE1FRkxMSUNvWHdUTHg1ZnN6YjZjSExlVHFsLXRlOUN6elpjWEIwZTNGY1VOck53Nl9rQW5WNUFXNko0VVMyUGhmM1lTVm5YaHVQaDJPWk5Gd2YwekE2cW8tWjI5ZjZWYUdFaE52c0JlMlVmWlVKVDFwOThJanloRG5sMXBQRkozR1YySUw1N2VrLVlWNTF2T21XanotOHdkeGpUX3FpZnRRRU1xWWMzWjBwRk9sazA0TFg1UEJhTVFSX2FDeGtRa3cwRjROR1cwYkV4YmNHQ3ZkQ3lNSENBRjRoV2t4SlpBd29FbURFWEpoVkxqa3RGSnJTY3EwaEtUYTF4Tm8yb0YtRUljNHQ5a0QyM1h1dXk4UEsyTlRaRHBTQmhGUVU2clQtXzN3ekRCZExHWGhUblpFMUtxMlpKNDlCYThlNGtENFdKRjNObFBpN045d1RFYVBVcWN4by1LcnJCd0ItUk5aRHVqRmt3bHBHaTQ1X3NmYWFVbFhjcC1neHBHd2lxNU9PbVpPSTk2R005RGxPUWtqa3BCMW9ZMk1MWC0zMXpYNTN6SVQ3TlEyMmY2eThWREZCWmlILXJuZVR1MnBhaldWNUxLY1B5a2t0OFFYVVNKdEVCVXhMX25GSTl2bnJOa01RdDdNUWNLTm1Uai1NSUpiTnpsOElpcFd6UU9jRWVwb0R1dFNWUlhEWk5HUlltZXFtX2tNOEJHQ1E5M1lqSDhRV0FxdUVJT1k0TGxUVXJ3V2Mzb0ZqZGM4RmdzTnRyOElpMlhaZmZUZDEyWFlXcU1PcC1WbktCdkc0N2dNaUdCNE85dl9IOHhxdE1tS3hjQnFUWUZyR2o0YXVBWW1fYUxGOEFNZFY5cEdQdDRqQmkxQ1B6VWpSNTBaN2dGQklaZzdESHF3NEdtUjRSMTFTZ01DSkUzMHBVZXhlTHo3Wnk2bWY5SFR5Nm1pMjFQR1NGRkVmZG5BYkRWREd6NGs0RHpGTFVGb3FkQVNfWjJHX3FvMWVRS3BpM0ktMXIwUEt2VHplZ1NtcjRTOGx5U1lHaWlXSC1HcXZaSnM4X0NzZFVjbkhnR2ZaZGlrPVwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqUGxhbm5pbmcgYXN5bmMgR1RLIDQuMTAgRmlsZURpYWxvZyB1c2FnZSoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9aQkQyUnZJSWZxWWxDTG1KZlRjbkoyS1d8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM0MWJiNzIwODE5MTkwY2Y3Y2U5YjQxYjYxZGMiLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9ndGs0LTAuMTAuMy9zcmMvYXV0by9maWxlX2RpYWxvZy5ycyIsImxpbWl0IjoxODB9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MjY0NSwib3V0cHV0Ijo5NSwiY2FjaGVSZWFkIjoyOTE4NCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoyOSwidG90YWxUb2tlbnMiOjMxOTI0LCJjb3N0Ijp7ImlucHV0IjowLjAxMzIyNSwib3V0cHV0IjowLjAwMjg1LCJjYWNoZVJlYWQiOjAuMDE0NTkxOTk5OTk5OTk5OTk5LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wMzA2Njd9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODg2OTY1NDgsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNDE4ZjJiMDgxOTFiODVlZjA5MmE5ZmFlZDliIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImNkMTQ3OTY4IiwicGFyZW50SWQiOiIzNjU5N2JlNiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MTE6NDEuMjM3WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9aQkQyUnZJSWZxWWxDTG1KZlRjbkoyS1d8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM0MWJiNzIwODE5MTkwY2Y3Y2U5YjQxYjYxZGMiLCJ0b29sTmFtZSI6InJlYWQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIvLyBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBnaXIgKGh0dHBzOi8vZ2l0aHViLmNvbS9ndGstcnMvZ2lyKVxuLy8gZnJvbSBnaXItZmlsZXMgKGh0dHBzOi8vZ2l0aHViLmNvbS9ndGstcnMvZ2lyLWZpbGVzKVxuLy8gRE8gTk9UIEVESVRcblxudXNlIGNyYXRlOjp7ZmZpLCBGaWxlRmlsdGVyLCBXaW5kb3d9O1xudXNlIGdsaWI6OntcbiAgICBwcmVsdWRlOjoqLFxuICAgIHNpZ25hbDo6e2Nvbm5lY3RfcmF3LCBTaWduYWxIYW5kbGVySWR9LFxuICAgIHRyYW5zbGF0ZTo6Kixcbn07XG51c2Ugc3RkOjp7Ym94ZWQ6OkJveCBhcyBCb3hfLCBwaW46OlBpbn07XG5cbmdsaWI6OndyYXBwZXIhIHtcbiAgICAjW2RvYyhhbGlhcyA9IFwiR3RrRmlsZURpYWxvZ1wiKV1cbiAgICBwdWIgc3RydWN0IEZpbGVEaWFsb2coT2JqZWN0PGZmaTo6R3RrRmlsZURpYWxvZywgZmZpOjpHdGtGaWxlRGlhbG9nQ2xhc3M+KTtcblxuICAgIG1hdGNoIGZuIHtcbiAgICAgICAgdHlwZV8gPT4gfHwgZmZpOjpndGtfZmlsZV9kaWFsb2dfZ2V0X3R5cGUoKSxcbiAgICB9XG59XG5cbmltcGwgRmlsZURpYWxvZyB7XG4gICAgI1tkb2MoYWxpYXMgPSBcImd0a19maWxlX2RpYWxvZ19uZXdcIildXG4gICAgcHViIGZuIG5ldygpIC0+IEZpbGVEaWFsb2cge1xuICAgICAgICBhc3NlcnRfaW5pdGlhbGl6ZWRfbWFpbl90aHJlYWQhKCk7XG4gICAgICAgIHVuc2FmZSB7IGZyb21fZ2xpYl9mdWxsKGZmaTo6Z3RrX2ZpbGVfZGlhbG9nX25ldygpKSB9XG4gICAgfVxuXG4gICAgLy8gcnVzdGRvYy1zdHJpcHBlci1pZ25vcmUtbmV4dFxuICAgIC8vLyBDcmVhdGVzIGEgbmV3IGJ1aWxkZXItcGF0dGVybiBzdHJ1Y3QgaW5zdGFuY2UgdG8gY29uc3RydWN0IFtgRmlsZURpYWxvZ2BdIG9iamVjdHMuXG4gICAgLy8vXG4gICAgLy8vIFRoaXMgbWV0aG9kIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgW2BGaWxlRGlhbG9nQnVpbGRlcmBdKGNyYXRlOjpidWlsZGVyczo6RmlsZURpYWxvZ0J1aWxkZXIpIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBbYEZpbGVEaWFsb2dgXSBvYmplY3RzLlxuICAgIHB1YiBmbiBidWlsZGVyKCkgLT4gRmlsZURpYWxvZ0J1aWxkZXIge1xuICAgICAgICBGaWxlRGlhbG9nQnVpbGRlcjo6bmV3KClcbiAgICB9XG5cbiAgICAjW2RvYyhhbGlhcyA9IFwiZ3RrX2ZpbGVfZGlhbG9nX2dldF9hY2NlcHRfbGFiZWxcIildXG4gICAgI1tkb2MoYWxpYXMgPSBcImdldF9hY2NlcHRfbGFiZWxcIildXG4gICAgI1tkb2MoYWxpYXMgPSBcImFjY2VwdC1sYWJlbFwiKV1cbiAgICBwdWIgZm4gYWNjZXB0X2xhYmVsKCZzZWxmKSAtPiBPcHRpb248Z2xpYjo6R1N0cmluZz4ge1xuICAgICAgICB1bnNhZmUgeyBmcm9tX2dsaWJfbm9uZShmZmk6Omd0a19maWxlX2RpYWxvZ19nZXRfYWNjZXB0X2xhYmVsKHNlbGYudG9fZ2xpYl9ub25lKCkuMCkpIH1cbiAgICB9XG5cbiAgICAjW2RvYyhhbGlhcyA9IFwiZ3RrX2ZpbGVfZGlhbG9nX2dldF9kZWZhdWx0X2ZpbHRlclwiKV1cbiAgICAjW2RvYyhhbGlhcyA9IFwiZ2V0X2RlZmF1bHRfZmlsdGVyXCIpXVxuICAgICNbZG9jKGFsaWFzID0gXCJkZWZhdWx0LWZpbHRlclwiKV1cbiAgICBwdWIgZm4gZGVmYXVsdF9maWx0ZXIoJnNlbGYpIC0+IE9wdGlvbjxGaWxlRmlsdGVyPiB7XG4gICAgICAgIHVuc2FmZSB7XG4gICAgICAgICAgICBmcm9tX2dsaWJfbm9uZShmZmk6Omd0a19maWxlX2RpYWxvZ19nZXRfZGVmYXVsdF9maWx0ZXIoXG4gICAgICAgICAgICAgICAgc2VsZi50b19nbGliX25vbmUoKS4wLFxuICAgICAgICAgICAgKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNbZG9jKGFsaWFzID0gXCJndGtfZmlsZV9kaWFsb2dfZ2V0X2ZpbHRlcnNcIildXG4gICAgI1tkb2MoYWxpYXMgPSBcImdldF9maWx0ZXJzXCIpXVxuICAgIHB1YiBmbiBmaWx0ZXJzKCZzZWxmKSAtPiBPcHRpb248Z2lvOjpMaXN0TW9kZWw+IHtcbiAgICAgICAgdW5zYWZlIHsgZnJvbV9nbGliX25vbmUoZmZpOjpndGtfZmlsZV9kaWFsb2dfZ2V0X2ZpbHRlcnMoc2VsZi50b19nbGliX25vbmUoKS4wKSkgfVxuICAgIH1cblxuICAgICNbZG9jKGFsaWFzID0gXCJndGtfZmlsZV9kaWFsb2dfZ2V0X2luaXRpYWxfZmlsZVwiKV1cbiAgICAjW2RvYyhhbGlhcyA9IFwiZ2V0X2luaXRpYWxfZmlsZVwiKV1cbiAgICAjW2RvYyhhbGlhcyA9IFwiaW5pdGlhbC1maWxlXCIpXVxuICAgIHB1YiBmbiBpbml0aWFsX2ZpbGUoJnNlbGYpIC0+IE9wdGlvbjxnaW86OkZpbGU+IHtcbiAgICAgICAgdW5zYWZlIHsgZnJvbV9nbGliX25vbmUoZmZpOjpndGtfZmlsZV9kaWFsb2dfZ2V0X2luaXRpYWxfZmlsZShzZWxmLnRvX2dsaWJfbm9uZSgpLjApKSB9XG4gICAgfVxuXG4gICAgI1tkb2MoYWxpYXMgPSBcImd0a19maWxlX2RpYWxvZ19nZXRfaW5pdGlhbF9mb2xkZXJcIildXG4gICAgI1tkb2MoYWxpYXMgPSBcImdldF9pbml0aWFsX2ZvbGRlclwiKV1cbiAgICAjW2RvYyhhbGlhcyA9IFwiaW5pdGlhbC1mb2xkZXJcIildXG4gICAgcHViIGZuIGluaXRpYWxfZm9sZGVyKCZzZWxmKSAtPiBPcHRpb248Z2lvOjpGaWxlPiB7XG4gICAgICAgIHVuc2FmZSB7XG4gICAgICAgICAgICBmcm9tX2dsaWJfbm9uZShmZmk6Omd0a19maWxlX2RpYWxvZ19nZXRfaW5pdGlhbF9mb2xkZXIoXG4gICAgICAgICAgICAgICAgc2VsZi50b19nbGliX25vbmUoKS4wLFxuICAgICAgICAgICAgKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNbZG9jKGFsaWFzID0gXCJndGtfZmlsZV9kaWFsb2dfZ2V0X2luaXRpYWxfbmFtZVwiKV1cbiAgICAjW2RvYyhhbGlhcyA9IFwiZ2V0X2luaXRpYWxfbmFtZVwiKV1cbiAgICAjW2RvYyhhbGlhcyA9IFwiaW5pdGlhbC1uYW1lXCIpXVxuICAgIHB1YiBmbiBpbml0aWFsX25hbWUoJnNlbGYpIC0+IE9wdGlvbjxnbGliOjpHU3RyaW5nPiB7XG4gICAgICAgIHVuc2FmZSB7IGZyb21fZ2xpYl9ub25lKGZmaTo6Z3RrX2ZpbGVfZGlhbG9nX2dldF9pbml0aWFsX25hbWUoc2VsZi50b19nbGliX25vbmUoKS4wKSkgfVxuICAgIH1cblxuICAgICNbZG9jKGFsaWFzID0gXCJndGtfZmlsZV9kaWFsb2dfZ2V0X21vZGFsXCIpXVxuICAgICNbZG9jKGFsaWFzID0gXCJnZXRfbW9kYWxcIildXG4gICAgI1tkb2MoYWxpYXMgPSBcIm1vZGFsXCIpXVxuICAgIHB1YiBmbiBpc19tb2RhbCgmc2VsZikgLT4gYm9vbCB7XG4gICAgICAgIHVuc2FmZSB7IGZyb21fZ2xpYihmZmk6Omd0a19maWxlX2RpYWxvZ19nZXRfbW9kYWwoc2VsZi50b19nbGliX25vbmUoKS4wKSkgfVxuICAgIH1cblxuICAgICNbZG9jKGFsaWFzID0gXCJndGtfZmlsZV9kaWFsb2dfZ2V0X3RpdGxlXCIpXVxuICAgICNbZG9jKGFsaWFzID0gXCJnZXRfdGl0bGVcIildXG4gICAgcHViIGZuIHRpdGxlKCZzZWxmKSAtPiBnbGliOjpHU3RyaW5nIHtcbiAgICAgICAgdW5zYWZlIHsgZnJvbV9nbGliX25vbmUoZmZpOjpndGtfZmlsZV9kaWFsb2dfZ2V0X3RpdGxlKHNlbGYudG9fZ2xpYl9ub25lKCkuMCkpIH1cbiAgICB9XG5cbiAgICAjW2RvYyhhbGlhcyA9IFwiZ3RrX2ZpbGVfZGlhbG9nX29wZW5cIildXG4gICAgcHViIGZuIG9wZW48UDogRm5PbmNlKFJlc3VsdDxnaW86OkZpbGUsIGdsaWI6OkVycm9yPikgKyAnc3RhdGljPihcbiAgICAgICAgJnNlbGYsXG4gICAgICAgIHBhcmVudDogT3B0aW9uPCZpbXBsIElzQTxXaW5kb3c+PixcbiAgICAgICAgY2FuY2VsbGFibGU6IE9wdGlvbjwmaW1wbCBJc0E8Z2lvOjpDYW5jZWxsYWJsZT4+LFxuICAgICAgICBjYWxsYmFjazogUCxcbiAgICApIHtcbiAgICAgICAgbGV0IG1haW5fY29udGV4dCA9IGdsaWI6Ok1haW5Db250ZXh0OjpyZWZfdGhyZWFkX2RlZmF1bHQoKTtcbiAgICAgICAgbGV0IGlzX21haW5fY29udGV4dF9vd25lciA9IG1haW5fY29udGV4dC5pc19vd25lcigpO1xuICAgICAgICBsZXQgaGFzX2FjcXVpcmVkX21haW5fY29udGV4dCA9ICghaXNfbWFpbl9jb250ZXh0X293bmVyKVxuICAgICAgICAgICAgLnRoZW4ofHwgbWFpbl9jb250ZXh0LmFjcXVpcmUoKS5vaygpKVxuICAgICAgICAgICAgLmZsYXR0ZW4oKTtcbiAgICAgICAgYXNzZXJ0IShcbiAgICAgICAgICAgIGlzX21haW5fY29udGV4dF9vd25lciB8fCBoYXNfYWNxdWlyZWRfbWFpbl9jb250ZXh0LmlzX3NvbWUoKSxcbiAgICAgICAgICAgIFwiQXN5bmMgb3BlcmF0aW9ucyBvbmx5IGFsbG93ZWQgaWYgdGhlIHRocmVhZCBpcyBvd25pbmcgdGhlIE1haW5Db250ZXh0XCJcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgdXNlcl9kYXRhOiBCb3hfPGdsaWI6OnRocmVhZF9ndWFyZDo6VGhyZWFkR3VhcmQ8UD4+ID1cbiAgICAgICAgICAgIEJveF86Om5ldyhnbGliOjp0aHJlYWRfZ3VhcmQ6OlRocmVhZEd1YXJkOjpuZXcoY2FsbGJhY2spKTtcbiAgICAgICAgdW5zYWZlIGV4dGVybiBcIkNcIiBmbiBvcGVuX3RyYW1wb2xpbmU8XG4gICAgICAgICAgICBQOiBGbk9uY2UoUmVzdWx0PGdpbzo6RmlsZSwgZ2xpYjo6RXJyb3I+KSArICdzdGF0aWMsXG4gICAgICAgID4oXG4gICAgICAgICAgICBfc291cmNlX29iamVjdDogKm11dCBnbGliOjpnb2JqZWN0X2ZmaTo6R09iamVjdCxcbiAgICAgICAgICAgIHJlczogKm11dCBnaW86OmZmaTo6R0FzeW5jUmVzdWx0LFxuICAgICAgICAgICAgdXNlcl9kYXRhOiBnbGliOjpmZmk6Omdwb2ludGVyLFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCBtdXQgZXJyb3IgPSBzdGQ6OnB0cjo6bnVsbF9tdXQoKTtcbiAgICAgICAgICAgIGxldCByZXQgPSBmZmk6Omd0a19maWxlX2RpYWxvZ19vcGVuX2ZpbmlzaChfc291cmNlX29iamVjdCBhcyAqbXV0IF8sIHJlcywgJm11dCBlcnJvcik7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gaWYgZXJyb3IuaXNfbnVsbCgpIHtcbiAgICAgICAgICAgICAgICBPayhmcm9tX2dsaWJfZnVsbChyZXQpKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBFcnIoZnJvbV9nbGliX2Z1bGwoZXJyb3IpKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCBjYWxsYmFjazogQm94XzxnbGliOjp0aHJlYWRfZ3VhcmQ6OlRocmVhZEd1YXJkPFA+PiA9XG4gICAgICAgICAgICAgICAgQm94Xzo6ZnJvbV9yYXcodXNlcl9kYXRhIGFzICptdXQgXyk7XG4gICAgICAgICAgICBsZXQgY2FsbGJhY2s6IFAgPSBjYWxsYmFjay5pbnRvX2lubmVyKCk7XG4gICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjYWxsYmFjayA9IG9wZW5fdHJhbXBvbGluZTo6PFA+O1xuICAgICAgICB1bnNhZmUge1xuICAgICAgICAgICAgZmZpOjpndGtfZmlsZV9kaWFsb2dfb3BlbihcbiAgICAgICAgICAgICAgICBzZWxmLnRvX2dsaWJfbm9uZSgpLjAsXG4gICAgICAgICAgICAgICAgcGFyZW50Lm1hcCh8cHwgcC5hc19yZWYoKSkudG9fZ2xpYl9ub25lKCkuMCxcbiAgICAgICAgICAgICAgICBjYW5jZWxsYWJsZS5tYXAofHB8IHAuYXNfcmVmKCkpLnRvX2dsaWJfbm9uZSgpLjAsXG4gICAgICAgICAgICAgICAgU29tZShjYWxsYmFjayksXG4gICAgICAgICAgICAgICAgQm94Xzo6aW50b19yYXcodXNlcl9kYXRhKSBhcyAqbXV0IF8sXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHViIGZuIG9wZW5fZnV0dXJlKFxuICAgICAgICAmc2VsZixcbiAgICAgICAgcGFyZW50OiBPcHRpb248JihpbXBsIElzQTxXaW5kb3c+ICsgQ2xvbmUgKyAnc3RhdGljKT4sXG4gICAgKSAtPiBQaW48Qm94XzxkeW4gc3RkOjpmdXR1cmU6OkZ1dHVyZTxPdXRwdXQgPSBSZXN1bHQ8Z2lvOjpGaWxlLCBnbGliOjpFcnJvcj4+ICsgJ3N0YXRpYz4+IHtcbiAgICAgICAgbGV0IHBhcmVudCA9IHBhcmVudC5tYXAoVG9Pd25lZDo6dG9fb3duZWQpO1xuICAgICAgICBCb3hfOjpwaW4oZ2lvOjpHaW9GdXR1cmU6Om5ldyhzZWxmLCBtb3ZlIHxvYmosIGNhbmNlbGxhYmxlLCBzZW5kfCB7XG4gICAgICAgICAgICBvYmoub3BlbihcbiAgICAgICAgICAgICAgICBwYXJlbnQuYXNfcmVmKCkubWFwKDo6c3RkOjpib3Jyb3c6OkJvcnJvdzo6Ym9ycm93KSxcbiAgICAgICAgICAgICAgICBTb21lKGNhbmNlbGxhYmxlKSxcbiAgICAgICAgICAgICAgICBtb3ZlIHxyZXN8IHtcbiAgICAgICAgICAgICAgICAgICAgc2VuZC5yZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pKVxuICAgIH1cblxuICAgICNbZG9jKGFsaWFzID0gXCJndGtfZmlsZV9kaWFsb2dfb3Blbl9tdWx0aXBsZVwiKV1cbiAgICBwdWIgZm4gb3Blbl9tdWx0aXBsZTxQOiBGbk9uY2UoUmVzdWx0PGdpbzo6TGlzdE1vZGVsLCBnbGliOjpFcnJvcj4pICsgJ3N0YXRpYz4oXG4gICAgICAgICZzZWxmLFxuICAgICAgICBwYXJlbnQ6IE9wdGlvbjwmaW1wbCBJc0E8V2luZG93Pj4sXG4gICAgICAgIGNhbmNlbGxhYmxlOiBPcHRpb248JmltcGwgSXNBPGdpbzo6Q2FuY2VsbGFibGU+PixcbiAgICAgICAgY2FsbGJhY2s6IFAsXG4gICAgKSB7XG4gICAgICAgIGxldCBtYWluX2NvbnRleHQgPSBnbGliOjpNYWluQ29udGV4dDo6cmVmX3RocmVhZF9kZWZhdWx0KCk7XG4gICAgICAgIGxldCBpc19tYWluX2NvbnRleHRfb3duZXIgPSBtYWluX2NvbnRleHQuaXNfb3duZXIoKTtcbiAgICAgICAgbGV0IGhhc19hY3F1aXJlZF9tYWluX2NvbnRleHQgPSAoIWlzX21haW5fY29udGV4dF9vd25lcilcbiAgICAgICAgICAgIC50aGVuKHx8IG1haW5fY29udGV4dC5hY3F1aXJlKCkub2soKSlcbiAgICAgICAgICAgIC5mbGF0dGVuKCk7XG4gICAgICAgIGFzc2VydCEoXG4gICAgICAgICAgICBpc19tYWluX2NvbnRleHRfb3duZXIgfHwgaGFzX2FjcXVpcmVkX21haW5fY29udGV4dC5pc19zb21lKCksXG4gICAgICAgICAgICBcIkFzeW5jIG9wZXJhdGlvbnMgb25seSBhbGxvd2VkIGlmIHRoZSB0aHJlYWQgaXMgb3duaW5nIHRoZSBNYWluQ29udGV4dFwiXG4gICAgICAgICk7XG5cbls4OTYgbW9yZSBsaW5lcyBpbiBmaWxlLiBVc2Ugb2Zmc2V0PTE4MSB0byBjb250aW51ZS5dIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg4NzAxMjM3fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYTk3OTA2N2MiLCJwYXJlbnRJZCI6ImNkMTQ3OTY4IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMTo0NS4yNzJaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlNhdmluZyBkaWdpdGFsIHNpZ25hdHVyZXMqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNDFmOWZkMDgxOTFiYThkMGVjOGYwMDczY2VlXCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNUWdYVDZtRVQyc1NzeXZOQThQNWg4TUxpc1lJZTJnT3NDaEJ3RVVpUVFRUUJ6Y0FhaFRLeU5qWjZEOVB6ajlwc1E2N1RfVkU5OWVoWWkxSVJtZzRhRmJxZk5fZEppMHE1Y0daUkQ2LXVQdnZCWTVITEdtWWRieS1lRlo0MVpLdFhQS3QzOG9zUkh4SHZZZC15VzJEeGs1WWd3cThFZXdwVHZHSFpTZmx2aUpTNXUxT3A5M0NDX3JjeEpILS1neHdwVXFaWHlXdi1DRDEyZHhlMDNPSDNtQTBBdHpuVkl6d0JOVENpUndsdUdHYzFlcnFSMUF3SWdoMXVtUmxYVnl2ZXl0T01LMVBKMTJtX2pEdXdIc3hyY0NGWUhrblItUUVPYmJkVkRzQjE2bTlRb1dHLW5HNHhVdXZnRUR0QmZISjRqQnJCTWFYNG94RUZRS2tVbTRXNTBOa0cybVhFUkZ6X1pacWE4WGI5aDBfVV9pb2JNM0xBdTZ4aHJCVFJvaG9YdkxOSnI2cWFZM2lRdHNBbTNOTHBiTzFLcUNRVzl5VnVkSW0yTWJ5YVlhdDhVTXlxTk9DUURWNE9Qd3V0ZmtGSlVwZzNHMkMtOXc0dmRzb25oaGRFN0d3ckdyRjA4UG9fRFNVUnJBNVJKQ0tURHd4am5tLU5WVVY0UTRKWXRkTFRlY3BMWDZ0S1RuZjZvQ1hyYUFpMWp2NzBQRXBQU2hNX2tDanhwMl9qbWVlbU5sV3BtQXRjazlNZ00wVmdZdGw2NV9TOHBQTk5nMkQxOG92SVRIMjlBRkdFTy1JSHE3REpETEliRVhteHhpOFNORVd3cnJDLUdmOHFqaHpDbUg0WEVZZVVWWHVzTUo4YXM3MWRVQmZIM2NnTmNWMDItamUzVkRyZVZPdGRNYWFWUEJMY3E3dHJ6c21tM3Vyb1hsOE1kWlF2UjRLMlcxWTkxOGpWRFc0LUE4MzMyVTdkbWhuUFdGMDE2anpQLUhQMVYyVUFvcDQzVU1CenQyVHlDamlYVTd1OVJtSmhTR2Z2c3MySVZkOG56WDE0SUJib3JNVkFoSFdZbGlJaXZHekhMVnBWbG1acDlXMk45bER1cmNncXZLbzB3V19CclNJOEp2dTBZbzdUY1lIMnVhcWphdHlreGU4UC1MR0VCaFdwa3BhTUhSLXpiaDlaNE03eXNUQWQtRjRDQ180QXpYN0Njb0ZyaGVnMjJLbGFuRldIczFyTXNMcVRFZmpPTkNjSmVic2hQdjliRDEwbEFualJwTm1MT19cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlNhdmluZyBkaWdpdGFsIHNpZ25hdHVyZXMqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfMDQ0R3k0UExnczVmdkljd29hZkZ0Y0M3fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNDIwNDIwYzgxOTFiOGI4YTg4NDAwZGM2MGM3IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6InJnIC1uICdwdWIgZm4gc2F2ZXxwdWIgZm4gaW5pdGlhbF9uYW1lfHB1YiBmbiBhY2NlcHRfbGFiZWx8cHViIGZuIHRpdGxlJyB+Ly5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvKi9ndGs0LTAuMTAuMy9zcmMvYXV0by9maWxlX2RpYWxvZy5ycyB8IHRhaWwgLTIwIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoyMzQ0LCJvdXRwdXQiOjc2LCJjYWNoZVJlYWQiOjMxMjMyLCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjcsInRvdGFsVG9rZW5zIjozMzY1MiwiY29zdCI6eyJpbnB1dCI6MC4wMTE3MjAwMDAwMDAwMDAwMDEsIm91dHB1dCI6MC4wMDIyOCwiY2FjaGVSZWFkIjowLjAxNTYxNiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDI5NjE2MDAwMDAwMDAwMDAzfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg4NzAxMjM4LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzQxZDkxYTQ4MTkxYWU0MTQxMzNhODhjNDUyYiJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIzODE3MDljNCIsInBhcmVudElkIjoiYTk3OTA2N2MiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjExOjQ1LjI3OFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfMDQ0R3k0UExnczVmdkljd29hZkZ0Y0M3fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNDIwNDIwYzgxOTFiOGI4YTg4NDAwZGM2MGM3IiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiNDA6ICAgIHB1YiBmbiBhY2NlcHRfbGFiZWwoJnNlbGYpIC0+IE9wdGlvbjxnbGliOjpHU3RyaW5nPiB7XG44MjogICAgcHViIGZuIGluaXRpYWxfbmFtZSgmc2VsZikgLT4gT3B0aW9uPGdsaWI6OkdTdHJpbmc+IHtcbjk1OiAgICBwdWIgZm4gdGl0bGUoJnNlbGYpIC0+IGdsaWI6OkdTdHJpbmcge1xuNDAxOiAgICBwdWIgZm4gc2F2ZTxQOiBGbk9uY2UoUmVzdWx0PGdpbzo6RmlsZSwgZ2xpYjo6RXJyb3I+KSArICdzdGF0aWM+KFxuNDUwOiAgICBwdWIgZm4gc2F2ZV9mdXR1cmUoXG40Njk6ICAgIHB1YiBmbiBzYXZlX3RleHRfZmlsZTxcbjUzNDogICAgcHViIGZuIHNhdmVfdGV4dF9maWxlX2Z1dHVyZShcbjEwMDA6ICAgIHB1YiBmbiBhY2NlcHRfbGFiZWwoc2VsZiwgYWNjZXB0X2xhYmVsOiBpbXBsIEludG88Z2xpYjo6R1N0cmluZz4pIC0+IFNlbGYge1xuMTA0NjogICAgcHViIGZuIGluaXRpYWxfbmFtZShzZWxmLCBpbml0aWFsX25hbWU6IGltcGwgSW50bzxnbGliOjpHU3RyaW5nPikgLT4gU2VsZiB7XG4xMDYyOiAgICBwdWIgZm4gdGl0bGUoc2VsZiwgdGl0bGU6IGltcGwgSW50bzxnbGliOjpHU3RyaW5nPikgLT4gU2VsZiB7XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODg3MDUyNzh9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI5ZWQ1MDZjNCIsInBhcmVudElkIjoiMzgxNzA5YzQiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjEyOjA1LjAxOVoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqUmVwbGFjaW5nIGNodW5rcyBhbmQgcmVmaW5pbmcgZmlsdGVyaW5nKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzQyMjlmZjA4MTkxOTg5YjhjMTI4NDAxYTBjOFwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTVFrXzhqbk5fR3lkWGZQbVMzbnh0UDFhOEpGNDk3aTV5VjZLX2ZhcE5YbHhmSUZiT0wtSGxkb1Rqb1UwVmtLVTNIekxESmMybmpTQlZkWEFjYUJDM3hodkJ5QkV5Ykl6M3Q4WDZtVTJGaVpLa25CcFJ3ODFQRWJRaFBRdk9oZlZhOGppV3FlWVFaU0JBRE1jVWJFaUs1am02TXFXM0NOSDBvOHdhMzRsb1hUQ1ZsRnQtcV96V0ctYUpvb2pkWlRkVmFaWXRxdGlzeVhaNVVXMk40WXdpdE9nVEtOaFI0LWYwWnVsZnhmOTRUOWxnbWpodDJYa2tPOXFwSVVxVi1IcmE4VUdlVkxQRkZlcWREdkdGcWtlSzgtdlQyV2kyVjcxd0pKN21GLVlhYnhwVlVBdkphMzFNY0o5Qk8ySDB5RFN1a05xSFpBMUgtd1h6MG40d0FWdmVLbl9DaWx3Z2dDNUJEN3Zja3o1cEtaS3E0QWlCUVBhVEpkV0tFV1VFSWVUeUlGTDNiVGpJcEV3MV9VTGVzS3IzX0p5dFcwQVZLODVpek10aHBlbDNnQXUwZll0VUY0SEhtRnYxbE8zbk1hOVVsdDlFYi15WkQ5TkF2X3NtamUxWDJpMkNIcnNkY0J1dEZ6Z3c1UEFobHlmTDdDWjFNSktzOF9ZS2F6V0Ric2hLTGlpTUhtaEpIZ1Utc3lmdE9zMTdLXzZkdUllQjdWOE5YRFFVaGo3YTlvQjhnVzExd25Vekl4elNQSmtjZjFoRDVmR0xkS2FQR0xrTmNMN05EUUxKU1BrUFhaY1ppWm12YUdENjdkcXZKdjg0MDR3dlBUV0Y3VUZjYU9DN2lOOTRzVlV5SzdtOG50SmtmNjVSVWxTN1lJUXRuazVEd242clVSbE5LZnZFcG5FRXFCOFJ0RWF2Q0NZWll0UFF2XzZjWlhFVEt5ZGFuaW1mb1JLdEF4OXo1RHhaa0hRS2RvYjVEWS15VFYxSUdUOGlCa0hjZjZDLVZSZHE0Zk1jeWktR2NEVi14RXllNkF3YzIzVmkxT3NBbFh5MzNGdmswS1p6SlJ6X21fQ2FMSFhvN1lkQm1xcTJtRTNPcHNkZzl4TWJ5N3hxaHVxU3RxWUl6TU9IRDhjTnpYY2dlWEltWU1tLVIyRVpQaUxzYXFFeXFleUZNMGl0M2J1YVkyaHVlSEJPaU8xQ3R1M1Z2c3B6SzlsVjZNcE5XSzlGb25HbVpteTJLZlM5VWgwTC03bTVST1NkbmVsX2h2djNJaExicXVtNU5wZWpUZ1dyNkxucUFDbHNkM0VVdGxsdVBsNWpmNnVEc2JWekNIemZiNjNSaW54a1FjejA1M202LWk1ZlhJQW0tS3d2TTR1aDV6MGozc3g4SDNOd2RiWXFKMF9CbFNOS2VrLW1ERFF1cEhIZlU9XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipSZXBsYWNpbmcgY2h1bmtzIGFuZCByZWZpbmluZyBmaWx0ZXJpbmcqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfS2pTZTBpbjBwbFdNY1VLY1Z6WXpTeVEwfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNDI0MDI2NDgxOTFiMjU5NzI2YjU5NzIzMWQ4IiwibmFtZSI6ImVkaXQiLCJhcmd1bWVudHMiOnsicGF0aCI6InNyYy9tYWluLnJzIiwiZWRpdHMiOlt7Im9sZFRleHQiOiIgICAgICAgICAgICBsZXQgY2hvb3NlciA9IGd0azo6RmlsZUNob29zZXJOYXRpdmU6OmJ1aWxkZXIoKVxuICAgICAgICAgICAgICAgIC50aXRsZShcIkNob29zZSBJbnN0YWxsYXRpb24gU291cmNlXCIpXG4gICAgICAgICAgICAgICAgLnRyYW5zaWVudF9mb3IoJndpbmRvdylcbiAgICAgICAgICAgICAgICAuYWN0aW9uKGd0azo6RmlsZUNob29zZXJBY3Rpb246Ok9wZW4pXG4gICAgICAgICAgICAgICAgLmFjY2VwdF9sYWJlbChcIlNlbGVjdFwiKVxuICAgICAgICAgICAgICAgIC5jYW5jZWxfbGFiZWwoXCJDYW5jZWxcIilcbiAgICAgICAgICAgICAgICAuYnVpbGQoKTtcbiAgICAgICAgICAgIGxldCByb3cgPSByb3cuY2xvbmUoKTtcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgYm9hcmRfcm93ID0gYm9hcmRfcm93LmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgZHJpdmVfcm93ID0gZHJpdmVfcm93LmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgc3RhcnRfYnV0dG9uID0gc3RhcnRfYnV0dG9uLmNsb25lKCk7XG4gICAgICAgICAgICBjaG9vc2VyLmNvbm5lY3RfcmVzcG9uc2UobW92ZSB8ZGlhbG9nLCByZXNwb25zZXwge1xuICAgICAgICAgICAgICAgIGlmIHJlc3BvbnNlID09IGd0azo6UmVzcG9uc2VUeXBlOjpBY2NlcHRcbiAgICAgICAgICAgICAgICAgICAgJiYgbGV0IFNvbWUocGF0aCkgPSBkaWFsb2cuZmlsZSgpLmFuZF90aGVuKHxmfCBmLnBhdGgoKSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5zZXRfdGl0bGUoJmRpc3BsYXlfbmFtZSgmcGF0aCkpO1xuICAgICAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKHBhdGgucGFyZW50KCkuYW5kX3RoZW4oUGF0aDo6dG9fc3RyKS51bndyYXBfb3IoXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5ib3Jyb3dfbXV0KCkuc291cmNlID0gU29tZShwYXRoLmRpc3BsYXkoKS50b19zdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9zdGFydCgmc3RhcnRfYnV0dG9uLCAmc3RhdGUsICZib2FyZF9yb3csICZkcml2ZV9yb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjaG9vc2VyLnNob3coKTsiLCJuZXdUZXh0IjoiICAgICAgICAgICAgbGV0IGNob29zZXIgPSBndGs6OkZpbGVEaWFsb2c6OmJ1aWxkZXIoKVxuICAgICAgICAgICAgICAgIC50aXRsZShcIkNob29zZSBJbnN0YWxsYXRpb24gU291cmNlXCIpXG4gICAgICAgICAgICAgICAgLmFjY2VwdF9sYWJlbChcIlNlbGVjdFwiKVxuICAgICAgICAgICAgICAgIC5tb2RhbCh0cnVlKVxuICAgICAgICAgICAgICAgIC5idWlsZCgpO1xuICAgICAgICAgICAgbGV0IHJvdyA9IHJvdy5jbG9uZSgpO1xuICAgICAgICAgICAgbGV0IHN0YXRlID0gc3RhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgIGxldCBib2FyZF9yb3cgPSBib2FyZF9yb3cuY2xvbmUoKTtcbiAgICAgICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgICAgIGxldCBzdGFydF9idXR0b24gPSBzdGFydF9idXR0b24uY2xvbmUoKTtcbiAgICAgICAgICAgIGNob29zZXIub3BlbihTb21lKCZ3aW5kb3cpLCBndGs6Omdpbzo6Q2FuY2VsbGFibGU6Ok5PTkUsIG1vdmUgfHJlc3VsdHwge1xuICAgICAgICAgICAgICAgIGlmIGxldCBTb21lKHBhdGgpID0gcmVzdWx0Lm9rKCkuYW5kX3RoZW4ofGZpbGV8IGZpbGUucGF0aCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5zZXRfdGl0bGUoJmRpc3BsYXlfbmFtZSgmcGF0aCkpO1xuICAgICAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKHBhdGgucGFyZW50KCkuYW5kX3RoZW4oUGF0aDo6dG9fc3RyKS51bndyYXBfb3IoXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5ib3Jyb3dfbXV0KCkuc291cmNlID0gU29tZShwYXRoLmRpc3BsYXkoKS50b19zdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9zdGFydCgmc3RhcnRfYnV0dG9uLCAmc3RhdGUsICZib2FyZF9yb3csICZkcml2ZV9yb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pOyJ9LHsib2xkVGV4dCI6IiAgICAgICAgICAgIGxldCBjaG9vc2VyID0gZ3RrOjpGaWxlQ2hvb3Nlck5hdGl2ZTo6YnVpbGRlcigpXG4gICAgICAgICAgICAgICAgLnRpdGxlKFwiQ3JlYXRlIERpc2sgSW1hZ2VcIilcbiAgICAgICAgICAgICAgICAudHJhbnNpZW50X2Zvcigmd2luZG93KVxuICAgICAgICAgICAgICAgIC5hY3Rpb24oZ3RrOjpGaWxlQ2hvb3NlckFjdGlvbjo6U2F2ZSlcbiAgICAgICAgICAgICAgICAuYWNjZXB0X2xhYmVsKFwiU2VsZWN0XCIpXG4gICAgICAgICAgICAgICAgLmNhbmNlbF9sYWJlbChcIkNhbmNlbFwiKVxuICAgICAgICAgICAgICAgIC5idWlsZCgpO1xuICAgICAgICAgICAgY2hvb3Nlci5zZXRfY3VycmVudF9uYW1lKFwiYWx0LWxpbnV4LmltZ1wiKTtcbiAgICAgICAgICAgIGxldCByb3cgPSByb3cuY2xvbmUoKTtcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgYm9hcmRfcm93ID0gYm9hcmRfcm93LmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgZHJpdmVfcm93ID0gZHJpdmVfcm93LmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgc3RhcnRfYnV0dG9uID0gc3RhcnRfYnV0dG9uLmNsb25lKCk7XG4gICAgICAgICAgICBjaG9vc2VyLmNvbm5lY3RfcmVzcG9uc2UobW92ZSB8ZGlhbG9nLCByZXNwb25zZXwge1xuICAgICAgICAgICAgICAgIGlmIHJlc3BvbnNlID09IGd0azo6UmVzcG9uc2VUeXBlOjpBY2NlcHRcbiAgICAgICAgICAgICAgICAgICAgJiYgbGV0IFNvbWUocGF0aCkgPSBkaWFsb2cuZmlsZSgpLmFuZF90aGVuKHxmfCBmLnBhdGgoKSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJvdy5zZXRfdGl0bGUoJmRpc3BsYXlfbmFtZSgmcGF0aCkpO1xuICAgICAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKHBhdGgucGFyZW50KCkuYW5kX3RoZW4oUGF0aDo6dG9fc3RyKS51bndyYXBfb3IoXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5ib3Jyb3dfbXV0KCkub3V0cHV0X2ZpbGUgPSBTb21lKHBhdGguZGlzcGxheSgpLnRvX3N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3N0YXJ0KCZzdGFydF9idXR0b24sICZzdGF0ZSwgJmJvYXJkX3JvdywgJmRyaXZlX3Jvdyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNob29zZXIuc2hvdygpOyIsIm5ld1RleHQiOiIgICAgICAgICAgICBsZXQgY2hvb3NlciA9IGd0azo6RmlsZURpYWxvZzo6YnVpbGRlcigpXG4gICAgICAgICAgICAgICAgLnRpdGxlKFwiQ3JlYXRlIERpc2sgSW1hZ2VcIilcbiAgICAgICAgICAgICAgICAuYWNjZXB0X2xhYmVsKFwiU2VsZWN0XCIpXG4gICAgICAgICAgICAgICAgLmluaXRpYWxfbmFtZShcImFsdC1saW51eC5pbWdcIilcbiAgICAgICAgICAgICAgICAubW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICAuYnVpbGQoKTtcbiAgICAgICAgICAgIGxldCByb3cgPSByb3cuY2xvbmUoKTtcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgYm9hcmRfcm93ID0gYm9hcmRfcm93LmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgZHJpdmVfcm93ID0gZHJpdmVfcm93LmNsb25lKCk7XG4gICAgICAgICAgICBsZXQgc3RhcnRfYnV0dG9uID0gc3RhcnRfYnV0dG9uLmNsb25lKCk7XG4gICAgICAgICAgICBjaG9vc2VyLnNhdmUoU29tZSgmd2luZG93KSwgZ3RrOjpnaW86OkNhbmNlbGxhYmxlOjpOT05FLCBtb3ZlIHxyZXN1bHR8IHtcbiAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShwYXRoKSA9IHJlc3VsdC5vaygpLmFuZF90aGVuKHxmaWxlfCBmaWxlLnBhdGgoKSkge1xuICAgICAgICAgICAgICAgICAgICByb3cuc2V0X3RpdGxlKCZkaXNwbGF5X25hbWUoJnBhdGgpKTtcbiAgICAgICAgICAgICAgICAgICAgcm93LnNldF9zdWJ0aXRsZShwYXRoLnBhcmVudCgpLmFuZF90aGVuKFBhdGg6OnRvX3N0cikudW53cmFwX29yKFwiXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYm9ycm93X211dCgpLm91dHB1dF9maWxlID0gU29tZShwYXRoLmRpc3BsYXkoKS50b19zdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZV9zdGFydCgmc3RhcnRfYnV0dG9uLCAmc3RhdGUsICZib2FyZF9yb3csICZkcml2ZV9yb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pOyJ9XX19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0Ijo1NTksIm91dHB1dCI6MTAxNSwiY2FjaGVSZWFkIjozMzI4MCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoyMywidG90YWxUb2tlbnMiOjM0ODU0LCJjb3N0Ijp7ImlucHV0IjowLjAwMjc5NSwib3V0cHV0IjowLjAzMDQ1LCJjYWNoZVJlYWQiOjAuMDE2NjQsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA0OTg4NX19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4ODcwNTI3OSwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM0MjE5ZTY0ODE5MTgyMjc1NDE2MzY4ZjEyMjEifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZjYxNTk3YTgiLCJwYXJlbnRJZCI6IjllZDUwNmM0IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMjowNS4wMjRaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX0tqU2UwaW4wcGxXTWNVS2NWell6U3lRMHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzQyNDAyNjQ4MTkxYjI1OTcyNmI1OTcyMzFkOCIsInRvb2xOYW1lIjoiZWRpdCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IlN1Y2Nlc3NmdWxseSByZXBsYWNlZCAyIGJsb2NrKHMpIGluIHNyYy9tYWluLnJzLiJ9XSwiZGV0YWlscyI6eyJkaWZmIjoiICAgICAuLi5cbiAyNzcgICAgICAgICBsZXQgYm9hcmRfcm93ID0gYm9hcmRfcm93LmNsb25lKCk7XG4gMjc4ICAgICAgICAgbGV0IGRyaXZlX3JvdyA9IGRyaXZlX3Jvdy5jbG9uZSgpO1xuIDI3OSAgICAgICAgIGxldCBzdGFydF9idXR0b24gPSBzdGFydF9idXR0b24uY2xvbmUoKTtcbiAyODAgICAgICAgICBzb3VyY2VfY2hvb3NlLmNvbm5lY3RfY2xpY2tlZChtb3ZlIHxffCB7XG4tMjgxICAgICAgICAgICAgIGxldCBjaG9vc2VyID0gZ3RrOjpGaWxlQ2hvb3Nlck5hdGl2ZTo6YnVpbGRlcigpXG4rMjgxICAgICAgICAgICAgIGxldCBjaG9vc2VyID0gZ3RrOjpGaWxlRGlhbG9nOjpidWlsZGVyKClcbiAyODIgICAgICAgICAgICAgICAgIC50aXRsZShcIkNob29zZSBJbnN0YWxsYXRpb24gU291cmNlXCIpXG4tMjgzICAgICAgICAgICAgICAgICAudHJhbnNpZW50X2Zvcigmd2luZG93KVxuLTI4NCAgICAgICAgICAgICAgICAgLmFjdGlvbihndGs6OkZpbGVDaG9vc2VyQWN0aW9uOjpPcGVuKVxuIDI4NSAgICAgICAgICAgICAgICAgLmFjY2VwdF9sYWJlbChcIlNlbGVjdFwiKVxuLTI4NiAgICAgICAgICAgICAgICAgLmNhbmNlbF9sYWJlbChcIkNhbmNlbFwiKVxuKzI4NCAgICAgICAgICAgICAgICAgLm1vZGFsKHRydWUpXG4gMjg3ICAgICAgICAgICAgICAgICAuYnVpbGQoKTtcbiAyODggICAgICAgICAgICAgbGV0IHJvdyA9IHJvdy5jbG9uZSgpO1xuIDI4OSAgICAgICAgICAgICBsZXQgc3RhdGUgPSBzdGF0ZS5jbG9uZSgpO1xuIDI5MCAgICAgICAgICAgICBsZXQgYm9hcmRfcm93ID0gYm9hcmRfcm93LmNsb25lKCk7XG4gMjkxICAgICAgICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAyOTIgICAgICAgICAgICAgbGV0IHN0YXJ0X2J1dHRvbiA9IHN0YXJ0X2J1dHRvbi5jbG9uZSgpO1xuLTI5MyAgICAgICAgICAgICBjaG9vc2VyLmNvbm5lY3RfcmVzcG9uc2UobW92ZSB8ZGlhbG9nLCByZXNwb25zZXwge1xuLTI5NCAgICAgICAgICAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrOjpSZXNwb25zZVR5cGU6OkFjY2VwdFxuLTI5NSAgICAgICAgICAgICAgICAgICAgICYmIGxldCBTb21lKHBhdGgpID0gZGlhbG9nLmZpbGUoKS5hbmRfdGhlbih8ZnwgZi5wYXRoKCkpXG4tMjk2ICAgICAgICAgICAgICAgICB7XG4rMjkxICAgICAgICAgICAgIGNob29zZXIub3BlbihTb21lKCZ3aW5kb3cpLCBndGs6Omdpbzo6Q2FuY2VsbGFibGU6Ok5PTkUsIG1vdmUgfHJlc3VsdHwge1xuKzI5MiAgICAgICAgICAgICAgICAgaWYgbGV0IFNvbWUocGF0aCkgPSByZXN1bHQub2soKS5hbmRfdGhlbih8ZmlsZXwgZmlsZS5wYXRoKCkpIHtcbiAyOTcgICAgICAgICAgICAgICAgICAgICByb3cuc2V0X3RpdGxlKCZkaXNwbGF5X25hbWUoJnBhdGgpKTtcbiAyOTggICAgICAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKHBhdGgucGFyZW50KCkuYW5kX3RoZW4oUGF0aDo6dG9fc3RyKS51bndyYXBfb3IoXCJcIikpO1xuIDI5OSAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmJvcnJvd19tdXQoKS5zb3VyY2UgPSBTb21lKHBhdGguZGlzcGxheSgpLnRvX3N0cmluZygpKTtcbiAzMDAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVfc3RhcnQoJnN0YXJ0X2J1dHRvbiwgJnN0YXRlLCAmYm9hcmRfcm93LCAmZHJpdmVfcm93KTtcbiAzMDEgICAgICAgICAgICAgICAgIH1cbi0zMDIgICAgICAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCk7XG4gMzAzICAgICAgICAgICAgIH0pO1xuLTMwNCAgICAgICAgICAgICBjaG9vc2VyLnNob3coKTtcbiAzMDUgICAgICAgICB9KTtcbiAzMDYgICAgIH1cbiAzMDcgICAgIHtcbiAzMDggICAgICAgICBsZXQgc3RhdGUgPSBzdGF0ZS5jbG9uZSgpO1xuICAgICAuLi5cbiAzNDEgICAgICAgICBsZXQgYm9hcmRfcm93ID0gYm9hcmRfcm93LmNsb25lKCk7XG4gMzQyICAgICAgICAgbGV0IGRyaXZlX3JvdyA9IGRyaXZlX3Jvdy5jbG9uZSgpO1xuIDM0MyAgICAgICAgIGxldCBzdGFydF9idXR0b24gPSBzdGFydF9idXR0b24uY2xvbmUoKTtcbiAzNDQgICAgICAgICBvdXRwdXRfY2hvb3NlLmNvbm5lY3RfY2xpY2tlZChtb3ZlIHxffCB7XG4tMzQ1ICAgICAgICAgICAgIGxldCBjaG9vc2VyID0gZ3RrOjpGaWxlQ2hvb3Nlck5hdGl2ZTo6YnVpbGRlcigpXG4rMzM5ICAgICAgICAgICAgIGxldCBjaG9vc2VyID0gZ3RrOjpGaWxlRGlhbG9nOjpidWlsZGVyKClcbiAzNDYgICAgICAgICAgICAgICAgIC50aXRsZShcIkNyZWF0ZSBEaXNrIEltYWdlXCIpXG4tMzQ3ICAgICAgICAgICAgICAgICAudHJhbnNpZW50X2Zvcigmd2luZG93KVxuLTM0OCAgICAgICAgICAgICAgICAgLmFjdGlvbihndGs6OkZpbGVDaG9vc2VyQWN0aW9uOjpTYXZlKVxuIDM0OSAgICAgICAgICAgICAgICAgLmFjY2VwdF9sYWJlbChcIlNlbGVjdFwiKVxuLTM1MCAgICAgICAgICAgICAgICAgLmNhbmNlbF9sYWJlbChcIkNhbmNlbFwiKVxuKzM0MiAgICAgICAgICAgICAgICAgLmluaXRpYWxfbmFtZShcImFsdC1saW51eC5pbWdcIilcbiszNDMgICAgICAgICAgICAgICAgIC5tb2RhbCh0cnVlKVxuIDM1MSAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XG4tMzUyICAgICAgICAgICAgIGNob29zZXIuc2V0X2N1cnJlbnRfbmFtZShcImFsdC1saW51eC5pbWdcIik7XG4gMzUzICAgICAgICAgICAgIGxldCByb3cgPSByb3cuY2xvbmUoKTtcbiAzNTQgICAgICAgICAgICAgbGV0IHN0YXRlID0gc3RhdGUuY2xvbmUoKTtcbiAzNTUgICAgICAgICAgICAgbGV0IGJvYXJkX3JvdyA9IGJvYXJkX3Jvdy5jbG9uZSgpO1xuIDM1NiAgICAgICAgICAgICBsZXQgZHJpdmVfcm93ID0gZHJpdmVfcm93LmNsb25lKCk7XG4gMzU3ICAgICAgICAgICAgIGxldCBzdGFydF9idXR0b24gPSBzdGFydF9idXR0b24uY2xvbmUoKTtcbi0zNTggICAgICAgICAgICAgY2hvb3Nlci5jb25uZWN0X3Jlc3BvbnNlKG1vdmUgfGRpYWxvZywgcmVzcG9uc2V8IHtcbi0zNTkgICAgICAgICAgICAgICAgIGlmIHJlc3BvbnNlID09IGd0azo6UmVzcG9uc2VUeXBlOjpBY2NlcHRcbi0zNjAgICAgICAgICAgICAgICAgICAgICAmJiBsZXQgU29tZShwYXRoKSA9IGRpYWxvZy5maWxlKCkuYW5kX3RoZW4ofGZ8IGYucGF0aCgpKVxuLTM2MSAgICAgICAgICAgICAgICAge1xuKzM1MCAgICAgICAgICAgICBjaG9vc2VyLnNhdmUoU29tZSgmd2luZG93KSwgZ3RrOjpnaW86OkNhbmNlbGxhYmxlOjpOT05FLCBtb3ZlIHxyZXN1bHR8IHtcbiszNTEgICAgICAgICAgICAgICAgIGlmIGxldCBTb21lKHBhdGgpID0gcmVzdWx0Lm9rKCkuYW5kX3RoZW4ofGZpbGV8IGZpbGUucGF0aCgpKSB7XG4gMzYyICAgICAgICAgICAgICAgICAgICAgcm93LnNldF90aXRsZSgmZGlzcGxheV9uYW1lKCZwYXRoKSk7XG4gMzYzICAgICAgICAgICAgICAgICAgICAgcm93LnNldF9zdWJ0aXRsZShwYXRoLnBhcmVudCgpLmFuZF90aGVuKFBhdGg6OnRvX3N0cikudW53cmFwX29yKFwiXCIpKTtcbiAzNjQgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5ib3Jyb3dfbXV0KCkub3V0cHV0X2ZpbGUgPSBTb21lKHBhdGguZGlzcGxheSgpLnRvX3N0cmluZygpKTtcbiAzNjUgICAgICAgICAgICAgICAgICAgICB1cGRhdGVfc3RhcnQoJnN0YXJ0X2J1dHRvbiwgJnN0YXRlLCAmYm9hcmRfcm93LCAmZHJpdmVfcm93KTtcbiAzNjYgICAgICAgICAgICAgICAgIH1cbi0zNjcgICAgICAgICAgICAgICAgIGRpYWxvZy5kZXN0cm95KCk7XG4gMzY4ICAgICAgICAgICAgIH0pO1xuLTM2OSAgICAgICAgICAgICBjaG9vc2VyLnNob3coKTtcbiAzNzAgICAgICAgICB9KTtcbiAzNzEgICAgIH1cbiAzNzIgICAgIHtcbiAzNzMgICAgICAgICBsZXQgd2luZG93ID0gd2luZG93LmNsb25lKCk7XG4gICAgIC4uLiIsInBhdGNoIjoiLS0tIHNyYy9tYWluLnJzXG4rKysgc3JjL21haW4ucnNcbkBAIC0yNzcsMzIgKzI3NywyNiBAQFxuICAgICAgICAgbGV0IGJvYXJkX3JvdyA9IGJvYXJkX3Jvdy5jbG9uZSgpO1xuICAgICAgICAgbGV0IGRyaXZlX3JvdyA9IGRyaXZlX3Jvdy5jbG9uZSgpO1xuICAgICAgICAgbGV0IHN0YXJ0X2J1dHRvbiA9IHN0YXJ0X2J1dHRvbi5jbG9uZSgpO1xuICAgICAgICAgc291cmNlX2Nob29zZS5jb25uZWN0X2NsaWNrZWQobW92ZSB8X3wge1xuLSAgICAgICAgICAgIGxldCBjaG9vc2VyID0gZ3RrOjpGaWxlQ2hvb3Nlck5hdGl2ZTo6YnVpbGRlcigpXG4rICAgICAgICAgICAgbGV0IGNob29zZXIgPSBndGs6OkZpbGVEaWFsb2c6OmJ1aWxkZXIoKVxuICAgICAgICAgICAgICAgICAudGl0bGUoXCJDaG9vc2UgSW5zdGFsbGF0aW9uIFNvdXJjZVwiKVxuLSAgICAgICAgICAgICAgICAudHJhbnNpZW50X2Zvcigmd2luZG93KVxuLSAgICAgICAgICAgICAgICAuYWN0aW9uKGd0azo6RmlsZUNob29zZXJBY3Rpb246Ok9wZW4pXG4gICAgICAgICAgICAgICAgIC5hY2NlcHRfbGFiZWwoXCJTZWxlY3RcIilcbi0gICAgICAgICAgICAgICAgLmNhbmNlbF9sYWJlbChcIkNhbmNlbFwiKVxuKyAgICAgICAgICAgICAgICAubW9kYWwodHJ1ZSlcbiAgICAgICAgICAgICAgICAgLmJ1aWxkKCk7XG4gICAgICAgICAgICAgbGV0IHJvdyA9IHJvdy5jbG9uZSgpO1xuICAgICAgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgbGV0IGJvYXJkX3JvdyA9IGJvYXJkX3Jvdy5jbG9uZSgpO1xuICAgICAgICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgICAgICBsZXQgc3RhcnRfYnV0dG9uID0gc3RhcnRfYnV0dG9uLmNsb25lKCk7XG4tICAgICAgICAgICAgY2hvb3Nlci5jb25uZWN0X3Jlc3BvbnNlKG1vdmUgfGRpYWxvZywgcmVzcG9uc2V8IHtcbi0gICAgICAgICAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrOjpSZXNwb25zZVR5cGU6OkFjY2VwdFxuLSAgICAgICAgICAgICAgICAgICAgJiYgbGV0IFNvbWUocGF0aCkgPSBkaWFsb2cuZmlsZSgpLmFuZF90aGVuKHxmfCBmLnBhdGgoKSlcbi0gICAgICAgICAgICAgICAge1xuKyAgICAgICAgICAgIGNob29zZXIub3BlbihTb21lKCZ3aW5kb3cpLCBndGs6Omdpbzo6Q2FuY2VsbGFibGU6Ok5PTkUsIG1vdmUgfHJlc3VsdHwge1xuKyAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShwYXRoKSA9IHJlc3VsdC5vaygpLmFuZF90aGVuKHxmaWxlfCBmaWxlLnBhdGgoKSkge1xuICAgICAgICAgICAgICAgICAgICAgcm93LnNldF90aXRsZSgmZGlzcGxheV9uYW1lKCZwYXRoKSk7XG4gICAgICAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKHBhdGgucGFyZW50KCkuYW5kX3RoZW4oUGF0aDo6dG9fc3RyKS51bndyYXBfb3IoXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYm9ycm93X211dCgpLnNvdXJjZSA9IFNvbWUocGF0aC5kaXNwbGF5KCkudG9fc3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3N0YXJ0KCZzdGFydF9idXR0b24sICZzdGF0ZSwgJmJvYXJkX3JvdywgJmRyaXZlX3Jvdyk7XG4gICAgICAgICAgICAgICAgIH1cbi0gICAgICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICB9KTtcbi0gICAgICAgICAgICBjaG9vc2VyLnNob3coKTtcbiAgICAgICAgIH0pO1xuICAgICB9XG4gICAgIHtcbiAgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG5AQCAtMzQxLDMzICszMzUsMjcgQEBcbiAgICAgICAgIGxldCBib2FyZF9yb3cgPSBib2FyZF9yb3cuY2xvbmUoKTtcbiAgICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgIGxldCBzdGFydF9idXR0b24gPSBzdGFydF9idXR0b24uY2xvbmUoKTtcbiAgICAgICAgIG91dHB1dF9jaG9vc2UuY29ubmVjdF9jbGlja2VkKG1vdmUgfF98IHtcbi0gICAgICAgICAgICBsZXQgY2hvb3NlciA9IGd0azo6RmlsZUNob29zZXJOYXRpdmU6OmJ1aWxkZXIoKVxuKyAgICAgICAgICAgIGxldCBjaG9vc2VyID0gZ3RrOjpGaWxlRGlhbG9nOjpidWlsZGVyKClcbiAgICAgICAgICAgICAgICAgLnRpdGxlKFwiQ3JlYXRlIERpc2sgSW1hZ2VcIilcbi0gICAgICAgICAgICAgICAgLnRyYW5zaWVudF9mb3IoJndpbmRvdylcbi0gICAgICAgICAgICAgICAgLmFjdGlvbihndGs6OkZpbGVDaG9vc2VyQWN0aW9uOjpTYXZlKVxuICAgICAgICAgICAgICAgICAuYWNjZXB0X2xhYmVsKFwiU2VsZWN0XCIpXG4tICAgICAgICAgICAgICAgIC5jYW5jZWxfbGFiZWwoXCJDYW5jZWxcIilcbisgICAgICAgICAgICAgICAgLmluaXRpYWxfbmFtZShcImFsdC1saW51eC5pbWdcIilcbisgICAgICAgICAgICAgICAgLm1vZGFsKHRydWUpXG4gICAgICAgICAgICAgICAgIC5idWlsZCgpO1xuLSAgICAgICAgICAgIGNob29zZXIuc2V0X2N1cnJlbnRfbmFtZShcImFsdC1saW51eC5pbWdcIik7XG4gICAgICAgICAgICAgbGV0IHJvdyA9IHJvdy5jbG9uZSgpO1xuICAgICAgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgbGV0IGJvYXJkX3JvdyA9IGJvYXJkX3Jvdy5jbG9uZSgpO1xuICAgICAgICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgICAgICBsZXQgc3RhcnRfYnV0dG9uID0gc3RhcnRfYnV0dG9uLmNsb25lKCk7XG4tICAgICAgICAgICAgY2hvb3Nlci5jb25uZWN0X3Jlc3BvbnNlKG1vdmUgfGRpYWxvZywgcmVzcG9uc2V8IHtcbi0gICAgICAgICAgICAgICAgaWYgcmVzcG9uc2UgPT0gZ3RrOjpSZXNwb25zZVR5cGU6OkFjY2VwdFxuLSAgICAgICAgICAgICAgICAgICAgJiYgbGV0IFNvbWUocGF0aCkgPSBkaWFsb2cuZmlsZSgpLmFuZF90aGVuKHxmfCBmLnBhdGgoKSlcbi0gICAgICAgICAgICAgICAge1xuKyAgICAgICAgICAgIGNob29zZXIuc2F2ZShTb21lKCZ3aW5kb3cpLCBndGs6Omdpbzo6Q2FuY2VsbGFibGU6Ok5PTkUsIG1vdmUgfHJlc3VsdHwge1xuKyAgICAgICAgICAgICAgICBpZiBsZXQgU29tZShwYXRoKSA9IHJlc3VsdC5vaygpLmFuZF90aGVuKHxmaWxlfCBmaWxlLnBhdGgoKSkge1xuICAgICAgICAgICAgICAgICAgICAgcm93LnNldF90aXRsZSgmZGlzcGxheV9uYW1lKCZwYXRoKSk7XG4gICAgICAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKHBhdGgucGFyZW50KCkuYW5kX3RoZW4oUGF0aDo6dG9fc3RyKS51bndyYXBfb3IoXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYm9ycm93X211dCgpLm91dHB1dF9maWxlID0gU29tZShwYXRoLmRpc3BsYXkoKS50b19zdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICB1cGRhdGVfc3RhcnQoJnN0YXJ0X2J1dHRvbiwgJnN0YXRlLCAmYm9hcmRfcm93LCAmZHJpdmVfcm93KTtcbiAgICAgICAgICAgICAgICAgfVxuLSAgICAgICAgICAgICAgICBkaWFsb2cuZGVzdHJveSgpO1xuICAgICAgICAgICAgIH0pO1xuLSAgICAgICAgICAgIGNob29zZXIuc2hvdygpO1xuICAgICAgICAgfSk7XG4gICAgIH1cbiAgICAge1xuICAgICAgICAgbGV0IHdpbmRvdyA9IHdpbmRvdy5jbG9uZSgpO1xuIiwiZmlyc3RDaGFuZ2VkTGluZSI6MjgxfSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4ODcyNTAyNH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImJiMTI1NWU1IiwicGFyZW50SWQiOiJmNjE1OTdhOCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MTI6MTEuOTQwWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipWZXJpZnlpbmcgY29uZmlnIGluY3JlbWVudCBzcGVlZCoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM0Mzg5ZWQ4ODE5MWJlZDQ4NDJjNGJlYjY3YTlcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1RNXYzNVhvVlR5WE11NnE1QlNoWWJyWTM4WWl4OXFBT3R6OGFLcmFpV2YtUWlkUXMxRll1X2hZV29ZTkRWQ3ExWHZQX2d4SzJJN1dHSmZsOHFQTTZwRWZIZGpiQWhtdk5zMjFjZmcxQ193bVEtdVRDOTlOUXFNd2VXSWpxb2dVdjhvQUhUek5BZTF3M0k1eURtNkhPMDMwb1pVdEp2YUh2VFZnXy1FY20zQjB5azhNVXUxcXpjYVZRdTRQX094OUpsRzdpdm1ENk81VDlvQWRTbmFLWWdHMlE2VzlzRXpXdlR2MWpwWXFsaHVJVWFLUUFySmlLT05tUUNEcWhpbE5QNlBORl82cnV2YWdia1hXb1BfX3lsbFV5OXBkVnBWQ3ZvNmNTbUFROGVMNzRPTVhXNEdmOXlJdUhhYzFjWnZQeTFvdHQ1WWxGVTZMWkxZcGFwQWlFNmFyeHMtdGRTWlBJdlhkZVp0SURZeE5FS0JNSHdwRmlRM3ktbEVDcHNtVFFVOVBzNUxuamF4QkhRa19LU1NwRkx3NG1mLXA2Ry1rQzZhUlktVUpfRDgzLXpJQVJiWklwanlSSXBnalpvRFlwTS1TU2c0XzBRRlVfMDZmNTJLN2ZPMWIydUp6VlN5ZVc2RmZzWHNIY2t5WTJzU0lHZWxSdWJFYmVHYlNiSVRGbVdSYS1IaXplMFdrR0VVNkVQY1k4S1pkMHZtSFlDRldJYVRISzc2ZTVyeDg3TzZHeGhrMWoxd3puLVRiLWtHdkRkbUZsN211U1ZqRFN0a0s5ampTNHh6UGJYeXBORXY1MkkwTHo3anpEMkxmbzlGZGtWQkc1U2N1SGpQTG5CLU5SeXBqaGk1bG1wSnVPTEltVUh4VWFENFl4NkM4bGJhdHhSOW9PWXF5bUlUbklVdkJEVDBLd2hFQ1ppNnM5dHZlU3dIMUZlRkZNeEUwRWw4Xzl0X0JYaXlUTERaLXFRcUFIMGhXX1Bacl91YThUUnFGR3BudGdtYjNxSFVWckNUbTRkZjlZNUhDRDMxN0dGUkRxeV95Q3VaUnZoenBOVk5nSnBGb3Y0OE9USnVHR1lHWmlrS3pHYnFKNUVKNG1ZRmh1S2Vfck11U1ZXU3pHYW1kTC0wd3EtX0dCNHlDODFodDBuNHdVRUVNWENDVk5BSE92WmZrSjAxRXJVSldMby1SY0ZtUXNGWnBhXzNQQlNpbUlXNVZ4aXFQVlNTYnV1WW8zOFVwUWxjM2Z5czd0RVFBaGl2bmFQUzY1MDBRZExKeDdXeWYzdDRZc2lsNExmeTcwMG5uQ3BkeFE9PVwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqVmVyaWZ5aW5nIGNvbmZpZyBpbmNyZW1lbnQgc3BlZWQqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfcEJRQXpTWkZXM3NiUFc1MnZ5aWhnUkp6fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNDM5MzFkYzgxOTFhODI1OTdmZWFhZTFmNjA3IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6IkRPQ1NfUlM9MSBSVVNUQ19CT09UU1RSQVA9MSBSVVNURkxBR1M9Jy0tY2ZnIGRvY3NycycgY2FyZ28gY2hlY2siLCJ0aW1lb3V0IjoxMjB9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MTU5Niwib3V0cHV0Ijo1NywiY2FjaGVSZWFkIjozMzI4MCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoxMCwidG90YWxUb2tlbnMiOjM0OTMzLCJjb3N0Ijp7ImlucHV0IjowLjAwNzk4MDAwMDAwMDAwMDAwMSwib3V0cHV0IjowLjAwMTcxMDAwMDAwMDAwMDAwMDEsImNhY2hlUmVhZCI6MC4wMTY2NCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDI2MzN9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODg3MjUwMjUsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNDM1NjVkODgxOTFhM2E1NTUxNTdmN2RmY2M4In19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjA1OTFlOTdmIiwicGFyZW50SWQiOiJiYjEyNTVlNSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MTI6MTIuMTE2WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9wQlFBelNaRlczc2JQVzUydnlpaGdSSnp8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM0MzkzMWRjODE5MWE4MjU5N2ZlYWFlMWY2MDciLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIgICAgQ2hlY2tpbmcgZmxhc2hlciB2MC4xLjAgKC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIpXG4gICAgRmluaXNoZWQgYGRldmAgcHJvZmlsZSBbdW5vcHRpbWl6ZWQgKyBkZWJ1Z2luZm9dIHRhcmdldChzKSBpbiAwLjE2c1xuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg4NzMyMTE2fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYmU5MzY0ZWEiLCJwYXJlbnRJZCI6IjA1OTFlOTdmIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMjozMi40NDVaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlBsYW5uaW5nIGJ1aWxkIGluc3RydWN0aW9ucyBhbmQgVUkgZml4ZXMqKlxuXG4qKkVuaGFuY2luZyBVSSBzdGF0ZSBsb2dpYyBhbmQgZGV2aWNlIGZpbHRlcmluZyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM0M2VhYWQwODE5MWFkM2YyYzlhZTFkZWI1OThcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1STEtPX0pWSWJSSWZrc0k3UmNJV3JVOWdRWlRLWkdZUU9BVVBTcnpNZ3drZVBjVV9jTy1ZZ1BiNjRhVm4wTkhVM3AyRXdfTTMxeXF6YlN3S2VYTG5kNnhKbEhxTjNuRE5iOWIyN3hIaVhFZkNvc0I1R25tdDFlNWlTQm5HQV9tbWJEUE9KbU8ySlJJLTJiR3htVlVpRkpqMTFUMjVWX185V1NOTHA1bjREZ1hPQ1AtUVFJVDJ5NU1wR1ROMEU4QzB1M3Byd1lOOHVfMU9YOWtsOWtGcmVSY0pjaVV0RFBWc0s4akx6aXBOLVhMSDYyUGFGSExMX0pnY1U4LWtWNlVjWkZFMEJKQWFpQ1JSVmJiRm90VnRTMWQ0YUpFOC03cS1mLXdHYWlvY0ZybndlaktGYTh0azRWdTdOUVlxc29jR2tNLUZvNFE0WHRXRHByWW9QekQ3LWp5aGJ2bUZTWGxSRnR3MWt6LWdSV0tJR0tkd1ktTE5ENjI5VzFjNEFFM0hkZkdPUGVNLTlBU3NHU1hQVGpOcjVYQ21NMS0wT1otaXctRTFCUHlPbVRUSFhGa1lWYmpmRnNJSXVfa09FcU8xUFN5UGg5c2dFbUw3TnFXaTRsalVUOGFnQ0VWN09OSmpMb3ZlR0EzZlJ3c1llOEJuNDZWZVNhRGpvckNfbk5ZU3VZdUYtTnpTc0pTMVk1aExULWE4SjUzMGQ3ZzBreEpqX0RwR2liaUp1SWlXZzh5S1FPdDhBbDc3NDJaTDlpanhlaURVSHQzM2lFM21yZzNOVFJvM045T0lfeXJGUk1FNkYyS25ib0hfLURPTFFQUXVzVk1jbElfRTRpbElyc2t6dEFrdVBwSzZkTHdCanU2dFg1WU5fWlZDclloeWV1TmtXVHdXMWx5Tkp3NHFjQnJBWHhTeWhZSmlyaEQ1MlExTHQ0YXhMSjQ0dkhtZXpKUHJYTGxaNmpseGxPM0FDMnhxVTlxbWstb0wtSS1CaG42bEJmQkMyOFBiZDZ0SFR6QkVtVksybW5oS2t2eGg5cUM4WWNzdnRUdHRGLW8zMWg4b0NyR1VUbUYwdnJad0k4ZmtWUHp6LUNpZmIyQUg5aWRPQmdlVlZNSVhSY3pzSGdELWNONXFuYjA0VTFLcEF0dXhLdy1sUGtVOHNmazBmaHlwTjlBWkNfWDN6QkR6eS1ZQzhkV2xnX1hpUTFiZ01kYmFrME1MaXM5ZWFHTU51THpyeG05NURnWWdCVFRTRktNelhidXdDdXZqd3NnaGpYekhWVkRNSDJqZkI4akdmbzBDUE1rMTF1YTBSeDZxcHFtdWltR2EzVTlLRF9aSHJyZGpsX21VeXhhc1c3SmhDVk5UVWxzTElQSkJTZjRzZ2I2eDViT05MMzdGSnZqUWp5WV9VNzFXS2FaZGxNWXFuT0JTQ3VjVlkyakdDa3hkdWd5MGwwVWs1ZS16aDZicjlSbGRMejZaQU82WXVuWWlfNHk0aUh0N0lURjdDMzFXeVl3MlJiYXUwR1Q4VWF2elUzbTRHdDh3WUZnQ2wyaDQ2WTJ1MWVTTVRGbVc3Z1gyRkVrRG0wVjBQMTZhd0lZaXRVN19SNTlLYkNyb3dyX3I0TFpqM0RvQTQyMXAzc3V5eVVKZmtMbEVjeDdlUjNUOThUTm1mNThRaWRIN25ZOHVwdzl2UkNLT2RtOVNIb1hNTTdpVmotVnZBSElnS2tXZHVlQkxaTDlMUVBWNVpWZ3h0cEF4YTlZYWNhNWZTbTFucFRNODRDZ0dQU1lpdHVvUDVIakhROE5LV3RkWU4tc0dpRGtvSVM4b2J2VXJCc2lHanBOZjdnZk02Y0ctdjU1VEFLSFo1eF9mYjhQSkl0VHhwLVBoM0VsZW5IVDBac0dRU29VczRIdVJvMVNLbXlFb1V5NVF4Qm1YTEh6RTQ1alA5QVV6cDd0TDgwSVFQSHY2U1YzTlpEa1ZjajJ3X3Mzc0lDaERHeXk5WmFWdHV4ZWpXN1h3ME0zU3EwNmxzTHloLTFzUDc0dFBQcEc3cFBFZTVKcUlYS0ZxbzNwZWhHT0N3MDRqWDMwV1ltbXlwWFloNTJ2MjVhZWdpeWk0bF93MFJZdTRaTUJvTnM0UnZrbVZ4bUo0NWJhanZnRnJBU0xNbzlTbXpseWpEbGZvbjJyZXZFcmkxU3hqQmFETl94WnJMWWJScEVMcEhhZlNpTzkxUk0xVV96dXRwUmFCTUYwZGhQcjl0c2FRWUFQSmRFVUhyWjV1NUFVLWJKcHg2eXJSRU9sWXhEVF81bEFqc3lzUUs1dFhtUks5YW5UZU1xWlhWNXk4dEFERFJLNHNPYVFKUlJoSnBlVTVNV0luWnA5ak1RV1Npb3dsMFZQRW9xSXFFenAzcnNNd1JTeXBlU1VzVWhZU2p5RGd3Z3VKcUZvQ1BJVTZFcHVCUl9RU1IyejNUNDlVU2xPbjFJbHlpOXRYUEp6LVdldUdmZi1MM21HdjZ2RXlSNG5qajU1LVRvbi1EVEw3SVdoZWs4OE9fRTk1V1Zfdkt4eVVoRWs4MG9ONHFHbnFaakYyT1ZBQ1JFc3VOT3hkRnNPUC1lM3pXQ2ZhNEM4MEhtWU9UMEoyMF9mQXo0TWVVS3Zid3RiZUdOeFRDQjFDc1BsMDFualJFUHdfLTlsbkRNR3dCbVFZeS1fdlcxbzctdUJhb3JWQWNfQy1HeEdZUGN0QmhfUWxBT1h3ZFVnYldfRF9LY2J5aDM4Tkh6TktHNlYzN3hkVGZsaEVscTZUQ2k3V3RXQjFJUFZOWjBWa29aSGxXcmtZanAzMHc5dWg3NnVZVmdJVXAyazYzSWFnd1hKWllxM3hOZkwzS2w0Uk9mam9sV3Y3Q0ZtUDZKbnFtZ0xocWdXQjAzNFNaM0cwYWpMbDNMN0tnQXBTNzBtdVlpNU5SRHRDVGwyZ19uUzl5c2tVX1ZSdEUwT1NCckYwWVc2WnBxOUp0NWhwLVMzSGluSUpDTDhCWlNQQS16TjlBNGZkM191MTRseW1IUVhHa3prbjVLSGRCSm1HdlA0cjlfcFZEaUo3bjY2TlEwd0VMaFh5TFZuemZsZVdwU3kwYkFpX1hkb2FlMTNVUV93NWVTMFc3OUI1SlpVaDEyQURxNzNRVXpTVFNyTFFtZVk0RUxSZ1JZblZ6UmNteGxBVjRzZS1ZMjltZUNUOGdxNjV5bVhwSkJUTGpObk5SZEZva0IxcUszZFJMWXY2cWJDYzFZMndhVlk3TkY3MU85UnFyRHAyZ1VNSnpvemVmSkFEeTZzWVlLYWVwenEzMlk0ZUoyRzZsNjRPZDJPT3pDejVlQ1R3UXQ5bDMtOG9BNldfSE5HWURGSlpKVXJJUVVHZ3lNOEVTRVprQlQxVjZSNjZnYXJKeDg4N1I0aGh2M21xR3h0TDM3N2N5YkVmNmRZUnpmbmNJZmRMX3ZpMlhfbUx4NjJpM2pydVRGME5KVDhSRFVrSW15dTBwakFkZTFzQWFmR04xY3JhVHdSNEcxRXJYSUtwSW50YWdsMkRaY0cwRzNwMU1xalhiQTY4M0VxWTZrV0IyNy1fOFM2QkgxdXBlcjhiX2thSDU3dG5ZWEVfcjJfbVhiYnVYaEk0MWdwaUxIS19heFh0R2t1YTEwNXMydm5hdTZ2R2pEci1NUW5uY3ZvVEQ3THJCc2U1QU1BcjdYMnp1bU5nTjdJUGM0N1M0YTE5WmJja3VCNlJKX183ZkZWUzJvX1pscVEyRS0xazA0SGVZb2t0N0lHRE14Q0t3dTktTUFiejkxMjNzMURqaWxDaEhHVTdGakhiSlNFUGFpYU5qVDhuSjNQU2FWVGVpSF9IRE1uc2tCNWswTmFybTN4eG5Obkc4bmFLTG1GdkhnV0lEbmdLM3prWjREaEJYSXhZX2l4Tk9CbEVzdldXU2FRckdjYnNQSGdRRFdGNGd5ZkhUZ2JQVE40Zy1rMERqRnJKNmdoRGV1a1BwT2VleTExM2JYc2VsZXktLVpSZHJOZW5Qd0ZUdWM1N2FUQlo5TVJYV0lTaF93Y1hoUVZCekNNSFJUWDZEaUxmdHU3b0tULVJORHN1NEZTYV9MNzcwZTBBcS16VHctS2RoY3hXQzBRVEVsVmRrWHRwdkVSMVpuQ2MwT09VTk53YzBiS2ZTcW5wQU9yVEstNlFWXzFGaEppbHcwTVgyU25iQzhidXB1cmcxWXpXNF9DUVFGOUpwR1BCcE1pWVZDeHFLNFRON1VXOXJmQWltNUphN3JqVDQtNW5wY1NhNWNodW80Y3BBLWhaaWZ2WjV2UGZiZ2huV0trMlBRTE9OeFFybnFPRGhndG5peWFpbUk4N1F2RUxKdDZfSEpGankxcXR3a293LUJpMlotWlhUSW1ZUXRRcVFlbVROMkppMlhRU0NnRmExRF81UHpuUnFuRlhVcHN0dWFcIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlBsYW5uaW5nIGJ1aWxkIGluc3RydWN0aW9ucyBhbmQgVUkgZml4ZXMqKlwifSx7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqRW5oYW5jaW5nIFVJIHN0YXRlIGxvZ2ljIGFuZCBkZXZpY2UgZmlsdGVyaW5nKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsXzlidTdSeWNNTTBOUnBxemNTSzVEZnhzWHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzQ0YmY1NzA4MTkxYmI2MDY0ZGFjMGYwYjI0NyIsIm5hbWUiOiJlZGl0IiwiYXJndW1lbnRzIjp7InBhdGgiOiJzcmMvbWFpbi5ycyIsImVkaXRzIjpbeyJvbGRUZXh0IjoiICAgICAgICBsZXQgc291cmNlX3JvdyA9IHNvdXJjZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgbGV0IHN0YXRlID0gc3RhdGUuY2xvbmUoKTtcbiAgICAgICAgYXJjaGl2ZV9idXR0b24uY29ubmVjdF90b2dnbGVkKG1vdmUgfGJ1dHRvbnwge1xuICAgICAgICAgICAgaWYgYnV0dG9uLmlzX2FjdGl2ZSgpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5ib3Jyb3dfbXV0KCkuc291cmNlX2lzX2ltYWdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc291cmNlX3Jvdy5zZXRfc3VidGl0bGUoXCJTdXBwb3J0ZWQ6IC50YXIsIC50YXIuZ3osIC50YXIueHpcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pOyIsIm5ld1RleHQiOiIgICAgICAgIGxldCBzb3VyY2Vfcm93ID0gc291cmNlX3Jvdy5jbG9uZSgpO1xuICAgICAgICBsZXQgc3RhdGUgPSBzdGF0ZS5jbG9uZSgpO1xuICAgICAgICBsZXQgZmlsZV9idXR0b24gPSBmaWxlX2J1dHRvbi5jbG9uZSgpO1xuICAgICAgICBhcmNoaXZlX2J1dHRvbi5jb25uZWN0X3RvZ2dsZWQobW92ZSB8YnV0dG9ufCB7XG4gICAgICAgICAgICBpZiBidXR0b24uaXNfYWN0aXZlKCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmJvcnJvd19tdXQoKS5zb3VyY2VfaXNfaW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzb3VyY2Vfcm93LnNldF9zdWJ0aXRsZShcIlN1cHBvcnRlZDogLnRhciwgLnRhci5neiwgLnRhci54elwiKTtcbiAgICAgICAgICAgICAgICBmaWxlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTsifSx7Im9sZFRleHQiOiIgICAgICAgIGxldCBzb3VyY2Vfcm93ID0gc291cmNlX3Jvdy5jbG9uZSgpO1xuICAgICAgICBsZXQgc3RhdGUgPSBzdGF0ZS5jbG9uZSgpO1xuICAgICAgICBpbWFnZV9idXR0b24uY29ubmVjdF90b2dnbGVkKG1vdmUgfGJ1dHRvbnwge1xuICAgICAgICAgICAgaWYgYnV0dG9uLmlzX2FjdGl2ZSgpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5ib3Jyb3dfbXV0KCkuc291cmNlX2lzX2ltYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzb3VyY2Vfcm93LnNldF9zdWJ0aXRsZShcIlN1cHBvcnRlZDogLmltZywgLmltZy54elwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7IiwibmV3VGV4dCI6IiAgICAgICAgbGV0IHNvdXJjZV9yb3cgPSBzb3VyY2Vfcm93LmNsb25lKCk7XG4gICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgIGxldCBmaWxlX2J1dHRvbiA9IGZpbGVfYnV0dG9uLmNsb25lKCk7XG4gICAgICAgIGxldCBkcml2ZV9idXR0b24gPSBkcml2ZV9idXR0b24uY2xvbmUoKTtcbiAgICAgICAgaW1hZ2VfYnV0dG9uLmNvbm5lY3RfdG9nZ2xlZChtb3ZlIHxidXR0b258IHtcbiAgICAgICAgICAgIGlmIGJ1dHRvbi5pc19hY3RpdmUoKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuYm9ycm93X211dCgpLnNvdXJjZV9pc19pbWFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgc291cmNlX3Jvdy5zZXRfc3VidGl0bGUoXCJTdXBwb3J0ZWQ6IC5pbWcsIC5pbWcueHpcIik7XG4gICAgICAgICAgICAgICAgZHJpdmVfYnV0dG9uLnNldF9hY3RpdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgZmlsZV9idXR0b24uc2V0X3NlbnNpdGl2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pOyJ9XX19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0Ijo2ODQsIm91dHB1dCI6NzQ4LCJjYWNoZVJlYWQiOjM0MzA0LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjMzMywidG90YWxUb2tlbnMiOjM1NzM2LCJjb3N0Ijp7ImlucHV0IjowLjAwMzQyMDAwMDAwMDAwMDAwMDMsIm91dHB1dCI6MC4wMjI0NCwiY2FjaGVSZWFkIjowLjAxNzE1MiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDQzMDEyfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg4NzMyMTE3LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzQzYzZmNDg4MTkxODU4YTYyYWY0ODE2OTVmMCJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4ZjRkODZkNyIsInBhcmVudElkIjoiYmU5MzY0ZWEiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjEyOjMyLjQ0OFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfOWJ1N1J5Y01NME5ScHF6Y1NLNURmeHNYfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNDRiZjU3MDgxOTFiYjYwNjRkYWMwZjBiMjQ3IiwidG9vbE5hbWUiOiJlZGl0IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiU3VjY2Vzc2Z1bGx5IHJlcGxhY2VkIDIgYmxvY2socykgaW4gc3JjL21haW4ucnMuIn1dLCJkZXRhaWxzIjp7ImRpZmYiOiIgICAgIC4uLlxuIDI1MiAgICAgfVxuIDI1MyAgICAge1xuIDI1NCAgICAgICAgIGxldCBzb3VyY2Vfcm93ID0gc291cmNlX3Jvdy5jbG9uZSgpO1xuIDI1NSAgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4rMjU2ICAgICAgICAgbGV0IGZpbGVfYnV0dG9uID0gZmlsZV9idXR0b24uY2xvbmUoKTtcbiAyNTYgICAgICAgICBhcmNoaXZlX2J1dHRvbi5jb25uZWN0X3RvZ2dsZWQobW92ZSB8YnV0dG9ufCB7XG4gMjU3ICAgICAgICAgICAgIGlmIGJ1dHRvbi5pc19hY3RpdmUoKSB7XG4gMjU4ICAgICAgICAgICAgICAgICBzdGF0ZS5ib3Jyb3dfbXV0KCkuc291cmNlX2lzX2ltYWdlID0gZmFsc2U7XG4gMjU5ICAgICAgICAgICAgICAgICBzb3VyY2Vfcm93LnNldF9zdWJ0aXRsZShcIlN1cHBvcnRlZDogLnRhciwgLnRhci5neiwgLnRhci54elwiKTtcbisyNjEgICAgICAgICAgICAgICAgIGZpbGVfYnV0dG9uLnNldF9zZW5zaXRpdmUodHJ1ZSk7XG4gMjYwICAgICAgICAgICAgIH1cbiAyNjEgICAgICAgICB9KTtcbiAyNjIgICAgIH1cbiAyNjMgICAgIHtcbiAyNjQgICAgICAgICBsZXQgc291cmNlX3JvdyA9IHNvdXJjZV9yb3cuY2xvbmUoKTtcbiAyNjUgICAgICAgICBsZXQgc3RhdGUgPSBzdGF0ZS5jbG9uZSgpO1xuKzI2OCAgICAgICAgIGxldCBmaWxlX2J1dHRvbiA9IGZpbGVfYnV0dG9uLmNsb25lKCk7XG4rMjY5ICAgICAgICAgbGV0IGRyaXZlX2J1dHRvbiA9IGRyaXZlX2J1dHRvbi5jbG9uZSgpO1xuIDI2NiAgICAgICAgIGltYWdlX2J1dHRvbi5jb25uZWN0X3RvZ2dsZWQobW92ZSB8YnV0dG9ufCB7XG4gMjY3ICAgICAgICAgICAgIGlmIGJ1dHRvbi5pc19hY3RpdmUoKSB7XG4gMjY4ICAgICAgICAgICAgICAgICBzdGF0ZS5ib3Jyb3dfbXV0KCkuc291cmNlX2lzX2ltYWdlID0gdHJ1ZTtcbiAyNjkgICAgICAgICAgICAgICAgIHNvdXJjZV9yb3cuc2V0X3N1YnRpdGxlKFwiU3VwcG9ydGVkOiAuaW1nLCAuaW1nLnh6XCIpO1xuKzI3NCAgICAgICAgICAgICAgICAgZHJpdmVfYnV0dG9uLnNldF9hY3RpdmUodHJ1ZSk7XG4rMjc1ICAgICAgICAgICAgICAgICBmaWxlX2J1dHRvbi5zZXRfc2Vuc2l0aXZlKGZhbHNlKTtcbiAyNzAgICAgICAgICAgICAgfVxuIDI3MSAgICAgICAgIH0pO1xuIDI3MiAgICAgfVxuIDI3MyAgICAge1xuICAgICAuLi4iLCJwYXRjaCI6Ii0tLSBzcmMvbWFpbi5yc1xuKysrIHNyYy9tYWluLnJzXG5AQCAtMjUyLDIyICsyNTIsMjggQEBcbiAgICAgfVxuICAgICB7XG4gICAgICAgICBsZXQgc291cmNlX3JvdyA9IHNvdXJjZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4rICAgICAgICBsZXQgZmlsZV9idXR0b24gPSBmaWxlX2J1dHRvbi5jbG9uZSgpO1xuICAgICAgICAgYXJjaGl2ZV9idXR0b24uY29ubmVjdF90b2dnbGVkKG1vdmUgfGJ1dHRvbnwge1xuICAgICAgICAgICAgIGlmIGJ1dHRvbi5pc19hY3RpdmUoKSB7XG4gICAgICAgICAgICAgICAgIHN0YXRlLmJvcnJvd19tdXQoKS5zb3VyY2VfaXNfaW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgc291cmNlX3Jvdy5zZXRfc3VidGl0bGUoXCJTdXBwb3J0ZWQ6IC50YXIsIC50YXIuZ3osIC50YXIueHpcIik7XG4rICAgICAgICAgICAgICAgIGZpbGVfYnV0dG9uLnNldF9zZW5zaXRpdmUodHJ1ZSk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgfSk7XG4gICAgIH1cbiAgICAge1xuICAgICAgICAgbGV0IHNvdXJjZV9yb3cgPSBzb3VyY2Vfcm93LmNsb25lKCk7XG4gICAgICAgICBsZXQgc3RhdGUgPSBzdGF0ZS5jbG9uZSgpO1xuKyAgICAgICAgbGV0IGZpbGVfYnV0dG9uID0gZmlsZV9idXR0b24uY2xvbmUoKTtcbisgICAgICAgIGxldCBkcml2ZV9idXR0b24gPSBkcml2ZV9idXR0b24uY2xvbmUoKTtcbiAgICAgICAgIGltYWdlX2J1dHRvbi5jb25uZWN0X3RvZ2dsZWQobW92ZSB8YnV0dG9ufCB7XG4gICAgICAgICAgICAgaWYgYnV0dG9uLmlzX2FjdGl2ZSgpIHtcbiAgICAgICAgICAgICAgICAgc3RhdGUuYm9ycm93X211dCgpLnNvdXJjZV9pc19pbWFnZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgIHNvdXJjZV9yb3cuc2V0X3N1YnRpdGxlKFwiU3VwcG9ydGVkOiAuaW1nLCAuaW1nLnh6XCIpO1xuKyAgICAgICAgICAgICAgICBkcml2ZV9idXR0b24uc2V0X2FjdGl2ZSh0cnVlKTtcbisgICAgICAgICAgICAgICAgZmlsZV9idXR0b24uc2V0X3NlbnNpdGl2ZShmYWxzZSk7XG4gICAgICAgICAgICAgfVxuICAgICAgICAgfSk7XG4gICAgIH1cbiAgICAge1xuIiwiZmlyc3RDaGFuZ2VkTGluZSI6MjU2fSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4ODc1MjQ0OH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjUzNWY2YTZmIiwicGFyZW50SWQiOiI4ZjRkODZkNyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MTI6MzcuMzAxWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipBc3Nlc3NpbmcgY29kZSBmb3JtYXR0aW5nIGFuZCBydXN0dXAgaW5zdGFsbGF0aW9uKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzQ1MjRiYmM4MTkxOTY0YThjMTZjNGYyYzUxYlwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTVJWM1U3T0NnUlFSS2V2OWZlY0VjOWF6VXoyaDhnVHJzWndSdC1aNXJzMXB6cmRBUHFJVUxhc1A5R3I4bk1mUUVkWHhDVkhIWFVia1hNNG1IU1FJdFl2WHpRQ0tUeHF2azBBbVE5QWRhbDNFUmg5c2ZHVVpNZW1menlOQ3NCLUktSDBYUkxFSHpZRUJtMmliS25HU1RRNXFqS3NtUWM1YThnbEEySVg2cGY2Yml2V0c2cmNacmVtNE5mdHIwUE83QUFfZERfT2dqa2hSaXpybnlJamROc2dJOG1wc19NZHV0SU9FRDBQRjM0NVM4UHk2T3ZMWm82TGxXMzVfQkJCdEdxLWtzeEFQdWF3eDNzQmtUZjFXRU5YcXhzMlZXYTZzX3Y4R3dfRzlPOWRZbTl4YTJpa0x1OHU2NVExalhod1hHN2p5X1pkMHJLZ3YzN09CdzFzd293dm9ueWI3b3c0a1J2a1ZkLUoySFhNQ0FDS1ZlSGRVMVowbnVaaEM3ODJvTE1WbDZLQ2JPc0xYWHFqWTVwWExUMHBJeXNDcl9Fbzh4bURHSllXZUJUTkpBMWNXZFFUNWk3akdMOExaNE5VT0xZSXpsaEw3SlZKcGU5eERLNGtEeUNiVmpwUGJvTFVkQWNVb3VxUHlXeVQ3cnZ0YmlfLTR5Y3otNjN6WkRaNi1PQzFBOFRjNmloWGNfSWNUYzQ2TkpYM3QwSmpjb3VWTklqQzU3VEpSNk13R0NXV1FHOVhwazJ1bmY1MEJNUGhxUTF2bE5nSWx3SkRNdUNJaUt4QU9ZYVUxWE1vVWh6Sm5USWtwSGhidzJEMU0xeDVZRzNZbDFua1h4WDJIUldpQ1M4cjR0NjQ0a1F2YU0wc0VZMWdkMFZNdUdKbGYyNm1La3lRLVdtbEtSdFB1OFZfdXVqT181Uy1XVTdpdXhuc012eXRwM0V6ajNlUzhrWlZNdjVnZUd5S3JtS2ZtbVVOQURNQTJyUFgwdHQxLWRRYmpHZHRvTnExTWNQOTRTa2I3V09HTWdiMmd5MTNTSVVTXzFYcGlrNUlmUXRyM3hTS3B5YXhCbzdscTRNdnE4MFpReDB4Qks2YnZpLS11QTJzT3Juc1h0X1d0MUxUU01Ka2VHV2x3M2I5aEYxM2ppTEp1RFhEQkRyZ04zaEtJcnh5bUhYNWl2bXlJMjVZWEJvdENQRzh1bHhnYTNiOFR4MWh2SXNOQWw4LWRVSTlEOVZLaFFsQk5WUTFBRzJRUW1tb251cXZRY2JIcGhzQ1V0Z0dNUHBjVWxaUHBqQlFKS2NxYUs5RWR2V1RGM1l6M2pfX0U1aDRDYnFHQjNGc1VXcEV6dlJiNW5jOFdTQkc0Q3IwSlZqbkMtTTg5Y3NncG45aXduLU96N3dvU1N2Q0E2WVFpZkZEVFBWbE5WSkFaTTVVeTk5Tlh6R1ExdndVM0xHS2EzQjJvUE1iNldGaVpsQXBqemZDOGpEUUduVFp2WHM5eG54ZTNHWWNZblM0RERvTllJbUZBTkt4OTJZTUFiOGc0UFNYZUxWdFNwYWoyaHBTTVlxaFZhb1MwN3FGN1lhb0trUkF0VzgtVTdKSE5ZcXVpOEdtRVFTMHRmSHZBcTRKdFNKNjlCdWNQOTl2Z20xZVhqZlZUR095cXR2UFJmS2pxVFpkcXpDTnhBV2hWTGc9XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipBc3Nlc3NpbmcgY29kZSBmb3JtYXR0aW5nIGFuZCBydXN0dXAgaW5zdGFsbGF0aW9uKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX0oxOHBhV3d5UTlHaUFEMUVUMW9aYjhjdXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzQ1NTJiMDQ4MTkxYmQwNDkzNmY2NWQyZjc1NiIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJET0NTX1JTPTEgUlVTVENfQk9PVFNUUkFQPTEgUlVTVEZMQUdTPSctLWNmZyBkb2NzcnMnIGNhcmdvIGNoZWNrIiwidGltZW91dCI6MTIwfX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfd0h1MmpmRWE1bkoyVUNZcXZad0d3TTZHfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNDU1MmIxYzgxOTE4NWI0MTIxZTY3OTNhMzBmIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImdpdCBzdGF0dXMgLS1zaG9ydDsgZ2l0IGRpZmYgLS1zdGF0OyBnaXQgZGlmZiAtLSBDYXJnby50b21sIHwgaGVhZCAtMTAwIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoxNDU0LCJvdXRwdXQiOjE1MiwiY2FjaGVSZWFkIjozNDMwNCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjo1NiwidG90YWxUb2tlbnMiOjM1OTEwLCJjb3N0Ijp7ImlucHV0IjowLjAwNzI3LCJvdXRwdXQiOjAuMDA0NTYsImNhY2hlUmVhZCI6MC4wMTcxNTIsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAyODk4Mn19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4ODc1MjQ0OSwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM0NTBjZDIwODE5MTg0ZjZiYzU5ZTE4MmRlZGUifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMGY5ZTg2OWIiLCJwYXJlbnRJZCI6IjUzNWY2YTZmIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxMjozNy40NjVaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX0oxOHBhV3d5UTlHaUFEMUVUMW9aYjhjdXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzQ1NTJiMDQ4MTkxYmQwNDkzNmY2NWQyZjc1NiIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiAgICBDaGVja2luZyBmbGFzaGVyIHYwLjEuMCAoL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlcilcbiAgICBGaW5pc2hlZCBgZGV2YCBwcm9maWxlIFt1bm9wdGltaXplZCArIGRlYnVnaW5mb10gdGFyZ2V0KHMpIGluIDAuMTRzXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODg3NTc0NjV9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIxNmZiYmRmOSIsInBhcmVudElkIjoiMGY5ZTg2OWIiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjEyOjM3LjQ2NVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfd0h1MmpmRWE1bkoyVUNZcXZad0d3TTZHfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNDU1MmIxYzgxOTE4NWI0MTIxZTY3OTNhMzBmIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiIE0gQ2FyZ28ubG9ja1xuIE0gQ2FyZ28udG9tbFxuIE0gc3JjL21haW4ucnNcbiBDYXJnby5sb2NrICB8IDY5NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKytcbiBDYXJnby50b21sICB8ICAgNCArXG4gc3JjL21haW4ucnMgfCA1MTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy1cbiAzIGZpbGVzIGNoYW5nZWQsIDEyMTIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSlcbmRpZmYgLS1naXQgYS9DYXJnby50b21sIGIvQ2FyZ28udG9tbFxuaW5kZXggOWFkOWFhOS4uNzVmN2RjMyAxMDA2NDRcbi0tLSBhL0NhcmdvLnRvbWxcbisrKyBiL0NhcmdvLnRvbWxcbkBAIC0yLDUgKzIsOSBAQFxuIG5hbWUgPSBcImZsYXNoZXJcIlxuIHZlcnNpb24gPSBcIjAuMS4wXCJcbiBlZGl0aW9uID0gXCIyMDI0XCJcbitkZXNjcmlwdGlvbiA9IFwiQSBHVEsgaW50ZXJmYWNlIGZvciBwcmVwYXJpbmcgQUxUIExpbnV4IGltYWdlcyBmb3Igc2luZ2xlLWJvYXJkIGNvbXB1dGVyc1wiXG4rbGljZW5zZSA9IFwiR1BMLTIuMC1vci1sYXRlclwiXG4gXG4gW2RlcGVuZGVuY2llc11cbithZHcgPSB7IHBhY2thZ2UgPSBcImxpYmFkd2FpdGFcIiwgdmVyc2lvbiA9IFwiMC44XCIsIGZlYXR1cmVzID0gW1widjFfNVwiXSB9XG4rZ3RrID0geyBwYWNrYWdlID0gXCJndGs0XCIsIHZlcnNpb24gPSBcIjAuMTBcIiwgZmVhdHVyZXMgPSBbXCJ2NF8xMFwiXSB9XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODg3NTc0NjV9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4ZWIxZThjOCIsInBhcmVudElkIjoiMTZmYmJkZjkiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjEyOjQ0LjM4NVoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJJbXBsZW1lbnRlZCBhbiBpZGlvbWF0aWMgR1RLNC9saWJhZHdhaXRhIGludGVyZmFjZSBpbiB0aGUgY3VycmVudCBSdXN0IHByb2plY3QuXG5cbiMjIyBJbmNsdWRlZFxuXG4tIFJvb3QgZmlsZXN5c3RlbSBhcmNoaXZlIGFuZCBkaXNrLWltYWdlIHNvdXJjZSBzZWxlY3Rpb25cbi0gU2VhcmNoYWJsZSBib2FyZCBzZWxlY3RvciBwb3B1bGF0ZWQgZnJvbSBgU1VQUE9SVEVELUJPQVJEU2Bcbi0gUmVtb3ZhYmxlIGRyaXZlIGRldGVjdGlvbiBhbmQgaW1hZ2UtZmlsZSBvdXRwdXRcbi0gRmlsZXN5c3RlbSwgcmVzaXplLCBib290IHBhcnRpdGlvbiwgTFVLUywgc2VyaWFsIGNvbnNvbGUsIEVGSSwgYW5kIFZOQyBvcHRpb25zXG4tIFNvdXJjZS9kZXN0aW5hdGlvbiBjb21wYXRpYmlsaXR5IGhhbmRsaW5nXG4tIFJldmlldyBjb25maXJtYXRpb24gZGlhbG9nXG4tIEV4cGxpY2l0IHByZXZpZXcgYmVoYXZpb3LigJRubyBmbGFzaGluZyBpcyBwZXJmb3JtZWRcbi0gQWJvdXQgZGlhbG9nIGFuZCBBZHdhaXRhIHRvYXN0IG5vdGlmaWNhdGlvbnNcblxuIyMjIENoYW5nZWRcblxuLSBgQ2FyZ28udG9tbGBcbi0gYENhcmdvLmxvY2tgXG4tIGBzcmMvbWFpbi5yc2BcblxuVGhlIFJ1c3QgY29kZSBwYXNzZXMgYGNhcmdvIGNoZWNrYC4gVGhlIGxvY2FsIHN5c3RlbSBsYWNrcyBHVEs0L2xpYmFkd2FpdGEgZGV2ZWxvcG1lbnQgcGFja2FnZXMsIHNvIHJ1bm5pbmcgaXQgcmVxdWlyZXMgdGhvc2UgcGFja2FnZXMgdG8gYmUgaW5zdGFsbGVkLiIsInRleHRTaWduYXR1cmUiOiJ7XCJ2XCI6MSxcImlkXCI6XCJtc2dfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM0NTgxN2I4ODE5MWJmYWZmM2E2YzE3MDdlOTJcIixcInBoYXNlXCI6XCJmaW5hbF9hbnN3ZXJcIn0ifV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6ODc2LCJvdXRwdXQiOjE2MywiY2FjaGVSZWFkIjozNTMyOCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjowLCJ0b3RhbFRva2VucyI6MzYzNjcsImNvc3QiOnsiaW5wdXQiOjAuMDA0MzgsIm91dHB1dCI6MC4wMDQ4OSwiY2FjaGVSZWFkIjowLjAxNzY2NCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDI2OTM0fX0sInN0b3BSZWFzb24iOiJzdG9wIiwidGltZXN0YW1wIjoxNzg0OTg4NzU3NDY2LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzQ1NWQxNGM4MTkxYTQ0NTc1MTgxMDllYTIwOCJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI1ZWJlZTA4YiIsInBhcmVudElkIjoiOGViMWU4YzgiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjE3OjEyLjgyMFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiYm9hcmQgc2VsZWN0aW9uIGlzIGtpbmQgb2YgY3JhbXBlZC4gY2FuIHlvdSBkbyBzb21ldGhpbmcgYWJvdXQgaXQ/In1dLCJ0aW1lc3RhbXAiOjE3ODQ5ODkwMzI4MjB9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJmMjY2MDQyYiIsInBhcmVudElkIjoiNWViZWUwOGIiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjE3OjQ0LjY2MFoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqUmVkZXNpZ25pbmcgYm9hcmQgY2hvb3NlciBkaWFsb2cqKlxuXG4qKlJlZmFjdG9yaW5nIGJvYXJkIGRhdGEgYW5kIFVJIHVwZGF0ZXMqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNTZjMGJlYzgxOTE5ZTA0NmM5NDEzNGIwNTI1XCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNVjZpdEtoSk9yRWI1c2ZMcG4ya25OLW1MWF9nQnQ2RzhiUlZJMmxhcTdGaUFVaEJYNWluc3R6WlVMeFdTOXJWRUZ5WW1DQXlzNS0xSUM5aHlGNWVhMDd6RlVaMExzVWVweU9xb1FCQXdBWnY1elJmS1ZvZTJlTzJ4YTllUnNSRWFPUVVOWkhqMl83UE5rSGU5dWtOa3ZvNXh1Ymg4ZWlXazZUS0d4TVlGdk9oVlhFMkUyN0pId3h2NzNLeTBBZ1VFa2tWQTBhLS00ekZwVGpUNHN1LVQwRjFHdlNFdWx3SnYwSHZKNFVkUG14aHNXdWluNE5fMDZPSzFMZHd5TjNOa0RBODNCYnIzUHdhYXZVSU1TdmlXUE5RLURaVlVabDNoRHF6RWJFU3lnbVlLR0RtNkdnYzZxU2tkU0hZOU11UmI3dVdPX2NWdnZGYlR5aTlYMWpjWVlrcUlCallRdTdBaHJRV09zS2RIeEhkUUJLTmZuYnRwSThmbEpYRXNOd2tGa3ljTXFwUWxmM1pQZl9xajVsalNwZnhKRTlHZTVFamcyMThNeXdZSndlN2F0TlRETlJvOThYc3AyRm1NNzZjQlZENFZFRDNkVUktdDBXaHlkeDRoaWJ4LWFTUTBBOXdVb1FFeVcwR2pUVUpJQWFNWWxPOHV3cXhBaWtvSUtQcE5yVlZULTJqZW9ZRC0tdlFWUmR1cnZNV3lTRXFLUEYwaU95aG5LODlQOXR4bUFZOFhsVXBqOFNGckNFRkpmOU42ckt3OE9hdk5wcEVXNGpSbnpHdDV1clpJdVFzQzFLX0xlZzkyQWZhQS1sbjZYcWJZTlhEX1dBcHNaRnFsVGRxdHFUUDQ0VWpOYUpkZTFoMGVRYk9XZVYtT0pJRl9lOW9IcFBmU2loYTMyTngxSXk5M1NPSkZRWmdtN3BLQnlBTVg2OUJIbV9mX1lGRU1xMTljX3lVTGxTSDdMZFhQLThqLWtyck9PLU1OQ0ZINkQtaXMzNEF1cXFQWWVLSmZUY3FOOWZveDhBeXVzRkVDdGI2UVktT3otMmlXWmtFYTQwRURvNDJ4djZGUFRfdFVkRDI0MTc1amNNeTZIa0N2bllmVmdfTEJqTVJXNFdjN3ltTGdhRVNuX0wwTnIzS1I4R1JtUE5zR1pXQzRPanhIbkNlX0ZFdWNCNVR3TG5hM1hGdlBSY0FWMEVHaHJOVWFPaERKSTdYOThaOWFUYXdwUmZSZllXVlRSckNnZE5uQVpZWHYxMkJ0cjE3R3ZrdVhod0NuYTVaWkVJUWc4MkJrOVZsa2NpYnUxN3NUUzdFeUtBMEhsQTZBY05Wam53c0M4bV9Ucm5LN2twZ3UyZVhya3BzeFc0NDN0TlFFVFBnR2FER2N5Ujlqc3E0VWpDYVdyUDFPNzJncWFDWjlJZjFCVDFVek9ZTmhIQVNRbE1SVE5CUC15eDBuVE9lWVh1STU0dDk5SktoRENTdEVhUHZ3cUdQVmdpTmlESS0teFU3UjVVeEZldWlkMmx5dGtVNHBqRTU3cG42MjVUWGpGSVVFajI5YU9pQmE5eE51OE1WdHE3cFlTODBoVGV2ZzJncXdXalk5SUdaRjFnWW12MnF2R2poY2IzYTBUSGV1WTgwMmZMNHNUaGcwaXVqLWtMSzlMT3hiRWdyR1FoSG16LS13MDZXVGIzVk5wQjVNWkVieGFRS2JaRUlqdFdueHNqMzFqYUxENkswOUlzU1A5WGVpak9TbXMxcEgwTUtNbGdzX2tmbENkNzZCbEpxNXFKWWZwaDNBZmdlMndxZEJxRFFoSGxRa3FTZUlxSnBGWTRVSktGbnVyM3YtcWd2NG9VZEdzRFV1N3lOeEY1QkhraFpKTHdrdGNOZFZnRWNhZ241RDF0eDhYNy1uUF9lQTkwV05RV3FDcnc0VXg2QmV4V0NLYnV1aHozOFFpaGJ4Wlpqc0hwUEdra3IwaDZTbFhfUEN0LTNtMTB0TjdyVFd1Wms5bzQzOEJubWRReHZrYUNHeFctZmpNLXN4THpNVGthQ0J4TnVsTk5vN0h2LWFyUFFIek9PdXVtNVVUcGptUThBTWo4OEZtaGhIcU9CNWNoUS1TVlFnSVRLWWx2Ul9WRkhQTXZVcDJjWVY0UHJIUGZoWWVDX3VRSVR4TjVRZlpsWXpUNUU5VlZDNzc1NjNLVV9tTjF5N2g2NWE5LW9Vb25pNC1WR0M1aEdrVXJQOGMyVkpkaGtPV2lQbWVkT1YxdFdwQ1MxWFpocUtzek10SjNLRGdBcm51cVV3U0tOWTZHY2pxZmtHSHNJMnFsUzdLSzA5ZXRiUW0wYXlkYS1LaWFqc0NYNFBZbWllSVhDNVhjYzdaZmNOb0NzRjNoSTRaNXNDalcxaGZTclpTMjFFNTBCeTBMU2VRZnlBNDE4cXN3TnYxblg1aVQwVDZFRi1TUTVYS3FkSWVCcDhZUjUtOUxEM3ItS1NZUzk2ZXFNVExGM2N0MDhmbTZGZFJOVElEMHBpNXJvZ215by1jNjlrNXBrUDdBclVBSU9nQkZSeHpsYUUyN3NVVS0yUm9NSkFNcjQ3WmJaeFVrYk1WTEp3Rjl3Sk96NUNvaHR1UVJSWkJMam80R2dSdlBObzE2MmlGaGxVYmZFNV9BRm9PUW1NZjg1UlloTnZQdThnUk02UjJzcFpfYTNiVWhJMHhRZlNyNld2MTY5NUppc284ZjJTMGViUmtHSjkzR3hTcktjNUc0cTA4MGUzMkNweTRxSXNFa1FTN3dxdHo2cDhBdE9qcFpBem93U0lMNG5WT1poMGliTVdVSjhmeHNKdkU3VmtvOHVOV29WWkJWR25DNUdfUmdPUDU4NzczRlVmRC1jYkJKNnB1Vk9kWlVnV2pwbzVfb0VsckJXQ1pFbVZkSXlyeUNzRkZUeldzZDljdHFKdDg1WGg2UjhzeVVuMXQ0bUgwVWpsckEzS3UxQlVLRzNGR3lfVGhvUFFFODVDQXFENXpBbWNZZmV0MVcxM25fR1FGSzRTT3htYk5xZ1pmUUZCSXcxZlJ3NUhVbktkZWlLXzlRUXc4MXJiNmtzbThwV2FlX3dtSWZ0TTBoU1AtX0M0YVA5QmRlcm1ycFY3MmNQYk5OM1gtRVA4NC1mTG1kTU1IVWxqWVphTkhZV202OTNlWC1PMHNLcU9sV2JXVFliejJCY3Radks1amdHRU0wWGNUTE94cWlDc2NmZ0hwTW5JQ2JOWVNOZldINy0wVU14WXZublBBNkJnZW83cHpzaXY4b01UeDdvRUZveG1Hb2Z4OE5MTk9IeEhhTjhsWEpNYkg0S0MyUEd5eVI3b0RET0NNVWstOXZ3cU9MVy1GM2M4WWc1ZmptdUtMTGExeHdsTUFHaWhmT2dmZEVNMVNpNkk2Z1RKLUFYMy1qTW9qbGd6dlhZVjF1dVBvLXU3eUxMUjdLNVNxd3hnNGZPeDBoVUJ1ZzhodU95dlRZaTlGMUJnXzMtMDloNjJ5eDBaTkNGTktZM0d2ejFhYk13aUlHU1pQY2plX0xkX2tEYVFEZzMtSVU3VUhoSC04RHdTazRJbVlZOWhjNG16aVQ2b1Ztd3Z1Q3FNd2VwYi11U1VYemJlNGhUZDFfaW1JQUpwaXk0NW1SYjU4WWRvaVpuN2FOOTBYMTdwbDF4V055d1NIV0Qzd29IbGNmWk1kOGFPWGh4bXBzZHNueXdlVTlTZGRPVHpfdzZWM1RFVng5OVo2MWhVUmhfc2tPNEt1ak42RnZ6cnVlbkRhVHFPaEp3NFlNdW9uYzJMRURXNGtTYUE4R2dLWDhnbWFvcjRjWXIxZUh2Z3JDMmtJOFNrcXdzOG1JNHdCVm52WVZ2X0RKRWNDQmZORTh6dkJtSDhrN01OS0p1LUpsbjk0eUc1NFBQVmx2WDZzRXpxWG1oeDVyUlNzXzBrTDUwbk1wTTk2b1pkRU5OQlo1eVhFeFk4RVo0SmdPa1lEV0tyc3U3XzI5Mzh5UDhvT2FycXZjU0k0b0lJbUVUZHVZS3p3WUlDZ2JxWkk2QjJaa2g0TzNmNEdwa2o4aVV6eHBGUC1YV3dobS1RRFhBM3VJSk84VzZrVmVsMFBNWU05MXRrVzFFaFNoaVZCbHE1WkFQWkhHdkRBWGZvWUl4TVpEWEhGQmt6YkNVT2V3eUxsT1NGcWh5bGU4T2hIa0hZLTZGZlpZZ2dKYTF1ZnRHWTJOYzNzX0N0a2dwSnRUcEp3RVZlWkhXczZ5RU1Tb1FmUlJCaDZwekFmTS1rWDNwaDY2enE1RWxLVEtfWjZTZ1NYVmpzak5zWmozTEk5VjFLa2o4d0E3bVNzM0ozb281Mm9qNTRHX2ZrMjFSd1VhSmRmNHNvQkFoZ09CV0VSU1FmWmRRNXVJQWpkZU1qZGhvLWJmVE5jUnhLRUo2ZHZEQ2dOZFV2aHBuWGhuODA5emw0NXc3SVEtcnpHc3A2bGZNdWtRRkZPdHhHLXBtaDdGeEl1dUNGTV80TUl5Uzk1YU1kXzFxVkxaWFREcGMzWmREWjFneXJnTUxic0diT0oxVkRLX2taSDVjNEZJUXZieWJJREJmNWJsbm1HYlVsbm9TSTBZV1JSWl9RaWF2cV9ZVWZPQmt3amhvdjFzZjBacTBYcmQxdThIQTB6SlVvNElNMHN1dkRDQUo0bElCd2FtVENTZFhUYXdVcXpBY3lCNUFqY3ctOVY3dzFxc0ZUR3MtSENJUktkNDYyNjEwWklyX2xFXzFXOXM3YkJEZlo4eHduYmF4ZGNjc09uWW9rZW9wV3JaQmlIN0hmLVBJT3B1T2dybTVRQWFFQWljV045d0sxaTZsUkU9XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipSZWRlc2lnbmluZyBib2FyZCBjaG9vc2VyIGRpYWxvZyoqXCJ9LHtcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipSZWZhY3RvcmluZyBib2FyZCBkYXRhIGFuZCBVSSB1cGRhdGVzKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX0FvV0xNWVFHdmZaQUdjV09FMjV4SXVFV3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzU3YTM3YzQ4MTkxYmM1OWE5YWEzYWMwMWE3YSIsIm5hbWUiOiJlZGl0IiwiYXJndW1lbnRzIjp7InBhdGgiOiJzcmMvbWFpbi5ycyIsImVkaXRzIjpbeyJvbGRUZXh0IjoiICAgIGxldCBib2FyZF9uYW1lcyA9IHN1cHBvcnRlZF9ib2FyZHMoKTtcbiAgICBsZXQgYm9hcmRfbW9kZWwgPSBndGs6OlN0cmluZ0xpc3Q6Om5ldyhcbiAgICAgICAgJmJvYXJkX25hbWVzXG4gICAgICAgICAgICAuaXRlcigpXG4gICAgICAgICAgICAubWFwKFN0cmluZzo6YXNfc3RyKVxuICAgICAgICAgICAgLmNvbGxlY3Q6OjxWZWM8Xz4+KCksXG4gICAgKTtcbiAgICBsZXQgYm9hcmRfcm93ID0gYWR3OjpDb21ib1Jvdzo6YnVpbGRlcigpXG4gICAgICAgIC50aXRsZShcIkJvYXJkXCIpXG4gICAgICAgIC5zdWJ0aXRsZShcIlNlbGVjdCB0aGUgc2luZ2xlLWJvYXJkIGNvbXB1dGVyIG1vZGVsXCIpXG4gICAgICAgIC5tb2RlbCgmYm9hcmRfbW9kZWwpXG4gICAgICAgIC5lbmFibGVfc2VhcmNoKHRydWUpXG4gICAgICAgIC5idWlsZCgpOyIsIm5ld1RleHQiOiIgICAgbGV0IGJvYXJkcyA9IHN1cHBvcnRlZF9ib2FyZHMoKTtcbiAgICAvLyBLZWVwIHRoZSBsYWJlbHMgaW4gdGhlIHBvcHVwIHNob3J0LiBUaGUgcGxhdGZvcm0gaXMgc2hvd24gc2VwYXJhdGVseSBpblxuICAgIC8vIHRoZSByb3cgc3VidGl0bGUgb25jZSBhIGJvYXJkIGhhcyBiZWVuIHNlbGVjdGVkLlxuICAgIGxldCBtdXQgYm9hcmRfbmFtZXMgPSB2ZWMhW1wiQ2hvb3NlIGEgYm9hcmTigKZcIi50b19vd25lZCgpXTtcbiAgICBsZXQgbXV0IGJvYXJkX3BsYXRmb3JtcyA9IHZlYyFbU3RyaW5nOjpuZXcoKV07XG4gICAgZm9yIChuYW1lLCBwbGF0Zm9ybSkgaW4gYm9hcmRzIHtcbiAgICAgICAgYm9hcmRfbmFtZXMucHVzaChuYW1lKTtcbiAgICAgICAgYm9hcmRfcGxhdGZvcm1zLnB1c2gocGxhdGZvcm0pO1xuICAgIH1cbiAgICBsZXQgYm9hcmRfbW9kZWwgPSBndGs6OlN0cmluZ0xpc3Q6Om5ldyhcbiAgICAgICAgJmJvYXJkX25hbWVzXG4gICAgICAgICAgICAuaXRlcigpXG4gICAgICAgICAgICAubWFwKFN0cmluZzo6YXNfc3RyKVxuICAgICAgICAgICAgLmNvbGxlY3Q6OjxWZWM8Xz4+KCksXG4gICAgKTtcbiAgICBsZXQgYm9hcmRfcm93ID0gYWR3OjpDb21ib1Jvdzo6YnVpbGRlcigpXG4gICAgICAgIC50aXRsZShcIlRhcmdldCBib2FyZFwiKVxuICAgICAgICAuc3VidGl0bGUoZm9ybWF0IShcbiAgICAgICAgICAgIFwiU2VhcmNoIG9yIGNob29zZSBmcm9tIHt9IHN1cHBvcnRlZCBib2FyZHNcIixcbiAgICAgICAgICAgIGJvYXJkX25hbWVzLmxlbigpIC0gMVxuICAgICAgICApKVxuICAgICAgICAubW9kZWwoJmJvYXJkX21vZGVsKVxuICAgICAgICAuZW5hYmxlX3NlYXJjaCh0cnVlKVxuICAgICAgICAuYnVpbGQoKTsifSx7Im9sZFRleHQiOiIgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgbGV0IHN0YXJ0X2J1dHRvbiA9IHN0YXJ0X2J1dHRvbi5jbG9uZSgpO1xuICAgICAgICBib2FyZF9yb3cuY29ubmVjdF9zZWxlY3RlZF9ub3RpZnkobW92ZSB8cm93fCB7XG4gICAgICAgICAgICB1cGRhdGVfc3RhcnQoJnN0YXJ0X2J1dHRvbiwgJnN0YXRlLCByb3csICZkcml2ZV9yb3cpXG4gICAgICAgIH0pOyIsIm5ld1RleHQiOiIgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgbGV0IHN0YXJ0X2J1dHRvbiA9IHN0YXJ0X2J1dHRvbi5jbG9uZSgpO1xuICAgICAgICBsZXQgYm9hcmRfcGxhdGZvcm1zID0gYm9hcmRfcGxhdGZvcm1zLmNsb25lKCk7XG4gICAgICAgIGJvYXJkX3Jvdy5jb25uZWN0X3NlbGVjdGVkX25vdGlmeShtb3ZlIHxyb3d8IHtcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZCA9IHJvdy5zZWxlY3RlZCgpIGFzIHVzaXplO1xuICAgICAgICAgICAgaWYgc2VsZWN0ZWQgPT0gMCB7XG4gICAgICAgICAgICAgICAgcm93LnNldF9zdWJ0aXRsZShmb3JtYXQhKFxuICAgICAgICAgICAgICAgICAgICBcIlNlYXJjaCBvciBjaG9vc2UgZnJvbSB7fSBzdXBwb3J0ZWQgYm9hcmRzXCIsXG4gICAgICAgICAgICAgICAgICAgIGJvYXJkX3BsYXRmb3Jtcy5sZW4oKSAtIDFcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiBsZXQgU29tZShwbGF0Zm9ybSkgPSBib2FyZF9wbGF0Zm9ybXMuZ2V0KHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcm93LnNldF9zdWJ0aXRsZShwbGF0Zm9ybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVfc3RhcnQoJnN0YXJ0X2J1dHRvbiwgJnN0YXRlLCByb3csICZkcml2ZV9yb3cpXG4gICAgICAgIH0pOyJ9LHsib2xkVGV4dCI6IiAgICBidXR0b24uc2V0X3NlbnNpdGl2ZShzdGF0ZS5zb3VyY2UuaXNfc29tZSgpICYmIGJvYXJkLnNlbGVjdGVkKCkgIT0gZ3RrOjpJTlZBTElEX0xJU1RfUE9TSVRJT04gJiYgaGFzX2Rlc3RpbmF0aW9uKTsiLCJuZXdUZXh0IjoiICAgIGJ1dHRvbi5zZXRfc2Vuc2l0aXZlKFxuICAgICAgICBzdGF0ZS5zb3VyY2UuaXNfc29tZSgpXG4gICAgICAgICAgICAmJiBib2FyZC5zZWxlY3RlZCgpICE9IGd0azo6SU5WQUxJRF9MSVNUX1BPU0lUSU9OXG4gICAgICAgICAgICAmJiBib2FyZC5zZWxlY3RlZCgpID4gMFxuICAgICAgICAgICAgJiYgaGFzX2Rlc3RpbmF0aW9uLFxuICAgICk7In0seyJvbGRUZXh0IjoiZm4gc3VwcG9ydGVkX2JvYXJkcygpIC0+IFZlYzxTdHJpbmc+IHtcbiAgICBsZXQgbXV0IHJlc3VsdCA9IFZlYzo6bmV3KCk7XG4gICAgbGV0IG11dCBmYW1pbHkgPSBcIk90aGVyXCI7XG4gICAgZm9yIGxpbmUgaW4gQk9BUkRTLmxpbmVzKCkge1xuICAgICAgICBsZXQgbGluZSA9IGxpbmUudHJpbSgpO1xuICAgICAgICBpZiBsaW5lLmlzX2VtcHR5KCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgbGV0IFNvbWUoaGVhZGluZykgPSBsaW5lLnN0cmlwX3N1ZmZpeCgnOicpIHtcbiAgICAgICAgICAgIGZhbWlseSA9IGhlYWRpbmc7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgYm9hcmQgaW4gbGluZS5zcGxpdF93aGl0ZXNwYWNlKCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZm9ybWF0IShcIntib2FyZH0gIMK3ICB7ZmFtaWx5fVwiKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0XG59IiwibmV3VGV4dCI6ImZuIHN1cHBvcnRlZF9ib2FyZHMoKSAtPiBWZWM8KFN0cmluZywgU3RyaW5nKT4ge1xuICAgIGxldCBtdXQgcmVzdWx0ID0gVmVjOjpuZXcoKTtcbiAgICBsZXQgbXV0IGZhbWlseSA9IFwiT3RoZXJcIjtcbiAgICBmb3IgbGluZSBpbiBCT0FSRFMubGluZXMoKSB7XG4gICAgICAgIGxldCBsaW5lID0gbGluZS50cmltKCk7XG4gICAgICAgIGlmIGxpbmUuaXNfZW1wdHkoKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiBsZXQgU29tZShoZWFkaW5nKSA9IGxpbmUuc3RyaXBfc3VmZml4KCc6Jykge1xuICAgICAgICAgICAgZmFtaWx5ID0gaGVhZGluZztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciBib2FyZCBpbiBsaW5lLnNwbGl0X3doaXRlc3BhY2UoKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCgoYm9hcmQudG9fb3duZWQoKSwgZmFtaWx5LnRvX293bmVkKCkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXN1bHRcbn0ifV19fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MTA1OSwib3V0cHV0IjoxMzMyLCJjYWNoZVJlYWQiOjM1MzI4LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjM4OSwidG90YWxUb2tlbnMiOjM3NzE5LCJjb3N0Ijp7ImlucHV0IjowLjAwNTI5NSwib3V0cHV0IjowLjAzOTk2LCJjYWNoZVJlYWQiOjAuMDE3NjY0LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNjI5MTl9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODkwMzI4MjIsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNTZhNjA2YzgxOTE4NDJjNDc2ZmZkY2I5NzUzIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6Ijk3NGNjZDM1IiwicGFyZW50SWQiOiJmMjY2MDQyYiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MTc6NDQuNjY3WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9Bb1dMTVlRR3ZmWkFHY1dPRTI1eEl1RVd8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1N2EzN2M0ODE5MWJjNTlhOWFhM2FjMDFhN2EiLCJ0b29sTmFtZSI6ImVkaXQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJTdWNjZXNzZnVsbHkgcmVwbGFjZWQgNCBibG9jayhzKSBpbiBzcmMvbWFpbi5ycy4ifV0sImRldGFpbHMiOnsiZGlmZiI6IiAgICAgLi4uXG4gIDg2ICAgICBsZXQgaGFyZHdhcmVfZ3JvdXAgPSBhZHc6OlByZWZlcmVuY2VzR3JvdXA6OmJ1aWxkZXIoKVxuICA4NyAgICAgICAgIC50aXRsZShcIlRhcmdldCBIYXJkd2FyZVwiKVxuICA4OCAgICAgICAgIC5kZXNjcmlwdGlvbihcIlRoZSBtYXRjaGluZyBib290bG9hZGVyIGFuZCBkZXZpY2UgdHJlZSB3aWxsIGJlIGluc3RhbGxlZC5cIilcbiAgODkgICAgICAgICAuYnVpbGQoKTtcbi0gOTAgICAgIGxldCBib2FyZF9uYW1lcyA9IHN1cHBvcnRlZF9ib2FyZHMoKTtcbisgOTAgICAgIGxldCBib2FyZHMgPSBzdXBwb3J0ZWRfYm9hcmRzKCk7XG4rIDkxICAgICAvLyBLZWVwIHRoZSBsYWJlbHMgaW4gdGhlIHBvcHVwIHNob3J0LiBUaGUgcGxhdGZvcm0gaXMgc2hvd24gc2VwYXJhdGVseSBpblxuKyA5MiAgICAgLy8gdGhlIHJvdyBzdWJ0aXRsZSBvbmNlIGEgYm9hcmQgaGFzIGJlZW4gc2VsZWN0ZWQuXG4rIDkzICAgICBsZXQgbXV0IGJvYXJkX25hbWVzID0gdmVjIVtcIkNob29zZSBhIGJvYXJk4oCmXCIudG9fb3duZWQoKV07XG4rIDk0ICAgICBsZXQgbXV0IGJvYXJkX3BsYXRmb3JtcyA9IHZlYyFbU3RyaW5nOjpuZXcoKV07XG4rIDk1ICAgICBmb3IgKG5hbWUsIHBsYXRmb3JtKSBpbiBib2FyZHMge1xuKyA5NiAgICAgICAgIGJvYXJkX25hbWVzLnB1c2gobmFtZSk7XG4rIDk3ICAgICAgICAgYm9hcmRfcGxhdGZvcm1zLnB1c2gocGxhdGZvcm0pO1xuKyA5OCAgICAgfVxuICA5MSAgICAgbGV0IGJvYXJkX21vZGVsID0gZ3RrOjpTdHJpbmdMaXN0OjpuZXcoXG4gIDkyICAgICAgICAgJmJvYXJkX25hbWVzXG4gIDkzICAgICAgICAgICAgIC5pdGVyKClcbiAgOTQgICAgICAgICAgICAgLm1hcChTdHJpbmc6OmFzX3N0cilcbiAgOTUgICAgICAgICAgICAgLmNvbGxlY3Q6OjxWZWM8Xz4+KCksXG4gIDk2ICAgICApO1xuICA5NyAgICAgbGV0IGJvYXJkX3JvdyA9IGFkdzo6Q29tYm9Sb3c6OmJ1aWxkZXIoKVxuLSA5OCAgICAgICAgIC50aXRsZShcIkJvYXJkXCIpXG4tIDk5ICAgICAgICAgLnN1YnRpdGxlKFwiU2VsZWN0IHRoZSBzaW5nbGUtYm9hcmQgY29tcHV0ZXIgbW9kZWxcIilcbisxMDYgICAgICAgICAudGl0bGUoXCJUYXJnZXQgYm9hcmRcIilcbisxMDcgICAgICAgICAuc3VidGl0bGUoZm9ybWF0IShcbisxMDggICAgICAgICAgICAgXCJTZWFyY2ggb3IgY2hvb3NlIGZyb20ge30gc3VwcG9ydGVkIGJvYXJkc1wiLFxuKzEwOSAgICAgICAgICAgICBib2FyZF9uYW1lcy5sZW4oKSAtIDFcbisxMTAgICAgICAgICApKVxuIDEwMCAgICAgICAgIC5tb2RlbCgmYm9hcmRfbW9kZWwpXG4gMTAxICAgICAgICAgLmVuYWJsZV9zZWFyY2godHJ1ZSlcbiAxMDIgICAgICAgICAuYnVpbGQoKTtcbiAxMDMgICAgIGhhcmR3YXJlX2dyb3VwLmFkZCgmYm9hcmRfcm93KTtcbiAgICAgLi4uXG4gMzA3ICAgICB7XG4gMzA4ICAgICAgICAgbGV0IHN0YXRlID0gc3RhdGUuY2xvbmUoKTtcbiAzMDkgICAgICAgICBsZXQgZHJpdmVfcm93ID0gZHJpdmVfcm93LmNsb25lKCk7XG4gMzEwICAgICAgICAgbGV0IHN0YXJ0X2J1dHRvbiA9IHN0YXJ0X2J1dHRvbi5jbG9uZSgpO1xuKzMyMiAgICAgICAgIGxldCBib2FyZF9wbGF0Zm9ybXMgPSBib2FyZF9wbGF0Zm9ybXMuY2xvbmUoKTtcbiAzMTEgICAgICAgICBib2FyZF9yb3cuY29ubmVjdF9zZWxlY3RlZF9ub3RpZnkobW92ZSB8cm93fCB7XG4rMzI0ICAgICAgICAgICAgIGxldCBzZWxlY3RlZCA9IHJvdy5zZWxlY3RlZCgpIGFzIHVzaXplO1xuKzMyNSAgICAgICAgICAgICBpZiBzZWxlY3RlZCA9PSAwIHtcbiszMjYgICAgICAgICAgICAgICAgIHJvdy5zZXRfc3VidGl0bGUoZm9ybWF0IShcbiszMjcgICAgICAgICAgICAgICAgICAgICBcIlNlYXJjaCBvciBjaG9vc2UgZnJvbSB7fSBzdXBwb3J0ZWQgYm9hcmRzXCIsXG4rMzI4ICAgICAgICAgICAgICAgICAgICAgYm9hcmRfcGxhdGZvcm1zLmxlbigpIC0gMVxuKzMyOSAgICAgICAgICAgICAgICAgKSk7XG4rMzMwICAgICAgICAgICAgIH0gZWxzZSBpZiBsZXQgU29tZShwbGF0Zm9ybSkgPSBib2FyZF9wbGF0Zm9ybXMuZ2V0KHNlbGVjdGVkKSB7XG4rMzMxICAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKHBsYXRmb3JtKTtcbiszMzIgICAgICAgICAgICAgfVxuIDMxMiAgICAgICAgICAgICB1cGRhdGVfc3RhcnQoJnN0YXJ0X2J1dHRvbiwgJnN0YXRlLCByb3csICZkcml2ZV9yb3cpXG4gMzEzICAgICAgICAgfSk7XG4gMzE0ICAgICB9XG4gMzE1ICAgICB7XG4gICAgIC4uLlxuIDQ0NCAgICAgICAgIHN0YXRlLm91dHB1dF9maWxlLmlzX3NvbWUoKVxuIDQ0NSAgICAgfSBlbHNlIHtcbiA0NDYgICAgICAgICBkcml2ZS5tb2RlbCgpLm1hcCh8bXwgbS5uX2l0ZW1zKCkgPiAwKS51bndyYXBfb3IoZmFsc2UpXG4gNDQ3ICAgICB9O1xuLTQ0OCAgICAgYnV0dG9uLnNldF9zZW5zaXRpdmUoc3RhdGUuc291cmNlLmlzX3NvbWUoKSAmJiBib2FyZC5zZWxlY3RlZCgpICE9IGd0azo6SU5WQUxJRF9MSVNUX1BPU0lUSU9OICYmIGhhc19kZXN0aW5hdGlvbik7XG4rNDY5ICAgICBidXR0b24uc2V0X3NlbnNpdGl2ZShcbis0NzAgICAgICAgICBzdGF0ZS5zb3VyY2UuaXNfc29tZSgpXG4rNDcxICAgICAgICAgICAgICYmIGJvYXJkLnNlbGVjdGVkKCkgIT0gZ3RrOjpJTlZBTElEX0xJU1RfUE9TSVRJT05cbis0NzIgICAgICAgICAgICAgJiYgYm9hcmQuc2VsZWN0ZWQoKSA+IDBcbis0NzMgICAgICAgICAgICAgJiYgaGFzX2Rlc3RpbmF0aW9uLFxuKzQ3NCAgICAgKTtcbiA0NDkgfVxuIDQ1MCBcbi00NTEgZm4gc3VwcG9ydGVkX2JvYXJkcygpIC0+IFZlYzxTdHJpbmc+IHtcbis0NzcgZm4gc3VwcG9ydGVkX2JvYXJkcygpIC0+IFZlYzwoU3RyaW5nLCBTdHJpbmcpPiB7XG4gNDUyICAgICBsZXQgbXV0IHJlc3VsdCA9IFZlYzo6bmV3KCk7XG4gNDUzICAgICBsZXQgbXV0IGZhbWlseSA9IFwiT3RoZXJcIjtcbiA0NTQgICAgIGZvciBsaW5lIGluIEJPQVJEUy5saW5lcygpIHtcbiA0NTUgICAgICAgICBsZXQgbGluZSA9IGxpbmUudHJpbSgpO1xuICAgICAuLi5cbiA0NjAgICAgICAgICAgICAgZmFtaWx5ID0gaGVhZGluZztcbiA0NjEgICAgICAgICAgICAgY29udGludWU7XG4gNDYyICAgICAgICAgfVxuIDQ2MyAgICAgICAgIGZvciBib2FyZCBpbiBsaW5lLnNwbGl0X3doaXRlc3BhY2UoKSB7XG4tNDY0ICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZvcm1hdCEoXCJ7Ym9hcmR9ICDCtyAge2ZhbWlseX1cIikpO1xuKzQ5MCAgICAgICAgICAgICByZXN1bHQucHVzaCgoYm9hcmQudG9fb3duZWQoKSwgZmFtaWx5LnRvX293bmVkKCkpKTtcbiA0NjUgICAgICAgICB9XG4gNDY2ICAgICB9XG4gNDY3ICAgICByZXN1bHRcbiA0NjggfVxuICAgICAuLi4iLCJwYXRjaCI6Ii0tLSBzcmMvbWFpbi5yc1xuKysrIHNyYy9tYWluLnJzXG5AQCAtODYsMTggKzg2LDI5IEBAXG4gICAgIGxldCBoYXJkd2FyZV9ncm91cCA9IGFkdzo6UHJlZmVyZW5jZXNHcm91cDo6YnVpbGRlcigpXG4gICAgICAgICAudGl0bGUoXCJUYXJnZXQgSGFyZHdhcmVcIilcbiAgICAgICAgIC5kZXNjcmlwdGlvbihcIlRoZSBtYXRjaGluZyBib290bG9hZGVyIGFuZCBkZXZpY2UgdHJlZSB3aWxsIGJlIGluc3RhbGxlZC5cIilcbiAgICAgICAgIC5idWlsZCgpO1xuLSAgICBsZXQgYm9hcmRfbmFtZXMgPSBzdXBwb3J0ZWRfYm9hcmRzKCk7XG4rICAgIGxldCBib2FyZHMgPSBzdXBwb3J0ZWRfYm9hcmRzKCk7XG4rICAgIC8vIEtlZXAgdGhlIGxhYmVscyBpbiB0aGUgcG9wdXAgc2hvcnQuIFRoZSBwbGF0Zm9ybSBpcyBzaG93biBzZXBhcmF0ZWx5IGluXG4rICAgIC8vIHRoZSByb3cgc3VidGl0bGUgb25jZSBhIGJvYXJkIGhhcyBiZWVuIHNlbGVjdGVkLlxuKyAgICBsZXQgbXV0IGJvYXJkX25hbWVzID0gdmVjIVtcIkNob29zZSBhIGJvYXJk4oCmXCIudG9fb3duZWQoKV07XG4rICAgIGxldCBtdXQgYm9hcmRfcGxhdGZvcm1zID0gdmVjIVtTdHJpbmc6Om5ldygpXTtcbisgICAgZm9yIChuYW1lLCBwbGF0Zm9ybSkgaW4gYm9hcmRzIHtcbisgICAgICAgIGJvYXJkX25hbWVzLnB1c2gobmFtZSk7XG4rICAgICAgICBib2FyZF9wbGF0Zm9ybXMucHVzaChwbGF0Zm9ybSk7XG4rICAgIH1cbiAgICAgbGV0IGJvYXJkX21vZGVsID0gZ3RrOjpTdHJpbmdMaXN0OjpuZXcoXG4gICAgICAgICAmYm9hcmRfbmFtZXNcbiAgICAgICAgICAgICAuaXRlcigpXG4gICAgICAgICAgICAgLm1hcChTdHJpbmc6OmFzX3N0cilcbiAgICAgICAgICAgICAuY29sbGVjdDo6PFZlYzxfPj4oKSxcbiAgICAgKTtcbiAgICAgbGV0IGJvYXJkX3JvdyA9IGFkdzo6Q29tYm9Sb3c6OmJ1aWxkZXIoKVxuLSAgICAgICAgLnRpdGxlKFwiQm9hcmRcIilcbi0gICAgICAgIC5zdWJ0aXRsZShcIlNlbGVjdCB0aGUgc2luZ2xlLWJvYXJkIGNvbXB1dGVyIG1vZGVsXCIpXG4rICAgICAgICAudGl0bGUoXCJUYXJnZXQgYm9hcmRcIilcbisgICAgICAgIC5zdWJ0aXRsZShmb3JtYXQhKFxuKyAgICAgICAgICAgIFwiU2VhcmNoIG9yIGNob29zZSBmcm9tIHt9IHN1cHBvcnRlZCBib2FyZHNcIixcbisgICAgICAgICAgICBib2FyZF9uYW1lcy5sZW4oKSAtIDFcbisgICAgICAgICkpXG4gICAgICAgICAubW9kZWwoJmJvYXJkX21vZGVsKVxuICAgICAgICAgLmVuYWJsZV9zZWFyY2godHJ1ZSlcbiAgICAgICAgIC5idWlsZCgpO1xuICAgICBoYXJkd2FyZV9ncm91cC5hZGQoJmJvYXJkX3Jvdyk7XG5AQCAtMzA3LDkgKzMxOCwxOSBAQFxuICAgICB7XG4gICAgICAgICBsZXQgc3RhdGUgPSBzdGF0ZS5jbG9uZSgpO1xuICAgICAgICAgbGV0IGRyaXZlX3JvdyA9IGRyaXZlX3Jvdy5jbG9uZSgpO1xuICAgICAgICAgbGV0IHN0YXJ0X2J1dHRvbiA9IHN0YXJ0X2J1dHRvbi5jbG9uZSgpO1xuKyAgICAgICAgbGV0IGJvYXJkX3BsYXRmb3JtcyA9IGJvYXJkX3BsYXRmb3Jtcy5jbG9uZSgpO1xuICAgICAgICAgYm9hcmRfcm93LmNvbm5lY3Rfc2VsZWN0ZWRfbm90aWZ5KG1vdmUgfHJvd3wge1xuKyAgICAgICAgICAgIGxldCBzZWxlY3RlZCA9IHJvdy5zZWxlY3RlZCgpIGFzIHVzaXplO1xuKyAgICAgICAgICAgIGlmIHNlbGVjdGVkID09IDAge1xuKyAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKGZvcm1hdCEoXG4rICAgICAgICAgICAgICAgICAgICBcIlNlYXJjaCBvciBjaG9vc2UgZnJvbSB7fSBzdXBwb3J0ZWQgYm9hcmRzXCIsXG4rICAgICAgICAgICAgICAgICAgICBib2FyZF9wbGF0Zm9ybXMubGVuKCkgLSAxXG4rICAgICAgICAgICAgICAgICkpO1xuKyAgICAgICAgICAgIH0gZWxzZSBpZiBsZXQgU29tZShwbGF0Zm9ybSkgPSBib2FyZF9wbGF0Zm9ybXMuZ2V0KHNlbGVjdGVkKSB7XG4rICAgICAgICAgICAgICAgIHJvdy5zZXRfc3VidGl0bGUocGxhdGZvcm0pO1xuKyAgICAgICAgICAgIH1cbiAgICAgICAgICAgICB1cGRhdGVfc3RhcnQoJnN0YXJ0X2J1dHRvbiwgJnN0YXRlLCByb3csICZkcml2ZV9yb3cpXG4gICAgICAgICB9KTtcbiAgICAgfVxuICAgICB7XG5AQCAtNDQ0LDEyICs0NjUsMTcgQEBcbiAgICAgICAgIHN0YXRlLm91dHB1dF9maWxlLmlzX3NvbWUoKVxuICAgICB9IGVsc2Uge1xuICAgICAgICAgZHJpdmUubW9kZWwoKS5tYXAofG18IG0ubl9pdGVtcygpID4gMCkudW53cmFwX29yKGZhbHNlKVxuICAgICB9O1xuLSAgICBidXR0b24uc2V0X3NlbnNpdGl2ZShzdGF0ZS5zb3VyY2UuaXNfc29tZSgpICYmIGJvYXJkLnNlbGVjdGVkKCkgIT0gZ3RrOjpJTlZBTElEX0xJU1RfUE9TSVRJT04gJiYgaGFzX2Rlc3RpbmF0aW9uKTtcbisgICAgYnV0dG9uLnNldF9zZW5zaXRpdmUoXG4rICAgICAgICBzdGF0ZS5zb3VyY2UuaXNfc29tZSgpXG4rICAgICAgICAgICAgJiYgYm9hcmQuc2VsZWN0ZWQoKSAhPSBndGs6OklOVkFMSURfTElTVF9QT1NJVElPTlxuKyAgICAgICAgICAgICYmIGJvYXJkLnNlbGVjdGVkKCkgPiAwXG4rICAgICAgICAgICAgJiYgaGFzX2Rlc3RpbmF0aW9uLFxuKyAgICApO1xuIH1cbiBcbi1mbiBzdXBwb3J0ZWRfYm9hcmRzKCkgLT4gVmVjPFN0cmluZz4ge1xuK2ZuIHN1cHBvcnRlZF9ib2FyZHMoKSAtPiBWZWM8KFN0cmluZywgU3RyaW5nKT4ge1xuICAgICBsZXQgbXV0IHJlc3VsdCA9IFZlYzo6bmV3KCk7XG4gICAgIGxldCBtdXQgZmFtaWx5ID0gXCJPdGhlclwiO1xuICAgICBmb3IgbGluZSBpbiBCT0FSRFMubGluZXMoKSB7XG4gICAgICAgICBsZXQgbGluZSA9IGxpbmUudHJpbSgpO1xuQEAgLTQ2MCw5ICs0ODYsOSBAQFxuICAgICAgICAgICAgIGZhbWlseSA9IGhlYWRpbmc7XG4gICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICB9XG4gICAgICAgICBmb3IgYm9hcmQgaW4gbGluZS5zcGxpdF93aGl0ZXNwYWNlKCkge1xuLSAgICAgICAgICAgIHJlc3VsdC5wdXNoKGZvcm1hdCEoXCJ7Ym9hcmR9ICDCtyAge2ZhbWlseX1cIikpO1xuKyAgICAgICAgICAgIHJlc3VsdC5wdXNoKChib2FyZC50b19vd25lZCgpLCBmYW1pbHkudG9fb3duZWQoKSkpO1xuICAgICAgICAgfVxuICAgICB9XG4gICAgIHJlc3VsdFxuIH1cbiIsImZpcnN0Q2hhbmdlZExpbmUiOjkwfSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4OTA2NDY2N319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjE0NzQ5ZjRiIiwicGFyZW50SWQiOiI5NzRjY2QzNSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MTc6NDguNzQwWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipWZXJpZnlpbmcgY29tcGlsYXRpb24qKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNThiYTlhYzgxOTE5YWYzMWUyY2MzOTZmZWU4XCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNV01VR1lGbWI0cE5aenRwRjkzTFNscEVoLWlnd24zakpZejduVzNxa2hzb3czRjBWalRuSjE2THNoVl94bTBLSkNoYm5JZDBCVUs5UF8zSjF2SE50YjNnbjFGeF9INkVvSWRLM0ppdTVLTDBvN3RpZW9lUmdzLUNxU3BuUzZacFQ0V3pkY3dTVUh1V3FmUmVQaGNxczZWTzQ5bkQ3R29xWDBpaFRRNy1wSGpBYTJGQzlIM05XRU9rWWhnTnozb1hFbk01MHhUYmRWTkphbG9ZYnUyOFJyUEpNM2l2V0pUWTVBN1Y4T1h0SmhwZnNyUU9BX0laTFpsSnpZdXVQdF90dXZUdEd3SGtRSE9iM0ZEMThHcHZ5X09vdVhQbFhjdm5tQ1htNmhoMHMzZE1Za0JxNS02eGZLWVIzcGtPancwTG9OOXpuZEt1WHdoa3ZIZElsTWNWRVJGRmJ0M29Qdnl4VTBWTV96SEl6cDdXeGlpdVFqcHVnbU4yM1NjTWdBTXp1N01QYkdhWll4a3c4ZkhBOEI0WERTN25SOUhNWGtuSWNPX3g1U2w0RG9kNTA4MGRTWDlucE9vRjJfRmxvNVZ6NXROalJic2p3dW5BV1Y1QXRyY25rN3FYSzhvLXRKVnpVUFRrbV9SSUFaQXpZOUY4Z1hjUFgzc0pqWVdnNnFxQTBueVVwSlA4SjZOYmp4SkZvelJza3k0SFNmTmdCN0tWbHRqWS10WGhkangxSUxTLU5tblFmdkFjMEVTYmozYTNJRE0zeklWemRKZXE3WXdaSGlXaWsxTmhwRXJ2R1dnTjVXcUtBaVo5ZGF6dXJEZWtGa01uc05uTEZnd1NEZFVpdUxnMGRnSWxIdVNMRlhfLVFvd1JYY1pQelJYM2pRWG9DMjlOQ2Z1Qll3WTJjSE5TODBDS2NTX18xbUZQSFlNeVJ3R0FLa2txYkNaMXcwOWpCbjE0eHY3SERGRlBGRHowS2Q1a21WZ1VZT014cHJHMG1qTnhhMnZaYjZXWGVRRDRoS0NFWm4wcEpnc1ljNmQycHRDN0tna3VIRnY2R2xqY1RiUjFWMFdJRTJPbk1GUTNXSGxjLVBOOUxadU03Ul9PUEg2UUxoV2dzQjJ4VzRpNDNTSVV5Z2FrNjlyNm12anNDa1ZoVnZUUHNSSmxpVHFQVC04YzE1UXRBSTNiU3JIemR0NWtUMzVfbjFaellZVnVYNHBzLWRZWWYyN09WbXZlWG9ybzNlMEU1U2dwV1prcmhpR2VWMWgwTmZtU092U1E0a1RcIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlZlcmlmeWluZyBjb21waWxhdGlvbioqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9JREs0RWFCSUhKckgyWmJsZkxvcE1ESWt8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1OGMxN2E4ODE5MTgwNTdmNmFkMTI5ZjgyMGUiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiRE9DU19SUz0xIFJVU1RDX0JPT1RTVFJBUD0xIFJVU1RGTEFHUz0nLS1jZmcgZG9jc3JzJyBjYXJnbyBjaGVjayIsInRpbWVvdXQiOjEyMH19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoyNDEzLCJvdXRwdXQiOjU0LCJjYWNoZVJlYWQiOjM1MzI4LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjcsInRvdGFsVG9rZW5zIjozNzc5NSwiY29zdCI6eyJpbnB1dCI6MC4wMTIwNjUwMDAwMDAwMDAwMDEsIm91dHB1dCI6MC4wMDE2MjAwMDAwMDAwMDAwMDAxLCJjYWNoZVJlYWQiOjAuMDE3NjY0LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wMzEzNDl9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODkwNjQ2NjksInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNTg5MDVjMDgxOTFiZDViMjI1NTkyMGYxODE5In19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6Ijk1MzJjZmQwIiwicGFyZW50SWQiOiIxNDc0OWY0YiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MTc6NDguOTY0WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9JREs0RWFCSUhKckgyWmJsZkxvcE1ESWt8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1OGMxN2E4ODE5MTgwNTdmNmFkMTI5ZjgyMGUiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIgICAgQ2hlY2tpbmcgZmxhc2hlciB2MC4xLjAgKC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIpXG5lcnJvcltFMDMwOF06IG1pc21hdGNoZWQgdHlwZXNcbiAgIC0tPiBzcmMvbWFpbi5yczozMjY6MzRcbiAgICB8XG4zMjYgfCAgICAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKGZvcm1hdCEoXG4gICAgfCAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX15cbjMyNyB8IHwgICAgICAgICAgICAgICAgICAgICBcIlNlYXJjaCBvciBjaG9vc2UgZnJvbSB7fSBzdXBwb3J0ZWQgYm9hcmRzXCIsXG4zMjggfCB8ICAgICAgICAgICAgICAgICAgICAgYm9hcmRfcGxhdGZvcm1zLmxlbigpIC0gMVxuMzI5IHwgfCAgICAgICAgICAgICAgICAgKSk7XG4gICAgfCB8X19fX19fX19fX19fX19fX19eIGV4cGVjdGVkIGAmc3RyYCwgZm91bmQgYFN0cmluZ2BcblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBlcnJvciwgdHJ5IGBydXN0YyAtLWV4cGxhaW4gRTAzMDhgLlxuZXJyb3I6IGNvdWxkIG5vdCBjb21waWxlIGBmbGFzaGVyYCAoYmluIFwiZmxhc2hlclwiKSBkdWUgdG8gMSBwcmV2aW91cyBlcnJvclxuXG5cbkNvbW1hbmQgZXhpdGVkIHdpdGggY29kZSAxMDEifV0sImRldGFpbHMiOnt9LCJpc0Vycm9yIjp0cnVlLCJ0aW1lc3RhbXAiOjE3ODQ5ODkwNjg5NjR9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJiNDljN2Q3ZSIsInBhcmVudElkIjoiOTUzMmNmZDAiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjE3OjUyLjk5MVoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqSWRlbnRpZnlpbmcgZm9ybWF0IG1ldGhvZCByZXF1aXJlbWVudHMqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNThlYjRmODgxOTFiMDA3ZGVlYzQ4ZmU0NDZmXCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNV1A3QmM2d3ZRSmZpdlhuNGxRcHIxMDFldzFnOWRXNDFNTHlkcUpaeTJUN2gyYnYxQ1BmcUtpSzJCbGRrTVVqalZvNklUUjdEWUhJUnJYZUNBLWsxX0RFd1g5aDA5NWpRb0xmYTM2WDFBNnRnVEp2a1AzQ1pjUjdTTXlzNTBPSkJ6NTB1SzRaTEhxNExOZnp0cXcwZE1vSlduOUl2Q1htMjJ4NkFnTmtYcGtXU0RSV2wtck1EZTYwSXd2YWxLcTJTbHFTclVfUURwaHhsMGNCMU5MZ09jU29SQVJoczVwTC1EckdnVnN5anFNYkFfQzc3ZE1XRnhUM0N0RWdSM013OV93a1QxVTBJQTBuNTMwbTRHTGxQRTFQR1VLTHg2d1RKR18wNi10cmdJcXBlV0d2c0VtV2NxRVU2QVM1ZG91WGJ3Y2dJMnZ4YmRLX2NCLTVfcjlMVVI0MEc1QWx0QVBMSEdVc3dMb094cDZFWm1telZFdVBTTy1mUFJkd1J3OHd6UExLMEhrV2xZV2tIUFhQMUVvb1NxcEMtTDVoclp5VTFFWmh1N0VCTUY3RGxWdFZkb1BKNGRIRnZOMzIxWlVYTllqbEtIRVlnMUpzdzhkNDh6RHRheUF6bWoxWGVKLTFXVy1vSkZvQndBQjROeG1pbkk1MDFHZXhGaExyN1o3bC1wRmtzZWlwenVpX1VWdnBtRUNJcWtUREVYcGpqOUZoT2JvMk4xbmN1RXZKUEZvejc5R040c3J6VW1NY1RvQWlRM29fMlF1dlJDcURUdkcyZm03VUtDQk5Td3VMazB2ZFkyUTRHd1pPQ0RNbm1aQXF2T0c2YjFxeERCbmpUTkNpQXVVblhDMUhNa2lRaGdUTnpJYm0wZU5keWFSR21VQjdhaFJOaGVxbzNiTVFsemhCZURaUFVGWjgtOURzWEpEdWk1TnZnVVdEYUE1c3ZiaGQ0enRXOHZmZm5obU8zSFBVaC1HaURjZ3B6T29Sa2lwbGZ4dlp0cVdfaHcwR2hBcUpMQk5KVlBvZHEtNzhUdGpfV2lNRzQ5WG5NRk42RnRSbkl5UzYxLW43WnZfSnkxWFAxMHF6aFZwS2IxZnpVSHBuVDZrdmVJNkJZX0Rxd2dTQW5ZR3o1eEFJaU8tYkZTVTNuT2ZGakx4SWJsTTRfbjQ4ZVhOUUJFMXo4TDE5VDZMbl8tU2RVSmNjYkt0ZTZwQUFCSDBSaEMzaXVHclFBTF94VnpsTUZjNndvak53emJER0RJc1lpNzNyRDZMcVVqT2dwdENuNzVJdkZZSjhDSWF4TEtBdWtuUFRodi1SalBYUEdfOXBPdnc5SmREbUxSUFYwWWRZT2gzYjIzdkIwZVFvZFpiczNUSC1qUWlCQTNoRWRLNm9ybGJZUT09XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipJZGVudGlmeWluZyBmb3JtYXQgbWV0aG9kIHJlcXVpcmVtZW50cyoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9FZzhDandqVDFLZ2wxeHVTRzRUMHF5ZzJ8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1OGZiMTA0ODE5MWJhZDBjMGU0OTAwNmQ2MzIiLCJuYW1lIjoiZWRpdCIsImFyZ3VtZW50cyI6eyJwYXRoIjoic3JjL21haW4ucnMiLCJlZGl0cyI6W3sib2xkVGV4dCI6IiAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKGZvcm1hdCEoXG4gICAgICAgICAgICAgICAgICAgIFwiU2VhcmNoIG9yIGNob29zZSBmcm9tIHt9IHN1cHBvcnRlZCBib2FyZHNcIixcbiAgICAgICAgICAgICAgICAgICAgYm9hcmRfcGxhdGZvcm1zLmxlbigpIC0gMVxuICAgICAgICAgICAgICAgICkpOyIsIm5ld1RleHQiOiIgICAgICAgICAgICAgICAgcm93LnNldF9zdWJ0aXRsZSgmZm9ybWF0IShcbiAgICAgICAgICAgICAgICAgICAgXCJTZWFyY2ggb3IgY2hvb3NlIGZyb20ge30gc3VwcG9ydGVkIGJvYXJkc1wiLFxuICAgICAgICAgICAgICAgICAgICBib2FyZF9wbGF0Zm9ybXMubGVuKCkgLSAxXG4gICAgICAgICAgICAgICAgKSk7In1dfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjU3Nywib3V0cHV0IjoxMjIsImNhY2hlUmVhZCI6MzczNzYsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MjEsInRvdGFsVG9rZW5zIjozODA3NSwiY29zdCI6eyJpbnB1dCI6MC4wMDI4ODUwMDAwMDAwMDAwMDA0LCJvdXRwdXQiOjAuMDAzNjYsImNhY2hlUmVhZCI6MC4wMTg2ODgsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAyNTIzM319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTA2ODk2NiwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1OGQ2NDBjODE5MTkxMzE5NDQyZGEwMjc3Y2IifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiN2NiNTI3OTEiLCJwYXJlbnRJZCI6ImI0OWM3ZDdlIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxNzo1Mi45OTVaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX0VnOENqd2pUMUtnbDF4dVNHNFQwcXlnMnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzU4ZmIxMDQ4MTkxYmFkMGMwZTQ5MDA2ZDYzMiIsInRvb2xOYW1lIjoiZWRpdCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IlN1Y2Nlc3NmdWxseSByZXBsYWNlZCAxIGJsb2NrKHMpIGluIHNyYy9tYWluLnJzLiJ9XSwiZGV0YWlscyI6eyJkaWZmIjoiICAgICAuLi5cbiAzMjIgICAgICAgICBsZXQgYm9hcmRfcGxhdGZvcm1zID0gYm9hcmRfcGxhdGZvcm1zLmNsb25lKCk7XG4gMzIzICAgICAgICAgYm9hcmRfcm93LmNvbm5lY3Rfc2VsZWN0ZWRfbm90aWZ5KG1vdmUgfHJvd3wge1xuIDMyNCAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQgPSByb3cuc2VsZWN0ZWQoKSBhcyB1c2l6ZTtcbiAzMjUgICAgICAgICAgICAgaWYgc2VsZWN0ZWQgPT0gMCB7XG4tMzI2ICAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKGZvcm1hdCEoXG4rMzI2ICAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKCZmb3JtYXQhKFxuIDMyNyAgICAgICAgICAgICAgICAgICAgIFwiU2VhcmNoIG9yIGNob29zZSBmcm9tIHt9IHN1cHBvcnRlZCBib2FyZHNcIixcbiAzMjggICAgICAgICAgICAgICAgICAgICBib2FyZF9wbGF0Zm9ybXMubGVuKCkgLSAxXG4gMzI5ICAgICAgICAgICAgICAgICApKTtcbiAzMzAgICAgICAgICAgICAgfSBlbHNlIGlmIGxldCBTb21lKHBsYXRmb3JtKSA9IGJvYXJkX3BsYXRmb3Jtcy5nZXQoc2VsZWN0ZWQpIHtcbiAgICAgLi4uIiwicGF0Y2giOiItLS0gc3JjL21haW4ucnNcbisrKyBzcmMvbWFpbi5yc1xuQEAgLTMyMiw5ICszMjIsOSBAQFxuICAgICAgICAgbGV0IGJvYXJkX3BsYXRmb3JtcyA9IGJvYXJkX3BsYXRmb3Jtcy5jbG9uZSgpO1xuICAgICAgICAgYm9hcmRfcm93LmNvbm5lY3Rfc2VsZWN0ZWRfbm90aWZ5KG1vdmUgfHJvd3wge1xuICAgICAgICAgICAgIGxldCBzZWxlY3RlZCA9IHJvdy5zZWxlY3RlZCgpIGFzIHVzaXplO1xuICAgICAgICAgICAgIGlmIHNlbGVjdGVkID09IDAge1xuLSAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKGZvcm1hdCEoXG4rICAgICAgICAgICAgICAgIHJvdy5zZXRfc3VidGl0bGUoJmZvcm1hdCEoXG4gICAgICAgICAgICAgICAgICAgICBcIlNlYXJjaCBvciBjaG9vc2UgZnJvbSB7fSBzdXBwb3J0ZWQgYm9hcmRzXCIsXG4gICAgICAgICAgICAgICAgICAgICBib2FyZF9wbGF0Zm9ybXMubGVuKCkgLSAxXG4gICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgIH0gZWxzZSBpZiBsZXQgU29tZShwbGF0Zm9ybSkgPSBib2FyZF9wbGF0Zm9ybXMuZ2V0KHNlbGVjdGVkKSB7XG4iLCJmaXJzdENoYW5nZWRMaW5lIjozMjZ9LCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg5MDcyOTk1fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZjViZmQzNzIiLCJwYXJlbnRJZCI6IjdjYjUyNzkxIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxNzo1NS42NjFaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX21BNWRhNXdBNUU0UmI4Q1g4bDVjZTEyN3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzU5MmU0M2M4MTkxYWFiZjMxYmFlOGRmMWMwNyIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJET0NTX1JTPTEgUlVTVENfQk9PVFNUUkFQPTEgUlVTVEZMQUdTPSctLWNmZyBkb2NzcnMnIGNhcmdvIGNoZWNrIiwidGltZW91dCI6MTIwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjcyMSwib3V0cHV0Ijo0NSwiY2FjaGVSZWFkIjozNzM3NiwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjowLCJ0b3RhbFRva2VucyI6MzgxNDIsImNvc3QiOnsiaW5wdXQiOjAuMDAzNjA1LCJvdXRwdXQiOjAuMDAxMzUsImNhY2hlUmVhZCI6MC4wMTg2ODgsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAyMzY0M319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTA3Mjk5NiwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1OTE2MDk4ODE5MTk5Mzk5ODRlNjJlNWJiMzEifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMDBkZmIzMzIiLCJwYXJlbnRJZCI6ImY1YmZkMzcyIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxNzo1NS44MjdaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX21BNWRhNXdBNUU0UmI4Q1g4bDVjZTEyN3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzU5MmU0M2M4MTkxYWFiZjMxYmFlOGRmMWMwNyIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiAgICBDaGVja2luZyBmbGFzaGVyIHYwLjEuMCAoL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlcilcbiAgICBGaW5pc2hlZCBgZGV2YCBwcm9maWxlIFt1bm9wdGltaXplZCArIGRlYnVnaW5mb10gdGFyZ2V0KHMpIGluIDAuMTVzXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODkwNzU4Mjd9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJmOTdlODJjYSIsInBhcmVudElkIjoiMDBkZmIzMzIiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjE3OjU5LjAzNloiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJJbXByb3ZlZCB0aGUgYm9hcmQgc2VsZWN0b3IgaW4gYHNyYy9tYWluLnJzYDpcblxuLSBEcm9wZG93biBub3cgZGlzcGxheXMgb25seSBib2FyZCBuYW1lcywgcmVkdWNpbmcgaG9yaXpvbnRhbCBjbHV0dGVyLlxuLSBQbGF0Zm9ybS9mYW1pbHkgaW5mb3JtYXRpb24gYXBwZWFycyBpbiB0aGUgcm93IHN1YnRpdGxlIGFmdGVyIHNlbGVjdGlvbi5cbi0gQWRkZWQgYSDigJxDaG9vc2UgYSBib2FyZOKApuKAnSBwbGFjZWhvbGRlci5cbi0gRGlzcGxheXMgdGhlIG51bWJlciBvZiBzdXBwb3J0ZWQgYm9hcmRzLlxuLSBXcml0aW5nIHJlbWFpbnMgZGlzYWJsZWQgdW50aWwgYSBib2FyZCBpcyBleHBsaWNpdGx5IHNlbGVjdGVkLlxuXG5gY2FyZ28gY2hlY2tgIHBhc3Nlcy4iLCJ0ZXh0U2lnbmF0dXJlIjoie1widlwiOjEsXCJpZFwiOlwibXNnXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNTk1NjY4NDgxOTE5OTZlMjE0NzJhM2IyNDM5XCIsXCJwaGFzZVwiOlwiZmluYWxfYW5zd2VyXCJ9In1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjgyMSwib3V0cHV0Ijo3NiwiY2FjaGVSZWFkIjozNzM3NiwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjowLCJ0b3RhbFRva2VucyI6MzgyNzMsImNvc3QiOnsiaW5wdXQiOjAuMDA0MTA1LCJvdXRwdXQiOjAuMDAyMjgsImNhY2hlUmVhZCI6MC4wMTg2ODgsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAyNTA3Mjk5OTk5OTk5OTk5OH19LCJzdG9wUmVhc29uIjoic3RvcCIsInRpbWVzdGFtcCI6MTc4NDk4OTA3NTgyOCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1OTQyY2Y4ODE5MTk3OTk0MzYzMWY5NDVlODQifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYzFjZTFiNzQiLCJwYXJlbnRJZCI6ImY5N2U4MmNhIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxODo0MC40NDVaIiwibWVzc2FnZSI6eyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6ImJ1dCBub3QgdGhlcmUgaXMgbm8gc2VwYXJhdGlvbiBiYXNlZCBvbiBhIHBsYXRmb3JtIG9yIFNvQyJ9XSwidGltZXN0YW1wIjoxNzg0OTg5MTIwNDQ0fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMmIyM2Q3ZjIiLCJwYXJlbnRJZCI6ImMxY2UxYjc0IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxOTozMS4yNDNaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkV2YWx1YXRpbmcgZGlhbG9nIGRlc2lnbiBmb3IgZ3JvdXBlZCBzZWxlY3Rpb25zKipcblxuKipEZXNpZ25pbmcgc2VhcmNoYWJsZSBncm91cGVkIGRyb3Bkb3duIHdpdGggaGVhZGluZ3MqKlxuXG4qKkltcGxlbWVudGluZyBzdHlsZWQgaGVhZGluZyBzdHJpbmdzIGluIGxpc3QgbW9kZWwqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNWMyNzk5NDgxOTFiMzg1YjMwZjlmYzk1MzViXCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNWFduejlNdGpWR0JKRmJ5V1hmQjlnZXdzbmJ5R1hRTkxKdjliXzh0MnZ6ZldZTDREZElkSXhuWXlEMDNWOHZpeUQ0SzRZNFJJYmhfZ3ZXNnF0NmZJbUtiT3BDOXNabk44d2lpbDlyQ2hzekoySE1QZ0RQYVRjYVVVNUtZYVR1LWJjMlZVd1NpTWlNNzF1em9HTC1fWG00Nmt1N2dnY2lKZXJva0F5XzdoSFMxMVJXMjVubGhIVGhvYlJ6TkFsNm9FaktUekpzVUVZVGpVQlZDNk5GS2h4WmxlRHdadU9nOTJSRWZHdVJJdUpvTW50ZkhBb2ptT1hmTUpxSlNuYTZHbE9kUU40bzcyMVZkMWNBUmFENmFZNlpJaGRHQmtMNVRvS1JkcDJfY2E3bWp2czNRTktZMkNKWWcwcUlDRC1nREZxWF9fM0k2S21zMGVpMTM1TmZFekNNQXJLbEpWdDB2Q3Uwcm01d28tMmdWMXZtSDZnT0RYUzZFLVljbVNhWnlkWndYUlhvS2VEektoVHlkenlaMk0xbXgxVnVDUWJHOXZNSTVjR2xYWktvdDR2aldQam16RUQ2eF93VzVJQzFVSlBFcmhsb1lNN3EzaWJ4QklyZFpqeHphMTJ0dGRqeVpuVUxWcENVNTg1bHRBM05VcFMzY1otdjg3UjNnbEFvc1Etdk9aNUx6WDBzZ1Z5LUFRRnpvRzdHWDNjcmJzUF85c0JBS3FsUkJpTi02LThRZW0zT0N4QXRONGVfV2pNWUdJY2M0cGFxZzRQT0YwR09hc3NUQU1IQzlNbkcwcUVDSldQengycDQzck1PTW5meTh0R1Ztd1JVTEwxZHU4aWVvSjZJdjExRzR3MThsOGJhVXlBdTJIb1FMVk4yWGlLNWthVVNpbVlhdlVXN3dFSWVqWTlORWtWQmhMajhNZFhaMEZpWUo2cUtrSWNLSUoyVXpGQl9Sc25hZzNoOWg0OXNRSUJYMmNrU1IzbHFGVzI3aEZuLUd0YTREVi1KbnZCVUtCMTQ0Q0labkw4RXdZWlNSTGxxUGNvQjZPQ3NZNXdLcU1sbzJzWG9rd0VsTExTbE9Ec1AwU2JFaW5kMjdkMExTbjMzc0Zjb09Fa0dIVW5aYk11MVVYcEw0M205eTA4aEV5cElheDJaSFJTTTgtOEFDd2pjOTJJT3l5bHEyYklqSjFwZ1lHdEkwcDAzQVhQa3VfSlpweGxJS3Z5YjRUYmRINGdoUEg5cnNKRWNHdFRoX1RZQUQtUUJzNjlzMzBrT21EX0xoY2h1MHBfOEVXNmlGT3BLa19CcjNFNmNRcnN5eTlBamVueHJfd01QdXU1SzhHY1hfcFpKVkVyNXB0enJwT3NuZGN3OGxUek1tNWd2YUszaGZGMlRVUTB5MkZoWmxrdTlqRjlVZGY5eHhaX0w3eWloSHUxbXFVMmtueUh0UTNzUVl0TVpTVm43aTBEbS1DZ0RQdU5EMEZMZ1pMbzZrSnVMc2l3V05MYUNabWdaa1FaOXRGemNTQVhBdzJJcjJITWl4ZzlLU25rQ0Y0eE9tRk9WV2JvM3p0TURBNnJJazRDcWNySWNRY0xHSHVkWnN5NXl3VEhhcVpuU1VkMWxiVnVBdVpLaW9yZmdQVW11VzYwUnVzRWd6blBjUktTeW5kajdaa3VDeUx3UXFfaTJjRzFxY09CU2xCdko2U3BUbGNHSlllenE5Q1Y4WjN0QnlzeGhJV0lxN00tU2tuU3dqeGpHWjlUdmpEbDQ1bHZ5eFdzRGF0SzIteEhyRWh2QUt2TlhVYWlhd3ZVQUNZaVh2bnUya3pkdGs1QzVadnZUY0IxMDBFVmxVQm1icUtDX1dlQ3BNWXkwQVdid0lMS0FYRVRhNU9UbnMyM3l6SHBwcHNJYTBNTV9lWW5BT0dmRDZ5Q2I4OHh6aHpfOHhGNkdXZWdfaUdfclJuZnd3NlA1b0p0UGRtajI3Z1RRZEJMbGpHSzBXLVRDZWMyR1ctaTFvb0dEdGJXTmtzNGJVN3otbmhBU0FWbWZpWkw2UVZOZ29NcnNVT1lzX1FydFdrTnR2bnk2SmVRMXVVODBxdmI3amJtVFozT0pJQlUtNl84eThqVjlRQllqV2YzZU5ZQm9kdXRjZ3o2bWtzLWFUYmo2MWR3dk53b0FpNzVTRzI4N3YtV2RoSlZlUy1hNEl6WFNxRXB4NkNVS0ozdlIxQmYxazVkTWFZNDNvVDVaWUYta2hfV0JEQTJaVFEzaUdaM25CdGVuN3NOR29uMzB5RW9uWm9Od0JYMVdINFBWdU56N1g4NUNvcUpsMUVKTXpPOVlORVc2N1V4SC1kUE53WlB0bGk5MDh0LWs3LUpaXzRYUkNaaUlST1JoczQ4TDFSQ1p1MFBDYnNvZDRvZzZ2bDRLeG0xNDZHLTl6ZlJtZ0djZ1d1cXlHWGtYWHpvVjNwWjlKbDJSVEt0eHh1S2ZHdC1iZEt3M0VhTHJwazA4RkttT2dFOWRwXy1YN3RnR0xHZmM4d1Y4YWQ0STdacm1LUnI5VXFaUTJ0cTVlMEh0WEp6VHl6RGplcDZpUzA3UmZPTDNsY1didm5GdnE0ZWFJUmdnMHlxUjhDaURuTUI3c1lHOWkxX3dIRi0yOWtmZzR5Wm8tVDFNWnNTRVY1eENuZHF1cFdGTnRkSXFUWmUzbHQwYlBKa0RrMGNKaVpkUC1BdS03MWxieGQ5WkVoNFJZOEpwdDF2M2xxRjRnVVpLdzNZTnAyVjNiZ0o4NU5nUUhoaXdsQk1OTUtQUHU4emVfTE9SUDRsaFlyc3k0aDlTaHdxNmRtSlFxS0lUZGU5V3pfa3dLVXVrZU9CdHhYaFM1MXZWb1JZYkpmZExiSXd2X3lrcE5BREx5UWJjTWhWcW56cHplV2VDcWpPUEFmYlg0WEdXQm1pR3l5OEY5djdTRFRQaGsxZmFxY1NubkdvMmd1akFPVUlTeC14OUNld01jdEdJMFQ1anhzTWxlemhCQk1WZFJzNWFPVW9aTUVYdVNXbzQwa0pmbjhiRVFWVUhEcEFqZUlpd09ScGN1TEtEaUlVT0dQc3BMUjJyYkd4N0poOURrUHI2SEZtLVRZQ1NURVBLTmJlVDNvcy1jVDRRTV9HMF9kRERZdU41LU1Zc1NwTzdMa0xKNTQ1NUtoSUVwR3o3aTdUMHR0OUhMamk4R0wzU0xXeE0ydXBzWnBLSllXUlRGdFdPQU9OdFVDaV9mX3QyMzdrV2g1NktsLVRDcWl1YkR0X2hfYmpnX0lFOW5FZ2M1NGdaZFExZXlhaU0tMk93cThEZDNIcXZSNW43cHBDZ2ZUZFNnTjFKV0F1UGdDRkhyWFFyUlBnSjhseVNDUVFSNFU1aG9hVVNZUHo1UE5xeUVVUU1VbGE0RG5EWWhoUVpFV1g5bGZRd2dzUWlXVUNtWXJudlBhcFhaSE12SUEwUmdFcmt5QU5Nc3RIbFFYNW10c054R2ZmVnRPaWVsRDVJOVlsTnAzWFNKdGRHS3RmTTUtZVRzM01CdFBHTVktUWpWNUVNYVdJMHVoa3FPb2lXbjktSXdwUHI4aERjUVVLNkFCZFB6cmIyQ0FtYkpncEpOc2tfQ01LUUZseFpMRmJNVFpKNHc4U0tzNXRpeVRLdG50enBKV0JjNVpKWFNMRFhhQXFTVXU5NVB4VnNadGR4UHZUSWRNNi1meWxRbEtxTlo4UHpHeDJHSGxnSWxEcFdBMnJoVkl5SEo3eGNRcGFWWnhXWUY0MUFqUEtZVEdqemR4R0RNQ203d1B2cVFEVHNNd3lrZU0zLVZWQnY5QW9uRm9GRTR6aUJFUk9ObXRaSlRfUnNGa3VhVWZJdFVmdVRxRFZSNTdKenY3YmlaUWxMX3g1MkcwaE1IcE1ZRGlBWEhyTDFfaVNFUFcyTHdSRFkxSzJnQlRGMlpON29DZnk4R2dhZHlzUkVibDZpdk9JYlVha3JyamxVQXJVeDgwbmRVajlhaUpETDctQTk0UXRRUEUweEY3Nk44bXVKc0NxbGFGNGhsdV95emFOVmR1dzlJN0sxN2p1MjZZbDNzRUVWSmo4T21xVGw2ZGw5cTNRMjlQMVRFSUpxZ3hPNzAzX01sTDU4UUczWkE1RTAwSXJEUXBTYXBfNmJ3ODhPSVNSTENvb0M4a2tlMGpjWnV0cFFiclZ3STk4QWxpTU1MRk43MVJGUzZ2bTh5WlVtZFE1allVN1dOaVpsa2JJTWF5SWQ4R3JDY09ZQzdIa0Y1WkNVMGZmTEtCNjNSMWxoN25SOXNURGNhMzhHaTE2ZE10X2Z5NXRFQkVqWEQxRjdKR2Mtd1ZJWDRVbk5TSmFVOWJhOWhWNFhGalREVm50cmlEbWU5bnQ3SHpFX1RYTFl4XzMwTzR3bVBsRnJQZHpVQmh5M0RhY3hUVDZXVFRTMHI1MGc1ckR6RkEyQXZGSHQyN3dtaU5CVXB3Z1Bvc0NJM091aHZKdy1kd0VFeTR3M0h6UGdhekJzc19UNUtwNjRuMHNhb1FpTnVmWmNjdEN6eW0zRHlnbmpBMlpSWG9iR2libDlXVURCZHRJS1lJNmVKVHF3ZWJGcThLQ0k1NENWaVAtZ2duWEQtNUxhWGZRRlNmTHVVaThmU3FoYmRhbFNhZ2lDSXI5VjdrQzdTa1NYQlVmcC1CVjdqVTNiVE5qdkMtMWRPOHF6cEZsak4yY0FJSzFhSUQ4NzVTY1l6QjlDWW9nczVSN211aWhXOE9LUG1oM1ZPQ3NqVDFUb29WUDd5RWM0ZHR3N0g1TlNFOUJkanBoYTJ6SjVIbWFwZGhUNWp3d1M2c1NxVFpmS19GZGVfLW9LY3F3ejlkSjlQclFPeDFYS2piS0dtOHlDd1p2RnNlZjROTGdEVVZkLUwzUFlTalBmQThKRExDdEpsS20xLXZfSjktSkFIMDdWcDRRV0V0dkJLOXpnTTJKSzExcTBtM3BKUHN2bGJSbmdXOV9pZENyY0NHaEhVcFJEclNZaVl4NWJHaUo2QkNyc1Z2RGRUb0d4S3E5b0tmLUUtZVE1dXQ5STNBNGl0R3QzWDlCVFFCaHdqVTJQZkREeWZkN1VReGktSGU1SG5tN0RqbGhQUkFDMW1hamJrbk1tSGxLcUEwUDFyVnBZczI3SDJrMWdIcm1rZERHOEJrald2U1ZyOHRKdWxUYV9vQ3BYYmoxdkIyTHNDc3MtdHlDZ1hnTTFRTjZsNS1iR3RCQnFTN2JZbkRiR05WSUY0VGRZNlFzNU5vYUtaRVRrYkpqSlFuRmxOaDV0cU4tNXRrWlkyOG1fU2ZuazFvUWRBYW0wYXp6SC10ZEtZWDc0LUtpRVFLQTYwbGlmbXozUWZtT1ljekt5M01jOE4xWm5oblFOWUxLRGpoNmgyOG00T2lSQjFxNnhKcUhJdHlTUWZzejU2a2dXNnpwa2Ruaktnbk5na0std3huVVVzQnJMcDlDOWdULTAwMlFnMGRnZ0NfWGVoOU92VFRzUi1tVGUxRFRFZkZjdGJkQWRfWEYxWWdTZk5hcFE4SFRpOUpSWHFmT1BncUYwVU41SVRtei1LWWtpNks5Qlg2ZnBKeVFxbWVjTWdmLWpKTmxnRWpENENZVnp6SHcxajFhV3N3WGpSWUJaZE5rV3p6RkNmUnZJbVI4UDRLODhuSWh6UDNoVVd6VHRITFpOME00cXVkSUFBb0JOVFZyWHF3aDN2ZXduWm9JSUtYeG84OUVFenhwZE9GaXRuZWtHYTNQN2VJUkFOOXBSSktvZFNibFRzUUVSOTQ4TklreGNkUElSRVJsUjYxRm81TXlHd1RfYWlSeUxXMEh5YVBQbTdDbm5aN0FUeE1HRUFUS3ZEMm42UGFSVXJaM0ZTUkd6dlhRS3VuWTQ0aXNjYnhOX2ZBNDdMcGtfenY1R3N4akxxZzEyYlpXRFV5cmQ1QWM3VzRhYTcxUEp0a19KTXpnX1c3aXpFUHc0ZTctMGZnMHV6cU1nWV9BM3EyZWQxQmRUSGpjd29LYlBJcmlGZFhoLVR2QT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkV2YWx1YXRpbmcgZGlhbG9nIGRlc2lnbiBmb3IgZ3JvdXBlZCBzZWxlY3Rpb25zKipcIn0se1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkRlc2lnbmluZyBzZWFyY2hhYmxlIGdyb3VwZWQgZHJvcGRvd24gd2l0aCBoZWFkaW5ncyoqXCJ9LHtcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipJbXBsZW1lbnRpbmcgc3R5bGVkIGhlYWRpbmcgc3RyaW5ncyBpbiBsaXN0IG1vZGVsKipcIn1dfSJ9LHsidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlJlZmFjdG9yaW5nIGJvYXJkIHN1bW1hcnkgd2l0aCBwbGF0Zm9ybSBoZWFkaW5ncyoqXG5cbioqQWRqdXN0aW5nIHNlbGVjdGlvbiB1cGRhdGUgbG9naWMgYW5kIGJvYXJkIGNvdW50cyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1ZDY5NjkwODE5MTg5N2NlMGY0NDE2Y2NlZGRcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1YaGRNZFNzblVZQ29EcGNnWmo4SDJ3STJEZHFkazBILWljTEYyR2tNRnYxb3lnSzJMbDk5MS1FdFB5Y3ZtRUlWd1N5VXBXR3JSR3RVNTRmVFE4SEE2YXVxMFA0R0ZFWmNreElfanBEZm5zMW1jY3NORjQxNjVQU193TWoyOGphN2JyLWJpcW9fc3lqaTNDZVJ0Qklvay1aYnVUcGJNVmdOUWlGTmVUZGUxR2xLMFZyTmJHaC1STldHUUZhRTVPeTAwWGdfdUZyVUJyY3JiR18tT2FTb0c5ZXF3emdsOFM2aVhPZXRvMlRvQnNOS19aMmFyRmdUYTNPUlVwOWtXdnBGRFF2QlV4MnhLYkstejdKd2xjV3ZJREEtT2p5TWNOYWM1TVlfR0xSSzFSMHNoRUNiMGZoQUhXcnJSTVJJUlRVZVNheHV2MGUtT25wU2FqV3RvSG5BR2xsSTRfVUJJLUg5VVduS1VfWE56MDktTTNHQTkxaVFEZlFfX1VPaG9VZU5OS2FYeTVycGdka1lacktfNHd4NTBmbzBITTM3N3VyT1Y0UEl1bGEyeUxvOE92Yi04OE80akxEMEd5UzFxUGo3NDIwQWJUekhuUWFsU0ttOTNOZzk3eXVhWDAxYjRfb2Y3djFydWIxek9acEpHa2lVaUF6bDRLdFd1dm1sdUpFR1prU1lrelNIeXM5eEZzUFp2UkVfOEt6ejZRNS1zUWVSVWQtZWNyelFPNGNVazA3aXRHZlAxZ0cxaldveW1FdXlaNXlTNDZKQjFxcUFyVjE4djM0c1UtZWpOSVg3Q0ZnTDE2MWZwVVZsWklhYkFXeXI2QW5fR2hmVmFLSmZNNXNRb2Vka1VzS2I3Nms5LTRGMENqeDl0Mk5jWGNKTFNPXy1ZdzU4eWF0a3pvZkg0LS1FTkN2T2FBSjBKV2x6UzFuWk94T1pQTGs2c3ZKVjJqQmcwbFpFWlJwcXFTNU84Q0FmVlJqMWIyN0NFMlJCZk9TejV2V3NSdDlVZExQc2J0Tlp5c1pZeHJjWmR1QVRLZGpwNWxYdUxyX1pDcmN0b244dTRlNnFmVEhxOHZhVF9nM2pNZkJpVXJZUUZPajNnQTNWYnpQVUhhN0hvbm94T2xwSmJ3ZDAzVmJSZ1A5aG5ETFR1bGp1b2VrQ2lsQXlPS3ZZNFY4X2lpdWl1RlcySTdGX0J3OE5ydUtOVkVRNGtPX1MtZTdPQy1kMFpldFBsNUhFUFZpb0RpTW14VHgwckFILTJLLWg0MXgtbWdnV0daVjdSQTktX2I4ODBvRl9zcS1Ld2ppbUEzOTBDNFoxYXNxb2RGTkhsZzNKNVhiTldTbENULUt1RHdjU0Z1NExGMElHblNmSHVxVWFZekVWZHprZkxfUnd1NE5HUTFUSzJaU3IxUkpFWUJySXZNMnBKXzRwVkFYUXVUWUw0UUhSMDNRLUYtTFh2MnlwY2xOM0E0dU95MnpXUXllRWlTZVJkWkZXTFlkdHNqeWxPcUVzc2dVVTRpNFhJZEp1eEd4ZV9jMF9HQ1dsaEVxbjJObHRUVk8xMzNUSUJ0SjF0T0FZRW8xeG5fQzVkeVBuRHNFbGVmckRjTkJ2NGc5U3lJcmkzTnljaVVBVVBsNkhoOXdzLW9kTVZPRXBXMEZUWVdvamF1N3gwUWptbm8xVlJ4VGtVYzZuN284N2w1S1NNOW1RSkk3d0M3Mmp4dHpaOE1Yd3VudGZhbnFhY3RTNy1fdDJuZFJ3VWk2WV9fbjlNaDZOeVFrOG9pOTdzSmswaEdWNzA1OVVLSHZPV2RSN0wyTHpvTFVRT3lNbDlaRkEzMXp3c2J4ZUhESU12c05WRG15eUJfWDU3V0dGeF9NbU04aGNIdFZZYjYyZ190R2t5QktQSl94WlJMZmR4WXhVQ3lsYmF4SHo0anNVMjJ4SENWWXJNZ3NBSUg5TWZUYU0yS09fSVZkUk51VXdoaWFTdE9FejZGMnFucW5MdnVUMWtOZXhPcmU4Z2NVVWRkOWl6bW9qTG90Q0U5MHhtd0xiOG5IM0VUd0JYcEppcUZpY09Rb2JaUHEyNmt1YzJ6S29veWo1SHBXbWsxUWZRUDljSFlxMEZVdkItZ09NaHBIZ1h1ajR1aU1kbGFkZHBQQ1k2R3NwbWxtMktVR2ZMWURidWVMT2JyeXBra0VGVXVVZy05bXFwd29LOEd2ZjZQS3EtT0laVENpV1dmUG4wTXYtWjBPRmQ3czZ3WkFsRnR6ZElfVnBmdGVBVVhmeEhPN01xQnpmNkUyWDlNVFJPS3dJY3JYMVFiamV5WmNPZ2E3QW5PZG85aEpyLVlXUVJ6ZEFVSVB4Tm40VGpIVXRnZWxqUWpJS3h1WWp4bXE0eEh6WF8tQV9RTmVlc3pQbW1uTGZqeUlhMnhhZGJSb1ZHYUdFY0xzVXBqbFJ4V1JYbkJ1RXBrU2NYQ1ZKN2Q5TXd4TUN2YWJSbjh4aC1BMklWbVkza2FxRHc2SzljQ1QxUjcxdlZnMTd3Z00tM2NDem1ETUdhOHdEWFI2TldUN3E0VVZPa1ZfVFhWX3p2M1JFZURFQzFoaTdFRnNsajlDMUF4OVVjSGtRbThvTkZfeGxFaVRDWm9rREdVMXlrNzZSX0diTDNXdGJMWEdFenljTVQ0dnZldGluSXlxNUR6NEhkUUg4QmwtM2lnWi1ja05zYWY2cnpNUC1tZVNrNkptazRDSWxhUU52MkRvRHBSRm5NREh3WC1KVzllck45cDlfRGFQUEZqTW9YakJfUEpSNElOOVFoYUNRaHNmZHYwWjFPbzZjNlZoeGVqSDNmSkI4QWZ2Z2wzSVZOdGVQYVM4MmpBM05NTzBNVHN6aW9FdXdadmtWUVRoTjcxcWxNOXpFYXdtenhHbGZFbjQ3eVZJYWhVTmhlakNBVXM3NXNyU0hTYlluc25kd0E0UHRwUWUwNGtzeTB2RkU5TjZmX08yaTVhcUN4bVMxRWEyQWhaUFRtVzNQaGZ6dWpmcnVEa3AzdldRUXI0Wkx4ZTVuRG5vYmhYNE9ZM2JlYWJWOXpVb1R5S0VMYkdINFJiTVlxTWQ1SWdZVXVzalE2OS1MM3o1S18xZDZmS21Jb2xHSVc0bWF3eFVZajBCc3UxYlo0LWdxVEl4dGFPZmNzUGlGWHlVLVFiNTNUcS0xclJ0V0cwT3BEaUpVbUhLd2VFNnJRYnVGYmRYMW1sbzZPZnJpY2ZONVNUVi1KbEpQa1RBZHEwbVY5SWxFZHVNYy1rNEl0ZnkwNG4zUzhBWWVLZFFCb1BfYVVXS2RWWU1ZcmUxbU1XekstM2lRcnFWSXZvZ25meDd3YUEyeF95S2hQS29pSXhNaFlxRExfaTVnRzMxQl9ueW1KeV90QTVraU5RTERhX3JVM2tjUW5QMHlzb2pKYUk5UWp6VlpsbEhpNUFtUk5lTmRiMi1kTzZ2WnlOb3R1UHNBWFl2RFJoaXRRVTJVbDZGdDY0aVY5WlNyVE1pdHRKem1OMG45Y3NRV1pfTHVFTVRZMkgtNWcxd1RDbm5kVHEwNFg5WU9mbVk0NFo1c3dtQUxRdmd4NGVVenNmQkU4dEJKcFo4UGxFVm5ONm03Vm9OMFdlSlZncnhzVnVDQjExVV9HNlMzbzRDWkRraVJOYU1wYXZhVGFrSGxWNzNIMU8tMlJ0SEZkUzNLTk9IN05tSUNBWW1EQTkya2FUZzVqSndTS0JOOGNlYWdnUU9MbXJJS3d4My1TdTEtdFpwOUVWXCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipSZWZhY3RvcmluZyBib2FyZCBzdW1tYXJ5IHdpdGggcGxhdGZvcm0gaGVhZGluZ3MqKlwifSx7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqQWRqdXN0aW5nIHNlbGVjdGlvbiB1cGRhdGUgbG9naWMgYW5kIGJvYXJkIGNvdW50cyoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9XbzRNRmQ5NDd3UUtHbnJuT0FtcVVXaVN8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1ZTE1YmE0ODE5MTgyZTdjODA5YWYyNTQzNWUiLCJuYW1lIjoiZWRpdCIsImFyZ3VtZW50cyI6eyJwYXRoIjoic3JjL21haW4ucnMiLCJlZGl0cyI6W3sib2xkVGV4dCI6IiAgICBsZXQgYm9hcmRzID0gc3VwcG9ydGVkX2JvYXJkcygpO1xuICAgIC8vIEtlZXAgdGhlIGxhYmVscyBpbiB0aGUgcG9wdXAgc2hvcnQuIFRoZSBwbGF0Zm9ybSBpcyBzaG93biBzZXBhcmF0ZWx5IGluXG4gICAgLy8gdGhlIHJvdyBzdWJ0aXRsZSBvbmNlIGEgYm9hcmQgaGFzIGJlZW4gc2VsZWN0ZWQuXG4gICAgbGV0IG11dCBib2FyZF9uYW1lcyA9IHZlYyFbXCJDaG9vc2UgYSBib2FyZOKAplwiLnRvX293bmVkKCldO1xuICAgIGxldCBtdXQgYm9hcmRfcGxhdGZvcm1zID0gdmVjIVtTdHJpbmc6Om5ldygpXTtcbiAgICBmb3IgKG5hbWUsIHBsYXRmb3JtKSBpbiBib2FyZHMge1xuICAgICAgICBib2FyZF9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgICBib2FyZF9wbGF0Zm9ybXMucHVzaChwbGF0Zm9ybSk7XG4gICAgfVxuICAgIGxldCBib2FyZF9tb2RlbCA9IGd0azo6U3RyaW5nTGlzdDo6bmV3KFxuICAgICAgICAmYm9hcmRfbmFtZXNcbiAgICAgICAgICAgIC5pdGVyKClcbiAgICAgICAgICAgIC5tYXAoU3RyaW5nOjphc19zdHIpXG4gICAgICAgICAgICAuY29sbGVjdDo6PFZlYzxfPj4oKSxcbiAgICApO1xuICAgIGxldCBib2FyZF9yb3cgPSBhZHc6OkNvbWJvUm93OjpidWlsZGVyKClcbiAgICAgICAgLnRpdGxlKFwiVGFyZ2V0IGJvYXJkXCIpXG4gICAgICAgIC5zdWJ0aXRsZShmb3JtYXQhKFxuICAgICAgICAgICAgXCJTZWFyY2ggb3IgY2hvb3NlIGZyb20ge30gc3VwcG9ydGVkIGJvYXJkc1wiLFxuICAgICAgICAgICAgYm9hcmRfbmFtZXMubGVuKCkgLSAxXG4gICAgICAgICkpXG4gICAgICAgIC5tb2RlbCgmYm9hcmRfbW9kZWwpXG4gICAgICAgIC5lbmFibGVfc2VhcmNoKHRydWUpXG4gICAgICAgIC5idWlsZCgpOyIsIm5ld1RleHQiOiIgICAgbGV0IGJvYXJkcyA9IHN1cHBvcnRlZF9ib2FyZHMoKTtcbiAgICBsZXQgYm9hcmRfY291bnQgPSBib2FyZHMubGVuKCk7XG4gICAgLy8gQ29tYm9Sb3cgZG9lcyBub3QgaGF2ZSBuYXRpdmUgc2VjdGlvbiBoZWFkZXJzLCBzbyBpbnNlcnQgbm9uLXNlbGVjdGFibGUsXG4gICAgLy8gY2xlYXJseSBtYXJrZWQgaGVhZGluZ3Mgd2hpbGUga2VlcGluZyB0aGUgYWN0dWFsIGJvYXJkIGxhYmVscyBjb21wYWN0LlxuICAgIGxldCBtdXQgYm9hcmRfbmFtZXMgPSB2ZWMhW1wiQ2hvb3NlIGEgYm9hcmTigKZcIi50b19vd25lZCgpXTtcbiAgICBsZXQgbXV0IGJvYXJkX3BsYXRmb3JtcyA9IHZlYyFbU3RyaW5nOjpuZXcoKV07XG4gICAgbGV0IG11dCBib2FyZF90YXJnZXRzID0gdmVjIVtOb25lXTtcbiAgICBsZXQgbXV0IHByZXZpb3VzX3BsYXRmb3JtID0gTm9uZTtcbiAgICBmb3IgKG5hbWUsIHBsYXRmb3JtKSBpbiBib2FyZHMge1xuICAgICAgICBpZiBwcmV2aW91c19wbGF0Zm9ybS5hc19kZXJlZigpICE9IFNvbWUocGxhdGZvcm0uYXNfc3RyKCkpIHtcbiAgICAgICAgICAgIGJvYXJkX25hbWVzLnB1c2goZm9ybWF0IShcIuKUgOKUgCB7cGxhdGZvcm19IOKUgOKUgFwiKSk7XG4gICAgICAgICAgICBib2FyZF9wbGF0Zm9ybXMucHVzaChTdHJpbmc6Om5ldygpKTtcbiAgICAgICAgICAgIGJvYXJkX3RhcmdldHMucHVzaChOb25lKTtcbiAgICAgICAgICAgIHByZXZpb3VzX3BsYXRmb3JtID0gU29tZShwbGF0Zm9ybS5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBib2FyZF9uYW1lcy5wdXNoKG5hbWUuY2xvbmUoKSk7XG4gICAgICAgIGJvYXJkX3BsYXRmb3Jtcy5wdXNoKHBsYXRmb3JtKTtcbiAgICAgICAgYm9hcmRfdGFyZ2V0cy5wdXNoKFNvbWUobmFtZSkpO1xuICAgIH1cbiAgICBsZXQgYm9hcmRfbW9kZWwgPSBndGs6OlN0cmluZ0xpc3Q6Om5ldyhcbiAgICAgICAgJmJvYXJkX25hbWVzXG4gICAgICAgICAgICAuaXRlcigpXG4gICAgICAgICAgICAubWFwKFN0cmluZzo6YXNfc3RyKVxuICAgICAgICAgICAgLmNvbGxlY3Q6OjxWZWM8Xz4+KCksXG4gICAgKTtcbiAgICBsZXQgYm9hcmRfcm93ID0gYWR3OjpDb21ib1Jvdzo6YnVpbGRlcigpXG4gICAgICAgIC50aXRsZShcIlRhcmdldCBib2FyZFwiKVxuICAgICAgICAuc3VidGl0bGUoZm9ybWF0IShcbiAgICAgICAgICAgIFwiU2VhcmNoIG9yIGNob29zZSBmcm9tIHtib2FyZF9jb3VudH0gc3VwcG9ydGVkIGJvYXJkc1wiXG4gICAgICAgICkpXG4gICAgICAgIC5tb2RlbCgmYm9hcmRfbW9kZWwpXG4gICAgICAgIC5lbmFibGVfc2VhcmNoKHRydWUpXG4gICAgICAgIC5idWlsZCgpOyJ9LHsib2xkVGV4dCI6IiAgICAgICAgbGV0IGJvYXJkX3BsYXRmb3JtcyA9IGJvYXJkX3BsYXRmb3Jtcy5jbG9uZSgpO1xuICAgICAgICBib2FyZF9yb3cuY29ubmVjdF9zZWxlY3RlZF9ub3RpZnkobW92ZSB8cm93fCB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWQgPSByb3cuc2VsZWN0ZWQoKSBhcyB1c2l6ZTtcbiAgICAgICAgICAgIGlmIHNlbGVjdGVkID09IDAge1xuICAgICAgICAgICAgICAgIHJvdy5zZXRfc3VidGl0bGUoJmZvcm1hdCEoXG4gICAgICAgICAgICAgICAgICAgIFwiU2VhcmNoIG9yIGNob29zZSBmcm9tIHt9IHN1cHBvcnRlZCBib2FyZHNcIixcbiAgICAgICAgICAgICAgICAgICAgYm9hcmRfcGxhdGZvcm1zLmxlbigpIC0gMVxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIGxldCBTb21lKHBsYXRmb3JtKSA9IGJvYXJkX3BsYXRmb3Jtcy5nZXQoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKHBsYXRmb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZV9zdGFydCgmc3RhcnRfYnV0dG9uLCAmc3RhdGUsIHJvdywgJmRyaXZlX3JvdylcbiAgICAgICAgfSk7IiwibmV3VGV4dCI6IiAgICAgICAgbGV0IGJvYXJkX3BsYXRmb3JtcyA9IGJvYXJkX3BsYXRmb3Jtcy5jbG9uZSgpO1xuICAgICAgICBsZXQgYm9hcmRfdGFyZ2V0cyA9IGJvYXJkX3RhcmdldHMuY2xvbmUoKTtcbiAgICAgICAgYm9hcmRfcm93LmNvbm5lY3Rfc2VsZWN0ZWRfbm90aWZ5KG1vdmUgfHJvd3wge1xuICAgICAgICAgICAgbGV0IHNlbGVjdGVkID0gcm93LnNlbGVjdGVkKCkgYXMgdXNpemU7XG4gICAgICAgICAgICBpZiBzZWxlY3RlZCA+IDBcbiAgICAgICAgICAgICAgICAmJiBib2FyZF90YXJnZXRzXG4gICAgICAgICAgICAgICAgICAgIC5nZXQoc2VsZWN0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC5pc19zb21lX2FuZChPcHRpb246OmlzX25vbmUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gU2VjdGlvbiBoZWFkaW5ncyBhcmUgbGFiZWxzLCBub3QgdmFsaWQgaW5zdGFsbGF0aW9uIHRhcmdldHMuXG4gICAgICAgICAgICAgICAgcm93LnNldF9zZWxlY3RlZCgwKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiBzZWxlY3RlZCA9PSAwIHtcbiAgICAgICAgICAgICAgICBsZXQgY291bnQgPSBib2FyZF90YXJnZXRzLml0ZXIoKS5mbGF0dGVuKCkuY291bnQoKTtcbiAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKCZmb3JtYXQhKFxuICAgICAgICAgICAgICAgICAgICBcIlNlYXJjaCBvciBjaG9vc2UgZnJvbSB7Y291bnR9IHN1cHBvcnRlZCBib2FyZHNcIlxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIGxldCBTb21lKHBsYXRmb3JtKSA9IGJvYXJkX3BsYXRmb3Jtcy5nZXQoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKHBsYXRmb3JtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZV9zdGFydCgmc3RhcnRfYnV0dG9uLCAmc3RhdGUsIHJvdywgJmRyaXZlX3JvdylcbiAgICAgICAgfSk7In0seyJvbGRUZXh0IjoiICAgICAgICBsZXQgYm9hcmRfbmFtZXMgPSBib2FyZF9uYW1lcy5jbG9uZSgpO1xuICAgICAgICBsZXQgZHJpdmVfbW9kZWwgPSBkcml2ZV9tb2RlbC5jbG9uZSgpOyIsIm5ld1RleHQiOiIgICAgICAgIGxldCBib2FyZF90YXJnZXRzID0gYm9hcmRfdGFyZ2V0cy5jbG9uZSgpO1xuICAgICAgICBsZXQgZHJpdmVfbW9kZWwgPSBkcml2ZV9tb2RlbC5jbG9uZSgpOyJ9LHsib2xkVGV4dCI6IiAgICAgICAgICAgIGxldCBib2FyZCA9IGJvYXJkX25hbWVzXG4gICAgICAgICAgICAgICAgLmdldChib2FyZF9yb3cuc2VsZWN0ZWQoKSBhcyB1c2l6ZSlcbiAgICAgICAgICAgICAgICAubWFwKFN0cmluZzo6YXNfc3RyKVxuICAgICAgICAgICAgICAgIC51bndyYXBfb3IoXCJVbmtub3duIGJvYXJkXCIpOyIsIm5ld1RleHQiOiIgICAgICAgICAgICBsZXQgYm9hcmQgPSBib2FyZF90YXJnZXRzXG4gICAgICAgICAgICAgICAgLmdldChib2FyZF9yb3cuc2VsZWN0ZWQoKSBhcyB1c2l6ZSlcbiAgICAgICAgICAgICAgICAuYW5kX3RoZW4oT3B0aW9uOjphc19kZXJlZilcbiAgICAgICAgICAgICAgICAudW53cmFwX29yKFwiVW5rbm93biBib2FyZFwiKTsifV19fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6OTE2LCJvdXRwdXQiOjE4NTEsImNhY2hlUmVhZCI6MzczNzYsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6NzkzLCJ0b3RhbFRva2VucyI6NDAxNDMsImNvc3QiOnsiaW5wdXQiOjAuMDA0NTgwMDAwMDAwMDAwMDAxLCJvdXRwdXQiOjAuMDU1NTMsImNhY2hlUmVhZCI6MC4wMTg2ODgsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA3ODc5OH19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTEyMDQ0NywicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1YzBjZGYwODE5MTkyNjA0OWMzMDhhMjlkYTQifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiOWQwMDAyOTAiLCJwYXJlbnRJZCI6IjJiMjNkN2YyIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxOTozMS4yNTBaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX1dvNE1GZDk0N3dRS0ducm5PQW1xVVdpU3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzVlMTViYTQ4MTkxODJlN2M4MDlhZjI1NDM1ZSIsInRvb2xOYW1lIjoiZWRpdCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IlN1Y2Nlc3NmdWxseSByZXBsYWNlZCA0IGJsb2NrKHMpIGluIHNyYy9tYWluLnJzLiJ9XSwiZGV0YWlscyI6eyJkaWZmIjoiICAgICAuLi5cbiAgODcgICAgICAgICAudGl0bGUoXCJUYXJnZXQgSGFyZHdhcmVcIilcbiAgODggICAgICAgICAuZGVzY3JpcHRpb24oXCJUaGUgbWF0Y2hpbmcgYm9vdGxvYWRlciBhbmQgZGV2aWNlIHRyZWUgd2lsbCBiZSBpbnN0YWxsZWQuXCIpXG4gIDg5ICAgICAgICAgLmJ1aWxkKCk7XG4gIDkwICAgICBsZXQgYm9hcmRzID0gc3VwcG9ydGVkX2JvYXJkcygpO1xuLSA5MSAgICAgLy8gS2VlcCB0aGUgbGFiZWxzIGluIHRoZSBwb3B1cCBzaG9ydC4gVGhlIHBsYXRmb3JtIGlzIHNob3duIHNlcGFyYXRlbHkgaW5cbi0gOTIgICAgIC8vIHRoZSByb3cgc3VidGl0bGUgb25jZSBhIGJvYXJkIGhhcyBiZWVuIHNlbGVjdGVkLlxuKyA5MSAgICAgbGV0IGJvYXJkX2NvdW50ID0gYm9hcmRzLmxlbigpO1xuKyA5MiAgICAgLy8gQ29tYm9Sb3cgZG9lcyBub3QgaGF2ZSBuYXRpdmUgc2VjdGlvbiBoZWFkZXJzLCBzbyBpbnNlcnQgbm9uLXNlbGVjdGFibGUsXG4rIDkzICAgICAvLyBjbGVhcmx5IG1hcmtlZCBoZWFkaW5ncyB3aGlsZSBrZWVwaW5nIHRoZSBhY3R1YWwgYm9hcmQgbGFiZWxzIGNvbXBhY3QuXG4gIDkzICAgICBsZXQgbXV0IGJvYXJkX25hbWVzID0gdmVjIVtcIkNob29zZSBhIGJvYXJk4oCmXCIudG9fb3duZWQoKV07XG4gIDk0ICAgICBsZXQgbXV0IGJvYXJkX3BsYXRmb3JtcyA9IHZlYyFbU3RyaW5nOjpuZXcoKV07XG4rIDk2ICAgICBsZXQgbXV0IGJvYXJkX3RhcmdldHMgPSB2ZWMhW05vbmVdO1xuKyA5NyAgICAgbGV0IG11dCBwcmV2aW91c19wbGF0Zm9ybSA9IE5vbmU7XG4gIDk1ICAgICBmb3IgKG5hbWUsIHBsYXRmb3JtKSBpbiBib2FyZHMge1xuLSA5NiAgICAgICAgIGJvYXJkX25hbWVzLnB1c2gobmFtZSk7XG4rIDk5ICAgICAgICAgaWYgcHJldmlvdXNfcGxhdGZvcm0uYXNfZGVyZWYoKSAhPSBTb21lKHBsYXRmb3JtLmFzX3N0cigpKSB7XG4rMTAwICAgICAgICAgICAgIGJvYXJkX25hbWVzLnB1c2goZm9ybWF0IShcIuKUgOKUgCB7cGxhdGZvcm19IOKUgOKUgFwiKSk7XG4rMTAxICAgICAgICAgICAgIGJvYXJkX3BsYXRmb3Jtcy5wdXNoKFN0cmluZzo6bmV3KCkpO1xuKzEwMiAgICAgICAgICAgICBib2FyZF90YXJnZXRzLnB1c2goTm9uZSk7XG4rMTAzICAgICAgICAgICAgIHByZXZpb3VzX3BsYXRmb3JtID0gU29tZShwbGF0Zm9ybS5jbG9uZSgpKTtcbisxMDQgICAgICAgICB9XG4rMTA1ICAgICAgICAgYm9hcmRfbmFtZXMucHVzaChuYW1lLmNsb25lKCkpO1xuICA5NyAgICAgICAgIGJvYXJkX3BsYXRmb3Jtcy5wdXNoKHBsYXRmb3JtKTtcbisxMDcgICAgICAgICBib2FyZF90YXJnZXRzLnB1c2goU29tZShuYW1lKSk7XG4gIDk4ICAgICB9XG4gIDk5ICAgICBsZXQgYm9hcmRfbW9kZWwgPSBndGs6OlN0cmluZ0xpc3Q6Om5ldyhcbiAxMDAgICAgICAgICAmYm9hcmRfbmFtZXNcbiAxMDEgICAgICAgICAgICAgLml0ZXIoKVxuICAgICAuLi5cbiAxMDQgICAgICk7XG4gMTA1ICAgICBsZXQgYm9hcmRfcm93ID0gYWR3OjpDb21ib1Jvdzo6YnVpbGRlcigpXG4gMTA2ICAgICAgICAgLnRpdGxlKFwiVGFyZ2V0IGJvYXJkXCIpXG4gMTA3ICAgICAgICAgLnN1YnRpdGxlKGZvcm1hdCEoXG4tMTA4ICAgICAgICAgICAgIFwiU2VhcmNoIG9yIGNob29zZSBmcm9tIHt9IHN1cHBvcnRlZCBib2FyZHNcIixcbi0xMDkgICAgICAgICAgICAgYm9hcmRfbmFtZXMubGVuKCkgLSAxXG4rMTE4ICAgICAgICAgICAgIFwiU2VhcmNoIG9yIGNob29zZSBmcm9tIHtib2FyZF9jb3VudH0gc3VwcG9ydGVkIGJvYXJkc1wiXG4gMTEwICAgICAgICAgKSlcbiAxMTEgICAgICAgICAubW9kZWwoJmJvYXJkX21vZGVsKVxuIDExMiAgICAgICAgIC5lbmFibGVfc2VhcmNoKHRydWUpXG4gMTEzICAgICAgICAgLmJ1aWxkKCk7XG4gICAgIC4uLlxuIDMxOSAgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmNsb25lKCk7XG4gMzIwICAgICAgICAgbGV0IGRyaXZlX3JvdyA9IGRyaXZlX3Jvdy5jbG9uZSgpO1xuIDMyMSAgICAgICAgIGxldCBzdGFydF9idXR0b24gPSBzdGFydF9idXR0b24uY2xvbmUoKTtcbiAzMjIgICAgICAgICBsZXQgYm9hcmRfcGxhdGZvcm1zID0gYm9hcmRfcGxhdGZvcm1zLmNsb25lKCk7XG4rMzMyICAgICAgICAgbGV0IGJvYXJkX3RhcmdldHMgPSBib2FyZF90YXJnZXRzLmNsb25lKCk7XG4gMzIzICAgICAgICAgYm9hcmRfcm93LmNvbm5lY3Rfc2VsZWN0ZWRfbm90aWZ5KG1vdmUgfHJvd3wge1xuIDMyNCAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQgPSByb3cuc2VsZWN0ZWQoKSBhcyB1c2l6ZTtcbiszMzUgICAgICAgICAgICAgaWYgc2VsZWN0ZWQgPiAwXG4rMzM2ICAgICAgICAgICAgICAgICAmJiBib2FyZF90YXJnZXRzXG4rMzM3ICAgICAgICAgICAgICAgICAgICAgLmdldChzZWxlY3RlZClcbiszMzggICAgICAgICAgICAgICAgICAgICAuaXNfc29tZV9hbmQoT3B0aW9uOjppc19ub25lKVxuKzMzOSAgICAgICAgICAgICB7XG4rMzQwICAgICAgICAgICAgICAgICAvLyBTZWN0aW9uIGhlYWRpbmdzIGFyZSBsYWJlbHMsIG5vdCB2YWxpZCBpbnN0YWxsYXRpb24gdGFyZ2V0cy5cbiszNDEgICAgICAgICAgICAgICAgIHJvdy5zZXRfc2VsZWN0ZWQoMCk7XG4rMzQyICAgICAgICAgICAgICAgICByZXR1cm47XG4rMzQzICAgICAgICAgICAgIH1cbiAzMjUgICAgICAgICAgICAgaWYgc2VsZWN0ZWQgPT0gMCB7XG4rMzQ1ICAgICAgICAgICAgICAgICBsZXQgY291bnQgPSBib2FyZF90YXJnZXRzLml0ZXIoKS5mbGF0dGVuKCkuY291bnQoKTtcbiAzMjYgICAgICAgICAgICAgICAgIHJvdy5zZXRfc3VidGl0bGUoJmZvcm1hdCEoXG4tMzI3ICAgICAgICAgICAgICAgICAgICAgXCJTZWFyY2ggb3IgY2hvb3NlIGZyb20ge30gc3VwcG9ydGVkIGJvYXJkc1wiLFxuLTMyOCAgICAgICAgICAgICAgICAgICAgIGJvYXJkX3BsYXRmb3Jtcy5sZW4oKSAtIDFcbiszNDcgICAgICAgICAgICAgICAgICAgICBcIlNlYXJjaCBvciBjaG9vc2UgZnJvbSB7Y291bnR9IHN1cHBvcnRlZCBib2FyZHNcIlxuIDMyOSAgICAgICAgICAgICAgICAgKSk7XG4gMzMwICAgICAgICAgICAgIH0gZWxzZSBpZiBsZXQgU29tZShwbGF0Zm9ybSkgPSBib2FyZF9wbGF0Zm9ybXMuZ2V0KHNlbGVjdGVkKSB7XG4gMzMxICAgICAgICAgICAgICAgICByb3cuc2V0X3N1YnRpdGxlKHBsYXRmb3JtKTtcbiAzMzIgICAgICAgICAgICAgfVxuICAgICAuLi5cbiAzODggICAgICAgICBsZXQgd2luZG93ID0gd2luZG93LmNsb25lKCk7XG4gMzg5ICAgICAgICAgbGV0IHRvYXN0X292ZXJsYXkgPSB0b2FzdF9vdmVybGF5LmNsb25lKCk7XG4gMzkwICAgICAgICAgbGV0IHN0YXRlID0gc3RhdGUuY2xvbmUoKTtcbiAzOTEgICAgICAgICBsZXQgYm9hcmRfcm93ID0gYm9hcmRfcm93LmNsb25lKCk7XG4tMzkyICAgICAgICAgbGV0IGJvYXJkX25hbWVzID0gYm9hcmRfbmFtZXMuY2xvbmUoKTtcbis0MTEgICAgICAgICBsZXQgYm9hcmRfdGFyZ2V0cyA9IGJvYXJkX3RhcmdldHMuY2xvbmUoKTtcbiAzOTMgICAgICAgICBsZXQgZHJpdmVfbW9kZWwgPSBkcml2ZV9tb2RlbC5jbG9uZSgpO1xuIDM5NCAgICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAzOTUgICAgICAgICBzdGFydF9idXR0b24uY29ubmVjdF9jbGlja2VkKG1vdmUgfF98IHtcbiAzOTYgICAgICAgICAgICAgbGV0IHN0YXRlID0gc3RhdGUuYm9ycm93KCk7XG4tMzk3ICAgICAgICAgICAgIGxldCBib2FyZCA9IGJvYXJkX25hbWVzXG4rNDE2ICAgICAgICAgICAgIGxldCBib2FyZCA9IGJvYXJkX3RhcmdldHNcbiAzOTggICAgICAgICAgICAgICAgIC5nZXQoYm9hcmRfcm93LnNlbGVjdGVkKCkgYXMgdXNpemUpXG4tMzk5ICAgICAgICAgICAgICAgICAubWFwKFN0cmluZzo6YXNfc3RyKVxuKzQxOCAgICAgICAgICAgICAgICAgLmFuZF90aGVuKE9wdGlvbjo6YXNfZGVyZWYpXG4gNDAwICAgICAgICAgICAgICAgICAudW53cmFwX29yKFwiVW5rbm93biBib2FyZFwiKTtcbiA0MDEgICAgICAgICAgICAgbGV0IGRlc3RpbmF0aW9uID0gaWYgc3RhdGUub3V0cHV0X2lzX2ZpbGUge1xuIDQwMiAgICAgICAgICAgICAgICAgc3RhdGVcbiA0MDMgICAgICAgICAgICAgICAgICAgICAub3V0cHV0X2ZpbGVcbiAgICAgLi4uIiwicGF0Y2giOiItLS0gc3JjL21haW4ucnNcbisrKyBzcmMvbWFpbi5yc1xuQEAgLTg3LDE1ICs4NywyNSBAQFxuICAgICAgICAgLnRpdGxlKFwiVGFyZ2V0IEhhcmR3YXJlXCIpXG4gICAgICAgICAuZGVzY3JpcHRpb24oXCJUaGUgbWF0Y2hpbmcgYm9vdGxvYWRlciBhbmQgZGV2aWNlIHRyZWUgd2lsbCBiZSBpbnN0YWxsZWQuXCIpXG4gICAgICAgICAuYnVpbGQoKTtcbiAgICAgbGV0IGJvYXJkcyA9IHN1cHBvcnRlZF9ib2FyZHMoKTtcbi0gICAgLy8gS2VlcCB0aGUgbGFiZWxzIGluIHRoZSBwb3B1cCBzaG9ydC4gVGhlIHBsYXRmb3JtIGlzIHNob3duIHNlcGFyYXRlbHkgaW5cbi0gICAgLy8gdGhlIHJvdyBzdWJ0aXRsZSBvbmNlIGEgYm9hcmQgaGFzIGJlZW4gc2VsZWN0ZWQuXG4rICAgIGxldCBib2FyZF9jb3VudCA9IGJvYXJkcy5sZW4oKTtcbisgICAgLy8gQ29tYm9Sb3cgZG9lcyBub3QgaGF2ZSBuYXRpdmUgc2VjdGlvbiBoZWFkZXJzLCBzbyBpbnNlcnQgbm9uLXNlbGVjdGFibGUsXG4rICAgIC8vIGNsZWFybHkgbWFya2VkIGhlYWRpbmdzIHdoaWxlIGtlZXBpbmcgdGhlIGFjdHVhbCBib2FyZCBsYWJlbHMgY29tcGFjdC5cbiAgICAgbGV0IG11dCBib2FyZF9uYW1lcyA9IHZlYyFbXCJDaG9vc2UgYSBib2FyZOKAplwiLnRvX293bmVkKCldO1xuICAgICBsZXQgbXV0IGJvYXJkX3BsYXRmb3JtcyA9IHZlYyFbU3RyaW5nOjpuZXcoKV07XG4rICAgIGxldCBtdXQgYm9hcmRfdGFyZ2V0cyA9IHZlYyFbTm9uZV07XG4rICAgIGxldCBtdXQgcHJldmlvdXNfcGxhdGZvcm0gPSBOb25lO1xuICAgICBmb3IgKG5hbWUsIHBsYXRmb3JtKSBpbiBib2FyZHMge1xuLSAgICAgICAgYm9hcmRfbmFtZXMucHVzaChuYW1lKTtcbisgICAgICAgIGlmIHByZXZpb3VzX3BsYXRmb3JtLmFzX2RlcmVmKCkgIT0gU29tZShwbGF0Zm9ybS5hc19zdHIoKSkge1xuKyAgICAgICAgICAgIGJvYXJkX25hbWVzLnB1c2goZm9ybWF0IShcIuKUgOKUgCB7cGxhdGZvcm19IOKUgOKUgFwiKSk7XG4rICAgICAgICAgICAgYm9hcmRfcGxhdGZvcm1zLnB1c2goU3RyaW5nOjpuZXcoKSk7XG4rICAgICAgICAgICAgYm9hcmRfdGFyZ2V0cy5wdXNoKE5vbmUpO1xuKyAgICAgICAgICAgIHByZXZpb3VzX3BsYXRmb3JtID0gU29tZShwbGF0Zm9ybS5jbG9uZSgpKTtcbisgICAgICAgIH1cbisgICAgICAgIGJvYXJkX25hbWVzLnB1c2gobmFtZS5jbG9uZSgpKTtcbiAgICAgICAgIGJvYXJkX3BsYXRmb3Jtcy5wdXNoKHBsYXRmb3JtKTtcbisgICAgICAgIGJvYXJkX3RhcmdldHMucHVzaChTb21lKG5hbWUpKTtcbiAgICAgfVxuICAgICBsZXQgYm9hcmRfbW9kZWwgPSBndGs6OlN0cmluZ0xpc3Q6Om5ldyhcbiAgICAgICAgICZib2FyZF9uYW1lc1xuICAgICAgICAgICAgIC5pdGVyKClcbkBAIC0xMDQsMTAgKzExNCw5IEBAXG4gICAgICk7XG4gICAgIGxldCBib2FyZF9yb3cgPSBhZHc6OkNvbWJvUm93OjpidWlsZGVyKClcbiAgICAgICAgIC50aXRsZShcIlRhcmdldCBib2FyZFwiKVxuICAgICAgICAgLnN1YnRpdGxlKGZvcm1hdCEoXG4tICAgICAgICAgICAgXCJTZWFyY2ggb3IgY2hvb3NlIGZyb20ge30gc3VwcG9ydGVkIGJvYXJkc1wiLFxuLSAgICAgICAgICAgIGJvYXJkX25hbWVzLmxlbigpIC0gMVxuKyAgICAgICAgICAgIFwiU2VhcmNoIG9yIGNob29zZSBmcm9tIHtib2FyZF9jb3VudH0gc3VwcG9ydGVkIGJvYXJkc1wiXG4gICAgICAgICApKVxuICAgICAgICAgLm1vZGVsKCZib2FyZF9tb2RlbClcbiAgICAgICAgIC5lbmFibGVfc2VhcmNoKHRydWUpXG4gICAgICAgICAuYnVpbGQoKTtcbkBAIC0zMTksMTQgKzMyOCwyNCBAQFxuICAgICAgICAgbGV0IHN0YXRlID0gc3RhdGUuY2xvbmUoKTtcbiAgICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgIGxldCBzdGFydF9idXR0b24gPSBzdGFydF9idXR0b24uY2xvbmUoKTtcbiAgICAgICAgIGxldCBib2FyZF9wbGF0Zm9ybXMgPSBib2FyZF9wbGF0Zm9ybXMuY2xvbmUoKTtcbisgICAgICAgIGxldCBib2FyZF90YXJnZXRzID0gYm9hcmRfdGFyZ2V0cy5jbG9uZSgpO1xuICAgICAgICAgYm9hcmRfcm93LmNvbm5lY3Rfc2VsZWN0ZWRfbm90aWZ5KG1vdmUgfHJvd3wge1xuICAgICAgICAgICAgIGxldCBzZWxlY3RlZCA9IHJvdy5zZWxlY3RlZCgpIGFzIHVzaXplO1xuKyAgICAgICAgICAgIGlmIHNlbGVjdGVkID4gMFxuKyAgICAgICAgICAgICAgICAmJiBib2FyZF90YXJnZXRzXG4rICAgICAgICAgICAgICAgICAgICAuZ2V0KHNlbGVjdGVkKVxuKyAgICAgICAgICAgICAgICAgICAgLmlzX3NvbWVfYW5kKE9wdGlvbjo6aXNfbm9uZSlcbisgICAgICAgICAgICB7XG4rICAgICAgICAgICAgICAgIC8vIFNlY3Rpb24gaGVhZGluZ3MgYXJlIGxhYmVscywgbm90IHZhbGlkIGluc3RhbGxhdGlvbiB0YXJnZXRzLlxuKyAgICAgICAgICAgICAgICByb3cuc2V0X3NlbGVjdGVkKDApO1xuKyAgICAgICAgICAgICAgICByZXR1cm47XG4rICAgICAgICAgICAgfVxuICAgICAgICAgICAgIGlmIHNlbGVjdGVkID09IDAge1xuKyAgICAgICAgICAgICAgICBsZXQgY291bnQgPSBib2FyZF90YXJnZXRzLml0ZXIoKS5mbGF0dGVuKCkuY291bnQoKTtcbiAgICAgICAgICAgICAgICAgcm93LnNldF9zdWJ0aXRsZSgmZm9ybWF0IShcbi0gICAgICAgICAgICAgICAgICAgIFwiU2VhcmNoIG9yIGNob29zZSBmcm9tIHt9IHN1cHBvcnRlZCBib2FyZHNcIixcbi0gICAgICAgICAgICAgICAgICAgIGJvYXJkX3BsYXRmb3Jtcy5sZW4oKSAtIDFcbisgICAgICAgICAgICAgICAgICAgIFwiU2VhcmNoIG9yIGNob29zZSBmcm9tIHtjb3VudH0gc3VwcG9ydGVkIGJvYXJkc1wiXG4gICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgIH0gZWxzZSBpZiBsZXQgU29tZShwbGF0Zm9ybSkgPSBib2FyZF9wbGF0Zm9ybXMuZ2V0KHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgIHJvdy5zZXRfc3VidGl0bGUocGxhdGZvcm0pO1xuICAgICAgICAgICAgIH1cbkBAIC0zODgsMTYgKzQwNywxNiBAQFxuICAgICAgICAgbGV0IHdpbmRvdyA9IHdpbmRvdy5jbG9uZSgpO1xuICAgICAgICAgbGV0IHRvYXN0X292ZXJsYXkgPSB0b2FzdF9vdmVybGF5LmNsb25lKCk7XG4gICAgICAgICBsZXQgc3RhdGUgPSBzdGF0ZS5jbG9uZSgpO1xuICAgICAgICAgbGV0IGJvYXJkX3JvdyA9IGJvYXJkX3Jvdy5jbG9uZSgpO1xuLSAgICAgICAgbGV0IGJvYXJkX25hbWVzID0gYm9hcmRfbmFtZXMuY2xvbmUoKTtcbisgICAgICAgIGxldCBib2FyZF90YXJnZXRzID0gYm9hcmRfdGFyZ2V0cy5jbG9uZSgpO1xuICAgICAgICAgbGV0IGRyaXZlX21vZGVsID0gZHJpdmVfbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgIGxldCBkcml2ZV9yb3cgPSBkcml2ZV9yb3cuY2xvbmUoKTtcbiAgICAgICAgIHN0YXJ0X2J1dHRvbi5jb25uZWN0X2NsaWNrZWQobW92ZSB8X3wge1xuICAgICAgICAgICAgIGxldCBzdGF0ZSA9IHN0YXRlLmJvcnJvdygpO1xuLSAgICAgICAgICAgIGxldCBib2FyZCA9IGJvYXJkX25hbWVzXG4rICAgICAgICAgICAgbGV0IGJvYXJkID0gYm9hcmRfdGFyZ2V0c1xuICAgICAgICAgICAgICAgICAuZ2V0KGJvYXJkX3Jvdy5zZWxlY3RlZCgpIGFzIHVzaXplKVxuLSAgICAgICAgICAgICAgICAubWFwKFN0cmluZzo6YXNfc3RyKVxuKyAgICAgICAgICAgICAgICAuYW5kX3RoZW4oT3B0aW9uOjphc19kZXJlZilcbiAgICAgICAgICAgICAgICAgLnVud3JhcF9vcihcIlVua25vd24gYm9hcmRcIik7XG4gICAgICAgICAgICAgbGV0IGRlc3RpbmF0aW9uID0gaWYgc3RhdGUub3V0cHV0X2lzX2ZpbGUge1xuICAgICAgICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgLm91dHB1dF9maWxlXG4iLCJmaXJzdENoYW5nZWRMaW5lIjo5MX0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODkxNzEyNTB9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI5NGZhZmY3NiIsInBhcmVudElkIjoiOWQwMDAyOTAiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjE5OjM2LjE0M1oiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqVmVyaWZ5aW5nIGJvcnJvdyBib2FyZCBjbG9uaW5nIGJlaGF2aW9yKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzVmNmRiYjg4MTkxOTc3YzdiMjUxNzI0MGIwNlwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTVgzZHRFcndUb3g0amFOUDRLdFVESlFXdnZXVzRNY2pOQUNxdUVHekhNNldVMVpsdEVneHAwYm9DaTJXdFZHNlhkdDJ5Yk16TENsTVV1NWcwMnlMRVhvUlR3Z1h5OXBhUG1ZWU5lT2kwb3JHUThiaXpScTZ4LVpGbThLZGxsQkdsLV9oZ2pmNVVkY0VjWEJqUkpHclkyZWtkQjF5MG9hWkgwR3VZNWoyVS00Mlg1MDhXOEtxdGxTSWppd0RXbkRmeE9IaHFfaVQ1M2FVSkFHeDJoSWZDNnNQNlp6YXVkOHlCTHlTNmd4cmxLVERyMUE0cEJlUDh0dlFFU1NWLXBtcnItTUZSX0pMWl9mdWZZN0VHOU9xN0tPRVk0aTNaVFpMZ2tTZHpHZEZ1dktkOFNidFFodGFzNmY5dUotN0J4aGZ3UFhydkgtMml2XzBROVdwYW84V3h1YWZxMnBoaWlXVlg2aHF2bFQ0V21QUkotekVFNVFvZ1hDSzVOWlNXQklXcXdYcVA1bGl6emxWTl9Tb2NkX21nVHNkSk1pNUJsbFNNTUdrRXZ4MURuUDZKeVNweDFoREdEWHVrRnBfS3Zxdkstai1Eb2dPeVJxUzd1STZ5a0dhUF9SWEQ1SWEwRldEek5JNm5LQ29lRmp6enEtbE9wLW91c1BQYi05TmJ6R1JQbzRUbDFxenFDWHZJZXJtOVc1MzRQeWVaMDdjNVJ2Q0ZtRDhPU01zeDF2WUJ4a1VDS0xzV0YyX3FmaVVSRC1IeTlTdlY4c3JzdDlacnhmc1RxTjhsbVNWWFVpc29UdDJqTHdpQ2RaUDBSWEc4SkUyelRIMDRwQXBraG4yLTlxdndmUXBjQmpjTFY2ck91NDJ5em5sREtwVW5QdzhGRlM5RU5kOVFzVDYtWkJFa1VOb0sxT1hQUWNNZnpjMzB5T3o2ajloVmdRTktnLW1lZmlmcGp5cC1WMzRpT01meVJPOUt4TWUwT3FJalJKMGNaeHlMSE5lZEFaRGI5ZVJ3b2VHSF9pRWN4LXZIV0NPRzBRSFZJaHVldUhEaTFfbk9FWnNUUFpULUUycDJJaTBuNGlLUWpfbmEwTHNoN01IZkczdkFTTTg1aE93em1xWWxHSDdtTWtvSVA3QlgtMW1tT3FUR3ZLX3Vyc056aGFGMGRDemE4RWpsZVFQWDB5QTgxQk9saC1HVE9IVlhtTGZlMzlZZGJnV1ZsQWt0MklzQV9Ya3d4YjVhdTlLZkJER0JpNjVZNWpfbUNMbUVxTFVOLTE4cDN4OUVMcXc2Sl8yaXBBTmNmTlgxS3ZlNEpFVzVYbEVBUHc1UGZLNDZDUjlGeXp0VXRDQkJRRjdwVVhBSGxYOHF6a0tUYlJqSUpDeWFzcTl0NjNxNDB3dlhOV09iTk81ZWFpQ0VFZ0N1M1puYVE9XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipWZXJpZnlpbmcgYm9ycm93IGJvYXJkIGNsb25pbmcgYmVoYXZpb3IqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfRU1hY2tUZENjdFE0TjBWZ1JnSGJEZFpyfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNWY3ZGQ5ODgxOTE5MGNlYmVjYjBhZGQ0MjZhIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6IkRPQ1NfUlM9MSBSVVNUQ19CT09UU1RSQVA9MSBSVVNURkxBR1M9Jy0tY2ZnIGRvY3NycycgY2FyZ28gY2hlY2siLCJ0aW1lb3V0IjoxMjB9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6Mjc4OSwib3V0cHV0Ijo2OCwiY2FjaGVSZWFkIjozNzM3NiwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoyMSwidG90YWxUb2tlbnMiOjQwMjMzLCJjb3N0Ijp7ImlucHV0IjowLjAxMzk0NSwib3V0cHV0IjowLjAwMjA0LCJjYWNoZVJlYWQiOjAuMDE4Njg4LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wMzQ2NzI5OTk5OTk5OTk5OTV9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODkxNzEyNTEsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjNWY1NmRjNDgxOTFiNDZhNzU0Y2IxZDY5ZjgwIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjRjOWRjMTMzIiwicGFyZW50SWQiOiI5NGZhZmY3NiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MTk6MzYuMzExWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9FTWFja1RkQ2N0UTROMFZnUmdIYkRkWnJ8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1ZjdkZDk4ODE5MTkwY2ViZWNiMGFkZDQyNmEiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIgICAgQ2hlY2tpbmcgZmxhc2hlciB2MC4xLjAgKC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIpXG4gICAgRmluaXNoZWQgYGRldmAgcHJvZmlsZSBbdW5vcHRpbWl6ZWQgKyBkZWJ1Z2luZm9dIHRhcmdldChzKSBpbiAwLjE1c1xuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg5MTc2MzExfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiOTdlOTI0YTQiLCJwYXJlbnRJZCI6IjRjOWRjMTMzIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoxOTozOS45NTJaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiQWRkZWQgcGxhdGZvcm0vU29DIHNlcGFyYXRpb24gdG8gdGhlIGJvYXJkIHNlbGVjdG9yOlxuXG4tIEJvYXJkcyBhcmUgZ3JvdXBlZCB1bmRlciB2aXNpYmxlIHBsYXRmb3JtIGFuZCBhcmNoaXRlY3R1cmUgaGVhZGluZ3MuXG4tIFNlY3Rpb24gaGVhZGluZ3MgY2Fubm90IGJlIHNlbGVjdGVkIGFzIGJvYXJkcy5cbi0gQm9hcmQgbGFiZWxzIHJlbWFpbiBjb21wYWN0LlxuLSBUaGUgc2VsZWN0ZWQgYm9hcmTigJlzIHBsYXRmb3JtIGFwcGVhcnMgaW4gdGhlIHJvdyBzdWJ0aXRsZS5cbi0gU2VhcmNoIGFuZCBib2FyZCBjb3VudHMgY29udGludWUgdG8gd29yayBjb3JyZWN0bHkuXG5cbmBjYXJnbyBjaGVja2AgcGFzc2VzLiIsInRleHRTaWduYXR1cmUiOiJ7XCJ2XCI6MSxcImlkXCI6XCJtc2dfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1ZjllNmE4ODE5MWI2YTM5M2EyNmUxZmU5OWZcIixcInBoYXNlXCI6XCJmaW5hbF9hbnN3ZXJcIn0ifV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6ODY0LCJvdXRwdXQiOjY5LCJjYWNoZVJlYWQiOjM5NDI0LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjAsInRvdGFsVG9rZW5zIjo0MDM1NywiY29zdCI6eyJpbnB1dCI6MC4wMDQzMiwib3V0cHV0IjowLjAwMjA3MDAwMDAwMDAwMDAwMDIsImNhY2hlUmVhZCI6MC4wMTk3MTIsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAyNjEwMn19LCJzdG9wUmVhc29uIjoic3RvcCIsInRpbWVzdGFtcCI6MTc4NDk4OTE3NjMxMywicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM1ZjhjMjU4ODE5MWE4ZGEyMGE3YzU1ZDU2NGYifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZTg5ZDY4ODgiLCJwYXJlbnRJZCI6Ijk3ZTkyNGE0IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoyOToxMi41NThaIiwibWVzc2FnZSI6eyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Im5vdyBtYWtlIHRoYXQgaW4gcXQuIG1vdmUgY3VycmVudCBjb2RlIGluIGEgc2VwYXJhdGUgdGFyZ2V0IG9yIGNyYXRlLCBhbmQgcXQgdmVyc2lvbiB0b28gaW4gYSBzZXBhcmF0ZSBjcmF0ZS4gbWF5YmUgY3JlYXRlIGNhcmdvIHdvcmtzcGFjZSBvciBzb21ldGhpbmcgc28gdGhhdCBpIGNhbiBydW4gYm90aCBvZiB0aGUgZ3Vpcy4ifV0sInRpbWVzdGFtcCI6MTc4NDk4OTc1MjU1N319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjM3MWY4OTgzIiwicGFyZW50SWQiOiJlODlkNjg4OCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6Mjk6MjEuNDM2WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipFdmFsdWF0aW5nIFF0IFJ1c3QgYmluZGluZyBvcHRpb25zKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzgzY2JlYTA4MTkxYTAyMjdmMzAzZmMzNGUyYVwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTWhCWmlSVXU0bDVWSE15UVBoODlra1hjWHI1TWV3NGFuUTB6T2RhTGNpSVVNNFlINmJrUnpHTkh3bmxkcTMtYTRiOFhadzEwc0RBOWtfR2JvcTVuWHdFdjJPQ0VVWWd0MllKZkRsenNldzBCSXd6WVpvMFhLV0ctUm1ROFhiOTIwVHZaUlo4T3BvN3JrdlltbjZiUG1GRE5SVkE1UTBmZXpZcTZEa29mNndZQ1B4ekJEbkFRclpXalg5djg2YWhObU5OU29tNWFrUzNTSjd3dTkzYlQ5akhUVTlhV1NHRWVtZnR5TnV6XzFzZ2J2THZpb0FkczMwV1NsNmVndzN2bjBQbGNpaURfYmpRa3pTbUpGN0pQX2NEb0h6Zk03Tm5PbGZsemNNVzgtYlBKZnRoWVFSTTZmaWx2QlNSRTRQWWxXZ3huSERNb240MndoSEx4Wk9wOVlaSk9MLXdzWTZSZ2NqeVhXMnFfbFUzTkc2Y3dvZGZ5T0h5TkhFUjVjbjNVVmQyZmZEZWpNaXhnZWJhY3RJUmMtWGY5TjRHdy1ma29vUE5VbFZ1cFFHUUtQNGo4MlFQSk1yWHhVSmR2TS1hUG9nQUxxLU8zSW5ja3pfMlY3SFF2alFoT3pmTTBYY19jZjFHb0U2ZDlUb3N5ZDdSRlJYMTBmZXdvOVhpS01MTy1rZ21lY09ZbXlYQms5bzJmMFgzWXZ2RlU5Z01YQmczNzl2b1hNbFlSRXZMamtDQ1VTTkFwUF9fSWJ6N0Vra2xFaDVfN2xkaGhDN3U0Y3hoWHhxT01nQ0VESG9JUng1SXp2UmNtd1lJMmZtR1hBOURSNm9tSWFCVmlrN2trYkFYTGF2RGk4N1p4NG45YlhERnktVHFrVXlQMjRwVXZ3eDY2NE1yLUJwZW9rSFRhWmlIc2YyTkNxQlRxejR6eUlCNll5SUVqUzFvdTJmWEszSXFlS2FXZzNmTWtycjRXUUtXS0RaOWMzSFByVzRfcGdqZlZjSXlqN0twY2Y2aUVtZ3JPMk56TzdCbXZ3OFhlMHdoczY5Z3Bsb0k1ZGRFS1J2VTZVbEJ5NDc5OUZXY1VtbmFnYjJZaVJRTVpMUExfVFpRcmRLVFA3UWE0eDZETHA5NkFkWGlUOWFnaTdlQ0N6UkprdGdVT3dpRHpnU1d1NDNsb2xGbUo4SGI5OU9DejBUQl9YbFhYTFpfOEF0WE1CRy0xdU8tb0lwMVdLdTVJbUFHUmVMVmJNblRPRml2RlBqYkJ4WUxUcHJVdFNjSjl1SHR6YlNvLWNsM1A3T3lvaVkwb19YcDc1ZXZDaUEydEtqRUJTS2ExcjRSWWROLWtNQ3ZrSHVPUDFkVXNaODRTclFnQ05uU2dwYVZOUXVPZmV3NXhhcEZVOUVNSHliT2JrbTBkYW43M0FWZDFDRGx5ekk9XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipFdmFsdWF0aW5nIFF0IFJ1c3QgYmluZGluZyBvcHRpb25zKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX0VrbjdTbFdZOUJqZUVPZVc0V1JsSFFGN3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg0MTQ0MDQ4MTkxOGY5NWIwYWFmNzU0ZWFhNiIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJwa2ctY29uZmlnIC0tbW9kdmVyc2lvbiBRdDZDb3JlIFF0NldpZGdldHMgUXQ1Q29yZSBRdDVXaWRnZXRzIDI+JjE7IGNvbW1hbmQgLXYgcW1ha2U2IHFtYWtlIHF0cGF0aHM2IHx8IHRydWU7IGZpbmQgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgLW5hbWUgJ2xpYlF0NldpZGdldHMuc28qJyAtbyAtbmFtZSAnbGliUXQ1V2lkZ2V0cy5zbyonIDI+L2Rldi9udWxsIHwgaGVhZCJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF82NUQ1TFM5ZEhnaFpWbm1EelVvNU9UcVh8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4NDE0NDIwODE5MWEzYjExYTQ2NDM0MzRkYWQiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiZ2l0IHN0YXR1cyAtLXNob3J0OyBmaW5kIC4gLW1heGRlcHRoIDIgLXR5cGUgZiAtcHJpbnQgfCBzb3J0IHwgaGVhZCAtNTA7IGR1IC1zaCB0YXJnZXQifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjk4MSwib3V0cHV0IjoxNzksImNhY2hlUmVhZCI6Mzk0MjQsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MzAsInRvdGFsVG9rZW5zIjo0MDU4NCwiY29zdCI6eyJpbnB1dCI6MC4wMDQ5MDUwMDAwMDAwMDAwMDA1LCJvdXRwdXQiOjAuMDA1MzcsImNhY2hlUmVhZCI6MC4wMTk3MTIsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAyOTk4N319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTc1MjU2MCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4M2E0ZmM0ODE5MWFhYzIxMjU5NzJjYWViY2QifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZjJkYjBiYjciLCJwYXJlbnRJZCI6IjM3MWY4OTgzIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoyOToyMi41OThaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX0VrbjdTbFdZOUJqZUVPZVc0V1JsSFFGN3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg0MTQ0MDQ4MTkxOGY5NWIwYWFmNzU0ZWFhNiIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IlBhY2thZ2UgUXQ2Q29yZSB3YXMgbm90IGZvdW5kIGluIHRoZSBwa2ctY29uZmlnIHNlYXJjaCBwYXRoLlxuUGVyaGFwcyB5b3Ugc2hvdWxkIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYFF0NkNvcmUucGMnXG50byB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlXG5ObyBwYWNrYWdlICdRdDZDb3JlJyBmb3VuZFxuUGFja2FnZSBRdDZXaWRnZXRzIHdhcyBub3QgZm91bmQgaW4gdGhlIHBrZy1jb25maWcgc2VhcmNoIHBhdGguXG5QZXJoYXBzIHlvdSBzaG91bGQgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBgUXQ2V2lkZ2V0cy5wYydcbnRvIHRoZSBQS0dfQ09ORklHX1BBVEggZW52aXJvbm1lbnQgdmFyaWFibGVcbk5vIHBhY2thZ2UgJ1F0NldpZGdldHMnIGZvdW5kXG5QYWNrYWdlIFF0NUNvcmUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcGtnLWNvbmZpZyBzZWFyY2ggcGF0aC5cblBlcmhhcHMgeW91IHNob3VsZCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGBRdDVDb3JlLnBjJ1xudG8gdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuTm8gcGFja2FnZSAnUXQ1Q29yZScgZm91bmRcblBhY2thZ2UgUXQ1V2lkZ2V0cyB3YXMgbm90IGZvdW5kIGluIHRoZSBwa2ctY29uZmlnIHNlYXJjaCBwYXRoLlxuUGVyaGFwcyB5b3Ugc2hvdWxkIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYFF0NVdpZGdldHMucGMnXG50byB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlXG5ObyBwYWNrYWdlICdRdDVXaWRnZXRzJyBmb3VuZFxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg5NzYyNTk4fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMzUxMzJmMmMiLCJwYXJlbnRJZCI6ImYyZGIwYmI3IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoyOToyMi41OThaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsXzY1RDVMUzlkSGdoWlZubUR6VW81T1RxWHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg0MTQ0MjA4MTkxYTNiMTFhNDY0MzQzNGRhZCIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvYWx0LXJvb3Rmcy1pbnN0YWxsZXJcbi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvYWx0LXJvb3Rmcy1pbnN0YWxsZXIuc3BlY1xuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9BVVRIT1JTXG4uL2FsdC1yb290ZnMtaW5zdGFsbGVyL0NPUFlJTkdcbi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvRVhUUkFfT1BUSU9OU1xuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9mdW5jdGlvbnNcbi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvbG9nXG4uL2FsdC1yb290ZnMtaW5zdGFsbGVyL1JFQURNRVxuLi9hbHQtcm9vdGZzLWluc3RhbGxlci9zaGVsbC1jb25maWdcbi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvc2hlbGwtZXJyb3Jcbi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvc2hlbGwtdGVybWluZm9cbi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvU1VQUE9SVEVELUJPQVJEU1xuLi9DYXJnby5sb2NrXG4uL0NhcmdvLnRvbWxcbi4vLmdpdC9DT01NSVRfRURJVE1TR1xuLi8uZ2l0L2NvbmZpZ1xuLi8uZ2l0L2Rlc2NyaXB0aW9uXG4uLy5naXQvSEVBRFxuLi8uZ2l0aWdub3JlXG4uLy5naXQvaW5kZXhcbi4vc3JjL21haW4ucnNcbi4vdGFyZ2V0L0NBQ0hFRElSLlRBR1xuLi90YXJnZXQvLnJ1c3RjX2luZm8uanNvblxuNzQzTVx0dGFyZ2V0XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODk3NjI1OTh9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJhN2ZjNzk1YSIsInBhcmVudElkIjoiMzUxMzJmMmMiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjI5OjMyLjIzMFoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqRXZhbHVhdGluZyBRdCBiaW5kaW5nIG9wdGlvbnMqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODQ1OWJhYzgxOTE4M2Q3MjU0NWQ0OTZiNzAwXCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNaExhanpsVUpXNXRPbDRwZTlxOFJYWUJvRktiblI3eDdJNnU4bUdaam9jRGljUjIyOGpGQ3ExeHY1c1lKY1pfQW9GT0NDcVF0a0R0NjB0SkxHT0wyeERFcUhKYldzRVhnWG4wTWNpclhQWmFOSjhWNnR0elFkb04zWGRoZjRtUnh2VUhwY0Nnb2VwWDlIZmdIY095dVFyOFV5VkFmdkY0OUFQUVVNbTFvcWwteW5qQW5IMzF5Yk00akk3RnpoWnNhN3RiZDJ0UjhPYldURXU0WHl5em1vckRwUmpRWVFIZWhnZ0E0WnBWRFlsODFaUGdzUnBPbUUzczhoMnlfMFNkOGpid1NlOWZDYkFuVTIzaG5oWWlnbmpYYXBfa19jeGxLa2NBM2xFSUliZTA2cnY5bV9hX0ZMcnpKTDNZcndlYU1uS29TMkJqNkhwMy1kbUQwWjJKN2hfaExNRjFIaEdqUWgxZG5Kc3kxS1UxSVVKN2lOaFhCYTg0eXBnYUVadkRZYzh5eDR6VWxiNHdfRnNueThxWXVodTdhd1U5am5xeDBhcnItVnpZSE4tZGN3eGVtNWttYVhBa2hhN3NDTW0zMWVBbDk5N1dpb3ZiWGtDT2NuLXV6akRpcjR0d01udGx1RGZtUjRTc3NvVGhPUjRDRS03WVNQRk8taThYYTFua0QwSGZfcjVmclBMcUtzY0tGSFhicFFlYXA1cW5oa3lmOFQ4b0xsTVRGak96cXJRMVNRNm5Bd2VXeFV3NEZycV9ZWEtHQTg5b2ppN2prOW12YjhnUTFQMkJ2aWpIdUJ3bzdpNGQ1UWF1dG5EMHMxelIwb2U0VFlSZ1E2b056ZVJwQ2xOd0JUdU5fT2h3VGJRdmNZVzV1a01ZNVFlSExmNVdLSUI0UDIzbWdoWkxrZmVfZ1pNZkl3cGloSWFXUVJzcEZTUklqZGNvSjlfeHdHYXg4a0p4MGtBRDlFQlllbTVWVEdaQklJdXd1SXhxa3V3UnVyTFZrMjR5ZnRKTWNNWFVkRUFTSkZSeUwxamZtdDFYaTNTRUt3TDUtWmFPcVRPNVJFdkJlcTNGQ21LVnZyMFREbmc0YVBWNEdRODNkNE84UW9nbjRJYmV4NGFfa0xkOTRnRjJsOTVCM1ZReUpuQ0xwRXB5WVhOY1hnYXc0bEJmSllOaWFsT1luSXdZMmRGQUdwTC0wZUpLdlZFRUtnV1JUYWNfOGJIc2JlRksyeDJFMmZMS3pyNE05LU1UNlZNN1Z4T2FIU05kM2s4VXNnRlE3Qm80V2dCMV9Ubzl6QXoxeGs1Q3R4OEw1Q3R3LXNRVkpoVDdPcXRIclJCX2p0dWYxaFB1QzV5NTFPbFZBYUFONF9XQ3NSRG9tQ1FTRlZId1Y2RU9lRFhlNmJ5dVFncjhZRDUwanNHdGRyRmp2ODJtaGFkeGdJSHhkYURJR2NpZjZrTk5sVnlaMGVteV80Y2hGWlNOYnM3VEk3cFk0em5xTUc4UFQ2M2xCc2N6VzBsdWtweWw0UEhBc2w0SjNpcmd6WFVuMzhmRVVqbjhHOVB0MXJaZkV0ZlJvWm9fSFBhbkxhRUFwR1pWREZXNmU3aGZFS0RxclRoQWs3SWM1N2NRcm0td2dWa2FJSG1CbFltaXRQNjYwX0pQaHlWSkJSMlhScDhBMDVyQXZOXy1fQkZnbDlfeTBMZUV5M2hjcGhUWUNTcGc3Qk0tbXhLdEI3NmdZb1FYajlDbWktd3hJVzR6eGpISVNCSWlWc20yUi1wdzZFM1NUeW1TUXh4VGFSb2VRcWZ3VS13d1ZvSkM0elp6YVVsVVA3SE9DaXJ0MGhJVFpkUTlwaVRDUVc5MDZPOUpmekx6MFdJSFQtRmJTMm5JYnBCbG40dHkyRjFQQnRwRWt1RXkwSU1fZklNVFB2UURiaFZlQ0JZTFlPVjBabFdILXd6UTJIOGNCeTBtdk9qcS01emJ5WUcxemd1dFE2dFdtaE83MWpVeUFfcngzTnN5TDR4RGJSbXlpYkJCVE5BMlRzcVRkZkJQQTVHQlhaTzhlZ0JjaWlvVUxTMHk2SEhoeW9EXzkzeVJnb3h1Y0Y1Yk1rWHN3dHdJVGRobExYRDFVZGFwclVuTnM0bTFPdlRuTFBTa1Z3a1hzWjd4NHpLTkJDRHJXUkV4UXhkdEpJOVY4dXFmMGNLZW9WVHlRYVhObEtMSWFLQlUzcllRVTRFUGpPYnkxbWY4NFgwZzVVVTNwcUYzN2g4eVE9PVwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqRXZhbHVhdGluZyBRdCBiaW5kaW5nIG9wdGlvbnMqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfUHlwTnFPVUEyMzB4ekJ5cTBkMHowT3NVfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODRiODM3YzgxOTE4YmM2NDMwNGFhMTQwMmE5IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImNhcmdvIHNlYXJjaCBxbWV0YW9iamVjdCAtLWxpbWl0IDU7IGNhcmdvIGluZm8gcW1ldGFvYmplY3QgMj4vZGV2L251bGwgfCBoZWFkIC04MDsgY2FyZ28gc2VhcmNoIGN4eC1xdCAtLWxpbWl0IDUiLCJ0aW1lb3V0IjoxMjB9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MTU1Nywib3V0cHV0IjoxOTgsImNhY2hlUmVhZCI6Mzk0MjQsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MTQwLCJ0b3RhbFRva2VucyI6NDExNzksImNvc3QiOnsiaW5wdXQiOjAuMDA3Nzg1LCJvdXRwdXQiOjAuMDA1OTQsImNhY2hlUmVhZCI6MC4wMTk3MTIsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAzMzQzN319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTc2MjU5OSwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4NDQxOWQ0ODE5MWIyMTc0NTE1MWUwNmE0NzMifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZWFjNzhhNWIiLCJwYXJlbnRJZCI6ImE3ZmM3OTVhIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDoyOTozNy45NzNaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX1B5cE5xT1VBMjMweHpCeXEwZDB6ME9zVXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg0YjgzN2M4MTkxOGJjNjQzMDRhYTE0MDJhOSIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6InFtZXRhb2JqZWN0ID0gXCIwLjIuMTBcIiAgICAgICAgICMgRXhwb3NlIHJ1c3Qgb2JqZWN0IHRvIFF0IGFuZCBRTUwuXG5xbWV0YW9iamVjdF9pbXBsID0gXCIwLjIuMTBcIiAgICAjIEN1c3RvbSBkZXJpdmUgZm9yIHRoZSBxbWV0YW9iamVjdCBjcmF0ZS5cbmtpMThuID0gXCIxLjIuMFwiICAgICAgICAgICAgICAgICMgQSBjcmF0ZSB0byB1c2UgS0Y1STE4biBmcm9tIHJ1c3QuXG5xdHJhbnNsYXRpb24gPSBcIjAuMS43XCIgICAgICAgICAjIEEgbWluaW1hbGlzdCB0cmFuc2xhdGlvbiBzeXN0ZW0gYmFzZWQgb24ganNvbiBmb3IgcW1ldGFvYmplY3RcbnF0dHlwZXMgPSBcIjAuMi4xMlwiICAgICAgICAgICAgICMgTWFudWFsbHkgbWFpbnRhaW5lZCBidWlsZGluZ3MgZm9yIFF0IHZhbHVlIHR5cGVzXG4uLi4gYW5kIDQgY3JhdGVzIG1vcmUgKHVzZSAtLWxpbWl0IE4gdG8gc2VlIG1vcmUpXG5ub3RlOiB0byBsZWFybiBtb3JlIGFib3V0IGEgcGFja2FnZSwgcnVuIGBjYXJnbyBpbmZvIDxuYW1lPmBcbnFtZXRhb2JqZWN0ICNRdCAjUU1MICNRTWV0YU9iamVjdFxuRXhwb3NlIHJ1c3Qgb2JqZWN0IHRvIFF0IGFuZCBRTUwuXG52ZXJzaW9uOiAwLjIuMTBcbmxpY2Vuc2U6IE1JVFxucnVzdC12ZXJzaW9uOiB1bmtub3duXG5kb2N1bWVudGF0aW9uOiBodHRwczovL2RvY3MucnMvcW1ldGFvYmplY3QvMC4yLjEwXG5yZXBvc2l0b3J5OiBodHRwczovL2dpdGh1Yi5jb20vd29ib3EvcW1ldGFvYmplY3QtcnNcbmNyYXRlcy5pbzogaHR0cHM6Ly9jcmF0ZXMuaW8vY3JhdGVzL3FtZXRhb2JqZWN0LzAuMi4xMFxuZmVhdHVyZXM6XG4gK2RlZmF1bHQgICAgICAgICAgPSBbbG9nXVxuICBsb2cgICAgICAgICAgICAgID0gW2RlcDpsb2ddXG4gIGNocm9ub19xZGF0ZXRpbWUgPSBbcXR0eXBlcy9jaHJvbm9dXG4gIHdlYmVuZ2luZSAgICAgICAgPSBbcXR0eXBlcy9xdHdlYmVuZ2luZV1cbmN4eC1xdCA9IFwiMC45LjFcIiAgICAgICAgICAjIFNhZmUgaW50ZXJvcCBiZXR3ZWVuIFJ1c3QgYW5kIFF0XG5rdXNoaSA9IFwiMC4xLjBcIiAgICAgICAgICAgIyBCdWlsZC10aW1lIGJvaWxlcnBsYXRlIGdlbmVyYXRvciBmb3IgY3h4LXF0IGJyaWRnZXMuIERlY2xhcmUgcXByb3BlcnRpZXMgYW5kIGxpc3QtbW9kZWwgcm9sZXMgb25jZSBpbuKAplxuY3h4LXF0LWJ1aWxkID0gXCIwLjkuMVwiICAgICMgSGVscGVycyBmb3IgaW50ZWdyYXRpbmcgYGN4eC1xdGAgY3JhdGUgaW50byBhIENhcmdvIGJ1aWxkXG5jeHgtcXQtZ2VuID0gXCIwLjkuMVwiICAgICAgIyBDb2RlIGdlbmVyYXRpb24gZm9yIGludGVncmF0aW5nIGBjeHgtcXRgIGludG8gaGlnaGVyIGxldmVsIHRvb2xzXG5jeHgtcXQtbGliID0gXCIwLjkuMVwiICAgICAgIyBRdCB0eXBlcyBmb3IgaW50ZWdyYXRpbmcgYGN4eC1xdGAgY3JhdGUgd2l0aCBgY3h4YFxuLi4uIGFuZCAxNSBjcmF0ZXMgbW9yZSAodXNlIC0tbGltaXQgTiB0byBzZWUgbW9yZSlcbm5vdGU6IHRvIGxlYXJuIG1vcmUgYWJvdXQgYSBwYWNrYWdlLCBydW4gYGNhcmdvIGluZm8gPG5hbWU+YFxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg5Nzc3OTczfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMGYxNGM3ZTIiLCJwYXJlbnRJZCI6ImVhYzc4YTViIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMDowMy4wNDBaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlBsYW5uaW5nIFFNTC1SdXN0IGRhdGEgaW50ZWdyYXRpb24qKlxuXG4qKkRlc2lnbmluZyBRTUwgYmFja2VuZCBwcm9wZXJ0aWVzIGFuZCBVSSoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4NTNkZGEwODE5MTllNDY3ZmQ3NDg1NGM2YmZcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1oajF3dlVHM2kxLUJlY0hPRGstNTRqeENoT1hoaThSTi0tdU5xQ0E1UnluTnNwREY5UHlKNTFjQ1NyenczSzllUmdLcTFBck5DOUd0WjNTbW8zczVhZzdfZVY5VXU0MWp5Ni1BeWUzZDRWcDNPelktaUFTOFZ5dHVrSHdyeXlJVzRYMmdLZGtzdEs2dld3YWZGV213QzdIVGNNcTdXYVdOUjhjUWlMSzNRWGcyTHpOdTZVMTlkRENuUmRHaVo2Vk9aMlQ5cWx0ZXYwYUkxMUJYaVZEVi1GWE5DbmNkWmZPQzQ5NW1GQ291eFFHSEllS1QtdzdQOXhXdTdweHk1a0hXZWJfRENlenMxQ19JbEtDcWVaU1NuZ0hjUTM2YnJKZ3Uxc2ZPRlNPbU44NG9TemZFVXlLd3dBbk9jODFSalJGZEZoRzRFcXJTR0hMTEJQT2pyZm5wS2drbFJBdy1wdmFYaHZuaFhjQzB5YkFLODA0cXlWZ3ZEbkwyM2taMmk3UDBIUDNweVVmOUhkbG9TYUJwRXNGLTZqLTFaLXQ0YXRJLU9kLWEzMHZCR1JFeFZLVHd2V3VZQjNqVjdialljX1hYOUlkQmV4ZFlwNFFlRDZGX3Y0dGZwM1hTS0pWOXpiTThVU1VBQlBON1ZlUFhlVjN6WEUxWHFLR0ZLNGF1aF9sYmVkejVEbW9yVGw5dGpQMUstcDlXTTZoMGdwV0FGLVphTi1JMUxQTEZEMXkwVkw3c0k2ekdBQ0NtejhaZnR3dVNIWXA4Rmhtb2p0YlpOUm5UT3hyWHV2N0ZqMUd4aWRJNDBvTkRiTzJybG9zc0RQa2hIQXJOSUhxTmJmTldCZXVkYzFqb2xibnRLeV9NT3IwaFVob1NDVE1SNEF1MjdaNU0zblZJTmY4SVJPV0dTdE5ZdGVydnhNNGFHWGZLNVM2R3A5aUl5RklXdTRUdHc5VUUtUWxMWjg0S3JDVUhHTUFYV1RxRng0V0hRN0haaGE3YS01ZUw2ckczMmN4RFpWaUwyblpnVmpZbEp2WHlncDFRQWdjQmhyNWdoU0RkNjg2Mkg1RGduQURWaU9xYUpCUDZXeXVyZHV2ZzhKRFpnM05maG9Sc2dhenRJdUxYT0FpNndFZ01MSktMaWRuWmZrV1U3SHNvZWlCdWpuNjZWeVkzRlFNaDVtbnFrTGNGYjFIUVo0RXR3NmVBTnVWemstZVlvajVIa1JpcVRrQm9YYlhlc1V6ckdkV3lSZ2JsN3lBSUxvYjNqWThyVFlmVVJidnFjdGRPMEFaRUpwMXp1a250S0pCd1VVNXBsTzdGS1J0SDBaOTVwZXV5RXg2c0JaQWhVZFhqRnhyeFR3N18wcXZ5akZCamd4V3kyYS00ZHlGd1ZsUUxMUXZvWWZaN1gyVlplZmRVYWxSR1pYSWRYTENaOFJqOU9zcXdtWUViOEhTR2FHM3lfbGFIZnRpck12TW9LZVp2X1pMLWI1ckk4b0ZPOXkwbDkxeEgyay1FZm1hZG01N1BCbm5ZU09oMUhBeUIwYUlmQ01SeThwX1Q3UUQyZEpld2VxM3JiTExZaUdYdmdZOHAxSDMweDE4QjVKeFl1c1puTFYtcElUMU9XYTRBMXJiRVdqTDYyNUpXeVpOdTBRZHhSTHVfV2l0eFp0ajl2ZEFpTnd1V0hSOHozdDUtdE5lZDN4dE9pT3NoTExRdFFHV1A3S3hndURYVmluSFNUaHU2c0o0LUFnckJoTm1jSXRpZU9zVFNCdzFpUWtEdXVhM0RTNWM2ZWhwRnh0YXpkTk5HbWpqSmRQUEMzTG5iU00zdWR2c1RtX0RMTkRTU2UycUI5YW1kcGlMVW9WR3JGNlJOa1NnQnZ6dHBXTDdMOTN6R0FWRGlUcGpub19yM2ZBNk1WdHNrZmx2QVEwMWQ2VnduNk52bVREQmtrTlJlNWNXUm1BcjVzMUJsS0QyZkdfVkNONDY1bkhKLTNzSnhjTTdPWXlEZXdtLTJqSXFRN1RYUV85aVF1RXNGa2lETTdlYTc4UlB1M1FrenZnV3V0Q1NjOFBjX3NKWjZqT3R0NE0xXy1Wa1Z0OVBGT1RoTEhfSk9KblBEdHc0d2ZMbmlyak1vY2hpR1VHNjJabkRFMENoZkdIUjE5bWtIUWgyb3h1M2tFN0ZUSUJmRDBBOGs3aGNzaUU0NWV4UEpXaE9MenlmYjZCR1FRNXdodlFINi04OEZib3loMkRZTG1DSWk4cTdFa244bTNRTGdWWmdKejFJYWR4OTVxWmNoZDd2ZG45T09jZjBaTEowNWRkczNLdVhFa3V2djhKMHQybFl5YmxlbG9Yc0x1cndxbENsMEgxUVVxa3ZkQ05NT1pwUEJFLXBRc0tZbXNwTDBuNGl5OWJvZDFiR1VMU0V5Uy1DZ1EyNFpCT2tKaWpVY2lMTUFMM3RENC1KX1VYQUxwZWJLUlZidFFBTjFROUw1RFJiWllDdE5DRm91VXlwbkZ0ZXJyZG94dTBFV0ZrR2xoaHZXbVVtc1hjTzQ0UWdZWko5cmZiSENfcWxYcUxCcU9mM2Jsb3BlV2xTZGdIMWZtS0JJYU1SSlhSQ0VGaHhuRkQ3dHozc2hHYWwwaEp2N2FaVlFKaFJCbjlUdFFIdzZGQ3BqODdLUlhvaTNXLVk1NnpCNWFzbE03X0ZXcnRCcl9pU0IwZXVIVzFVQmFkcFEyTEpOdDNRTlVWb0xQS3NwUmlxLWhfOFdsbDFRcE1TX0Eyb2lxNUpmaWFqNGtyM3hZZUVEeTdTMWUxeU5mTC1QY19CY0pfaS1adzNfSFFYQUFWU0UzdVRpakdQRlp4eHlxcmpnYWJTWWNtcTRmUkZ5ZzhTWW5oUW1CZmtNZTRRQlRIM3g3Z1JoS2ZyYkhES2RzMDNFeHU4T3BKVDgzaElqWGJxcnJfcy0tWW1xZkIzZmtfTHczNkFTLUN4aUtocjJsaHNrVUlkQkx1Ykt2eXRlOVhLQ3IzQUpEbDJDWVdTMnQ4cU9vMm9Pa0RvVTNrYlFEUDZQX29VNkFSaU56TGxPd3dOeTBpY1p5M2pYWHdqWWs4bWE3ckUtZTdSVkRBSFV1dXVlZWppTGcxX3lINTlDd2REM2Zkd2t6R0hYMnFUSkU2MEFXQ1dXVlZKODRNV3gzd040MGRSSkpoajJuYkktMmRoRzRVRU9iWkNnQ19YSTVxeDhLd2o3Z1dPUXd6cVV5bXhtVkt6U2k1NmhFMVhiRzE1LTdSY2FGR1FNOTFUOE5SUHZmdXNTZUVCOU9JbkFlYmhWOURLcVRYNFkzcS1oUmZuT3FNNHdhOGdKMXI4dXlhMzl3RVpUTjFES2JwVnBFZXpVOHRuZTdPQ29LcXpTU05qcW1VOTAzektoSzk3bHZnRWdETHRScGJfeVhRbFlwYU5pMERYekhqLUdQV1c4WWotSDZzOUlIMzBCVXpvM0NUT3NvZHpPRThKMnFMNHdHWTZCLUUxMVk1X0NUdmJWcHBfSjljMVgzQk5oN2ZnemdOUFdtSTBzN3VDdGJYcDRQeGsyNWtwWkZNUlZjbUQxVG1kczgtSDVXS255OGJKcndBSWo1RDB4eXNoTkVXMGtHcnY3ckpyYXhHOXBqTXBfNVhWcUZGRGtmajlFRm1RSlhVRm83QzZ2RkpSb3FsNTdBS0NGTGxjRTM1WlpaRFBpV0hwYWw4RUthcE8zZEhhcHN2TG40NlptYjcyT0xGRjd3Y1lySVBHZzVpY2NhMUs0bnFDdDI0VHZDeXRGeFFLSXdLQ25UaVU2dk5XellybzExd0pGM2NFaWhGVUZoMUhoa0JoUUhUWS1teWhLcmZ4VTBtb0ZuT3ljU0FrcERNYkFTb2haVHRPajJJZlBsR3NVSVZ4X1dyRlgyOWs3VWNVcVMzVXNWWlpNbXUybGFQNDlKZkNHQ0hLVldtX3RvWVI2alNsTlExMXVoSW1yVVZBQXJoYVpMTWJYSGNwckNHVEVOSzBxbkxNNE5zMFdEWFl4YkdPQjByREJtZWExQWROT0pOLUxyWmVZZndiVzRGRDVDTTc4REVvYjI3dnRWT3NIdWN0QVdNV2I3Nk15RlVfalN0cE5aU21ZcnJRUGkzWTBDY2k5RFpVNk9oTjB1YThEbXFSV2x4UlZ0V3paalBDSzN6WC1zd19QQmJuZGxpQkRzSHpRTmFCOWVoNnc4V1BQZS1RaTR3REdxanZqTWhTeGM5dzhNUnV3YTAweWtaMF85ZS1SbWQtMzNuQ1k1WjdDZWRNaENidnluQ2VrUHZoUGJDX0NqR2lyUHJMQ0d5aDVZWV9ld2h1VG1rOUlCaHFvQy16c1NjUlQxUWJNeExNdVVIRGoxNWZsVHF4TW4wU0h6Wlp4dzRYXzd3Vk1yaml1OC12TTFnT0xMUHE3RUpMTEJfMnZYdnp6Y3Y0UnI5TWhLdkpZa1JGSXJKdG00eWJnQUFqbkxRMWpqOEIwSzF0NzJVdmxRN2RpU0tTZnJGbTdLaEtaUmpUYWpDY2FxaGREZlF6bHhhaGtDZ21MMW82eXJXb0wtXy01MThnM0I3SzBxMkR6NThqd0JvMnVDMUFvUTEweDR1QkxlMUdqc19tZGdEZUFJeUhSVkVZRVEyU1JCYlJHbGNpNlJLc19zQS1TeUFkbEVET2tUS2JUMDZuYjRMM2YyOE9yVVZBVHlzUnRtVnB3ZjNtUHVwMmhlMktvZVRwT0FmWnJISDVXSFgyUVVzWGxCVnU4Z0RIMHc0bGlWdmMzQmZtZ3BvOWdFdVptM05JMURmTDMzeEhpbXcxa0FXOUlFYUlJMGFxdkJLZ000ZDBGUUJLR1haQ09oMmNaa0tCRzRGUHAtY0Nzd1IxVWh1d2VXUUFuVWwxbG1FbUxsRHg1cmhBemZDdjJsSWowcXhtOXNYMnJ4dC00WFZVRDYwdjg4SEFsS2xxazNaOWtCTHh0eUFuQWJENmpYMTZYRXprU3RMSF9QLTJPR0F3NEFVMVEzSlFzY0pScTZFNVd5c1dTaVRlcEczSDRsVXpYczFhbVl3bjZIVjI2WDJhc3V2R19lY25lLUhYQ2RmMG01blFSc3R0S2NhOVM0YTFqQzNsN3h6VFpyZUo1cFNTMi1KUkc4NjdZRlNsUU1vNWxvNGdrYk1XcW1VVTl6RktFZzFia0x2VmVhcHd3eVJmTHJqVHJFWTBWZkp3VFcxVERpZ1BvcE4tWDd6YlFJc2NSbl8yc3NfY19lTEZRTUg5blFyVWhyeUJEZUR4ZlpQc2hTX2pqTVhfWHZ4WlVYVkIzS21Pc09xLUxKdEoxcWRTYWVkX0NfR0tTekJyZz09XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipQbGFubmluZyBRTUwtUnVzdCBkYXRhIGludGVncmF0aW9uKipcIn0se1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkRlc2lnbmluZyBRTUwgYmFja2VuZCBwcm9wZXJ0aWVzIGFuZCBVSSoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9hR3FmUVdnOXhtcG5rVDFLTThuS1BZeFN8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4NjNiMGFjODE5MWEzYzJlZTdhMDNiZWI0ZjYiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoibWtkaXIgLXAgY3JhdGVzL2ZsYXNoZXItZ3RrL3NyYyBjcmF0ZXMvZmxhc2hlci1xdC9zcmMgY3JhdGVzL2ZsYXNoZXItcXQvcW1sICYmIG12IHNyYy9tYWluLnJzIGNyYXRlcy9mbGFzaGVyLWd0ay9zcmMvbWFpbi5ycyAmJiBybWRpciBzcmNcbmNhdCA+IENhcmdvLnRvbWwgPDwnRU9GJ1xuW3dvcmtzcGFjZV1cbm1lbWJlcnMgPSBbXCJjcmF0ZXMvZmxhc2hlci1ndGtcIiwgXCJjcmF0ZXMvZmxhc2hlci1xdFwiXVxuZGVmYXVsdC1tZW1iZXJzID0gW1wiY3JhdGVzL2ZsYXNoZXItZ3RrXCJdXG5yZXNvbHZlciA9IFwiM1wiXG5FT0ZcbmNhdCA+IGNyYXRlcy9mbGFzaGVyLWd0ay9DYXJnby50b21sIDw8J0VPRidcbltwYWNrYWdlXVxubmFtZSA9IFwiZmxhc2hlci1ndGtcIlxudmVyc2lvbiA9IFwiMC4xLjBcIlxuZWRpdGlvbiA9IFwiMjAyNFwiXG5kZXNjcmlwdGlvbiA9IFwiQW4gQWR3YWl0YSBHVEsgaW50ZXJmYWNlIGZvciBwcmVwYXJpbmcgQUxUIExpbnV4IFNCQyBpbWFnZXNcIlxubGljZW5zZSA9IFwiR1BMLTIuMC1vci1sYXRlclwiXG5cbltkZXBlbmRlbmNpZXNdXG5hZHcgPSB7IHBhY2thZ2UgPSBcImxpYmFkd2FpdGFcIiwgdmVyc2lvbiA9IFwiMC44XCIsIGZlYXR1cmVzID0gW1widjFfNVwiXSB9XG5ndGsgPSB7IHBhY2thZ2UgPSBcImd0azRcIiwgdmVyc2lvbiA9IFwiMC4xMFwiLCBmZWF0dXJlcyA9IFtcInY0XzEwXCJdIH1cbkVPRlxuY2F0ID4gY3JhdGVzL2ZsYXNoZXItcXQvQ2FyZ28udG9tbCA8PCdFT0YnXG5bcGFja2FnZV1cbm5hbWUgPSBcImZsYXNoZXItcXRcIlxudmVyc2lvbiA9IFwiMC4xLjBcIlxuZWRpdGlvbiA9IFwiMjAyNFwiXG5kZXNjcmlwdGlvbiA9IFwiQSBRdCBpbnRlcmZhY2UgZm9yIHByZXBhcmluZyBBTFQgTGludXggU0JDIGltYWdlc1wiXG5saWNlbnNlID0gXCJHUEwtMi4wLW9yLWxhdGVyXCJcblxuW2RlcGVuZGVuY2llc11cbnFtZXRhb2JqZWN0ID0gXCIwLjIuMTBcIlxuRU9GXG4jIGFkanVzdCByZWxvY2F0ZWQgaW5jbHVkZSBwYXRoXG5weXRob24zIC0gPDwnUFknXG5wPSdjcmF0ZXMvZmxhc2hlci1ndGsvc3JjL21haW4ucnMnXG5zPW9wZW4ocCkucmVhZCgpLnJlcGxhY2UoJ2luY2x1ZGVfc3RyIShcIi4uL2FsdC1yb290ZnMtaW5zdGFsbGVyL1NVUFBPUlRFRC1CT0FSRFNcIiknLCAnaW5jbHVkZV9zdHIhKFwiLi4vLi4vLi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvU1VQUE9SVEVELUJPQVJEU1wiKScpXG5vcGVuKHAsJ3cnKS53cml0ZShzKVxuUFlcbmNhcmdvIGZldGNoIiwidGltZW91dCI6MTIwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjEyMDEsIm91dHB1dCI6OTE1LCJjYWNoZVJlYWQiOjQwNDQ4LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjQ3OSwidG90YWxUb2tlbnMiOjQyNTY0LCJjb3N0Ijp7ImlucHV0IjowLjAwNjAwNTAwMDAwMDAwMDAwMSwib3V0cHV0IjowLjAyNzQ1MDAwMDAwMDAwMDAwMiwiY2FjaGVSZWFkIjowLjAyMDIyNCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDUzNjc5MDAwMDAwMDAwMDA0fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg5Nzc3OTc1LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg1MjhmNDA4MTkxYWI2ZGUwNDk3ZDYyNWQ2YyJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJiYWU2MWIxOCIsInBhcmVudElkIjoiMGYxNGM3ZTIiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMwOjAzLjA3NloiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfYUdxZlFXZzl4bXBua1QxS004bktQWXhTfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODYzYjBhYzgxOTFhM2MyZWU3YTAzYmViNGY2IiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiZXJyb3I6IGZhaWxlZCB0byBsb2FkIG1hbmlmZXN0IGZvciB3b3Jrc3BhY2UgbWVtYmVyIGAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL2NyYXRlcy9mbGFzaGVyLXF0YFxucmVmZXJlbmNlZCBieSB3b3Jrc3BhY2UgYXQgYC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvQ2FyZ28udG9tbGBcblxuQ2F1c2VkIGJ5OlxuICBmYWlsZWQgdG8gcGFyc2UgbWFuaWZlc3QgYXQgYC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvY3JhdGVzL2ZsYXNoZXItcXQvQ2FyZ28udG9tbGBcblxuQ2F1c2VkIGJ5OlxuICBubyB0YXJnZXRzIHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3RcbiAgZWl0aGVyIHNyYy9saWIucnMsIHNyYy9tYWluLnJzLCBhIFtsaWJdIHNlY3Rpb24sIG9yIFtbYmluXV0gc2VjdGlvbiBtdXN0IGJlIHByZXNlbnRcblxuXG5Db21tYW5kIGV4aXRlZCB3aXRoIGNvZGUgMTAxIn1dLCJkZXRhaWxzIjp7fSwiaXNFcnJvciI6dHJ1ZSwidGltZXN0YW1wIjoxNzg0OTg5ODAzMDc2fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNjE0ODVmNjEiLCJwYXJlbnRJZCI6ImJhZTYxYjE4IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMDowNS42MDJaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkNyZWF0aW5nIHBsYWNlaG9sZGVyIGFuZCBmZXRjaGluZyBpbnNwZWN0IGV4YW1wbGVzKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg2Y2E1OTg4MTkxODhmMGYxMmY3NWNmMzQxYlwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTWh0XzlBZmhKMHpzNlA4Z3ZEdXREaGJuM1VoU091NW5MczdscDZjc0dHUVhaY19MQW1vdEtVakl2d1V3WFB4N3d5MGtUanN1OGhCRTNJNW5HN1VxNzBoN1RyTkxsZW1oejJ6MFo4VUphV1ZlYXFFcVloY2VfTXJpeHgyV2lTcGQ3RnVJNGU3NlNmaVZlSUhIcHhFTlkyMVJYTjVoQ0J3WEpGWVJUekU4dFFiSUdzUlJ2MDh4dDR2WDlZbFc5YmRrM2lLNUJVTlp0ellhNndDUEpMbDQwODFub0VBa1RjR3VGaXNMU3plUENHX1NIWWkwS3pBSzFkWEJtd2VtekhteGJRZ2kwRFBDQ0M2UHlLZHpCbHA3LWlNYzB6cEVzUmMtcnI2UEZpR1VhMUU2TTcyenNUVUlGTTJqOWh1SkFYcFN2c2owOUFiRVAxVEpMUl9vU1V0bndZbEJEUUF3RUIwd1hBa0F2dWc4Nkgtd25JUGl5b3kxbHBlaVRrUHRjWmNaTXFPcGlhTnVLeEhZcmhEeFp2Wlp4enA4YWt2SXJ1Y1BmWkRRa1o0eEVRQUcxX3NLV2VsWlpiNFBRdnFTemFIZFBvM0swZEx3YlNJY094LWpJSjlKZzFrTXRYVElTc3lJbEJ4N2hWSmNTT2dhVklEdENtTGZoYWRwNUE1TzlNakVlTmdNTGRZRmVZTS1nckJRYVl1aF93VEtYZGxSeHNsSmZCUU16cjEzWXctNGVtNEJMV0hjQm1fempRWmdsaGhPaWg4c1prQnFDWVdtNDV6QlM3NWdfcjZnTDZYdUk2b3o5Y0QtaWhlbGZFZTJQOVRod2EwUjVMU2Fua2txa1JkTzlmenNrbXYzNlB1b1paQ0NyTHRfUUx2ZGdYWE83S2FTb2xNMHdWU2hHVTEtc0FBQ1hvdHFiOUxHYWV2T2tNV3R6Mm8tX2NHZ1lUakdsdTlWMDlWeUdVSVNMei03ZG1qR1JYX2d4dnNGdXI4R1U4aXNucy1sUGsxaHJ3cmRpUHhZZGlOWVRUcFVlVUdsS1JNWnFnYzNxMlo1dDhCaXU0TndQeEZiMVJDZXo5OUl4bHVKYkxVSWZzZDVFMHl3Yk9qQ1A4WW1aUDhxeVJIZzdpTlpRM1FMam15Q3NSdUxyU2Q5enNIWTNCV1FtRkxwQjRzTTBPdGcwNlhUT2VDWGRIVTVNZkh0d3dsLWQ5UHBqSjVzWGlfX3h5aUNuVEliMmxBaFlHdU83VU1Lc1U2d1hVdzNRcEtwNC1BYkRvMzNvdXN1Q1A1Y251UlR2WmJWUEF2X2JxYXFRaE5VTEVNN3VDVjk1d0cyaVJhY1FnV0ptQT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkNyZWF0aW5nIHBsYWNlaG9sZGVyIGFuZCBmZXRjaGluZyBpbnNwZWN0IGV4YW1wbGVzKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX3ZLQUZPaERJN2VSZ1FMVDRFb216eGFYdHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg2ZDJkNjA4MTkxYmZmNzBmM2NhMmM4NWMxYiIsIm5hbWUiOiJ3cml0ZSIsImFyZ3VtZW50cyI6eyJwYXRoIjoiY3JhdGVzL2ZsYXNoZXItcXQvc3JjL21haW4ucnMiLCJjb250ZW50IjoiZm4gbWFpbigpIHt9XG4ifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjEyMjAsIm91dHB1dCI6NDcsImNhY2hlUmVhZCI6NDE0NzIsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MTIsInRvdGFsVG9rZW5zIjo0MjczOSwiY29zdCI6eyJpbnB1dCI6MC4wMDYxLCJvdXRwdXQiOjAuMDAxNDEsImNhY2hlUmVhZCI6MC4wMjA3MzU5OTk5OTk5OTk5OTcsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAyODI0NTk5OTk5OTk5OTk5N319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTgwMzA3OCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4NmI2NzU0ODE5MTgzMDNkMjEzZTIyZjY2ZjkifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNDRjOWYzODMiLCJwYXJlbnRJZCI6IjYxNDg1ZjYxIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMDowNS42MDNaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX3ZLQUZPaERJN2VSZ1FMVDRFb216eGFYdHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg2ZDJkNjA4MTkxYmZmNzBmM2NhMmM4NWMxYiIsInRvb2xOYW1lIjoid3JpdGUiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJTdWNjZXNzZnVsbHkgd3JvdGUgMTMgYnl0ZXMgdG8gY3JhdGVzL2ZsYXNoZXItcXQvc3JjL21haW4ucnMifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODk4MDU2MDN9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4NTk3MzRlMiIsInBhcmVudElkIjoiNDRjOWYzODMiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMwOjA5LjM2NloiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfT0xrckJJdkdBVXpDOVlPZlFBRlBMbEFOfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODcwNGM4MDgxOTFhNmQ4MjU4MTViZTM4ZWNlIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImNhcmdvIGZldGNoICYmIGZpbmQgfi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjIC1wYXRoICcqcW1ldGFvYmplY3QtMC4yLjEwL2V4YW1wbGVzLyonIC10eXBlIGYgfCBoZWFkIC0yMCIsInRpbWVvdXQiOjEyMH19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoyNjcsIm91dHB1dCI6NTUsImNhY2hlUmVhZCI6NDI0OTYsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MCwidG90YWxUb2tlbnMiOjQyODE4LCJjb3N0Ijp7ImlucHV0IjowLjAwMTMzNSwib3V0cHV0IjowLjAwMTY1LCJjYWNoZVJlYWQiOjAuMDIxMjQ4LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wMjQyMzI5OTk5OTk5OTk5OTh9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODk4MDU2MDUsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODZlMDgwYzgxOTFiYTY0OTA1ZjIyMDY3NjE5In19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjRhZTU1ZmNjIiwicGFyZW50SWQiOiI4NTk3MzRlMiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzA6MTcuMjcyWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9PTGtyQkl2R0FVekM5WU9mUUFGUExsQU58ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4NzA0YzgwODE5MWE2ZDgyNTgxNWJlMzhlY2UiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIgICAgVXBkYXRpbmcgY3JhdGVzLmlvIGluZGV4XG4gICAgIExvY2tpbmcgMTkgcGFja2FnZXMgdG8gbGF0ZXN0IFJ1c3QgMS45Ni4wIGNvbXBhdGlibGUgdmVyc2lvbnNcbiAgICAgIEFkZGluZyBhaG8tY29yYXNpY2sgdjEuMS40XG4gICAgICBBZGRpbmcgYnl0ZW9yZGVyIHYxLjUuMFxuICAgICAgQWRkaW5nIGNjIHYxLjQuMFxuICAgICAgQWRkaW5nIGNwcCB2MC41LjExXG4gICAgICBBZGRpbmcgY3BwX2J1aWxkIHYwLjUuMTFcbiAgICAgIEFkZGluZyBjcHBfY29tbW9uIHYwLjUuMTFcbiAgICAgIEFkZGluZyBjcHBfbWFjcm9zIHYwLjUuMTFcbiAgICAgIEFkZGluZyBmaW5kLW1zdmMtdG9vbHMgdjAuMS45XG4gICAgICBBZGRpbmcgbGF6eV9zdGF0aWMgdjEuNS4wXG4gICAgICBBZGRpbmcgbG9nIHYwLjQuMzNcbiAgICAgIEFkZGluZyBxbWV0YW9iamVjdCB2MC4yLjEwXG4gICAgICBBZGRpbmcgcW1ldGFvYmplY3RfaW1wbCB2MC4yLjEwXG4gICAgICBBZGRpbmcgcXR0eXBlcyB2MC4yLjEyXG4gICAgICBBZGRpbmcgcmVnZXggdjEuMTMuMVxuICAgICAgQWRkaW5nIHJlZ2V4LWF1dG9tYXRhIHYwLjQuMTZcbiAgICAgIEFkZGluZyByZWdleC1zeW50YXggdjAuOC4xMVxuICAgICAgQWRkaW5nIHNobGV4IHYyLjAuMVxuICAgICAgQWRkaW5nIHN5biB2MS4wLjEwOVxuICAgICAgQWRkaW5nIHVuaWNvZGUteGlkIHYwLjIuNlxuIERvd25sb2FkaW5nIGNyYXRlcyAuLi5cbiAgRG93bmxvYWRlZCBzZXJkZV9kZXJpdmUgdjEuMC4yMjlcbiAgRG93bmxvYWRlZCBzaGxleCB2Mi4wLjFcbiAgRG93bmxvYWRlZCBsb2cgdjAuNC4zM1xuICBEb3dubG9hZGVkIGNjIHYxLjQuMFxuICBEb3dubG9hZGVkIHJlZ2V4IHYxLjEzLjFcbiAgRG93bmxvYWRlZCBzeW4gdjMuMC4zXG4gIERvd25sb2FkZWQgcmVnZXgtc3ludGF4IHYwLjguMTFcbiAgRG93bmxvYWRlZCBxbWV0YW9iamVjdF9pbXBsIHYwLjIuMTBcbiAgRG93bmxvYWRlZCBxdHR5cGVzIHYwLjIuMTJcbiAgRG93bmxvYWRlZCBjcHBfbWFjcm9zIHYwLjUuMTFcbiAgRG93bmxvYWRlZCBjcHAgdjAuNS4xMVxuICBEb3dubG9hZGVkIGNwcF9jb21tb24gdjAuNS4xMVxuICBEb3dubG9hZGVkIHJlZ2V4LWF1dG9tYXRhIHYwLjQuMTZcbiAgRG93bmxvYWRlZCBjcHBfYnVpbGQgdjAuNS4xMVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg5ODE3MjcyfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZDE0ODFiNTAiLCJwYXJlbnRJZCI6IjRhZTU1ZmNjIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMDoyMy4zMTRaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKk5vdGljaW5nIGdsb2JhbCBxbWV0YSBkb3dubG9hZCBsb2NhdGlvbioqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4N2M3M2U4ODE5MTk4YmM0Yzk5MDIyNGZkZjhcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1oOVZLV3VBWlQ4dWxsNjVpTkpZREcxRHNYVm0waGlEMUQ0UmJydUlHUEYwVGdiUkRKcU1PME45TU1pUk1uQWF3QldGN0FUM093WmNjUzNhZ1ZZMnZfbHpsWUNLdUMzTkxqZDEzLUhhRllBaEhzTkh0UjZJN1FfTWpmeTBjNl82bWllN180NzlDdU5NdEV6Y203ODZCdDZWM0w4LUYtWHpORkkwdXhTMWNfdWxjRkJrX0dwVFZ0cVV5YU9FSFVWal93Q0ZCSHFBQ2kxS1FIelpjUGtJSTU5YUFVYk5pTzhaQTM1Qk9DWkM2blFnSGVBZDEtQUN6X29JWHFRblBtSkFJYi1xNWhrN0o4UnVTV0ZMcXZ5SWx6NjJNVWRVWXZybTlzUS0wU1ZEZmUwQUc0am55dUY2MnBLb09YLWFuLXNQSlhOaXpRQlRKUHFZUFhMdjR6UmlkVmFGdDNYcFNSVk5KVldYRnhfSmMwRDJWRThNOHJHOV80TG9jMzFCZEtFaVd1ZlpVQnVMem1oOGxkN2xvSU1nVWl5WWltc3RISEM0enVDR3VDSldWdWl0TjRuRWFSZUpuOFBGbTNiQzc4RG8xc0F4Q1BVd3pJcFc1TmIwQTRiemFRV1g0ZHNQNGxwVnp2RHN1U0pZYkVmLTBVdnpHakkzLXJwWVc1RERqMnJOWXh5Ty16Q3lvdkhTUS04ck9pQjdHa1gtUHBfTGxwbmNfTUFjaml2b0VxRXlJRkZObFVScjhWV1JTckhubUJOXzA3M0tOVkEwZ0tsel8wZ3lTRDFGNTJja3VMaVByMGVnaVkwazFUUEhRYWRKQVRtNm5HTXNoc3E1SkRUdGdWb3NZakFjUmxsR3hialFtZDJfeC1FRnQ3dk5BUFhfSk1zdDBwR3U4SFgtaGFyblphYjhhcFJBT1dURTlIVWRNZWgtbDFiUkJVa3U4dkxuV3BKMkhDNlNkQUp0WnhjYU9pdEJybl9vZGtYQUg3ek5wMVd0VkgzTFJLSGZNVG9CSFpDbDFJTVQ1bl8zOGFGSTJ2Q1gtQ0hqRXo4dF8zOGR6V1F0ckx4VC1KTHFsTzNfSk1zTGRfdjBRSF9ZX1lWNUFfQVMxb3pEUlFnVFJ5ejRxUHlpTDEzODJXcXp0WGkxd0JiZnV4LXpNODJ3RnZyeFp2b2dKcVpoTzVxTkxrekVoNjZKekJnUzFpbU5ab2otZTB0emJKZkN2RWthTkl4R3ViSkdObFZMRC1tR0htbDNEQkhPcm1hT2FiQVNfTzZxQ2dNRGROa2tXTFlJZzlBdWkyNnFTcEV1QTdhWkVlbUljNkduRnVwU21sUVVObll3TC1KcGQxVVAyWjVycl9HNkxTSnZGTkhcIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKk5vdGljaW5nIGdsb2JhbCBxbWV0YSBkb3dubG9hZCBsb2NhdGlvbioqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9TTzFuc0h2OFkxZmlkUFRkMHdJazVRU258ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4N2QyZjMwODE5MWIzZmQwMmI3ZGZhNDY5N2MiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiZmluZCB+Ly5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMgLW1heGRlcHRoIDMgLXR5cGUgZCAtbmFtZSAncW1ldGFvYmplY3QtMC4yLjEwJzsgcmcgJ3NldF9wcm9wZXJ0eXxRbWxFbmdpbmU6Om5ld3xxdF9wcm9wZXJ0eSEnIH4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy8qL3FtZXRhb2JqZWN0LTAuMi4xMCAtZyAnKi5ycycgfCBoZWFkIC00MCJ9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6NzQ5LCJvdXRwdXQiOjEwNiwiY2FjaGVSZWFkIjo0MjQ5NiwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoxNSwidG90YWxUb2tlbnMiOjQzMzUxLCJjb3N0Ijp7ImlucHV0IjowLjAwMzc0NTAwMDAwMDAwMDAwMDUsIm91dHB1dCI6MC4wMDMxOCwiY2FjaGVSZWFkIjowLjAyMTI0OCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDI4MTczfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg5ODE3Mjc0LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg3YjBkMTA4MTkxOGRlNjI1NTMzNmY0NjYxNiJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI5Y2UzZTY0ZCIsInBhcmVudElkIjoiZDE0ODFiNTAiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMwOjIzLjM0N1oiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfU08xbnNIdjhZMWZpZFBUZDB3SWs1UVNufGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODdkMmYzMDgxOTFiM2ZkMDJiN2RmYTQ2OTdjIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTBcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcW1ldGFvYmplY3QtMC4yLjEwL3NyYy9xbWV0YXR5cGUucnM6Ly8vIE9uY2UgaW1wbGVtZW50ZWQgZm9yIGEgdHlwZSwgaXQgY2FuIGJlIHVzZWQgYXMgYSB0eXBlIG9mIGEgcXRfcHJvcGVydHkhIG9yXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3FtZXRhb2JqZWN0LTAuMi4xMC9zcmMvbGliLnJzOiAgICAgICAgbmFtZTogcXRfcHJvcGVydHkhKFFTdHJpbmc7IE5PVElGWSBuYW1lX2NoYW5nZWQpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvc3JjL2xpYi5yczogICAgICAgIGxldCBtdXQgZW5naW5lID0gUW1sRW5naW5lOjpuZXcoKTtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcW1ldGFvYmplY3QtMC4yLjEwL3NyYy9saWIucnM6ICAgICAgICByZXN1bHQ6IHF0X3Byb3BlcnR5IShRU3RyaW5nOyBOT1RJRlkgcmVzdWx0X2NoYW5nZWQpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvc3JjL2xpYi5yczogICAgIyBsZXQgbXV0IGVuZ2luZSA9IFFtbEVuZ2luZTo6bmV3KCk7XG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3FtZXRhb2JqZWN0LTAuMi4xMC9zcmMvbGliLnJzOiAgICAvLy8gRklYTUU6IHNob3VsZCBwcm9iYWJseSBub3QgYmUgdXNlZC4gUHJlZmVyIHVzaW5nIGEgUW1sRW5naW5lOjpuZXdfcW9iamVjdC5cbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcW1ldGFvYmplY3QtMC4yLjEwL3NyYy9saWIucnM6Ly8vICAgIGZvbzogcXRfcHJvcGVydHkhKHUzMjsgTk9USUZZIGZvb19jaGFuZ2VkIFdSSVRFIHNldF9mb28pLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvc3JjL2xpYi5yczovLy8gIyAgICAgbGV0IG11dCBlbmdpbmUgPSBRbWxFbmdpbmU6Om5ldygpO1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvc3JjL3F0ZGVjbGFyYXRpdmUucnM6ICAgIHB1YiBmbiBzZXRfcHJvcGVydHkoJm11dCBzZWxmLCBuYW1lOiBRU3RyaW5nLCB2YWx1ZTogUVZhcmlhbnQpIHtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcW1ldGFvYmplY3QtMC4yLjEwL3NyYy9xdGRlY2xhcmF0aXZlLnJzOiAgICAgICAgbGV0IG11dCBlbmdpbmUgPSBRbWxFbmdpbmU6Om5ldygpO1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvbW9kZWxzLnJzOiAgICAgICAgcHViIGxpc3Q6IHF0X3Byb3BlcnR5IShSZWZDZWxsPFNpbXBsZUxpc3RNb2RlbDxYPj47IENPTlNUKSxcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcW1ldGFvYmplY3QtMC4yLjEwL3Rlc3RzL21vZGVscy5yczogICAgICAgIHB1YiBsaXN0OiBxdF9wcm9wZXJ0eSEoUmVmQ2VsbDxTaW1wbGVMaXN0TW9kZWw8WD4+OyBDT05TVCksXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3FtZXRhb2JqZWN0LTAuMi4xMC90ZXN0cy90ZXN0cy5yczogICAgICAgIHZhbHVlOiBxdF9wcm9wZXJ0eSEoYm9vbCksXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3FtZXRhb2JqZWN0LTAuMi4xMC90ZXN0cy90ZXN0cy5yczogICAgcHJvcF94OiBxdF9wcm9wZXJ0eSEodTMyOyBOT1RJRlkgcHJvcF94X2NoYW5nZWQpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgIHByb3BfeTogcXRfcHJvcGVydHkhKFN0cmluZzsgTk9USUZZIHByb3BfeV9jaGFuZ2VkKSxcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcW1ldGFvYmplY3QtMC4yLjEwL3Rlc3RzL3Rlc3RzLnJzOiAgICBwcm9wX3o6IHF0X3Byb3BlcnR5IShRU3RyaW5nOyBOT1RJRlkgcHJvcF96X2NoYW5nZWQpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgIHByb3BfY29sb3I6IHF0X3Byb3BlcnR5IShRQ29sb3IpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgIHByb3BfanN2YWx1ZTogcXRfcHJvcGVydHkhKFFKU1ZhbHVlKSxcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcW1ldGFvYmplY3QtMC4yLjEwL3Rlc3RzL3Rlc3RzLnJzOiAgICBwcm9wX3ZhcmlhbnRtYXA6IHF0X3Byb3BlcnR5IShRVmFyaWFudE1hcCksXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3FtZXRhb2JqZWN0LTAuMi4xMC90ZXN0cy90ZXN0cy5yczogICAgdmFsdWU6IHF0X3Byb3BlcnR5ISh1MzIpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgICAgICBudW1fdmFsdWU6IHF0X3Byb3BlcnR5ISh1MzI7IEFMSUFTIG51bVZhbHVlKSxcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcW1ldGFvYmplY3QtMC4yLjEwL3Rlc3RzL3Rlc3RzLnJzOiAgICAgICAgc3RyX3ZhbHVlOiBxdF9wcm9wZXJ0eSEoU3RyaW5nOyBBTElBUyBzdHJWYWx1ZSksXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3FtZXRhb2JqZWN0LTAuMi4xMC90ZXN0cy90ZXN0cy5yczogICAgcHJvcF9vYmplY3Q6IHF0X3Byb3BlcnR5IShSZWZDZWxsPE15T2JqZWN0PjsgQ09OU1QpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgIHByb3A6IHF0X3Byb3BlcnR5IShRUG9pbnRlcjxTb21lT2JqZWN0PjsgTk9USUZZIHByb3BfY2hhbmdlZCksXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3FtZXRhb2JqZWN0LTAuMi4xMC90ZXN0cy90ZXN0cy5yczogICAgbGV0IGVuZ2luZSA9IFJjOjpuZXcoUW1sRW5naW5lOjpuZXcoKSk7XG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3FtZXRhb2JqZWN0LTAuMi4xMC90ZXN0cy90ZXN0cy5yczogICAgbGV0IGVuZ2luZSA9IFJjOjpuZXcoUW1sRW5naW5lOjpuZXcoKSk7XG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3FtZXRhb2JqZWN0LTAuMi4xMC90ZXN0cy90ZXN0cy5yczogICAgICAgIHByb3BfeDogcXRfcHJvcGVydHkhKHUzMjsgUkVBRCBwcm9wX3hfZ2V0dGVyIENPTlNUKSxcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcW1ldGFvYmplY3QtMC4yLjEwL3Rlc3RzL3Rlc3RzLnJzOiAgICAgICAgcHJvcF95OiBxdF9wcm9wZXJ0eSEoU3RyaW5nOyBSRUFEIHByb3BfeV9nZXR0ZXIgQ09OU1QpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgICAgICBwcm9wX3g6IHF0X3Byb3BlcnR5ISh1MzI7IFdSSVRFIHByb3BfeF9zZXR0ZXIgTk9USUZZIHByb3BfeF9ub3RpZnkpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgICAgICBwcm9wX3k6IHF0X3Byb3BlcnR5IShTdHJpbmc7IE5PVElGWSBwcm9wX3lfbm90aWZ5IFdSSVRFIHByb3BfeV9zZXR0ZXIpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgICAgICBteV9wcm9wZXJ0eTogcXRfcHJvcGVydHkhKHUzMiksXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3FtZXRhb2JqZWN0LTAuMi4xMC90ZXN0cy90ZXN0cy5yczogICAgcHJvcF94OiBxdF9wcm9wZXJ0eSEodTMyOyBSRUFEIHByb3BfeF9nZXR0ZXIgQ09OU1QpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgIHByb3BfeTogcXRfcHJvcGVydHkhKHUzMjsgV1JJVEUgcHJvcF95X3NldHRlciksXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3FtZXRhb2JqZWN0LTAuMi4xMC90ZXN0cy90ZXN0cy5yczogICAgbGV0IF9hID0gUW1sRW5naW5lOjpuZXcoKTtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcW1ldGFvYmplY3QtMC4yLjEwL3Rlc3RzL3Rlc3RzLnJzOiAgICBsZXQgX2IgPSBRbWxFbmdpbmU6Om5ldygpO1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgICAgICByZXN1bHQ6IHF0X3Byb3BlcnR5IShRU3RyaW5nOyBOT1RJRlkgcmVzdWx0X2NoYW5nZWQpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgIGxldCBlbmdpbmUgPSBRbWxFbmdpbmU6Om5ldygpO1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgICAgICB2YWx1ZTogcXRfcHJvcGVydHkhKGJvb2wpLFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvdGVzdHMvdGVzdHMucnM6ICAgICAgICBsZXQgZW5naW5lID0gUmM6Om5ldyhRbWxFbmdpbmU6Om5ldygpKTtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcW1ldGFvYmplY3QtMC4yLjEwL3Rlc3RzL3Rlc3RzLnJzOiAgICBsZXQgZW5naW5lID0gUW1sRW5naW5lOjpuZXcoKTtcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4OTgyMzM0N319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjY5MGI4MWQzIiwicGFyZW50SWQiOiI5Y2UzZTY0ZCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzA6MjYuMjY5WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9haDlMVWZ2eXhubkRNVUh6eXNSMUZtelN8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4ODBmNTIwODE5MTgyN2U4ZDdjMGQ5N2I4MjgiLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xbWV0YW9iamVjdC0wLjIuMTAvc3JjL2xpYi5ycyIsIm9mZnNldCI6MzAsImxpbWl0Ijo4MH19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjozMTQ0LCJvdXRwdXQiOjY1LCJjYWNoZVJlYWQiOjQyNDk2LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjAsInRvdGFsVG9rZW5zIjo0NTcwNSwiY29zdCI6eyJpbnB1dCI6MC4wMTU3Miwib3V0cHV0IjowLjAwMTk1MDAwMDAwMDAwMDAwMDEsImNhY2hlUmVhZCI6MC4wMjEyNDgsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAzODkxOH19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTgyMzM0OSwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4N2ZhYzZjODE5MTk5YjdiOTkyOTU0ODY1YWIifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMWEzNTkyNGYiLCJwYXJlbnRJZCI6IjY5MGI4MWQzIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMDoyNi4yNzBaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX2FoOUxVZnZ5eG5uRE1VSHp5c1IxRm16U3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg4MGY1MjA4MTkxODI3ZThkN2MwZDk3YjgyOCIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiAgICAgICAgLy8gU3BlY2lmeSB0aGUgYmFzZSBjbGFzcyB3aXRoIHRoZSBxdF9iYXNlX2NsYXNzIG1hY3JvXG4gICAgICAgIGJhc2U6IHF0X2Jhc2VfY2xhc3MhKHRyYWl0IFFPYmplY3QpLFxuICAgICAgICAvLyBEZWNsYXJlIGBuYW1lYCBhcyBhIHByb3BlcnR5IHVzYWJsZSBmcm9tIFF0XG4gICAgICAgIG5hbWU6IHF0X3Byb3BlcnR5IShRU3RyaW5nOyBOT1RJRlkgbmFtZV9jaGFuZ2VkKSxcbiAgICAgICAgLy8gRGVjbGFyZSBhIHNpZ25hbFxuICAgICAgICBuYW1lX2NoYW5nZWQ6IHF0X3NpZ25hbCEoKSxcbiAgICAgICAgLy8gQW5kIGV2ZW4gYSBzbG90XG4gICAgICAgIGNvbXB1dGVfZ3JlZXRpbmdzOiBxdF9tZXRob2QhKGZuIGNvbXB1dGVfZ3JlZXRpbmdzKCZzZWxmLCB2ZXJiOiBTdHJpbmcpIC0+IFFTdHJpbmcge1xuICAgICAgICAgICAgZm9ybWF0IShcInt9IHt9XCIsIHZlcmIsIHNlbGYubmFtZS50b19zdHJpbmcoKSkuaW50bygpXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZm4gbWFpbigpIHtcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGBHcmVldGVyYCBzdHJ1Y3QgdG8gUU1MXG4gICAgICAgIHFtbF9yZWdpc3Rlcl90eXBlOjo8R3JlZXRlcj4oY3N0ciEoXCJHcmVldGVyXCIpLCAxLCAwLCBjc3RyIShcIkdyZWV0ZXJcIikpO1xuICAgICAgICAvLyBDcmVhdGUgYSBRTUwgZW5naW5lIGZyb20gcnVzdFxuICAgICAgICBsZXQgbXV0IGVuZ2luZSA9IFFtbEVuZ2luZTo6bmV3KCk7XG4gICAgIyByZXR1cm47IC8vIFdlIGNhbid0IGNyZWF0ZSBhIHdpbmRvdyBpbiB0aGUgQ0lcbiAgICAgICAgLy8gKEhlcmUgdGhlIFFNTCBjb2RlIGlzIGlubGluZSwgYnV0IG9uZSBjYW4gYWxzbyBsb2FkIGZyb20gYSBmaWxlKVxuICAgICAgICBlbmdpbmUubG9hZF9kYXRhKHIjXCJcbiAgICAgICAgICAgIGltcG9ydCBRdFF1aWNrIDIuNlxuICAgICAgICAgICAgaW1wb3J0IFF0UXVpY2suV2luZG93IDIuMFxuICAgICAgICAgICAgLy8gSW1wb3J0IG91ciBSdXN0IGNsYXNzZXNcbiAgICAgICAgICAgIGltcG9ydCBHcmVldGVyIDEuMFxuXG4gICAgICAgICAgICBXaW5kb3cge1xuICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWVcbiAgICAgICAgICAgICAgICAvLyBJbnN0YW50aWF0ZSB0aGUgcnVzdCBzdHJ1Y3RcbiAgICAgICAgICAgICAgICBHcmVldGVyIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGdyZWV0ZXI7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBhIHByb3BlcnR5XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiV29ybGRcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBUZXh0IHtcbiAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5jZW50ZXJJbjogcGFyZW50XG4gICAgICAgICAgICAgICAgICAgIC8vIENhbGwgYSBtZXRob2RcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogZ3JlZXRlci5jb21wdXRlX2dyZWV0aW5ncyhcImhlbGxvXCIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICBcIiMuaW50bygpKTtcbiAgICAgICAgZW5naW5lLmV4ZWMoKTtcbiAgICB9XG4gICAgYGBgXG5cbiAgICAjIEJhc2ljIHR5cGVzXG5cbiAgICBUaGUgcmUtZXhwb3J0ZWQgY3JhdGUgW2BxdHR5cGVzYF0gY29udGFpbnMgYmluZGluZyB0byB0aGUgbW9zdCB1c2VmdWxsXG4gICAgYmFzaWMgdHlwZXMgc3VjaCBhcyBbYFFTdHJpbmdgXSwgW2BRVmFyaWFudGBdLCAuLi5cblxuICAgIFlvdSBjYW4gYWxzbyBzaW1wbHkgdXNlIHJ1c3QgdHlwZSBgU3RyaW5nYCwgYnV0IHVzaW5nIFFTdHJpbmcgbWlnaHQgYXZvaWQgdW5lY2Vzc2FyeVxuICAgIGNvbnZlcnNpb25zIGluIHNvbWUgY2FzZS5cblxuICAgICMgTWV0YSB0eXBlXG5cbiAgICBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSBhIHR5cGUgaW4gYSBzaWduYWwgb3IgbWV0aG9kIHBhcmFtZXRlciwgb3IgYXMgYSBwcm9wZXJ0eSB0eXBlLFxuICAgIHRoZSB0eXBlIG5lZWQgdG8gaW1wbGVtZW50IHRoZSBbUU1ldGFUeXBlXShxbWV0YXR5cGUvdHJhaXQuUU1ldGFUeXBlLmh0bWwpIHRyYWl0LlxuICAgIEFsbCB0aGUgbWV0aG9kIGFyZSBwcm92aWRlZCBzbyB5b3UgY2FuIGp1c3QgaW1wbGVtZW50IHRoZSBRTWV0YVR5cGUgbGlrZSB0aGlzOlxuXG4gICAgYGBgcnVzdFxuICAgIHVzZSBxbWV0YW9iamVjdDo6UU1ldGFUeXBlO1xuXG4gICAgI1tkZXJpdmUoRGVmYXVsdCwgQ2xvbmUpXVxuICAgIHN0cnVjdCBNeVBvaW50KHUzMiwgdTMyKTtcblxuICAgIGltcGwgUU1ldGFUeXBlIGZvciBNeVBvaW50IHt9O1xuICAgIGBgYFxuXG4gICAgV2l0aCB0aGF0IGl0IGlzIGFsc28gcG9zc2libGUgdG8gcHV0IHRoZSB0eXBlIGluIGEgIFtgUVZhcmlhbnRgXVxuXG4gICAgIyBPYmplY3QgcGlubmluZ1xuXG4gICAgT25jZSBhbiBvYmplY3QgdGhhdCBkZXJpdmVzIGZyb20gUU9iamVjdCBpcyBleHBvc2VkIHRvIEMrKywgaXQgbmVlZHMgdG8gYmUgcGlubmVkLCBhbmQgY2Fubm90XG4gICAgYmUgbW92ZWQgaW4gbWVtb3J5LlxuICAgIEFsc28sIHNpbmNlIHRoZSBRdCBjb2RlIGNhbiBiZSByZS1lbnRyYW50LCB0aGUgb2JqZWN0IG11c3QgYmUgcGxhY2VkIGluIGEgUmVmQ2VsbC5cbiAgICBUaGUgW1FPYmplY3RQaW5uZWRdKHN0cnVjdC5RT2JqZWN0UGlubmVkLmh0bWwpIG9iamVjdCBpcyB1c2VkIHRvIGVuZm9yY2UgdGhlIHBpbm5pbmcuXG5cbiAgICBJZiB5b3Ugd2FudCB0byBrZWVwIHBvaW50ZXIgdG8gcmVmZXJlbmNlLCB5b3UgY2FuIHVzZSBbUVBvaW50ZXJdKHN0cnVjdC5RUG9pbnRlci5odG1sKS5cblxuICAgICMgVGhyZWFkaW5nXG5cblxuWzk5NCBtb3JlIGxpbmVzIGluIGZpbGUuIFVzZSBvZmZzZXQ9MTEwIHRvIGNvbnRpbnVlLl0ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODk4MjYyNzB9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJkNGViZjgxZCIsInBhcmVudElkIjoiMWEzNTkyNGYiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMwOjI5LjM5OVoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqVmVyaWZ5aW5nIFFNTCBzdHJpbmcgbG9hZGluZyBhbmQgcHJvcGVydHkgc2V0dGluZyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4ODM3YmIwODE5MTkzYTYzODM0MTRmYWFjMzVcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1pRXMwSFVqcHZsUlNyMWRmX0JROVpueUVxMEJZaGZBdFdHZk55a2JZVjZwX3l6aDlOYUFmWHo5Vl9XVzZfOWJKUTU0SkFPbU1OY0hRYXh1am9HNFRHRTE5M1REM2tVc1BGZGh4OGxuY2VnMXp2aE1CVTIwbTNMMnlIbEwyRjRWVVlsMVBIN1djQ0Z2V2N5NFdjdFhYN3F1aVc0eUtkSlR5b19CcWVjYXJ4M0ExZVJoWXd2d1VNYWg5STVaS29sOXh4eHZGaWRqRi1KaTBLSndPdnlJZ1l5TXVndGdDQlB6M2xIdzhvcWlMNHFUTlRhdjN2QmVpVDFjQ1ExQW1reFVHX05ESWpnOE5vTGhveWtPRDBnaF9kekRrd3M4VktZT3Brdm9uXzhlUVRzeDhULU1jMlI0M3VEYjlYNkNCLUNpZVFFT0oxN3pWN3R6LTNNN0I4WjNpTFA2Z3RhZHJoOTR4aEpucjRMN2hLWVowSjFZVmd0WTU0NnhpVmtxUzgyck1zM1RRb21YY2tmcXJfRHh3RkpTN3ZrUUdVT3NRenlTaXZCX3dhMkFVRU95MDgza2NQRFFncGc2ekVkVE5RUUR1WUdBdEg1a3BDbnhtU2xmQnZ5V2pJUFd2YkhheGdOVHIwTVVkc0JFOWNWTUhHSFVmY28yT2MzaWE2U0JGbWN0M3dxYlc1Y1JlcTZpcVZFTGk1MWw1S2tNdGZueTZ2dXhOSkZsYklvM1lzMURTOU13NXE0T1ZhakVLTGdvV1pmUjlGTVhLb05SLWFxVUVDMTUySm9BYkU3MzVqUGNtZlB3T0ZuenZWcy1iUWg0TElNclFPeElBMm1DdEIxUGlRUmRBWmZmWWNtS19YNFFYNk1HNE1kUkJrMEowRFFDdDhsc2xRd1dVclV5bExnQldwSlNMMGRUd3dTbUJFS0twOWp1dkFjMjQ2TFRBMHZTVEs5cWV4OGt5dC1WUHNDdG5qX0l1SXVrdFBRUzNsbmRRcGctN0xsQzViaGtMaTkxQ1BCR3YxT2ZRRi05cVM2b3ZFcUE1LU5WM2NFLURYbTF0cEFOdTlPMUxpdk5xbGxTYXByMjZ6RElQek85bG4yZUJ4aGpJU0tUMjZmbVJHYVlWZUEtRXR2LW1mOWNiYktEMWNLYVRINUh0WWtfYlNyS0VZdzdHWEQ5QkxqUzRYWmo2SmJrQ2RRQjEwQTBnV0VOUkJ1UWdXbHo3RDBsSWZzeEkyMFJMb2hnaklpMVA0T1Fycjl4X2pJMlJ0bFBRSHFLZFFBVDBRU1pPaGRKV3VlRVE0ZkZlenhPazlhR3M0SDBrRTlBc0toSnhoSDlUU2lVRjlSVG1ZQ1NhbFJpV2FZNXlWRVg0N3RXaFBmbUE1NC1RZ0VDbTB4WVVHTjV3PT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlZlcmlmeWluZyBRTUwgc3RyaW5nIGxvYWRpbmcgYW5kIHByb3BlcnR5IHNldHRpbmcqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfWDhXS0c5N2NDWnprcEZnZmVtRFlPelBafGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODg0NmFmMDgxOTE4NmY4NzM4YTczYmY5ZTdjIiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6Ii9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcW1ldGFvYmplY3QtMC4yLjEwL3NyYy9xdGRlY2xhcmF0aXZlLnJzIiwib2Zmc2V0IjozOTAsImxpbWl0Ijo1NX19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoxODIyLCJvdXRwdXQiOjkzLCJjYWNoZVJlYWQiOjQ0NTQ0LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjIyLCJ0b3RhbFRva2VucyI6NDY0NTksImNvc3QiOnsiaW5wdXQiOjAuMDA5MTEsIm91dHB1dCI6MC4wMDI3OSwiY2FjaGVSZWFkIjowLjAyMjI3MiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDM0MTcyfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg5ODI2MjcxLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg4MmEwZDg4MTkxOGRmZmYyM2NjYWU1MTVhMSJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJiYjQ3M2NkMiIsInBhcmVudElkIjoiZDRlYmY4MWQiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMwOjI5LjQwMFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfWDhXS0c5N2NDWnprcEZnZmVtRFlPelBafGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODg0NmFmMDgxOTE4NmY4NzM4YTczYmY5ZTdjIiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiICAgICAgICBjcHAhKHVuc2FmZSBbZW5naW5lIGFzIFwiUW1sRW5naW5lSG9sZGVyICpcIl0gLT4gUW1sQ29tcG9uZW50IGFzIFwiUVFtbENvbXBvbmVudEhvbGRlclwiIHtcbiAgICAgICAgICAgIHJldHVybiBRUW1sQ29tcG9uZW50SG9sZGVyKGVuZ2luZS0+ZW5naW5lLmdldCgpKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgUVFtbENvbXBvbmVudC4gU2ltaWxhciB0byBRT2JqZWN0OjpnZXRfY3BwX29iamVjdCgpXG4gICAgcHViIGZuIGdldF9jcHBfb2JqZWN0KCZzZWxmKSAtPiAqbXV0IGNfdm9pZCB7XG4gICAgICAgIGNwcCEodW5zYWZlIFtzZWxmIGFzIFwiUVFtbENvbXBvbmVudEhvbGRlciAqXCJdIC0+ICptdXQgY192b2lkIGFzIFwiUVFtbENvbXBvbmVudCAqXCIge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYtPmNvbXBvbmVudC5nZXQoKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLy8gUGVyZm9ybXMgUVFtbENvbXBvbmVudDo6bG9hZFVybFxuICAgIHB1YiBmbiBsb2FkX3VybCgmbXV0IHNlbGYsIHVybDogUVVybCwgY29tcGlsYXRpb25fbW9kZTogQ29tcGlsYXRpb25Nb2RlKSB7XG4gICAgICAgIGNwcCEodW5zYWZlIFtcbiAgICAgICAgICAgIHNlbGYgYXMgXCJRUW1sQ29tcG9uZW50SG9sZGVyICpcIixcbiAgICAgICAgICAgIHVybCBhcyBcIlFVcmxcIixcbiAgICAgICAgICAgIGNvbXBpbGF0aW9uX21vZGUgYXMgXCJRUW1sQ29tcG9uZW50OjpDb21waWxhdGlvbk1vZGVcIlxuICAgICAgICBdIHtcbiAgICAgICAgICAgIHNlbGYtPmNvbXBvbmVudC0+bG9hZFVybCh1cmwsIGNvbXBpbGF0aW9uX21vZGUpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8vLyBQZXJmb3JtcyBRUW1sQ29tcG9uZW50OjpzZXREYXRhIHdpdGggYSBkZWZhdWx0IHVybFxuICAgIHB1YiBmbiBzZXRfZGF0YSgmbXV0IHNlbGYsIGRhdGE6IFFCeXRlQXJyYXkpIHtcbiAgICAgICAgY3BwISh1bnNhZmUgW3NlbGYgYXMgXCJRUW1sQ29tcG9uZW50SG9sZGVyICpcIiwgZGF0YSBhcyBcIlFCeXRlQXJyYXlcIl0ge1xuICAgICAgICAgICAgc2VsZi0+Y29tcG9uZW50LT5zZXREYXRhKGRhdGEsIFFVcmwoKSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8vIFBlcmZvcm1zIFFRbWxDb21wb25lbnQ6OnNldERhdGFcbiAgICBwdWIgZm4gc2V0X2RhdGFfYXMoJm11dCBzZWxmLCBkYXRhOiBRQnl0ZUFycmF5LCB1cmw6IFFVcmwpIHtcbiAgICAgICAgY3BwISh1bnNhZmUgW3NlbGYgYXMgXCJRUW1sQ29tcG9uZW50SG9sZGVyICpcIiwgZGF0YSBhcyBcIlFCeXRlQXJyYXlcIiwgdXJsIGFzIFwiUVVybFwiXSB7XG4gICAgICAgICAgICBzZWxmLT5jb21wb25lbnQtPnNldERhdGEoZGF0YSwgdXJsKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLy8gUGVyZm9ybXMgUVFtbENvbXBvbmVudDo6Y3JlYXRlXG4gICAgcHViIGZuIGNyZWF0ZSgmbXV0IHNlbGYpIC0+ICptdXQgY192b2lkIHtcbiAgICAgICAgY3BwISh1bnNhZmUgW3NlbGYgYXMgXCJRUW1sQ29tcG9uZW50SG9sZGVyICpcIl0gLT4gKm11dCBjX3ZvaWQgYXMgXCJRT2JqZWN0ICpcIiB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi0+Y29tcG9uZW50LT5jcmVhdGUoKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLy8gUGVyZm9ybXMgUVFtbENvbXBvbmVudDo6c3RhdHVzXG4gICAgcHViIGZuIHN0YXR1cygmc2VsZikgLT4gQ29tcG9uZW50U3RhdHVzIHtcbiAgICAgICAgY3BwISh1bnNhZmUgW1xuICAgICAgICAgICAgc2VsZiBhcyBcIlFRbWxDb21wb25lbnRIb2xkZXIgKlwiXG4gICAgICAgIF0gLT4gQ29tcG9uZW50U3RhdHVzIGFzIFwiUVFtbENvbXBvbmVudDo6U3RhdHVzXCIge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYtPmNvbXBvbmVudC0+c3RhdHVzKCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8vIFNlZSBRdCBkb2N1bWVudGF0aW9uIGZvciBRUW1sQ29tcG9uZW50OjpzdGF0dXNDaGFuZ2VkXG4gICAgcHViIGZuIHN0YXR1c19jaGFuZ2VkX3NpZ25hbCgpIC0+IFNpZ25hbDxmbihzdGF0dXM6IENvbXBvbmVudFN0YXR1cyk+IHtcblxuWzgyNyBtb3JlIGxpbmVzIGluIGZpbGUuIFVzZSBvZmZzZXQ9NDQ1IHRvIGNvbnRpbnVlLl0ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODk4Mjk0MDB9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJmM2NlOGM1NSIsInBhcmVudElkIjoiYmI0NzNjZDIiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMwOjMzLjI1MVoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfcG5uWVdVcjJxOWV4c1FoSnNrdlEwdE5MfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODg3Njg1NDgxOTE5OGRjOTMwNjBmZmE4OGEyIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6InJnIC1uICdwdWIgZm4gc2V0X3Byb3BlcnR5JyB+Ly5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvKi9xbWV0YW9iamVjdC0wLjIuMTAvc3JjL3F0ZGVjbGFyYXRpdmUucnM7IHJnICdpbXBsIEZyb208LipRVmFyaWFudCcgfi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjLyovcXR0eXBlcy0wLjIuMTIvc3JjIC1uIHwgaGVhZCAtMzAifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjE0MDUsIm91dHB1dCI6ODcsImNhY2hlUmVhZCI6NDU1NjgsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MCwidG90YWxUb2tlbnMiOjQ3MDYwLCJjb3N0Ijp7ImlucHV0IjowLjAwNzAyNTAwMDAwMDAwMDAwMSwib3V0cHV0IjowLjAwMjYxLCJjYWNoZVJlYWQiOjAuMDIyNzg0LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wMzI0MTl9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODk4Mjk0MDEsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODg1ZDVhYzgxOTFhZDgyMTAyZmNjNzc3NWVlIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjcyODczZTIxIiwicGFyZW50SWQiOiJmM2NlOGM1NSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzA6MzMuMjYyWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9wbm5ZV1VyMnE5ZXhzUWhKc2t2UTB0Tkx8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4ODc2ODU0ODE5MTk4ZGM5MzA2MGZmYTg4YTIiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIxNzA6ICAgIHB1YiBmbiBzZXRfcHJvcGVydHkoJm11dCBzZWxmLCBuYW1lOiBRU3RyaW5nLCB2YWx1ZTogUVZhcmlhbnQpIHtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXR0eXBlcy0wLjIuMTIvc3JjL3F0Y29yZS9xdmFyaWFudC5yczoxMTI6aW1wbCBGcm9tPFFTdHJpbmc+IGZvciBRVmFyaWFudCB7XG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0dHlwZXMtMC4yLjEyL3NyYy9xdGNvcmUvcXZhcmlhbnQucnM6MTIyOmltcGwgRnJvbTxRVmFyaWFudE1hcD4gZm9yIFFWYXJpYW50IHtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXR0eXBlcy0wLjIuMTIvc3JjL3F0Y29yZS9xdmFyaWFudC5yczoxMzI6aW1wbCBGcm9tPFFCeXRlQXJyYXk+IGZvciBRVmFyaWFudCB7XG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0dHlwZXMtMC4yLjEyL3NyYy9xdGNvcmUvcXZhcmlhbnQucnM6MTQyOmltcGwgRnJvbTxRRGF0ZT4gZm9yIFFWYXJpYW50IHtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXR0eXBlcy0wLjIuMTIvc3JjL3F0Y29yZS9xdmFyaWFudC5yczoxNTI6aW1wbCBGcm9tPFFUaW1lPiBmb3IgUVZhcmlhbnQge1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHR5cGVzLTAuMi4xMi9zcmMvcXRjb3JlL3F2YXJpYW50LnJzOjE2MjppbXBsIEZyb208UURhdGVUaW1lPiBmb3IgUVZhcmlhbnQge1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHR5cGVzLTAuMi4xMi9zcmMvcXRjb3JlL3F2YXJpYW50LnJzOjE3MjppbXBsIEZyb208UVVybD4gZm9yIFFWYXJpYW50IHtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXR0eXBlcy0wLjIuMTIvc3JjL3F0Y29yZS9xdmFyaWFudC5yczoxODI6aW1wbCBGcm9tPFFWYXJpYW50TGlzdD4gZm9yIFFWYXJpYW50IHtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXR0eXBlcy0wLjIuMTIvc3JjL3F0Y29yZS9xdmFyaWFudC5yczoxOTM6aW1wbCBGcm9tPFFTdHJpbmdMaXN0PiBmb3IgUVZhcmlhbnQge1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHR5cGVzLTAuMi4xMi9zcmMvcXRjb3JlL3F2YXJpYW50LnJzOjIwNDppbXBsIEZyb208aTMyPiBmb3IgUVZhcmlhbnQge1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHR5cGVzLTAuMi4xMi9zcmMvcXRjb3JlL3F2YXJpYW50LnJzOjIxNDppbXBsIEZyb208dTMyPiBmb3IgUVZhcmlhbnQge1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHR5cGVzLTAuMi4xMi9zcmMvcXRjb3JlL3F2YXJpYW50LnJzOjIyNDppbXBsIEZyb208aTY0PiBmb3IgUVZhcmlhbnQge1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHR5cGVzLTAuMi4xMi9zcmMvcXRjb3JlL3F2YXJpYW50LnJzOjIzNDppbXBsIEZyb208dTY0PiBmb3IgUVZhcmlhbnQge1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHR5cGVzLTAuMi4xMi9zcmMvcXRjb3JlL3F2YXJpYW50LnJzOjI0NDppbXBsIEZyb208ZjMyPiBmb3IgUVZhcmlhbnQge1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHR5cGVzLTAuMi4xMi9zcmMvcXRjb3JlL3F2YXJpYW50LnJzOjI1NDppbXBsIEZyb208ZjY0PiBmb3IgUVZhcmlhbnQge1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHR5cGVzLTAuMi4xMi9zcmMvcXRjb3JlL3F2YXJpYW50LnJzOjI2NDppbXBsIEZyb208Ym9vbD4gZm9yIFFWYXJpYW50IHtcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXR0eXBlcy0wLjIuMTIvc3JjL2xpYi5yczoxNTQ5OmltcGwgRnJvbTxRVmFyaWFudD4gZm9yIFFKc29uVmFsdWUge1xuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg5ODMzMjYyfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNTZiYjFhZTYiLCJwYXJlbnRJZCI6IjcyODczZTIxIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMDozMy4yNjNaIiwibWVzc2FnZSI6eyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6ImlmIG5lZWRlZCBpbnN0YWxsIHF0IGRlcGVuZGVuY2llcyB3aXRoIGFwdC1nZXQuIG1ha2Ugc28gdGhhdCBwcm9qZWN0IGlzIGNvbXBpbGFibGUgd2l0aCBjYXJnbyBidWlsZCJ9XSwidGltZXN0YW1wIjoxNzg0OTg5ODMwMDA3fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYmVlMmZjN2MiLCJwYXJlbnRJZCI6IjU2YmIxYWU2IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMDozNy42MjJaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkNoZWNraW5nIGRpc3RyaWJ1dGlvbiBwYWNrYWdlIG1hbmFnZXIqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODhhZWVmYzgxOTE4MzY3MjliYjM3ODJiMWViXCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNaU5oRGlaeEpTWDg2cmx2NHdqX0V4MGZlYlFSUVhTaFJQTFdEVlZRcF9Fblk5VnFOZi0wYnBiT3piRkZDbnFxREFycVA4QnU0ZVAtN0lHR0I5dXRQZmlEOERUMTVxcjZVNjhwMDVuVFpaSzl5M3RKZFcxYjJrVmxpa21WOW9oOEtKTnBNeHd2bnVKUFVjMEstMm1TMkJyR0xLb1pQWkhXYU1fMTY4RGZXZXdROFlLOHYyVjhZdGZhZUpCa3FBdnY4Ym8ybm9JMGViM2l0YjU3ZjE5ZVcwZmIyV3gwajdYRU5NUFFvQW1La1FMSzhETmpOQ1JxWktQTEtDSWxzay03bTBZWFBXWXhlWmhBQlh5VEF3VG0taVhzSkZtZDRIWS1uV09COVZGYWJlVFRVQkhBcE90NnVvNWI0U0lmbUdhUU0xdjRwUzhCR1VLbXd5UVItUVpHTTdOYTNZQ0wya2VRQkVxM2N0ZGw2ejk1Y0tVMy1EYUlHLUZsOFVTYkZfWXpxUWFWSDVqYi03UjVYcEN6N2N1c1lnam1hWTBGVTBERDZlbFNOaUZhdzhhQUtTNmpmZS1CX1ZvVWxMVEhKcklZdExfNmVSeTAzdk1JbzJJYVBZYWZBWDRFWENnLWRNVEc4dVFQV2pQZk5PVldoRV9obFNQU0k0cFlwRWk1NXczYWRxTzhVODhXR3Q5WThaV3pnXzNQQ0Y4QjZpZ3RUN3pOSXFjaW1RNU5EV2V6VmhsM01oVkFDYU9rOC1JWXB5VTNtM0JwbGV0U2dwSnJMd2gtLXhTRy1ISXdHdFQycENkRTMtOFRxaXVTODR1N25MZE1PSjdWejl6MkJUdVFZa3RHVHNuR0g0c1lwdVNralRBOTF6cF85Qzh3WExOakFoVTRXclZmNmNCajBza19jZVc3N3hCbjFNc2ZYWUg5WnJtSGt5RGU1ZnltVVRqSEhGUzJsdUhTZE1OeVVINlY1cGNIZjgtNGpIOFRwcnlkdEszQnZXWVNzR3lnaE13SjByRmlUTDBWT2pWZno0bDRoRVcxalFFS1VvSmhZV0JIaHlqa1REb282c3dEQnhhekd0Z19zWVY2MFF2Y0xBZEFmUDE2SjFzWDFaZDFvZzJqRWw0V0dGWDZveHB2OHpZS1R0d3oxeGR1VUs1aUxlTGVERDlweDJRWkZQZ05xc2ZDTEFzOGJBUzZXQW5Zd0hmdlZTSWVjVHRPNGhBa1IxSEtEV3MzRVJfdHEzNXBFOTlDSVV2dGotQjJLSk9JNUswMGgxNGg2VHh0MERxU2VSenhBRUctQlhIY1ZsMzR3PT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkNoZWNraW5nIGRpc3RyaWJ1dGlvbiBwYWNrYWdlIG1hbmFnZXIqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfaDA5bEtFMWE0eE5NOXI4WDd5U0MxVDZofGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODhkN2M5ODgxOTFhYzdkNmZhYTRiNzAwNzFjIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImNvbW1hbmQgLXYgYXB0LWdldDsgY2F0IC9ldGMvb3MtcmVsZWFzZSB8IGhlYWQ7IGlkOyBzdWRvIC1uIHRydWUgMj4mMTsgZWNobyBzdWRvOiQ/In19LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX1BlNmhEYkxnWWVzU1RuNWZDTUQ2U1pvcnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg4ZDdjYjA4MTkxODRiMGMyNjkzZDE3MjE5NCIsIm5hbWUiOiJyZWFkIiwiYXJndW1lbnRzIjp7InBhdGgiOiIvaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3FtZXRhb2JqZWN0LTAuMi4xMC9zcmMvcXRkZWNsYXJhdGl2ZS5ycyIsIm9mZnNldCI6MTQ1LCJsaW1pdCI6NDV9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MTQ1OCwib3V0cHV0IjoxNDIsImNhY2hlUmVhZCI6NDY1OTIsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MTMsInRvdGFsVG9rZW5zIjo0ODE5MiwiY29zdCI6eyJpbnB1dCI6MC4wMDcyOTAwMDAwMDAwMDAwMDA1LCJvdXRwdXQiOjAuMDA0MjYsImNhY2hlUmVhZCI6MC4wMjMyOTU5OTk5OTk5OTk5OTcsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjAzNDg0Nn19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTgzMzI2NCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4ODlhNjIwODE5MWIzMTNjODI1YjI5N2UxODUifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiY2E1NTYwM2UiLCJwYXJlbnRJZCI6ImJlZTJmYzdjIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMDozNy42NTNaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX2gwOWxLRTFhNHhOTTlyOFg3eVNDMVQ2aHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg4ZDdjOTg4MTkxYWM3ZDZmYWE0YjcwMDcxYyIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii91c3IvYmluL2FwdC1nZXRcbk5BTUU9XCJBTFRcIlxuVkVSU0lPTj1cIjIwMjYwMzE2XCJcbklEPWFsdGxpbnV4XG5WRVJTSU9OX0lEPTIwMjYwMzE2XG5QUkVUVFlfTkFNRT1cIkFMVCBSZWd1bGFyXCJcblZBUklBTlQ9XCJSZWd1bGFyXCJcbkFOU0lfQ09MT1I9XCIxOzMzXCJcbkNQRV9OQU1FPVwiY3BlOi9vOmFsdDpzaXN5cGh1czoyMDI2MDMxNlwiXG5CVUlMRF9JRD1cIlNpc3lwaHVzIDIwMjQwMTIyXCJcbkFMVF9CUkFOQ0hfSUQ9XCJzaXN5cGh1c1wiXG51aWQ9MTAwMChhZ3VzY2hpbikgZ2lkPTEwMDAoYWd1c2NoaW4pIGdyb3Vwcz0xMDAwKGFndXNjaGluKSwxMCh3aGVlbCksMTQodXVjcCksMTkocHJvYyksMjIoY2Ryb20pLDcxKGZsb3BweSksODAoY2R3cml0ZXIpLDgxKGF1ZGlvKSw4MyhyYWRpbyksMTAwKHVzZXJzKSw5NDgoaGFzaG1hbiksOTYzKGNhbWVyYSksOTc3KHZpZGVvKSw5NzkoZGlhbG91dCksOTk3KHhncnApLDk5OChzY2FubmVyKSwxMDAxKGFndXNjaGluX2EpLDEwMDIoYWd1c2NoaW5fYilcbnN1ZG86IGEgcGFzc3dvcmQgaXMgcmVxdWlyZWRcbnN1ZG86MVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg5ODM3NjUzfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZTNjYWE5YzUiLCJwYXJlbnRJZCI6ImNhNTU2MDNlIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMDozNy42NTNaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX1BlNmhEYkxnWWVzU1RuNWZDTUQ2U1pvcnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg4ZDdjYjA4MTkxODRiMGMyNjkzZDE3MjE5NCIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLy8gTG9hZHMgcW1sIGRhdGEgd2l0aCBgdXJsYCBhcyBiYXNlIHVybCBjb21wb25lbnQgKFNlZSBRUW1sQXBwbGljYXRpb25FbmdpbmU6OmxvYWREYXRhKVxuICAgIHB1YiBmbiBsb2FkX2RhdGFfYXMoJm11dCBzZWxmLCBkYXRhOiBRQnl0ZUFycmF5LCB1cmw6IFFVcmwpIHtcbiAgICAgICAgY3BwISh1bnNhZmUgW3NlbGYgYXMgXCJRbWxFbmdpbmVIb2xkZXIgKlwiLCBkYXRhIGFzIFwiUUJ5dGVBcnJheVwiLCB1cmwgYXMgXCJRVXJsXCJdIHtcbiAgICAgICAgICAgIHNlbGYtPmVuZ2luZS0+bG9hZERhdGEoZGF0YSwgdXJsKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLy8gTGF1bmNoZXMgdGhlIGFwcGxpY2F0aW9uXG4gICAgcHViIGZuIGV4ZWMoJnNlbGYpIHtcbiAgICAgICAgY3BwISh1bnNhZmUgW3NlbGYgYXMgXCJRbWxFbmdpbmVIb2xkZXIgKlwiXSB7XG4gICAgICAgICAgICBzZWxmLT5hcHAtPmV4ZWMoKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLy8gQ2xvc2VzIHRoZSBhcHBsaWNhdGlvblxuICAgIHB1YiBmbiBxdWl0KCZzZWxmKSB7XG4gICAgICAgIGNwcCEodW5zYWZlIFtzZWxmIGFzIFwiUW1sRW5naW5lSG9sZGVyICpcIl0ge1xuICAgICAgICAgICAgc2VsZi0+YXBwLT5xdWl0KCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8vIFNldHMgYSBwcm9wZXJ0eSBmb3IgdGhpcyBRTUwgY29udGV4dCAoY2FsbHMgUVFtbEVuZ2luZTo6cm9vdENvbnRleHQoKS0+c2V0Q29udGV4dFByb3BlcnR5KVxuICAgIHB1YiBmbiBzZXRfcHJvcGVydHkoJm11dCBzZWxmLCBuYW1lOiBRU3RyaW5nLCB2YWx1ZTogUVZhcmlhbnQpIHtcbiAgICAgICAgY3BwISh1bnNhZmUgW3NlbGYgYXMgXCJRbWxFbmdpbmVIb2xkZXIgKlwiLCBuYW1lIGFzIFwiUVN0cmluZ1wiLCB2YWx1ZSBhcyBcIlFWYXJpYW50XCJdIHtcbiAgICAgICAgICAgIHNlbGYtPmVuZ2luZS0+cm9vdENvbnRleHQoKS0+c2V0Q29udGV4dFByb3BlcnR5KG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLy8gU2V0cyBhbiBvYmplY3QgZm9yIHRoaXMgUU1MIGNvbnRleHQgKGNhbGxzIFFRbWxFbmdpbmU6OnJvb3RDb250ZXh0KCktPnNldENvbnRleHRPYmplY3QpXG4gICAgcHViIGZuIHNldF9vYmplY3Q8VDogUU9iamVjdCArIFNpemVkPigmbXV0IHNlbGYsIG9iajogUU9iamVjdFBpbm5lZDxUPikge1xuICAgICAgICBsZXQgb2JqX3B0ciA9IG9iai5nZXRfb3JfY3JlYXRlX2NwcF9vYmplY3QoKTtcbiAgICAgICAgY3BwISh1bnNhZmUgW3NlbGYgYXMgXCJRbWxFbmdpbmVIb2xkZXIgKlwiLCBvYmpfcHRyIGFzIFwiUU9iamVjdCAqXCJdIHtcbiAgICAgICAgICAgIHNlbGYtPmVuZ2luZS0+cm9vdENvbnRleHQoKS0+c2V0Q29udGV4dE9iamVjdChvYmpfcHRyKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLy8gU2V0cyBhIHByb3BlcnR5IGZvciB0aGlzIFFNTCBjb250ZXh0IChjYWxscyBRUW1sRW5naW5lOjpyb290Q29udGV4dCgpLT5zZXRDb250ZXh0UHJvcGVydHkpXG4gICAgLy8vXG4gICAgLy8gKFRPRE86IGNvbnNpZGVyIG1ha2luZyB0aGUgbGlmZXRpbWUgdGhlIG9uZSBvZiB0aGUgZW5naW5lLCBpbnN0ZWFkIG9mIHN0YXRpYylcbiAgICBwdWIgZm4gc2V0X29iamVjdF9wcm9wZXJ0eTxUOiBRT2JqZWN0ICsgU2l6ZWQ+KFxuICAgICAgICAmbXV0IHNlbGYsXG4gICAgICAgIG5hbWU6IFFTdHJpbmcsXG5cblsxMDgyIG1vcmUgbGluZXMgaW4gZmlsZS4gVXNlIG9mZnNldD0xOTAgdG8gY29udGludWUuXSJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4OTgzNzY1M319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImY4NjBjNmE3IiwicGFyZW50SWQiOiJlM2NhYTljNSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzE6MDQuNjUwWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipBc3Nlc3NpbmcgUXQgYW5kIEdUSyBkZXBlbmRlbmNpZXMqKlxuXG4qKkRlc2lnbmluZyBRTUwgQXBwbGljYXRpb25XaW5kb3cgYW5kIGNvbXBvbmVudHMqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjODhmN2MxMDgxOTE5MTgzOGMyNDA1NzllNDhhXCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNaWZtUElVdTgzd2U3MG5LT3NYVk4zcHNHX2pDLWhUTDlzMUJmNDZzY0dlRjZ0Q2hYQk5QSnp5dzhEaGtzZXk5UFZ6MnY0c0xUeHdjdjBHcmRsdDNhdDI1TUZsWXlzZTJyNFlCYzB1Y1dFLUFTZzNoQ0JVVmt5d0Uwa0gySnk2QkJBdXFKVVdVQ256NjI1V1FoZk5iWUpWVXFPUWNDdzJNSlRRMWh1LUJObzlNU2ZMM0F5REQwZ3prcHNpV2tmWGNHOEF0LVEyRzd6VzJiRjlER1dlQk9wTEh3SDRUMWhBbG1QQmJxQVJYMTNVRExyQWhIMlhvSWV5V01aR2xhbEdyMFk1TFJLRU05aWc3cWJhUFBNTE9NSEZTZnNfM2NmLTlQZGpZcVA3ck1rYjVnRjBnMm5VWUhXYmU5RVk3NlYwa2tiRXdtZkd2VDlOT0poaEJMX25MdzI1OVFQTEdhSjVteTFBOEVycWJKOTB0dUYxampnVGR0S0tnX2dOQXZaZTYxSWstM3VpV0hXYWpvbWctM2hCazh3RUFyOVVSWkVYY1lkb1RxcmZMWnVVNVJycXkwVllwUGQ2QXBMZ1ZzR1VaVlpPZGtQS2VPNEJVd2xpQkJiM1pzbkY5bTNOeGxReHYxbmpEcGpwclRNM0oxWHBoUlllZkdrZlNFT0ZNWW5rWW1QSWRsZVJMNWRndnE0TGtubEdBbms1dGlZdXpqZWNmQU0yNktVeGkyNkVzNk5qalJZUmtoNXdwY3RJcDNNcWN4WXhNcHVrRFRtR1VOX3V5eTVScC1vWXRUcmVuRGw3VkZSN0tRYm9XcTdqRGpuSXR1RHFTZFBpZ0dibVRRSmF5TlVEYVFSTzduM0tDYzY0eTc4RFowN2FXc1NOUmdCOFVLdkgyQnVCcWIzWloya2o1SF8tNU4zdXF5SGw3WTluQ2Y4RVhZWjd5YV9Vbk05UTd6RmFWSUVwUDA4T2hVUk1HTTZaLW53X2FlekVZY0dYODFQZ3RHdXFfU1dGUWVmYjRrNklpTHowWnluVU1DQXRxVFd4OVg2RHVob3V1akpWWDVqY1ZyR21KQU1XcWtVa2pGdkJ6SEFwdGlfMXVmTU5BMVMwNVNneUotX3YxVWFPZVZWNk5ZMmZNMS1pR2VoU2x4Q05SZ2M1VWpISkNTcHRyeTF1SHBYUW5VbWdOS1IyYTN4WjRyMWp6Zm1rTE1xMHdpTWV0QjZac0loVW1BX01zZnU3TFRZaU04Y3NxQW1XOGI0NlQ1MlNiV3FZUFVUMEI5V0tCbXJpVm1fLUZBM3p3SEtUV3FlQUdVTXZIN0tyVmVHWHJEazk5dFZ2NnZGc1lQUVpheUMtTS1ib05VYkw3ZnhOc3J1dlFTSkdyYTBCSDVsbnJJTDJwaHRjMnR6VFlKNFEwQ3g2WkVXQnIwMUg1SHFuUUo0SDVKRkRJdDdpd1hPTjVncklNNmRMdW04WXNPQWMxWmVwTnlqUm05WkxVZU03R1A2ejl2OVZSd09POWtTTUxEdGlEVUVYX195MXVCU25mdzktUV9fLWgwenFOWDhzS3lSWEFXRE51dl8zNlF3ejhweDJHNVIwZ3o3cWVzR3g2OXdqaHFsbXl6amxRTDNPNE90bVJYcGlBQW9mVnc0S0xLNjlmWlQ4M0ZvWFBqU21GRC04Y0hiVGFCLU1nYjNhdFlZUFJ6X1JNdVRJS19XZ2g2RmphTzJOME11TkxlNDR1aGZrQmgxWXJSTXNXZWFfMFpPdWlyT2ROYmppUFVWLVhTaUt4c1JpZzN2NFlXQUk0RnFoODAycGtQdWQxYmFUa29rYU94Qm4teG5VcldjZkEwRy1WbEtMTXpjZTVRUWE3MUhaemtZczRKTWlKaUtPY0dmRVhGN0N2OHhiUW0xWlFVSzItM2QyVGpUb0F6SGFvZXVQVWJ3OW11NzZKVEo3LUxNdGE4QXdwQlNQTjRXTGtUby00aXhJUHl0SGNaVTJEVFFuaWw1WElKT2Fsd192b2pERWVncnNlU1dVeEFMNkxmd2FQRG9NZlZpSnYwYmlNaWFnb2NNZTVlakJqRTAzaVZPc1ZDcTl5SkFkSlRsUnpNQ0dwLTRRZmZsLWh6d1FXSFVIX1JBUlJzb010blJ2Zy1pWkN5TTdWTlMxMjhucDRTSjZxSmxRczZTTkdhTVIzb0wwTjBOY0J4QmJyOG4xaHFaUDlCQ21jRkV0NGxDeDdiUEpSNmlBX0pWUjFLUWI0TUNyMjI5dHBzU1BPUVJ2N1Z4bWx4U2x0UzNDcVptTmxXTGhWbmF0RjE0bi1wdEEySEp5cmUwNGZtX0N6RndOMWw4NDFOV0NyaWdoem0zTjU0dWZ0TUxDaExWbzFzMEFuS0lubmJGT2lwLVdLOWxlSm5CV2oydFJzOWJkbDJ3SE9ZeDE3bUxDd1lQYVpTSmtOT3NkM3JCYWFIX0VtRGZldjYxU1ppekxVc3U4S2RuXzdRUFRMQk9pNG5Vbkhmb1ZUV0xLeW9JSjlBS05NWVVhTVpCdC0zdTdYT2I0R3A2SzNhNnJKVHhLMG1hTTBNQjZ1WWh3YWtCUHhCem1Fa1V0cUZwSFJZMnNiOEl4TF9kNzNqVncwdVhON2JrQlRpbHNSN1llM3ZVNVB2aUZzYmhfNFhiYUdKOVQxVng3MGhXbGZ5TVF3WHZlam1SZkt6ejB5QkRYQVRFMlNyS29hYkw1cERPZ2M3ajB4TUhTcGE4a1ZXMk05S0Y5elZ6TzgweWt2RWtTX245bHo0OXZCV0FHWG1DeUNoaUVRSTAxdkQ2c3pLYjlPSjBxOFVQcEh2Nkx4Y2VDZ3Zsa0J6QkVSLUhNQ3VudldXUWRzeEZTVm9HZndDZGtUSlBXQ2xmY1NsNE1wS2JEb0l6c2ZjM0cxZ3ZwZzRrWnM4MUN3UXk3X29fd21pZ1pENVdxQnVqT25UT2lBNzZMYmhaYzdhOGpSWkJqR3NEVzMycjdEc0E5NU9kSUZYTjZhMG5ldWxVOWZmNFgyZjB1NlNNTzQ4bkZmMDZKTTlGQWMxUENzSTBpNFJWNzBfUlRfSzFtQWhYVkludTlJaDFzdk00TlJRdldZY2h3cHBnMzBabllOeTVhWnozVUhQcVF3cXd2bmtTeUN4R2ZWUndNM1QtcUhXMkR0Vk5FaE0ySGNFV2RSLXAzcHRKTG9hUWkzVTd1cldlMDRKYjhpb0JfeTNHcHRuLXA2cWxNcjRfYlo5TWNaNFNPX2V6dU9xbk13TDBDc0ZKdG8yWDU3QzlEX1I1SDN6VWU0UFRwaGpHeGhGRUE3REgteHhneWplTGdPQk90RW54andoMm5YMEpCSmI5MzNmWVlhR3VjT2FvQzlrS3ZhR3hnV2RxQjBLek4wYlh1bzlaQ1h0ZEFFM21DOGtJR0Y5cGd6b1RoUmdZdWxUX2E1TUZLVVNxbFVUQjdhT1N1NDhwZ2o0b08zUjdCeTBMSXlzc0ZJRXgyVGxLZVFwMnotYURSU2NBX3RaSzlON2RSVnFsc3JDRkFmUVZkN1hOclc4eVV1elR0TVVRT2xMelZIYkNKVFdsTXB1anpoR2dKeV9GeFU1MzExZzFoQk1tNThCR1NvQlNUeE9hWjNjc3dLUjg1cU9QTnNMV1NwdjVYYm1yYXdET2poT1ZyaXNsYnRzT0VFRFZZazNfZ2tPdnZmTWtDQlNMd3ZUQjJwZXVuREN0UkZGN0ZSbDdGZnlNSE5EYU9pSV9HMGh5a1lNcVp5bDZVRkRkQmVfTlIzbEQ3QjF2X1RZM3hLcXllOVh3UTM3RlZyLTk3UjFMVFd2dGFtMWxHYkF1Y0JydTlOV1gyVmxmaUNONE9nZTl2T1k5bWJCNFNkRHJ0S0kzazFpNFE2cU1tSGw5OElMUE1UTXV6VldkOEladFgyejFiS0h0cGt1Nm1rMVdNQlpnOTJVX1hKWGNmUjNSQVczS1VuYjZoTDVFcFE1MXE0bGVuZE1uSmxMdFU3RktjaDN2SG1JVDRrNHlsSTBZTUM5TlhXMHo4Z3JHaVBZbmlIZTloQ212NnFjZEVqZmpXSzVjWm01OHlLR2tGcFd6S2pKLUxpNUN6eWRQRnZIc01teFBnOTVMQzRSaWJBQ25KaUE0Rk8wZzF4WWJwNWVwTnc3UUgyd0N6cTlBZnU1cFo1a0xvWFN0VjhKbnZTSXNXX05GdWYwSGhoWUVKZnJmaVpXRXR0WjhwdEF1UVdPRGJmLWJaMjV2U1g0NlFBVHIycFJMVkgtV1Z5N29JT3BwMU1MbF9OY1R3a0VtNFVnbHZ5WDM3cm5VTVNNSHdLVzhxcGU1Vk9PNXVzTFhTYlBDYmtMamhOeDRSZXg4ZVVhRmRoSVVuTFFrenhzY3RJU2FWWnZBaXVwRWZ4TUhqMFFyV2VsTXFTSjhsZzY2eXpmb0EwOGVVd0xYalA3M3d5Ty1RYmJZRTNGOElXODdnV3NRenMzTlhWX21WY0NnQ2VtdWFwY3BRLVRFS0I2eldhYVJyT1lueHhwaGNlc0tyeTAzN2xRcUhsYnVEQk43TlhUTk1Ka0xZczRkV3Npam04MlBpQV82Y0FYWTBqaE9ISHRmLTFhVDhrU0RfZlRwZXJXWTlsa01HYVJyUWdOZjZYZ3VhY1pIbWpkTmRVRU1CZWp6SlpLWkpxY3FhVkFHbUpmS0tzQ3NqUDFHbUJWVjdJSEhQakJPc2l0RHZxWkhCcUZVTDZrZHVPcDlIRDVfclhXRFNOcDgydWx5ZTkzNUM0ek9fSndVMWtoYnBNNW5tejZfbXhaX044aGI1ZjRjOXBkLXA4US1kUzJGcF9FNmJyb2ZYZUZIQXpyWVI3dFdmdXBIRHMtaXhOY0sxckxoVlNaUDE3VWhMUUxURDhGMG1sRTVTUDNtcmNRPT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkFzc2Vzc2luZyBRdCBhbmQgR1RLIGRlcGVuZGVuY2llcyoqXCJ9LHtcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipEZXNpZ25pbmcgUU1MIEFwcGxpY2F0aW9uV2luZG93IGFuZCBjb21wb25lbnRzKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX0lsWVNEYW5NN3BNNkZxNDRpMWRNeXhDRXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg5ZmY1YjQ4MTkxOTYyMzAyNjFmODYzYWE4ZiIsIm5hbWUiOiJ3cml0ZSIsImFyZ3VtZW50cyI6eyJwYXRoIjoiY3JhdGVzL2ZsYXNoZXItcXQvc3JjL21haW4ucnMiLCJjb250ZW50IjoidXNlIHFtZXRhb2JqZWN0Ojp7UW1sRW5naW5lLCBRU3RyaW5nLCBRVmFyaWFudH07XG51c2Ugc3RkOjpmcztcblxuY29uc3QgQk9BUkRTOiAmc3RyID0gaW5jbHVkZV9zdHIhKFwiLi4vLi4vLi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvU1VQUE9SVEVELUJPQVJEU1wiKTtcbmNvbnN0IFFNTDogJnN0ciA9IGluY2x1ZGVfc3RyIShcIi4uL3FtbC9NYWluLnFtbFwiKTtcblxuZm4gbWFpbigpIHtcbiAgICBsZXQgbXV0IGVuZ2luZSA9IFFtbEVuZ2luZTo6bmV3KCk7XG4gICAgZW5naW5lLnNldF9wcm9wZXJ0eShcbiAgICAgICAgUVN0cmluZzo6ZnJvbShcInN1cHBvcnRlZEJvYXJkc1RleHRcIiksXG4gICAgICAgIFFWYXJpYW50Ojpmcm9tKFFTdHJpbmc6OmZyb20oQk9BUkRTKSksXG4gICAgKTtcbiAgICBlbmdpbmUuc2V0X3Byb3BlcnR5KFxuICAgICAgICBRU3RyaW5nOjpmcm9tKFwiYXZhaWxhYmxlRHJpdmVzVGV4dFwiKSxcbiAgICAgICAgUVZhcmlhbnQ6OmZyb20oUVN0cmluZzo6ZnJvbShhdmFpbGFibGVfZHJpdmVzKCkuam9pbihcIlxcblwiKSkpLFxuICAgICk7XG4gICAgZW5naW5lLmxvYWRfZGF0YShRTUwuaW50bygpKTtcbiAgICBlbmdpbmUuZXhlYygpO1xufVxuXG5mbiBhdmFpbGFibGVfZHJpdmVzKCkgLT4gVmVjPFN0cmluZz4ge1xuICAgIGxldCBtdXQgZHJpdmVzID0gVmVjOjpuZXcoKTtcbiAgICBsZXQgT2soZW50cmllcykgPSBmczo6cmVhZF9kaXIoXCIvc3lzL2Jsb2NrXCIpIGVsc2Uge1xuICAgICAgICByZXR1cm4gZHJpdmVzO1xuICAgIH07XG5cbiAgICBmb3IgZW50cnkgaW4gZW50cmllcy5mbGF0dGVuKCkge1xuICAgICAgICBsZXQgbmFtZSA9IGVudHJ5LmZpbGVfbmFtZSgpLnRvX3N0cmluZ19sb3NzeSgpLmludG9fb3duZWQoKTtcbiAgICAgICAgaWYgbmFtZS5zdGFydHNfd2l0aChcImxvb3BcIikgfHwgbmFtZS5zdGFydHNfd2l0aChcInJhbVwiKSB8fCBuYW1lLnN0YXJ0c193aXRoKFwienJhbVwiKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVtb3ZhYmxlID0gZnM6OnJlYWRfdG9fc3RyaW5nKGVudHJ5LnBhdGgoKS5qb2luKFwicmVtb3ZhYmxlXCIpKVxuICAgICAgICAgICAgLm1hcCh8dmFsdWV8IHZhbHVlLnRyaW0oKSA9PSBcIjFcIilcbiAgICAgICAgICAgIC51bndyYXBfb3IoZmFsc2UpO1xuICAgICAgICBpZiAhcmVtb3ZhYmxlICYmICFuYW1lLnN0YXJ0c193aXRoKFwibW1jYmxrXCIpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlY3RvcnMgPSBmczo6cmVhZF90b19zdHJpbmcoZW50cnkucGF0aCgpLmpvaW4oXCJzaXplXCIpKVxuICAgICAgICAgICAgLm9rKClcbiAgICAgICAgICAgIC5hbmRfdGhlbih8dmFsdWV8IHZhbHVlLnRyaW0oKS5wYXJzZTo6PHU2ND4oKS5vaygpKVxuICAgICAgICAgICAgLnVud3JhcF9vcigwKTtcbiAgICAgICAgbGV0IG1vZGVsID0gZnM6OnJlYWRfdG9fc3RyaW5nKGVudHJ5LnBhdGgoKS5qb2luKFwiZGV2aWNlL21vZGVsXCIpKVxuICAgICAgICAgICAgLnVud3JhcF9vcl9kZWZhdWx0KClcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC50b19vd25lZCgpO1xuICAgICAgICBsZXQgZGVzY3JpcHRpb24gPSBpZiBtb2RlbC5pc19lbXB0eSgpIHtcbiAgICAgICAgICAgIGZvcm1hdCEoXCIvZGV2L3tuYW1lfVwiKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kZWxcbiAgICAgICAgfTtcbiAgICAgICAgZHJpdmVzLnB1c2goZm9ybWF0IShcbiAgICAgICAgICAgIFwie2Rlc2NyaXB0aW9ufSAgwrcgIHt9ICDCtyAgL2Rldi97bmFtZX1cIixcbiAgICAgICAgICAgIGZvcm1hdF9zaXplKHNlY3RvcnMuc2F0dXJhdGluZ19tdWwoNTEyKSlcbiAgICAgICAgKSk7XG4gICAgfVxuICAgIGRyaXZlcy5zb3J0KCk7XG4gICAgZHJpdmVzXG59XG5cbmZuIGZvcm1hdF9zaXplKGJ5dGVzOiB1NjQpIC0+IFN0cmluZyB7XG4gICAgY29uc3QgR0lCOiBmNjQgPSAxMDI0LjAgKiAxMDI0LjAgKiAxMDI0LjA7XG4gICAgY29uc3QgTUlCOiBmNjQgPSAxMDI0LjAgKiAxMDI0LjA7XG4gICAgaWYgYnl0ZXMgYXMgZjY0ID49IEdJQiB7XG4gICAgICAgIGZvcm1hdCEoXCJ7Oi4xfSBHQlwiLCBieXRlcyBhcyBmNjQgLyBHSUIpXG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybWF0IShcIns6LjB9IE1CXCIsIGJ5dGVzIGFzIGY2NCAvIE1JQilcbiAgICB9XG59XG4ifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjEyMjksIm91dHB1dCI6MTEzMiwiY2FjaGVSZWFkIjo0NzYxNiwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjo0MzcsInRvdGFsVG9rZW5zIjo0OTk3NywiY29zdCI6eyJpbnB1dCI6MC4wMDYxNDUsIm91dHB1dCI6MC4wMzM5NjAwMDAwMDAwMDAwMDQsImNhY2hlUmVhZCI6MC4wMjM4MDgsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA2MzkxM319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTgzNzY1NCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4OGUxYTY4ODE5MTlkMjc2NWI4NzQ4YTZiNGIifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZjkwMWZlYzMiLCJwYXJlbnRJZCI6ImY4NjBjNmE3IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMTowNC42NTNaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX0lsWVNEYW5NN3BNNkZxNDRpMWRNeXhDRXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzg5ZmY1YjQ4MTkxOTYyMzAyNjFmODYzYWE4ZiIsInRvb2xOYW1lIjoid3JpdGUiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJTdWNjZXNzZnVsbHkgd3JvdGUgMjEyMyBieXRlcyB0byBjcmF0ZXMvZmxhc2hlci1xdC9zcmMvbWFpbi5ycyJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4OTg2NDY1M319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjM1OTEyNGI3IiwicGFyZW50SWQiOiJmOTAxZmVjMyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzI6MDcuNDk3WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4YWEzZTIwODE5MWIyYzk0NmM2ZDdjNGM2YmZcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1pdHZXeUx4NmU5YV85Q3Q0UmREVXY5UlRHTS0xdVk2Tlg1UHpvbWJjeTdDd0xySTd3elUwMDFKbXRLcHM2ekc2NExMY0ktWkNNczhJUkFKa050eXZLX3dVTFBhbjFkRUQyWm54UzRfYTJQNXJOMFlIR1pTZm52TkNHXy0xdEthXzFsNFNvY2ljVEZZbGdsUzRMbmJwX2U1TDRTRElRenZkSklnaEFJZ3IwWXU4cWhxaGxvMWFoSFFLRnJMS0tac2J6cktUbGpoMmMtRG5raFN2T0JlWnhQNE9vRWF2VkhjS0hhTEZvbjJrcTB4YXQtUlVnQTRVS1A2ZlBmWXZma3AycVZzakhHd3ROUS1ValNzNGJaWGJuZy1RakhOQ3NaNHVDZGlNeVpQb1JuVGhxelNYYzgwTjdBejdKSERPMTNaWHRwN2E1Q0NTMHJ3MUJQVVRuM0RoUGhUenR5VlBVRjBBVUxEY2x0YlkweFNWY0tNbWowZVN4d3FaMFd2OHJJMDZoTGFIUlV5b1MxaG4tZFB5M0NjVFQxNExSOC11d2dpZnhoMDZua3hTQjZuZXZIdzlFN1VIVV90V3NXT0RHZVk2Qll2UVdXZVUtZjRfRU9EZ1owTHllQzRGTjJxbjBaMDRHaFBudkdUMXc0Z3ZDNks4cmxhOHltem5pa2Rtak9oVXZmWW5ZNm9LYXJZRjZKQ252b2tIMDUwVkpVLUxpVGhVNlJoaExPSTZzRDU5UUFQSGd0X1dVVF9hOC05b2szWk1RX3pvVGFOMmRVZ25CQVVQMUNUeDA2amNzelBmbktmRm9lNFEwOEFWaUUwNXVZQXNWbmVqQmtFV3M3R25hWmg3d2dzcTRlcmltRFhfaTlmS0pWSmc1NmlJYjdzb1RtaDM1cE9QRXplcnh3RFA3TTVubnJkWkRYaXlISkVFYTZTRlcyQmhvemxWLXVIUi12MW1zMDBYZk9xb0g1X19PcVBMRTY1NjVWVkk3SWR3NjVmVU0tWkxxYzhvUDVKYWZUU0pzeElKWlR0U0hGRHhhMVRiTGhsRm54c2xNbU1SQVc0M0M3Mkpjc1BzZ0tobkhfV2E1b2JXbVJ5clBpOVhEUVJOX0NSbTFDbkdWczdaanNRTVlBTUdtMGlZREJOSFVrX3FOMVNadEpvbktmemtFWmVFMGxXV05FVExRR1lUNEVyWG1Ba0NsSVY3bDJJVXdwQjhaVWtVUHdWeG42andVSXI2TXJmbFBFbzVBYkhycz1cIixcInN1bW1hcnlcIjpbXX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9rZnNkanJrd0w1SHk0RXBQd2piM3ViTzV8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4YWQyMzg4ODE5MTg3ODI0OWRjMjk1MzYzNzUiLCJuYW1lIjoid3JpdGUiLCJhcmd1bWVudHMiOnsicGF0aCI6ImNyYXRlcy9mbGFzaGVyLXF0L3FtbC9NYWluLnFtbCIsImNvbnRlbnQiOiJpbXBvcnQgUXRRdWljayAyLjEyXG5pbXBvcnQgUXRRdWljay5Db250cm9scyAyLjEyXG5pbXBvcnQgUXRRdWljay5MYXlvdXRzIDEuMTJcbmltcG9ydCBRdC5sYWJzLnBsYXRmb3JtIDEuMSBhcyBQbGF0Zm9ybVxuXG5BcHBsaWNhdGlvbldpbmRvdyB7XG4gICAgaWQ6IHdpbmRvd1xuICAgIHZpc2libGU6IHRydWVcbiAgICB3aWR0aDogNzYwXG4gICAgaGVpZ2h0OiA4MjBcbiAgICBtaW5pbXVtV2lkdGg6IDYyMFxuICAgIG1pbmltdW1IZWlnaHQ6IDYyMFxuICAgIHRpdGxlOiBxc1RyKFwiQUxUIEltYWdlIFdyaXRlciDigJQgUXRcIilcblxuICAgIHByb3BlcnR5IGJvb2wgc291cmNlSXNJbWFnZTogZmFsc2VcbiAgICBwcm9wZXJ0eSBib29sIG91dHB1dElzRmlsZTogZmFsc2VcbiAgICBwcm9wZXJ0eSBzdHJpbmcgc291cmNlUGF0aDogXCJcIlxuICAgIHByb3BlcnR5IHN0cmluZyBvdXRwdXRQYXRoOiBcIlwiXG4gICAgcHJvcGVydHkgc3RyaW5nIHNlbGVjdGVkQm9hcmQ6IFwiXCJcbiAgICBwcm9wZXJ0eSBzdHJpbmcgc2VsZWN0ZWRQbGF0Zm9ybTogXCJcIlxuICAgIHByb3BlcnR5IHZhciBkcml2ZU5hbWVzOiBhdmFpbGFibGVEcml2ZXNUZXh0Lmxlbmd0aCA/IGF2YWlsYWJsZURyaXZlc1RleHQuc3BsaXQoXCJcXG5cIikgOiBbXVxuXG4gICAgZnVuY3Rpb24gbG9jYWxQYXRoKHVybCkge1xuICAgICAgICB2YXIgdmFsdWUgPSB1cmwudG9TdHJpbmcoKVxuICAgICAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihcImZpbGU6Ly9cIikgPT09IDAgPyBkZWNvZGVVUklDb21wb25lbnQodmFsdWUuc3Vic3RyaW5nKDcpKSA6IHZhbHVlXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmlsZU5hbWUocGF0aCkge1xuICAgICAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKVxuICAgICAgICByZXR1cm4gcGFydHNbcGFydHMubGVuZ3RoIC0gMV1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkeSgpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZVBhdGgubGVuZ3RoID4gMCAmJiBzZWxlY3RlZEJvYXJkLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAmJiAob3V0cHV0SXNGaWxlID8gb3V0cHV0UGF0aC5sZW5ndGggPiAwIDogZHJpdmVCb3guY3VycmVudEluZGV4ID49IDApXG4gICAgfVxuXG4gICAgaGVhZGVyOiBUb29sQmFyIHtcbiAgICAgICAgUm93TGF5b3V0IHtcbiAgICAgICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50XG4gICAgICAgICAgICBhbmNob3JzLmxlZnRNYXJnaW46IDE2XG4gICAgICAgICAgICBhbmNob3JzLnJpZ2h0TWFyZ2luOiA4XG4gICAgICAgICAgICBMYWJlbCB7XG4gICAgICAgICAgICAgICAgdGV4dDogcXNUcihcIkFMVCBJbWFnZSBXcml0ZXJcIilcbiAgICAgICAgICAgICAgICBmb250LnBpeGVsU2l6ZTogMThcbiAgICAgICAgICAgICAgICBmb250LmJvbGQ6IHRydWVcbiAgICAgICAgICAgICAgICBMYXlvdXQuZmlsbFdpZHRoOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBUb29sQnV0dG9uIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBcIuKTmFwiXG4gICAgICAgICAgICAgICAgZm9udC5waXhlbFNpemU6IDE4XG4gICAgICAgICAgICAgICAgQWNjZXNzaWJsZS5uYW1lOiBxc1RyKFwiQWJvdXRcIilcbiAgICAgICAgICAgICAgICBvbkNsaWNrZWQ6IGFib3V0RGlhbG9nLm9wZW4oKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgU2Nyb2xsVmlldyB7XG4gICAgICAgIGlkOiBzY3JvbGxcbiAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnRcbiAgICAgICAgY29udGVudFdpZHRoOiBhdmFpbGFibGVXaWR0aFxuICAgICAgICBjbGlwOiB0cnVlXG5cbiAgICAgICAgQ29sdW1uTGF5b3V0IHtcbiAgICAgICAgICAgIHdpZHRoOiBNYXRoLm1pbihzY3JvbGwuYXZhaWxhYmxlV2lkdGggLSA0MCwgNzAwKVxuICAgICAgICAgICAgeDogTWF0aC5tYXgoMjAsIChzY3JvbGwuYXZhaWxhYmxlV2lkdGggLSB3aWR0aCkgLyAyKVxuICAgICAgICAgICAgc3BhY2luZzogMTZcblxuICAgICAgICAgICAgSXRlbSB7IExheW91dC5wcmVmZXJyZWRIZWlnaHQ6IDggfVxuICAgICAgICAgICAgTGFiZWwge1xuICAgICAgICAgICAgICAgIHRleHQ6IHFzVHIoXCJDcmVhdGUgSW5zdGFsbGF0aW9uIE1lZGlhXCIpXG4gICAgICAgICAgICAgICAgZm9udC5waXhlbFNpemU6IDI2XG4gICAgICAgICAgICAgICAgZm9udC5ib2xkOiB0cnVlXG4gICAgICAgICAgICAgICAgTGF5b3V0LmFsaWdubWVudDogUXQuQWxpZ25IQ2VudGVyXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBMYWJlbCB7XG4gICAgICAgICAgICAgICAgdGV4dDogcXNUcihcIlByZXBhcmUgYW4gQUxUIExpbnV4IHJvb3QgZmlsZXN5c3RlbSBvciBkaXNrIGltYWdlIGZvciB5b3VyIGJvYXJkLlwiKVxuICAgICAgICAgICAgICAgIGNvbG9yOiBwYWxldHRlLm1pZFxuICAgICAgICAgICAgICAgIHdyYXBNb2RlOiBUZXh0LldvcmRXcmFwXG4gICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogVGV4dC5BbGlnbkhDZW50ZXJcbiAgICAgICAgICAgICAgICBMYXlvdXQuZmlsbFdpZHRoOiB0cnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEZyYW1lIHtcbiAgICAgICAgICAgICAgICBMYXlvdXQuZmlsbFdpZHRoOiB0cnVlXG4gICAgICAgICAgICAgICAgQ29sdW1uTGF5b3V0IHtcbiAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnRcbiAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogMTJcbiAgICAgICAgICAgICAgICAgICAgTGFiZWwgeyB0ZXh0OiBxc1RyKFwiSW5zdGFsbGF0aW9uIFNvdXJjZVwiKTsgZm9udC5ib2xkOiB0cnVlOyBmb250LnBpeGVsU2l6ZTogMTcgfVxuICAgICAgICAgICAgICAgICAgICBMYWJlbCB7IHRleHQ6IHFzVHIoXCJDaG9vc2UgYSByb290IGZpbGVzeXN0ZW0gYXJjaGl2ZSBvciBhIHJlYWR5LW1hZGUgZGlzayBpbWFnZS5cIik7IGNvbG9yOiBwYWxldHRlLm1pZCB9XG4gICAgICAgICAgICAgICAgICAgIEJ1dHRvbkdyb3VwIHsgaWQ6IHNvdXJjZUdyb3VwIH1cbiAgICAgICAgICAgICAgICAgICAgUm93TGF5b3V0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsIHsgdGV4dDogcXNUcihcIlNvdXJjZSB0eXBlXCIpOyBMYXlvdXQuZmlsbFdpZHRoOiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFJhZGlvQnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxc1RyKFwiUm9vdCBmaWxlc3lzdGVtXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1dHRvbkdyb3VwLmdyb3VwOiBzb3VyY2VHcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZWQ6IGlmIChjaGVja2VkKSBzb3VyY2VJc0ltYWdlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFJhZGlvQnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxc1RyKFwiRGlzayBpbWFnZVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1dHRvbkdyb3VwLmdyb3VwOiBzb3VyY2VHcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZWQ6IGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlzSW1hZ2UgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dElzRmlsZSA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlT3V0cHV0LmNoZWNrZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFJvd0xheW91dCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzcGFjaW5nOiAxMlxuICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHNvdXJjZVBhdGgubGVuZ3RoID8gZmlsZU5hbWUoc291cmNlUGF0aCkgOiBxc1RyKFwiTm8gc291cmNlIHNlbGVjdGVkXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5ib2xkOiBzb3VyY2VQYXRoLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlkZTogVGV4dC5FbGlkZU1pZGRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dC5maWxsV2lkdGg6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1dHRvbiB7IHRleHQ6IHFzVHIoXCJDaG9vc2XigKZcIik7IG9uQ2xpY2tlZDogc291cmNlRGlhbG9nLm9wZW4oKSB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgTGFiZWwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogc291cmNlUGF0aC5sZW5ndGggPyBzb3VyY2VQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvdXJjZUlzSW1hZ2UgPyBxc1RyKFwiU3VwcG9ydGVkOiAuaW1nLCAuaW1nLnh6XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBxc1RyKFwiU3VwcG9ydGVkOiAudGFyLCAudGFyLmd6LCAudGFyLnh6XCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcGFsZXR0ZS5taWRcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsaWRlOiBUZXh0LkVsaWRlTWlkZGxlXG4gICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXQuZmlsbFdpZHRoOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEZyYW1lIHtcbiAgICAgICAgICAgICAgICBMYXlvdXQuZmlsbFdpZHRoOiB0cnVlXG4gICAgICAgICAgICAgICAgQ29sdW1uTGF5b3V0IHtcbiAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnRcbiAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogMTBcbiAgICAgICAgICAgICAgICAgICAgTGFiZWwgeyB0ZXh0OiBxc1RyKFwiVGFyZ2V0IEhhcmR3YXJlXCIpOyBmb250LmJvbGQ6IHRydWU7IGZvbnQucGl4ZWxTaXplOiAxNyB9XG4gICAgICAgICAgICAgICAgICAgIExhYmVsIHsgdGV4dDogcXNUcihcIkJvYXJkcyBhcmUgZ3JvdXBlZCBieSBwbGF0Zm9ybSwgU29DIGZhbWlseSwgYW5kIGFyY2hpdGVjdHVyZS5cIik7IGNvbG9yOiBwYWxldHRlLm1pZCB9XG4gICAgICAgICAgICAgICAgICAgIFJvd0xheW91dCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDb2x1bW5MYXlvdXQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dC5maWxsV2lkdGg6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHNlbGVjdGVkQm9hcmQubGVuZ3RoID8gc2VsZWN0ZWRCb2FyZCA6IHFzVHIoXCJObyBib2FyZCBzZWxlY3RlZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LmJvbGQ6IHNlbGVjdGVkQm9hcmQubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHNlbGVjdGVkQm9hcmQubGVuZ3RoID8gc2VsZWN0ZWRQbGF0Zm9ybSA6IHFzVHIoXCJDaG9vc2UgZnJvbSB0aGUgc3VwcG9ydGVkIGJvYXJkIGxpc3RcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHBhbGV0dGUubWlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQnV0dG9uIHsgdGV4dDogcXNUcihcIlNlbGVjdCBCb2FyZOKAplwiKTsgb25DbGlja2VkOiBib2FyZERpYWxvZy5vcGVuKCkgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBGcmFtZSB7XG4gICAgICAgICAgICAgICAgTGF5b3V0LmZpbGxXaWR0aDogdHJ1ZVxuICAgICAgICAgICAgICAgIENvbHVtbkxheW91dCB7XG4gICAgICAgICAgICAgICAgICAgIGFuY2hvcnMuZmlsbDogcGFyZW50XG4gICAgICAgICAgICAgICAgICAgIHNwYWNpbmc6IDEyXG4gICAgICAgICAgICAgICAgICAgIExhYmVsIHsgdGV4dDogcXNUcihcIkRlc3RpbmF0aW9uXCIpOyBmb250LmJvbGQ6IHRydWU7IGZvbnQucGl4ZWxTaXplOiAxNyB9XG4gICAgICAgICAgICAgICAgICAgIExhYmVsIHsgdGV4dDogcXNUcihcIldyaXRlIHRvIHJlbW92YWJsZSBtZWRpYSBvciBjcmVhdGUgYW4gaW1hZ2UgZmlsZS5cIik7IGNvbG9yOiBwYWxldHRlLm1pZCB9XG4gICAgICAgICAgICAgICAgICAgIEJ1dHRvbkdyb3VwIHsgaWQ6IG91dHB1dEdyb3VwIH1cbiAgICAgICAgICAgICAgICAgICAgUm93TGF5b3V0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsIHsgdGV4dDogcXNUcihcIk91dHB1dCB0eXBlXCIpOyBMYXlvdXQuZmlsbFdpZHRoOiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFJhZGlvQnV0dG9uIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogZHJpdmVPdXRwdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBxc1RyKFwiRHJpdmVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnV0dG9uR3JvdXAuZ3JvdXA6IG91dHB1dEdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGVja2VkQ2hhbmdlZDogaWYgKGNoZWNrZWQpIG91dHB1dElzRmlsZSA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBSYWRpb0J1dHRvbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogcXNUcihcIkltYWdlIGZpbGVcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkOiAhc291cmNlSXNJbWFnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1dHRvbkdyb3VwLmdyb3VwOiBvdXRwdXRHcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZWQ6IGlmIChjaGVja2VkKSBvdXRwdXRJc0ZpbGUgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgUm93TGF5b3V0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6ICFvdXRwdXRJc0ZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIExhYmVsIHsgdGV4dDogcXNUcihcIlN0b3JhZ2UgZGV2aWNlXCIpOyBMYXlvdXQucHJlZmVycmVkV2lkdGg6IDE1MCB9XG4gICAgICAgICAgICAgICAgICAgICAgICBDb21ib0JveCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRyaXZlQm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0LmZpbGxXaWR0aDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOiBkcml2ZU5hbWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheVRleHQ6IGN1cnJlbnRJbmRleCA8IDAgPyBxc1RyKFwiTm8gcmVtb3ZhYmxlIGRyaXZlcyBkZXRlY3RlZFwiKSA6IGN1cnJlbnRUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgUm93TGF5b3V0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IG91dHB1dElzRmlsZVxuICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IG91dHB1dFBhdGgubGVuZ3RoID8gb3V0cHV0UGF0aCA6IHFzVHIoXCJDaG9vc2Ugd2hlcmUgdG8gc2F2ZSB0aGUgaW1hZ2VcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlkZTogVGV4dC5FbGlkZU1pZGRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExheW91dC5maWxsV2lkdGg6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEJ1dHRvbiB7IHRleHQ6IHFzVHIoXCJDaG9vc2XigKZcIik7IG9uQ2xpY2tlZDogb3V0cHV0RGlhbG9nLm9wZW4oKSB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEZyYW1lIHtcbiAgICAgICAgICAgICAgICBMYXlvdXQuZmlsbFdpZHRoOiB0cnVlXG4gICAgICAgICAgICAgICAgQ29sdW1uTGF5b3V0IHtcbiAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnRcbiAgICAgICAgICAgICAgICAgICAgc3BhY2luZzogOFxuICAgICAgICAgICAgICAgICAgICBMYWJlbCB7IHRleHQ6IHFzVHIoXCJPcHRpb25zXCIpOyBmb250LmJvbGQ6IHRydWU7IGZvbnQucGl4ZWxTaXplOiAxNyB9XG4gICAgICAgICAgICAgICAgICAgIFJvd0xheW91dCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCB7IHRleHQ6IHFzVHIoXCJSb290IGZpbGVzeXN0ZW1cIik7IExheW91dC5maWxsV2lkdGg6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQ29tYm9Cb3ggeyBtb2RlbDogW1wiZXh0NFwiLCBcImYyZnNcIl0gfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIENoZWNrQm94IHsgdGV4dDogcXNUcihcIlJlc2l6ZSByb290IHBhcnRpdGlvbiB0byBmaWxsIHRoZSBkZXN0aW5hdGlvblwiKTsgY2hlY2tlZDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgICAgIENoZWNrQm94IHsgdGV4dDogcXNUcihcIkNyZWF0ZSBhIHNlcGFyYXRlIDUxMiBNaUIgYm9vdCBwYXJ0aXRpb25cIikgfVxuICAgICAgICAgICAgICAgICAgICBDaGVja0JveCB7IHRleHQ6IHFzVHIoXCJFbmNyeXB0IHRoZSByb290IHBhcnRpdGlvbiB3aXRoIExVS1NcIikgfVxuICAgICAgICAgICAgICAgICAgICBDaGVja0JveCB7IHRleHQ6IHFzVHIoXCJBZGQgdGhlIHN5c3RlbSBzZXJpYWwgY29uc29sZVwiKSB9XG4gICAgICAgICAgICAgICAgICAgIFJvd0xheW91dCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMYWJlbCB7IHRleHQ6IHFzVHIoXCJFRkkgc3lzdGVtIHBhcnRpdGlvblwiKTsgTGF5b3V0LmZpbGxXaWR0aDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICBDb21ib0JveCB7IG1vZGVsOiBbcXNUcihcIk5vbmVcIiksIHFzVHIoXCJFRkkgKEdQVClcIiksIHFzVHIoXCJFRkkgKE1CUilcIildIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBSb3dMYXlvdXQge1xuICAgICAgICAgICAgICAgICAgICAgICAgTGFiZWwgeyB0ZXh0OiBxc1RyKFwiRmlyc3QtYm9vdCBWTkNcIik7IExheW91dC5maWxsV2lkdGg6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQ29tYm9Cb3ggeyBtb2RlbDogW3FzVHIoXCJVc2UgaW1hZ2UgZGVmYXVsdFwiKSwgcXNUcihcIkVuYWJsZWRcIiksIHFzVHIoXCJEaXNhYmxlZFwiKV0gfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgSXRlbSB7IExheW91dC5wcmVmZXJyZWRIZWlnaHQ6IDgwIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvb3RlcjogVG9vbEJhciB7XG4gICAgICAgIFJvd0xheW91dCB7XG4gICAgICAgICAgICBhbmNob3JzLmZpbGw6IHBhcmVudFxuICAgICAgICAgICAgYW5jaG9ycy5tYXJnaW5zOiAxMFxuICAgICAgICAgICAgTGFiZWwgeyB0ZXh0OiBxc1RyKFwiTm90aGluZyB3aWxsIGJlIHdyaXR0ZW4gdW50aWwgeW91IGNvbmZpcm0uXCIpOyBjb2xvcjogcGFsZXR0ZS5taWQ7IExheW91dC5maWxsV2lkdGg6IHRydWUgfVxuICAgICAgICAgICAgQnV0dG9uIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBxc1RyKFwiUmV2aWV3IGFuZCBXcml0ZVwiKVxuICAgICAgICAgICAgICAgIGhpZ2hsaWdodGVkOiB0cnVlXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogcmVhZHkoKVxuICAgICAgICAgICAgICAgIG9uQ2xpY2tlZDogcmV2aWV3RGlhbG9nLm9wZW4oKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgRGlhbG9nIHtcbiAgICAgICAgaWQ6IGJvYXJkRGlhbG9nXG4gICAgICAgIHBhcmVudDogT3ZlcmxheS5vdmVybGF5XG4gICAgICAgIGFuY2hvcnMuY2VudGVySW46IHBhcmVudFxuICAgICAgICB3aWR0aDogTWF0aC5taW4od2luZG93LndpZHRoIC0gNDgsIDYyMClcbiAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbih3aW5kb3cuaGVpZ2h0IC0gODAsIDY1MClcbiAgICAgICAgbW9kYWw6IHRydWVcbiAgICAgICAgdGl0bGU6IHFzVHIoXCJTZWxlY3QgVGFyZ2V0IEJvYXJkXCIpXG4gICAgICAgIHN0YW5kYXJkQnV0dG9uczogRGlhbG9nLkNhbmNlbFxuXG4gICAgICAgIExpc3RNb2RlbCB7IGlkOiBhbGxCb2FyZHMgfVxuICAgICAgICBMaXN0TW9kZWwgeyBpZDogZmlsdGVyZWRCb2FyZHMgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBvcHVsYXRlKCkge1xuICAgICAgICAgICAgaWYgKGFsbEJvYXJkcy5jb3VudCA+IDApIHJldHVyblxuICAgICAgICAgICAgdmFyIHBsYXRmb3JtID0gXCJPdGhlclwiXG4gICAgICAgICAgICB2YXIgbGluZXMgPSBzdXBwb3J0ZWRCb2FyZHNUZXh0LnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXS50cmltKClcbiAgICAgICAgICAgICAgICBpZiAoIWxpbmUubGVuZ3RoKSBjb250aW51ZVxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdChsaW5lLmxlbmd0aCAtIDEpID09PSBcIjpcIikge1xuICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSA9IGxpbmUuc3Vic3RyaW5nKDAsIGxpbmUubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBsaW5lLnNwbGl0KC9cXFxccysvKVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG5hbWVzLmxlbmd0aDsgKytqKVxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQm9hcmRzLmFwcGVuZCh7IGJvYXJkTmFtZTogbmFtZXNbal0sIHBsYXRmb3JtTmFtZTogcGxhdGZvcm0gfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXIoXCJcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbHRlcihxdWVyeSkge1xuICAgICAgICAgICAgZmlsdGVyZWRCb2FyZHMuY2xlYXIoKVxuICAgICAgICAgICAgdmFyIG5lZWRsZSA9IHF1ZXJ5LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsQm9hcmRzLmNvdW50OyArK2kpIHtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGFsbEJvYXJkcy5nZXQoaSlcbiAgICAgICAgICAgICAgICBpZiAoIW5lZWRsZS5sZW5ndGggfHwgaXRlbS5ib2FyZE5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKG5lZWRsZSkgPj0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgaXRlbS5wbGF0Zm9ybU5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKG5lZWRsZSkgPj0gMClcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRCb2FyZHMuYXBwZW5kKHsgYm9hcmROYW1lOiBpdGVtLmJvYXJkTmFtZSwgcGxhdGZvcm1OYW1lOiBpdGVtLnBsYXRmb3JtTmFtZSB9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb25PcGVuZWQ6IHsgcG9wdWxhdGUoKTsgc2VhcmNoRmllbGQuZm9yY2VBY3RpdmVGb2N1cygpIH1cblxuICAgICAgICBDb2x1bW5MYXlvdXQge1xuICAgICAgICAgICAgYW5jaG9ycy5maWxsOiBwYXJlbnRcbiAgICAgICAgICAgIFRleHRGaWVsZCB7XG4gICAgICAgICAgICAgICAgaWQ6IHNlYXJjaEZpZWxkXG4gICAgICAgICAgICAgICAgTGF5b3V0LmZpbGxXaWR0aDogdHJ1ZVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyVGV4dDogcXNUcihcIlNlYXJjaCBib2FyZHMgb3IgcGxhdGZvcm1z4oCmXCIpXG4gICAgICAgICAgICAgICAgc2VsZWN0QnlNb3VzZTogdHJ1ZVxuICAgICAgICAgICAgICAgIG9uVGV4dENoYW5nZWQ6IGJvYXJkRGlhbG9nLmZpbHRlcih0ZXh0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgTGFiZWwge1xuICAgICAgICAgICAgICAgIHRleHQ6IHFzVHIoXCIlMSBtYXRjaGluZyBib2FyZHNcIikuYXJnKGZpbHRlcmVkQm9hcmRzLmNvdW50KVxuICAgICAgICAgICAgICAgIGNvbG9yOiBwYWxldHRlLm1pZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgTGlzdFZpZXcge1xuICAgICAgICAgICAgICAgIGlkOiBib2FyZExpc3RcbiAgICAgICAgICAgICAgICBMYXlvdXQuZmlsbFdpZHRoOiB0cnVlXG4gICAgICAgICAgICAgICAgTGF5b3V0LmZpbGxIZWlnaHQ6IHRydWVcbiAgICAgICAgICAgICAgICBjbGlwOiB0cnVlXG4gICAgICAgICAgICAgICAgbW9kZWw6IGZpbHRlcmVkQm9hcmRzXG4gICAgICAgICAgICAgICAgc3BhY2luZzogMlxuICAgICAgICAgICAgICAgIHNlY3Rpb24ucHJvcGVydHk6IFwicGxhdGZvcm1OYW1lXCJcbiAgICAgICAgICAgICAgICBzZWN0aW9uLmNyaXRlcmlhOiBWaWV3U2VjdGlvbi5GdWxsU3RyaW5nXG4gICAgICAgICAgICAgICAgc2VjdGlvbi5kZWxlZ2F0ZTogUmVjdGFuZ2xlIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGJvYXJkTGlzdC53aWR0aFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQyXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBwYWxldHRlLmFsdGVybmF0ZUJhc2VcbiAgICAgICAgICAgICAgICAgICAgTGFiZWwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5sZWZ0OiBwYXJlbnQubGVmdFxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5sZWZ0TWFyZ2luOiAxMlxuICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy52ZXJ0aWNhbENlbnRlcjogcGFyZW50LnZlcnRpY2FsQ2VudGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250LmJvbGQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBwYWxldHRlLmhpZ2hsaWdodFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGVnYXRlOiBJdGVtRGVsZWdhdGUge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogYm9hcmRMaXN0LndpZHRoXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGJvYXJkTmFtZVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrZWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQm9hcmQgPSBib2FyZE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUGxhdGZvcm0gPSBwbGF0Zm9ybU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvYXJkRGlhbG9nLmNsb3NlKClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBTY3JvbGxCYXIudmVydGljYWw6IFNjcm9sbEJhciB7fVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgRGlhbG9nIHtcbiAgICAgICAgaWQ6IHJldmlld0RpYWxvZ1xuICAgICAgICBwYXJlbnQ6IE92ZXJsYXkub3ZlcmxheVxuICAgICAgICBhbmNob3JzLmNlbnRlckluOiBwYXJlbnRcbiAgICAgICAgbW9kYWw6IHRydWVcbiAgICAgICAgdGl0bGU6IHFzVHIoXCJSZWFkeSB0byB3cml0ZT9cIilcbiAgICAgICAgc3RhbmRhcmRCdXR0b25zOiBEaWFsb2cuQ2FuY2VsIHwgRGlhbG9nLk9rXG4gICAgICAgIG9uQWNjZXB0ZWQ6IHByZXZpZXdOb3RpY2Uub3BlbigpXG4gICAgICAgIENvbHVtbkxheW91dCB7XG4gICAgICAgICAgICBMYWJlbCB7IHRleHQ6IHFzVHIoXCJCb2FyZFwiKTsgZm9udC5ib2xkOiB0cnVlIH1cbiAgICAgICAgICAgIExhYmVsIHsgdGV4dDogc2VsZWN0ZWRCb2FyZCArIFwiIOKAlCBcIiArIHNlbGVjdGVkUGxhdGZvcm0gfVxuICAgICAgICAgICAgTGFiZWwgeyB0ZXh0OiBxc1RyKFwiRGVzdGluYXRpb25cIik7IGZvbnQuYm9sZDogdHJ1ZSB9XG4gICAgICAgICAgICBMYWJlbCB7IHRleHQ6IG91dHB1dElzRmlsZSA/IG91dHB1dFBhdGggOiBkcml2ZUJveC5jdXJyZW50VGV4dDsgZWxpZGU6IFRleHQuRWxpZGVNaWRkbGU7IExheW91dC5tYXhpbXVtV2lkdGg6IDQ1MCB9XG4gICAgICAgICAgICBMYWJlbCB7IHRleHQ6IHFzVHIoXCJUaGlzIGlzIGFuIGludGVyZmFjZSBwcmV2aWV3LiBObyBkYXRhIHdpbGwgYmUgd3JpdHRlbi5cIik7IGNvbG9yOiBwYWxldHRlLm1pZCB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBEaWFsb2cge1xuICAgICAgICBpZDogYWJvdXREaWFsb2dcbiAgICAgICAgcGFyZW50OiBPdmVybGF5Lm92ZXJsYXlcbiAgICAgICAgYW5jaG9ycy5jZW50ZXJJbjogcGFyZW50XG4gICAgICAgIG1vZGFsOiB0cnVlXG4gICAgICAgIHRpdGxlOiBxc1RyKFwiQWJvdXQgQUxUIEltYWdlIFdyaXRlclwiKVxuICAgICAgICBzdGFuZGFyZEJ1dHRvbnM6IERpYWxvZy5Pa1xuICAgICAgICBMYWJlbCB7XG4gICAgICAgICAgICB0ZXh0OiBxc1RyKFwiQUxUIEltYWdlIFdyaXRlciDigJQgUXRcXG5WZXJzaW9uIDAuMS4wXFxuXFxuUHJlcGFyZSBBTFQgTGludXggaW5zdGFsbGF0aW9uIG1lZGlhIGZvciBzdXBwb3J0ZWQgU0JDcy5cIilcbiAgICAgICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6IFRleHQuQWxpZ25IQ2VudGVyXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBQb3B1cCB7XG4gICAgICAgIGlkOiBwcmV2aWV3Tm90aWNlXG4gICAgICAgIHBhcmVudDogT3ZlcmxheS5vdmVybGF5XG4gICAgICAgIHg6IChwYXJlbnQud2lkdGggLSB3aWR0aCkgLyAyXG4gICAgICAgIHk6IHBhcmVudC5oZWlnaHQgLSBoZWlnaHQgLSAyNFxuICAgICAgICBwYWRkaW5nOiAxNlxuICAgICAgICBjbG9zZVBvbGljeTogUG9wdXAuQ2xvc2VPbkVzY2FwZSB8IFBvcHVwLkNsb3NlT25QcmVzc091dHNpZGVcbiAgICAgICAgTGFiZWwgeyB0ZXh0OiBxc1RyKFwiRmxhc2hpbmcgaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgcHJldmlld1wiKSB9XG4gICAgICAgIFRpbWVyIHsgaW50ZXJ2YWw6IDM1MDA7IHJ1bm5pbmc6IHByZXZpZXdOb3RpY2UudmlzaWJsZTsgb25UcmlnZ2VyZWQ6IHByZXZpZXdOb3RpY2UuY2xvc2UoKSB9XG4gICAgfVxuXG4gICAgUGxhdGZvcm0uRmlsZURpYWxvZyB7XG4gICAgICAgIGlkOiBzb3VyY2VEaWFsb2dcbiAgICAgICAgdGl0bGU6IHFzVHIoXCJDaG9vc2UgSW5zdGFsbGF0aW9uIFNvdXJjZVwiKVxuICAgICAgICBmaWxlTW9kZTogUGxhdGZvcm0uRmlsZURpYWxvZy5PcGVuRmlsZVxuICAgICAgICBuYW1lRmlsdGVyczogc291cmNlSXNJbWFnZSA/IFtxc1RyKFwiRGlzayBpbWFnZXMgKCouaW1nICouaW1nLnh6KVwiKSwgcXNUcihcIkFsbCBmaWxlcyAoKilcIildXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW3FzVHIoXCJSb290IGZpbGVzeXN0ZW0gYXJjaGl2ZXMgKCoudGFyICoudGFyLmd6ICoudGFyLnh6KVwiKSwgcXNUcihcIkFsbCBmaWxlcyAoKilcIildXG4gICAgICAgIG9uQWNjZXB0ZWQ6IHNvdXJjZVBhdGggPSBsb2NhbFBhdGgoZmlsZSlcbiAgICB9XG5cbiAgICBQbGF0Zm9ybS5GaWxlRGlhbG9nIHtcbiAgICAgICAgaWQ6IG91dHB1dERpYWxvZ1xuICAgICAgICB0aXRsZTogcXNUcihcIkNyZWF0ZSBEaXNrIEltYWdlXCIpXG4gICAgICAgIGZpbGVNb2RlOiBQbGF0Zm9ybS5GaWxlRGlhbG9nLlNhdmVGaWxlXG4gICAgICAgIGRlZmF1bHRTdWZmaXg6IFwiaW1nXCJcbiAgICAgICAgbmFtZUZpbHRlcnM6IFtxc1RyKFwiUmF3IGRpc2sgaW1hZ2VzICgqLmltZylcIiksIHFzVHIoXCJBbGwgZmlsZXMgKCopXCIpXVxuICAgICAgICBvbkFjY2VwdGVkOiBvdXRwdXRQYXRoID0gbG9jYWxQYXRoKGZpbGUpXG4gICAgfVxufVxuIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoxMzYyLCJvdXRwdXQiOjMzOTYsImNhY2hlUmVhZCI6NDg2NDAsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6NywidG90YWxUb2tlbnMiOjUzMzk4LCJjb3N0Ijp7ImlucHV0IjowLjAwNjgxMDAwMDAwMDAwMDAwMSwib3V0cHV0IjowLjEwMTg4LCJjYWNoZVJlYWQiOjAuMDI0MzE5OTk5OTk5OTk5OTk4LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4xMzMwMX19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTg2NDY1NCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4YTkwMjYwODE5MWE5NTIwYmI5OTU0YjE3OWMifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZWZkYTEwM2QiLCJwYXJlbnRJZCI6IjM1OTEyNGI3IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMjowNy40OThaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX2tmc2Rqcmt3TDVIeTRFcFB3amIzdWJPNXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzhhZDIzODg4MTkxODc4MjQ5ZGMyOTUzNjM3NSIsInRvb2xOYW1lIjoid3JpdGUiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJTdWNjZXNzZnVsbHkgd3JvdGUgMTU2NTYgYnl0ZXMgdG8gY3JhdGVzL2ZsYXNoZXItcXQvcW1sL01haW4ucW1sIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg5OTI3NDk4fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNjBiMDNlNzIiLCJwYXJlbnRJZCI6ImVmZGExMDNkIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMjoxNC42OTZaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlZlcmlmeWluZyBjb21waWxlIGVycm9ycyB3aXRob3V0IHN1ZG8qKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOGU5NDJkNDgxOTE4Yzg2NzQzM2JhOTJjZmYyXCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNanVKbW5MUG5kWlo3ejR5UEZZQXNFbDFRb29KbzB4eUp2dzJlZ21SY28xV1ZtV09wSkpyZWIwc2J0Z0hmckgzY2FRTDFuSnR4SXB5VndoN1d1X0Jzb0VIYm14LWIxM3N4a3d0a0s1eDExeFlpYmtadW5rQlRhUkpiTXlvLU50cDJyLTJiR2Q4TGFTLXYtWDVyX29MQ1k4OW5HRHByMkNWN29fT0lxMEtSRTE4dWlYX0Nrc0V6UlVkc09UdklCek9MaGFLMTZSY1N0dTVGVUcxa1RJTVBHRGg1NFRvR2JiSGVRZEFqdm9TaGp0RlhHM3NxejJTMHZRSlZRNWp0VlJOUERnZ3lqY1pUdjVQS1NTaWZQemU4SkRsME1wbElEM1FMYVpGbzFIbU9DVkVZaGE5VF85T3pMMm83RlJQdGJqQmQ0T0U5SlZNSDhZNV9xUklkWTBodWdsdzdjZ2pvVFZYSkZlSkN3RV9Db1lnTkVaQzVWbFE3SmVhYzhmRk5RaDhuSWEwZ3hLdWMyUG5XSzIwbGY2NDY2aEtxMmRJZWtMdnpyQmJ3cHVHaXRTbDRQdlVCWGk4THM3Nm0zYjQ3ekU3eDQ2VmR6M1phYUFqWFRVTzJ0bDBnc0NESlhrRVJhNTM3V1lzZ09jTWdHUzFOREY5NURsWFFpQXlTMXJacXZLZmlKZjlIQTdYUzBWOUVYYUd0bFJPS0oxNXp6V3lSR1pDN2hWeGl0R3dlUDNUTmJSaERJTlRuSjdxeGlEeTJfTUdGSGs2WEttZ1JlWk1idDFQQk1TcmYxelR5V29Xengtc0FTODRsSnVWTEpTR2ltWi1id1ZteGhpNjZtM3NuOXdXaHJsYldQb2RZc1pYUjRFcGJMdmE2MHJwVDRxdEtTbFhFVDFheHBQa01BVURnbHp3VWtraExYVDMtNnNGbUF1dDJicHRKOVV1QVgxbFg1Qm1Pdzg3Zy1vZXJrMzF3Ymlua0lIWUZCUUQtclBWLVZRMnJlZk9kRGpUXzBYbzR4MHM2STlyS0VGZHlSd05oODRuQmVrVkF1aEl6WnlLeDBhSEk2UkE3Q3kyazBBRjJYQlVXbkQ4R3lzdFVNRDAtd3pQS215bjBybFRiWFBsM05pd0puMnU2cHRCZGdiVVNubHdiZ19HSWNVLXptaDdPMURmTVJHU0ZvSGlmdGV5Z095eDBQbDlHSy11NG9MV0FBZExTcDU0OTNfc2pDbjB0X042dGpkRkJjN0tzWDVwNHNwdXlpVkh2X3VtVlpDZERsLU5ydE9mUzZYNWNoVnl4X1hHZEdnYVNsYVlycW45cVhRbEJWb1VGdTQyUXNMNERtS1pjNHVNb1JjX2hGYnRsQkZxTnNhSnoxTWpGSVB4WlRZdEZRTHJ0dzV0eko4TG9PdXZoN3VaS3hOM2Y3VzhNVVFTRFo1Q0VmUVpPQ29pRGx6Sm11eFJKdTNhT1EyaUx5UlVfTnViYzZnZUw4V3ZyOXZNdnpYRzFVWjBXeDItcWpJVWVKTEZvaDItRWFuejYwdkdwLXRvNHRqZ2t1cnhtMTRsZ05DQ1VfamRIQUdqMmpYZHdJSFpRVmEzT05uRXdtNWM2aUhuMGNYekRCbFZTeEpwdFhGR2ttU2xaRU5hWEE1T3Jra0Fzdk1xTDBONndsRXJBUTc5SVBmZVF6VUxnREk0b3d3X1RBX0pSa0lhYkFweDJ2SGJaUl9OWW90WXdJOFdrS0JkcW5Kazh1YU1mN2YyY0NvVjdLZkdFeFM1MExaVmpXeHNucnNxSzJMZTBSWVk0c3ZcIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlZlcmlmeWluZyBjb21waWxlIGVycm9ycyB3aXRob3V0IHN1ZG8qKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfMWxGaXZaZUhtR2RtSXRLdmJPYWhUcjlnfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOGVlODRmYzgxOTFhZjcwODVjOTZjYjgxNzYxIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImFwdC1jYWNoZSBzZWFyY2ggJ15xdDUtLipkZXZlbCcgfCBoZWFkIC0zMDsgYXB0LWNhY2hlIHNlYXJjaCBxdWlja2NvbnRyb2xzMiB8IGhlYWQgLTIwOyBhcHQtY2FjaGUgc2VhcmNoIGxpYmFkd2FpdGEgfCBoZWFkIC0yMCJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9hV0JhMTJhc1RiS3RCVFRtS0VPSzdsdnp8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4ZWU4NTEwODE5MTlkNDAyOTFiYmUzZjg0YzMiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiY2FyZ28gbWV0YWRhdGEgLS1uby1kZXBzIC0tZm9ybWF0LXZlcnNpb24gMSA+L2Rldi9udWxsICYmIGVjaG8gJ3dvcmtzcGFjZSBtZXRhZGF0YTogb2snOyBnaXQgc3RhdHVzIC0tc2hvcnQ7IGdyZXAgLW4gJ2FsdC1yb290ZnMnIGNyYXRlcy9mbGFzaGVyLWd0ay9zcmMvbWFpbi5ycyB8IGhlYWQifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjM3NjAsIm91dHB1dCI6MTk3LCJjYWNoZVJlYWQiOjQ5NjY0LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjY2LCJ0b3RhbFRva2VucyI6NTM2MjEsImNvc3QiOnsiaW5wdXQiOjAuMDE4OCwib3V0cHV0IjowLjAwNTkxLCJjYWNoZVJlYWQiOjAuMDI0ODMyLCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNDk1NDJ9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5ODk5Mjc1MDAsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOGU3ZGU4NDgxOTFiMGRiZmI1YTM0NzI1M2U0In19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImM1MTk1ZmNhIiwicGFyZW50SWQiOiI2MGIwM2U3MiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzI6MjQuNDg3WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF8xbEZpdlplSG1HZG1JdEt2Yk9haFRyOWd8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4ZWU4NGZjODE5MWFmNzA4NWM5NmNiODE3NjEiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJxdDUtM2QtZGV2ZWwgLSBEZXZlbG9wbWVudCBmaWxlcyBmb3IgcXQ1LTNkXG5xdDUtYmFzZS1kZXZlbCAtIERldmVsb3BtZW50IGZpbGVzIGZvciBxdDUtYmFzZVxucXQ1LWJhc2UtZGV2ZWwtc3RhdGljIC0gRGV2ZWxvcG1lbnQgZmlsZXMgZm9yIHF0NS1iYXNlXG5xdDUtY2hhcnRzLWRldmVsIC0gRGV2ZWxvcG1lbnQgZmlsZXMgZm9yIHF0NS1jaGFydHNcbnF0NS1jb25uZWN0aXZpdHktZGV2ZWwgLSBEZXZlbG9wbWVudCBmaWxlcyBmb3IgcXQ1LWNvbm5lY3Rpdml0eVxucXQ1LWRhdGF2aXMzZC1kZXZlbCAtIERldmVsb3BtZW50IGZpbGVzIGZvciBxdDUtZGF0YXZpczNkXG5xdDUtZGVjbGFyYXRpdmUtZGV2ZWwgLSBEZXZlbG9wbWVudCBmaWxlcyBmb3IgcXQ1LWRlY2xhcmF0aXZlXG5xdDUtZGVjbGFyYXRpdmUtZGV2ZWwtc3RhdGljIC0gRGV2ZWxvcG1lbnQgZmlsZXMgZm9yIHF0NS1kZWNsYXJhdGl2ZVxucXQ1LWVuZ2luaW8tZGV2ZWwgLSBEZXZlbG9wbWVudCBmaWxlcyBmb3IgcXQ1LWVuZ2luaW9cbnF0NS1mZWVkYmFjay1kZXZlbCAtIERldmVsb3BtZW50IGZpbGVzIGZvciBxdDUtZmVlZGJhY2tcbnF0NS1nYW1lcGFkLWRldmVsIC0gRGV2ZWxvcG1lbnQgZmlsZXMgZm9yIHF0NS1nYW1lcGFkXG5xdDUtbG9jYXRpb24tZGV2ZWwgLSBEZXZlbG9wbWVudCBmaWxlcyBmb3IgcXQ1LWxvY2F0aW9uXG5xdDUtbXVsdGltZWRpYS1kZXZlbCAtIERldmVsb3BtZW50IGZpbGVzIGZvciBxdDUtbXVsdGltZWRpYVxucXQ1LW5ldHdvcmthdXRoLWRldmVsIC0gRGV2ZWxvcG1lbnQgZmlsZXMgZm9yIHF0NS1uZXR3b3JrYXV0aFxucXQ1LXBob25vbi1kZXZlbCAtIEhlYWRlciBmaWxlcyBhbmQgZG9jdW1lbnRhdGlvbiBmb3IgY29tcGlsaW5nIFBob25vbiBhcHBsaWNhdGlvbnNcbnF0NS1xdHN5c3RlbXMtZGV2ZWwgLSBRdCA1IFN5c3RlbXMgKGRldmVsb3BtZW50IGZpbGVzKVxucXQ1LXF0c3lzdGVtcy1wcml2YXRlLWRldmVsIC0gUXQgNSBTeXN0ZW1zIChkZXZlbG9wbWVudCBmaWxlcylcbnF0NS1xdWlja2NvbnRyb2xzMi1kZXZlbCAtIERldmVsb3BtZW50IGZpbGVzIGZvciBxdDUtcXVpY2tjb250cm9sczJcbnF0NS1xdWlja2NvbnRyb2xzMi1kZXZlbC1zdGF0aWMgLSBEZXZlbG9wbWVudCBmaWxlcyBmb3IgcXQ1LXF1aWNrY29udHJvbHMyXG5xdDUtcmVtb3Rlb2JqZWN0cy1kZXZlbCAtIERldmVsb3BtZW50IGZpbGVzIGZvciBxdDUtcmVtb3Rlb2JqZWN0c1xucXQ1LXNjcmlwdC1kZXZlbCAtIERldmVsb3BtZW50IGZpbGVzIGZvciBxdDUtc2NyaXB0XG5xdDUtc2N4bWwtZGV2ZWwgLSBEZXZlbG9wbWVudCBmaWxlcyBmb3IgcXQ1LXNjeG1sXG5xdDUtc2Vuc29ycy1kZXZlbCAtIERldmVsb3BtZW50IGZpbGVzIGZvciBxdDUtc2Vuc29yc1xucXQ1LXNlcmlhbGJ1cy1kZXZlbCAtIERldmVsb3BtZW50IGZpbGVzIGZvciBxdDUtc2VyaWFsYnVzXG5xdDUtc2VyaWFscG9ydC1kZXZlbCAtIERldmVsb3BtZW50IGZpbGVzIGZvciBxdDUtc2VyaWFscG9ydFxucXQ1LXNwZWVjaC1kZXZlbCAtIERldmVsb3BtZW50IGZpbGVzIGZvciBxdDUtc3BlZWNoXG5xdDUtc3ZnLWRldmVsIC0gRGV2ZWxvcG1lbnQgZmlsZXMgZm9yIHF0NS1zdmdcbnF0NS10b29scy1kZXZlbCAtIERldmVsb3BtZW50IGZpbGVzIGZvciBxdDUtdG9vbHNcbnF0NS12aXJ0dWFsa2V5Ym9hcmQtZGV2ZWwgLSBEZXZlbG9wbWVudCBmaWxlcyBmb3IgcXQ1LXZpcnR1YWxrZXlib2FyZFxucXQ1LXdheWxhbmQtZGV2ZWwgLSBEZXZlbG9wbWVudCBmaWxlcyBmb3IgcXQ1LXdheWxhbmRcbmRxdDUtcXVpY2tjb250cm9sczIgLSBRdDUgLSBtb2R1bGUgd2l0aCBzZXQgb2YgUXRRdWljayBDb250cm9scyAyXG5kcXQ1LXF1aWNrY29udHJvbHMyLWRldmVsIC0gRGV2ZWxvcG1lbnQgZmlsZXMgZm9yIGRxdDUtcXVpY2tjb250cm9sczJcbmRxdDUtcXVpY2tjb250cm9sczItZGV2ZWwtc3RhdGljIC0gRGV2ZWxvcG1lbnQgZmlsZXMgZm9yIGRxdDUtcXVpY2tjb250cm9sczJcbmRxdDUtcXVpY2tjb250cm9sczItZG9jIC0gRG9jdW1lbnQgZm9yIGRldmVsb3BpbmcgYXBwcyB3aGljaCB3aWxsIHVzZSBRdDUgZHF0cXVpY2tjb250cm9sczJcbmxpYmRxdDUtcXVpY2tjb250cm9sczIgLSBRdDUgbGlicmFyeVxubGliZHF0Ni1xdWlja2NvbnRyb2xzMiAtIFF0NiAtIGxpYnJhcnlcbmxpYmRxdDYtcXVpY2tjb250cm9sczJiYXNpYyAtIFF0NiAtIGxpYnJhcnlcbmxpYmRxdDYtcXVpY2tjb250cm9sczJiYXNpY3N0eWxlaW1wbCAtIFF0NiAtIGxpYnJhcnlcbmxpYmRxdDYtcXVpY2tjb250cm9sczJmbHVlbnR3aW51aTNzdHlsZWltcGwgLSBRdDYgLSBsaWJyYXJ5XG5saWJkcXQ2LXF1aWNrY29udHJvbHMyZnVzaW9uIC0gUXQ2IC0gbGlicmFyeVxubGliZHF0Ni1xdWlja2NvbnRyb2xzMmZ1c2lvbnN0eWxlaW1wbCAtIFF0NiAtIGxpYnJhcnlcbmxpYmRxdDYtcXVpY2tjb250cm9sczJpbWFnaW5lIC0gUXQ2IC0gbGlicmFyeVxubGliZHF0Ni1xdWlja2NvbnRyb2xzMmltYWdpbmVzdHlsZWltcGwgLSBRdDYgLSBsaWJyYXJ5XG5saWJkcXQ2LXF1aWNrY29udHJvbHMyaW1wbCAtIFF0NiAtIGxpYnJhcnlcbmxpYmRxdDYtcXVpY2tjb250cm9sczJtYXRlcmlhbCAtIFF0NiAtIGxpYnJhcnlcbmxpYmRxdDYtcXVpY2tjb250cm9sczJtYXRlcmlhbHN0eWxlaW1wbCAtIFF0NiAtIGxpYnJhcnlcbmxpYmRxdDYtcXVpY2tjb250cm9sczJ1bml2ZXJzYWwgLSBRdDYgLSBsaWJyYXJ5XG5saWJkcXQ2LXF1aWNrY29udHJvbHMydW5pdmVyc2Fsc3R5bGVpbXBsIC0gUXQ2IC0gbGlicmFyeVxua2Y1LWtpcmlnYW1pIC0gQSBRdFF1aWNrIGJhc2VkIGNvbXBvbmVudHMgc2V0XG5rZjYta2lyaWdhbWkgLSBBIFF0UXVpY2sgYmFzZWQgY29tcG9uZW50cyBzZXRcbmxpYmFkd2FpdGEtcXQ1IC0gQWR3YWl0YSBRdDUgbGlicmFyeVxubGliYWR3YWl0YS1xdDUtZGV2ZWwgLSBEZXZlbG9wbWVudCBmaWxlcyBmb3IgbGliYWR3YWl0YS1xdDVcbmxpYmFkd2FpdGEtcXQ2IC0gQWR3YWl0YSBRdDYgbGlicmFyeVxubGliYWR3YWl0YS1xdDYtZGV2ZWwgLSBEZXZlbG9wbWVudCBmaWxlcyBmb3IgbGliYWR3YWl0YS1xdDZcbmFsdC13ZWF0aGVyLWFkdyAtIFdlYXRoZXIgZm9yZWNhc3RcbmNyb3NzcGlwZSAtIEdyYXBoaWNhbCBQaXBlV2lyZSBjb25uZWN0aW9ucyBtYW5hZ2VyXG5lbGFzdGljIC0gRGVzaWduIHNwcmluZyBhbmltYXRpb25zXG5lbWJlbGxpc2ggLSBJbnN0YWxsIG5lcmQgZm9udHNcbmV4ZXJjaXNlLXRpbWVyIC0gRXhlcmNpc2UgVGltZXJcbmZhbGNvbmQtZ3VpIC0gQSBHVEs0L0xpYkFkd2FpdGEgYXBwbGljYXRpb24gdG8gY29udHJvbCBhbmQgbW9uaXRvciB0aGUgRmFsY29uZCBnYW1pbmcgb3B0aW1pemF0aW9uIGRhZW1vblxuZ2VvY2x1ZS1zdHVtYmxlciAtIEdlb2NsdWUgU3R1bWJsZXJcbmdpdHB1bHNhciAtIEdOT01FLW5hdGl2ZSBHaXQgR1VJIHdyaXR0ZW4gaW4gUnVzdCB3aXRoIEdUSzQvbGliYWR3YWl0YVxuZ2l0dGUgLSBBIEdUSzQvbGliYWR3YWl0YSBHaXQgY2xpZW50IGZvciB0aGUgR05PTUUgZGVza3RvcFxubGliYWRhcHRhIC0gbGliQWRhcHRhIGlzIGxpYkFkd2FpdGEgd2l0aCB0aGVtZSBzdXBwb3J0IGFuZCBhIGZldyBleHRyYVxubGliYWR3YWl0YSAtIExpYnJhcnkgd2l0aCBHVEs0IHdpZGdldHMgZm9yIG1vYmlsZSBkZXZpY2VzXG5saWJhZHdhaXRhLWRldmVsIC0gRGV2ZWxvcG1lbnQgZmlsZXMgZm9yIGxpYmFkd2FpdGFcbmxpYmFkd2FpdGEtZ2lyIC0gR09iamVjdCBpbnRyb3NwZWN0aW9uIGRhdGEgZm9yIGxpYmFkd2FpdGFcbmxpYmJpc211dGgxIC0gTGliYWR3YWl0YSdzIHJlc3BvbnNpdmUgd2lkZ2V0cywgd2l0aG91dCBhbGwgdGhlIGJhZ2dhZ2VcbmxpYmd0ay1ub2NzZCAtIEFuIExEX1BSRUxPQUQgbGlicmFyeSB0byBkaXNhYmxlIENTRCBpbiBHVEszLzRcbmxpYmd0ay1ub2NzZDAgLSBBbiBMRF9QUkVMT0FEIGxpYnJhcnkgdG8gZGlzYWJsZSBDU0QgaW4gR1RLMy80XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODk5NDQ0ODd9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4NWUwN2NmMyIsInBhcmVudElkIjoiYzUxOTVmY2EiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMyOjI0LjQ4N1oiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfYVdCYTEyYXNUYkt0QlRUbUtFT0s3bHZ6fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOGVlODUxMDgxOTE5ZDQwMjkxYmJlM2Y4NGMzIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0Ijoid29ya3NwYWNlIG1ldGFkYXRhOiBva1xuIE0gQ2FyZ28ubG9ja1xuIE0gQ2FyZ28udG9tbFxuIEQgc3JjL21haW4ucnNcbj8/IGNyYXRlcy9cbjY6Y29uc3QgQk9BUkRTOiAmc3RyID0gaW5jbHVkZV9zdHIhKFwiLi4vLi4vLi4vYWx0LXJvb3Rmcy1pbnN0YWxsZXIvU1VQUE9SVEVELUJPQVJEU1wiKTtcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4OTk0NDQ4N319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjJlY2M2MWNmIiwicGFyZW50SWQiOiI4NWUwN2NmMyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzI6MzIuMDMzWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipBc3Nlc3NpbmcgUXQgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBlbnZpcm9ubWVudCoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4ZmIyNjE0ODE5MTk1ZGM0OTE5YTRkZGQwYjBcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1qX1dRbzgyTHp4U1ZaYUpEOEFKb0d1bmpNcVhwUFZLYUV6TWhXdHgzNlh4TkpWUlVzeC1TazlVV18tYkZsRU9WRF9sX1NJVzBDODJNV2tSR3V1dXBFQ2dWM2xqLTNNdXhWTHQ0cDdJcmozSExheDFBQlgwVWMySmJ2SDUxcWFrWm9BcWt0YlQ0aFR1WWNyaDlQbXpXR0ptZUozWEJvT2p6dGVqSHpZS3VmNXoyZ2loa3ZSenR5UGlWT2JVLTI2SUthZnRRUVg2R2RVTFpVTnYzVlk0cGltbTRnT1c0RkR3TFc2RnhDVlBOcEdiblhNSENXLXdPaG4zMnNZMFBtS0lWb1J2dUpVaUdSeEVZYURhWWNaNGZocFE0dl9ON01GYm1Dc0pDYjVBNU9sWWRrYjh6ZmNDVFZhUzh1T0tFS0pnQmRqOGQwTWkxbU12UmJjc3BnM2c1VTV6NDBVNzlpcy1ub05YX2RvRXZmYXBrZ0xMVWRVQjNGeUhNQUxUcDd5bXlRWDYxel9BdC1Qd1lRbHNua2FiVlVYNm5zNkJ0TU1qOUVwc2c5TjgybUhaRjNSMVVncnNpbHU0c09EMkNZMzJIblpxZ243Y2gwLTFjTUM3OVgwanFIQ1BQdzFtV0pLVWRBS25YMjhOMXBMRTNGRVYxc1Z5WlVaM0hfdzVxNWdwbjZTRlRGWWN0MzVXUVoyMlptenN6U2ltOHVhOWxkZy00YVVLLU04UnRzdWtEVktncUpaZEM3a3Z1MFBTYmVLai1kdG1iU25RdmFESjk4Q21SU0ItNmFIY0NXNERENjhrRF95M1RWQ0FqdkpGWXlFWnpwQVJCMUxFT1RFb09IN3pDdFVJcHNlbVUxYlVzaUR1QjRZN0MySHYyd1IyYlc5YXVCN2NzOWV0UGxIZ1FnMndjVTJ2QTRwRk5weGlielE4VjlxNkNPQndRbFFCYkNpQllFUUNtUVhVSGY1Y25xdzdSRDlSOTg3aE5WVWl1TUxNcUNGMVo3cEpRTWZHaFd3NUNzaFR5WmN3aV92dHZmc0UzdXdHeGF0azg5Xzg4ZkZQM1NXZTdPdmhmdEhPX0EyR2lFWVZzMC00bno5YWlWSzVrWlpQVWpUZjdmTDduV1JjUTNSMHJmSy1VZTVIZnNlMmdlcDR1Vl9oMzVFSGJMWWx6VXBNN3lyTUYtMVI0VWZDQmVLNXl4dXFZUkRhSFhZR05TLUZIdHBQajVKaTh3SDI4Z1NubGJ6NmhGNUVLZmN3NTdkOTNVLVRPSllYVmNhN0Z4MWE1RTNRMHQ1QXYtcllXanlIMFB1cjFKYVdaSlVMMzNpOXF6eGZkNHBFLWplc0NDdkN6RXNPaUVQUE55dWREUjJpT2Q5clVQMUZfZk8yZjduOUgtNy11cDNLMXo4WG9zeFI2cTRqQmlDR3RITTY5eFFZNUROY3FvUlk4ZXFzM1pBeUpaRFhTb0tOdjVxRjFsV0RBbmM5WkZ5M3U3ZXFUbnE1d0p4T0JmU1pHcmplN3R3UVNJeUN0UnlOZktpc0pfMmNFV3JuRWRNMlZ0SlFYMkdXc2dQb2dPanB3SVRIX3JNTkR6NDIxSTJOTVZrTlJpREJhd2FIQi1TaGdzZGg5N0s4RDZncXNxSWJMUzFCZ3N4a0c3QjZ2S0E3YjJHS0lmNFpJUDhXWmtJekhxR3RLU1dRcFR1QTFCQXppNEw0eDFWWlNLRDBsT2t3Z1hLeEcyWDF5Q0g3NWdWUzMySm5lTml6eFVUZW5RYTJyLTRKa2xuMDNsZFJiQlQwZUtweHc0OS1fYkhGaFVIdFlqYUZYR1BuTDRjeWE5ZjBFT25WQ2ZPT21TclJyVXd0UWJOUTV5Snl5WVplTl8wa3JSLXItOXJpSTBrNFN5NVV5TEdRRUNRcGJpMW1TTmIyVnN3TUo2NzhPcko2TkNtY3pRb3VVY1c1SlpaSmxhb1dEcEp4U0RRXCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipBc3Nlc3NpbmcgUXQgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBlbnZpcm9ubWVudCoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9qVXJ3RlFpaG9FRHVwWW5UNXZna3c1THp8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4ZmZlNDBjODE5MWJkYTE5NDg1ODU1MTdkOWQiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiRE9DU19SUz0xIFJVU1RDX0JPT1RTVFJBUD0xIFJVU1RGTEFHUz0nLS1jZmcgZG9jc3JzJyBjYXJnbyBjaGVjayAtcCBmbGFzaGVyLWd0ayIsInRpbWVvdXQiOjEyMH19LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX2huM29zTFFpdFpBZHVhb2NYRjhJR1J0SXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzhmZmU0Mjg4MTkxYjEzNzkxM2QyYTI1ZDY4NCIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJjYXJnbyBjaGVjayAtcCBmbGFzaGVyLXF0IiwidGltZW91dCI6MTIwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjIwNTYsIm91dHB1dCI6MjAwLCJjYWNoZVJlYWQiOjUyNzM2LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjEwNiwidG90YWxUb2tlbnMiOjU0OTkyLCJjb3N0Ijp7ImlucHV0IjowLjAxMDI4MDAwMDAwMDAwMDAwMSwib3V0cHV0IjowLjAwNiwiY2FjaGVSZWFkIjowLjAyNjM2OCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDQyNjQ4MDAwMDAwMDAwMDA1fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg5OTQ0NDg5LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzhmOGU1ZGM4MTkxOWIyZjYzNjdiYjQzOTM4NiJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIxOTQ1YjhmNiIsInBhcmVudElkIjoiMmVjYzYxY2YiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMyOjM2LjYyMVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfalVyd0ZRaWhvRUR1cFluVDV2Z2t3NUx6fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOGZmZTQwYzgxOTFiZGExOTQ4NTg1NTE3ZDlkIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiICAgIEJsb2NraW5nIHdhaXRpbmcgZm9yIGZpbGUgbG9jayBvbiBwYWNrYWdlIGNhY2hlXG4gICAgQmxvY2tpbmcgd2FpdGluZyBmb3IgZmlsZSBsb2NrIG9uIHBhY2thZ2UgY2FjaGVcbiAgICBCbG9ja2luZyB3YWl0aW5nIGZvciBmaWxlIGxvY2sgb24gcGFja2FnZSBjYWNoZVxuICAgIEJsb2NraW5nIHdhaXRpbmcgZm9yIGZpbGUgbG9jayBvbiBidWlsZCBkaXJlY3RvcnlcbiAgICBDaGVja2luZyBmbGFzaGVyLWd0ayB2MC4xLjAgKC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvY3JhdGVzL2ZsYXNoZXItZ3RrKVxuICAgIEZpbmlzaGVkIGBkZXZgIHByb2ZpbGUgW3Vub3B0aW1pemVkICsgZGVidWdpbmZvXSB0YXJnZXQocykgaW4gNC41N3NcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4OTk1NjYyMX19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjY3OThjYzZkIiwicGFyZW50SWQiOiIxOTQ1YjhmNiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzI6MzYuNjIxWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9objNvc0xRaXRaQWR1YW9jWEY4SUdSdEl8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM4ZmZlNDI4ODE5MWIxMzc5MTNkMmEyNWQ2ODQiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIgICAgQmxvY2tpbmcgd2FpdGluZyBmb3IgZmlsZSBsb2NrIG9uIHBhY2thZ2UgY2FjaGVcbiAgICBCbG9ja2luZyB3YWl0aW5nIGZvciBmaWxlIGxvY2sgb24gcGFja2FnZSBjYWNoZVxuICAgIEJsb2NraW5nIHdhaXRpbmcgZm9yIGZpbGUgbG9jayBvbiBwYWNrYWdlIGNhY2hlXG4gICBDb21waWxpbmcgbWVtY2hyIHYyLjguM1xuICAgQ29tcGlsaW5nIHJlZ2V4LXN5bnRheCB2MC44LjExXG4gICBDb21waWxpbmcgc2hsZXggdjIuMC4xXG4gICBDb21waWxpbmcgZmluZC1tc3ZjLXRvb2xzIHYwLjEuOVxuICAgQ29tcGlsaW5nIHVuaWNvZGUteGlkIHYwLjIuNlxuICAgQ29tcGlsaW5nIHN5biB2MS4wLjEwOVxuICAgQ29tcGlsaW5nIGJ5dGVvcmRlciB2MS41LjBcbiAgICBDaGVja2luZyBsYXp5X3N0YXRpYyB2MS41LjBcbiAgICBDaGVja2luZyBsb2cgdjAuNC4zM1xuICAgQ29tcGlsaW5nIHN5biB2Mi4wLjExOVxuICAgQ29tcGlsaW5nIGNjIHYxLjQuMFxuICAgQ29tcGlsaW5nIGFoby1jb3Jhc2ljayB2MS4xLjRcbiAgIENvbXBpbGluZyByZWdleC1hdXRvbWF0YSB2MC40LjE2XG4gICBDb21waWxpbmcgcW1ldGFvYmplY3RfaW1wbCB2MC4yLjEwXG4gICBDb21waWxpbmcgY3BwX2NvbW1vbiB2MC41LjExXG4gICBDb21waWxpbmcgY3BwX21hY3JvcyB2MC41LjExXG4gICBDb21waWxpbmcgcmVnZXggdjEuMTMuMVxuICAgQ29tcGlsaW5nIGNwcF9idWlsZCB2MC41LjExXG4gICAgQ2hlY2tpbmcgY3BwIHYwLjUuMTFcbiAgIENvbXBpbGluZyBxdHR5cGVzIHYwLjIuMTJcbiAgIENvbXBpbGluZyBxbWV0YW9iamVjdCB2MC4yLjEwXG5lcnJvcjogZmFpbGVkIHRvIHJ1biBjdXN0b20gYnVpbGQgY29tbWFuZCBmb3IgYHF0dHlwZXMgdjAuMi4xMmBcblxuQ2F1c2VkIGJ5OlxuICBwcm9jZXNzIGRpZG4ndCBleGl0IHN1Y2Nlc3NmdWxseTogYC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL3F0dHlwZXMtYTJjNjE2NzZiNTM1YzU0ZC9idWlsZC1zY3JpcHQtYnVpbGRgIChleGl0IHN0YXR1czogMTAxKVxuICAtLS0gc3Rkb3V0XG4gIGNhcmdvOnJ1c3RjLWNoZWNrLWNmZz1jZmcobm9fcXQpXG4gIGNhcmdvOnJ1c3RjLWNoZWNrLWNmZz1jZmcocXRfNV8xMSxxdF81XzEyLHF0XzVfMTUscXJlYWxfaXNfZmxvYXQpXG4gIGNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPVFUX0lOQ0xVREVfUEFUSFxuICBjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1RVF9MSUJSQVJZX1BBVEhcbiAgY2FyZ286cmVydW4taWYtZW52LWNoYW5nZWQ9UU1BS0VcblxuICAtLS0gc3RkZXJyXG5cbiAgdGhyZWFkICdtYWluJyAoMTk0NjYwKSBwYW5pY2tlZCBhdCAvaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0dHlwZXMtMC4yLjEyL2J1aWxkLnJzOjI5Ojk6XG4gIEZhaWxlZCB0byBleGVjdXRlIHFtYWtlLiBNYWtlIHN1cmUgJ3FtYWtlJyBpcyBpbiB5b3VyIHBhdGghXG4gIGVudGl0eSBub3QgZm91bmRcbiAgbm90ZTogcnVuIHdpdGggYFJVU1RfQkFDS1RSQUNFPTFgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGRpc3BsYXkgYSBiYWNrdHJhY2VcblxuXG5Db21tYW5kIGV4aXRlZCB3aXRoIGNvZGUgMTAxIn1dLCJkZXRhaWxzIjp7fSwiaXNFcnJvciI6dHJ1ZSwidGltZXN0YW1wIjoxNzg0OTg5OTU2NjIxfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNzM1OGRkNDEiLCJwYXJlbnRJZCI6IjY3OThjYzZkIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMjo0MS44MDFaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlZlcmlmeWluZyBxbWV0YSBjb2RlIGNvbXBpbGF0aW9uIGZlYXNpYmlsaXR5KioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkwNzJiODg4MTkxODA5ODk5N2ZmMzRkZjAwMFwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTWtKeC13UkZ6TVFaUmJsSS1pSU9JZld5S3JwZnpLM2dIWldIYWdmM0o0RUJoZUE1TWFQclZ0VjdfMUx0N2NQSmhBUEtFTlZiaTNDZEhEVTBCRzV5aElLTkVna2lYeWd0enFROE5WWjlXSTh2aldmUDBHaWFweXNNV2ppc2pIZ19oU1hzX2VxQ3B5MWpqM0lVdDZaTDl4ck1SbU0wMEZ5ck5xSEp5d1FDbkRmU3dDeXp4WFJUN2dkUnJtRzZKNjY3d2x3U2NmMTlkVjRqcU9nU1JSdmQwdm5BT1QtTlZtVWJxY0ttOGY1VEh1VGdtbElIZ1NhNkhqQkNzWTVYeWRwZEt5d2VEdll4R1JpbTU3dDl5dTh6a01MRHRQSUJXQy02MHNjS3UxQnJTTVMwNngzeGZXMVdjSml0Z3FZSmZTUHpZV0NwelJRMHg2RHNqOGp3MkNVSXpwQ3ZaOHR1UmxsSUtneFlGU0dqZnRnak5TV3pEM2RlSkk3VkU4ZTVCS2xEZzNaMTVkQll2LVdYMmZlR2c5aXJjdnZYT0RwVWZHbkx5TEY1SHFRMHJpTzZEVElxeVpEaDBuMmIzZ3FQUmdnTWdzQjh1WjBXMGtfNU83MmZ4VWdHb1ZNSU95VE52d3JTTjd0Z1dKalhlaWlKN2lnNXhZUG9EZy1GVkhVQmhjTjRBUXpVN3AwUWQ4dXdyaWN2UG52WmJfZTFBVHNjY3hGUWNQbnVFaUhhdVU1SkxxRldjQldIUDNJMFdfRE5pSlpIbk83bHc5SG15aW9fMmZFZFFnZ0ctZ3hwUExST3JmbTBocWwyRHhzSnk0M1loWEo2S1RYYnZKal9XenR3djJ0T2ZiNnFScTZ6QXNaU2ZLTG1KaG9ualBaNk93UGdMMHBsWlRfRG1EMmk1Q09TdF9XOHU0TWtqWWd4VFZJV3V4bTNzdE4td0RLQ1o0eTZlM1lsMzJmSWJOWkg0TG1BRXVScXR0Nk5LM2Y3cXROY1U4RzdHUEtTR1BpSThQR1JqS00zTUVscWdoQnJBVjdiMkU3dHNsN2lLU0hZcjM3aG9HaDZIWFQ4c3RQS0pSY0Yya0dvQXhRMTE1ckxzSWh0eEZmeWdETEhkczhxRHB3c2p6Wm5wcGUycXZScGlpeWExOFM1YVFDbHUwV0MtWlJSVDZpVGViWWlPU0RCNkIzb0d2ZXA2STE2Vkw0eUhRcl9HenBBekZGcUNnSFduR2FRQTNrWDA5UEhWRnlEaDQ0X282SldoSDdOT2JpeEI3OVZCcGx0Z2U0aDRRYmd1cUp1bXdSZC1CNTBmeTJfX1BJRFVMR1hzZnhnSUxvcVBxUGNYemtXVzdKeEE0OUlqalg2MUNJenIxRGpTVWEwYzRuQkRiUVkxY1ctRmRpLTdsSFYtT2RyQTFqMDVnZk1KMHdZTmtxcmpNdTAtTXlIN2NHSUhXQ3dsbzlxdGdpS1A1OENONm1NRDViWFlXbm5RRkxTOWdxa0F5cWhjdkVZeXRuSjlkSmFMZjF4eGRTcjdiV04xV3B3WGlqSG45eFlvOTduelBVbzFwUmtEbW9GcXlHUTNtbmVMcGhpYmQxVV9sOHdBTHBNNGY5aHFaYVN3aHc1RkRpdHpUM1htUlFpY1BGNC0xTWp4QUV6ajdtNVEyZ2VtWHhWLUxKSms2dkV0MkMxRjBqSUVGRTY5bnVISzlLYThvckxqeG1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlZlcmlmeWluZyBxbWV0YSBjb2RlIGNvbXBpbGF0aW9uIGZlYXNpYmlsaXR5KipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX0tkb1lzUHZKRk9LdlJXT3h6RmZJQko4VnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkwOTQwNGM4MTkxYmYyYmFlYzVkYTgxM2MwOCIsIm5hbWUiOiJyZWFkIiwiYXJndW1lbnRzIjp7InBhdGgiOiIvaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0dHlwZXMtMC4yLjEyL2J1aWxkLnJzIiwibGltaXQiOjE4MH19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoxODk5LCJvdXRwdXQiOjEyNSwiY2FjaGVSZWFkIjo1Mzc2MCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjo2MywidG90YWxUb2tlbnMiOjU1Nzg0LCJjb3N0Ijp7ImlucHV0IjowLjAwOTQ5NSwib3V0cHV0IjowLjAwMzc1MDAwMDAwMDAwMDAwMDMsImNhY2hlUmVhZCI6MC4wMjY4Nzk5OTk5OTk5OTk5OTgsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA0MDEyNDk5OTk5OTk5OTk5NH19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTk1NjYyMywicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5MDRmODI0ODE5MWE1YjA1YzQ3YTU3MzMwYWQifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMmUxOTNkYWIiLCJwYXJlbnRJZCI6IjczNThkZDQxIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMjo0MS44MDJaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX0tkb1lzUHZKRk9LdlJXT3h6RmZJQko4VnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkwOTQwNGM4MTkxYmYyYmFlYzVkYTgxM2MwOCIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii8qIENvcHlyaWdodCAoQykgMjAxOCBPbGl2aWVyIEdvZmZhcnQgPG9nb2ZmYXJ0QHdvYm9xLmNvbT5cblxuUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZFxuYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbixcbmluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsXG5hbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLFxuc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cblRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWxcbnBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUXG5OT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORFxuTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFU1xuT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOXG5DT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cblxudXNlIHN0ZDo6aW86OnByZWx1ZGU6Oio7XG51c2Ugc3RkOjppbzo6QnVmUmVhZGVyO1xudXNlIHN0ZDo6cGF0aDo6e1BhdGgsIFBhdGhCdWZ9O1xudXNlIHN0ZDo6cHJvY2Vzczo6Q29tbWFuZDtcblxudXNlIHNlbXZlcjo6VmVyc2lvbjtcblxuZm4gcmVwb3J0X2Vycm9yKF9lcnI6ICZzdHIpIC0+ICEge1xuICAgIHtcbiAgICAgICAgI1tjZmcoZmVhdHVyZSA9IFwicmVxdWlyZWRcIildXG4gICAgICAgIHBhbmljIShcInt9XCIsIF9lcnIpO1xuICAgICAgICAjW2NmZyhub3QoZmVhdHVyZSA9IFwicmVxdWlyZWRcIikpXVxuICAgICAgICB7XG4gICAgICAgICAgICBwcmludGxuIShcImNhcmdvOnJ1c3RjLWNmZz1ub19xdFwiKTtcbiAgICAgICAgICAgIHByaW50bG4hKFwiY2FyZ286Rk9VTkQ9MFwiKTtcbiAgICAgICAgICAgIHByaW50bG4hKFwiY2FyZ286RVJST1JfTUVTU0FHRT17fVwiLCBfZXJyLmVzY2FwZV9kZWJ1ZygpKTtcbiAgICAgICAgICAgIHN0ZDo6cHJvY2Vzczo6ZXhpdCgwKVxuICAgICAgICB9XG4gICAgfVxufVxuXG5mbiBxbWFrZV9xdWVyeSh2YXI6ICZzdHIpIC0+IFN0cmluZyB7XG4gICAgbGV0IG91dHB1dCA9IG1hdGNoIHN0ZDo6ZW52Ojp2YXIoXCJRTUFLRVwiKSB7XG4gICAgICAgIE9rKGVudl92YXJfdmFsdWUpID0+IENvbW1hbmQ6Om5ldyhlbnZfdmFyX3ZhbHVlKS5hcmdzKCZbXCItcXVlcnlcIiwgdmFyXSkub3V0cHV0KCksXG4gICAgICAgIEVycihfZW52X3Zhcl9lcnIpID0+IHtcbiAgICAgICAgICAgICh8fCB7XG4gICAgICAgICAgICAgICAgLy8gU29tZSBMaW51eCBkaXN0cmlidXRpb25zIChGZWRvcmEsIEFyY2gpIHJlbmFtZSBxbWFrZSB0byBxbWFrZS1xdDUuXG4gICAgICAgICAgICAgICAgLy8gcW1ha2U2IGlzIGFuIG9mZmljaWFsIGFsaWFzIHRoYXQgZ2VuZXJhbGx5IGFsd2F5cyBwb2ludHMgdG8gdGhlIFF0NiB2ZXJzaW9uLlxuICAgICAgICAgICAgICAgIGZvciBxbWFrZSBpbiAmW1wicW1ha2U2XCIsIFwicW1ha2VcIiwgXCJxbWFrZS1xdDVcIl0ge1xuICAgICAgICAgICAgICAgICAgICBtYXRjaCBDb21tYW5kOjpuZXcocW1ha2UpLmFyZ3MoJltcIi1xdWVyeVwiLCB2YXJdKS5vdXRwdXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFcnIoZXJyKSBpZiBlcnIua2luZCgpID09IHN0ZDo6aW86OkVycm9yS2luZDo6Tm90Rm91bmQgPT4gY29udGludWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB4ID0+IHJldHVybiB4LFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEVycihzdGQ6OmlvOjpFcnJvcktpbmQ6Ok5vdEZvdW5kLmludG8oKSlcbiAgICAgICAgICAgIH0pKClcbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IG91dHB1dCA9IG1hdGNoIG91dHB1dCB7XG4gICAgICAgIE9rKG91dHB1dCkgPT4gb3V0cHV0LFxuICAgICAgICBFcnIoZXJyKSA9PiByZXBvcnRfZXJyb3IoJmZvcm1hdCEoXG4gICAgICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlIHFtYWtlLiBNYWtlIHN1cmUgJ3FtYWtlJyBpcyBpbiB5b3VyIHBhdGghXFxue31cIixcbiAgICAgICAgICAgIGVyclxuICAgICAgICApKSxcbiAgICB9O1xuXG4gICAgaWYgIW91dHB1dC5zdGF0dXMuc3VjY2VzcygpIHtcbiAgICAgICAgcmVwb3J0X2Vycm9yKCZmb3JtYXQhKFxuICAgICAgICAgICAgXCJxbWFrZSByZXR1cm5lZCB3aXRoIGVycm9yOlxcbnt9XFxue31cIixcbiAgICAgICAgICAgIHN0ZDo6c3RyOjpmcm9tX3V0ZjgoJm91dHB1dC5zdGRlcnIpLnVud3JhcF9vcl9kZWZhdWx0KCksXG4gICAgICAgICAgICBzdGQ6OnN0cjo6ZnJvbV91dGY4KCZvdXRwdXQuc3Rkb3V0KS51bndyYXBfb3JfZGVmYXVsdCgpXG4gICAgICAgICkpO1xuICAgIH1cbiAgICBzdGQ6OnN0cjo6ZnJvbV91dGY4KCZvdXRwdXQuc3Rkb3V0KS5leHBlY3QoXCJVVEYtOCBjb252ZXJzaW9uIGZhaWxlZFwiKS50cmltKCkudG9fc3RyaW5nKClcbn1cblxuZm4gb3Blbl9jb3JlX2hlYWRlcihcbiAgICBmaWxlOiAmc3RyLFxuICAgIHF0X2luY2x1ZGVfcGF0aDogJnN0cixcbiAgICBxdF9saWJyYXJ5X3BhdGg6ICZzdHIsXG4pIC0+IEJ1ZlJlYWRlcjxzdGQ6OmZzOjpGaWxlPiB7XG4gICAgbGV0IGNhcmdvX3RhcmdldF9vcyA9IHN0ZDo6ZW52Ojp2YXIoXCJDQVJHT19DRkdfVEFSR0VUX09TXCIpLnVud3JhcCgpO1xuXG4gICAgbGV0IG11dCBwYXRoID0gUGF0aEJ1Zjo6ZnJvbShxdF9pbmNsdWRlX3BhdGgpO1xuICAgIHBhdGgucHVzaChcIlF0Q29yZVwiKTtcbiAgICBwYXRoLnB1c2goZmlsZSk7XG4gICAgaWYgY2FyZ29fdGFyZ2V0X29zID09IFwibWFjb3NcIiB7XG4gICAgICAgIGlmICFwYXRoLmV4aXN0cygpIHtcbiAgICAgICAgICAgIHBhdGggPSBQYXRoOjpuZXcocXRfbGlicmFyeV9wYXRoKS5qb2luKFwiUXRDb3JlLmZyYW1ld29yay9IZWFkZXJzXCIpO1xuICAgICAgICAgICAgcGF0aC5wdXNoKGZpbGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBmID0gbWF0Y2ggc3RkOjpmczo6RmlsZTo6b3BlbigmcGF0aCkge1xuICAgICAgICBPayhmKSA9PiBmLFxuICAgICAgICBFcnIoZSkgPT4gcmVwb3J0X2Vycm9yKCZmb3JtYXQhKFxuICAgICAgICAgICAgXCJDYW5ub3Qgb3BlbiBgezo/fWAsIHBsZWFzZSBtYWtlIHN1cmUgdGhhdCB0aGUgUXQgaGVhZGVycyBhcmUgaW5zdGFsbGVkLlxcbnt9XCIsXG4gICAgICAgICAgICBwYXRoLCBlXG4gICAgICAgICkpLFxuICAgIH07XG4gICAgQnVmUmVhZGVyOjpuZXcoZilcbn1cblxuLy8gcXJlYWwgaXMgYSBkb3VibGUsIHVubGVzcyBRVF9DT09SRF9UWVBFIHNheXMgb3RoZXJ3aXNlOlxuLy8gaHR0cHM6Ly9kb2MucXQuaW8vcXQtNS9xdGdsb2JhbC5odG1sI3FyZWFsLXR5cGVkZWZcbmZuIGRldGVjdF9xcmVhbF9zaXplKHF0X2luY2x1ZGVfcGF0aDogJnN0ciwgcXRfbGlicmFyeV9wYXRoOiAmc3RyKSB7XG4gICAgY29uc3QgQ09ORklHX0hFQURFUjogJidzdGF0aWMgc3RyID0gXCJxY29uZmlnLmhcIjtcbiAgICBsZXQgYiA9IG9wZW5fY29yZV9oZWFkZXIoQ09ORklHX0hFQURFUiwgcXRfaW5jbHVkZV9wYXRoLCBxdF9saWJyYXJ5X3BhdGgpO1xuXG4gICAgLy8gRmluZCBkZWNsYXJhdGlvbiBvZiBRVF9DT09SRF9UWVBFXG4gICAgZm9yIGxpbmUgaW4gYi5saW5lcygpIHtcbiAgICAgICAgbGV0IGxpbmUgPSBsaW5lLmV4cGVjdChcIlVURi04IGNvbnZlcnNpb24gZmFpbGVkIGZvciBxY29uZmlnLmhcIik7XG4gICAgICAgIGlmIGxpbmUuY29udGFpbnMoXCJRVF9DT09SRF9UWVBFXCIpIHtcbiAgICAgICAgICAgIGlmIGxpbmUuY29udGFpbnMoXCJmbG9hdFwiKSB7XG4gICAgICAgICAgICAgICAgcHJpbnRsbiEoXCJjYXJnbzpydXN0Yy1jZmc9cXJlYWxfaXNfZmxvYXRcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYW5pYyEoXCJRVF9DT09SRF9UWVBFIHdpdGggdW5rbm93biBkZWNsYXJhdGlvbiB7fVwiLCBsaW5lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZm4gZGV0ZWN0X3ZlcnNpb25fZnJvbV9oZWFkZXIocXRfaW5jbHVkZV9wYXRoOiAmc3RyLCBxdF9saWJyYXJ5X3BhdGg6ICZzdHIpIC0+IFN0cmluZyB7XG4gICAgY29uc3QgVkVSU0lPTl9IRUFERVI6ICYnc3RhdGljIHN0ciA9IFwicXRjb3JldmVyc2lvbi5oXCI7XG4gICAgbGV0IGIgPSBvcGVuX2NvcmVfaGVhZGVyKFZFUlNJT05fSEVBREVSLCBxdF9pbmNsdWRlX3BhdGgsIHF0X2xpYnJhcnlfcGF0aCk7XG5cbiAgICAvLyBGaW5kIGRlY2xhcmF0aW9uIG9mIFFUQ09SRV9WRVJTSU9OX1NUUlxuICAgIGZvciBsaW5lIGluIGIubGluZXMoKSB7XG4gICAgICAgIGxldCBsaW5lID0gbGluZS5leHBlY3QoXCJVVEYtOCBjb252ZXJzaW9uIGZhaWxlZCBmb3IgcXRjb3JldmVyc2lvbi5oXCIpO1xuICAgICAgICBpZiBsaW5lLmNvbnRhaW5zKFwiUVRDT1JFX1ZFUlNJT05fU1RSXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBsaW5lLnNwbGl0KCdcXFwiJykubnRoKDEpLmV4cGVjdChcIlBhcnNpbmcgUVRDT1JFX1ZFUlNJT05fU1RSXCIpLmludG8oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwYW5pYyEoXCJDb3VsZCBub3QgZGV0ZWN0IFF0IHZlcnNpb24gZnJvbSBpbmNsdWRlIHBhdGhzXCIpXG59XG5cbmZuIG1haW4oKSB7XG4gICAgcHJpbnRsbiEoXCJjYXJnbzpydXN0Yy1jaGVjay1jZmc9Y2ZnKG5vX3F0KVwiKTtcbiAgICBwcmludGxuIShcImNhcmdvOnJ1c3RjLWNoZWNrLWNmZz1jZmcocXRfNV8xMSxxdF81XzEyLHF0XzVfMTUscXJlYWxfaXNfZmxvYXQpXCIpO1xuXG4gICAgLy8gU2ltcGxlIGNmZyEodGFyZ2V0XyogPSBcIi4uLlwiKSBkb2Vzbid0IHdvcmsgaW4gYnVpbGQgc2NyaXB0cyB0aGUgd2F5IGl0IGRvZXMgaW4gY3JhdGUncyBjb2RlLlxuICAgIC8vIGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvY2FyZ28vcmVmZXJlbmNlL2Vudmlyb25tZW50LXZhcmlhYmxlcy5odG1sI2Vudmlyb25tZW50LXZhcmlhYmxlcy1jYXJnby1zZXRzLWZvci1idWlsZC1zY3JpcHRzXG4gICAgbGV0IGNhcmdvX3RhcmdldF9vcyA9IHN0ZDo6ZW52Ojp2YXIoXCJDQVJHT19DRkdfVEFSR0VUX09TXCIpLnVud3JhcCgpO1xuICAgIGxldCBjYXJnb190YXJnZXRfZW52ID0gc3RkOjplbnY6OnZhcihcIkNBUkdPX0NGR19UQVJHRVRfRU5WXCIpLnVud3JhcCgpO1xuXG4gICAgcHJpbnRsbiEoXCJjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1RVF9JTkNMVURFX1BBVEhcIik7XG4gICAgcHJpbnRsbiEoXCJjYXJnbzpyZXJ1bi1pZi1lbnYtY2hhbmdlZD1RVF9MSUJSQVJZX1BBVEhcIik7XG4gICAgbGV0IChxdF92ZXJzaW9uLCBxdF9pbmNsdWRlX3BhdGgsIHF0X2xpYnJhcnlfcGF0aCkgPSBtYXRjaCAoXG4gICAgICAgIHN0ZDo6ZW52Ojp2YXIoXCJRVF9JTkNMVURFX1BBVEhcIikub2soKS5maWx0ZXIofHh8ICF4LmlzX2VtcHR5KCkpLFxuICAgICAgICBzdGQ6OmVudjo6dmFyKFwiUVRfTElCUkFSWV9QQVRIXCIpLm9rKCkuZmlsdGVyKHx4fCAheC5pc19lbXB0eSgpKSxcbiAgICApIHtcbiAgICAgICAgKFNvbWUocXRfaW5jbHVkZV9wYXRoKSwgU29tZShxdF9saWJyYXJ5X3BhdGgpKSA9PiB7XG4gICAgICAgICAgICBsZXQgcXRfdmVyc2lvbiA9IGRldGVjdF92ZXJzaW9uX2Zyb21faGVhZGVyKCZxdF9pbmNsdWRlX3BhdGgsICZxdF9saWJyYXJ5X3BhdGgpO1xuICAgICAgICAgICAgKHF0X3ZlcnNpb24sIHF0X2luY2x1ZGVfcGF0aCwgcXRfbGlicmFyeV9wYXRoKVxuICAgICAgICB9XG4gICAgICAgIChOb25lLCBOb25lKSA9PiB7XG4gICAgICAgICAgICBwcmludGxuIShcImNhcmdvOnJlcnVuLWlmLWVudi1jaGFuZ2VkPVFNQUtFXCIpO1xuICAgICAgICAgICAgbGV0IHF0X3ZlcnNpb24gPSBxbWFrZV9xdWVyeShcIlFUX1ZFUlNJT05cIik7XG4gICAgICAgICAgICBsZXQgcXRfaW5jbHVkZV9wYXRoID0gcW1ha2VfcXVlcnkoXCJRVF9JTlNUQUxMX0hFQURFUlNcIik7XG4gICAgICAgICAgICBsZXQgcXRfbGlicmFyeV9wYXRoID0gcW1ha2VfcXVlcnkoXCJRVF9JTlNUQUxMX0xJQlNcIik7XG4gICAgICAgICAgICAocXRfdmVyc2lvbiwgcXRfaW5jbHVkZV9wYXRoLCBxdF9saWJyYXJ5X3BhdGgpXG4gICAgICAgIH1cbiAgICAgICAgKFNvbWUoXyksIE5vbmUpIHwgKE5vbmUsIFNvbWUoXykpID0+IHtcbiAgICAgICAgICAgIHBhbmljIShcIlFUX0lOQ0xVREVfUEFUSCBhbmQgUVRfTElCUkFSWV9QQVRIIGVudiB2YXJpYWJsZSBtdXN0IGJlIGVpdGhlciBib3RoIGVtcHR5IG9yIGJvdGggc2V0LlwiKVxuICAgICAgICB9XG4gICAgfTtcbiAgICBkZXRlY3RfcXJlYWxfc2l6ZSgmcXRfaW5jbHVkZV9wYXRoLCAmcXRfbGlicmFyeV9wYXRoKTtcbiAgICBsZXQgcXRfdmVyc2lvbiA9IHF0X3ZlcnNpb24ucGFyc2U6OjxWZXJzaW9uPigpLmV4cGVjdChcIlBhcnNpbmcgUXQgdmVyc2lvbiBmYWlsZWRcIik7XG5cbiAgICBpZiBxdF92ZXJzaW9uIDwgVmVyc2lvbjo6bmV3KDUsIDYsIDApIHtcbiAgICAgICAgcmVwb3J0X2Vycm9yKCZmb3JtYXQhKFwiUXQgdG9vIG9sZC4gRm91bmQgdmVyc2lvbiB7fSwgYnV0IFF0IDUuNiBpcyByZXF1aXJlZC5cXG5JZiBzZXZlcmFsIHZlcnNpb25zIG9mIFF0IGFyZSBpbnN0YWxsZWQsIHNldCB0aGUgUEFUSCBvciBRTUFLRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyBpdCBmaW5kcyB0aGUgY29ycmVjdCB2ZXJzaW9uXCIsIHF0X3ZlcnNpb24pKTtcbiAgICB9XG5cbiAgICBsZXQgbXV0IGZsYWdzID0gdmVjIVtdO1xuICAgIGlmIGNhcmdvX3RhcmdldF9vcyA9PSBcIm1hY29zXCIge1xuICAgICAgICBmbGFncy5wdXNoKFwiLUZcIik7XG4gICAgICAgIGZsYWdzLnB1c2goJnF0X2xpYnJhcnlfcGF0aCk7XG4gICAgfVxuICAgIGlmIGNhcmdvX3RhcmdldF9lbnYgPT0gXCJtc3ZjXCIge1xuICAgICAgICAvLyBGb3IgaHR0cHM6Ly9jb2RlLnF0LmlvL2NnaXQvcXQvcXRiYXNlLmdpdC9jb21taXQvP2lkPTBkYzZjYzA1NTE3NGEwNTU2ZjJlNDFjYTI2OTAxM2IzYTcwNTZjODZcbiAgICAgICAgZmxhZ3MucHVzaChcIi9wZXJtaXNzaXZlLVwiKTtcbiAgICAgICAgLy8gUXQgYXNzdW1lIFVURi04IGVuY29kaW5nXG5cbls5NyBtb3JlIGxpbmVzIGluIGZpbGUuIFVzZSBvZmZzZXQ9MTgxIHRvIGNvbnRpbnVlLl0ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODk5NjE4MDJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJiZDM5ZTUyMiIsInBhcmVudElkIjoiMmUxOTNkYWIiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMyOjUyLjc5OVoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqQXNzZXNzaW5nIFF0IHZlcnNpb24gY29tcGF0aWJpbGl0eSBhbmQgYnVpbGQgY29uZmlndXJhdGlvbioqXG5cbioqUGxhbm5pbmcgd29ya3NwYWNlIGJ1aWxkIGZvciBib3RoIHRhcmdldHMqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOTBiZjlmNDgxOTE4ODBkNWExYjYzMzcwZDE2XCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpNa1VncGU4OVZXVERScFppYTZpdHdRZWdaUGdGV3Mzancwc1JKYVpMYUZNdHVwd0JzajYxT2FzQmhQQnBjT2tJc1RLTXBFaGZob3lEaUdpc2p4ZXdTeUVISHgwMHF1NE5tNi02bDhyVlZNcFVrQVNtUTB6UFNOeUtzdmM3RHpqckRXS0FMQXlENWhIbXFQWTJITF9meWUtVHJicGVYWWgwTUNHS2hYX0pNa1dZUldHN19kUVZWWllncnNvVEh5Yk8zWDJucUtWY09ONTNTSkJiN2ZnZXRrbWZFMGxZUVhpT1ZUaVhnWWpMQ290ZTdIeGFUSm9KaUF4MHNfbi04cklkalhycGNFNVIxX0ZaY1VvRURQN1pQamx2SDl4V080a0puM2w5WHJSd2w4bjRxbkxhanBGcDFsYThxU3NXZEdZNmFLOWgza3Iwd2lBT2ZoZmtOT3NhT0pnSGtIMG9ZN1IyT3dwZnZVMl9hNWktd201dVRGSXU4dHFnUXhybEM2OWtOWUszZ3BzTUZ3alBqRF9hSE9JWnNhWklhN0RveGc3T25pU0xaTjYtc3VsS1dteTdYMlA0czFPSlh2UW1yTDdGTzVsWVlhRF9oR2N1SWVCVndVSmNUTUFaV1RnX0x3OVVuUkNudE9YNkhtQ3owZFNqaWtLZmk4NzZzYzJ3NTFkVV8wQWNDdGZnWHdhNUlpaUVaZXZVVkJFcHVhNkUtaGQzTGpoaHBfMFR2bmE1M2Y4VFRETTJ5STlfYV9BOFFYeDF5d1k1TzFGWXN4YXk3Z2dJc0lIQndyblRmcDlLOGZMMFM1MF9rcjBiV1JhcmdWVnhud0FERnl0SFljaV9sWTFqajBheEVTRHhHLU1nS0h1Y2s1OVVjdmItTVBKV0VhNXdRX2RRQzVFMmxFOUNFTDRnNG5rWXUzQzd0anhScnFtWGRtX1Btb1lCVUxwSVc4cEZQdlFxa0xDV2dnaVRNaDhSYUlRNVBEWDU3dmdHZV9OUlZiNkNjeXNhUWctM1BRUnNxU2RFc0Jvcnl2Tk1ON3p4UklZdkEwSUQ3TTY3M2FSeXVCSFg4TWR2WGlSSHl1U3laVG5XYTV6LWZubmlPcTZMM1FDYmNyUk9Lckp5Rm5hcnVueWRZVF9kZWVIUmJmZ0RfSWN6d19zYU5iLUJvLVVCVUh0SmtaaGlVQ2NfRnRJWlJIbURWbS1raVN0SVktRTZuNzVVcjhGSGx3QUlvYkJUb0xYV29sWkw3aVVwZUlRRTBLRnpZY1VPd1p0R09VYUt4ZWZPWThMeHBxR2pBRk1CQ2EteHBjdmJVOGZ1Y0FYSmhDZjdmWjY0T2hEU05qZ0Roc0cyMXlIYkZ3VXFITVFaN2l5eGdLY2ZaOVRDdXlZMVJTQWxweE9TYjhSODlRMHlwVEY5bTI1QVN0dkc5SGJ3dGI4SF9URlZTVjN0cWstZ3VCdzdHZXVVVVUwV2VyNHVZMk1Vclk1ZXRjRmRzZ1ZoSkpPWFcyT0NfSDVJdnBnT2FKS2s2d2pfM1k3eWZWUC1mLVNINlhpdTZjRWtpeGRjcjRNSWxlN1lYMVJFc2RZTDAwQ3AyUTIyUUFHX1NmNXQ2RlNDazB1TmY5bVdfZG1PMVQyaWhOa2R1Ql9nVzk5STlYeG5zNFRCTmxRQjg0U1h1NGY5dzVfWUlTcmc1VWdrRGdDbVhiTGJxQXhtZkJFMHFmRjhMQ2FwaVpDVEY4ZzBWT0tDMUt2ZVBaaWVFQlFxMnU3dTAwM2UxWV9aRXRxcjFLQThUOXVLcjl5VVRLNTJic0RtbVFPY2N2aUozaVVZY1lTanNCbUxsU1l3YUJObEdlVHNvSjZTUThRVXM5QU5IR3dLYTM5eXJYUGY3VjkzMFR4OEdsTENUZ0pTRmctYm1ScWc0WDBncW9Mc29HWEFrSGl1REJDRXlJY1VnNUlkaUxJdWQ2Q3lfMWZmUlBYY0NwTHl0UFVNMElwX0xQaEt0Wl9hUHpsSzBvRkhWMnk4ZkFyNXNSd29TRlhydG5Ndl9pOW5NUFFyaGlDYUVRdW5HUDJxZWNib1B0dTNRbGk3QWxVV0VldjR1VjJQWjUzRWJ4eTlFTG1zY0FwbDNDN3pOdVB5a3dqdFNLM25kVGM1c2RDYk5Zb2lFLThVdGdsQWs4eUczX1BWc2t0ejJrY0x2aGE4dHg0TzlmQ2YzZFllN2F5aDJaa0NySDdILVpmeTczRi1Rb1J4SW9pWWd0c3lzM0hzdHR6SGkwLWJTOEhyZGgtazVibnhkY2FRcGh3VFcwS3JNVVc0LWFRenFzSVFtMVFta1Q1bjN3ajVZMXFYaWg0N0tYY2p3bGF6RThiNXJycmZ5Yi1PTnY5Vm5SMHRUNFpnSGFwTWRDQ0tjTS0zbjI0ckRlTGtLNGN3QUYzWjNXeUhUZzZBRDZrX2JuQm1OODFiX0R4NFlXSG5OeG1ZekpFQVZTR2d4MmJNQWVmdTVMYTVBd3ZSLXBiZjFDNWVqRTdTMzRmTkhuT25fMzNIX20xR3JyZmZ5N2dtTTBmdkhONGpySE1pSmc5ZEZZbFdPZFJJWDl5Nzh0ejk1V2xXWl9IMVEtVUM4ME9va1g2N3RoTGI4N2NGZE5JQzFwSHNKLXIzUGR0a3d3QzNLSUc3VzZmVDcwanZfZ1Z2OURkVkdfYmw5ZjNBLXlvbXFzdURWckJaLUdmODlnSWpydVZyRUhpWUNOUUVJaVduakF1SkVUUWpQNGVLM2JXU2dUSktQX0pxRkRvNUVpTGxnUTJBQ05oN2dGWm1SbWllTXFVUHBPZzEzNTlnU2E0aW5RT3N6RzhpOHk2WTg3REZvLTB4M2xyblFRZHBzMm9SSm9KS1JodHkzQ1EzdUVFSEFKRTFfUnM2VmtaTVRySE9CNXRROHRNXCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipBc3Nlc3NpbmcgUXQgdmVyc2lvbiBjb21wYXRpYmlsaXR5IGFuZCBidWlsZCBjb25maWd1cmF0aW9uKipcIn0se1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlBsYW5uaW5nIHdvcmtzcGFjZSBidWlsZCBmb3IgYm90aCB0YXJnZXRzKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsXzBRNEhvbFJwTk9NY2dKa29uS29IRGJEd3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkxNGE3Yzg4MTkxODFiZWQzMTc5NGZmNWY4MiIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJhcHQtY2FjaGUgc2VhcmNoICdebGliZ3RrNC1kZXZlbCR8XnF0NS1xdWlja2NvbnRyb2xzMiR8XnF0NS1kZWNsYXJhdGl2ZSR8XnF0NS1iYXNlLWNvbW1vbiQnIn19LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsXzJoSG4xSzhlTDQ1YVc5aFhmb0xTTzNRTHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkxNGE3ZGM4MTkxYjdlMDU5NDZmZTEzNjUxNCIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJhcHQtY2FjaGUgc2hvdyBxdDUtYmFzZS1kZXZlbCAyPi9kZXYvbnVsbCB8IGdyZXAgLUUgJ14oRGVwZW5kc3xOYW1lfFZlcnNpb24pOicgfCBoZWFkIC0yMDsgYXB0LWNhY2hlIHNob3cgcXQ1LWRlY2xhcmF0aXZlLWRldmVsIDI+L2Rldi9udWxsIHwgZ3JlcCAtRSAnXihEZXBlbmRzfE5hbWUpOicgfCBoZWFkIC0xMCJ9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6Mjg2MSwib3V0cHV0IjozMzksImNhY2hlUmVhZCI6NTQ3ODQsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MTk4LCJ0b3RhbFRva2VucyI6NTc5ODQsImNvc3QiOnsiaW5wdXQiOjAuMDE0MzA1MDAwMDAwMDAwMDAyLCJvdXRwdXQiOjAuMDEwMTcsImNhY2hlUmVhZCI6MC4wMjczOTIsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA1MTg2N319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTk2MTgwNCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5MGEyNDA4ODE5MWExMDQ0YWIxYWU4OTY2ZjAifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMThiNmU3MDciLCJwYXJlbnRJZCI6ImJkMzllNTIyIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMjo1OC4xNTlaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsXzBRNEhvbFJwTk9NY2dKa29uS29IRGJEd3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkxNGE3Yzg4MTkxODFiZWQzMTc5NGZmNWY4MiIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6ImxpYmd0azQtZGV2ZWwgLSBEZXZlbG9wbWVudCBmaWxlcyBhbmQgdG9vbHMgZm9yIEdUSzQgYXBwbGljYXRpb25zXG5xdDUtYmFzZS1jb21tb24gLSBDb21tb24gcGFja2FnZSBmb3IgUXQ1XG5xdDUtcXVpY2tjb250cm9sczIgLSBRdDUgLSBtb2R1bGUgd2l0aCBzZXQgb2YgUXRRdWljayBDb250cm9scyAyXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5ODk5NzgxNTh9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI3YTcwNWNjNSIsInBhcmVudElkIjoiMThiNmU3MDciLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMyOjU4LjE1OVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfMmhIbjFLOGVMNDVhVzloWGZvTFNPM1FMfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOTE0YTdkYzgxOTFiN2UwNTk0NmZlMTM2NTE0IiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiVmVyc2lvbjogNS4xNS4xOC1hbHQxOnNpc3lwaHVzKzQwODU4Ni4xMDAuMS4zQDE3NzE0MTg1MjFcbkRlcGVuZHM6IHBrZ2NvbmZpZyhnbCksIHBrZ2NvbmZpZyhlZ2wpLCBnY2MtYysrLCAvYmluL2Jhc2gsIC91c3IvYmluL2VudiwgL3Vzci9saWI2NC9wa2djb25maWcsIGNvcmV1dGlscywgZ2xpYmMta2VybmhlYWRlcnMtZ2VuZXJpYywgZ2xpYmMta2VybmhlYWRlcnMteDg2LCBncmVwLCBsaWJYMTEtZGV2ZWwsIGxpYmRvdWJsZS1jb252ZXJzaW9uLWRldmVsLCBsaWJnbHZuZC1kZXZlbCwgbGliaWN1LWRldmVsLCBsaWJzc2wtZGV2ZWwsIGxpYnN0ZGMrKy5zby42KEdMSUJDWFhfMy40LjMyKSg2NGJpdCksIGxpYnVkZXYtZGV2ZWwsIGxpYnhjYi1kZXZlbCwgbGlieGtiY29tbW9uLWRldmVsLCBsaWJ6c3RkLnNvLjEoKSg2NGJpdCkgKD49IHNldDpsaXNhVGl5MTcwT2NON1Z5dGU5KSwgcGVybChDb25maWcucG0pLCBwZXJsKEN3ZC5wbSksIHBlcmwoRW5nbGlzaC5wbSksIHBlcmwoRmlsZS9CYXNlbmFtZS5wbSksIHBlcmwoRmlsZS9GaW5kLnBtKSwgcGVybChGaWxlL1BhdGgucG0pLCBwZXJsKEZpbGUvU3BlYy5wbSksIHBlcmwoR2V0b3B0L0xvbmcucG0pLCBwZXJsKElPL0ZpbGUucG0pLCBwZXJsLWJhc2UsIHV0aWwtbGludXgsIHZ1bGthbi1oZWFkZXJzLCB4b3JnLXByb3RvLWRldmVsLCB4eGQsIHJwbS1tYWNyb3MtcXQ1ICg9IDUuMTUuMTgtYWx0MTpzaXN5cGh1cys0MDg1ODYuMTAwLjEuMyksIGxpYnF0NS1zcWwgKD0gNS4xNS4xOC1hbHQxOnNpc3lwaHVzKzQwODU4Ni4xMDAuMS4zKSwgbGlicXQ1LW5ldHdvcmsgKD0gNS4xNS4xOC1hbHQxOnNpc3lwaHVzKzQwODU4Ni4xMDAuMS4zKSwgbGlicXQ1LW9wZW5nbCAoPSA1LjE1LjE4LWFsdDE6c2lzeXBodXMrNDA4NTg2LjEwMC4xLjMpLCBsaWJxdDUteG1sICg9IDUuMTUuMTgtYWx0MTpzaXN5cGh1cys0MDg1ODYuMTAwLjEuMyksIGxpYnF0NS1jb25jdXJyZW50ICg9IDUuMTUuMTgtYWx0MTpzaXN5cGh1cys0MDg1ODYuMTAwLjEuMyksIGxpYnF0NS1wcmludHN1cHBvcnQgKD0gNS4xNS4xOC1hbHQxOnNpc3lwaHVzKzQwODU4Ni4xMDAuMS4zKSwgbGlicXQ1LXRlc3QgKD0gNS4xNS4xOC1hbHQxOnNpc3lwaHVzKzQwODU4Ni4xMDAuMS4zKSwgbGlicXQ1LWVnbGZzZGV2aWNlaW50ZWdyYXRpb24gKD0gNS4xNS4xOC1hbHQxOnNpc3lwaHVzKzQwODU4Ni4xMDAuMS4zKSwgbGlicXQ1LXhjYnFwYSAoPSA1LjE1LjE4LWFsdDE6c2lzeXBodXMrNDA4NTg2LjEwMC4xLjMpLCBsaWJxdDUtZWdsZnNrbXNzdXBwb3J0ICg9IDUuMTUuMTgtYWx0MTpzaXN5cGh1cys0MDg1ODYuMTAwLjEuMylcbkRlcGVuZHM6IHF0NS1iYXNlLWRldmVsLCAvdXNyL2xpYjY0L3BrZ2NvbmZpZywgbGliUXQ1Q29yZS5zby41KCkoNjRiaXQpICg+PSBzZXQ6cWdnOU05NGNDY1lDa0VDR2Q4aGlmMmdxQXRQbGZJeWJzcTB3b05EQWtWbTk5RWZaeW1adFp1VUlkY3BaRHVralRiWVpyazh4SjhwRWxzRVN5OTJScjU3N3Q4NXppRUE5YW1CRUc3cldyd0h2R3lldjd3UTFweURPd0hKdHAyUjVaaFc0VE1ObGx3UEs0bkpVSzlSM0pvZDMyZ0dadmdORjNDWm1ZRGd3d2tmMUtRbm1KTmpWWnZabDh4eVZSeXV3dzR1QjVtMXJadGRsQ2N1RTMzWkVwZDFvSGI5cER5bTg1dXhwWmxTWThveFhtM1RNVzJ5NnVOc1RaRldaYTRGakJ0RHdKdm1YTnpwcG1SNVNadWFsV1NGRGsySU8zalhSaWU4YW85NUNvU3hSa0hrUVpKcVF4N1NpRVQ2enNjeHJ3Y1JRTGZVRXVyRXFPUXV4OXpXQUxNYXVtMW43ZXFTSzA2U0JqRHlIR0daY2VBWmlRVzY5ME93WkVmejI4Z1pHVWVuZ0E1MTBxcFdiTXJpbFp5eWdNVmtBRnNsUTBEQU9pV0JSdmpuWWQyRWk2dzg2TjFoZ1NobmlvVXhhQWlHUHNSVnQ0NkduM1pmZFptaXBvOWdaN1RQdTBqQ3hUMTJaRUdiWkxRM2FLbVJtdFgyQXVxdE5abG5zdkZwaDR6VVFGNTF0NmprNHRORUxzT1ZaM3FKUE92YThYVTBRU1psbHBmNzZsY2hzcVg0TjRhTkNueWltbFNSUkRjdWFUVDZPUzg1SkVFM2ZCYTFLNlNHQ2pzRjRVelFHVTh5Y1ltcGRaY2U1Vlo0NlRTWmJZa3Zpd1g2cjBpU0RJOThPMU91eFpDZzlxSVVrWWtCSXpzaW5tOVVSOWJPZlNaazhaMTBtbDRkeW9LUkM3QTFqdzQ3b256SVhGU3VxMlV3djhDenJ2ektaRXJ5YU5OWjM3bVhmYU5mYm5udXBtOGY3SU1hUjVUaE9zd0YyNnVSUFRkUXN3UW5VaHlRUFpzZ0FxekRGYURtek0xaHFDV2tveGhyQW5BOWlPOG9CRXBTa3M1UHQ4bnB1TFoyTXpORnJyUDc2NXphcVdQdlBJc2s3MzI1ekFpZWxTUGRBS3NjYUJXZ1UxNkoyanViNWtpTDNCdVJ3Z0RjVFFkYWpNb3hDeFJrY3JnNFJzVnJNdDE0alhZc3BDcWZ2eXY0SEhzeHRzU2M5ZVFiMGVQMHdkRzNiOFRDN21WejhCaDR6dDE2MDYxQVo1a0t3WEpaTGFXb015aHdDbGZjWko4c1ozM0RuUGpSdFg5SDZTTm1XeE1wa2xqazkzQU9OemVINTYzTUJDamNXeExKb2lHVXd4Z3Bmc2daYXZVeDRxWnZEMGxnZ2ptQ2VpRUJTbUpROFpKOVoxd1RRWTFvWjk0Wm1TVlR5VzJVTndPRmNQa3RsYmtKZUp6QXl4OVlMdlFsSTJ1dXBwNGFhenpzY1BJc0l0YU1qSmlnQmZRM0YxSXNMN2lQbVB6eWIzUEE5czVVeUp4em5qa1FaaXVnczNxNUdrWE1waFdPVkIzZ3pmYWdSVzdRTU1EWkhJRzBuWUh5YmlhUHJMMDZUeHlveXVyajBkMzdyRzBPVGZEWHpVeDRKcFdudDh3MVNHWHQ1ZUIxUVQ2NUJBZm9sWVpkdWVQTnVHV0RzTnh4OWIwWnlpTU1SWUZIc1NSQ2FFWkgyWjVMVndrTGFkbHBVRXB5UXo3QXNFY0ZYTlZ5QmdYbHl5b3UybXNvWWpVZkR2R0taajlaMERCOGgxM2M3Rnh6WEpRc2ZmN0pTY2l5cnFaSERMMkg4WERUNGU1WGYyQThER0Z0TVBDcFU0RkNaenJnaTR2NGhsUTlxWHYwMlZlYlh2Nkw2VXZJblN5UnFoY1gyUXlGSnJwT1I3SlFrazVGWDI1eHBXeXdacVowYThBV21ncGlGV2NybDRBdGNrSE5YempEcG9oNTYwSlN4amJLakNhdjRFV3VYeDhmeUtacFZXZ1AyeGUyZWN5Z0lxMVp0dDFVM1VQeFpENHBac2RMWFVCMmRCeFpnNjUzZTlLN0dOQTBDZFVPMG1kRkk0S25xdDdTYlVNQW5Dc29hakFpQkljN1dEYTRyeW80NnRNRHhMaFU2cHpwRkRUR3FZbkJqRE53ZnFvZWlPZ1hFZ2xDVWRBMVc4VDJNbEk5dXQzR0JnU1BwS05NQUVpVnlyQlAySEozRjNSZHlQY3EyV0dCQVZ4QVpDRE9MTVRKRDZOWmowbW9CVzJ3ajdVblE0NGphSkkya2hPQmlYY1cya1V6WmFRZjFMbTNPNG80bmt0eVRVTUhHaVNVNTlUcDJMS1ZvR2ZlU3NKZThwZmZhcHJxamN4TnRGbzRmWHhaeGVCSEZuVzhKYmtWZ2dvcklTemljTmNtODJvQmtJc25CWUtYVnBlemRRZE5aaU1DUEcxWmEyU0lvaVF0c1BSa1p5QU9RNnRaamlkWjU0S2FDZlpKVGxqeWphS0oxVndwdVVaMHdZNFl6SVhoV0g3aDJBWkpIWmFEakgyNnljVHpQUmFQVTg3SUhSZUJnNHdEdGpBTE5INWZNbkcyRk1mOXlET3VpWjNiTVhSczlTYjZJY1prZWpxb0FmNFk0MWYyaUtnMU50empUODFHNjJqdjhaOTEpLCBsaWJRdDVHdWkuc28uNSgpKDY0Yml0KSAoPj0gc2V0OnJrWVRhd1dnVjJPQVBORTZGdFZQRlozdkZYUnB4MHZYakV6V2Qwb2RXRnFCUHlxY3NKdXFGdXNEQk53ZFVGeUlaTHhIa3puWTFxb1VYOXZtWkZnY2FRYnVsa09tclJPdlZqaXNaSURwT1pucEtWSDh5ZTFENjJPY1k2UFJwa3JxczcxMUZvRDVPbGhhMmNSNDk0ZlppVXlFa3hiVkRJR3dONGlPQTlQOVBnSUgwRzVMN09ZNmphN1FCbUhaOEs0eWpGTVRTMTNocFlFb2QxOWtxbXNyVzV3TFFoaXliblRlRkF2S1RQanNhbW9DWkE5YmV4dTFWMTdUcklwQ0hhOE9NQjZHNFJDbER0cVpjRWxzeXNhU3ZXYVM4ZVlRaUcyVVNwMng4MXJ0VWs1YU1PV2d0eHZCRHhxNlphQVhRaE9wZ29VVFp4d0xWNzVBWkxLRjdjZm9zajJTcENBSG8wKSwgbGliUXQ1TmV0d29yay5zby41KCkoNjRiaXQpICg+PSBzZXQ6b2lFV2M5cFZMRnJxdXdFWkpQUW5RTVRVcDJVWUpLYkVGZHlUUEtVWjhHa1p1NG9VWWp5Z3JmYmF1RXN3MVJ1a2xhc0hia2RQUDFjZ0RvZ3dhM0NpSDF3TWY2ekJacmp5ZnhaRnRXV0YwKSwgbGliUXQ1V2lkZ2V0cy5zby41KCkoNjRiaXQpICg+PSBzZXQ6cmpNckUwc2NQWTVYUVBNQnREZDlHTkFHUm9pUDFUVktDd3hNZkdmcThXZmgwcTVPYUhrdDVYTDlKZjgwVlpGVjhubUdLeHVKQndiMUhKWjFHM0tOMDlkQnNTcU9TTXlDYTNHb3Nxak9pVER6Z2RwNWFnZncydk10WjA3c0JHeGM4YXJtRHFJMWFJbHhTeERjalpIejFYa1pkYjRJZXNaQmd0UXdteGZXb0xGblRCMmZtODRuZmVJV0JjWVlnalc5WjREdm1wZmFkWkxOMkM3eGdxMG1rNm55QlhBMXFkaEhId0xBZFdvUWFEMGU0dDZEOFpqWmt4ekhMMm12TGpDZ1lvbWdFNGdqQ2d4enhabmN2YmRwWVE5U2dFd2xOeEJTdFU3Q2RlckZhaTFDaHU0TlB6SXMxMjA0M1RlZlZaS3FkU2dnWFJ2WEQ1ejJuMFJaNURTOEt6aENVVVJibG85VjZtSEZseHdkQkVOUkdtVlhrWndzWkVYTzk3cmR6NnAyVHVZYmxwNmV3ZEtKWm80cmcwTU1PbTd0eUphWHR2UWp5YWo1UG1ZaXI5bnl2S2VFaGMzSzhXcnFUTFk1WUZSZ3ZNTVlObVpHWmlaczVRQndMTXNydzltNzIpLCBsaWJzdGRjKysuc28uNihHTElCQ1hYXzMuNC4xMSkoNjRiaXQpLCBsaWJzdGRjKysuc28uNihHTElCQ1hYXzMuNC4yMSkoNjRiaXQpLCBsaWJzdGRjKysuc28uNihHTElCQ1hYXzMuNC45KSg2NGJpdCksIHBrZ2NvbmZpZyhRdDVDb3JlKSwgcGtnY29uZmlnKFF0NUd1aSksIHBrZ2NvbmZpZyhRdDVOZXR3b3JrKSwgcGtnY29uZmlnKFF0NVRlc3QpLCBwa2djb25maWcoUXQ1V2lkZ2V0cyksIGxpYnF0NS1xdWlja3BhcnRpY2xlcyAoPSA1LjE1LjE4LWFsdDE6c2lzeXBodXMrNDA4NTg3LjEwMC4xLjEpLCBsaWJxdDUtcXVpY2t0ZXN0ICg9IDUuMTUuMTgtYWx0MTpzaXN5cGh1cys0MDg1ODcuMTAwLjEuMSksIGxpYnF0NS1xdWlja3dpZGdldHMgKD0gNS4xNS4xOC1hbHQxOnNpc3lwaHVzKzQwODU4Ny4xMDAuMS4xKSwgbGlicXQ1LXF1aWNrc2hhcGVzICg9IDUuMTUuMTgtYWx0MTpzaXN5cGh1cys0MDg1ODcuMTAwLjEuMSksIGxpYnF0NS1xbWxtb2RlbHMgKD0gNS4xNS4xOC1hbHQxOnNpc3lwaHVzKzQwODU4Ny4xMDAuMS4xKSwgbGlicXQ1LXFtbHdvcmtlcnNjcmlwdCAoPSA1LjE1LjE4LWFsdDE6c2lzeXBodXMrNDA4NTg3LjEwMC4xLjEpLCBycG0tYnVpbGQtcW1sICg9IDUuMTUuMTgtYWx0MTpzaXN5cGh1cys0MDg1ODcuMTAwLjEuMSlcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4OTk3ODE1OX19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImI3M2RkOGQ0IiwicGFyZW50SWQiOiI3YTcwNWNjNSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzM6MDIuNjY1WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipFbnN1cmluZyByb290IG1hbmlmZXN0IGxhY2tzIGRlZmF1bHQgbWVtYmVyKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkxYzkyYTQ4MTkxYTlhN2ExNjI4MzY1OTYzOVwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTWtkWU1oMVRaUUFLM0ZtSVVaOVV1cHV6LXVkSFNHdHRIX2RxbzFYakdzdnA3XzF2UUR2NjNyMGVVVERtck83RndRMVJKUl9QOW53NFZvRW1mdWNJdVB2QmtXaWY0Si0xYUZGd0hpeUNxaDhDazBGWm5PM05UQnc2T3hibUk3bG5Wd0Y1M2dOU29HeXVDRUp0Y0NlNTFFTUFBTmNYRWZ5dGFUV3lDOUNFN3kxOHBRLUZRM2xrOExNWDQ3Xy1GcTdkaG42YTZwVXZOLXFndkxQdDFLcHZhNkxsUWdXZzI3dDJPc2FTNERJMXM3ZXg0V3pyeF80Ny1PWDU3OE9rcllxSTZFa3RRb21ObHZ6U0kybWZjYk8yS1gwbUtZemZzWkxIbGRldWFxemtmN0ZoLTdBdkhjZ196STBNZC1IOWhBS3M1TWkzR3JIYUlINTdETVo0ZFBwZDZKcTVEd19hQXJGMEctcy10Nk1vSTNxZXJ6Zm5JRDZPX3V5aUZfVllVUV9CUXl3bVdfdkNueHRNeWxYUEM4clpHanhQelpLMlNMS2VwUGJ5WkpVOEEzWUREc2hGXzBJSEh1VkQtZHpQMGZDUGpfcEJjeTc1QmVIUldkWDAwYk5ZRExveWQwem9RMHdmRUhQLWVzVTUxX2V5TUlnREMxSXZLVHhLYlBCWDMyN3dlUmdkV0R6M1Jvb2RHTk5ibS13ZDhNejhrdTNXcnJrT19tUlNaV1lPQjZ5U0c3enRJdUJsTjdpVlpCWUNER3FGUzRLQlZpU0t0bkJnNFNOM1RXek5IZmpsU19WMzRjaWVQbFh2VkRvUjZjYmQ3eDM5MjRlSkNJdXpMZFpVbm1sQjNKZF9hNE4zV1djcWpTR2plYjc3TmVqbGVPRkw4U1loUHJ0eFN5U1dxcnotUWhWS2hSVllsd2I3dGFISGl2Wk9aQmhFODdXN2habTdaejA3cWJUNkU4N1ZudzlZX25vblYzTlZnbXByLWd1aG5odDh3bWotWnNmbVdWNmR0b2tKeW90T1JrY25oeWMzbXlmSEhrNUN1ZFdnRlZVYVBSZmpmNE5wM2oyWWtsTTdQZmJpQlFmT0VMbERZZDVEOGttQ05XUG15dXFhQXFzV3JhQ0w0WW5zUWRzNGRPaWpUVU5jUndxelhoeHJTVG93aklmRHFYc0c4UDNHRlU1UFBXY2VJMnVuOG95LW1GVVB3SndKUDJ4Y053Ym5oZXZEenpDZkpUaUVYUGRSajZyQUtadmt5djVweGZ6ZHBBVXBPVlBiS2htZGhZRFFpZV9wdVdnMk9DQWNiVGV1Zz09XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipFbnN1cmluZyByb290IG1hbmlmZXN0IGxhY2tzIGRlZmF1bHQgbWVtYmVyKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsXzNLdHdUNzY3azVJN2lBUGJWSHVaV1Z1YnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkxZDIwN2M4MTkxYTU4ZWQ3ZGNkYzZiNGRiOCIsIm5hbWUiOiJlZGl0IiwiYXJndW1lbnRzIjp7InBhdGgiOiJDYXJnby50b21sIiwiZWRpdHMiOlt7Im9sZFRleHQiOiJtZW1iZXJzID0gW1wiY3JhdGVzL2ZsYXNoZXItZ3RrXCIsIFwiY3JhdGVzL2ZsYXNoZXItcXRcIl1cbmRlZmF1bHQtbWVtYmVycyA9IFtcImNyYXRlcy9mbGFzaGVyLWd0a1wiXVxucmVzb2x2ZXIgPSBcIjNcIiIsIm5ld1RleHQiOiJtZW1iZXJzID0gW1wiY3JhdGVzL2ZsYXNoZXItZ3RrXCIsIFwiY3JhdGVzL2ZsYXNoZXItcXRcIl1cbnJlc29sdmVyID0gXCIzXCIifV19fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6NDEyNiwib3V0cHV0IjoxMTEsImNhY2hlUmVhZCI6NTY4MzIsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MTEsInRvdGFsVG9rZW5zIjo2MTA2OSwiY29zdCI6eyJpbnB1dCI6MC4wMjA2MzAwMDAwMDAwMDAwMDMsIm91dHB1dCI6MC4wMDMzMywiY2FjaGVSZWFkIjowLjAyODQxNiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDUyMzc2MDAwMDAwMDAwMDA2fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg5OTc4MTYxLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkxYTg3N2M4MTkxYTUxNTczMzEyOWMzY2M0MCJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIxNzZhMGFhNCIsInBhcmVudElkIjoiYjczZGQ4ZDQiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMzOjAyLjY2OFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfM0t0d1Q3NjdrNUk3aUFQYlZIdVpXVnVifGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOTFkMjA3YzgxOTFhNThlZDdkY2RjNmI0ZGI4IiwidG9vbE5hbWUiOiJlZGl0IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiU3VjY2Vzc2Z1bGx5IHJlcGxhY2VkIDEgYmxvY2socykgaW4gQ2FyZ28udG9tbC4ifV0sImRldGFpbHMiOnsiZGlmZiI6IiAxIFt3b3Jrc3BhY2VdXG4gMiBtZW1iZXJzID0gW1wiY3JhdGVzL2ZsYXNoZXItZ3RrXCIsIFwiY3JhdGVzL2ZsYXNoZXItcXRcIl1cbi0zIGRlZmF1bHQtbWVtYmVycyA9IFtcImNyYXRlcy9mbGFzaGVyLWd0a1wiXVxuIDQgcmVzb2x2ZXIgPSBcIjNcIiIsInBhdGNoIjoiLS0tIENhcmdvLnRvbWxcbisrKyBDYXJnby50b21sXG5AQCAtMSw0ICsxLDMgQEBcbiBbd29ya3NwYWNlXVxuIG1lbWJlcnMgPSBbXCJjcmF0ZXMvZmxhc2hlci1ndGtcIiwgXCJjcmF0ZXMvZmxhc2hlci1xdFwiXVxuLWRlZmF1bHQtbWVtYmVycyA9IFtcImNyYXRlcy9mbGFzaGVyLWd0a1wiXVxuIHJlc29sdmVyID0gXCIzXCJcbiIsImZpcnN0Q2hhbmdlZExpbmUiOjN9LCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTg5OTgyNjY4fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZjk3MWNiYWEiLCJwYXJlbnRJZCI6IjE3NmEwYWE0IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMzoxMy43NDlaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkFkZGluZyBpbml0aWFsIFJFQURNRSoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5MjJkODljODE5MTk4MjRhMjk4YjFkODI5NWZcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1ramdzaE1MU1dubHgyVnM2dFlJN2J2ZW1sd3FQaFFIWExpX3JWdkNFXzdyRG1XTkFVTzZhVXFwYm5fZnZqd3Y5WEo5a0ZEQVJQY0dTbk9Oc1VGY0xXWmhtbnlWQXpMc3JpUUc2Tl94aVdMRU9HOGFzb01RbkgydG81YlE0YjM1alZxOFdVMjVtUzNGSWplVFJ3b1lvYkZTVEt2YkJoU0tnb1gtdWJjd3NjYkNwVktwSHFqSDFfMkVJOElRWDZPM0JGRjZabFNjdGdybXF6Vi1sTTJXWVhDalNaRVFXcklEbXFqY2dlM2hUSFJHM1lFUjNad2hUZUFxY0EtWWNuUXBDS0Y5SWtLNWlKalllSllzWWIwcGlNUmxTbkc3eVpzdEY4ZDN0NzM2c3ZGZ0N5WkxmTUhpMHJpM01va2V5ZGlMZ2ZlVE1JSm8tNjAwTzNXMjh1MHUxc1g2b0NUTURXN0dGNlNZVy03bENUTDV4Q0RNY1JEQ3h1U01NNGx1WGJJa1VfbWl1WmRSM1Zha1hNR3I4NHFJNk5BdmR5MlRrTVd5dkMwWlpxSTRxdUo3c0IwMS03MldrYmU2QjJMTEVIVFBSUjZOSHhEWk02OVV4YkQ0N0t6Z1kzcGxSV1liOVZQeHJBSXZDS05HWEMyWVZ3TE9kTFRVTUlRRERsUHZuRTRuY2lwUzZrTlZQNmhROE82VkNGSnl3dDkyZlN4cE1HLXhxRW92VlA4S3ZpcWtpMWowa0dXRk53QUYwaHVwN3NwZXF3SmhWcVpUOWM2NlA5TG1POU1aQ3ZNN0JRRmtlZDFyRTBPVk4tVGNKUEpHUDBuOFQ1TFdNSllZZFJVZ0pWZlpQTFJjbzl2cUk0aTFwX1diZTNNRXZjSWZ6N3k0Y2hONEdrSm5IU2E5dWVGbFk5ZEdPYUw2alU5VVhpZWlXYS1maFkxMGVuNWVWMVpFQ253dHJxQktWMk8zN0ZVd0kyOTlyZU5BTkhWOURCOVN4WFh3djNKWUNXbUVKLUt1OGs2X1B1YkFUQ1g4SWttLThRZFpoaFhrNnZ5OGxsZk1wbUpwcmdFYjVsYXY3WVZnZGRPc2txQ0lmYzFfVXRKX0xfVlhia3VYWEtpc1ZEYnVJZjZCd0R1dGdUNU5TTFBpVVZzZmRUSl8tYUhTSUZWcVlFd1RuMnVhR3Z0MUxWRTI5VXo1X1BBOUdNVkVHU01rNndXRE5xbHRXYVBobTVVUmR4MTQ5YjJza0F3T0JkWC1TTT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkFkZGluZyBpbml0aWFsIFJFQURNRSoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9RM2h4MVNSRFRRMHZqUGlvb0I4cXVWeWJ8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5MjM0ZGNjODE5MWIxNzc5NDI5N2I1ZTUxNjAiLCJuYW1lIjoid3JpdGUiLCJhcmd1bWVudHMiOnsicGF0aCI6IlJFQURNRS5tZCIsImNvbnRlbnQiOiIjIEFMVCBJbWFnZSBXcml0ZXIgR1VJIHByb3RvdHlwZXNcblxuVGhpcyB3b3Jrc3BhY2UgY29udGFpbnMgdHdvIGluZGVwZW5kZW50IGludGVyZmFjZXMgZm9yIGBhbHQtcm9vdGZzLWluc3RhbGxlcmA6XG5cbi0gYGNyYXRlcy9mbGFzaGVyLWd0a2Ag4oCUIEdUSyA0L2xpYmFkd2FpdGFcbi0gYGNyYXRlcy9mbGFzaGVyLXF0YCDigJQgUXQgNS9RdCBRdWljayBDb250cm9scyAyXG5cbkJvdGggYXJlIGludGVyZmFjZSBwcmV2aWV3cy4gVGhleSBpbnNwZWN0IHN1cHBvcnRlZCBib2FyZHMgYW5kIHJlbW92YWJsZSBkcml2ZXMsIGJ1dCBkbyBub3Qgd3JpdGUgdG8gYW55IGRldmljZS5cblxuIyMgU3lzdGVtIGRlcGVuZGVuY2llc1xuXG5PbiBBTFQgTGludXg6XG5cbmBgYHNoXG5zdWRvIGFwdC1nZXQgaW5zdGFsbCBnY2MtYysrIGxpYmd0azQtZGV2ZWwgbGliYWR3YWl0YS1kZXZlbCBcXFxuICBxdDUtYmFzZS1kZXZlbCBxdDUtZGVjbGFyYXRpdmUtZGV2ZWwgcXQ1LXF1aWNrY29udHJvbHMyLWRldmVsIFxcXG4gIHF0NS1xdWlja2NvbnRyb2xzMlxuYGBgXG5cblRoZSBRdCBiaW5kaW5ncyBkaXNjb3ZlciBRdCB0aHJvdWdoIGBxbWFrZWAuIElmIHNldmVyYWwgUXQgdmVyc2lvbnMgYXJlIGluc3RhbGxlZCwgc2VsZWN0IFF0IDUgZXhwbGljaXRseTpcblxuYGBgc2hcbmV4cG9ydCBRTUFLRT0vdXNyL2xpYjY0L3F0NS9iaW4vcW1ha2VcbmBgYFxuXG4oVGhlIGV4YWN0IGBxbWFrZWAgcGF0aCBjYW4gYmUgZm91bmQgd2l0aCBgcnBtIC1xbCBxdDUtYmFzZS1kZXZlbCB8IGdyZXAgJy9xbWFrZSQnYC4pXG5cbiMjIEJ1aWxkXG5cbkJ1aWxkIGJvdGggYXBwbGljYXRpb25zOlxuXG5gYGBzaFxuY2FyZ28gYnVpbGRcbmBgYFxuXG5CdWlsZCBvciBydW4gb25lIGludGVyZmFjZTpcblxuYGBgc2hcbmNhcmdvIGJ1aWxkIC1wIGZsYXNoZXItZ3RrXG5jYXJnbyBidWlsZCAtcCBmbGFzaGVyLXF0XG5cbmNhcmdvIHJ1biAtcCBmbGFzaGVyLWd0a1xuY2FyZ28gcnVuIC1wIGZsYXNoZXItcXRcbmBgYFxuIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoxMTg3LCJvdXRwdXQiOjMzMSwiY2FjaGVSZWFkIjo1OTkwNCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjo3LCJ0b3RhbFRva2VucyI6NjE0MjIsImNvc3QiOnsiaW5wdXQiOjAuMDA1OTM1LCJvdXRwdXQiOjAuMDA5OTMsImNhY2hlUmVhZCI6MC4wMjk5NTIsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA0NTgxN319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk4OTk4MjY3MCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5MjEwMjA0ODE5MTgzNWZhOGM5NGM4YWU4YjIifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiM2Q0YTg5YzMiLCJwYXJlbnRJZCI6ImY5NzFjYmFhIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMzoxMy43NTFaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX1EzaHgxU1JEVFEwdmpQaW9vQjhxdVZ5YnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkyMzRkY2M4MTkxYjE3Nzk0Mjk3YjVlNTE2MCIsInRvb2xOYW1lIjoid3JpdGUiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJTdWNjZXNzZnVsbHkgd3JvdGUgOTY1IGJ5dGVzIHRvIFJFQURNRS5tZCJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk4OTk5Mzc1MX19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImE0Zjk2NzkwIiwicGFyZW50SWQiOiIzZDRhODljMyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzM6MjAuMzU3WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipEaWFnbm9zaW5nIFFNTCBzeW50YXggYW5kIHByb3BlcnR5IGlzc3VlcyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5MmI3YzU0ODE5MWJkYTY2MWFhNDMyMmViZTRcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1rdkE3dlViSF9keGhfRHFVcGhqalhNQlhxY3psVUo1TzIwUnRldWctQjM5aTNDUGZKdzByd2liZ2pLRi16NTZJb1hQRWljdGRia0ROTmRwby10YzhTYW1GeVMtZTRLYl9Dem1fX1FpbDVtaGNBX1RMVEUyNGwweHlXd1dJQXoxV29vd3VhU2ZmZWNLaFpxTWNUaGFSU1ZIYzdYYzU2Sy03YkdHaHIwUVNGWkxKTlVfblowZGpMelhfY2pNVUNoQl9CalVGRVRNRHhDSXFIUGVyX0E4aWZrY2l5SkpyZXN6QmxrT2RZRWxQMTdoMUE2TXo4QVVEWlgyMFVHVDVJZUQ4T2g0NGJXc3BEZjYyVGp5VjNhaGF1RWtxYjZVRndIUEFqR281M3Bkd1A5MjlERFJZbDJlQkUzNkNoX3pSUEdNYzhpZTJRM0J2Qkx6YkFNZTFQSzNLcFQwZlJLZXRKWXNiUGpWa2llTXRmelc2Qkdmc1BOa01XTjRVQlZJTWR4RV90SVJFemNseEdaVV9qV1pNWmFWNWdJQ2U1OW9zemhFeWVnZHNLaWkxdlBuRWNhUHZBUVd0OXl3SGxaSmQtQV9vMkRvNDUxVkJFYVpYcVBJeTRZNVItcDdXemxCM1Q2WnloQWZyM2ROQWdvQXNKNXVzYXAwWGo4V2hsVWxhcGQwNXpLdW56U3N4U2U5Y2ZFakd2UTI4WFpnclBlemNSQmk5Sm5pZ3J0bXJfT0VDLVNYN0hmNWhRQTIwMWVZZlJobkwzbGNZOVJLNVNzb0FBLXVvd1JaVlE0QmJNU3p5dGl4Um5GRklRam1vYkRTdHBvMXpEdTdJa21JckFQOHZVNHdvQV9mX2V3T0pLNDhFaGJ0SEdCc3FsSXBYLTlOLXZOV3hHWDg3RS1valhsVmpITy03TFJjS0dKRUhFUzJVSnQ0bUpMMTFqdXRCVm5tM1JBdThaQV8zeHA2eWN5a3NwdnpVLWhBS0ZfZ0p2b0FlSzZiems4X3hubkd4aGk0X0ZscTc0T1cybDkydXBqdzhjczQ0bVFYMURiWGJtOW9rMDUwal8yTTN4WWlaVE1nRm53Y19yOGlveHRUa21fSjU0NzJpUjVZemExLXc4RExsaGdZN052bldVNDFZc1F1TDVWVE0zRXJmSEl5TGd6ZXFDbG8wQ1lSeWNBdkZaUzk1ZTlMYUltMnNNUzZlLWZ1bDBrN2NzMlEtQ3p6QjlUT0Z6UzByQ194eGM3RE1vTmdYUndBOFFUWFU2RlNlNTJPdkNHVW5KVllGbmQ0aEJiWUxlQ0h4eTJyd3JWOV9QQkNIZmhNNWxhUnBYdFU1eEhVeElYUURGMVo3cmp3N1hGQWtFWEd4bHlBbFhrLWVLS2FGRFN6OURPdVZFOFNWRUw2MU1ZNVVKUWdvcE16cVJoVUJXbXBHZG9rclB1RnFTWVljZnd0YWNGYV9ldUhTYnBNeDdqeXZmeE1UaTVBcHhDUzVKOTRCVzNfTmNsUUYzYlVrd21jd05xb2FsanJERlhwYWRFTXU3UktzNDl2NTE1aHVPZi00S0dUUTVrNWtxdzgxWC1TMTY4dDR5bC1oVnFGSUtLTkl4UWREYkZBOUIxTk9lbWtDU0hZbk82dDA5dFVNT2djdGhmQVJzc1FKV3BNYXdfZmhwZkFIRm5nanF1ei1waENpM2JYMFRmOXJrU2dfejVXZUYyaVNVQmU3S2RhRzctNXljTGxwSm1MMzQtNTl6V3FXVmxldW1EZTlSdlAxbFJ1SllOck9JS3JNOXVleHJUSWMtUi1YLUFOYmVPSHdLMEZXVGZ3Nm95SEVKZHZiemR2M0NRRkthRG5HZ0ZhWHQ4TXg1UThPT3Q1eHBySmNScVBJSWpHMkpkWU9HWjB2Tk9YbURFb0NwdHVxck1nM2RSdnhwYVd5NVJndGFhdFd6ZTRKekF5bXRORkVtdnJzbGxZa2VQRDQwVHZ6VDBJUHNTNTdZV1htX1pvRlpTaVpEQVNuY2dmQWhNa2VBdERWaVBCTl9QNFE4OGJQblNvUHlOc1lwVWxPLWJSZ2V4NWxWVU1zbFh0b3diaXFjTGJtd1RQaFlhQmdMTTJhc0JveWhSTEd3UzE5UFhINWN2OXprVFJKZVhlZUdBaG5DNmlLREZ0UlVUbFpodzA5MlhWUXlWQWMzakZmTUl2MW9tbW1DMEo0b1JRekE5OFVOOFREV0FQbm5XUEtXeTFDNDB3cFNQT0JJWTlreXFRRnBQbHhRNEdsZ0k2cUtjMmNMV04yWWpDNDV6QlA5blAyVXdsa3hiY3Zmd01xZjZ3dUxfXzdXMUdSVXNmZHJVdjdBMTlyampVbmJ2SDZ1MEotMlNvSmdSVV92SHFxTUFPSDR0bFdvd3ZfdGlpUnhKOGxGeHJMQ0RSWUFZYS1pOFExWjJjcmszaklJcnBrWUZLNUtIVlVfRFd5OUxTRVllbEJNNEtiR2M1YXg4XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipEaWFnbm9zaW5nIFFNTCBzeW50YXggYW5kIHByb3BlcnR5IGlzc3VlcyoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF95UlBVMm5ORUcyRWY3dWVoSngwaVJzTjl8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5MmZlNTQwODE5MWI1OWI1YWNlMjhhNGQ5N2MiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiZ3JlcCAtbiAnc3BsaXQnIGNyYXRlcy9mbGFzaGVyLXF0L3FtbC9NYWluLnFtbDsgZ3JlcCAtbiAncGFsZXR0ZScgY3JhdGVzL2ZsYXNoZXItcXQvcW1sL01haW4ucW1sIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0Ijo1MTIsIm91dHB1dCI6MTk0LCJjYWNoZVJlYWQiOjYwOTI4LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjE0NCwidG90YWxUb2tlbnMiOjYxNjM0LCJjb3N0Ijp7ImlucHV0IjowLjAwMjU2LCJvdXRwdXQiOjAuMDA1ODIwMDAwMDAwMDAwMDAwNSwiY2FjaGVSZWFkIjowLjAzMDQ2Mzk5OTk5OTk5OTk5OCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDM4ODQ0fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTg5OTkzNzUyLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkyYTFlODg4MTkxOTFhODM5MjQyNjU2YjRlNiJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIxOTAyMTQyNSIsInBhcmVudElkIjoiYTRmOTY3OTAiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMzOjIwLjM2M1oiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfeVJQVTJuTkVHMkVmN3VlaEp4MGlSc045fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOTJmZTU0MDgxOTFiNTliNWFjZTI4YTRkOTdjIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiMjE6ICAgIHByb3BlcnR5IHZhciBkcml2ZU5hbWVzOiBhdmFpbGFibGVEcml2ZXNUZXh0Lmxlbmd0aCA/IGF2YWlsYWJsZURyaXZlc1RleHQuc3BsaXQoXCJcXG5cIikgOiBbXVxuMjk6ICAgICAgICB2YXIgcGFydHMgPSBwYXRoLnNwbGl0KFwiL1wiKVxuMjU5OiAgICAgICAgICAgIHZhciBsaW5lcyA9IHN1cHBvcnRlZEJvYXJkc1RleHQuc3BsaXQoXCJcXG5cIilcbjI2NjogICAgICAgICAgICAgICAgICAgIHZhciBuYW1lcyA9IGxpbmUuc3BsaXQoL1xcXFxzKy8pXG43ODogICAgICAgICAgICAgICAgY29sb3I6IHBhbGV0dGUubWlkXG45MDogICAgICAgICAgICAgICAgICAgIExhYmVsIHsgdGV4dDogcXNUcihcIkNob29zZSBhIHJvb3QgZmlsZXN5c3RlbSBhcmNoaXZlIG9yIGEgcmVhZHktbWFkZSBkaXNrIGltYWdlLlwiKTsgY29sb3I6IHBhbGV0dGUubWlkIH1cbjEyNDogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcGFsZXR0ZS5taWRcbjEzNzogICAgICAgICAgICAgICAgICAgIExhYmVsIHsgdGV4dDogcXNUcihcIkJvYXJkcyBhcmUgZ3JvdXBlZCBieSBwbGF0Zm9ybSwgU29DIGZhbWlseSwgYW5kIGFyY2hpdGVjdHVyZS5cIik7IGNvbG9yOiBwYWxldHRlLm1pZCB9XG4xNDc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcGFsZXR0ZS5taWRcbjE2MTogICAgICAgICAgICAgICAgICAgIExhYmVsIHsgdGV4dDogcXNUcihcIldyaXRlIHRvIHJlbW92YWJsZSBtZWRpYSBvciBjcmVhdGUgYW4gaW1hZ2UgZmlsZS5cIik7IGNvbG9yOiBwYWxldHRlLm1pZCB9XG4yMzM6ICAgICAgICAgICAgTGFiZWwgeyB0ZXh0OiBxc1RyKFwiTm90aGluZyB3aWxsIGJlIHdyaXR0ZW4gdW50aWwgeW91IGNvbmZpcm0uXCIpOyBjb2xvcjogcGFsZXR0ZS5taWQ7IExheW91dC5maWxsV2lkdGg6IHRydWUgfVxuMjk4OiAgICAgICAgICAgICAgICBjb2xvcjogcGFsZXR0ZS5taWRcbjMxMjogICAgICAgICAgICAgICAgICAgIGNvbG9yOiBwYWxldHRlLmFsdGVybmF0ZUJhc2VcbjMxOTogICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcGFsZXR0ZS5oaWdobGlnaHRcbjM0OTogICAgICAgICAgICBMYWJlbCB7IHRleHQ6IHFzVHIoXCJUaGlzIGlzIGFuIGludGVyZmFjZSBwcmV2aWV3LiBObyBkYXRhIHdpbGwgYmUgd3JpdHRlbi5cIik7IGNvbG9yOiBwYWxldHRlLm1pZCB9XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTAwMDAzNjN9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI3MjVkNjdiNSIsInBhcmVudElkIjoiMTkwMjE0MjUiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMzOjMwLjc3OFoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqRml4aW5nIFFNTCByZWdleCBzcGxpdHRpbmcgYW5kIGNsYXJpZnlpbmcgcGFsZXR0ZSBzY29wZSoqXG5cbioqUGxhbm5pbmcgZGV2aWNlIHBhdGggZHVwbGljYXRpb24gYW5kIGdyb3VwaW5nIGZpeGVzKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkzMmQ2MDA4MTkxYmU4Y2JjM2ZlMzk2MDYyOFwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTWs1VHFJa2wxQ3MwdHZkOVpXT0xfWDQzakpxSnF4YjI3UXJNM04zY1R2VkdWeHNtM0JSTHphVG96X2JxUS1ReUhsUXg0Wk92U05CZXVhOHluaGhUSUs5dFN4UjBCQjF6WnBTTEVEdHhSc3ljeHdqRHhVV0FsT1JNLTV0TWhCREZFR21zUU1HbDFSNGZfdEI5SE5BSzJDNEJaS1I1emY1T1Q2bkt6UUxpZHgteHN3a1RBY1M2RmJ1UHRiTlN0X3p4UDZFaDlmU3BuRHQzVzhpZXo1ZFhJWTNDMVJzU1FTdHJuY3RUV01GWlNiSlVhTndHSFZjeHRLamtyUFFEQUZ2TURTX0RWYUJGbXZFT3pZZFdwUGwzVGRTcml0QmJObGkyZUt3NkxraXhHM0h1eTlUbU5YNWJlMWZ0X0R3YnRVSUdEV1pGUVZlQXdpYmJyM093aFJJdU9kMG90YWpUS2RyRy1hT0FKcUc5QmttTi1TaGhKWTBKOXZqREdmTmFrcjUzdzFYay1LYWp4M3ZHbU9kbU5RQjhacDVpMGtNQldaWk5hY2ZkTEdhZVBNd0loallFTS03SzIxVEdHNkkwZVM4S0lyTG12NXVPNmRCeklhUEZIbThVUU5PbnNITmhheGZ2NmZaSi1iS2htN2hMMGdKQXNyTUd6Z240WFlEb01NMF9tNHJYN0x6bHNaR3hvWlU1dnlUSnZqRXZaVzM4WTZEXy01VHVoMUk2YmVNTng2S2g2RGo0UlZFRGJhWDdOMlpBckZKZGNrVlJDdXlCR0k0TVRmVG80X2Z6c180UVV4Qm5IX19jUGE2Um5qUm5YamRNdFdIaE5vLTRwNlc5SUR0YTR4UnNOR3d5ei1DX1NQcFdCNTYtLVJkUGZFLUpsQW8wdlc5elMzVlhNd0h3VG83aG1yZkxPYUFrODNDQTNncUtUV1N5MTFldFpGS3lQcHlzUkt2MV9TSVQ4TG1Zdng0SXZubUJ6MEdvanR2V3dEazZ1Q281MmxnR3FfbkhRQkF6TFE5cHpLZXpBY1U0LUpkdjdPOEQ5bmlsWV9OSVMtM3ZVMi0zM3F0MlRuZnZhSGRlYnFablNPckdYbmNKYTJhYjEyVVVLa19GdktEQV9pNDlhM1JKY0V3cHVaM0xMZmdlbC1nR1hmaWY5VjllLVZndG4xTl9xMTFBSWFHWjMybUQ0cF9Bb0tSVGZzdEZHSmN5ZEdaUWowdHBVWDFfUzVXWkhzX0Q5QjZTWG45bDJtbFpyZkJfT2t5TjRUTS1RLVdRMUVSMmduRHkyNTlCczhCY3FuTHlkRjNjSGJNaDh2SUowTUN6UHN6RlJlN1pQWVEwSGRYOHpCeXF3cFRZbHhaUFdSdXFyeGFxZTFIeHVRUWJqZ1VJZzJjN0N5NUF4N1hrVTNaZkxscjl4Vmt4U05SZ2VDZ29yd2Y1VkR1YjJvZWY2RFhPTk9hd2p5eHdyS3o3M3lHYlhCWUMzbVV2S2xicmRMM0FmclUyOVlYRWdjb3g4WEN4eWdjSTZDUnZGU2VpVmJ4STg1UGNQVTN4V1dVZE9LSi03RURiVVpOOVI3bzVqSDRqVnBpMk9CUkRva1FmUVhjVEFGTkx3MGd1NVc5dko1MU1OQ0hmQ0VYaGZDSUpRem9kTkRSUmtfMEYwZWZwa25TWndyOGYza1BEb1Bxb1JLT0JsczdBR3ZHa1BZb0lZUkNoaTlDeWktQ2FjS2ZYVkJwOWxDbVdwVHhxRDljMk1pZ0llQWI3X3FNNWtHVzFBQlBoX0t2VG00R0tFMHdqQlRDVF9lYjM5NmZ6NnQ3bU0xWUlwNXROVG9BN1Y5RHhpTU8zM2xLZEZITFgxcV9FbGIzNzlBX0FwaU41TFVnc0RGcHZGZmNWZVNtZmhGVGVoSEtvdmpId19FT194UlJmLWs0M0JfZXpMRFp4TmVPVVFmVFp4U2JDSTV4UGhoWVRPTGI2MGhiaWxudkVHa2xVZEFLQTdxOXhhN2JITzZfeDNEbk1UTTIzdHVjV2E5VEdxU3dtd2NtTU1ZbjdfT2FZbHNTeENfNnRXbDdja0lzdmZEOFVjaXZRZm9pMmNPQ0lTNjgydEJ6MnNnN3FsOE1BZXZfZnU2SFU3aHdyckNOVkFnRHhMcEg2cC1kcS0za0o2dURMMEI0U0U0bVpwdVhWeVRZekc1cGVpUUJPd3ZQYjF5aUpWbU1aMHpJMzZoWVVZem5KSkp2ck9XVXNBTzRXdW1zZTY3SzJjeWdueEpyVkpmQ016blF2S2FoVThlWU92aXk1VVN2S3RpdXdpNmNKaXJqOHBTODlnOXZqcnhiYm5KcUh1c0R1Zm90UjB1cm9nVDRhVGpSLVRxTTlQVk9LOXhqd3pObWxXOTRNWmpYOE9ja0NTWmxMSndhX1kyd2V3U2tLZTJFd19Rc29qUmhjbEo0aWYxYklhdURLaTRtSDNjSWtIQnRTYTdBNXNBeklOVHI1TVptRkdueHA3Vzh4RS15Rkdmd05yYVROYm5xYnVhU0UxWk9XUW1PaEFlOV9udUJkV2ljLUFSNVBTYXB5MXlodG8xM2l5STJOempoZFFUc0I1SmM3Qi0ySVRBUkdjcktubVctQUJrTGdjLTJBaG03eTZmRHB4TXNhcWNDV3ZZWGlfMngtWEJxbzF4WmtvV3BPdzdYOW9HNmlhb2ljUXJ5dExodHRIdDU2d25XeG1LamlvVXB3OXlnLS0wRzhTbEJOYzBIZzlEdm1BV2N0QlJLZ3o0eTQ5QTNESlZDWERQUTBEbWV5Mm9iWXQtLVVDZ0tVTlBIbnowT1E1NDlLYU5aeG9SXzNEVmNXQTZ5YUltTmdyVF9Ic1NUNTY2R3kybjFLeWZpc2laRmQ2QkhLZy16V2o5blQ2anRyTTJfOVhtcE43cmh1T3lTMEF2Y1pYd29HaEJ0YVE9PVwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqRml4aW5nIFFNTCByZWdleCBzcGxpdHRpbmcgYW5kIGNsYXJpZnlpbmcgcGFsZXR0ZSBzY29wZSoqXCJ9LHtcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipQbGFubmluZyBkZXZpY2UgcGF0aCBkdXBsaWNhdGlvbiBhbmQgZ3JvdXBpbmcgZml4ZXMqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfS25nekdhRW5mRHFnbTU2Z0pRNzZtTmJwfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOTM5YTllODgxOTFiNjZiNDVmYjA1MDgxZGIxIiwibmFtZSI6ImVkaXQiLCJhcmd1bWVudHMiOnsicGF0aCI6ImNyYXRlcy9mbGFzaGVyLXF0L3FtbC9NYWluLnFtbCIsImVkaXRzIjpbeyJvbGRUZXh0IjoiICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBsaW5lLnNwbGl0KC9cXFxccysvKSIsIm5ld1RleHQiOiIgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lcyA9IGxpbmUuc3BsaXQoL1xccysvKSJ9LHsib2xkVGV4dCI6IiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHBhbGV0dGUuYWx0ZXJuYXRlQmFzZSIsIm5ld1RleHQiOiIgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB3aW5kb3cucGFsZXR0ZS5hbHRlcm5hdGVCYXNlIn0seyJvbGRUZXh0IjoiICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHBhbGV0dGUuaGlnaGxpZ2h0IiwibmV3VGV4dCI6IiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB3aW5kb3cucGFsZXR0ZS5oaWdobGlnaHQifV19fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6OTYyLCJvdXRwdXQiOjMwOCwiY2FjaGVSZWFkIjo2MDkyOCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoyMDMsInRvdGFsVG9rZW5zIjo2MjE5OCwiY29zdCI6eyJpbnB1dCI6MC4wMDQ4MSwib3V0cHV0IjowLjAwOTI0LCJjYWNoZVJlYWQiOjAuMDMwNDYzOTk5OTk5OTk5OTk4LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNDQ1MTR9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTAwMDAzNjUsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOTMwYmNhYzgxOTE5NzE0OGM3YTEyYjM5MTJiIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjI0NmUyZDNhIiwicGFyZW50SWQiOiI3MjVkNjdiNSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzM6MzAuNzgyWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9Lbmd6R2FFbmZEcWdtNTZnSlE3Nm1OYnB8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5MzlhOWU4ODE5MWI2NmI0NWZiMDUwODFkYjEiLCJ0b29sTmFtZSI6ImVkaXQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJTdWNjZXNzZnVsbHkgcmVwbGFjZWQgMyBibG9jayhzKSBpbiBjcmF0ZXMvZmxhc2hlci1xdC9xbWwvTWFpbi5xbWwuIn1dLCJkZXRhaWxzIjp7ImRpZmYiOiIgICAgIC4uLlxuIDI2MiAgICAgICAgICAgICAgICAgaWYgKCFsaW5lLmxlbmd0aCkgY29udGludWVcbiAyNjMgICAgICAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdChsaW5lLmxlbmd0aCAtIDEpID09PSBcIjpcIikge1xuIDI2NCAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtID0gbGluZS5zdWJzdHJpbmcoMCwgbGluZS5sZW5ndGggLSAxKVxuIDI2NSAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbi0yNjYgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBsaW5lLnNwbGl0KC9cXFxccysvKVxuKzI2NiAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lcyA9IGxpbmUuc3BsaXQoL1xccysvKVxuIDI2NyAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbmFtZXMubGVuZ3RoOyArK2opXG4gMjY4ICAgICAgICAgICAgICAgICAgICAgICAgIGFsbEJvYXJkcy5hcHBlbmQoeyBib2FyZE5hbWU6IG5hbWVzW2pdLCBwbGF0Zm9ybU5hbWU6IHBsYXRmb3JtIH0pXG4gMjY5ICAgICAgICAgICAgICAgICB9XG4gMjcwICAgICAgICAgICAgIH1cbiAgICAgLi4uXG4gMzA4ICAgICAgICAgICAgICAgICBzZWN0aW9uLmNyaXRlcmlhOiBWaWV3U2VjdGlvbi5GdWxsU3RyaW5nXG4gMzA5ICAgICAgICAgICAgICAgICBzZWN0aW9uLmRlbGVnYXRlOiBSZWN0YW5nbGUge1xuIDMxMCAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBib2FyZExpc3Qud2lkdGhcbiAzMTEgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQyXG4tMzEyICAgICAgICAgICAgICAgICAgICAgY29sb3I6IHBhbGV0dGUuYWx0ZXJuYXRlQmFzZVxuKzMxMiAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB3aW5kb3cucGFsZXR0ZS5hbHRlcm5hdGVCYXNlXG4gMzEzICAgICAgICAgICAgICAgICAgICAgTGFiZWwge1xuIDMxNCAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JzLmxlZnQ6IHBhcmVudC5sZWZ0XG4gMzE1ICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMubGVmdE1hcmdpbjogMTJcbiAzMTYgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy52ZXJ0aWNhbENlbnRlcjogcGFyZW50LnZlcnRpY2FsQ2VudGVyXG4gMzE3ICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHNlY3Rpb25cbiAzMTggICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5ib2xkOiB0cnVlXG4tMzE5ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBwYWxldHRlLmhpZ2hsaWdodFxuKzMxOSAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogd2luZG93LnBhbGV0dGUuaGlnaGxpZ2h0XG4gMzIwICAgICAgICAgICAgICAgICAgICAgfVxuIDMyMSAgICAgICAgICAgICAgICAgfVxuIDMyMiAgICAgICAgICAgICAgICAgZGVsZWdhdGU6IEl0ZW1EZWxlZ2F0ZSB7XG4gMzIzICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGJvYXJkTGlzdC53aWR0aFxuICAgICAuLi4iLCJwYXRjaCI6Ii0tLSBjcmF0ZXMvZmxhc2hlci1xdC9xbWwvTWFpbi5xbWxcbisrKyBjcmF0ZXMvZmxhc2hlci1xdC9xbWwvTWFpbi5xbWxcbkBAIC0yNjIsOSArMjYyLDkgQEBcbiAgICAgICAgICAgICAgICAgaWYgKCFsaW5lLmxlbmd0aCkgY29udGludWVcbiAgICAgICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KGxpbmUubGVuZ3RoIC0gMSkgPT09IFwiOlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSA9IGxpbmUuc3Vic3RyaW5nKDAsIGxpbmUubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbi0gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lcyA9IGxpbmUuc3BsaXQoL1xcXFxzKy8pXG4rICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBsaW5lLnNwbGl0KC9cXHMrLylcbiAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbmFtZXMubGVuZ3RoOyArK2opXG4gICAgICAgICAgICAgICAgICAgICAgICAgYWxsQm9hcmRzLmFwcGVuZCh7IGJvYXJkTmFtZTogbmFtZXNbal0sIHBsYXRmb3JtTmFtZTogcGxhdGZvcm0gfSlcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgIH1cbkBAIC0zMDgsMTYgKzMwOCwxNiBAQFxuICAgICAgICAgICAgICAgICBzZWN0aW9uLmNyaXRlcmlhOiBWaWV3U2VjdGlvbi5GdWxsU3RyaW5nXG4gICAgICAgICAgICAgICAgIHNlY3Rpb24uZGVsZWdhdGU6IFJlY3RhbmdsZSB7XG4gICAgICAgICAgICAgICAgICAgICB3aWR0aDogYm9hcmRMaXN0LndpZHRoXG4gICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQyXG4tICAgICAgICAgICAgICAgICAgICBjb2xvcjogcGFsZXR0ZS5hbHRlcm5hdGVCYXNlXG4rICAgICAgICAgICAgICAgICAgICBjb2xvcjogd2luZG93LnBhbGV0dGUuYWx0ZXJuYXRlQmFzZVxuICAgICAgICAgICAgICAgICAgICAgTGFiZWwge1xuICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMubGVmdDogcGFyZW50LmxlZnRcbiAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JzLmxlZnRNYXJnaW46IDEyXG4gICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy52ZXJ0aWNhbENlbnRlcjogcGFyZW50LnZlcnRpY2FsQ2VudGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogc2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQuYm9sZDogdHJ1ZVxuLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBwYWxldHRlLmhpZ2hsaWdodFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB3aW5kb3cucGFsZXR0ZS5oaWdobGlnaHRcbiAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICBkZWxlZ2F0ZTogSXRlbURlbGVnYXRlIHtcbiAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBib2FyZExpc3Qud2lkdGhcbiIsImZpcnN0Q2hhbmdlZExpbmUiOjI2Nn0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTAwMTA3ODJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI3M2NhODRjNCIsInBhcmVudElkIjoiMjQ2ZTJkM2EiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMzOjM3LjI1MloiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqVGVzdGluZyBhcHQtZ2V0IGRvd25sb2FkIGZlYXNpYmlsaXR5KioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0YzkzYzc3NzA4MTkxODgxYzQwMmJlM2Q5NjA4Y1wiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTWxBblNGXzg4OXBIRU1Yc3VmemVKclRjMFlLa1hCVzJJRzM0Y19PdEhsMGZDTjJ6ZXBMdk5KRndSU2gxRTUzQkduRlo1TWJZMldROWVWUDE3bzMyYmRvWjRjUFdGZDRjZUdROFVBOU1MaGJUdlBfNkNuX0ZtWTNHbXRjcTdIdmMxU3l4eWFUM1B6MlcxWVlMTVZYbFhuZVR0ZFp2TUVuVXpLcEFEbDBNd3U1bWc0YUpTQ09acUNfMHpYUG5vY0ZSWG5sdGszOVAtS3RocExYeFEwQUdCM2dNNUo1dW9qcDY5Wmd0ekpTWjk4c0RIRGw1LXVLZkpSZ3NzUndmUTRGeV9HY0wweEotVkg1S05wd09hVDhKSXdLSllYVFZ4S1pla1FXcDJKUGVzamFFU1BGZHF5V0RIektYeVRUY1EwcFVEZDFjck40bFZlNGo1WFpmWHVWN3dZejR1YV9qSlVtUkw5b1FVaW1LbGtjb0tfbkZLeHROUzhfTnc3Nm56NkUwVnZlVEFYRkJsSVNUZkRFaktxTkdXc0hCb1Z3SFVuY0xvcHpXbzYwN2pqQ0s3dlM5ZWszRmxkNU5WeDlUZl9PcXFyN0pRcFBZcElQc1IwU2N5QVkzM3J5NUhzQ0llYTJtcHNOZzFlYnlvdEFrSDJkRC1jWkxicjZTUS14dDZXR1VNUjBnSDNTZjlDdUp3VXRscmJDemNEWlc4QThhR0pmSUh1X0QxSU5lbFQtS0xCTVBNR2ZVRmdIcmdmWDNoOENENDR1MXhEUncyTzRkNEhuWnJFYkVPU1RMaG9WMlh4UmkwOVBHZVFYZVY1MzcySElEMnVpOUMzRHJhNzZYMkNTRkRZdXV3UjFwREdOQkhwN1VoSHB2Qm5PM0hVODkwaXJidllzTXJrTk1DUWRNQlAwRC1QQi1qNUZldmZjdi1yanNsbENYM2cyVkxvT3dWdFRCMFViX3hUYUNhUUFVM0NOS3JvS0tSUkwyNzdWQ2dFS21qMk0tYXBSQzhhaHpzQjVxaDNrcmVWaGR1QmdJQVR2Sy10aUt3S2FVTXh4OGJiWmQ1ZjJpdmFLX1dySWViWTE1eVNHZTRvNXB6SEEzeW13cWhHaUktcHhYdmJ3MDZ1clJGdVEwS2lremJwYlMzUi0yeWRpTTd5Z2JZR2xOUzNmWmkzOFdLTWhOWDdaRkY5Nng0SFNQbm5tbzNRN01pMXpYSTFYeUFJR1M1RGFlV2Y0alZPMnVKaS1JS01la19fZ2ItNTEzOG9Wd0pCYUxnRTctN1N0VXdRVU1tMHFKNkNJOHFsUDNyMVI3SDF1X3pGQkFkM1VieVk2U1ppbmZxbEIzSzQyU244VTJBbGpFbV9rTHFkaV9LQUc2aEdYVjFTUWo5cHNmd2lpWURNYmcxNDRsaFVlZTlBWGtTN2RzQ0J2UXVYLUdlcmkzTkZIMlNFUlFQYl9kcDhmVmVBdXNQMTdJMFBMUmdfcnp2R2xOTW85N0FtdURWaUpsRWRvZU5NWDlWZmxyX0tabk9QRWVvTGdoQlgzRDd3dkRrWGpsWFhYWEV0VXNaSGJISnZ0R29DeDNQSHhxNWx5MDEzZEQ2WT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlRlc3RpbmcgYXB0LWdldCBkb3dubG9hZCBmZWFzaWJpbGl0eSoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9qZ3FSd2NHWDBuZFlFNVJ1NjBxUmV5OFZ8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5NDBmNzljODE5MTllYTRhYTQ2ODA1MmZjMTIiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiYXB0LWdldCBkb3dubG9hZCBxdDUtYmFzZS1kZXZlbCAyPiYxIHwgaGVhZCIsInRpbWVvdXQiOjMwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjEyOTgsIm91dHB1dCI6ODEsImNhY2hlUmVhZCI6NjA5MjgsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6NDUsInRvdGFsVG9rZW5zIjo2MjMwNywiY29zdCI6eyJpbnB1dCI6MC4wMDY0OSwib3V0cHV0IjowLjAwMjQzLCJjYWNoZVJlYWQiOjAuMDMwNDYzOTk5OTk5OTk5OTk4LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wMzkzODR9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTAwMTA3ODMsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOTNiNTIwNDgxOTE4MzFmZGE1ZDYwMjVmMTMwIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImNlYTZhNDcyIiwicGFyZW50SWQiOiI3M2NhODRjNCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzM6MzcuMjYzWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9qZ3FSd2NHWDBuZFlFNVJ1NjBxUmV5OFZ8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5NDBmNzljODE5MTllYTRhYTQ2ODA1MmZjMTIiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJFOiBJbnZhbGlkIG9wZXJhdGlvbiBkb3dubG9hZFxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTkwMDE3MjYzfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMmRmNjJmYjEiLCJwYXJlbnRJZCI6ImNlYTZhNDcyIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMzo1Mi44MjdaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlZlcmlmeWluZyBRdCBkZXBlbmRlbmNpZXMgZm9yIHFtZXRhb2JqZWN0IGJ1aWxkKipcblxuKipJbnZlc3RpZ2F0aW5nIFJ1c3QgUVN0cmluZyBjb252ZXJzaW9uIGlzc3VlKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzk0NGM2ZGM4MTkxYWY4ODc5ZWVjZTY3OGM2MFwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTWxQZlh3NjJYZEc3WFdCWE5OU2xRZy1PZDhZYU1aMVJ2Wnk2UGhzcERuTmF4LWoweHJSdjBiNVZicTBmWTYtR2ZoRnBzT0VBTUF0ZGk0N2FRV09KUWhXRUdqRTNLWFZVQ2Q2cGgtWGtxWWZvUDZDeHpwM0J6ZU9tSEVZN192VDBPbXVkM2pMUEhOU241NXFEU1VKSnhlZ0RGNDhacHV5TGljc1Bra19vWXJIVUs0M0YzRTNfRjRaRURteVpZb2FMVmFyYnhwelNmSHNLOWRDcElSUHBHUkpMYXhDRGoteFhiT25RSGxYS1p0eUhQQll2SVBWV0Rvc3JFMm95ZnFlRW5ONVdDaFkxc1VTak1jQ000c01sOUx0cXl2a25aMDg5Q0xrS05aQ3RZVjNXZ0dZMHRUOUJ6LWh6TXlLTmNwa01GT243NVRHNjEza20ycVlqVEtSdEN2dVdkc0JIaGotVkF6bURndHdXVlhPYkZBcTNHLXBnV0prQkFReTJEZXh1WXJmRXlfZHRFWktUYndSaVgwVkIwenVZdTl5aElDWWluS1dPVkt2dVA0Z0k2YWV1VUJZTUFQQTJUdjJINXg3VDlha3lXLWZjellsWHh6YW1RVWdDX1dQVFNJZV84X21WTGVaWU5BNFhXbnFrQ3E2UFo5Z0k5Rkp0emZ6eFBwUVhFZmUtZHI3ZGFsZUktLU5vRm45cU9SaVoxQ0I0MEFnSkdyV2VxaEE3VXozZF84djZhelJSSUp3bXhndUl3M2hLa3NBUDNMSFNNTU5XeE1PMkREc0p6OHRXcTZMY0dWeXVBem8zc3lLX25aMnpFZHZTb2lKekVFZFQ1aWl2ZmR4NE1aazMxdDF3UGxmY2pxQ2NuX3R3QVlUc3ZoV0hFekExU2kzTUdFYm9hYXZyWVNtOHJqYUowLWR5dGx3Zm5OUG1BXzQwVWdOdUpaQVFXSDZpQ0lDQ1poQTFLRTMxT2VtWlpXZGFRckdLNTdvVUJoMHplazBDTUx1dWliSUdTTEp5OVdzRFh4bG04SkhPaUFJaGR2eDFmd0lhUjlad2FsSF9OMVpLcms1T1haRUlId21BM3ozd2d4NUdEWGhtSk1BNzRSLThCelFmR0Q1UTl1OVpEM1BreUE2OUtYZGVRblJHbkpraVdaM1paaS03RWFscjA5cnJuZmtwd1VzUW9HWVlESFN6ZG02T0g1V2ZDeE9uekY1VkIxNUsxbE44UU54T2lPVEthcnNmc1hUMS1RVEpJZzBrZWJWVVd0YXA3dE5OVjl2dS1nWUUxMXVWZ3dDbVpMb1R3OUVvM3RpQm13SnRGOWs0NzdQMG14c1hRV3BDOGZvV0w0dXZ3Mks4OUtBenN2LS1vYXFuWXk0enQ4TEVkNS1yTFJwZ1FTMHFsQzY3Z0FPTDN0M2lhSndhZWxyVkgwM3dWMkNjbGRNTDUzV1FPR1RYQmFaVnh5RGYxSld4UHNPMGFhSEd5QXF1MXc5cG1jLVRENVFvNkJaRjQ2OE1XcXdaWmJIeGRDRDV4ak5JRU9HSWp6Z3RMbjFoZ2ZiWXNaRnI5bjRDY1FRVzBtaWp1N3YtRVoxQ3g1cUZoczItTW80TXVacWpEYlFMdHBkc0xmeXZFczJSNVU4aVEzZURDak1mT191LTkwaDV0ekNZZWcyVVEzY0pid1hZT3cyeEduVWZnbV9ON1NNRDdiWnphbzJ3d012WWNOSXNEZUVZajFrb2R6RWdOVncxbHUyQ3hFZjBXbC1RdEM5aWpPWW42cVF3RktLYmVseVdtVkwyMVJhS0hfQWdhcXRweGh4QWY1QndTUGxsc2lkUWhKU0Y4QTJhMXZzbHZRY2Z6bURrR1NNeDNqQ3JCekdVTlF1R2pyX3ZzakR3NmdEUGF5UTFvcUVzY254OG1QRVVDS0NVNUI3dU9tbXpQS1d5cS03TlJfZ1FrRTgySmFNa3hSekZwcmdIaHlpOEtUVTlnNWhNcXE5N28zRjdJY2J0MFZLTUQ2ZHpONno3MUZTcEZic1FxVGJpM3pkMl9YNXBETGdFalBkNjdTN0JfdVlqSVhET0dVVWdPVFZ2TmRJaGdTSHJKMUpQV2hhdkhRSV9vRm9DUGRWblBSb3pQNGdxeXFEWktuMnRSbWR1YlZPR2F3c2M0TG1sbE8za3QyTjZLNTQyY3BDY0JWMGVyc1F5YmpNd29vZG5fTXFyQ1dwa1kxUHQycEdmdFpXNms5anRxMU8ycS1sVWRneUJBcXV5TlZyVkozR2NYOUFYdW5TdDJFOUZEeUpZbHZpc2NnZEtfRExlQVR0b2w2LXEwNmhWMFhmV2dkYkRseWVWcFBnR0h1NE9WUFNLbWIxQVZnV1hkcFdiM2otOUxuN0JxYUJGS1J0R0tsZEs4aDZVWlJfNklNMnB6c1pxRGhOOEVTZlRSTGQ1b2VWOGdud1NLZUlfQ1lXYkF0QmxiMmkyNFJYUWgwUmI2dlJRSXloTmktM1dQNldWU1RFR1M0OE51bW4tMEs2Ukwya0t2TVIyMlp6MWVCeHcxZ3RKdmRxZHJ6U3Y2bDZSek9FbXo3MExuQUx5WjRtTXpjYTU4Szk1blVNMFpvMW5PaTVtbkUwbmxOMm83Ykhjek5jOTFUdml2ZHpjY1lUMElsLTlTNXA1cUxtVHNYeFpHaGxPaDN3UXFNbTJhNzZVZi1FRkxZLXk0WHhlb2wyblh3LUZ4ckQ3MEFwNXQ3V2JaRk9KejVpdi1iNEEyNmFRQ05STGxPUUVjV2tNTW43WWszRWRaVWtuNW16bzltSV82bk50SW1uZTk4N1llV1hhcnc5SzdzNkpKbERRTHJObVpVQmZqYllqanpQdnZhSE95dU4zUWpKbXVfTnBWTHNUYlREUHhHeEplX1dHd0VYeUNKNklyWGJkRlQwODJpcEpKczBoZ3dMYXdfUnVrbVFtM3RjMTBOQXh2djBUa05ka1V2eUxnYnFvUzdLU25xYmtkdDN4LU5xQVJzT2dVQktPeFRYUU83RUxKdlBGdzBvZXBnRGtYRmx1UFp5Q2h3OTgxNjZ6U0ZnUHFFc2RjNmxGektqRmJtZWZFZW1pRjl4bTEwU2d6YjNsUXVBQ01YM0lLVEU3Y2VkQXNQd19PaTU4VjB2YmdfUEFJV3hUdjRNamlrZzhyMGoxc3NydklidU80dUNsbThjZ2c9PVwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqVmVyaWZ5aW5nIFF0IGRlcGVuZGVuY2llcyBmb3IgcW1ldGFvYmplY3QgYnVpbGQqKlwifSx7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqSW52ZXN0aWdhdGluZyBSdXN0IFFTdHJpbmcgY29udmVyc2lvbiBpc3N1ZSoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9IVVRmUGxyemFkbHlxYVRON0tGTUxobG58ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5NGZjZWI0ODE5MTg4ODEwYjM1Nzg1ZTUzMzYiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoicmcgJ2ltcGwgRnJvbTwuKlFTdHJpbmcnIH4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy8qL3F0dHlwZXMtMC4yLjEyL3NyYy9xdGNvcmUvcXN0cmluZy5ycyAtbiB8IGhlYWQgLTIwOyBnaXQgZGlmZiAtLXN0YXQ7IGdpdCBzdGF0dXMgLS1zaG9ydCJ9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MzcyLCJvdXRwdXQiOjMxOSwiY2FjaGVSZWFkIjo2MTk1MiwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoyNTEsInRvdGFsVG9rZW5zIjo2MjY0MywiY29zdCI6eyJpbnB1dCI6MC4wMDE4Niwib3V0cHV0IjowLjAwOTU3LCJjYWNoZVJlYWQiOjAuMDMwOTc2LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNDI0MDZ9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTAwMTcyNjUsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOTQxZWE0MDgxOTE4YTU4MzYyOTRjYzUwYjc3In19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjdlNWIxNWQ0IiwicGFyZW50SWQiOiIyZGY2MmZiMSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzM6NTIuODM5WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9IVVRmUGxyemFkbHlxYVRON0tGTUxobG58ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5NGZjZWI0ODE5MTg4ODEwYjM1Nzg1ZTUzMzYiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIxOTk6aW1wbCBGcm9tPFFVcmw+IGZvciBRU3RyaW5nIHtcbjIzMjppbXBsIEZyb208UVN0cmluZz4gZm9yIFBhdGhCdWYge1xuMjM4OmltcGwgRnJvbTxTdHJpbmc+IGZvciBRU3RyaW5nIHtcbiBDYXJnby5sb2NrICB8IDE4OCArKysrKysrKysrKysrKysrKysrLVxuIENhcmdvLnRvbWwgIHwgIDEzICstXG4gc3JjL21haW4ucnMgfCA1NTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gMyBmaWxlcyBjaGFuZ2VkLCAxOTAgaW5zZXJ0aW9ucygrKSwgNTY5IGRlbGV0aW9ucygtKVxuIE0gQ2FyZ28ubG9ja1xuIE0gQ2FyZ28udG9tbFxuIEQgc3JjL21haW4ucnNcbj8/IFJFQURNRS5tZFxuPz8gY3JhdGVzL1xuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTkwMDMyODM5fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNmYyZDA2OTgiLCJwYXJlbnRJZCI6IjdlNWIxNWQ0IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNDozMzo1OC4xMzJaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlZlcmlmeWluZyBRdCBRTUwgcGFyc2VyIHJlZ2V4KioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzk1M2EzNDQ4MTkxOGU0MDg0NTdjNTg0YzlkYlwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTWxWX2wwVFpTZ1d4SmxwSGM3SmFQbmRQQlc4QzlacUpYd1F4UmFxMHpOSExHV3BuMHVvTHVnZUdyM0dydV9LczN1Wm9YdDVWeUtLRDVMbU5kQWJKR0hXcC1lZVNZaDZrd3JPSFFrQUdMLVZlNlc4a3hZSTRRM2RIaHBkc2tGVldzdFNQTEdpdW15UUVoVVpVM1RucHdEUkF6VVdWT2lmQS02Rk91VTNCY29NZ1JHMkdUZVJ3bmdEem5yZDRfNTVLUlkzbUluTWhLdHo0Q0lsSmk2V1lreUhUN1g5aDltRG5PV3BLWjB6SENsUUsweEU2OG02NWoyMk5EUFhqQm5BcEVZdTU5QmtWYmotMGpHcGg5TWc2RzBxV2o1Z0pMTWRMUDBrRUkxc1ZyZ18tUUpGTk9FMnJYY0RvLS0wTGVjN19SOTVVWmVubEt2cVlDUWpnLWo1NkRMakQ5dHEwTkczOTNCaVVTRUdKN2ExX0swcFVEN05xcFdJQkxrQmEwN2tUVXBBUmtXcklQTEVUbjdIY2VLSFF6bjluMDcxNlo4VnZQVEo1b0FZcjh5SjZTcVdVMTZNZHpCLVo2cHFodHhHNXVOUWpocG9Bc0NVRUVfOC1vR1Iya0RsTHVPem9USm9fd0F1dTJsdUFtVEdreTZMdWxBR1hIM0FFMDFRaVFxU0prWVpYTEtwd0NDVjBZeFJmX3hNX2lEdy1zZzlFelRHNXE4Zl8wNFFVeURfQWc4VzI2TWVmXzFveXdNMXJYTTZmaTNGckhUb3lfNTNTWm15R0dDMGMxQWN2ZnJJMmJmTmdrUk9YNFBKMGZwRTVRcEpHSUZ4NzlILU9vUWctUXNrb1NNSXA1LVVMVVM5NmJJak9NY0pLVi1NNldhSmlZbXlGd3BIS2Z1ZE5vT3VGM2txUWhoSzN4VDFCZkJMXzhHaWlXc2dBUTc2OGg1Nko1UjYybHNSZG93SkVsRHlTLVg2ajlTTldGQm1MeFg5T21PNGJ5VHdMSW1yLUVscnU4UnE5WkxhNms5LU1uY3RlTzVYUHVHY1RSWVFKcUw3eUN1SzlCcjBZbWwyay1OT2NSR19taFc0QUVFeFlqUHVqeTA3Q0x5ZWc0NHJZelNJVWZYazRiaGlESDlYWDhpWG5sV0RyUXpUTlZLN2xBTlNJRTFVSFUxTTJqemRiQ3NseXRlUDAtS3hBazFaN0ltRTNZZlZBTGZXNWZ1dkpkVnh5RmM5RXVHalR0OEVzMTVqa0VrWXJhaU9aOGtmekROUld0ZTF1dXlaYktRclU2cklzVUg2RXhoQjZzNk9lT25xX1c2c3dTMmo4X1dzTUFiYW5WNzFldXVkcXA2VGlMQW1DZFIwN3ZrNlwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqVmVyaWZ5aW5nIFF0IFFNTCBwYXJzZXIgcmVnZXgqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfc3VPckcyN0JUR01zQm1uRHdndUFURWVrfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOTU1ZWFkODgxOTFhYWNhMTAwZDljZjc3ZWM1IiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6ImNyYXRlcy9mbGFzaGVyLXF0L3FtbC9NYWluLnFtbCIsIm9mZnNldCI6MjU4LCJsaW1pdCI6MTN9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6Nzk3LCJvdXRwdXQiOjU3LCJjYWNoZVJlYWQiOjYxOTUyLCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjIxLCJ0b3RhbFRva2VucyI6NjI4MDYsImNvc3QiOnsiaW5wdXQiOjAuMDAzOTg1MDAwMDAwMDAwMDAxLCJvdXRwdXQiOjAuMDAxNzEwMDAwMDAwMDAwMDAwMSwiY2FjaGVSZWFkIjowLjAzMDk3NiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDM2NjcxfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTkwMDMyODQxLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0Yzk1MTVjZGM4MTkxYWJlNmY0NjA3MTcyYTkxNiJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIzMDk0MDYyMSIsInBhcmVudElkIjoiNmYyZDA2OTgiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE0OjMzOjU4LjEzM1oiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfc3VPckcyN0JUR01zQm1uRHdndUFURWVrfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOTU1ZWFkODgxOTFhYWNhMTAwZDljZjc3ZWM1IiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiICAgICAgICAgICAgdmFyIHBsYXRmb3JtID0gXCJPdGhlclwiXG4gICAgICAgICAgICB2YXIgbGluZXMgPSBzdXBwb3J0ZWRCb2FyZHNUZXh0LnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXS50cmltKClcbiAgICAgICAgICAgICAgICBpZiAoIWxpbmUubGVuZ3RoKSBjb250aW51ZVxuICAgICAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdChsaW5lLmxlbmd0aCAtIDEpID09PSBcIjpcIikge1xuICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybSA9IGxpbmUuc3Vic3RyaW5nKDAsIGxpbmUubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBsaW5lLnNwbGl0KC9cXHMrLylcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuYW1lcy5sZW5ndGg7ICsrailcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbEJvYXJkcy5hcHBlbmQoeyBib2FyZE5hbWU6IG5hbWVzW2pdLCBwbGF0Zm9ybU5hbWU6IHBsYXRmb3JtIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG5bMTI1IG1vcmUgbGluZXMgaW4gZmlsZS4gVXNlIG9mZnNldD0yNzEgdG8gY29udGludWUuXSJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk5MDAzODEzM319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjhmYmY3YzUxIiwicGFyZW50SWQiOiIzMDk0MDYyMSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTQ6MzQ6MTUuOTAwWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipQbGFubmluZyBRdCBhbmQgR1RLIGludGVncmF0aW9uKipcblxuKipWZXJpZnlpbmcgUXQgZGVwZW5kZW5jeSBwYWNrYWdlcyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5NTgzNDk0ODE5MTk2ZGI4OTlkMjZmNDJlNTlcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk1sZkx3SlA5TTVZUGRfQ0dUb3U4Tk5MbHkxdXlxSXppdW96SVdiU2NPbHR6QnRfZjdGR3pubFBRaHI2SW9pd3Y5MmR3SkJtMEpoa2hDaDIxX3pOcjl0bmFSeHY5TG9MQWgyNWNoUEtuV3k4NmJlal9nMGx1WmJSYjdQV18tTnFqSng3Mm1Qdk5aTV9CM2FrR01YZFhmdlBGb28wZlI2QjFkYWdHS2dtaXprWTVTSVkyZUhBWlMwR0JadzVyQnlXYVFyTGJsUl9uMFVEODhIVm5zNGtsOGtuejEwMzVZZ1dfekp1amhOaGtjZ2pzYVE3S2VhdTFiSFcyQ2gwOFUzdVNHNnhudW9odVRIcVlyWW8wZHUtVnNSU0FjbWlUekEzNGREODlVa1VqZHZRVkVfUXplM05BMDZoUjhfQnRmU0p3VEFibEpfX3NCSTdGOEdFdndpQmdEc1BGbnZlRXJMeGZNRG8wXzl6LVBtem4tNzVNVk9UYUh6dU1NZ3ZlRnRMWEFoeHItWTR2bUZWZ3ZCa2JrcHh2d2hEckxTdWw4MVd4dXZxdzRjTV9hMUd0LUo2NFc5R2J1cWhkblJiYVRNZ3Etd1ZFb19tSzB2b0FwbzFYYTdtWlA2UlZuNDFneFJRMHF6cGN0Z2tPQ28tczdyY1JicUVNSTlOTzRDYUZjZ1FIdW5XYTJjWmhsTGdrQUpJZ2NyLXhMN3JJSU9aQjJfaU5paUUtck1VV28zbHAxY0VJU0RTU2prUU9VQlVUeVBrd0JLWDNCMk1ZWWlBVFB2UXRFYXFtZmxaS05xZTF0cGhsdUZGWkxVS0hMcnNkRWtDS1poTG1XU3lBbmV5RXhoTGpuV1czRF81cC02Uy1leHY1NTZacXZQRmliZEhGUHlfdXZGeWdsTzhsVWR5VUFnMnBhbURndHI4YWFfUkJ3cW1aUFRpcEVUS1FQaWM3UkZFWnp4RWNTb0NxTWRNaVJUUHEya1R1NDRuaXBwQ0tHUm5xZVZwLWxUeDY5clRMZGFBaEVZZ2F1MV9paGpIRy1xR05HcXhCYW93bFozSnVhZHdXS1ZEMVIwMFB0T0twZktPbUtuRUJPLVlITGdFcW45TGRBTTI3RWhJWnRPSmszcWR6YkJlVkQyam9SYVZCYTg5ZHVSbFV4QmhrQlE2TlFtSWVIWm9yeVhWeDlxbDVtOER6Z1AwaE1Fd2d0bkFpQ3g2dzFfVU1ETW0wTE1aT1k1dWZTSHB0Y0JiZmpuVDc1SVY1MW1zNGhqOVE2U2NmWjdZUW9VRm9jdi1pUTZXRHp6NlN6dHVQYU53TDZPTXQ3ZmxXXzF0ZW41b296R2R1endoQ1dmSGhDemt4cjI5ZHhVdVF3d05oOV9rNUJlNjRsUUp0TlZiRENXaDU2ZU1UbFBRYXZTUFRFVWs3X1paTjRfTE5iOTNSVFhzY192U0pTS0VXaV9FWkh4RzhMcmRwMnBPZGgtb1FRclFmZ0VmOWVIVU5mTUxJdldpVEd1aDYya21ybnlwZDRLWXlEVWRJbG9fcElRa2FjUWN1TFlaeG9Bb0pmQ3FBV3dLZGJqZzc5Zk8yR0U0LXcxOHA1V01oNG5WcjJINnRUOUVJdnd1aW85STFHTWZEbDk0ckhIVHJYa2JGYTQtQWxrYTE3d0dHTk5aZWk0Yjc4M01tV1JHbkZ2NzctRVRfVERoZ1NBaGFvejNRYmVLUThZbmNlQVVvQS1MYnlHV01TanhaT2dRWVFBTkdvcHNwMVVXNzdwQ3pNZGctVjdtaUEydFk2ZklxcXF1bTNzSHliLTZ0Y3dHbkRlWC04bUcyelA1cThCWGhSQUpwMnU0a3diUUQ3SkoxQk9EdDFXdmZoTXFoNVRoQTVENkVXSmFZUXFkRXdRRnJmT0pRaGVWdzJNdThXY3ZjN1VGZUdPVWw4WDc0MG1SdDhmMUhLTVprX0tUOWVJNUNIZ3JyX1BpT0RheHNnb0F6VmJoeXI3M1dQaVo5dVRESE9nTGIzRlBoZ2xSWGxSSXN4Zi1iVlNaLS1uaHo4MlZ2SHpWVEJ0dWhqcVpMN21USzdBcWJFang4V2otZFlvVTF1cmdkby1HQ084dUdHLXVQNUkwd0dsa1VRM2kwaFQ2Rlk2NkdKLWJkeF9nM1RoSkplbGpZdlJGUlIxUV9mMEFEZXNpdVRhQktfZGo5U2FFWjBuc2owZU1fejRhaV9mV1M3VnJrRVpSWXMwaGZReXVYRm5qQkw2d2hDV1pSVnh3ZDBvUzV3UkJqNHlpV0NuODAyMHFXVTdkb3RHTjd3bk1zYVJycVJDS0pnQXhER2p4Wmk5SVc2ckgwTDZ1dUxDdURGMHpZcEVka3JCVDBkZjdlelZkb1VpWDV0cWJ4cW5hdlpOeXhQQXU0endsNlNYN21YRVNsMC0yR3hSN0E1Z1NoamxMa0VCV0g4T0VLLWdrcTQ4TUdob0JaYWN4S2tDZnJHVm44bV9acjVBaUJYOGNqdmxNU25TcFNiX2xSWkpGUEJOczJ5SVZZS3FON1hNRTlBUWp1ZGY0dHhPeUJRTHhfUGgzSzJlR1RTNVA0Y3ctOEU3ZGZsV0pBQUdGWnRwRXRkX3NwcWNxRTBMYzg1N2k4dkMwYWlpX3R3UmQteWROYVpoWUVOdVZOX0czanV1SzA4TmE5MmNFb1phWXdLUlcyYnIwb3E0STZQR3BSYXl4WmY1dzdVaGF0VXpWT0hQQ290bzBfTUZ3V0FUZlc4bDhDTlFWT056eHlEcThzYVh4NXo3b1lsVXl1OFJ0OUdRUmR2NnlOTEVNb29qd2Z2VXhzZ3RSbF9UdzZGT1RzeVZpWU56aDRhUUZlVW9rQ2Vhd1dMVEJKdy1jZXVaYjJKZE1uTUlLUmJUNUk0RFJ4Um1ZTTJsZGtsQnFuOUkxZDBXZFhXU05oblBVM2R5MjlFNld5Y3Y5TjIyZE1HTUF6U0dfYzN4U0ZPcDExbkVBN1B6RUZIQm9NRDJwa1BTYjVraEljU2JETlg3RzZmVVpNTUVZTFdrXzJnZThxaXlySzVFVGxsbVlQVDMwcDJzTS1jVEVrTnhFMnQ4NVJ2bENJM2hkbzVucXFoM2h6NjA4aU11Ujh1QWhST1A5czhJNFlGeVJVbWV0eTRvMGNJbkh4N0tUMkU4NmpqbGxSYWhMMExpVFZHQk9xcURNZnNvUkRMSWFVejl4WDlXSG9sVjV0SE9nOWxhRXEyUGZXVWttSXd2WUlhUXFFbklIeFcxWkxzQWNyRm1kT0hfTV9qeHBXeXZzZ1VqNFpyejlJY3k3SGo2eHRoc09Lb29ZR3dWT1puZHAxQkhRY21QSWlCM2t1MmYyc29Tb0xEMm9EY2NselAxSGVWNzZmVnFXb19aSTdBWWl6X1E9XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipQbGFubmluZyBRdCBhbmQgR1RLIGludGVncmF0aW9uKipcIn0se1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlZlcmlmeWluZyBRdCBkZXBlbmRlbmN5IHBhY2thZ2VzKipcIn1dfSJ9LHsidHlwZSI6InRleHQiLCJ0ZXh0IjoiQ3JlYXRlZCBhIENhcmdvIHdvcmtzcGFjZSB3aXRoIHR3byBpbmRlcGVuZGVudCBHVUkgYXBwbGljYXRpb25zOlxuXG4tIGBjcmF0ZXMvZmxhc2hlci1ndGtgIOKAlCBleGlzdGluZyBHVEs0L2xpYmFkd2FpdGEgaW50ZXJmYWNlXG4tIGBjcmF0ZXMvZmxhc2hlci1xdGAg4oCUIG5ldyBRdCA1L1F0IFF1aWNrIENvbnRyb2xzIGludGVyZmFjZVxuXG5UaGUgUXQgdmVyc2lvbiBpbmNsdWRlczpcblxuLSBTZWFyY2hhYmxlIGJvYXJkLXNlbGVjdGlvbiBkaWFsb2dcbi0gUGxhdGZvcm0vU29DL2FyY2hpdGVjdHVyZSBzZWN0aW9uIGhlYWRlcnNcbi0gU291cmNlIGFuZCBkZXN0aW5hdGlvbiBzZWxlY3Rpb25cbi0gUmVtb3ZhYmxlLWRyaXZlIGRldGVjdGlvblxuLSBQYXJ0aXRpb25pbmcgYW5kIGluc3RhbGxlciBvcHRpb25zXG4tIFJldmlldyBkaWFsb2dcbi0gTm8gYWN0dWFsIGZsYXNoaW5nIGltcGxlbWVudGF0aW9uXG5cbkJ1aWxkIGJvdGggd2l0aDpcblxuYGBgYmFzaFxuY2FyZ28gYnVpbGRcbmBgYFxuXG5SdW4gaW5kaXZpZHVhbGx5OlxuXG5gYGBiYXNoXG5jYXJnbyBydW4gLXAgZmxhc2hlci1ndGtcbmNhcmdvIHJ1biAtcCBmbGFzaGVyLXF0XG5gYGBcblxuU3lzdGVtIGRlcGVuZGVuY3kgYW5kIGJ1aWxkIGluc3RydWN0aW9ucyBhcmUgZG9jdW1lbnRlZCBpbiBgUkVBRE1FLm1kYC5cblxuSSBjb3VsZG7igJl0IHBlcmZvcm0gYSBjb21wbGV0ZSBsb2NhbCBRdCBidWlsZCBiZWNhdXNlIFF0IGRldmVsb3BtZW50IHBhY2thZ2VzIGFyZSBhYnNlbnQgYW5kIGBzdWRvYCByZXF1aXJlcyBhIHBhc3N3b3JkLiBJbnN0YWxsIHRoZW0gb24gQUxUIExpbnV4IHdpdGg6XG5cbmBgYGJhc2hcbnN1ZG8gYXB0LWdldCBpbnN0YWxsIGdjYy1jKysgbGliZ3RrNC1kZXZlbCBsaWJhZHdhaXRhLWRldmVsIFxcXG4gIHF0NS1iYXNlLWRldmVsIHF0NS1kZWNsYXJhdGl2ZS1kZXZlbCBxdDUtcXVpY2tjb250cm9sczItZGV2ZWwgXFxcbiAgcXQ1LXF1aWNrY29udHJvbHMyXG5gYGBcblxuVGhlIHJlbG9jYXRlZCBHVEsgY3JhdGUgcGFzc2VzIGBjYXJnbyBjaGVja2A7IHdvcmtzcGFjZSBtZXRhZGF0YSBpcyB2YWxpZC4iLCJ0ZXh0U2lnbmF0dXJlIjoie1widlwiOjEsXCJpZFwiOlwibXNnXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRjOTVmYTA4ODgxOTE4MTBiNGRhMzM3ODI2ZGYyXCIsXCJwaGFzZVwiOlwiZmluYWxfYW5zd2VyXCJ9In1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjEwMTIsIm91dHB1dCI6NTE4LCJjYWNoZVJlYWQiOjYxOTUyLCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjI2OSwidG90YWxUb2tlbnMiOjYzNDgyLCJjb3N0Ijp7ImlucHV0IjowLjAwNTA2LCJvdXRwdXQiOjAuMDE1NTQsImNhY2hlUmVhZCI6MC4wMzA5NzYsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA1MTU3Nn19LCJzdG9wUmVhc29uIjoic3RvcCIsInRpbWVzdGFtcCI6MTc4NDk5MDAzODEzNSwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGM5NTY3YWJjODE5MTgwNThhNzExYTEzYmZmZjIifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNDFiNjUzYjQiLCJwYXJlbnRJZCI6IjhmYmY3YzUxIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNTo1NToxNC4zMTFaIiwibWVzc2FnZSI6eyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6InRoZSBxdCB2ZXJzaW9uIGxvb2tzIHZlcnkgZm9yZWlnbiBpbiBib3RoIHF0IGFuZCBub24tcXQgc3lzdGVtcy4gY291bGQgeW91IG1ha2UgaXQgbG9vayBtb3JlIG5hdGl2ZT8gaXMgaXQgYmVjYXVzZSBvZiBxdHF1aWNrPyJ9XSwidGltZXN0YW1wIjoxNzg0OTk0OTE0MzA4fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNzM3NTlhYzciLCJwYXJlbnRJZCI6IjQxYjY1M2I0IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNTo1NTozOC44NjFaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlBsYW5uaW5nIFJ1c3QtQysrIFF0IFdpZGdldHMgaW50ZWdyYXRpb24qKlxuXG4qKkRlc2lnbmluZyBDKysgUXQgV2lkZ2V0cyBpbnRlcmZhY2UgZm9yIFJ1c3QgRkZJKipcblxuKipJbXBsZW1lbnRpbmcgY2VudHJhbCBzdGF0dXMgYW5kIGRldmljZSBvcHRpb25zKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGM2N2Y2NjQ4MTkxODViYjEzYmFkNTdmN2U1MVwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTng1TDlRRjQyam5uakNvNFhLVW1QNkdfaTRsN0VuVEZRNVVkSFY4alhPU0dlbVhRb2M1Ny15djM5NkppajNmMGpQd25lNjl6VDZNaGRtSVJVSDN5Q1lkWWxGYVdhT1VFQTliZjRITEZrQnVsZnpyeVB4aWNOd3UzMFk2d3NMU2w0MzZnYXVMWWd0Vnp6ZlZ2QmZ5Nmxya0xpU3JSS1Z5M3FORFRuVTJDOUlZc2dUaGtPZnkxQ1E5Z1IyOHBQMHA2cDY1dEFnRDNXTVl5YUJLQklna2tTRVRuOFItRjVIOHZaUzlPWlZwVHBVa2RLNFE0R0VhODJXSHMtallnOV8yeFNQWkVBSm9GU0tzRGdDQkszQW5Pc1l4X0QwdTFnOHRIRTE4dHkxZGItWjdBNTU3SjRROGhwYzFab2tmWXFVQ09zLTJyQU1wQ3lRbFpfX3RtMVgzak5scHpiTC1VLXU5T0w4YVQ0OFdfb1YwZlVUNU9sMXpZME01dU5zcExYNi1ueVlQQnFwT2hiS0Y5LVVzQzNTXzZNRWYxc010VmcwaDlJRUJ4empDRlpqcUpBbzZpdlB2dENuMDFYMUVBcWZGOW1kX1I0cHk2VEloV2hDTEc4aHJ2Z2F6aFpOLUt0V0xmUHpHRjJVb0ZBY3MtSVMwN3R5akt5T0FYb3Z3S2lGRFVrdzYzZ3l0WEtkOWNYNFc2d3pJcXI1WmVFMnlyM0lSSU5NRjN3MWtLamNDRkE5ajdpVlNCdk9ZbVF0Q2pIOHFuek5zc2c5QThZSzd2dXY2UEpFLUhMbE4zVzl2b1RJYV9xMEJtR0duWDNCcm45U3ozR0VfamVhd0M0ZWJlZml6T2M3eGg3WllkVXhTNTNGS2Fqb1dOZHFCZlNUQjdiOFNuMEtGV01XZGNzWFNvYlducVotd1YxejhFQk5mQWxjM3J6MExJaGNRdTFoN3dXdWdaY1pDSzdRZnhfNkZyOUJ0RWpvYkhKcTQtdTlIQ0FTQmRrRDhVWm9RUE1YMmNQV1V5cXhrckx6cHpJZVRpMGE1OG5qRTFCVDBob3ItUjNZTmktY2d3RDcwZEMzcmhMMmppdWpDUjBaTEhXX3Q1c050MVVGX3dDMEF3eFVSWk1IQ3V6OHIxSUtsZks4dVYtUmpnMEVlczJKOWdZQTFlSXpfZEZFdWVCWmpxY1Q2Y1VwV3pFVmtfZGFpWl9nVHZ6RjdhNHlRNXVPckU1Zy1pOGUtcXdCRDg0cFZzd1JOWXNvenFuS3NFTHJBSEE0eTRRTkU5Nlk4M0daencydzhpUFAzNHJzVGJNQlptelZpVU9ZS0FabFljQlRpNEFkQVJ3UUtNbUxaZnUwLUNfOF9WR2lWdzhGVGtOZ0hXNWh1a2x3X244UVFUUndDT05BV3JxSVlUQnFCRlJGVWJpejFySGd1ZGItUERFV3JKS1ZsX2FpREVHMEpDbHBTaE1ZVFg1VDlTdjRjRXFrNGhWWEVDV2NQamdJRzJ4THRaODM2S2FVNFlnZWF6WlpmNjFYMVhLU19fM3hwUEVYTU0xX1gxamlxUHl2TGFPT1pILW1uUEpyZVpfY2s5N2N3aVVtTDlQV0J3SU1vZ1h4Q1laRVJwMmhMSXdzeDlrWkRMYy16akJKdWwtVk5XUWl2YWNzWVdxUktNMktyMHhqX3djZWV5MDA0dmlpN1lNdlh6WWJrUW9qZ1ZaU21UM1EzNWlaa0pjaEFVLUxUcHh4MW5YUlkwUnQ0a3ZJd3ZjVlQ1ZTREVTFtTUhRRnRiUjhlanp1LUhGeFdVQXI3eVJZbDN5WkNId0NjdEtIcTNkVTgtb3duZkhVX0JwSE0wNDRGOUhLbnZwaTB6aGgwc19EZzV6T21yUDRQLWl0ZnY1X0ZmRV9lZEFTUEt1MnkyRE9EVl80elU1UHZISmZjdzlJT1BnZjQ2cWd5WlFMdFQ5RWxfYWFUREpVeUMxRk9RZ2huTktNVkxFckdwQUtnOGNTMVl3eERJYnBfTVpJTVVMS1ZueW9aZjFLRjV0QkNEREZaMEptWTRhU1RVb0hXYUFNcWstRFBJRERPRG1qQWw5QnkxVVNiRFNoNkJuNXZadE1FeEZNZzQ3STJyMElaU1o3ODByWVozek9sNHFrTFA0VGp1VHljS3dBWDM4RmpUTTRfN1VHQ0dPN0VOUmVjb2FIOHdDYW5kdDhjbnZzQTJQOFNXWUpndkI5dTl6MVhxRENIakdocDRaRGhXX05YUWRvLVRnZUlrMnRZbFZ1NDVvN25DYmJjN0hRLWRIaEc1S3lmWFJkLWhrZkd6eWNFcDZHZW1vUmtuN05vZldBSC1FTC1NWGR4andYSnRtOU9oTU1nNlVGcDdaZTFETjRTQXFtQTlLeWxvUGFCdkNpdTRWV3ctaFM1WWNSbG5QdGY2d2hhRjdzd3hPVWotdXhjUmtlRmlTbDJlNFE0WTJfYkl6M1RVY0JDRDdWdktpN2xfQzlPUmJkdjdabjRXUVBRUFBFSVZDR3FHQjNPUy0yeDZvaXVoeVNWVmtQdGt5UFE0OTJSeWNMSlBVZVN1bEsxcjRLODZyRVdOXzByNHQ3bDhSejdkbHhNNjBvSm5LLVIyYThsY1ctbWNPNGVKbEU1VjljOU11NWdRcXREZkR2N0RtRnRibTNvbzFhUXZVd01qSUk1ZGl4c3RYYnNHcDNPUDY4Rjd4QkVRajRQVTh2SGxwakJzVW5SZXN0LUJCUXo3MWw1WTlOSDhCU2dpTnUyNHZ4QWZ2Tk05LVY2a2YxYTh0NTc0M194dU1uWlBoRTRjZ1ozdW1wYWN5ZVVtRm9neDRRTUdzaHdvWUItOUQtMUs0c0N5cXRMMlNQRFotbFR4V2wyV0VERTVzRm1yRDRHbE5LUzE0VnIwd3Y2bWJHNHRWcTMxQ083VjdCbXZ0RDF3bjVVWHhkdnlCa0l6MFRNR3U0WEZPUzJId1hhNEpkUFg3aUJWZF8xSHRjWmthNnVxMWZWR0ZpNHJzeHN1M1NIWmJDOGlwbkhfaGdjTnE3RDAyN2tUOC1sZTc3d2xLWFFGMl9TZVUyLTI0eWw3d0NHTHVmVV9hbzZ5NHZyS1ZkTndoMW5zcUZ4Yk1Sa3VOT3RCUWI2QUt3bnM0LThzVk1JWGtzaktwUUpQd0hKRG5SUWFFd2dPVVY3VWRtSER6SzdyNUVmZGlxcWpjY1cwSWkyLTF1Tk1kS3hQUWZvTU5hUHVVSENVRk1ST3hHUklBNHZNbTV4VG96dE1DQkJ5SFFZSE5rNllyX2J6VVltd0lCVnlfZHZWRV9wai15ZHptOGdLTVBJMmlOV3FmME9nMW5hRUFKbEJfRGJhVWVHRjhwVVRIOXM5YzVWVmtKVGh1dzlFNTI0Z0phaEJoWDUxeGgyU19mYWxCVW9pNG9aSHFRMEMwTWp4eDlKcWNQVXNOOWs0cTVpdXNQYWhPQ1FjSF9Tc3czWHdCNFFkbUY2a05ZSUVDRnl3OV8xTUJTdGp3RTdKZjZWVEsyNjFoTWpWWU8yWC1CaUVXUThidWRBTjhpeTdzMVlLYmtRalo2NEpoZXZKSTlkTHU2Ty1WTjVVZEE2UDdWQmR2WHR4UFpmWVR2Mm1YeE1XdWg2VEVfanpyWHNwUW5hbTdzUUk2UDllZ1dET1BORzMzNGQ5ZVZRYlBrWFBGaU9fLVRjaFlUWk00N3NhbEdWUjFDaHh6d1BuMW9uYkRuZkJjVlM4dllPajFveFF3MURmaUgzenZIcXRxbzM3NzlSN0Q1M09NQ2MxdlhRYXBOdHdyUUQydW4zM0ZHQjFfZXVCMXVoeGNkUFpINDVZVmVSNjl5ZXVGOVJoVjFZbldtLVgxN3RTQWFzVGs2UFktUEx0OFJTZmNmMk81bUNweER5YkU4SFdPVU1ObHRIQk9fS2tYT2U2QnNKa2hFMTZsQUJGUVBIVXltbDFxNGUwYk83YnlhclpZYXJmZUw3d3NUeTg2ZVFkNWVOano1X01xRUx6dTF3WU5mMW40T0F2Sk1MR2w4dng3MmE1c0tjT1BNZFNvdGF6TFpnSTc2UHRoUk5Ocml6am1QLTRXcTE3ajd2N1oybnctVUxQdjZWOWNNRU5zRGw3eGhZUG0tSko5ZGtYMGZDdHZueFNQb2pPc2xpLTRNWTAzaVk3VUlkVG1xV0lCMnB4T3BRV083MGFYOXRldGdfUUc1cnhvMV8zQ1lOWkdqQWFLOGJNYS1GWjFGY3l4SHNGNTZiVi00QU9jNl96VUpPVlhwMmRNWGpFaXVjRVNON2dkLXd1aUJmYkFidGdWWC1QcDQ1VjV3NHVvWUtuaDkwVTl4T09YcFpoeGdOVUJEeXNsMTMzQXI1SVhhR3JyV2s2d0hWUlFsMlJtblJaeW5tUzVyNXNtUV9MUkpnTjJTdHVGNFBrcEpNNXc5MEMtUExLdXdaQWxvUmozTkpIZE5TSG1kRURfdnJsSWNpYjVlaVdLTjlabWtVM1pjX1lQeE92c0JrS20wVXAwelM1NnJHQ3NpR3RmUm9SNEFrV1BpcVVnX1R2WEloQnZpcUMzUzRKNUROcHpONS1uUlcxV085TzV3MDRsSGJZODY0VlBTVWRTbFlMbWd6dFpGSmFiZHlBRXB5Z2xNM2NVcmN3eDBmSnIzRHktSDgycXU2eDBFNHdvMU9iTzd1X3pnOEtiV05iRTlhZnp5ZVZ4RG1fOFo5OHRzRzhTNF84X1gwcXVTMW1YakxmSTUtOGZjNUVoWEF3RmhtTGFxb2pERXNpZXRZUWY4Y0p0YTYweEwzeDBHeTJ1c3Y1bElHbzhtVXNSQVp3dTdQRmV1bm8wVzdma1pwUFJfakpuR3A4T2k4bHNTUVZhdFNkcUVsX1I3VE5NSUlaVldWdC1XY0FaMjE0dElYNjQzdlNnaEo1MTFQTVh6QTlhVHV0VG00R285S2VoQ2pQRmlfQlhpQW1RTG5yOHVhOHh5T3hTZllrSUluX2Q1STdPbVd2ekxWOTZvX2hLMEFxQTBQT0FrNm51WWIweWg1MnhfQXhqSnVKT2ozWEMyV0w0Y1Q2UWloVFc1QTRFbVlCelF4cXU2ZHNPOTRJdkctTWFDQl9PbUxIdjd3c1pQWmdkVVdFREphWWFlTzFqNjBLX2R5Qkw0amJqMEtVNmJjRnFpTWhMZWQ5VWhTZ0IyNXFlOFRoZ1FNTVhZOGF1em1FR1FhOWp6SUJsbXhWSUdTTnY1SHNwNWE2MVFoQ3dyWENiQ29lNHFrcVZQSzYzdjdNT1E9XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipQbGFubmluZyBSdXN0LUMrKyBRdCBXaWRnZXRzIGludGVncmF0aW9uKipcIn0se1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkRlc2lnbmluZyBDKysgUXQgV2lkZ2V0cyBpbnRlcmZhY2UgZm9yIFJ1c3QgRkZJKipcIn0se1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkltcGxlbWVudGluZyBjZW50cmFsIHN0YXR1cyBhbmQgZGV2aWNlIG9wdGlvbnMqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfWUdkb2s1cEJjTUFzSDVNTnl3NTE0V3o1fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkYzc5N2Y4NDgxOTE5ZGYzODhiNjI0NTE2OWY5IiwibmFtZSI6IndyaXRlIiwiYXJndW1lbnRzIjp7InBhdGgiOiJjcmF0ZXMvZmxhc2hlci1xdC9DYXJnby50b21sIiwiY29udGVudCI6IltwYWNrYWdlXVxubmFtZSA9IFwiZmxhc2hlci1xdFwiXG52ZXJzaW9uID0gXCIwLjEuMFwiXG5lZGl0aW9uID0gXCIyMDI0XCJcbmRlc2NyaXB0aW9uID0gXCJBIG5hdGl2ZSBRdCBXaWRnZXRzIGludGVyZmFjZSBmb3IgcHJlcGFyaW5nIEFMVCBMaW51eCBTQkMgaW1hZ2VzXCJcbmxpY2Vuc2UgPSBcIkdQTC0yLjAtb3ItbGF0ZXJcIlxuYnVpbGQgPSBcImJ1aWxkLnJzXCJcblxuW2J1aWxkLWRlcGVuZGVuY2llc11cbmNjID0gXCIxLjRcIlxucGtnLWNvbmZpZyA9IFwiMC4zXCJcbiJ9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6NjM1MTgsIm91dHB1dCI6NjI1LCJjYWNoZVJlYWQiOjAsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6NTA0LCJ0b3RhbFRva2VucyI6NjQxNDMsImNvc3QiOnsiaW5wdXQiOjAuMzE3NTkwMDAwMDAwMDAwMDQsIm91dHB1dCI6MC4wMTg3NSwiY2FjaGVSZWFkIjowLCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4zMzYzNDAwMDAwMDAwMDAwM319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk5NDkxNDMzNCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRjNjU1MmYwODE5MTg5NzkxMTQ0NzdiN2Y1YmYifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNjkyOTkyOGUiLCJwYXJlbnRJZCI6IjczNzU5YWM3IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNTo1NTozOC44NjdaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX1lHZG9rNXBCY01Bc0g1TU55dzUxNFd6NXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGM3OTdmODQ4MTkxOWRmMzg4YjYyNDUxNjlmOSIsInRvb2xOYW1lIjoid3JpdGUiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJTdWNjZXNzZnVsbHkgd3JvdGUgMjQ2IGJ5dGVzIHRvIGNyYXRlcy9mbGFzaGVyLXF0L0NhcmdvLnRvbWwifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTQ5Mzg4Njd9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJjN2FiMmQ0OSIsInBhcmVudElkIjoiNjkyOTkyOGUiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE1OjU1OjQ0LjM0OFoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfV29KQUlGTHdWSVBJYlJHbXlob3oxQWxafGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkYzdkMGJmYzgxOTE4ODgxZTYxNTI3ZmVhYmQxIiwibmFtZSI6IndyaXRlIiwiYXJndW1lbnRzIjp7InBhdGgiOiJjcmF0ZXMvZmxhc2hlci1xdC9idWlsZC5ycyIsImNvbnRlbnQiOiJmbiBtYWluKCkge1xuICAgIHByaW50bG4hKFwiY2FyZ286cmVydW4taWYtY2hhbmdlZD1zcmMvdWkuY3BwXCIpO1xuXG4gICAgbGV0IHF0ID0gcGtnX2NvbmZpZzo6Q29uZmlnOjpuZXcoKVxuICAgICAgICAuYXRsZWFzdF92ZXJzaW9uKFwiNS4xMlwiKVxuICAgICAgICAucHJvYmUoXCJRdDVXaWRnZXRzXCIpXG4gICAgICAgIC5leHBlY3QoXCJRdCA1IFdpZGdldHMgZGV2ZWxvcG1lbnQgZmlsZXMgd2VyZSBub3QgZm91bmQgKGluc3RhbGwgcXQ1LWJhc2UtZGV2ZWwpXCIpO1xuXG4gICAgbGV0IG11dCBidWlsZCA9IGNjOjpCdWlsZDo6bmV3KCk7XG4gICAgYnVpbGQuY3BwKHRydWUpLmZpbGUoXCJzcmMvdWkuY3BwXCIpLmZsYWdfaWZfc3VwcG9ydGVkKFwiLXN0ZD1jKysxN1wiKTtcbiAgICBmb3IgcGF0aCBpbiBxdC5pbmNsdWRlX3BhdGhzIHtcbiAgICAgICAgYnVpbGQuaW5jbHVkZShwYXRoKTtcbiAgICB9XG4gICAgYnVpbGQuY29tcGlsZShcImZsYXNoZXJfcXRfdWlcIik7XG59XG4ifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjExOTIsIm91dHB1dCI6MTgxLCJjYWNoZVJlYWQiOjYyOTc2LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjAsInRvdGFsVG9rZW5zIjo2NDM0OSwiY29zdCI6eyJpbnB1dCI6MC4wMDU5NjAwMDAwMDAwMDAwMDEsIm91dHB1dCI6MC4wMDU0MywiY2FjaGVSZWFkIjowLjAzMTQ4Nzk5OTk5OTk5OTk5NSwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDQyODc4fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk0OTM4ODcwLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGM3Yjc0ODg4MTkxOWY1ZGM0NmIxZTE4MmQwZSJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4OGY5NTM3MyIsInBhcmVudElkIjoiYzdhYjJkNDkiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE1OjU1OjQ0LjM0OVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfV29KQUlGTHdWSVBJYlJHbXlob3oxQWxafGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkYzdkMGJmYzgxOTE4ODgxZTYxNTI3ZmVhYmQxIiwidG9vbE5hbWUiOiJ3cml0ZSIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IlN1Y2Nlc3NmdWxseSB3cm90ZSA0NzUgYnl0ZXMgdG8gY3JhdGVzL2ZsYXNoZXItcXQvYnVpbGQucnMifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTQ5NDQzNDl9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJmZjQ5NDMwOCIsInBhcmVudElkIjoiODhmOTUzNzMiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE1OjU3OjA3LjE0MFoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqSW1wbGVtZW50aW5nIEMrKyBmdW5jdGlvbmFsaXR5KioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGM4M2ExYTA4MTkxOGM3ODU3Y2NlZjkzMTdjZlwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTnlFbW5uVk9LMldUVU9qOWJ5V0xiV0diM045TUltdzNHVkt6M21odEZVUFhGal9Kd1BYYXhnR3dTbDFJNkxnYm9oYl9uUGhDeFdzQWxMa1NuU3A5Q1RqekJzajZpb05zUEU0WWJueHlhNTZIbmcxRHpxd3k0TFMzSDJwaktPVHV0WDhOcjhjbkdGUkZLQlBYZXhCVEM5bUJHcGhieWowaGtidk9CQ2FzQkNvbmU1dG5sMU9KUTNyb0R2ZmJRQUM5UWUxdTM3c0RfZFBZNFZyU2dXWjdKNVpWSTZxWHc2cGlXWV9HTmxoUDBlbGcwaW5ybGtLdTBxT0NBNUhaQXp3NHZlY1lPM0xqelJ3TzNfQ1VKUWZ3c2NSdUhtYUpNVGhlUHdqYXFfUEQ0eGVock1ENzlnaDJ4aUNKendfRVQ1bWQ4RlNrTGxONFFSVGRmQU9TcTJTN2Z4LTFrZXhoQUQxQk1IQzNwNjRnRFN3N0hUN0tyaE41UnZFRkZBYVlmVGtGMDhIZUJtN2NKTm9WdnF5VGthOUx6M1RwSXZOYUprbkZLZUtNNUdVVzNDeE5zankzbS1zd2MzVU8tLUtlenQ0blRvUTZrbV92QVJ4emV4dmVoY0FyWUNDR25OWE41OG5MNnhnTTA1REM5cEJrenQzV2wtZGJwRHQxYWpoT3FfMHpRTy1qSklySG50d0JoQkxJT1k3SGtfZGZmNXA5RHp3dlZwZTk2N0xYZTJFMGJTdmdObGtCeGVwaE1vMFlSSXVMNERETkdybmlIUFVkZkppcTVUdi1zS2lWZmQtTHFINWxWaVFOUUoyNUkyTE5vazFFQmlGUUk3cXFpUDBVYkNTdTF3SW9RemUwdjY3T3l4TEpQUXlpMHo5S0czem5RaGttdFMtTy1SNjI5WlFtRTFQcVdwUTh4VW9Wc1A2RTFTUVNrbXdCeHBWOXBnWVgydmFpUmh2OUFsQWN6R0JMeDlfM2czTTZMcXd0NVM5bnNPb3phLXZDWHh2ckYtN0F2c21VNFpBLS14S2xnd3hwOVA0RHQyNGc5ZnR4c0k4Z1h6bjlOd2RpMEdXSURxb3ZCY2Nhd1lvWmRyVW9kWWhTbGxMR25Lc3ZOY3RibnAtSXhyNW9ZbUtJdnVlSkVmSlBFQkNIS3BHTGluRU9ZRzVVWmhBd2IzUEVSU2N2S2xGT1FGR3RuRWJWS1N5Ti1JODZxZ1YtWUx2XzQtanF4d1ROem5XQkJFaTQ3ZjVRYzJKMk0xekp3dWEzb0JQdzRNWW4zdUlzTGxoXCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipJbXBsZW1lbnRpbmcgQysrIGZ1bmN0aW9uYWxpdHkqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfWHJoWDRIT1VadFh6cm53Tk43Z3Q0QlNrfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkYzg0M2EwNDgxOTFhYTBlMzcyNTQ2MmMwMDU1IiwibmFtZSI6IndyaXRlIiwiYXJndW1lbnRzIjp7InBhdGgiOiJjcmF0ZXMvZmxhc2hlci1xdC9zcmMvdWkuY3BwIiwiY29udGVudCI6IiNpbmNsdWRlIDxRQXBwbGljYXRpb24+XG4jaW5jbHVkZSA8UUJ1dHRvbkdyb3VwPlxuI2luY2x1ZGUgPFFDaGVja0JveD5cbiNpbmNsdWRlIDxRQ29tYm9Cb3g+XG4jaW5jbHVkZSA8UURpYWxvZz5cbiNpbmNsdWRlIDxRRGlhbG9nQnV0dG9uQm94PlxuI2luY2x1ZGUgPFFGaWxlRGlhbG9nPlxuI2luY2x1ZGUgPFFGb3JtTGF5b3V0PlxuI2luY2x1ZGUgPFFGcmFtZT5cbiNpbmNsdWRlIDxRR3JvdXBCb3g+XG4jaW5jbHVkZSA8UUhCb3hMYXlvdXQ+XG4jaW5jbHVkZSA8UUxhYmVsPlxuI2luY2x1ZGUgPFFMaW5lRWRpdD5cbiNpbmNsdWRlIDxRTWFpbldpbmRvdz5cbiNpbmNsdWRlIDxRTWVudUJhcj5cbiNpbmNsdWRlIDxRTWVzc2FnZUJveD5cbiNpbmNsdWRlIDxRUHVzaEJ1dHRvbj5cbiNpbmNsdWRlIDxRUmFkaW9CdXR0b24+XG4jaW5jbHVkZSA8UVNjcm9sbEFyZWE+XG4jaW5jbHVkZSA8UVN0YXR1c0Jhcj5cbiNpbmNsdWRlIDxRU3R5bGU+XG4jaW5jbHVkZSA8UVRyZWVXaWRnZXQ+XG4jaW5jbHVkZSA8UVZCb3hMYXlvdXQ+XG5cbm5hbWVzcGFjZSB7XG5cbnN0cnVjdCBCb2FyZCB7XG4gICAgUVN0cmluZyBuYW1lO1xuICAgIFFTdHJpbmcgcGxhdGZvcm07XG59O1xuXG5RVmVjdG9yPEJvYXJkPiBwYXJzZUJvYXJkcyhjb25zdCBRU3RyaW5nICZ0ZXh0KSB7XG4gICAgUVZlY3RvcjxCb2FyZD4gYm9hcmRzO1xuICAgIFFTdHJpbmcgcGxhdGZvcm0gPSBRU3RyaW5nTGl0ZXJhbChcIk90aGVyXCIpO1xuICAgIGZvciAoY29uc3QgUVN0cmluZyAmcmF3TGluZSA6IHRleHQuc3BsaXQoJ1xcbicpKSB7XG4gICAgICAgIGNvbnN0IFFTdHJpbmcgbGluZSA9IHJhd0xpbmUudHJpbW1lZCgpO1xuICAgICAgICBpZiAobGluZS5pc0VtcHR5KCkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGxpbmUuZW5kc1dpdGgoJzonKSkge1xuICAgICAgICAgICAgcGxhdGZvcm0gPSBsaW5lLmxlZnQobGluZS5zaXplKCkgLSAxKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgUVN0cmluZyAmbmFtZSA6IGxpbmUuc3BsaXQoUVJlZ0V4cChRU3RyaW5nTGl0ZXJhbChcIlxcXFxzK1wiKSksIFF0OjpTa2lwRW1wdHlQYXJ0cykpXG4gICAgICAgICAgICBib2FyZHMucHVzaF9iYWNrKHtuYW1lLCBwbGF0Zm9ybX0pO1xuICAgIH1cbiAgICByZXR1cm4gYm9hcmRzO1xufVxuXG5RTGFiZWwgKmRlc2NyaXB0aW9uKGNvbnN0IFFTdHJpbmcgJnRleHQpIHtcbiAgICBhdXRvICpsYWJlbCA9IG5ldyBRTGFiZWwodGV4dCk7XG4gICAgbGFiZWwtPnNldFdvcmRXcmFwKHRydWUpO1xuICAgIGxhYmVsLT5zZXRGb3JlZ3JvdW5kUm9sZShRUGFsZXR0ZTo6TWlkKTtcbiAgICByZXR1cm4gbGFiZWw7XG59XG5cblFHcm91cEJveCAqZ3JvdXAoY29uc3QgUVN0cmluZyAmdGl0bGUsIFFMYXlvdXQgKmxheW91dCkge1xuICAgIGF1dG8gKmJveCA9IG5ldyBRR3JvdXBCb3godGl0bGUpO1xuICAgIGJveC0+c2V0TGF5b3V0KGxheW91dCk7XG4gICAgcmV0dXJuIGJveDtcbn1cblxuY2xhc3MgQm9hcmREaWFsb2cgZmluYWwgOiBwdWJsaWMgUURpYWxvZyB7XG5wdWJsaWM6XG4gICAgZXhwbGljaXQgQm9hcmREaWFsb2coY29uc3QgUVZlY3RvcjxCb2FyZD4gJmJvYXJkcywgUVdpZGdldCAqcGFyZW50ID0gbnVsbHB0cilcbiAgICAgICAgOiBRRGlhbG9nKHBhcmVudCksIGJvYXJkc18oYm9hcmRzKSB7XG4gICAgICAgIHNldFdpbmRvd1RpdGxlKHRyKFwiU2VsZWN0IFRhcmdldCBCb2FyZFwiKSk7XG4gICAgICAgIHJlc2l6ZSg2MjAsIDYyMCk7XG4gICAgICAgIHNldE1vZGFsKHRydWUpO1xuXG4gICAgICAgIGF1dG8gKmxheW91dCA9IG5ldyBRVkJveExheW91dCh0aGlzKTtcbiAgICAgICAgc2VhcmNoXyA9IG5ldyBRTGluZUVkaXQ7XG4gICAgICAgIHNlYXJjaF8tPnNldFBsYWNlaG9sZGVyVGV4dCh0cihcIlNlYXJjaCBib2FyZHMsIHBsYXRmb3Jtcywgb3IgYXJjaGl0ZWN0dXJlc+KAplwiKSk7XG4gICAgICAgIHNlYXJjaF8tPnNldENsZWFyQnV0dG9uRW5hYmxlZCh0cnVlKTtcbiAgICAgICAgdHJlZV8gPSBuZXcgUVRyZWVXaWRnZXQ7XG4gICAgICAgIHRyZWVfLT5zZXRIZWFkZXJIaWRkZW4odHJ1ZSk7XG4gICAgICAgIHRyZWVfLT5zZXRSb290SXNEZWNvcmF0ZWQodHJ1ZSk7XG4gICAgICAgIHRyZWVfLT5zZXRBbHRlcm5hdGluZ1Jvd0NvbG9ycyh0cnVlKTtcbiAgICAgICAgdHJlZV8tPnNldFVuaWZvcm1Sb3dIZWlnaHRzKHRydWUpO1xuICAgICAgICBsYXlvdXQtPmFkZFdpZGdldChzZWFyY2hfKTtcbiAgICAgICAgbGF5b3V0LT5hZGRXaWRnZXQodHJlZV8sIDEpO1xuXG4gICAgICAgIGF1dG8gKmJ1dHRvbnMgPSBuZXcgUURpYWxvZ0J1dHRvbkJveChRRGlhbG9nQnV0dG9uQm94OjpDYW5jZWwpO1xuICAgICAgICBsYXlvdXQtPmFkZFdpZGdldChidXR0b25zKTtcbiAgICAgICAgY29ubmVjdChidXR0b25zLCAmUURpYWxvZ0J1dHRvbkJveDo6cmVqZWN0ZWQsIHRoaXMsICZRRGlhbG9nOjpyZWplY3QpO1xuICAgICAgICBjb25uZWN0KHNlYXJjaF8sICZRTGluZUVkaXQ6OnRleHRDaGFuZ2VkLCB0aGlzLCBbdGhpc10oY29uc3QgUVN0cmluZyAmdGV4dCkgeyBwb3B1bGF0ZSh0ZXh0KTsgfSk7XG4gICAgICAgIGNvbm5lY3QodHJlZV8sICZRVHJlZVdpZGdldDo6aXRlbUFjdGl2YXRlZCwgdGhpcywgW3RoaXNdKFFUcmVlV2lkZ2V0SXRlbSAqaXRlbSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS0+cGFyZW50KCkpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE5hbWVfID0gaXRlbS0+ZGF0YSgwLCBRdDo6VXNlclJvbGUpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRQbGF0Zm9ybV8gPSBpdGVtLT5wYXJlbnQoKS0+dGV4dCgwKTtcbiAgICAgICAgICAgICAgICBhY2NlcHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHBvcHVsYXRlKHt9KTtcbiAgICB9XG5cbiAgICBRU3RyaW5nIHNlbGVjdGVkTmFtZSgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGVkTmFtZV87IH1cbiAgICBRU3RyaW5nIHNlbGVjdGVkUGxhdGZvcm0oKSBjb25zdCB7IHJldHVybiBzZWxlY3RlZFBsYXRmb3JtXzsgfVxuXG5wcml2YXRlOlxuICAgIHZvaWQgcG9wdWxhdGUoY29uc3QgUVN0cmluZyAmcXVlcnkpIHtcbiAgICAgICAgdHJlZV8tPmNsZWFyKCk7XG4gICAgICAgIFFNYXA8UVN0cmluZywgUVRyZWVXaWRnZXRJdGVtICo+IGhlYWRpbmdzO1xuICAgICAgICBjb25zdCBRU3RyaW5nIG5lZWRsZSA9IHF1ZXJ5LnRyaW1tZWQoKTtcbiAgICAgICAgZm9yIChjb25zdCBCb2FyZCAmYm9hcmQgOiBib2FyZHNfKSB7XG4gICAgICAgICAgICBpZiAoIW5lZWRsZS5pc0VtcHR5KCkgJiYgIWJvYXJkLm5hbWUuY29udGFpbnMobmVlZGxlLCBRdDo6Q2FzZUluc2Vuc2l0aXZlKVxuICAgICAgICAgICAgICAgICYmICFib2FyZC5wbGF0Zm9ybS5jb250YWlucyhuZWVkbGUsIFF0OjpDYXNlSW5zZW5zaXRpdmUpKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgYXV0byAqJmhlYWRpbmcgPSBoZWFkaW5nc1tib2FyZC5wbGF0Zm9ybV07XG4gICAgICAgICAgICBpZiAoIWhlYWRpbmcpIHtcbiAgICAgICAgICAgICAgICBoZWFkaW5nID0gbmV3IFFUcmVlV2lkZ2V0SXRlbSh0cmVlXywge2JvYXJkLnBsYXRmb3JtfSk7XG4gICAgICAgICAgICAgICAgUUZvbnQgZm9udCA9IGhlYWRpbmctPmZvbnQoMCk7XG4gICAgICAgICAgICAgICAgZm9udC5zZXRCb2xkKHRydWUpO1xuICAgICAgICAgICAgICAgIGhlYWRpbmctPnNldEZvbnQoMCwgZm9udCk7XG4gICAgICAgICAgICAgICAgaGVhZGluZy0+c2V0RmxhZ3MoaGVhZGluZy0+ZmxhZ3MoKSAmIH5RdDo6SXRlbUlzU2VsZWN0YWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhdXRvICppdGVtID0gbmV3IFFUcmVlV2lkZ2V0SXRlbShoZWFkaW5nLCB7Ym9hcmQubmFtZX0pO1xuICAgICAgICAgICAgaXRlbS0+c2V0RGF0YSgwLCBRdDo6VXNlclJvbGUsIGJvYXJkLm5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRyZWVfLT5leHBhbmRBbGwoKTtcbiAgICAgICAgaWYgKCFxdWVyeS5pc0VtcHR5KCkgJiYgdHJlZV8tPnRvcExldmVsSXRlbUNvdW50KCkgPiAwKSB7XG4gICAgICAgICAgICBhdXRvICpoZWFkaW5nID0gdHJlZV8tPnRvcExldmVsSXRlbSgwKTtcbiAgICAgICAgICAgIGlmIChoZWFkaW5nLT5jaGlsZENvdW50KCkgPiAwKVxuICAgICAgICAgICAgICAgIHRyZWVfLT5zZXRDdXJyZW50SXRlbShoZWFkaW5nLT5jaGlsZCgwKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBRVmVjdG9yPEJvYXJkPiBib2FyZHNfO1xuICAgIFFMaW5lRWRpdCAqc2VhcmNoXyA9IG51bGxwdHI7XG4gICAgUVRyZWVXaWRnZXQgKnRyZWVfID0gbnVsbHB0cjtcbiAgICBRU3RyaW5nIHNlbGVjdGVkTmFtZV87XG4gICAgUVN0cmluZyBzZWxlY3RlZFBsYXRmb3JtXztcbn07XG5cbmNsYXNzIE1haW5XaW5kb3cgZmluYWwgOiBwdWJsaWMgUU1haW5XaW5kb3cge1xucHVibGljOlxuICAgIE1haW5XaW5kb3coY29uc3QgUVN0cmluZyAmYm9hcmRzVGV4dCwgY29uc3QgUVN0cmluZyAmZHJpdmVzVGV4dClcbiAgICAgICAgOiBib2FyZHNfKHBhcnNlQm9hcmRzKGJvYXJkc1RleHQpKSB7XG4gICAgICAgIHNldFdpbmRvd1RpdGxlKHRyKFwiQUxUIEltYWdlIFdyaXRlclwiKSk7XG4gICAgICAgIHJlc2l6ZSg3ODAsIDgyMCk7XG4gICAgICAgIHNldE1pbmltdW1TaXplKDYyMCwgNjAwKTtcblxuICAgICAgICBhdXRvICphYm91dCA9IG1lbnVCYXIoKS0+YWRkTWVudSh0cihcIiZIZWxwXCIpKS0+YWRkQWN0aW9uKHRyKFwiJkFib3V0XCIpKTtcbiAgICAgICAgY29ubmVjdChhYm91dCwgJlFBY3Rpb246OnRyaWdnZXJlZCwgdGhpcywgW3RoaXNdIHtcbiAgICAgICAgICAgIFFNZXNzYWdlQm94OjphYm91dCh0aGlzLCB0cihcIkFib3V0IEFMVCBJbWFnZSBXcml0ZXJcIiksXG4gICAgICAgICAgICAgICAgdHIoXCI8aDM+QUxUIEltYWdlIFdyaXRlcjwvaDM+PHA+VmVyc2lvbiAwLjEuMDwvcD5cIlxuICAgICAgICAgICAgICAgICAgIFwiPHA+UHJlcGFyZSBBTFQgTGludXggaW5zdGFsbGF0aW9uIG1lZGlhIGZvciBzdXBwb3J0ZWQgXCJcbiAgICAgICAgICAgICAgICAgICBcInNpbmdsZS1ib2FyZCBjb21wdXRlcnMuPC9wPlwiKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF1dG8gKnNjcm9sbCA9IG5ldyBRU2Nyb2xsQXJlYTtcbiAgICAgICAgc2Nyb2xsLT5zZXRXaWRnZXRSZXNpemFibGUodHJ1ZSk7XG4gICAgICAgIHNjcm9sbC0+c2V0RnJhbWVTaGFwZShRRnJhbWU6Ok5vRnJhbWUpO1xuICAgICAgICBzZXRDZW50cmFsV2lkZ2V0KHNjcm9sbCk7XG5cbiAgICAgICAgYXV0byAqdmlld3BvcnQgPSBuZXcgUVdpZGdldDtcbiAgICAgICAgYXV0byAqb3V0ZXIgPSBuZXcgUUhCb3hMYXlvdXQodmlld3BvcnQpO1xuICAgICAgICBvdXRlci0+c2V0Q29udGVudHNNYXJnaW5zKDIwLCAyMCwgMjAsIDIwKTtcbiAgICAgICAgYXV0byAqY29udGVudCA9IG5ldyBRV2lkZ2V0O1xuICAgICAgICBjb250ZW50LT5zZXRNYXhpbXVtV2lkdGgoNzAwKTtcbiAgICAgICAgYXV0byAqbGF5b3V0ID0gbmV3IFFWQm94TGF5b3V0KGNvbnRlbnQpO1xuICAgICAgICBsYXlvdXQtPnNldFNwYWNpbmcoMTYpO1xuICAgICAgICBvdXRlci0+YWRkU3RyZXRjaCgpO1xuICAgICAgICBvdXRlci0+YWRkV2lkZ2V0KGNvbnRlbnQsIDEpO1xuICAgICAgICBvdXRlci0+YWRkU3RyZXRjaCgpO1xuICAgICAgICBzY3JvbGwtPnNldFdpZGdldCh2aWV3cG9ydCk7XG5cbiAgICAgICAgYXV0byAqdGl0bGUgPSBuZXcgUUxhYmVsKHRyKFwiQ3JlYXRlIEluc3RhbGxhdGlvbiBNZWRpYVwiKSk7XG4gICAgICAgIFFGb250IHRpdGxlRm9udCA9IHRpdGxlLT5mb250KCk7XG4gICAgICAgIHRpdGxlRm9udC5zZXRQb2ludFNpemUodGl0bGVGb250LnBvaW50U2l6ZSgpICsgNyk7XG4gICAgICAgIHRpdGxlRm9udC5zZXRCb2xkKHRydWUpO1xuICAgICAgICB0aXRsZS0+c2V0Rm9udCh0aXRsZUZvbnQpO1xuICAgICAgICB0aXRsZS0+c2V0QWxpZ25tZW50KFF0OjpBbGlnbkNlbnRlcik7XG4gICAgICAgIGxheW91dC0+YWRkV2lkZ2V0KHRpdGxlKTtcbiAgICAgICAgYXV0byAqaW50cm8gPSBkZXNjcmlwdGlvbih0cihcIlByZXBhcmUgYW4gQUxUIExpbnV4IHJvb3QgZmlsZXN5c3RlbSBvciBkaXNrIGltYWdlIGZvciB5b3VyIGJvYXJkLlwiKSk7XG4gICAgICAgIGludHJvLT5zZXRBbGlnbm1lbnQoUXQ6OkFsaWduQ2VudGVyKTtcbiAgICAgICAgbGF5b3V0LT5hZGRXaWRnZXQoaW50cm8pO1xuXG4gICAgICAgIGNyZWF0ZVNvdXJjZShsYXlvdXQpO1xuICAgICAgICBjcmVhdGVIYXJkd2FyZShsYXlvdXQpO1xuICAgICAgICBjcmVhdGVEZXN0aW5hdGlvbihsYXlvdXQsIGRyaXZlc1RleHQpO1xuICAgICAgICBjcmVhdGVPcHRpb25zKGxheW91dCk7XG4gICAgICAgIGxheW91dC0+YWRkU3RyZXRjaCgpO1xuXG4gICAgICAgIGF1dG8gKmJhciA9IG5ldyBRV2lkZ2V0O1xuICAgICAgICBhdXRvICpiYXJMYXlvdXQgPSBuZXcgUUhCb3hMYXlvdXQoYmFyKTtcbiAgICAgICAgYmFyTGF5b3V0LT5zZXRDb250ZW50c01hcmdpbnMoMTIsIDgsIDEyLCA4KTtcbiAgICAgICAgYmFyTGF5b3V0LT5hZGRXaWRnZXQoZGVzY3JpcHRpb24odHIoXCJOb3RoaW5nIHdpbGwgYmUgd3JpdHRlbiB1bnRpbCB5b3UgY29uZmlybS5cIikpLCAxKTtcbiAgICAgICAgd3JpdGVCdXR0b25fID0gbmV3IFFQdXNoQnV0dG9uKHRyKFwiUmV2aWV3IGFuZCBXcml0ZVwiKSk7XG4gICAgICAgIHdyaXRlQnV0dG9uXy0+c2V0RGVmYXVsdCh0cnVlKTtcbiAgICAgICAgd3JpdGVCdXR0b25fLT5zZXRFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgYmFyTGF5b3V0LT5hZGRXaWRnZXQod3JpdGVCdXR0b25fKTtcbiAgICAgICAgc3RhdHVzQmFyKCktPmFkZFBlcm1hbmVudFdpZGdldChiYXIsIDEpO1xuICAgICAgICBjb25uZWN0KHdyaXRlQnV0dG9uXywgJlFQdXNoQnV0dG9uOjpjbGlja2VkLCB0aGlzLCBbdGhpc10geyByZXZpZXcoKTsgfSk7XG4gICAgfVxuXG5wcml2YXRlOlxuICAgIHZvaWQgY3JlYXRlU291cmNlKFFWQm94TGF5b3V0ICpwYWdlKSB7XG4gICAgICAgIGF1dG8gKmxheW91dCA9IG5ldyBRVkJveExheW91dDtcbiAgICAgICAgbGF5b3V0LT5hZGRXaWRnZXQoZGVzY3JpcHRpb24odHIoXCJDaG9vc2UgYSByb290IGZpbGVzeXN0ZW0gYXJjaGl2ZSBvciBhIHJlYWR5LW1hZGUgZGlzayBpbWFnZS5cIikpKTtcbiAgICAgICAgYXV0byAqdHlwZXMgPSBuZXcgUUhCb3hMYXlvdXQ7XG4gICAgICAgIHR5cGVzLT5hZGRXaWRnZXQobmV3IFFMYWJlbCh0cihcIlNvdXJjZSB0eXBlXCIpKSk7XG4gICAgICAgIHR5cGVzLT5hZGRTdHJldGNoKCk7XG4gICAgICAgIHJvb3Rmc0J1dHRvbl8gPSBuZXcgUVJhZGlvQnV0dG9uKHRyKFwiUm9vdCBmaWxlc3lzdGVtXCIpKTtcbiAgICAgICAgaW1hZ2VCdXR0b25fID0gbmV3IFFSYWRpb0J1dHRvbih0cihcIkRpc2sgaW1hZ2VcIikpO1xuICAgICAgICByb290ZnNCdXR0b25fLT5zZXRDaGVja2VkKHRydWUpO1xuICAgICAgICB0eXBlcy0+YWRkV2lkZ2V0KHJvb3Rmc0J1dHRvbl8pO1xuICAgICAgICB0eXBlcy0+YWRkV2lkZ2V0KGltYWdlQnV0dG9uXyk7XG4gICAgICAgIGxheW91dC0+YWRkTGF5b3V0KHR5cGVzKTtcblxuICAgICAgICBhdXRvICpwaWNrZXIgPSBuZXcgUUhCb3hMYXlvdXQ7XG4gICAgICAgIHNvdXJjZUxhYmVsXyA9IG5ldyBRTGFiZWwodHIoXCJObyBzb3VyY2Ugc2VsZWN0ZWRcIikpO1xuICAgICAgICBzb3VyY2VMYWJlbF8tPnNldFRleHRJbnRlcmFjdGlvbkZsYWdzKFF0OjpUZXh0U2VsZWN0YWJsZUJ5TW91c2UpO1xuICAgICAgICBhdXRvICpjaG9vc2UgPSBuZXcgUVB1c2hCdXR0b24odHIoXCJDaG9vc2XigKZcIikpO1xuICAgICAgICBjaG9vc2UtPnNldEljb24oc3R5bGUoKS0+c3RhbmRhcmRJY29uKFFTdHlsZTo6U1BfRGlhbG9nT3BlbkJ1dHRvbikpO1xuICAgICAgICBwaWNrZXItPmFkZFdpZGdldChzb3VyY2VMYWJlbF8sIDEpO1xuICAgICAgICBwaWNrZXItPmFkZFdpZGdldChjaG9vc2UpO1xuICAgICAgICBsYXlvdXQtPmFkZExheW91dChwaWNrZXIpO1xuICAgICAgICBzb3VyY2VIaW50XyA9IGRlc2NyaXB0aW9uKHRyKFwiU3VwcG9ydGVkOiAudGFyLCAudGFyLmd6LCAudGFyLnh6XCIpKTtcbiAgICAgICAgbGF5b3V0LT5hZGRXaWRnZXQoc291cmNlSGludF8pO1xuICAgICAgICBwYWdlLT5hZGRXaWRnZXQoZ3JvdXAodHIoXCJJbnN0YWxsYXRpb24gU291cmNlXCIpLCBsYXlvdXQpKTtcblxuICAgICAgICBjb25uZWN0KHJvb3Rmc0J1dHRvbl8sICZRUmFkaW9CdXR0b246OnRvZ2dsZWQsIHRoaXMsIFt0aGlzXShib29sIGNoZWNrZWQpIHtcbiAgICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgc291cmNlSGludF8tPnNldFRleHQodHIoXCJTdXBwb3J0ZWQ6IC50YXIsIC50YXIuZ3osIC50YXIueHpcIikpO1xuICAgICAgICAgICAgICAgIGZpbGVPdXRwdXRCdXR0b25fLT5zZXRFbmFibGVkKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29ubmVjdChpbWFnZUJ1dHRvbl8sICZRUmFkaW9CdXR0b246OnRvZ2dsZWQsIHRoaXMsIFt0aGlzXShib29sIGNoZWNrZWQpIHtcbiAgICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgc291cmNlSGludF8tPnNldFRleHQodHIoXCJTdXBwb3J0ZWQ6IC5pbWcsIC5pbWcueHpcIikpO1xuICAgICAgICAgICAgICAgIGRyaXZlT3V0cHV0QnV0dG9uXy0+c2V0Q2hlY2tlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICBmaWxlT3V0cHV0QnV0dG9uXy0+c2V0RW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25uZWN0KGNob29zZSwgJlFQdXNoQnV0dG9uOjpjbGlja2VkLCB0aGlzLCBbdGhpc10ge1xuICAgICAgICAgICAgY29uc3QgUVN0cmluZyBmaWx0ZXIgPSBpbWFnZUJ1dHRvbl8tPmlzQ2hlY2tlZCgpXG4gICAgICAgICAgICAgICAgPyB0cihcIkRpc2sgaW1hZ2VzICgqLmltZyAqLmltZy54eik7O0FsbCBmaWxlcyAoKilcIilcbiAgICAgICAgICAgICAgICA6IHRyKFwiUm9vdCBmaWxlc3lzdGVtIGFyY2hpdmVzICgqLnRhciAqLnRhci5neiAqLnRhci54eik7O0FsbCBmaWxlcyAoKilcIik7XG4gICAgICAgICAgICBjb25zdCBRU3RyaW5nIHBhdGggPSBRRmlsZURpYWxvZzo6Z2V0T3BlbkZpbGVOYW1lKHRoaXMsIHRyKFwiQ2hvb3NlIEluc3RhbGxhdGlvbiBTb3VyY2VcIiksIHt9LCBmaWx0ZXIpO1xuICAgICAgICAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgICAgIHNvdXJjZVBhdGhfID0gcGF0aDtcbiAgICAgICAgICAgICAgICBzb3VyY2VMYWJlbF8tPnNldFRleHQoUUZpbGVJbmZvKHBhdGgpLmZpbGVOYW1lKCkpO1xuICAgICAgICAgICAgICAgIHNvdXJjZUxhYmVsXy0+c2V0VG9vbFRpcChwYXRoKTtcbiAgICAgICAgICAgICAgICBzb3VyY2VIaW50Xy0+c2V0VGV4dChRRmlsZUluZm8ocGF0aCkuYWJzb2x1dGVQYXRoKCkpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZVJlYWR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZvaWQgY3JlYXRlSGFyZHdhcmUoUVZCb3hMYXlvdXQgKnBhZ2UpIHtcbiAgICAgICAgYXV0byAqbGF5b3V0ID0gbmV3IFFWQm94TGF5b3V0O1xuICAgICAgICBsYXlvdXQtPmFkZFdpZGdldChkZXNjcmlwdGlvbih0cihcIkJvYXJkcyBhcmUgZ3JvdXBlZCBieSBwbGF0Zm9ybSwgU29DIGZhbWlseSwgYW5kIGFyY2hpdGVjdHVyZS5cIikpKTtcbiAgICAgICAgYXV0byAqcm93ID0gbmV3IFFIQm94TGF5b3V0O1xuICAgICAgICBhdXRvICpsYWJlbHMgPSBuZXcgUVZCb3hMYXlvdXQ7XG4gICAgICAgIGJvYXJkTGFiZWxfID0gbmV3IFFMYWJlbCh0cihcIk5vIGJvYXJkIHNlbGVjdGVkXCIpKTtcbiAgICAgICAgYm9hcmRIaW50XyA9IGRlc2NyaXB0aW9uKHRyKFwiQ2hvb3NlIGZyb20gJTEgc3VwcG9ydGVkIGJvYXJkc1wiKS5hcmcoYm9hcmRzXy5zaXplKCkpKTtcbiAgICAgICAgbGFiZWxzLT5hZGRXaWRnZXQoYm9hcmRMYWJlbF8pO1xuICAgICAgICBsYWJlbHMtPmFkZFdpZGdldChib2FyZEhpbnRfKTtcbiAgICAgICAgYXV0byAqc2VsZWN0ID0gbmV3IFFQdXNoQnV0dG9uKHRyKFwiU2VsZWN0IEJvYXJk4oCmXCIpKTtcbiAgICAgICAgcm93LT5hZGRMYXlvdXQobGFiZWxzLCAxKTtcbiAgICAgICAgcm93LT5hZGRXaWRnZXQoc2VsZWN0KTtcbiAgICAgICAgbGF5b3V0LT5hZGRMYXlvdXQocm93KTtcbiAgICAgICAgcGFnZS0+YWRkV2lkZ2V0KGdyb3VwKHRyKFwiVGFyZ2V0IEhhcmR3YXJlXCIpLCBsYXlvdXQpKTtcblxuICAgICAgICBjb25uZWN0KHNlbGVjdCwgJlFQdXNoQnV0dG9uOjpjbGlja2VkLCB0aGlzLCBbdGhpc10ge1xuICAgICAgICAgICAgQm9hcmREaWFsb2cgZGlhbG9nKGJvYXJkc18sIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGRpYWxvZy5leGVjKCkgPT0gUURpYWxvZzo6QWNjZXB0ZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEJvYXJkXyA9IGRpYWxvZy5zZWxlY3RlZE5hbWUoKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFBsYXRmb3JtXyA9IGRpYWxvZy5zZWxlY3RlZFBsYXRmb3JtKCk7XG4gICAgICAgICAgICAgICAgYm9hcmRMYWJlbF8tPnNldFRleHQoc2VsZWN0ZWRCb2FyZF8pO1xuICAgICAgICAgICAgICAgIFFGb250IGZvbnQgPSBib2FyZExhYmVsXy0+Zm9udCgpO1xuICAgICAgICAgICAgICAgIGZvbnQuc2V0Qm9sZCh0cnVlKTtcbiAgICAgICAgICAgICAgICBib2FyZExhYmVsXy0+c2V0Rm9udChmb250KTtcbiAgICAgICAgICAgICAgICBib2FyZEhpbnRfLT5zZXRUZXh0KHNlbGVjdGVkUGxhdGZvcm1fKTtcbiAgICAgICAgICAgICAgICB1cGRhdGVSZWFkeSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2b2lkIGNyZWF0ZURlc3RpbmF0aW9uKFFWQm94TGF5b3V0ICpwYWdlLCBjb25zdCBRU3RyaW5nICZkcml2ZXNUZXh0KSB7XG4gICAgICAgIGF1dG8gKmxheW91dCA9IG5ldyBRVkJveExheW91dDtcbiAgICAgICAgbGF5b3V0LT5hZGRXaWRnZXQoZGVzY3JpcHRpb24odHIoXCJXcml0ZSB0byByZW1vdmFibGUgbWVkaWEgb3IgY3JlYXRlIGFuIGltYWdlIGZpbGUuXCIpKSk7XG4gICAgICAgIGF1dG8gKnR5cGVzID0gbmV3IFFIQm94TGF5b3V0O1xuICAgICAgICB0eXBlcy0+YWRkV2lkZ2V0KG5ldyBRTGFiZWwodHIoXCJPdXRwdXQgdHlwZVwiKSkpO1xuICAgICAgICB0eXBlcy0+YWRkU3RyZXRjaCgpO1xuICAgICAgICBkcml2ZU91dHB1dEJ1dHRvbl8gPSBuZXcgUVJhZGlvQnV0dG9uKHRyKFwiRHJpdmVcIikpO1xuICAgICAgICBmaWxlT3V0cHV0QnV0dG9uXyA9IG5ldyBRUmFkaW9CdXR0b24odHIoXCJJbWFnZSBmaWxlXCIpKTtcbiAgICAgICAgZHJpdmVPdXRwdXRCdXR0b25fLT5zZXRDaGVja2VkKHRydWUpO1xuICAgICAgICB0eXBlcy0+YWRkV2lkZ2V0KGRyaXZlT3V0cHV0QnV0dG9uXyk7XG4gICAgICAgIHR5cGVzLT5hZGRXaWRnZXQoZmlsZU91dHB1dEJ1dHRvbl8pO1xuICAgICAgICBsYXlvdXQtPmFkZExheW91dCh0eXBlcyk7XG5cbiAgICAgICAgZHJpdmVSb3dfID0gbmV3IFFXaWRnZXQ7XG4gICAgICAgIGF1dG8gKmRyaXZlTGF5b3V0ID0gbmV3IFFGb3JtTGF5b3V0KGRyaXZlUm93Xyk7XG4gICAgICAgIGRyaXZlQm94XyA9IG5ldyBRQ29tYm9Cb3g7XG4gICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0IGRyaXZlcyA9IGRyaXZlc1RleHQuc3BsaXQoJ1xcbicsIFF0OjpTa2lwRW1wdHlQYXJ0cyk7XG4gICAgICAgIGRyaXZlQm94Xy0+YWRkSXRlbXMoZHJpdmVzKTtcbiAgICAgICAgaWYgKGRyaXZlcy5pc0VtcHR5KCkpIHtcbiAgICAgICAgICAgIGRyaXZlQm94Xy0+YWRkSXRlbSh0cihcIk5vIHJlbW92YWJsZSBkcml2ZXMgZGV0ZWN0ZWRcIikpO1xuICAgICAgICAgICAgZHJpdmVCb3hfLT5zZXRFbmFibGVkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBkcml2ZUxheW91dC0+YWRkUm93KHRyKFwiU3RvcmFnZSBkZXZpY2VcIiksIGRyaXZlQm94Xyk7XG4gICAgICAgIGxheW91dC0+YWRkV2lkZ2V0KGRyaXZlUm93Xyk7XG5cbiAgICAgICAgZmlsZVJvd18gPSBuZXcgUVdpZGdldDtcbiAgICAgICAgYXV0byAqZmlsZUxheW91dCA9IG5ldyBRSEJveExheW91dChmaWxlUm93Xyk7XG4gICAgICAgIGZpbGVMYXlvdXQtPnNldENvbnRlbnRzTWFyZ2lucygwLCAwLCAwLCAwKTtcbiAgICAgICAgb3V0cHV0TGFiZWxfID0gbmV3IFFMYWJlbCh0cihcIkNob29zZSB3aGVyZSB0byBzYXZlIHRoZSBpbWFnZVwiKSk7XG4gICAgICAgIGF1dG8gKmNob29zZSA9IG5ldyBRUHVzaEJ1dHRvbih0cihcIkNob29zZeKAplwiKSk7XG4gICAgICAgIGNob29zZS0+c2V0SWNvbihzdHlsZSgpLT5zdGFuZGFyZEljb24oUVN0eWxlOjpTUF9EaWFsb2dTYXZlQnV0dG9uKSk7XG4gICAgICAgIGZpbGVMYXlvdXQtPmFkZFdpZGdldChvdXRwdXRMYWJlbF8sIDEpO1xuICAgICAgICBmaWxlTGF5b3V0LT5hZGRXaWRnZXQoY2hvb3NlKTtcbiAgICAgICAgZmlsZVJvd18tPmhpZGUoKTtcbiAgICAgICAgbGF5b3V0LT5hZGRXaWRnZXQoZmlsZVJvd18pO1xuICAgICAgICBwYWdlLT5hZGRXaWRnZXQoZ3JvdXAodHIoXCJEZXN0aW5hdGlvblwiKSwgbGF5b3V0KSk7XG5cbiAgICAgICAgY29ubmVjdChkcml2ZU91dHB1dEJ1dHRvbl8sICZRUmFkaW9CdXR0b246OnRvZ2dsZWQsIHRoaXMsIFt0aGlzXShib29sIGNoZWNrZWQpIHtcbiAgICAgICAgICAgIGRyaXZlUm93Xy0+c2V0VmlzaWJsZShjaGVja2VkKTtcbiAgICAgICAgICAgIGZpbGVSb3dfLT5zZXRWaXNpYmxlKCFjaGVja2VkKTtcbiAgICAgICAgICAgIHVwZGF0ZVJlYWR5KCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25uZWN0KGNob29zZSwgJlFQdXNoQnV0dG9uOjpjbGlja2VkLCB0aGlzLCBbdGhpc10ge1xuICAgICAgICAgICAgY29uc3QgUVN0cmluZyBwYXRoID0gUUZpbGVEaWFsb2c6OmdldFNhdmVGaWxlTmFtZSh0aGlzLCB0cihcIkNyZWF0ZSBEaXNrIEltYWdlXCIpLFxuICAgICAgICAgICAgICAgIFFTdHJpbmdMaXRlcmFsKFwiYWx0LWxpbnV4LmltZ1wiKSwgdHIoXCJSYXcgZGlzayBpbWFnZXMgKCouaW1nKTs7QWxsIGZpbGVzICgqKVwiKSk7XG4gICAgICAgICAgICBpZiAoIXBhdGguaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0UGF0aF8gPSBwYXRoO1xuICAgICAgICAgICAgICAgIG91dHB1dExhYmVsXy0+c2V0VGV4dChRRmlsZUluZm8ocGF0aCkuZmlsZU5hbWUoKSk7XG4gICAgICAgICAgICAgICAgb3V0cHV0TGFiZWxfLT5zZXRUb29sVGlwKHBhdGgpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZVJlYWR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHZvaWQgY3JlYXRlT3B0aW9ucyhRVkJveExheW91dCAqcGFnZSkge1xuICAgICAgICBhdXRvICpsYXlvdXQgPSBuZXcgUUZvcm1MYXlvdXQ7XG4gICAgICAgIGF1dG8gKmZpbGVzeXN0ZW0gPSBuZXcgUUNvbWJvQm94O1xuICAgICAgICBmaWxlc3lzdGVtLT5hZGRJdGVtcyh7UVN0cmluZ0xpdGVyYWwoXCJleHQ0XCIpLCBRU3RyaW5nTGl0ZXJhbChcImYyZnNcIil9KTtcbiAgICAgICAgbGF5b3V0LT5hZGRSb3codHIoXCJSb290IGZpbGVzeXN0ZW1cIiksIGZpbGVzeXN0ZW0pO1xuICAgICAgICBhdXRvICpyZXNpemUgPSBuZXcgUUNoZWNrQm94KHRyKFwiR3JvdyB0byBmaWxsIHRoZSBkZXN0aW5hdGlvblwiKSk7XG4gICAgICAgIHJlc2l6ZS0+c2V0Q2hlY2tlZCh0cnVlKTtcbiAgICAgICAgbGF5b3V0LT5hZGRSb3codHIoXCJSZXNpemUgcm9vdCBwYXJ0aXRpb25cIiksIHJlc2l6ZSk7XG4gICAgICAgIGxheW91dC0+YWRkUm93KHRyKFwiQm9vdCBwYXJ0aXRpb25cIiksIG5ldyBRQ2hlY2tCb3godHIoXCJDcmVhdGUgYSBzZXBhcmF0ZSA1MTIgTWlCIHBhcnRpdGlvblwiKSkpO1xuICAgICAgICBsYXlvdXQtPmFkZFJvdyh0cihcIkVuY3J5cHRpb25cIiksIG5ldyBRQ2hlY2tCb3godHIoXCJFbmNyeXB0IHJvb3QgcGFydGl0aW9uIHdpdGggTFVLU1wiKSkpO1xuICAgICAgICBsYXlvdXQtPmFkZFJvdyh0cihcIlNlcmlhbCBjb25zb2xlXCIpLCBuZXcgUUNoZWNrQm94KHRyKFwiQWRkIHRvIGJvb3QgYXJndW1lbnRzXCIpKSk7XG4gICAgICAgIGF1dG8gKmVmaSA9IG5ldyBRQ29tYm9Cb3g7XG4gICAgICAgIGVmaS0+YWRkSXRlbXMoe3RyKFwiTm9uZVwiKSwgdHIoXCJFRkkgKEdQVClcIiksIHRyKFwiRUZJIChNQlIpXCIpfSk7XG4gICAgICAgIGxheW91dC0+YWRkUm93KHRyKFwiRUZJIHN5c3RlbSBwYXJ0aXRpb25cIiksIGVmaSk7XG4gICAgICAgIGF1dG8gKnZuYyA9IG5ldyBRQ29tYm9Cb3g7XG4gICAgICAgIHZuYy0+YWRkSXRlbXMoe3RyKFwiVXNlIGltYWdlIGRlZmF1bHRcIiksIHRyKFwiRW5hYmxlZFwiKSwgdHIoXCJEaXNhYmxlZFwiKX0pO1xuICAgICAgICBsYXlvdXQtPmFkZFJvdyh0cihcIkZpcnN0LWJvb3QgVk5DXCIpLCB2bmMpO1xuICAgICAgICBwYWdlLT5hZGRXaWRnZXQoZ3JvdXAodHIoXCJPcHRpb25zXCIpLCBsYXlvdXQpKTtcbiAgICB9XG5cbiAgICB2b2lkIHVwZGF0ZVJlYWR5KCkge1xuICAgICAgICBjb25zdCBib29sIGRlc3RpbmF0aW9uID0gZHJpdmVPdXRwdXRCdXR0b25fLT5pc0NoZWNrZWQoKVxuICAgICAgICAgICAgPyBkcml2ZUJveF8tPmlzRW5hYmxlZCgpICYmIGRyaXZlQm94Xy0+Y3VycmVudEluZGV4KCkgPj0gMFxuICAgICAgICAgICAgOiAhb3V0cHV0UGF0aF8uaXNFbXB0eSgpO1xuICAgICAgICB3cml0ZUJ1dHRvbl8tPnNldEVuYWJsZWQoIXNvdXJjZVBhdGhfLmlzRW1wdHkoKSAmJiAhc2VsZWN0ZWRCb2FyZF8uaXNFbXB0eSgpICYmIGRlc3RpbmF0aW9uKTtcbiAgICB9XG5cbiAgICB2b2lkIHJldmlldygpIHtcbiAgICAgICAgY29uc3QgUVN0cmluZyBkZXN0aW5hdGlvbiA9IGRyaXZlT3V0cHV0QnV0dG9uXy0+aXNDaGVja2VkKCkgPyBkcml2ZUJveF8tPmN1cnJlbnRUZXh0KCkgOiBvdXRwdXRQYXRoXztcbiAgICAgICAgUU1lc3NhZ2VCb3ggZGlhbG9nKFFNZXNzYWdlQm94OjpXYXJuaW5nLCB0cihcIlJlYWR5IHRvIHdyaXRlP1wiKSxcbiAgICAgICAgICAgIHRyKFwiQm9hcmQ6ICUxXFxuUGxhdGZvcm06ICUyXFxuRGVzdGluYXRpb246ICUzXFxuXFxuXCJcbiAgICAgICAgICAgICAgIFwiVGhpcyBpcyBhbiBpbnRlcmZhY2UgcHJldmlldy4gTm8gZGF0YSB3aWxsIGJlIHdyaXR0ZW4uXCIpXG4gICAgICAgICAgICAgICAgLmFyZyhzZWxlY3RlZEJvYXJkXywgc2VsZWN0ZWRQbGF0Zm9ybV8sIGRlc3RpbmF0aW9uKSxcbiAgICAgICAgICAgIFFNZXNzYWdlQm94OjpDYW5jZWwgfCBRTWVzc2FnZUJveDo6T2ssIHRoaXMpO1xuICAgICAgICBkaWFsb2cuc2V0RGVmYXVsdEJ1dHRvbihRTWVzc2FnZUJveDo6Q2FuY2VsKTtcbiAgICAgICAgZGlhbG9nLmJ1dHRvbihRTWVzc2FnZUJveDo6T2spLT5zZXRUZXh0KHRyKFwiV3JpdGVcIikpO1xuICAgICAgICBpZiAoZGlhbG9nLmV4ZWMoKSA9PSBRTWVzc2FnZUJveDo6T2spXG4gICAgICAgICAgICBzdGF0dXNCYXIoKS0+c2hvd01lc3NhZ2UodHIoXCJGbGFzaGluZyBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhpcyBwcmV2aWV3XCIpLCA0MDAwKTtcbiAgICB9XG5cbiAgICBRVmVjdG9yPEJvYXJkPiBib2FyZHNfO1xuICAgIFFTdHJpbmcgc291cmNlUGF0aF87XG4gICAgUVN0cmluZyBvdXRwdXRQYXRoXztcbiAgICBRU3RyaW5nIHNlbGVjdGVkQm9hcmRfO1xuICAgIFFTdHJpbmcgc2VsZWN0ZWRQbGF0Zm9ybV87XG4gICAgUVJhZGlvQnV0dG9uICpyb290ZnNCdXR0b25fID0gbnVsbHB0cjtcbiAgICBRUmFkaW9CdXR0b24gKmltYWdlQnV0dG9uXyA9IG51bGxwdHI7XG4gICAgUVJhZGlvQnV0dG9uICpkcml2ZU91dHB1dEJ1dHRvbl8gPSBudWxscHRyO1xuICAgIFFSYWRpb0J1dHRvbiAqZmlsZU91dHB1dEJ1dHRvbl8gPSBudWxscHRyO1xuICAgIFFMYWJlbCAqc291cmNlTGFiZWxfID0gbnVsbHB0cjtcbiAgICBRTGFiZWwgKnNvdXJjZUhpbnRfID0gbnVsbHB0cjtcbiAgICBRTGFiZWwgKmJvYXJkTGFiZWxfID0gbnVsbHB0cjtcbiAgICBRTGFiZWwgKmJvYXJkSGludF8gPSBudWxscHRyO1xuICAgIFFMYWJlbCAqb3V0cHV0TGFiZWxfID0gbnVsbHB0cjtcbiAgICBRV2lkZ2V0ICpkcml2ZVJvd18gPSBudWxscHRyO1xuICAgIFFXaWRnZXQgKmZpbGVSb3dfID0gbnVsbHB0cjtcbiAgICBRQ29tYm9Cb3ggKmRyaXZlQm94XyA9IG51bGxwdHI7XG4gICAgUVB1c2hCdXR0b24gKndyaXRlQnV0dG9uXyA9IG51bGxwdHI7XG59O1xuXG59IC8vIG5hbWVzcGFjZVxuXG5leHRlcm4gXCJDXCIgaW50IHJ1bl9xdF9hcHAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpib2FyZHMsIGNvbnN0IGNoYXIgKmRyaXZlcykge1xuICAgIFFBcHBsaWNhdGlvbiBhcHAoYXJnYywgYXJndik7XG4gICAgUUNvcmVBcHBsaWNhdGlvbjo6c2V0QXBwbGljYXRpb25OYW1lKFFTdHJpbmdMaXRlcmFsKFwiQUxUIEltYWdlIFdyaXRlclwiKSk7XG4gICAgUUNvcmVBcHBsaWNhdGlvbjo6c2V0T3JnYW5pemF0aW9uTmFtZShRU3RyaW5nTGl0ZXJhbChcIkFMVCBMaW51eFwiKSk7XG4gICAgUUFwcGxpY2F0aW9uOjpzZXRXaW5kb3dJY29uKFFBcHBsaWNhdGlvbjo6c3R5bGUoKS0+c3RhbmRhcmRJY29uKFFTdHlsZTo6U1BfRHJpdmVIREljb24pKTtcbiAgICBNYWluV2luZG93IHdpbmRvdyhRU3RyaW5nOjpmcm9tVXRmOChib2FyZHMpLCBRU3RyaW5nOjpmcm9tVXRmOChkcml2ZXMpKTtcbiAgICB3aW5kb3cuc2hvdygpO1xuICAgIHJldHVybiBhcHAuZXhlYygpO1xufVxuIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjozNzIsIm91dHB1dCI6NDQxMCwiY2FjaGVSZWFkIjo2NDAwMCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoxMCwidG90YWxUb2tlbnMiOjY4NzgyLCJjb3N0Ijp7ImlucHV0IjowLjAwMTg2LCJvdXRwdXQiOjAuMTMyMywiY2FjaGVSZWFkIjowLjAzMiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMTY2MTZ9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTQ5NDQzNTEsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkYzgwYjczMDgxOTE5MDBkNTRhNmQ1NGZmZDQ2In19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjRjY2UwNmZhIiwicGFyZW50SWQiOiJmZjQ5NDMwOCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTU6NTc6MDcuMjAwWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9YcmhYNEhPVVp0WHpybndOTjdndDRCU2t8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRjODQzYTA0ODE5MWFhMGUzNzI1NDYyYzAwNTUiLCJ0b29sTmFtZSI6IndyaXRlIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiU3VjY2Vzc2Z1bGx5IHdyb3RlIDE2Mzc0IGJ5dGVzIHRvIGNyYXRlcy9mbGFzaGVyLXF0L3NyYy91aS5jcHAifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTUwMjcyMDB9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIxODVlZGY4OSIsInBhcmVudElkIjoiNGNjZTA2ZmEiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE1OjU3OjI2LjgzMloiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqQ29tcGxldGluZyBRdDUgaW5jbHVkZXMgYW5kIHNpZ25hbCBzZXR1cCoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRjZDRlNGE0ODE5MTlhMWVkZTcyMzJmZTFlMmRcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk56WWZGZWRTY1lOb0ZveUlLcGgyZWgxcmZQUl9EY3R3Wm03eFE4c19reXNSLWR1ZDBpdEFzNU5sdjh0Y1NlN3pMdFNqWUJ6T2poQ09hcTh0aUpMTG1hdkRoLUdNYkpzOVFTaFZjWWVnbGJlZ25RWTZmYW9jWi1sMkJqVWFzNGcwMDlqZlkxOWVKZmc1UmFmMEhpQWg3TGJnMElxN0hjNkg2VHNkVmFtRnNJNWNIa19XdjFIOVVobldhZ3NnazFzTEJsY2s3VUlPTHdtMU9heGt3UlNXZmQ1SjFodEt0ZnV3cDF4cWJzbkJNeFJETGZKampqWVlVanUxUFlYSG8wYXFZd2psbXN4TUYzTFh2NXlyY2pFOGsxRkhjWDZTVzF1bWZXWDFfWTE1OEM3NnJGaHhENjZlUTV3TkZKdVZkcWJENktzeGxlY1E3bWhWS1Z2WkU0TjBsMnhUSnVUMnpGWU4xUTlORHAycGJHQUlMVHlxOTdmSklzR19iVE13UWNHM0dueEhBbURaWklpRldIM1RXakYtYWx5QWZQT2pYNDlSQVl0Qk1UelhVdWpYb3J1OEdmMHhZQjV3YVZVWV9vWC1SNnI5bm9jcFNydTk5ckdNSHp1YzU2d09IZXdWUEpHM21IQWVTQVQtLVVNcy1rd2p5bE1HeUo0T0hqWXFtYzVHdkxhd0V0QXNWQTk5dW1Nbkt0eTNWRjk4dE1OWEdtbFFrS3RmTmZmeXFRMmUzbkZRZGVpZmVLVk9oY1ZmTXBjMERkdHpjUWRkdk0xT0Vib0JhZFg2c3RiWlRhLUdxb1dab3JXczFWRDZobFNoanNDcHVpM1pCRmxYbU1TRGlDTVFfYzZzUnRPRzZKT1U1V0lPXzJ4RjMwWVhKaUFyZ01wTnRMTnpzSFRQM25NS1MwMnNTdkpFMEROblRraUNqLWlTUXpnUGlKbzNxeHhkWDI0cGdiWG9tYUZscF9OYVpic0JfYXdSUzRUempuYzdBaDRWSG5LNWZ1d1p2dUYwV1JaZF8tanFWSGRsTHM1R3NOQ0FqMG9TcjBua3RGT2hGdHFpTzgtNlozSk5Rb1QwTXA5X2J6NVBhQ0IxdWxMc085M1dTWWN2Ty0tbzVheGVGZmc2c3ByY2J6MGNrSWs0V3hwLTYtY2RzS3EtaHNXbmdXRGFTeWhwYnBaLWpnVEo5SnZHZEE5dlhwemRpRkRUaEtsUm5uWUE5dmpheDgyMFRrTEFMbHk5OU1uc0JmRjZyZVR4dWRLWTQybERDOVdUMDBubmlURkNxWkdzSDBQRk5mdnlMYzgtWEFJdW1GRl9jeFBEWXAtV3VJUjVrdklGeG5YMmhOeWhYa3BoVGc0dnZvMlFWTENJVEFPUnZYdWJiTGVnUUwzZ0dpTWp5TkN4aWYySHdNQlpMTGp6WjZ0bjlsclA0ZV9mNVhoUlo3TTVIbUJVMS01Uk1CVFlWbUZCcmV5Y3pmUW41cmoxcVVrdzRab2pENVhoTG1lblhLTDV6cXc1RFQ2bkZsdU5FTjVUVTBmWjBNWW1IYTJjUTRYcDF1VzBpRm9fbkR0QmxiamIzcVBmZnloU2ZXU0k1cm94ajhQNG1jTEd1cnRmbGpkVkptYTc0STBhMFpFcUFfN0pFVEVCVzBDYjB2Y25paFhoS0RQeWxFOHlXOEFCTnRfSUhRRlFyWmtOa0tqU3VJQ3hGM1ZRdWFJYkJJaGIza09uMzF1azJBN2lPMzhiYzJMU2dobG8tU3B3MU0yZE43Rkc5RTlKcXZid2hDOGgyMi00Tlh1QV9VM25XUGpKTnNrSUFIT2hWN0dQNTFPNlFQVG5yanYyckxLa1pPSkJ4YngwSmM2WUo2SFFERGJBd2F0dmltXzdLVXR4WFFuMmo4Sk5Sa3hsREpSWjdFcFRUSUNmdGdTQUZZM2pSLU5uOUsxTi1ybk13Z1hyRUFsdVdLb0FPRV82bTdpSmtOdnZLdkpMRmdEVWZVR3AzOXZ4OHlHS3d0Rnp1aHIwaFpjTC0zNDU2S1RrYlhZbU9HVlpjNGhGQkpJQTcxVXFCdjZkd2xsZ3RxaU4yTFRISWNFWEE9PVwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqQ29tcGxldGluZyBRdDUgaW5jbHVkZXMgYW5kIHNpZ25hbCBzZXR1cCoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9TWEdRRjRQOGpQOUJzY2hlRk9aTjFjZTB8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRjZDgzODkwODE5MTlmODU3MmY2MjYzOTEwZGEiLCJuYW1lIjoid3JpdGUiLCJhcmd1bWVudHMiOnsicGF0aCI6ImNyYXRlcy9mbGFzaGVyLXF0L3NyYy9tYWluLnJzIiwiY29udGVudCI6InVzZSBzdGQ6OntcbiAgICBlbnYsXG4gICAgZmZpOjpDU3RyaW5nLFxuICAgIGZzLFxuICAgIG9zOjpyYXc6OntjX2NoYXIsIGNfaW50fSxcbn07XG5cbmNvbnN0IEJPQVJEUzogJnN0ciA9IGluY2x1ZGVfc3RyIShcIi4uLy4uLy4uL2FsdC1yb290ZnMtaW5zdGFsbGVyL1NVUFBPUlRFRC1CT0FSRFNcIik7XG5cbnVuc2FmZSBleHRlcm4gXCJDXCIge1xuICAgIGZuIHJ1bl9xdF9hcHAoXG4gICAgICAgIGFyZ2M6IGNfaW50LFxuICAgICAgICBhcmd2OiAqbXV0ICptdXQgY19jaGFyLFxuICAgICAgICBib2FyZHM6ICpjb25zdCBjX2NoYXIsXG4gICAgICAgIGRyaXZlczogKmNvbnN0IGNfY2hhcixcbiAgICApIC0+IGNfaW50O1xufVxuXG5mbiBtYWluKCkge1xuICAgIGxldCBhcmd1bWVudHM6IFZlYzxDU3RyaW5nPiA9IGVudjo6YXJncygpXG4gICAgICAgIC5tYXAofGFyZ3wgQ1N0cmluZzo6bmV3KGFyZykuZXhwZWN0KFwiYXBwbGljYXRpb24gYXJndW1lbnQgY29udGFpbnMgYSBOVUwgYnl0ZVwiKSlcbiAgICAgICAgLmNvbGxlY3QoKTtcbiAgICBsZXQgbXV0IGFyZ3VtZW50X3BvaW50ZXJzOiBWZWM8Km11dCBjX2NoYXI+ID0gYXJndW1lbnRzXG4gICAgICAgIC5pdGVyKClcbiAgICAgICAgLm1hcCh8YXJnfCBhcmcuYXNfcHRyKCkuY2FzdF9tdXQoKSlcbiAgICAgICAgLmNvbGxlY3QoKTtcbiAgICBsZXQgYm9hcmRzID0gQ1N0cmluZzo6bmV3KEJPQVJEUykuZXhwZWN0KFwiYm9hcmQgbGlzdCBjb250YWlucyBhIE5VTCBieXRlXCIpO1xuICAgIGxldCBkcml2ZXMgPSBDU3RyaW5nOjpuZXcoYXZhaWxhYmxlX2RyaXZlcygpLmpvaW4oXCJcXG5cIikpXG4gICAgICAgIC5leHBlY3QoXCJkcml2ZSBkZXNjcmlwdGlvbiBjb250YWlucyBhIE5VTCBieXRlXCIpO1xuXG4gICAgLy8gUUFwcGxpY2F0aW9uIG9ubHkgYm9ycm93cyBhcmd2IGFuZCB0aGUgdHdvIHN0cmluZ3MgZm9yIHRoZSBkdXJhdGlvbiBvZlxuICAgIC8vIHRoaXMgY2FsbDsgYWxsIGJhY2tpbmcgQ1N0cmluZ3MgcmVtYWluIGFsaXZlIHVudGlsIHRoZSBldmVudCBsb29wIGV4aXRzLlxuICAgIHVuc2FmZSB7XG4gICAgICAgIHJ1bl9xdF9hcHAoXG4gICAgICAgICAgICBhcmd1bWVudF9wb2ludGVycy5sZW4oKSBhcyBjX2ludCxcbiAgICAgICAgICAgIGFyZ3VtZW50X3BvaW50ZXJzLmFzX211dF9wdHIoKSxcbiAgICAgICAgICAgIGJvYXJkcy5hc19wdHIoKSxcbiAgICAgICAgICAgIGRyaXZlcy5hc19wdHIoKSxcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmZuIGF2YWlsYWJsZV9kcml2ZXMoKSAtPiBWZWM8U3RyaW5nPiB7XG4gICAgbGV0IG11dCBkcml2ZXMgPSBWZWM6Om5ldygpO1xuICAgIGxldCBPayhlbnRyaWVzKSA9IGZzOjpyZWFkX2RpcihcIi9zeXMvYmxvY2tcIikgZWxzZSB7XG4gICAgICAgIHJldHVybiBkcml2ZXM7XG4gICAgfTtcblxuICAgIGZvciBlbnRyeSBpbiBlbnRyaWVzLmZsYXR0ZW4oKSB7XG4gICAgICAgIGxldCBuYW1lID0gZW50cnkuZmlsZV9uYW1lKCkudG9fc3RyaW5nX2xvc3N5KCkuaW50b19vd25lZCgpO1xuICAgICAgICBpZiBuYW1lLnN0YXJ0c193aXRoKFwibG9vcFwiKSB8fCBuYW1lLnN0YXJ0c193aXRoKFwicmFtXCIpIHx8IG5hbWUuc3RhcnRzX3dpdGgoXCJ6cmFtXCIpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZW1vdmFibGUgPSBmczo6cmVhZF90b19zdHJpbmcoZW50cnkucGF0aCgpLmpvaW4oXCJyZW1vdmFibGVcIikpXG4gICAgICAgICAgICAubWFwKHx2YWx1ZXwgdmFsdWUudHJpbSgpID09IFwiMVwiKVxuICAgICAgICAgICAgLnVud3JhcF9vcihmYWxzZSk7XG4gICAgICAgIGlmICFyZW1vdmFibGUgJiYgIW5hbWUuc3RhcnRzX3dpdGgoXCJtbWNibGtcIikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2VjdG9ycyA9IGZzOjpyZWFkX3RvX3N0cmluZyhlbnRyeS5wYXRoKCkuam9pbihcInNpemVcIikpXG4gICAgICAgICAgICAub2soKVxuICAgICAgICAgICAgLmFuZF90aGVuKHx2YWx1ZXwgdmFsdWUudHJpbSgpLnBhcnNlOjo8dTY0PigpLm9rKCkpXG4gICAgICAgICAgICAudW53cmFwX29yKDApO1xuICAgICAgICBsZXQgbW9kZWwgPSBmczo6cmVhZF90b19zdHJpbmcoZW50cnkucGF0aCgpLmpvaW4oXCJkZXZpY2UvbW9kZWxcIikpXG4gICAgICAgICAgICAudW53cmFwX29yX2RlZmF1bHQoKVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnRvX293bmVkKCk7XG4gICAgICAgIGxldCBkZXNjcmlwdGlvbiA9IGlmIG1vZGVsLmlzX2VtcHR5KCkge1xuICAgICAgICAgICAgZm9ybWF0IShcIi9kZXYve25hbWV9XCIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbFxuICAgICAgICB9O1xuICAgICAgICBkcml2ZXMucHVzaChmb3JtYXQhKFxuICAgICAgICAgICAgXCJ7ZGVzY3JpcHRpb259ICDCtyAge30gIMK3ICAvZGV2L3tuYW1lfVwiLFxuICAgICAgICAgICAgZm9ybWF0X3NpemUoc2VjdG9ycy5zYXR1cmF0aW5nX211bCg1MTIpKVxuICAgICAgICApKTtcbiAgICB9XG4gICAgZHJpdmVzLnNvcnQoKTtcbiAgICBkcml2ZXNcbn1cblxuZm4gZm9ybWF0X3NpemUoYnl0ZXM6IHU2NCkgLT4gU3RyaW5nIHtcbiAgICBjb25zdCBHSUI6IGY2NCA9IDEwMjQuMCAqIDEwMjQuMCAqIDEwMjQuMDtcbiAgICBjb25zdCBNSUI6IGY2NCA9IDEwMjQuMCAqIDEwMjQuMDtcbiAgICBpZiBieXRlcyBhcyBmNjQgPj0gR0lCIHtcbiAgICAgICAgZm9ybWF0IShcIns6LjF9IEdCXCIsIGJ5dGVzIGFzIGY2NCAvIEdJQilcbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtYXQhKFwiezouMH0gTUJcIiwgYnl0ZXMgYXMgZjY0IC8gTUlCKVxuICAgIH1cbn1cbiJ9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6NDgwNywib3V0cHV0Ijo5NzcsImNhY2hlUmVhZCI6NjQwMDAsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6OTksInRvdGFsVG9rZW5zIjo2OTc4NCwiY29zdCI6eyJpbnB1dCI6MC4wMjQwMzUsIm91dHB1dCI6MC4wMjkzMSwiY2FjaGVSZWFkIjowLjAzMiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDg1MzQ1fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1MDI3MjAyLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGNkMzg5NmM4MTkxYjEwN2RlNTc0NWI2MGNiNiJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4YWM4ZDNmMiIsInBhcmVudElkIjoiMTg1ZWRmODkiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE1OjU3OjI2LjgzOVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfU1hHUUY0UDhqUDlCc2NoZUZPWk4xY2UwfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkY2Q4Mzg5MDgxOTE5Zjg1NzJmNjI2MzkxMGRhIiwidG9vbE5hbWUiOiJ3cml0ZSIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IlN1Y2Nlc3NmdWxseSB3cm90ZSAyNzQ4IGJ5dGVzIHRvIGNyYXRlcy9mbGFzaGVyLXF0L3NyYy9tYWluLnJzIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1MDQ2ODM5fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMjAwY2I0NjEiLCJwYXJlbnRJZCI6IjhhYzhkM2YyIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNTo1NzozNC4zNDRaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkRlbGV0aW5nIG9ic29sZXRlIFFNTCBmaWxlcyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRjZThmODYwODE5MTkxZjRjYWYyNjVjMWQzNjVcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk56cEZEaXh2eXZUcTFCNnRuSGZfTHVRSHJZdEY2VFYwOUtJUEp0aUdqcVRoQU5JTzdIRnF3eVJVdVlmN0hpOUlCQXVxOTc3NkhPMHl0Z2JENnc3amp1MnQ2NVppeUxmdW9HMjA1R244WXpHOXlMTUIxejVkUEE3c2hNOFlGRGRNT0dLQkNUNXJIWWFnM2VvQ0xsRUtrdnM3X20wemJwSFhuTTZLMWIzRW5JVlhJV1hMNU5uYW4wN1dFUmJNb0czOU9HZWl1eEZxdk1XaVloaURyaFNFRFQwcDhaMVdBSTl3T285a2Z3Z1B4TnRmeDVBMGZJUmhYZ2xoNXBzT2FxVHVNdG5FbjY2SlNncFlNT1lPR21iRjJxX3BlbGpnWGNORW1lNDJGXzg2bWdQZXk4TFRMbzNUQ0tuenloREVvQW1iNDZwMmNjUmJpOV9xY29pQTJsNTdENHl2YTNKQzFFVXExY1FQaFVuZEY0dS1NMmxXNWROdUpaRDd3Wmk1b3pYcksxaERiSWg0Z0kwVU9MZ2xDcEczeUZjZ19XRGFWQTdVTEdzM2xNaWhYcS1LMTdKcHNTWnplNXBuQ0dOd3RiaGNTWk41OS1Zb0s3WG5pWmh0SktGLTVoUTN4TEdiLU5UTVplNENGZW83OFVGLUY4ZkpSaDlCMlRIc1VySXJtNEdpQW1fZFN1NE1tM3N0MkNJQ1I2bzByQUNwNDZrbjZYdlRweXRTRGpVOGdNRmdIYXY3dFZrVm1xcVpZN1RkbXZvTFVkXzllX3ZiLXI4UEdUSUNoYVlXaTZ5Snc4SFNKcFEzaVd6RndVdWlkcGNfajBOM0hiQWFvTjAwRkpzS05vRW1YZVkwTTZRQlNpQ1NKSTI4akVwYzhfcVVneEh2aFJMZi1yR2tlZE1qU0pTYlVZZHNFYzFaTXFMMFNrTllEcXplMXRwY1ZHTnVWcGNCT1N6UkUxUDRFU241bzhaRXdxU1dsRmRITHBiZG05MDFFbmhxVW9CUmpRLVk4Zy16MDNnMXIzODNvb2hERTNCWkk4TmZKRUR6bmJ6eWVJaVBzUUNjcXdvcnlBYU9RSnRGcVVEYk5IOWR1cjRpLUVqUmp6MXU0QlJkTFl1MEVCR0NlR19ENG5RLTUzVHhtb1lGSzBPaWNLalRWVFRkZ2I5bEt4bDgxNUZYZmFHUmFYNkptSTRZMFp6S1Qyb3JHOEVEdHJUMGNjQzE1aExmUDlJYWtzTHBZYzVBeHdtRmdqSGF3TWk4V214dWt0WjJ5YWFOaGJnRERZSmpSdTZHb1VqTG8xdlpsYkRDRVY4QVhpVXhwNGxUSV9GNzJyRXJHYkJvYTA9XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipEZWxldGluZyBvYnNvbGV0ZSBRTUwgZmlsZXMqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfVzAzNUJ5M3FFZmdJZVpGcmxwaDRrUzBOfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkY2U5ZTMzODgxOTE4NDAwNDZhOThiNWM1Y2I3IiwibmFtZSI6ImVkaXQiLCJhcmd1bWVudHMiOnsicGF0aCI6ImNyYXRlcy9mbGFzaGVyLXF0L3NyYy91aS5jcHAiLCJlZGl0cyI6W3sib2xkVGV4dCI6IiNpbmNsdWRlIDxRQXBwbGljYXRpb24+XG4jaW5jbHVkZSA8UUJ1dHRvbkdyb3VwPlxuI2luY2x1ZGUgPFFDaGVja0JveD5cbiNpbmNsdWRlIDxRQ29tYm9Cb3g+XG4jaW5jbHVkZSA8UURpYWxvZz4iLCJuZXdUZXh0IjoiI2luY2x1ZGUgPFFBY3Rpb24+XG4jaW5jbHVkZSA8UUFwcGxpY2F0aW9uPlxuI2luY2x1ZGUgPFFDaGVja0JveD5cbiNpbmNsdWRlIDxRQ29tYm9Cb3g+XG4jaW5jbHVkZSA8UURpYWxvZz4ifSx7Im9sZFRleHQiOiIjaW5jbHVkZSA8UUZpbGVEaWFsb2c+XG4jaW5jbHVkZSA8UUZvcm1MYXlvdXQ+XG4jaW5jbHVkZSA8UUZyYW1lPiIsIm5ld1RleHQiOiIjaW5jbHVkZSA8UUZpbGVEaWFsb2c+XG4jaW5jbHVkZSA8UUZpbGVJbmZvPlxuI2luY2x1ZGUgPFFGb250PlxuI2luY2x1ZGUgPFFGb3JtTGF5b3V0PlxuI2luY2x1ZGUgPFFGcmFtZT4ifSx7Im9sZFRleHQiOiIjaW5jbHVkZSA8UU1haW5XaW5kb3c+XG4jaW5jbHVkZSA8UU1lbnVCYXI+XG4jaW5jbHVkZSA8UU1lc3NhZ2VCb3g+IiwibmV3VGV4dCI6IiNpbmNsdWRlIDxRTWFpbldpbmRvdz5cbiNpbmNsdWRlIDxRTWFwPlxuI2luY2x1ZGUgPFFNZW51QmFyPlxuI2luY2x1ZGUgPFFNZXNzYWdlQm94PlxuI2luY2x1ZGUgPFFQYWxldHRlPiJ9LHsib2xkVGV4dCI6IiNpbmNsdWRlIDxRUmFkaW9CdXR0b24+XG4jaW5jbHVkZSA8UVNjcm9sbEFyZWE+IiwibmV3VGV4dCI6IiNpbmNsdWRlIDxRUmFkaW9CdXR0b24+XG4jaW5jbHVkZSA8UVJlZ0V4cD5cbiNpbmNsdWRlIDxRU2Nyb2xsQXJlYT4ifV19fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MTcxMywib3V0cHV0IjoyODksImNhY2hlUmVhZCI6NjgwOTYsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MTgsInRvdGFsVG9rZW5zIjo3MDA5OCwiY29zdCI6eyJpbnB1dCI6MC4wMDg1NjUwMDAwMDAwMDAwMDEsIm91dHB1dCI6MC4wMDg2NywiY2FjaGVSZWFkIjowLjAzNDA0OCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDUxMjgzfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1MDQ2ODQyLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGNlNzNhOGM4MTkxODE1ZWM3MzQ3MTRlMzBiNSJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4MTIyY2RhNSIsInBhcmVudElkIjoiMjAwY2I0NjEiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE1OjU3OjM0LjM1MloiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfVzAzNUJ5M3FFZmdJZVpGcmxwaDRrUzBOfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkY2U5ZTMzODgxOTE4NDAwNDZhOThiNWM1Y2I3IiwidG9vbE5hbWUiOiJlZGl0IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiU3VjY2Vzc2Z1bGx5IHJlcGxhY2VkIDQgYmxvY2socykgaW4gY3JhdGVzL2ZsYXNoZXItcXQvc3JjL3VpLmNwcC4ifV0sImRldGFpbHMiOnsiZGlmZiI6IisgIDEgI2luY2x1ZGUgPFFBY3Rpb24+XG4gICAxICNpbmNsdWRlIDxRQXBwbGljYXRpb24+XG4tICAyICNpbmNsdWRlIDxRQnV0dG9uR3JvdXA+XG4gICAzICNpbmNsdWRlIDxRQ2hlY2tCb3g+XG4gICA0ICNpbmNsdWRlIDxRQ29tYm9Cb3g+XG4gICA1ICNpbmNsdWRlIDxRRGlhbG9nPlxuICAgNiAjaW5jbHVkZSA8UURpYWxvZ0J1dHRvbkJveD5cbiAgIDcgI2luY2x1ZGUgPFFGaWxlRGlhbG9nPlxuKyAgOCAjaW5jbHVkZSA8UUZpbGVJbmZvPlxuKyAgOSAjaW5jbHVkZSA8UUZvbnQ+XG4gICA4ICNpbmNsdWRlIDxRRm9ybUxheW91dD5cbiAgIDkgI2luY2x1ZGUgPFFGcmFtZT5cbiAgMTAgI2luY2x1ZGUgPFFHcm91cEJveD5cbiAgMTEgI2luY2x1ZGUgPFFIQm94TGF5b3V0PlxuICAxMiAjaW5jbHVkZSA8UUxhYmVsPlxuICAxMyAjaW5jbHVkZSA8UUxpbmVFZGl0PlxuICAxNCAjaW5jbHVkZSA8UU1haW5XaW5kb3c+XG4rIDE3ICNpbmNsdWRlIDxRTWFwPlxuICAxNSAjaW5jbHVkZSA8UU1lbnVCYXI+XG4gIDE2ICNpbmNsdWRlIDxRTWVzc2FnZUJveD5cbisgMjAgI2luY2x1ZGUgPFFQYWxldHRlPlxuICAxNyAjaW5jbHVkZSA8UVB1c2hCdXR0b24+XG4gIDE4ICNpbmNsdWRlIDxRUmFkaW9CdXR0b24+XG4rIDIzICNpbmNsdWRlIDxRUmVnRXhwPlxuICAxOSAjaW5jbHVkZSA8UVNjcm9sbEFyZWE+XG4gIDIwICNpbmNsdWRlIDxRU3RhdHVzQmFyPlxuICAyMSAjaW5jbHVkZSA8UVN0eWxlPlxuICAyMiAjaW5jbHVkZSA8UVRyZWVXaWRnZXQ+XG4gICAgIC4uLiIsInBhdGNoIjoiLS0tIGNyYXRlcy9mbGFzaGVyLXF0L3NyYy91aS5jcHBcbisrKyBjcmF0ZXMvZmxhc2hlci1xdC9zcmMvdWkuY3BwXG5AQCAtMSwyMiArMSwyNyBAQFxuKyNpbmNsdWRlIDxRQWN0aW9uPlxuICNpbmNsdWRlIDxRQXBwbGljYXRpb24+XG4tI2luY2x1ZGUgPFFCdXR0b25Hcm91cD5cbiAjaW5jbHVkZSA8UUNoZWNrQm94PlxuICNpbmNsdWRlIDxRQ29tYm9Cb3g+XG4gI2luY2x1ZGUgPFFEaWFsb2c+XG4gI2luY2x1ZGUgPFFEaWFsb2dCdXR0b25Cb3g+XG4gI2luY2x1ZGUgPFFGaWxlRGlhbG9nPlxuKyNpbmNsdWRlIDxRRmlsZUluZm8+XG4rI2luY2x1ZGUgPFFGb250PlxuICNpbmNsdWRlIDxRRm9ybUxheW91dD5cbiAjaW5jbHVkZSA8UUZyYW1lPlxuICNpbmNsdWRlIDxRR3JvdXBCb3g+XG4gI2luY2x1ZGUgPFFIQm94TGF5b3V0PlxuICNpbmNsdWRlIDxRTGFiZWw+XG4gI2luY2x1ZGUgPFFMaW5lRWRpdD5cbiAjaW5jbHVkZSA8UU1haW5XaW5kb3c+XG4rI2luY2x1ZGUgPFFNYXA+XG4gI2luY2x1ZGUgPFFNZW51QmFyPlxuICNpbmNsdWRlIDxRTWVzc2FnZUJveD5cbisjaW5jbHVkZSA8UVBhbGV0dGU+XG4gI2luY2x1ZGUgPFFQdXNoQnV0dG9uPlxuICNpbmNsdWRlIDxRUmFkaW9CdXR0b24+XG4rI2luY2x1ZGUgPFFSZWdFeHA+XG4gI2luY2x1ZGUgPFFTY3JvbGxBcmVhPlxuICNpbmNsdWRlIDxRU3RhdHVzQmFyPlxuICNpbmNsdWRlIDxRU3R5bGU+XG4gI2luY2x1ZGUgPFFUcmVlV2lkZ2V0PlxuIiwiZmlyc3RDaGFuZ2VkTGluZSI6MX0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTUwNTQzNTJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI3ZGRlNjI2MCIsInBhcmVudElkIjoiODEyMmNkYTUiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE1OjU3OjQxLjQxNVoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfN0wySVU0MDVMWXFMemtGazRMdHFCSkE4fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkY2YzZjVkMDgxOTFiMDUyY2ZkYTk0ZTE5NzA0IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6InJtIC1yZiBjcmF0ZXMvZmxhc2hlci1xdC9xbWxcbmNhcmdvIHVwZGF0ZSAtcCBxbWV0YW9iamVjdCAtLXByZWNpc2UgMC4yLjEwIDI+L2Rldi9udWxsIHx8IHRydWVcbmNhcmdvIG1ldGFkYXRhIC0tbm8tZGVwcyAtLWZvcm1hdC12ZXJzaW9uIDEgPi9kZXYvbnVsbFxuY2FyZ28gY2hlY2sgLXAgZmxhc2hlci1xdCIsInRpbWVvdXQiOjEyMH19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoxMDA1LCJvdXRwdXQiOjc5LCJjYWNoZVJlYWQiOjY5MTIwLCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjAsInRvdGFsVG9rZW5zIjo3MDIwNCwiY29zdCI6eyJpbnB1dCI6MC4wMDUwMjUwMDAwMDAwMDAwMDEsIm91dHB1dCI6MC4wMDIzNywiY2FjaGVSZWFkIjowLjAzNDU2LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNDE5NTV9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTUwNTQzNTUsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkY2VlZDAzYzgxOTE5YzliMmEyM2RkZGEyYWFhIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjgwMDg3ZmE2IiwicGFyZW50SWQiOiI3ZGRlNjI2MCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTU6NTc6NTcuNDI2WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF83TDJJVTQwNUxZcUx6a0ZrNEx0cUJKQTh8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRjZjNmNWQwODE5MWIwNTJjZmRhOTRlMTk3MDQiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIgICBDb21waWxpbmcgcGtnLWNvbmZpZyB2MC4zLjMzXG4gICBDb21waWxpbmcgZmxhc2hlci1xdCB2MC4xLjAgKC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvY3JhdGVzL2ZsYXNoZXItcXQpXG4gICAgRmluaXNoZWQgYGRldmAgcHJvZmlsZSBbdW5vcHRpbWl6ZWQgKyBkZWJ1Z2luZm9dIHRhcmdldChzKSBpbiAyLjgxc1xuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1MDc3NDI2fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMzMxYmM4YzMiLCJwYXJlbnRJZCI6IjgwMDg3ZmE2IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNTo1ODowMi41NDdaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlZlcmlmeWluZyBzdWNjZXNzZnVsIFF0IHBhY2thZ2UgZGV0ZWN0aW9uKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGQwN2RhMTA4MTkxOTM2ZWM5MDJkMjZiN2JlOVwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTjBLbTQwUTJoTzJ2NlZYbVhhdHNqOVYxc0llbmhPWVlrMXM1VG80aVRoLWQ5M0JEWER5WWUzaEJBaURTdEpkYUxRRDhhS2FBRVh0WlNzemNsOFp0VDBlUzAxRmdXdHpQc2pfY1UycWc3UzhjcFZmaUROUzllZEVUN2VlcHM3amJVVzUxNm5adE1zSFQ2UmM1TWFmVkhOZXBPY2RuRWJ2ZGw1UjNPSzBSVXAyeE5GcjUwa3lXcGhUWm9nZGh6TW14UnRZUktFb0FmYkt1bUphMU1EYkZKQ0hWdVBmRy1QX1BCRkx1SWpfOEtUYlNBNlAzbFNJSFU3U3RFLW1rQ0VTM0FDY1pOQVJySmRwb1pqYmlISDAyMzd0dUM1YjN6TUpubkJQdmV3YkdvY1FudUc5RUstWVR2RWdWT045a3lkZVV4TnFQUzRkdjJobWlKMG5BNGppdzJkYVhxWFlHdlo0Z1FVRWdIcWJPRVJIZ3pYc3N0YzJNUzdFcjFiczRPRlB3UGVHaXZMeGd5dnBvNVpPZHQwOUpVNDVUdWI3dnlhNlRaS0NsUVI0ZWwycUo4bzV4NGY3RjJyN1NnV25Fa1dRTVFJV2hmd0FHdm5fQ0xNUXltVVExME1NMFhDREE2T3NPdE9wMFpyZ0Z3cUdtQUpsazJBQ0syYjQxU1JLQk9NVDNiT2JqblhVWFgyZDNpTWVpaGgtQXNSTDY4LTVzTmpIamtYSVhUYnVKSVd3LXhodmExVmlaLVo0dW1xaXl1OUtvcjhQZDN6UmFTT0Y1WDZIOHFrYmFvdTNNNjVCcVNwR2pEYkZvcmRCNHNhQlB4ZUc4MktOVGVCOW13a01fTzN1VlJYbUQ5MDVLUkFOSFpIckNZMFplSk1meWltTUMxVWNMN0cyY3VSMlUtYVlVN2RCQ0hSYUp6UDQzdUtfLUFaTS01cmktTmZxRC1BZ0tmTks0aWZEWnRCZWhvQWhBRWZMdHVGQ0RfYklHV3hYVzkwbUpad0lJNU9tazhiR0dObkh6OE9FcXl5dld1V0JveXRRRi1nRlJfR0s5N3hsRTZxYnlmWWt3X0x0a2g0RXl5eTZmUVFoUndXaFVrR2F6WjJwd01vakhCOVlVMW9TNjV2TVVmSExCVXBqSF9qNkVIeXRoVUpsamstODVWN2pkek1NeERfUTRlbm1oNU1EYmRBM0MwcHdXVjRZOFlGUl9QWTNGamU2OFlnYVphUmJKTGJSRTJxcVE4RkhaWFFFdkdWNW1TMTVPTzVrT0RJRzFnQnFaZWJ6TG5oOFM0bmx2dFRzSVppdWt4NzQ3Z3ktcTBDbEk5aFliY2Z4M1FaUzZuVUtDOXp2YThGdU14c2p1RGhpbFhadEdDT2F1b2tzbVRxdkZsRzlXcW9xckpKVGdPenR6eXA2Qy0zSmtZd1V4c2JGNjRpa0RBX0dOZWNfZnAzS1dNWVdhN0NmeWFsd2ZNR3ZmYVJSVV8taHN4VzR4N0JsV3BPLTRJRTMzWWZtRFRUM0tpQXlfaE94aFd4SEFWUHpsWVJtSW9lVVY2OUwwZFNXU2NjRTBtQ3Zycy1DSDg4ZGszemtQUjFyZjVydkZ5M3VGRGRYb2cwbFJ1LVRoYy1sSGNzdXBvMDZtTlNLUV9mR3hkUHMwc1huajVZVDZwNXNrclU5UjJPNTBSZWJoM0VlbXdySS1JOHFyQ3NHYmdrdTVFX250R2QzRmhZYVhVZlJNMzE3cnkyOGYweVBmYXg3bkhDN1NqSUYweWJDOENvPVwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqVmVyaWZ5aW5nIHN1Y2Nlc3NmdWwgUXQgcGFja2FnZSBkZXRlY3Rpb24qKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfWnlnZjA0Sk03RmtIR3kzS2FjM2RvS1ZEfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZDBhNDc4ODgxOTFiZDhjMWRiYmM1NmNlYjg4IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImNhcmdvIGJ1aWxkIiwidGltZW91dCI6MTIwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjExNjAsIm91dHB1dCI6ODgsImNhY2hlUmVhZCI6NjkxMjAsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6NjMsInRvdGFsVG9rZW5zIjo3MDM2OCwiY29zdCI6eyJpbnB1dCI6MC4wMDU4MDAwMDAwMDAwMDAwMDA1LCJvdXRwdXQiOjAuMDAyNjQsImNhY2hlUmVhZCI6MC4wMzQ1NiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDQzfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1MDc3NDI5LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGQwNWQ5OTg4MTkxOTg2NmQyMTUwYTZjMWNjOSJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJmZDM5Y2VkNSIsInBhcmVudElkIjoiMzMxYmM4YzMiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE1OjU4OjA0LjkxM1oiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfWnlnZjA0Sk03RmtIR3kzS2FjM2RvS1ZEfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZDBhNDc4ODgxOTFiZDhjMWRiYmM1NmNlYjg4IiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTogaW4gZnVuY3Rpb24gYHN0ZDo6ZW5hYmxlX2lmPFF0UHJpdmF0ZTo6RnVuY3Rpb25Qb2ludGVyPChhbm9ueW1vdXMgbmFtZXNwYWNlKTo6TWFpbldpbmRvdzo6Y3JlYXRlSGFyZHdhcmUoUVZCb3hMYXlvdXQqKTo6e2xhbWJkYSgpIzF9Pjo6QXJndW1lbnRDb3VudD09KC0xKSwgUU1ldGFPYmplY3Q6OkNvbm5lY3Rpb24+Ojp0eXBlIFFPYmplY3Q6OmNvbm5lY3Q8dm9pZCAoUUFic3RyYWN0QnV0dG9uOjoqKShib29sKSwgKGFub255bW91cyBuYW1lc3BhY2UpOjpNYWluV2luZG93OjpjcmVhdGVIYXJkd2FyZShRVkJveExheW91dCopOjp7bGFtYmRhKCkjMX0+KFF0UHJpdmF0ZTo6RnVuY3Rpb25Qb2ludGVyPHZvaWQgKFFBYnN0cmFjdEJ1dHRvbjo6KikoYm9vbCk+OjpPYmplY3QgY29uc3QqLCB2b2lkIChRQWJzdHJhY3RCdXR0b246OiopKGJvb2wpLCBRT2JqZWN0IGNvbnN0KiwgKGFub255bW91cyBuYW1lc3BhY2UpOjpNYWluV2luZG93OjpjcmVhdGVIYXJkd2FyZShRVkJveExheW91dCopOjp7bGFtYmRhKCkjMX0sIFF0OjpDb25uZWN0aW9uVHlwZSknOlxuICAgICAgICAgIC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3FvYmplY3QuaDozNDc6KC50ZXh0Ll9aTjdRT2JqZWN0N2Nvbm5lY3RJTTE1UUFic3RyYWN0QnV0dG9uRnZiRVpOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3cxNGNyZWF0ZUhhcmR3YXJlRVAxMVFWQm94TGF5b3V0RVVsdkVfRUVOU3Q5ZW5hYmxlX2lmSVhlcXNyTjlRdFByaXZhdGUxNUZ1bmN0aW9uUG9pbnRlcklUMF9FRTEzQXJndW1lbnRDb3VudExpbjFFRU4xMVFNZXRhT2JqZWN0MTBDb25uZWN0aW9uRUU0dHlwZUVQS05TQl9JVF9FNk9iamVjdEVTSV9QS1NfU0NfTjJRdDE0Q29ubmVjdGlvblR5cGVFKzB4OWIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRQWJzdHJhY3RCdXR0b246OnN0YXRpY01ldGFPYmplY3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xb2JqZWN0Lmg6MzQ3OigudGV4dC5fWk43UU9iamVjdDdjb25uZWN0SU0xNVFBYnN0cmFjdEJ1dHRvbkZ2YkVaTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93MTRjcmVhdGVIYXJkd2FyZUVQMTFRVkJveExheW91dEVVbHZFX0VFTlN0OWVuYWJsZV9pZklYZXFzck45UXRQcml2YXRlMTVGdW5jdGlvblBvaW50ZXJJVDBfRUUxM0FyZ3VtZW50Q291bnRMaW4xRUVOMTFRTWV0YU9iamVjdDEwQ29ubmVjdGlvbkVFNHR5cGVFUEtOU0JfSVRfRTZPYmplY3RFU0lfUEtTX1NDX04yUXQxNENvbm5lY3Rpb25UeXBlRSsweGI0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUU9iamVjdDo6Y29ubmVjdEltcGwoUU9iamVjdCBjb25zdCosIHZvaWQqKiwgUU9iamVjdCBjb25zdCosIHZvaWQqKiwgUXRQcml2YXRlOjpRU2xvdE9iamVjdEJhc2UqLCBRdDo6Q29ubmVjdGlvblR5cGUsIGludCBjb25zdCosIFFNZXRhT2JqZWN0IGNvbnN0KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiBpbiBmdW5jdGlvbiBgc3RkOjplbmFibGVfaWY8UXRQcml2YXRlOjpGdW5jdGlvblBvaW50ZXI8KGFub255bW91cyBuYW1lc3BhY2UpOjpNYWluV2luZG93OjpjcmVhdGVEZXN0aW5hdGlvbihRVkJveExheW91dCosIFFTdHJpbmcgY29uc3QmKTo6e2xhbWJkYShib29sKSMxfT46OkFyZ3VtZW50Q291bnQ9PSgtMSksIFFNZXRhT2JqZWN0OjpDb25uZWN0aW9uPjo6dHlwZSBRT2JqZWN0Ojpjb25uZWN0PHZvaWQgKFFBYnN0cmFjdEJ1dHRvbjo6KikoYm9vbCksIChhbm9ueW1vdXMgbmFtZXNwYWNlKTo6TWFpbldpbmRvdzo6Y3JlYXRlRGVzdGluYXRpb24oUVZCb3hMYXlvdXQqLCBRU3RyaW5nIGNvbnN0Jik6OntsYW1iZGEoYm9vbCkjMX0+KFF0UHJpdmF0ZTo6RnVuY3Rpb25Qb2ludGVyPHZvaWQgKFFBYnN0cmFjdEJ1dHRvbjo6KikoYm9vbCk+OjpPYmplY3QgY29uc3QqLCB2b2lkIChRQWJzdHJhY3RCdXR0b246OiopKGJvb2wpLCBRT2JqZWN0IGNvbnN0KiwgKGFub255bW91cyBuYW1lc3BhY2UpOjpNYWluV2luZG93OjpjcmVhdGVEZXN0aW5hdGlvbihRVkJveExheW91dCosIFFTdHJpbmcgY29uc3QmKTo6e2xhbWJkYShib29sKSMxfSwgUXQ6OkNvbm5lY3Rpb25UeXBlKSc6XG4gICAgICAgICAgL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcW9iamVjdC5oOjM0NzooLnRleHQuX1pON1FPYmplY3Q3Y29ubmVjdElNMTVRQWJzdHJhY3RCdXR0b25GdmJFWk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvdzE3Y3JlYXRlRGVzdGluYXRpb25FUDExUVZCb3hMYXlvdXRSSzdRU3RyaW5nRVVsYkVfRUVOU3Q5ZW5hYmxlX2lmSVhlcXNyTjlRdFByaXZhdGUxNUZ1bmN0aW9uUG9pbnRlcklUMF9FRTEzQXJndW1lbnRDb3VudExpbjFFRU4xMVFNZXRhT2JqZWN0MTBDb25uZWN0aW9uRUU0dHlwZUVQS05TRV9JVF9FNk9iamVjdEVTTF9QS1NfU0ZfTjJRdDE0Q29ubmVjdGlvblR5cGVFKzB4OWIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRQWJzdHJhY3RCdXR0b246OnN0YXRpY01ldGFPYmplY3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xb2JqZWN0Lmg6MzQ3OigudGV4dC5fWk43UU9iamVjdDdjb25uZWN0SU0xNVFBYnN0cmFjdEJ1dHRvbkZ2YkVaTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93MTdjcmVhdGVEZXN0aW5hdGlvbkVQMTFRVkJveExheW91dFJLN1FTdHJpbmdFVWxiRV9FRU5TdDllbmFibGVfaWZJWGVxc3JOOVF0UHJpdmF0ZTE1RnVuY3Rpb25Qb2ludGVySVQwX0VFMTNBcmd1bWVudENvdW50TGluMUVFTjExUU1ldGFPYmplY3QxMENvbm5lY3Rpb25FRTR0eXBlRVBLTlNFX0lUX0U2T2JqZWN0RVNMX1BLU19TRl9OMlF0MTRDb25uZWN0aW9uVHlwZUUrMHhiNCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFPYmplY3Q6OmNvbm5lY3RJbXBsKFFPYmplY3QgY29uc3QqLCB2b2lkKiosIFFPYmplY3QgY29uc3QqLCB2b2lkKiosIFF0UHJpdmF0ZTo6UVNsb3RPYmplY3RCYXNlKiwgUXQ6OkNvbm5lY3Rpb25UeXBlLCBpbnQgY29uc3QqLCBRTWV0YU9iamVjdCBjb25zdCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTogaW4gZnVuY3Rpb24gYFFTdGF0aWNTdHJpbmdEYXRhPDEzPjo6ZGF0YV9wdHIoKSBjb25zdCc6XG4gICAgICAgICAgL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcXN0cmluZ2xpdGVyYWwuaDo5NjooLnRleHQuX1pOSzE3UVN0YXRpY1N0cmluZ0RhdGFJTGkxM0VFOGRhdGFfcHRyRXZbX1pOSzE3UVN0YXRpY1N0cmluZ0RhdGFJTGkxM0VFOGRhdGFfcHRyRXZdKzB4M2EpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBxdF9hc3NlcnQoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLCBpbnQpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTogaW4gZnVuY3Rpb24gYHN0ZDo6ZW5hYmxlX2lmPFF0UHJpdmF0ZTo6RnVuY3Rpb25Qb2ludGVyPChhbm9ueW1vdXMgbmFtZXNwYWNlKTo6TWFpbldpbmRvdzo6Y3JlYXRlRGVzdGluYXRpb24oUVZCb3hMYXlvdXQqLCBRU3RyaW5nIGNvbnN0Jik6OntsYW1iZGEoKSMxfT46OkFyZ3VtZW50Q291bnQ9PSgtMSksIFFNZXRhT2JqZWN0OjpDb25uZWN0aW9uPjo6dHlwZSBRT2JqZWN0Ojpjb25uZWN0PHZvaWQgKFFBYnN0cmFjdEJ1dHRvbjo6KikoYm9vbCksIChhbm9ueW1vdXMgbmFtZXNwYWNlKTo6TWFpbldpbmRvdzo6Y3JlYXRlRGVzdGluYXRpb24oUVZCb3hMYXlvdXQqLCBRU3RyaW5nIGNvbnN0Jik6OntsYW1iZGEoKSMxfT4oUXRQcml2YXRlOjpGdW5jdGlvblBvaW50ZXI8dm9pZCAoUUFic3RyYWN0QnV0dG9uOjoqKShib29sKT46Ok9iamVjdCBjb25zdCosIHZvaWQgKFFBYnN0cmFjdEJ1dHRvbjo6KikoYm9vbCksIFFPYmplY3QgY29uc3QqLCAoYW5vbnltb3VzIG5hbWVzcGFjZSk6Ok1haW5XaW5kb3c6OmNyZWF0ZURlc3RpbmF0aW9uKFFWQm94TGF5b3V0KiwgUVN0cmluZyBjb25zdCYpOjp7bGFtYmRhKCkjMX0sIFF0OjpDb25uZWN0aW9uVHlwZSknOlxuICAgICAgICAgIC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3FvYmplY3QuaDozNDc6KC50ZXh0Ll9aTjdRT2JqZWN0N2Nvbm5lY3RJTTE1UUFic3RyYWN0QnV0dG9uRnZiRVpOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3cxN2NyZWF0ZURlc3RpbmF0aW9uRVAxMVFWQm94TGF5b3V0Uks3UVN0cmluZ0VVbHZFX0VFTlN0OWVuYWJsZV9pZklYZXFzck45UXRQcml2YXRlMTVGdW5jdGlvblBvaW50ZXJJVDBfRUUxM0FyZ3VtZW50Q291bnRMaW4xRUVOMTFRTWV0YU9iamVjdDEwQ29ubmVjdGlvbkVFNHR5cGVFUEtOU0VfSVRfRTZPYmplY3RFU0xfUEtTX1NGX04yUXQxNENvbm5lY3Rpb25UeXBlRSsweDliKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUUFic3RyYWN0QnV0dG9uOjpzdGF0aWNNZXRhT2JqZWN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcW9iamVjdC5oOjM0NzooLnRleHQuX1pON1FPYmplY3Q3Y29ubmVjdElNMTVRQWJzdHJhY3RCdXR0b25GdmJFWk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvdzE3Y3JlYXRlRGVzdGluYXRpb25FUDExUVZCb3hMYXlvdXRSSzdRU3RyaW5nRVVsdkVfRUVOU3Q5ZW5hYmxlX2lmSVhlcXNyTjlRdFByaXZhdGUxNUZ1bmN0aW9uUG9pbnRlcklUMF9FRTEzQXJndW1lbnRDb3VudExpbjFFRU4xMVFNZXRhT2JqZWN0MTBDb25uZWN0aW9uRUU0dHlwZUVQS05TRV9JVF9FNk9iamVjdEVTTF9QS1NfU0ZfTjJRdDE0Q29ubmVjdGlvblR5cGVFKzB4YjQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRT2JqZWN0Ojpjb25uZWN0SW1wbChRT2JqZWN0IGNvbnN0Kiwgdm9pZCoqLCBRT2JqZWN0IGNvbnN0Kiwgdm9pZCoqLCBRdFByaXZhdGU6OlFTbG90T2JqZWN0QmFzZSosIFF0OjpDb25uZWN0aW9uVHlwZSwgaW50IGNvbnN0KiwgUU1ldGFPYmplY3QgY29uc3QqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6IGluIGZ1bmN0aW9uIGBRU3RhdGljU3RyaW5nRGF0YTw0Pjo6ZGF0YV9wdHIoKSBjb25zdCc6XG4gICAgICAgICAgL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcXN0cmluZ2xpdGVyYWwuaDo5NjooLnRleHQuX1pOSzE3UVN0YXRpY1N0cmluZ0RhdGFJTGk0RUU4ZGF0YV9wdHJFdltfWk5LMTdRU3RhdGljU3RyaW5nRGF0YUlMaTRFRThkYXRhX3B0ckV2XSsweDNhKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcXRfYXNzZXJ0KGNoYXIgY29uc3QqLCBjaGFyIGNvbnN0KiwgaW50KSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6IGluIGZ1bmN0aW9uIGBRU3RyaW5nIFF0UHJpdmF0ZTo6YXJnVG9RU3RyaW5nRGlzcGF0Y2g8UVN0cmluZ1ZpZXcsIFF0UHJpdmF0ZTo6UVN0cmluZ1ZpZXdBcmcsIFF0UHJpdmF0ZTo6UVN0cmluZ1ZpZXdBcmcsIFF0UHJpdmF0ZTo6UVN0cmluZ1ZpZXdBcmc+KFFTdHJpbmdWaWV3LCBRdFByaXZhdGU6OlFTdHJpbmdWaWV3QXJnIGNvbnN0JiwgUXRQcml2YXRlOjpRU3RyaW5nVmlld0FyZyBjb25zdCYsIFF0UHJpdmF0ZTo6UVN0cmluZ1ZpZXdBcmcgY29uc3QmKSc6XG4gICAgICAgICAgL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcXN0cmluZy5oOjIxMDg6KC50ZXh0Ll9aTks3UVN0cmluZzNhcmdJSlJTX1MxX1JLU19FRUVOU3Q5ZW5hYmxlX2lmSVhhYWdlc1pUX0xpMkVzclN0N2lzX3NhbWVJTjlRdFByaXZhdGU4Qm9vbExpc3RJSlhzcHNyTlNfMzNpc19jb252ZXJ0aWJsZV90b192aWV3X29yX3FzdHJpbmdJVF9FRTV2YWx1ZUVMYjFFRUVFTlM3X0lKTGIxRVhzcHNyU0FfNXZhbHVlRUVFRUU1dmFsdWVFU19FNHR5cGVFRHBPUzlfW19aTks3UVN0cmluZzNhcmdJSlJTX1MxX1JLU19FRUVOU3Q5ZW5hYmxlX2lmSVhhYWdlc1pUX0xpMkVzclN0N2lzX3NhbWVJTjlRdFByaXZhdGU4Qm9vbExpc3RJSlhzcHNyTlNfMzNpc19jb252ZXJ0aWJsZV90b192aWV3X29yX3FzdHJpbmdJVF9FRTV2YWx1ZUVMYjFFRUVFTlM3X0lKTGIxRVhzcHNyU0FfNXZhbHVlRUVFRUU1dmFsdWVFU19FNHR5cGVFRHBPUzlfXSsweDE2Nik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFF0UHJpdmF0ZTo6YXJnVG9RU3RyaW5nKFFTdHJpbmdWaWV3LCB1bnNpZ25lZCBsb25nLCBRdFByaXZhdGU6OkFyZ0Jhc2UgY29uc3QqKiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiBpbiBmdW5jdGlvbiBgUVN0YXRpY1N0cmluZ0RhdGE8MTY+OjpkYXRhX3B0cigpIGNvbnN0JzpcbiAgICAgICAgICAvdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xc3RyaW5nbGl0ZXJhbC5oOjk2OigudGV4dC5fWk5LMTdRU3RhdGljU3RyaW5nRGF0YUlMaTE2RUU4ZGF0YV9wdHJFdltfWk5LMTdRU3RhdGljU3RyaW5nRGF0YUlMaTE2RUU4ZGF0YV9wdHJFdl0rMHgzYSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHF0X2Fzc2VydChjaGFyIGNvbnN0KiwgY2hhciBjb25zdCosIGludCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiBpbiBmdW5jdGlvbiBgUVN0YXRpY1N0cmluZ0RhdGE8OT46OmRhdGFfcHRyKCkgY29uc3QnOlxuICAgICAgICAgIC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3FzdHJpbmdsaXRlcmFsLmg6OTY6KC50ZXh0Ll9aTksxN1FTdGF0aWNTdHJpbmdEYXRhSUxpOUVFOGRhdGFfcHRyRXZbX1pOSzE3UVN0YXRpY1N0cmluZ0RhdGFJTGk5RUU4ZGF0YV9wdHJFdl0rMHgzYSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHF0X2Fzc2VydChjaGFyIGNvbnN0KiwgY2hhciBjb25zdCosIGludCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiBpbiBmdW5jdGlvbiBgUUxpc3Q8UVN0cmluZz46OmRlYWxsb2MoUUxpc3REYXRhOjpEYXRhKiknOlxuICAgICAgICAgIC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3FsaXN0Lmg6OTIzOigudGV4dC5fWk41UUxpc3RJN1FTdHJpbmdFN2RlYWxsb2NFUE45UUxpc3REYXRhNERhdGFFW19aTjVRTGlzdEk3UVN0cmluZ0U3ZGVhbGxvY0VQTjlRTGlzdERhdGE0RGF0YUVdKzB4NWIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRTGlzdERhdGE6OmRpc3Bvc2UoUUxpc3REYXRhOjpEYXRhKiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiBpbiBmdW5jdGlvbiBgUUxpc3Q8UVN0cmluZz46OmRldGFjaF9oZWxwZXJfZ3JvdyhpbnQsIGludCknOlxuICAgICAgICAgIC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3FsaXN0Lmg6ODAzOigudGV4dC5fWk41UUxpc3RJN1FTdHJpbmdFMThkZXRhY2hfaGVscGVyX2dyb3dFaWlbX1pONVFMaXN0STdRU3RyaW5nRTE4ZGV0YWNoX2hlbHBlcl9ncm93RWlpXSsweDNiKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUUxpc3REYXRhOjpkZXRhY2hfZ3JvdyhpbnQqLCBpbnQpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTogaW4gZnVuY3Rpb24gYGJvb2wgcU1hcExlc3NUaGFuS2V5PFFTdHJpbmc+KFFTdHJpbmcgY29uc3QmLCBRU3RyaW5nIGNvbnN0JiknOlxuICAgICAgICAgIC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3FtYXAuaDo2ODooLnRleHQuX1oxNXFNYXBMZXNzVGhhbktleUk3UVN0cmluZ0ViUktUX1MzX1tfWjE1cU1hcExlc3NUaGFuS2V5STdRU3RyaW5nRWJSS1RfUzNfXSsweDIzKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgb3BlcmF0b3I8KFFTdHJpbmcgY29uc3QmLCBRU3RyaW5nIGNvbnN0JiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiBpbiBmdW5jdGlvbiBgUVR5cGVkQXJyYXlEYXRhPChhbm9ueW1vdXMgbmFtZXNwYWNlKTo6Qm9hcmQ+OjphbGxvY2F0ZSh1bnNpZ25lZCBsb25nLCBRRmxhZ3M8UUFycmF5RGF0YTo6QWxsb2NhdGlvbk9wdGlvbj4pJzpcbiAgICAgICAgICAvdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xYXJyYXlkYXRhLmg6MjI0OigudGV4dC5fWk4xNVFUeXBlZEFycmF5RGF0YUlOMTJfR0xPQkFMX19OXzE1Qm9hcmRFRThhbGxvY2F0ZUVtNlFGbGFnc0lOMTBRQXJyYXlEYXRhMTZBbGxvY2F0aW9uT3B0aW9uRUUrMHgyNik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFBcnJheURhdGE6OmFsbG9jYXRlKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIFFGbGFnczxRQXJyYXlEYXRhOjpBbGxvY2F0aW9uT3B0aW9uPiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiBpbiBmdW5jdGlvbiBgUU1hcERhdGE8UVN0cmluZywgUVRyZWVXaWRnZXRJdGVtKj46OmRlc3Ryb3koKSc6XG4gICAgICAgICAgL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcW1hcC5oOjI1MDooLnRleHQuX1pOOFFNYXBEYXRhSTdRU3RyaW5nUDE1UVRyZWVXaWRnZXRJdGVtRTdkZXN0cm95RXZbX1pOOFFNYXBEYXRhSTdRU3RyaW5nUDE1UVRyZWVXaWRnZXRJdGVtRTdkZXN0cm95RXZdKzB4NTIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRTWFwRGF0YUJhc2U6OmZyZWVUcmVlKFFNYXBOb2RlQmFzZSosIGludCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xbWFwLmg6MjUyOigudGV4dC5fWk44UU1hcERhdGFJN1FTdHJpbmdQMTVRVHJlZVdpZGdldEl0ZW1FN2Rlc3Ryb3lFdltfWk44UU1hcERhdGFJN1FTdHJpbmdQMTVRVHJlZVdpZGdldEl0ZW1FN2Rlc3Ryb3lFdl0rMHg1ZSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFNYXBEYXRhQmFzZTo6ZnJlZURhdGEoUU1hcERhdGFCYXNlKiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiBpbiBmdW5jdGlvbiBgUVZlY3RvcjwoYW5vbnltb3VzIG5hbWVzcGFjZSk6OkJvYXJkPjo6ZGV0YWNoKCknOlxuICAgICAgICAgIC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3F2ZWN0b3IuaDo0MDc6KC50ZXh0Ll9aTjdRVmVjdG9ySU4xMl9HTE9CQUxfX05fMTVCb2FyZEVFNmRldGFjaEV2KzB4YWMpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBxdF9hc3NlcnQoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLCBpbnQpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTogaW4gZnVuY3Rpb24gYFF0UHJpdmF0ZTo6UVZhcmlhbnRWYWx1ZUhlbHBlcjxRRm9udD46Om1ldGFUeXBlKFFWYXJpYW50IGNvbnN0JiknOlxuICAgICAgICAgIC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3F2YXJpYW50Lmg6NzQzOigudGV4dC5fWk45UXRQcml2YXRlMTlRVmFyaWFudFZhbHVlSGVscGVySTVRRm9udEU4bWV0YVR5cGVFUks4UVZhcmlhbnRbX1pOOVF0UHJpdmF0ZTE5UVZhcmlhbnRWYWx1ZUhlbHBlckk1UUZvbnRFOG1ldGFUeXBlRVJLOFFWYXJpYW50XSsweDMzKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVZhcmlhbnQ6OnVzZXJUeXBlKCkgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xdmFyaWFudC5oOjc0NDooLnRleHQuX1pOOVF0UHJpdmF0ZTE5UVZhcmlhbnRWYWx1ZUhlbHBlckk1UUZvbnRFOG1ldGFUeXBlRVJLOFFWYXJpYW50W19aTjlRdFByaXZhdGUxOVFWYXJpYW50VmFsdWVIZWxwZXJJNVFGb250RThtZXRhVHlwZUVSSzhRVmFyaWFudF0rMHg0OSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFWYXJpYW50Ojpjb25zdERhdGEoKSBjb25zdCdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3F2YXJpYW50Lmg6NzQ0OigudGV4dC5fWk45UXRQcml2YXRlMTlRVmFyaWFudFZhbHVlSGVscGVySTVRRm9udEU4bWV0YVR5cGVFUks4UVZhcmlhbnRbX1pOOVF0UHJpdmF0ZTE5UVZhcmlhbnRWYWx1ZUhlbHBlckk1UUZvbnRFOG1ldGFUeXBlRVJLOFFWYXJpYW50XSsweDViKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUUZvbnQ6OlFGb250KFFGb250IGNvbnN0JiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xdmFyaWFudC5oOjc0NTooLnRleHQuX1pOOVF0UHJpdmF0ZTE5UVZhcmlhbnRWYWx1ZUhlbHBlckk1UUZvbnRFOG1ldGFUeXBlRVJLOFFWYXJpYW50W19aTjlRdFByaXZhdGUxOVFWYXJpYW50VmFsdWVIZWxwZXJJNVFGb250RThtZXRhVHlwZUVSSzhRVmFyaWFudF0rMHg2Yyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFGb250OjpRRm9udCgpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcXZhcmlhbnQuaDo3NDY6KC50ZXh0Ll9aTjlRdFByaXZhdGUxOVFWYXJpYW50VmFsdWVIZWxwZXJJNVFGb250RThtZXRhVHlwZUVSSzhRVmFyaWFudFtfWk45UXRQcml2YXRlMTlRVmFyaWFudFZhbHVlSGVscGVySTVRRm9udEU4bWV0YVR5cGVFUks4UVZhcmlhbnRdKzB4ODEpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRVmFyaWFudDo6Y29udmVydChpbnQsIHZvaWQqKSBjb25zdCdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3F2YXJpYW50Lmg6NzQ3OigudGV4dC5fWk45UXRQcml2YXRlMTlRVmFyaWFudFZhbHVlSGVscGVySTVRRm9udEU4bWV0YVR5cGVFUks4UVZhcmlhbnRbX1pOOVF0UHJpdmF0ZTE5UVZhcmlhbnRWYWx1ZUhlbHBlckk1UUZvbnRFOG1ldGFUeXBlRVJLOFFWYXJpYW50XSsweDk4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUUZvbnQ6OlFGb250KFFGb250IGNvbnN0JiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xdmFyaWFudC5oOjc0ODooLnRleHQuX1pOOVF0UHJpdmF0ZTE5UVZhcmlhbnRWYWx1ZUhlbHBlckk1UUZvbnRFOG1ldGFUeXBlRVJLOFFWYXJpYW50W19aTjlRdFByaXZhdGUxOVFWYXJpYW50VmFsdWVIZWxwZXJJNVFGb250RThtZXRhVHlwZUVSSzhRVmFyaWFudF0rMHhhNik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFGb250OjpRRm9udCgpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcXZhcmlhbnQuaDo3NDk6KC50ZXh0Ll9aTjlRdFByaXZhdGUxOVFWYXJpYW50VmFsdWVIZWxwZXJJNVFGb250RThtZXRhVHlwZUVSSzhRVmFyaWFudFtfWk45UXRQcml2YXRlMTlRVmFyaWFudFZhbHVlSGVscGVySTVRRm9udEU4bWV0YVR5cGVFUks4UVZhcmlhbnRdKzB4YjIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRRm9udDo6flFGb250KCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xdmFyaWFudC5oOjc0OTooLnRleHQuX1pOOVF0UHJpdmF0ZTE5UVZhcmlhbnRWYWx1ZUhlbHBlckk1UUZvbnRFOG1ldGFUeXBlRVJLOFFWYXJpYW50W19aTjlRdFByaXZhdGUxOVFWYXJpYW50VmFsdWVIZWxwZXJJNVFGb250RThtZXRhVHlwZUVSSzhRVmFyaWFudF0rMHhjNyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFGb250Ojp+UUZvbnQoKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6IGluIGZ1bmN0aW9uIGBRVHlwZWRBcnJheURhdGE8KGFub255bW91cyBuYW1lc3BhY2UpOjpCb2FyZD46OmRlYWxsb2NhdGUoUUFycmF5RGF0YSopJzpcbiAgICAgICAgICAvdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xYXJyYXlkYXRhLmg6MjM5OigudGV4dC5fWk4xNVFUeXBlZEFycmF5RGF0YUlOMTJfR0xPQkFMX19OXzE1Qm9hcmRFRTEwZGVhbGxvY2F0ZUVQMTBRQXJyYXlEYXRhKzB4MWUpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRQXJyYXlEYXRhOjpkZWFsbG9jYXRlKFFBcnJheURhdGEqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6IGluIGZ1bmN0aW9uIGBRVmVjdG9yPChhbm9ueW1vdXMgbmFtZXNwYWNlKTo6Qm9hcmQ+OjpyZWFsbG9jKGludCwgUUZsYWdzPFFBcnJheURhdGE6OkFsbG9jYXRpb25PcHRpb24+KSc6XG4gICAgICAgICAgL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcXZlY3Rvci5oOjY5MjooLnRleHQuX1pON1FWZWN0b3JJTjEyX0dMT0JBTF9fTl8xNUJvYXJkRUU3cmVhbGxvY0VpNlFGbGFnc0lOMTBRQXJyYXlEYXRhMTZBbGxvY2F0aW9uT3B0aW9uRUUrMHg0Mik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHF0X2Fzc2VydChjaGFyIGNvbnN0KiwgY2hhciBjb25zdCosIGludCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xdmVjdG9yLmg6NzAwOigudGV4dC5fWk43UVZlY3RvcklOMTJfR0xPQkFMX19OXzE1Qm9hcmRFRTdyZWFsbG9jRWk2UUZsYWdzSU4xMFFBcnJheURhdGExNkFsbG9jYXRpb25PcHRpb25FRSsweDgxKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcUJhZEFsbG9jKCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xdmVjdG9yLmg6NzAzOigudGV4dC5fWk43UVZlY3RvcklOMTJfR0xPQkFMX19OXzE1Qm9hcmRFRTdyZWFsbG9jRWk2UUZsYWdzSU4xMFFBcnJheURhdGExNkFsbG9jYXRpb25PcHRpb25FRSsweGM0KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcXRfYXNzZXJ0KGNoYXIgY29uc3QqLCBjaGFyIGNvbnN0KiwgaW50KSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3F2ZWN0b3IuaDo3MDU6KC50ZXh0Ll9aTjdRVmVjdG9ySU4xMl9HTE9CQUxfX05fMTVCb2FyZEVFN3JlYWxsb2NFaTZRRmxhZ3NJTjEwUUFycmF5RGF0YTE2QWxsb2NhdGlvbk9wdGlvbkVFKzB4ZjUpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBxdF9hc3NlcnQoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLCBpbnQpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcXZlY3Rvci5oOjczODooLnRleHQuX1pON1FWZWN0b3JJTjEyX0dMT0JBTF9fTl8xNUJvYXJkRUU3cmVhbGxvY0VpNlFGbGFnc0lOMTBRQXJyYXlEYXRhMTZBbGxvY2F0aW9uT3B0aW9uRUUrMHgyNTMpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBxdF9hc3NlcnQoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLCBpbnQpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcXZlY3Rvci5oOjc1MDooLnRleHQuX1pON1FWZWN0b3JJTjEyX0dMT0JBTF9fTl8xNUJvYXJkRUU3cmVhbGxvY0VpNlFGbGFnc0lOMTBRQXJyYXlEYXRhMTZBbGxvY2F0aW9uT3B0aW9uRUUrMHgyYmMpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBxdF9hc3NlcnQoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLCBpbnQpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcXZlY3Rvci5oOjc1MTooLnRleHQuX1pON1FWZWN0b3JJTjEyX0dMT0JBTF9fTl8xNUJvYXJkRUU3cmVhbGxvY0VpNlFGbGFnc0lOMTBRQXJyYXlEYXRhMTZBbGxvY2F0aW9uT3B0aW9uRUUrMHgyZjkpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBxdF9hc3NlcnQoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLCBpbnQpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTovdXNyL2luY2x1ZGUvcXQ1L1F0Q29yZS9xdmVjdG9yLmg6NzUzOiBtb3JlIHVuZGVmaW5lZCByZWZlcmVuY2VzIHRvIGBxdF9hc3NlcnQoY2hhciBjb25zdCosIGNoYXIgY29uc3QqLCBpbnQpJyBmb2xsb3dcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6IGluIGZ1bmN0aW9uIGBRTWFwPFFTdHJpbmcsIFFUcmVlV2lkZ2V0SXRlbSo+OjpkZXRhY2hfaGVscGVyKCknOlxuICAgICAgICAgIC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3FtYXAuaDo5ODI6KC50ZXh0Ll9aTjRRTWFwSTdRU3RyaW5nUDE1UVRyZWVXaWRnZXRJdGVtRTEzZGV0YWNoX2hlbHBlckV2W19aTjRRTWFwSTdRU3RyaW5nUDE1UVRyZWVXaWRnZXRJdGVtRTEzZGV0YWNoX2hlbHBlckV2XSsweGExKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUU1hcERhdGFCYXNlOjpyZWNhbGNNb3N0TGVmdE5vZGUoKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6IGluIGZ1bmN0aW9uIGBRTWFwRGF0YTxRU3RyaW5nLCBRVHJlZVdpZGdldEl0ZW0qPjo6Y3JlYXRlTm9kZShRU3RyaW5nIGNvbnN0JiwgUVRyZWVXaWRnZXRJdGVtKiBjb25zdCYsIFFNYXBOb2RlPFFTdHJpbmcsIFFUcmVlV2lkZ2V0SXRlbSo+KiwgYm9vbCknOlxuICAgICAgICAgIC91c3IvaW5jbHVkZS9xdDUvUXRDb3JlL3FtYXAuaDoyMjY6KC50ZXh0Ll9aTjhRTWFwRGF0YUk3UVN0cmluZ1AxNVFUcmVlV2lkZ2V0SXRlbUUxMGNyZWF0ZU5vZGVFUktTMF9SS1MyX1A4UU1hcE5vZGVJUzBfUzJfRWJbX1pOOFFNYXBEYXRhSTdRU3RyaW5nUDE1UVRyZWVXaWRnZXRJdGVtRTEwY3JlYXRlTm9kZUVSS1MwX1JLUzJfUDhRTWFwTm9kZUlTMF9TMl9FYl0rMHg0NSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFNYXBEYXRhQmFzZTo6Y3JlYXRlTm9kZShpbnQsIGludCwgUU1hcE5vZGVCYXNlKiwgYm9vbCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiBpbiBmdW5jdGlvbiBgUUxpc3Q8UVN0cmluZz46OnJlc2VydmUoaW50KSc6XG4gICAgICAgICAgL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcWxpc3QuaDo2MTU6KC50ZXh0Ll9aTjVRTGlzdEk3UVN0cmluZ0U3cmVzZXJ2ZUVpW19aTjVRTGlzdEk3UVN0cmluZ0U3cmVzZXJ2ZUVpXSsweDU1KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUUxpc3REYXRhOjpyZWFsbG9jKGludCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiBpbiBmdW5jdGlvbiBgUUxpc3Q8UVN0cmluZz46OmRldGFjaF9oZWxwZXIoaW50KSc6XG4gICAgICAgICAgL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcWxpc3QuaDo4MzM6KC50ZXh0Ll9aTjVRTGlzdEk3UVN0cmluZ0UxM2RldGFjaF9oZWxwZXJFaVtfWk41UUxpc3RJN1FTdHJpbmdFMTNkZXRhY2hfaGVscGVyRWldKzB4MzEpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRTGlzdERhdGE6OmRldGFjaChpbnQpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTogaW4gZnVuY3Rpb24gYFFNYXBEYXRhPFFTdHJpbmcsIFFUcmVlV2lkZ2V0SXRlbSo+OjpjcmVhdGUoKSc6XG4gICAgICAgICAgL3Vzci9pbmNsdWRlL3F0NS9RdENvcmUvcW1hcC5oOjI0NDooLnRleHQuX1pOOFFNYXBEYXRhSTdRU3RyaW5nUDE1UVRyZWVXaWRnZXRJdGVtRTZjcmVhdGVFdltfWk44UU1hcERhdGFJN1FTdHJpbmdQMTVRVHJlZVdpZGdldEl0ZW1FNmNyZWF0ZUV2XSsweDkpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRTWFwRGF0YUJhc2U6OmNyZWF0ZURhdGEoKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDEwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUU1haW5XaW5kb3c6Om1ldGFPYmplY3QoKSBjb25zdCdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDE4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUU1haW5XaW5kb3c6OnF0X21ldGFjYXN0KGNoYXIgY29uc3QqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDIwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUU1haW5XaW5kb3c6OnF0X21ldGFjYWxsKFFNZXRhT2JqZWN0OjpDYWxsLCBpbnQsIHZvaWQqKiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHgzOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFNYWluV2luZG93OjpldmVudChRRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDQwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUU9iamVjdDo6ZXZlbnRGaWx0ZXIoUU9iamVjdCosIFFFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4NDgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRT2JqZWN0Ojp0aW1lckV2ZW50KFFUaW1lckV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHg1MCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFPYmplY3Q6OmNoaWxkRXZlbnQoUUNoaWxkRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDU4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUU9iamVjdDo6Y3VzdG9tRXZlbnQoUUV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHg2MCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFPYmplY3Q6OmNvbm5lY3ROb3RpZnkoUU1ldGFNZXRob2QgY29uc3QmKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDY4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUU9iamVjdDo6ZGlzY29ubmVjdE5vdGlmeShRTWV0YU1ldGhvZCBjb25zdCYpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4NzApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpkZXZUeXBlKCkgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHg3OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OnNldFZpc2libGUoYm9vbCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHg4MCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OnNpemVIaW50KCkgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHg4OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6Om1pbmltdW1TaXplSGludCgpIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4OTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpoZWlnaHRGb3JXaWR0aChpbnQpIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4OTgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpoYXNIZWlnaHRGb3JXaWR0aCgpIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4YTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpwYWludEVuZ2luZSgpIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4YTgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0Ojptb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweGIwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6bW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweGI4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6bW91c2VEb3VibGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHhjMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6Om1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHhjOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OndoZWVsRXZlbnQoUVdoZWVsRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweGQwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweGQ4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6a2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4ZTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0Ojpmb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweGU4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6Zm9jdXNPdXRFdmVudChRRm9jdXNFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4ZjApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjplbnRlckV2ZW50KFFFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4ZjgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpsZWF2ZUV2ZW50KFFFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MTAwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6cGFpbnRFdmVudChRUGFpbnRFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MTA4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6bW92ZUV2ZW50KFFNb3ZlRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDExMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OnJlc2l6ZUV2ZW50KFFSZXNpemVFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MTE4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6Y2xvc2VFdmVudChRQ2xvc2VFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MTIwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUU1haW5XaW5kb3c6OmNvbnRleHRNZW51RXZlbnQoUUNvbnRleHRNZW51RXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDEyOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OnRhYmxldEV2ZW50KFFUYWJsZXRFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MTMwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6YWN0aW9uRXZlbnQoUUFjdGlvbkV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHgxMzgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpkcmFnRW50ZXJFdmVudChRRHJhZ0VudGVyRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDE0MCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OmRyYWdNb3ZlRXZlbnQoUURyYWdNb3ZlRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDE0OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OmRyYWdMZWF2ZUV2ZW50KFFEcmFnTGVhdmVFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MTUwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6ZHJvcEV2ZW50KFFEcm9wRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDE1OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OnNob3dFdmVudChRU2hvd0V2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHgxNjApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpoaWRlRXZlbnQoUUhpZGVFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MTY4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6bmF0aXZlRXZlbnQoUUJ5dGVBcnJheSBjb25zdCYsIHZvaWQqLCBsb25nKiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHgxNzApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpjaGFuZ2VFdmVudChRRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDE3OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6Om1ldHJpYyhRUGFpbnREZXZpY2U6OlBhaW50RGV2aWNlTWV0cmljKSBjb25zdCdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDE4MCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OmluaXRQYWludGVyKFFQYWludGVyKikgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHgxODgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpyZWRpcmVjdGVkKFFQb2ludCopIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MTkwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6c2hhcmVkUGFpbnRlcigpIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MTk4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6aW5wdXRNZXRob2RFdmVudChRSW5wdXRNZXRob2RFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MWEwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6aW5wdXRNZXRob2RRdWVyeShRdDo6SW5wdXRNZXRob2RRdWVyeSkgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHgxYTgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0Ojpmb2N1c05leHRQcmV2Q2hpbGQoYm9vbCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHgxYjApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRTWFpbldpbmRvdzo6Y3JlYXRlUG9wdXBNZW51KCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHgxZDgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBub24tdmlydHVhbCB0aHVuayB0byBRV2lkZ2V0OjpkZXZUeXBlKCkgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHgxZTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBub24tdmlydHVhbCB0aHVuayB0byBRV2lkZ2V0OjpwYWludEVuZ2luZSgpIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MWU4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbm9uLXZpcnR1YWwgdGh1bmsgdG8gUVdpZGdldDo6bWV0cmljKFFQYWludERldmljZTo6UGFpbnREZXZpY2VNZXRyaWMpIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MWYwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbm9uLXZpcnR1YWwgdGh1bmsgdG8gUVdpZGdldDo6aW5pdFBhaW50ZXIoUVBhaW50ZXIqKSBjb25zdCdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTBNYWluV2luZG93RSsweDFmOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYG5vbi12aXJ0dWFsIHRodW5rIHRvIFFXaWRnZXQ6OnJlZGlyZWN0ZWQoUVBvaW50KikgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTEwTWFpbldpbmRvd0UrMHgyMDApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBub24tdmlydHVhbCB0aHVuayB0byBRV2lkZ2V0OjpzaGFyZWRQYWludGVyKCkgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4MTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRRGlhbG9nOjptZXRhT2JqZWN0KCkgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4MTgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRRGlhbG9nOjpxdF9tZXRhY2FzdChjaGFyIGNvbnN0KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4MjApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRRGlhbG9nOjpxdF9tZXRhY2FsbChRTWV0YU9iamVjdDo6Q2FsbCwgaW50LCB2b2lkKiopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDM4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6ZXZlbnQoUUV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4NDApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRRGlhbG9nOjpldmVudEZpbHRlcihRT2JqZWN0KiwgUUV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4NDgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRT2JqZWN0Ojp0aW1lckV2ZW50KFFUaW1lckV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4NTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRT2JqZWN0OjpjaGlsZEV2ZW50KFFDaGlsZEV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4NTgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRT2JqZWN0OjpjdXN0b21FdmVudChRRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHg2MCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFPYmplY3Q6OmNvbm5lY3ROb3RpZnkoUU1ldGFNZXRob2QgY29uc3QmKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHg2OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFPYmplY3Q6OmRpc2Nvbm5lY3ROb3RpZnkoUU1ldGFNZXRob2QgY29uc3QmKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHg3MCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OmRldlR5cGUoKSBjb25zdCdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHg3OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFEaWFsb2c6OnNldFZpc2libGUoYm9vbCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4ODApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRRGlhbG9nOjpzaXplSGludCgpIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDg4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUURpYWxvZzo6bWluaW11bVNpemVIaW50KCkgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4OTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpoZWlnaHRGb3JXaWR0aChpbnQpIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDk4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6aGFzSGVpZ2h0Rm9yV2lkdGgoKSBjb25zdCdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHhhMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OnBhaW50RW5naW5lKCkgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4YTgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0Ojptb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHhiMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6Om1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4YjgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0Ojptb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHhjMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6Om1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4YzgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0Ojp3aGVlbEV2ZW50KFFXaGVlbEV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4ZDApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRRGlhbG9nOjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweGQ4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6a2V5UmVsZWFzZUV2ZW50KFFLZXlFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweGUwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6Zm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4ZTgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0Ojpmb2N1c091dEV2ZW50KFFGb2N1c0V2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4ZjApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjplbnRlckV2ZW50KFFFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweGY4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6bGVhdmVFdmVudChRRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgxMDApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpwYWludEV2ZW50KFFQYWludEV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4MTA4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6bW92ZUV2ZW50KFFNb3ZlRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgxMTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRRGlhbG9nOjpyZXNpemVFdmVudChRUmVzaXplRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgxMTgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRRGlhbG9nOjpjbG9zZUV2ZW50KFFDbG9zZUV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4MTIwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUURpYWxvZzo6Y29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDEyOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OnRhYmxldEV2ZW50KFFUYWJsZXRFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDEzMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OmFjdGlvbkV2ZW50KFFBY3Rpb25FdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDEzOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OmRyYWdFbnRlckV2ZW50KFFEcmFnRW50ZXJFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDE0MCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OmRyYWdNb3ZlRXZlbnQoUURyYWdNb3ZlRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgxNDgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpkcmFnTGVhdmVFdmVudChRRHJhZ0xlYXZlRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgxNTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0Ojpkcm9wRXZlbnQoUURyb3BFdmVudCopJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDE1OCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFEaWFsb2c6OnNob3dFdmVudChRU2hvd0V2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4MTYwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6aGlkZUV2ZW50KFFIaWRlRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgxNjgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpuYXRpdmVFdmVudChRQnl0ZUFycmF5IGNvbnN0Jiwgdm9pZCosIGxvbmcqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgxNzApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpjaGFuZ2VFdmVudChRRXZlbnQqKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgxNzgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjptZXRyaWMoUVBhaW50RGV2aWNlOjpQYWludERldmljZU1ldHJpYykgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4MTgwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6aW5pdFBhaW50ZXIoUVBhaW50ZXIqKSBjb25zdCdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgxODgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjpyZWRpcmVjdGVkKFFQb2ludCopIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDE5MCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFXaWRnZXQ6OnNoYXJlZFBhaW50ZXIoKSBjb25zdCdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgxOTgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRV2lkZ2V0OjppbnB1dE1ldGhvZEV2ZW50KFFJbnB1dE1ldGhvZEV2ZW50KiknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4MWEwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6aW5wdXRNZXRob2RRdWVyeShRdDo6SW5wdXRNZXRob2RRdWVyeSkgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4MWE4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUVdpZGdldDo6Zm9jdXNOZXh0UHJldkNoaWxkKGJvb2wpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDFiMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFEaWFsb2c6Om9wZW4oKSdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgxYjgpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBRRGlhbG9nOjpleGVjKCknXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4MWMwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgUURpYWxvZzo6ZG9uZShpbnQpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDFjOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFEaWFsb2c6OmFjY2VwdCgpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDFkMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYFFEaWFsb2c6OnJlamVjdCgpJ1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDFmOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYG5vbi12aXJ0dWFsIHRodW5rIHRvIFFXaWRnZXQ6OmRldlR5cGUoKSBjb25zdCdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgyMDApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBub24tdmlydHVhbCB0aHVuayB0byBRV2lkZ2V0OjpwYWludEVuZ2luZSgpIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDIwOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYG5vbi12aXJ0dWFsIHRodW5rIHRvIFFXaWRnZXQ6Om1ldHJpYyhRUGFpbnREZXZpY2U6OlBhaW50RGV2aWNlTWV0cmljKSBjb25zdCdcbiAgICAgICAgICAvdXNyL2Jpbi9sZC5iZmQ6IC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL2ZsYXNoZXItcXQtOTc0ZDg5ZWQ2OGMzOTBkNC9vdXQvbGliZmxhc2hlcl9xdF91aS5hKDA2MDJmYjUyY2I2NmYzMTYtdWkubyk6KC5kYXRhLnJlbC5yby5fWlRWTjEyX0dMT0JBTF9fTl8xMTFCb2FyZERpYWxvZ0UrMHgyMTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBub24tdmlydHVhbCB0aHVuayB0byBRV2lkZ2V0Ojppbml0UGFpbnRlcihRUGFpbnRlciopIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVFZOMTJfR0xPQkFMX19OXzExMUJvYXJkRGlhbG9nRSsweDIxOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYG5vbi12aXJ0dWFsIHRodW5rIHRvIFFXaWRnZXQ6OnJlZGlyZWN0ZWQoUVBvaW50KikgY29uc3QnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUVk4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4MjIwKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbm9uLXZpcnR1YWwgdGh1bmsgdG8gUVdpZGdldDo6c2hhcmVkUGFpbnRlcigpIGNvbnN0J1xuICAgICAgICAgIC91c3IvYmluL2xkLmJmZDogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvZmxhc2hlci1xdC05NzRkODllZDY4YzM5MGQ0L291dC9saWJmbGFzaGVyX3F0X3VpLmEoMDYwMmZiNTJjYjY2ZjMxNi11aS5vKTooLmRhdGEucmVsLnJvLl9aVElOMTJfR0xPQkFMX19OXzExME1haW5XaW5kb3dFKzB4MTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB0eXBlaW5mbyBmb3IgUU1haW5XaW5kb3cnXG4gICAgICAgICAgL3Vzci9iaW4vbGQuYmZkOiAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9mbGFzaGVyLXF0LTk3NGQ4OWVkNjhjMzkwZDQvb3V0L2xpYmZsYXNoZXJfcXRfdWkuYSgwNjAyZmI1MmNiNjZmMzE2LXVpLm8pOiguZGF0YS5yZWwucm8uX1pUSU4xMl9HTE9CQUxfX05fMTExQm9hcmREaWFsb2dFKzB4MTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB0eXBlaW5mbyBmb3IgUURpYWxvZydcbiAgICAgICAgICBjb2xsZWN0MjogZXJyb3I6IGxkIHJldHVybmVkIDEgZXhpdCBzdGF0dXNcbiAgICAgICAgICBcbiAgPSBub3RlOiBzb21lIGBleHRlcm5gIGZ1bmN0aW9ucyBjb3VsZG4ndCBiZSBmb3VuZDsgc29tZSBuYXRpdmUgbGlicmFyaWVzIG1heSBuZWVkIHRvIGJlIGluc3RhbGxlZCBvciBoYXZlIHRoZWlyIHBhdGggc3BlY2lmaWVkXG4gID0gbm90ZTogdXNlIHRoZSBgLWxgIGZsYWcgdG8gc3BlY2lmeSBuYXRpdmUgbGlicmFyaWVzIHRvIGxpbmtcbiAgPSBub3RlOiB1c2UgdGhlIGBjYXJnbzpydXN0Yy1saW5rLWxpYmAgZGlyZWN0aXZlIHRvIHNwZWNpZnkgdGhlIG5hdGl2ZSBsaWJyYXJpZXMgdG8gbGluayB3aXRoIENhcmdvIChzZWUgaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9jYXJnby9yZWZlcmVuY2UvYnVpbGQtc2NyaXB0cy5odG1sI3J1c3RjLWxpbmstbGliKVxuXG4gICBDb21waWxpbmcgY2ZnLWV4cHIgdjAuMjAuOFxuZXJyb3I6IGNvdWxkIG5vdCBjb21waWxlIGBmbGFzaGVyLXF0YCAoYmluIFwiZmxhc2hlci1xdFwiKSBkdWUgdG8gMSBwcmV2aW91cyBlcnJvclxud2FybmluZzogYnVpbGQgZmFpbGVkLCB3YWl0aW5nIGZvciBvdGhlciBqb2JzIHRvIGZpbmlzaC4uLlxuXG5bU2hvd2luZyBsaW5lcyA0MTAtNjAxIG9mIDYwMSAoNTAuMEtCIGxpbWl0KS4gRnVsbCBvdXRwdXQ6IC90bXAvLnByaXZhdGUvYWd1c2NoaW4vcGktYmFzaC01MTg2ZTQ4YmRiZTYyNzI0LmxvZ11cblxuQ29tbWFuZCBleGl0ZWQgd2l0aCBjb2RlIDEwMSJ9XSwiZGV0YWlscyI6e30sImlzRXJyb3IiOnRydWUsInRpbWVzdGFtcCI6MTc4NDk5NTA4NDkxM319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImFiOTNlNmY1IiwicGFyZW50SWQiOiJmZDM5Y2VkNSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTU6NTg6MTcuNTAwWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipGaXhpbmcgUXQgbGlicmFyeSBsaW5rIG9yZGVyIGluIGJ1aWxkIHNjcmlwdCoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkMGU5MGNjODE5MWE5MjQwNzMzNjYyOGM4NTdcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk4wU2RLa2pYWVpZQkZ6b0J5bDc2VjNLYTBXTWVYN0MyVDBhWUhJSlg5czJLRk5ieVZKMW9DNHpjTk1yMXowbVNuazZwTjVhdm1YcUtLaENvbm1OcDRkMTQ0QWNVeVgwSFE1MkdJRGtXY0paS1FaRFVYZjFZVENVSDhrUlNvQzZIWF9HRHNJSTJtcUE4UVAyMFcwRE0tM0Z0SkV0bHVlR0FhUlhSSFE5OG1TVkV5WG5yNTJJM1E1bXJtcjVscl80ZURkTE5Wc0VHOTVhSjdRSWRUdXNsUHVodjA2T3Jxd3VnRk9ROFpuR1VWV3lJcGd2MHpWRFdqRHBkZjZtVW5ZNzRoMzFoWjV1dWxwYXAxNHpZbXRhQWRSTDN2RHl4X0wtR1R3aTNUWlFYMkN6QTUybXEwSjZNQVpCSVIyMk5vODFOS0ZqeDJ4dXNXYnR3aHBNbktsekhmXy1McHhtQzFPMmowVllocXozYXRrbGExZ1dTWjFVb1BuYjF0S3JMRHluUWMtQUdRSDQ0OFk0ckhISXQtQWpMdExLYWs5SU9kTXBMbGgyNEhPMTE2bF9lNGFISDFQY1c1czZDdnJSM2dJbHFFem9oanppbmp6WGlLU0hjQVlXbmpwSVVRODBQNnp5dHR5R3FfRVZKb08yeXREZ0NoWWJBZXFjREM3WG41QmJKcFk4dzFjejBnMkNaZ3F6R2NVazhIbS01Ujk0bjVpd0dsQU9pdzNVaFdCb2FjQUNva0xPQm9vNWtsdjVRNlp4dXg4Y18xQ2wyVnJ6MG8wMEZoM0NVSlJ2Ymd1bjdFMGN0LTJ0aURPaVRIc1hFMzBoTE12U2ZsLVZ6cDJuT2JSMVBJQXJGeF9LcVVLdm1GZFd0cmNPNm92U2tSVVdWRFBJQzlGeUlab182US01Z2xGOEozR0Nrc2F0TlhCTTVmWXBma1V1RUJVYzFEUERnZ0FKS3JONUt0c2JjVV80NXRubEd6VXRaaExKbWNzM2FlSkY1LTRaRzJmbXVWdFFjTWRfbHlETFpYR3l2MC01MjEybVdlZkVjWXRsa051a09xclJYbXpNUHJSYzNsOThYNXRBdmd2M094U0RMbG5qRmZKOUFPLS1iQ2RLOFJpcjZDUjVGSEhFQW05OG5MRlh3b3Y5VjBXVkQyX195ZVhZM21GNmluREhyTXFXdEJQNHZUQmhBYXVKTkZQS0NlaktGLXJNLThFMUVJYW9mV0c1WXFfQ0x5QUVLYjVTaTJRWlJRVG5DR3FubGNSakhQNW1EeG9seHVFS1dfTmJ0MVB4NHFQNVk0NFBvaFh4aFJPbHk4OHlBM0RiWW82cWtNSUpGc3lVVENtX3dHaW5sLU93dS1ZQkpHcGZqcU1ZTTJrbkJaSlczcFNrLTdhLTBDOU9PYUNDTjN4dGJXTnM0SkJiSWR1YUlwcHZkQTFWSmJVLXYzdFNHd1JzZUtHejl0dllfeHVZdkp5c1NoX0Z1dXQ4TnBEZTkwbDFxRDlGSjhnR1E5WUx5azRFSm9VSlVMdGJTU3dpeldPV3dOWkZUUl9heXBaVERKc241NThtbUFtbUFXZHpaSEpiaVVDcjdXa1NPSDdQSEhibTZkNFlPenNBclRVYnpFZXNiS2lrQTluZ29RSHpCYnpCNVRuTE8zWFc4aFRLdFhka1pzdXpiOVRLOHVlZV9POEN4bTdQVUtrZkd0SnJ5em1kSklQbUU3NHdseXZYa3VoTWlUdi03SlZGaXJKYnYySTFSdkR6REFNN0llczBfTk9nenRPci05b2RWMUhUQW5vRjBUM3YtV0I2WmdOT1h2Yk1mNDFtbG9JNFlRdFBBXzZ2TXI1X1N4cWkzam1yX1BpRlR5QW1McjJXbWhoX0N6NWpna3dfZWRINHl2aWVzRDkwMFZFZ2lYWWJNd0xSQUdxSTdFbGdDQVlUWGxUYTJEYlNlX0xvS2dXZjd4eS1lUHVrbnpjbWxaMHg4enNzeUVWSndacFVhb3EwbGNGQmgwN002VnVyUEdDTkJOeDBRREJ4M3BieEVfY19GS09LaFdzVWt3VEdnR182WVVvZDZsM1VKRWVCQjVJQWdtTDlkeWF2cWRGc3ZlNjI2SURGd1hEMGF2N2lRN2FMTGdqeWlMS2NENTFwQWlPWHNHUmlSNUVTM1l0M1V3PT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkZpeGluZyBRdCBsaWJyYXJ5IGxpbmsgb3JkZXIgaW4gYnVpbGQgc2NyaXB0KipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX2RmbmZ1QjAwdVd0NE80czRreFRBZU5HcHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGQxMjVjMzg4MTkxOGRkMmUwMDFhNmU5YWYwOSIsIm5hbWUiOiJ3cml0ZSIsImFyZ3VtZW50cyI6eyJwYXRoIjoiY3JhdGVzL2ZsYXNoZXItcXQvYnVpbGQucnMiLCJjb250ZW50IjoiZm4gbWFpbigpIHtcbiAgICBwcmludGxuIShcImNhcmdvOnJlcnVuLWlmLWNoYW5nZWQ9c3JjL3VpLmNwcFwiKTtcblxuICAgIGxldCBxdCA9IHBrZ19jb25maWc6OkNvbmZpZzo6bmV3KClcbiAgICAgICAgLmF0bGVhc3RfdmVyc2lvbihcIjUuMTJcIilcbiAgICAgICAgLmNhcmdvX21ldGFkYXRhKGZhbHNlKVxuICAgICAgICAucHJvYmUoXCJRdDVXaWRnZXRzXCIpXG4gICAgICAgIC5leHBlY3QoXCJRdCA1IFdpZGdldHMgZGV2ZWxvcG1lbnQgZmlsZXMgd2VyZSBub3QgZm91bmQgKGluc3RhbGwgcXQ1LWJhc2UtZGV2ZWwpXCIpO1xuXG4gICAgbGV0IG11dCBidWlsZCA9IGNjOjpCdWlsZDo6bmV3KCk7XG4gICAgYnVpbGQuY3BwKHRydWUpLmZpbGUoXCJzcmMvdWkuY3BwXCIpLmZsYWdfaWZfc3VwcG9ydGVkKFwiLXN0ZD1jKysxN1wiKTtcbiAgICBmb3IgcGF0aCBpbiAmcXQuaW5jbHVkZV9wYXRocyB7XG4gICAgICAgIGJ1aWxkLmluY2x1ZGUocGF0aCk7XG4gICAgfVxuICAgIGJ1aWxkLmNvbXBpbGUoXCJmbGFzaGVyX3F0X3VpXCIpO1xuXG4gICAgLy8gS2VlcCBzaGFyZWQgUXQgbGlicmFyaWVzIGFmdGVyIG91ciBzdGF0aWMgQysrIGFyY2hpdmUgb24gdGhlIGxpbmtlclxuICAgIC8vIGNvbW1hbmQgbGluZTsgR05VIGxkIHJlc29sdmVzIHN0YXRpYyBhcmNoaXZlcyBmcm9tIGxlZnQgdG8gcmlnaHQuXG4gICAgZm9yIHBhdGggaW4gJnF0LmxpbmtfcGF0aHMge1xuICAgICAgICBwcmludGxuIShcImNhcmdvOnJ1c3RjLWxpbmstc2VhcmNoPW5hdGl2ZT17fVwiLCBwYXRoLmRpc3BsYXkoKSk7XG4gICAgfVxuICAgIHByaW50bG4hKFwiY2FyZ286cnVzdGMtbGluay1saWI9UXQ1V2lkZ2V0c1wiKTtcbiAgICBwcmludGxuIShcImNhcmdvOnJ1c3RjLWxpbmstbGliPVF0NUd1aVwiKTtcbiAgICBwcmludGxuIShcImNhcmdvOnJ1c3RjLWxpbmstbGliPVF0NUNvcmVcIik7XG59XG4ifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjE3Mzc0LCJvdXRwdXQiOjQxNywiY2FjaGVSZWFkIjo3MDE0NCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoxMDYsInRvdGFsVG9rZW5zIjo4NzkzNSwiY29zdCI6eyJpbnB1dCI6MC4wODY4Nywib3V0cHV0IjowLjAxMjUxLCJjYWNoZVJlYWQiOjAuMDM1MDcyLCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4xMzQ0NTJ9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTUwODQ5MTYsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZDBkNDE3NDgxOTE4MmEwYzYxNmRiNmY2OWI0In19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImQxOWY0MTQ1IiwicGFyZW50SWQiOiJhYjkzZTZmNSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTU6NTg6MTcuNTAxWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9kZm5mdUIwMHVXdDRPNHM0a3hUQWVOR3B8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkMTI1YzM4ODE5MThkZDJlMDAxYTZlOWFmMDkiLCJ0b29sTmFtZSI6IndyaXRlIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiU3VjY2Vzc2Z1bGx5IHdyb3RlIDkwNiBieXRlcyB0byBjcmF0ZXMvZmxhc2hlci1xdC9idWlsZC5ycyJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk5NTA5NzUwMX19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjVjNDdlZTRiIiwicGFyZW50SWQiOiJkMTlmNDE0NSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTU6NTg6MjAuNDM2WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipQbGFubmluZyBRdCBidWlsZCBmaXJzdCoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkMWI4OWEwODE5MWFhZDBhNzRkMWZhZDE3ZTdcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk4wYy1uUG9YeUMtMHpPVzlBMmVuOUU2eWZhOTVMaG9WV05xYnpCVjlZRE9KaDE5YWFuc202dTFuQ01JNUdHYlo4N3FPNW45djZON0h4RzFQY1REUVpzWC1VTDgxRnRZemdOWlFjdWxsaHB1bUZWSXhCa3lRNWFMeS1vOWtpVFNMNTN3OER2aTVaRFZhSzlvTXR2b2dyZkxobURCSC1icnlEVmNMbHZkSkdpb2hYUXJ2WnRrSXMyMFpLeVdfY09IdHdlaXA3TXloeTZKWHBDaXdLeDY5Y0lNSzJNaVNaaV9EcFV1YVZ1RnhXMVd3Tl95ZjJ4STdyVGJxOE54NnV2UHYwbXpUQ05RQkVVOGNiNEJ0ZW9JWUpRdmpGYlNjVUhpVVc2RkhtSEV6bWlUdVRrWUc1Y1Y5b0p1X0JFQy1faTA2ME43TDBITFVINGVtUnNUbEwyWmM2OUR2cTBueGJXSmFad3hzTmNwUGhuQnl0d3RUOHhxdFVjTEhaWVRYUzRQVjk2b1dueEtxcElEQkNsRkNUR3VOeGR3UVhyMzRoZlNsbU9zNXU0WWhJTXVjN0Y4VGVLck93LXNVbzk0aTI2Wk9DZWd2X0x1NVNwRTI0Q0pVVGVOd3RpeUxBSEtSZXNmYmM0N3IxTFc4NFc1QmEtWC04dDVGR0NaNl9fQWZrNkt3bG5vS0FJaXZJbDRlZEItSW50WGpkRHJlemZyMkc1Q1pJM3JhckZ1eVpUV2RCdTRLVUVhMEJtem1QTFRGdTlwcmUzMGRURW54QkwxQU5wWWJLUW5WRVJLeUpkT0JFMVpNbktsOTVIYk16QU1QUUFSOHpCU0owMUUwOFRRZWdyWFpyTDhDRmV0SXdtSmJhclZsd2FuUE1KbWRkaEFibnJseHZITmF5X3FmVExZa3VjeVliT29iMjRoNk9RbENZRkYyUU5WcFVMRXNROTZLbk5XenljSWNQVUtRVHo0aVNhZnVFakt6b29mVC1IaDY1UDQ3MXV0elNkb1lzVVY4VlQ1TVk4U2Jxei03d3k5RHFMRlE1OEY1RDgzeUI2cm93eHRSbTJ3ZnhneXR6d0VEX2tYY3VOQzNWLWlyOTE3YmdSWElTZV8zRW5KZmszeUNPX29sNC02UG5sMC0zOENRLUFFMDJ4YU5lSmVuTUx6S1J6VXNpQW1Dd2tENG9TclBOUU8wOXNFTl9EUlJWTzlNNFliUnZDOVdmckJMOGRZR1hUYUw3UDZ4ZElLeFFlV21FdHdkNFJKU2pCOHcyRGNJQUFXY3lKZ1wiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqUGxhbm5pbmcgUXQgYnVpbGQgZmlyc3QqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfbTlmcWdaMGlxbXBqWWNaR0RvSzBINWRofGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZDFjMmFkMDgxOTE4OGMyYTEzOWI4YjY4NzUyIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImNhcmdvIGJ1aWxkIC1wIGZsYXNoZXItcXQgJiYgY2FyZ28gYnVpbGQiLCJ0aW1lb3V0IjoxMjB9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MTQzMCwib3V0cHV0Ijo0MywiY2FjaGVSZWFkIjo4NjUyOCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjo5LCJ0b3RhbFRva2VucyI6ODgwMDEsImNvc3QiOnsiaW5wdXQiOjAuMDA3MTUwMDAwMDAwMDAwMDAxLCJvdXRwdXQiOjAuMDAxMjkwMDAwMDAwMDAwMDAwMSwiY2FjaGVSZWFkIjowLjA0MzI2NCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDUxNzA0fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1MDk3NTAzLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGQxOWRlZDQ4MTkxODYwN2VmYWEwOThkMTE5ZCJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJkMWE5ZmI2NyIsInBhcmVudElkIjoiNWM0N2VlNGIiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE1OjU5OjEyLjkyNloiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfbTlmcWdaMGlxbXBqWWNaR0RvSzBINWRofGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZDFjMmFkMDgxOTE4OGMyYTEzOWI4YjY4NzUyIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiICAgQ29tcGlsaW5nIGZsYXNoZXItcXQgdjAuMS4wICgvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL2NyYXRlcy9mbGFzaGVyLXF0KVxuICAgIEZpbmlzaGVkIGBkZXZgIHByb2ZpbGUgW3Vub3B0aW1pemVkICsgZGVidWdpbmZvXSB0YXJnZXQocykgaW4gMS44NnNcbiAgIENvbXBpbGluZyB0b21sX3BhcnNlciB2MS4xLjIrc3BlYy0xLjEuMFxuICAgQ29tcGlsaW5nIGluZGV4bWFwIHYyLjE0LjBcbiAgIENvbXBpbGluZyBmdXR1cmVzLW1hY3JvIHYwLjMuMzNcbiAgIENvbXBpbGluZyB0b21sIHYxLjEuMytzcGVjLTEuMS4wXG4gICBDb21waWxpbmcgc3lzdGVtLWRlcHMgdjcuMC44XG4gICBDb21waWxpbmcgZnV0dXJlcy11dGlsIHYwLjMuMzNcbiAgIENvbXBpbGluZyB0b21sX2VkaXQgdjAuMjUuMTMrc3BlYy0xLjEuMFxuICAgQ29tcGlsaW5nIGdsaWItc3lzIHYwLjIxLjVcbiAgIENvbXBpbGluZyBnb2JqZWN0LXN5cyB2MC4yMS41XG4gICBDb21waWxpbmcgZ2lvLXN5cyB2MC4yMS41XG4gICBDb21waWxpbmcgY2Fpcm8tc3lzLXJzIHYwLjIxLjVcbiAgIENvbXBpbGluZyBwYW5nby1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGdkay1waXhidWYtc3lzIHYwLjIxLjVcbiAgIENvbXBpbGluZyBncmFwaGVuZS1zeXMgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGdkazQtc3lzIHYwLjEwLjNcbiAgIENvbXBpbGluZyBnc2s0LXN5cyB2MC4xMC4zXG4gICBDb21waWxpbmcgZ3RrNC1zeXMgdjAuMTAuM1xuICAgQ29tcGlsaW5nIGxpYmFkd2FpdGEtc3lzIHYwLjguMVxuICAgQ29tcGlsaW5nIHByb2MtbWFjcm8tY3JhdGUgdjMuNS4wXG4gICBDb21waWxpbmcgZ2xpYi1tYWNyb3MgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGd0azQtbWFjcm9zIHYwLjEwLjNcbiAgIENvbXBpbGluZyBmdXR1cmVzLWV4ZWN1dG9yIHYwLjMuMzNcbiAgIENvbXBpbGluZyBnbGliIHYwLjIxLjVcbiAgIENvbXBpbGluZyBnaW8gdjAuMjEuNVxuICAgQ29tcGlsaW5nIGNhaXJvLXJzIHYwLjIxLjVcbiAgIENvbXBpbGluZyBncmFwaGVuZS1ycyB2MC4yMS41XG4gICBDb21waWxpbmcgcGFuZ28gdjAuMjEuNVxuICAgQ29tcGlsaW5nIGdkay1waXhidWYgdjAuMjEuNVxuICAgQ29tcGlsaW5nIGdkazQgdjAuMTAuM1xuICAgQ29tcGlsaW5nIGdzazQgdjAuMTAuM1xuICAgQ29tcGlsaW5nIGd0azQgdjAuMTAuM1xuICAgQ29tcGlsaW5nIGxpYmFkd2FpdGEgdjAuOC4xXG4gICBDb21waWxpbmcgZmxhc2hlci1ndGsgdjAuMS4wICgvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL2NyYXRlcy9mbGFzaGVyLWd0aylcbiAgICBGaW5pc2hlZCBgZGV2YCBwcm9maWxlIFt1bm9wdGltaXplZCArIGRlYnVnaW5mb10gdGFyZ2V0KHMpIGluIDUwLjYwc1xuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1MTUyOTI2fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMWMxYzJjZDEiLCJwYXJlbnRJZCI6ImQxYTlmYjY3IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNTo1OToxNi43MDVaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlBsYW5uaW5nIFF0IHNjcmVlbnNob3QgZXhlY3V0aW9uIHdpdGggdGltZW91dCoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkNTJlMGY4ODE5MWIyOWJhMDM1NjNlOWY0NGZcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk4xVDVGRVg3eHpNd09OLWU3enVmTXo2UlduWklMSzhIZnJGc2hkUkh6UWk3amZqcVVuRDlEZmduNEl4bklJc3pYZ29leEFwT1JNc1RPcjdpTWx5bzF3STQ2Skw2amVyaFlBWncwcXJVaXY0NXoxaGQ2WXcyUUhVeEpIWjlJZXpScnpHcmpwczg5dXhkd3lzS2ZYbEJRZTFubmEwOUF3aDNqVGtyeDE5cUxfVzlPWW43Z0NYRlNVTzVReGdBR0pDM2dJRkh6X1ZERjRlc01IczlLZ2ZNVGJFNFFnSENSSklBRUVxRFNZcVUyWGR5VTVlaDVIaldQZmpZRkhUckd0YnRWQkVjeDZZM0JVaHVIWkJhSjVOcDA2QWkzS080Y3VrZ2JVSWh4Ymt5TEFTY00xb3dmMmpGQnlza3pWUXFfV0JUdzJkaFVNelF2VU0tWlRVcENMYUt1dXZlUWdnNU44cExoWHAwSHRRYUdrUnFlQ2ExczRIREpQYlNwYjVJa1o3dVo0MlhzMDJ3Mkk4dEVweFpRZ1lmRUpGTTRFcUt6NHFOSW5renZBeFk3WUpBMERFNzVYSk1QMkp5T0RETE92UUxGTU5uYmJKVG9nSEt2RDE1M3JyYTR6TDJVN3ZNYzFXWU9RcUF0VkNKU1ktX3BxT0txcmJJVDRBSTRpY1lvSm5GYzBlbVcwbUdyZFN5ODc4bTBaOGhhcDZTRlNDOWh3aFJINjczaFZ6VzdtOXpRNDZ4OGJZZVFuT05za19PdTRyb0tyY3A1aEFLaGU0OURVdi1yTVN1ODh5UE44QXNXMU40bk1PS0x4eW92WkJ5UUd4Y1FDajI3dkwwREFLaVd2NGdrMHphdHk1YXNVWGR4RC1OQndfLVFfXzJUbk1PR3I5ZE8tVkJ4TmV1SUpIcVZuWG1JcGpiZ2txWEoyMkVPVTVHenVFLTZhdzVUcjJtbk4yTmwySUc0VnRVMHUzVkpkRklfNDJKYkJZcEFoR1VIQnplZWc5OVk4TDJYbUtkQUo5cnJfYS1rbkV3MlJERjVTZWtOcDZvcS1oLTNPV2xTakhoUUd5Qm51NWlsSUxnNTVMeWNocVFkZW4tNWx4Tm1IbG5iZklVSnAtTXRyX25RNTdvTmJwZVd3M0pSQ3piWUwwQ3ZlR21hYVFOb3pUZFNpbjl2UWw3dFZMSkkxNWM1MUF0bTE1a3RIUTFKRjdCalZoc01LaE9DcGFPNG1CY1lNWkJOdGI0UEg3VzJBVmdYdm9sS1dHakpXZkY1dVlrdWhBbUhqRUp4ZEItWkg1bDFmeVhtVU8ydS03TFdsWVJhSzZXbzZpTjFvUktSUlJQVWdxS0pLZzZteGF2NWs4Z004bi11U192clI3Y25SZnBCOFRvVFJoMHp0QV9ybV8wOG9ycWRvS3lWWVI1VC04UkFRYXFIVURYeWdUQktDNGttLS03NmNQTXRhQmZhQUE0c0N5eG9SRGN5NTg0bFZHLVc5WE5kaHotNFdlXzdKSF9Rcz1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlBsYW5uaW5nIFF0IHNjcmVlbnNob3QgZXhlY3V0aW9uIHdpdGggdGltZW91dCoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF93c0FXY3l6ZjVmdG5qbTl5S3FGVzJ5c258ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkNTNiYzQwODE5MTk0ZjEzYzZmNjVkMDkxZjUiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoidGltZW91dCAzcyB0YXJnZXQvZGVidWcvZmxhc2hlci1xdCA+L3RtcC9mbGFzaGVyLXF0Lm91dCAyPi90bXAvZmxhc2hlci1xdC5lcnI7IHJjPSQ/OyBlY2hvIHJjOiRyYzsgY2F0IC90bXAvZmxhc2hlci1xdC5lcnIiLCJ0aW1lb3V0IjoxMH19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoxMDI0LCJvdXRwdXQiOjk0LCJjYWNoZVJlYWQiOjg3NTUyLCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjI3LCJ0b3RhbFRva2VucyI6ODg2NzAsImNvc3QiOnsiaW5wdXQiOjAuMDA1MTIsIm91dHB1dCI6MC4wMDI4MiwiY2FjaGVSZWFkIjowLjA0Mzc3NTk5OTk5OTk5OTk5NSwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDUxNzE2fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1MTUyOTUwLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGQ1MTY2YjA4MTkxYjc0MmE1OWEyY2EwN2VkZSJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJkODhiNmVlNyIsInBhcmVudElkIjoiMWMxYzJjZDEiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE1OjU5OjE5LjcyN1oiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfd3NBV2N5emY1ZnRuam05eUtxRlcyeXNufGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZDUzYmM0MDgxOTE5NGYxM2M2ZjY1ZDA5MWY1IiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoicmM6MTI0XG5xdC5xcGEucGx1Z2luOiBDb3VsZCBub3QgZmluZCB0aGUgUXQgcGxhdGZvcm0gcGx1Z2luIFwid2F5bGFuZFwiIGluIFwiXCJcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk5NTE1OTcyN319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjQ2NzI0NWY2IiwicGFyZW50SWQiOiJkODhiNmVlNyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTU6NTk6MjguMzE3WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipVcGRhdGluZyBSRUFETUUgd2l0aCBRdCBXaWRnZXRzIGRldGFpbHMqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZDVhYTVhODgxOTE5MDhhMjExYzNkODJjYTk3XCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpOMWNkTXpmeDh6UTVXUENaYUZROExNdHoxNUhGWWZtbTF6VTIzUndRc2luOFB3OTNXSG9TMTQwWEgwUmJYalVZbkZfd0RKckVtUUpIY2dKSzNXakNZNmJFTmt2LTZPWEFESEpRcWl2RFJOUzEwT0xydmt0MmRjcnpSTXl0aGI5c2stWVJJWXYyVEVlSWVybzFTUGxpaEZmM1Y3cXJwVWtEa0F3RDZEUTdXb1g2VEFoVEdTcEFBcjU3dDlIWDkwTS00b3NvcEtOaWpXLUg0d2VvU0xKeDZBTzJqb1ZWU2J4VWpVeEFQbGJRakliZnJaRFFTb2trY05abEt0SWdGSGJDRXhPRjd1LWUtOTBETDQ3OC1pY0E5VTNwc0tORWlXMW0zVzhlQ1BwcnExdzRHVU14anhjNG5iQ0h2ZFZEcjU5VDZhUExHY0llNElzeUxFY0N0YjV1SVNjNENRN2poWVN0c0dBNDF5ZGpvVFFWb3BZU3hVWmhlWV9VOG9wWTdlMkVickk5T3NpZGU0NWNKNFlKblV3YVg5QjlmNktqUjUxQXBPZTB3WVI3UlBKbmhWUGh2VXdIdi1EU2hWT1l3M2E4TVdWTFpxZFVLOUN4b3g0UmNudjZ2M0Y4TEtjNUNKSnBjUXdpa09OODVoby1mS21QSTZPOHh2X09nUUk1M3Zpd3dQdGZTWFFoZGZidGFlbjZEaG90NU5QODFCTTd3X2dLZkFhM3JWdC1ORnd3QWViUXRlSWV0eDdwNjdndEtXaGViZzZfWk9uN3lsYW5uMWtoSUM0cE1obGpsR1BVMTBJbnNVOHlMTkpNdnhWVWhLSUVCb0s5M1BKWk9YUk5ienRnVjVGYkdCeHNWbDE3bFVKVThRV3RLTll0a2Fpc21FZFZMWHBGRWU0VzJIbkxfOXpuUVFFZVgzYkd0VHRWcGZhVFoxeS1fM09TcWVSazAxYmVEV21UTThkNzFGVzB3bDd1Y3poT2JZVEkycGRLXzFvU01jLWpSREJJMmtFMlBicDNWRnRRWGxCcTloSTBtUmxUQi1CTGtIbk5iQ1V0NGFsRFJ2SGdjaW9BcDY3VlBwZDhsUDVsYWJSUWZDbkRQQ1FKVk80aU5BaURmcGo2NWFHa1pKMVNKZXNLWDhiTG9Ia2oxRTZHZjVITEwyMWhvQ1VQUktZR2JQREJFXzB6SFNIS09CM2JPREZzc2RzTDdoWWlfbEpYR1E2YjVfZDZnQWNCaG5JZ2RLZEcxamtabzFvdmpMOFoyMGIwR2JGZDlaQjB5TXQtaVFKemdTMlVOLXVfSnBrZ1RNVFhySUpqd19YSWktclZHUlBrSHhyVVgyMXp6WTJQZjR1WkoyeGlzem85ZHU4YjlISEFpb25kbnNLQ25scjBZWGN6S2tNTkpiSXNlVUZiZjRwZ3l1UVJVemtWaFRObzZmYjM0TFRER3VpY3pVZnljcVFoMmFadVJwMmh6aGM3ekNZWmZPN2plTmMwTThheE8zUlRNcnhWQnBIMHNqS185S2xXSndmdTJ4WUtTTHdcIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlVwZGF0aW5nIFJFQURNRSB3aXRoIFF0IFdpZGdldHMgZGV0YWlscyoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9Nb1N3NjJ1MnRxdkZjR25TY0pQaG1UNXN8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkNWMxN2JjODE5MTk4ZmI5NWNmZjUzYTIwMWMiLCJuYW1lIjoiZWRpdCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiUkVBRE1FLm1kIiwiZWRpdHMiOlt7Im9sZFRleHQiOiItIGBjcmF0ZXMvZmxhc2hlci1xdGAg4oCUIFF0IDUvUXQgUXVpY2sgQ29udHJvbHMgMiIsIm5ld1RleHQiOiItIGBjcmF0ZXMvZmxhc2hlci1xdGAg4oCUIG5hdGl2ZSBRdCA1IFdpZGdldHMifSx7Im9sZFRleHQiOiJzdWRvIGFwdC1nZXQgaW5zdGFsbCBnY2MtYysrIGxpYmd0azQtZGV2ZWwgbGliYWR3YWl0YS1kZXZlbCBcXFxuICBxdDUtYmFzZS1kZXZlbCBxdDUtZGVjbGFyYXRpdmUtZGV2ZWwgcXQ1LXF1aWNrY29udHJvbHMyLWRldmVsIFxcXG4gIHF0NS1xdWlja2NvbnRyb2xzMlxuYGBgXG5cblRoZSBRdCBiaW5kaW5ncyBkaXNjb3ZlciBRdCB0aHJvdWdoIGBxbWFrZWAuIElmIHNldmVyYWwgUXQgdmVyc2lvbnMgYXJlIGluc3RhbGxlZCwgc2VsZWN0IFF0IDUgZXhwbGljaXRseTpcblxuYGBgc2hcbmV4cG9ydCBRTUFLRT0vdXNyL2xpYjY0L3F0NS9iaW4vcW1ha2VcbmBgYFxuXG4oVGhlIGV4YWN0IGBxbWFrZWAgcGF0aCBjYW4gYmUgZm91bmQgd2l0aCBgcnBtIC1xbCBxdDUtYmFzZS1kZXZlbCB8IGdyZXAgJy9xbWFrZSQnYC4pIiwibmV3VGV4dCI6InN1ZG8gYXB0LWdldCBpbnN0YWxsIGdjYy1jKysgbGliZ3RrNC1kZXZlbCBsaWJhZHdhaXRhLWRldmVsIHF0NS1iYXNlLWRldmVsXG5gYGBcblxuVGhlIFF0IGNyYXRlIGRpc2NvdmVycyBRdCA1IHRocm91Z2ggYHBrZy1jb25maWdgIGFuZCB1c2VzIHRoZSBwbGF0Zm9ybSdzIG5hdGl2ZSBRdCB3aWRnZXQgc3R5bGUuIEl0IGRvZXMgbm90IHJlcXVpcmUgUU1MIG9yIFF0IFF1aWNrLiJ9XX19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoxMTUxLCJvdXRwdXQiOjI5NCwiY2FjaGVSZWFkIjo4NzU1MiwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjozNiwidG90YWxUb2tlbnMiOjg4OTk3LCJjb3N0Ijp7ImlucHV0IjowLjAwNTc1NTAwMDAwMDAwMDAwMSwib3V0cHV0IjowLjAwODgyLCJjYWNoZVJlYWQiOjAuMDQzNzc1OTk5OTk5OTk5OTk1LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNTgzNTF9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTUxNTk3MzAsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZDU4MTMyNDgxOTE4ODE3M2QwNWMwYjVhMTlhIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjYxYzNmYjMyIiwicGFyZW50SWQiOiI0NjcyNDVmNiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTU6NTk6MjguMzIyWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9Nb1N3NjJ1MnRxdkZjR25TY0pQaG1UNXN8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkNWMxN2JjODE5MTk4ZmI5NWNmZjUzYTIwMWMiLCJ0b29sTmFtZSI6ImVkaXQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJTdWNjZXNzZnVsbHkgcmVwbGFjZWQgMiBibG9jayhzKSBpbiBSRUFETUUubWQuIn1dLCJkZXRhaWxzIjp7ImRpZmYiOiIgICAgLi4uXG4gIDIgXG4gIDMgVGhpcyB3b3Jrc3BhY2UgY29udGFpbnMgdHdvIGluZGVwZW5kZW50IGludGVyZmFjZXMgZm9yIGBhbHQtcm9vdGZzLWluc3RhbGxlcmA6XG4gIDQgXG4gIDUgLSBgY3JhdGVzL2ZsYXNoZXItZ3RrYCDigJQgR1RLIDQvbGliYWR3YWl0YVxuLSA2IC0gYGNyYXRlcy9mbGFzaGVyLXF0YCDigJQgUXQgNS9RdCBRdWljayBDb250cm9scyAyXG4rIDYgLSBgY3JhdGVzL2ZsYXNoZXItcXRgIOKAlCBuYXRpdmUgUXQgNSBXaWRnZXRzXG4gIDcgXG4gIDggQm90aCBhcmUgaW50ZXJmYWNlIHByZXZpZXdzLiBUaGV5IGluc3BlY3Qgc3VwcG9ydGVkIGJvYXJkcyBhbmQgcmVtb3ZhYmxlIGRyaXZlcywgYnV0IGRvIG5vdCB3cml0ZSB0byBhbnkgZGV2aWNlLlxuICA5IFxuIDEwICMjIFN5c3RlbSBkZXBlbmRlbmNpZXNcbiAxMSBcbiAxMiBPbiBBTFQgTGludXg6XG4gMTMgXG4gMTQgYGBgc2hcbi0xNSBzdWRvIGFwdC1nZXQgaW5zdGFsbCBnY2MtYysrIGxpYmd0azQtZGV2ZWwgbGliYWR3YWl0YS1kZXZlbCBcXFxuLTE2ICAgcXQ1LWJhc2UtZGV2ZWwgcXQ1LWRlY2xhcmF0aXZlLWRldmVsIHF0NS1xdWlja2NvbnRyb2xzMi1kZXZlbCBcXFxuLTE3ICAgcXQ1LXF1aWNrY29udHJvbHMyXG4rMTUgc3VkbyBhcHQtZ2V0IGluc3RhbGwgZ2NjLWMrKyBsaWJndGs0LWRldmVsIGxpYmFkd2FpdGEtZGV2ZWwgcXQ1LWJhc2UtZGV2ZWxcbiAxOCBgYGBcbiAxOSBcbi0yMCBUaGUgUXQgYmluZGluZ3MgZGlzY292ZXIgUXQgdGhyb3VnaCBgcW1ha2VgLiBJZiBzZXZlcmFsIFF0IHZlcnNpb25zIGFyZSBpbnN0YWxsZWQsIHNlbGVjdCBRdCA1IGV4cGxpY2l0bHk6XG4rMTggVGhlIFF0IGNyYXRlIGRpc2NvdmVycyBRdCA1IHRocm91Z2ggYHBrZy1jb25maWdgIGFuZCB1c2VzIHRoZSBwbGF0Zm9ybSdzIG5hdGl2ZSBRdCB3aWRnZXQgc3R5bGUuIEl0IGRvZXMgbm90IHJlcXVpcmUgUU1MIG9yIFF0IFF1aWNrLlxuIDIxIFxuLTIyIGBgYHNoXG4tMjMgZXhwb3J0IFFNQUtFPS91c3IvbGliNjQvcXQ1L2Jpbi9xbWFrZVxuLTI0IGBgYFxuLTI1IFxuLTI2IChUaGUgZXhhY3QgYHFtYWtlYCBwYXRoIGNhbiBiZSBmb3VuZCB3aXRoIGBycG0gLXFsIHF0NS1iYXNlLWRldmVsIHwgZ3JlcCAnL3FtYWtlJCdgLilcbi0yNyBcbiAyOCAjIyBCdWlsZFxuIDI5IFxuIDMwIEJ1aWxkIGJvdGggYXBwbGljYXRpb25zOlxuIDMxIFxuICAgIC4uLiIsInBhdGNoIjoiLS0tIFJFQURNRS5tZFxuKysrIFJFQURNRS5tZFxuQEAgLTIsMzAgKzIsMjIgQEBcbiBcbiBUaGlzIHdvcmtzcGFjZSBjb250YWlucyB0d28gaW5kZXBlbmRlbnQgaW50ZXJmYWNlcyBmb3IgYGFsdC1yb290ZnMtaW5zdGFsbGVyYDpcbiBcbiAtIGBjcmF0ZXMvZmxhc2hlci1ndGtgIOKAlCBHVEsgNC9saWJhZHdhaXRhXG4tLSBgY3JhdGVzL2ZsYXNoZXItcXRgIOKAlCBRdCA1L1F0IFF1aWNrIENvbnRyb2xzIDJcbistIGBjcmF0ZXMvZmxhc2hlci1xdGAg4oCUIG5hdGl2ZSBRdCA1IFdpZGdldHNcbiBcbiBCb3RoIGFyZSBpbnRlcmZhY2UgcHJldmlld3MuIFRoZXkgaW5zcGVjdCBzdXBwb3J0ZWQgYm9hcmRzIGFuZCByZW1vdmFibGUgZHJpdmVzLCBidXQgZG8gbm90IHdyaXRlIHRvIGFueSBkZXZpY2UuXG4gXG4gIyMgU3lzdGVtIGRlcGVuZGVuY2llc1xuIFxuIE9uIEFMVCBMaW51eDpcbiBcbiBgYGBzaFxuLXN1ZG8gYXB0LWdldCBpbnN0YWxsIGdjYy1jKysgbGliZ3RrNC1kZXZlbCBsaWJhZHdhaXRhLWRldmVsIFxcXG4tICBxdDUtYmFzZS1kZXZlbCBxdDUtZGVjbGFyYXRpdmUtZGV2ZWwgcXQ1LXF1aWNrY29udHJvbHMyLWRldmVsIFxcXG4tICBxdDUtcXVpY2tjb250cm9sczJcbitzdWRvIGFwdC1nZXQgaW5zdGFsbCBnY2MtYysrIGxpYmd0azQtZGV2ZWwgbGliYWR3YWl0YS1kZXZlbCBxdDUtYmFzZS1kZXZlbFxuIGBgYFxuIFxuLVRoZSBRdCBiaW5kaW5ncyBkaXNjb3ZlciBRdCB0aHJvdWdoIGBxbWFrZWAuIElmIHNldmVyYWwgUXQgdmVyc2lvbnMgYXJlIGluc3RhbGxlZCwgc2VsZWN0IFF0IDUgZXhwbGljaXRseTpcbitUaGUgUXQgY3JhdGUgZGlzY292ZXJzIFF0IDUgdGhyb3VnaCBgcGtnLWNvbmZpZ2AgYW5kIHVzZXMgdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIFF0IHdpZGdldCBzdHlsZS4gSXQgZG9lcyBub3QgcmVxdWlyZSBRTUwgb3IgUXQgUXVpY2suXG4gXG4tYGBgc2hcbi1leHBvcnQgUU1BS0U9L3Vzci9saWI2NC9xdDUvYmluL3FtYWtlXG4tYGBgXG4tXG4tKFRoZSBleGFjdCBgcW1ha2VgIHBhdGggY2FuIGJlIGZvdW5kIHdpdGggYHJwbSAtcWwgcXQ1LWJhc2UtZGV2ZWwgfCBncmVwICcvcW1ha2UkJ2AuKVxuLVxuICMjIEJ1aWxkXG4gXG4gQnVpbGQgYm90aCBhcHBsaWNhdGlvbnM6XG4gXG4iLCJmaXJzdENoYW5nZWRMaW5lIjo2fSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk5NTE2ODMyMn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImJiMjM0MThkIiwicGFyZW50SWQiOiI2MWMzZmIzMiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTU6NTk6MzMuOTY1WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkNjNjZWQ0ODE5MThkOGJhYTRlZDFjMDM2MzRcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk4xbFktanVxMWNjWW1FUjhlQUxTcGs2ZEt3Z21aOWZVamdSQUdNU19ubHFsVURlUnVMN09UajI5RDFBY2c5VjZOMmE2NVNmRVlscWRrY2Rqb1hwUW5wYW9FZVc4UFNxay1yV21FR2IxWWtOWm9OSU55RW1ocHZDQXVJcERtb1A0Z3NnYWVZay1WSmRMdmlkVzhSS29Ycy1DQi1yeWc1RlhOU0tDN2JZaEgzNnN6eTU5dHVxNC12ajBJejYxVmlHbTVaRFZFcXYwZElpM0dzaVpBbjVsUEVmMWZhYllPVk9VQi1HUFZUMDMzc2NiTEtNYXduOFE4cXcydjFxR3ZyNV9jcWlWcE1sdXBJQTdEUlpXQk9HNHhWX25nc2JhQVhPTngwcHBlcHJYa01oWXEtbEpHTmhKdDJUV0RMeXNodXNJM2NCZXdrMmNvc2hTN190UGRVb3FRSWhydFRobzhfY0l0NEtBT0xJWUVvVFJzMjdVLUNTdVdtMG1nOFV1REpyZVJjdXBNZ1hMU0pkb1NDS0RheFBEaktPWlo0dTRDdEZHM19TWkxDZGVQUjluMmF4V1hRQ1hLRWlYM29YTFV5M2pQeTZTRlNfZnVlMWxRVnlXQnNneUp0ZDc4MVQ3RU5XYnVkYTRNU1pFZnlIeklDSmNhdzE3VnZjd1ZDQ3RMY2FBVl9rVVh1QzJmdVViRFlNTjZPdWZ6WlduS1J1MWNGVFVYSU83MG1mRDFvU3JIelloOU1GMTZWc25hby1FdHJZem9Ddm1Xc3NpdzlUcWExSVRXeEdrZFdpTVllREhWSVE4Q0E3VGRnRThTbUMwQmktcVRlZVN1clFubVgybklLN05MSXQ1QUlYbThHZGdqUlJ1ZHU5VFU1NmVtR0RoMzZHZS1fcjJrVi1JX05HZzhqZHRMc3dpMEFZQ19ZdGVpaXlZU085Z0lQVlVpRnY5RE4yT3BrTlF6aGphMDRZU3d6QkQtang5S1FBTnpUWTdJU0lhT1VRbWVsQ214TzlwWUVxUzlYenJFdnVuX1V1bnZicUJqQ3dxSEFiN2ZlNVItbHdVdzFpSjFWRWR0UnFsRGlkVDVkWW1hV2JzYmphbUh2eWNJNU02bUdpVzZraGludkF2MVgtV0lvbnM3djRUT053QUFMNTlBd2drOFh1a25sUHNDRm1oV2o2dWhEVXBub2d0Rnk0LUM0V1NMc2V6ZmloSFp4WExYOW16SzhHdXZWeWluMnRFVUgtMWswV2dMX3B0Tmp5SHdwR1k1SXZ0cGJUMXhiZnVEeHhPVENvc3JaekV3a0stS0Jwanc9PVwiLFwic3VtbWFyeVwiOltdfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX0ZLSU8zcXFWamF0SE5iWUtrTllOYjdySHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGQ2NWQ4OTQ4MTkxYmY5MWQ3OTQyOWRhNTM4OCIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJnaXQgc3RhdHVzIC0tc2hvcnQ7IGdpdCBkaWZmIC0tc3RhdCJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9sblcwTTc1SFBDSE5VYzlXTk03OVNxMnF8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkNjVkOGE4ODE5MTljY2M1ZmIyZWE4Yzg1YjciLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiZ3JlcCAtbiAncW1ldGFvYmplY3QnIENhcmdvLmxvY2sgQ2FyZ28udG9tbCBjcmF0ZXMvZmxhc2hlci1xdC9DYXJnby50b21sIHx8IHRydWU7IGZpbmQgY3JhdGVzL2ZsYXNoZXItcXQgLW1heGRlcHRoIDMgLXR5cGUgZiAtcHJpbnQifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjQ0Miwib3V0cHV0IjoxMTEsImNhY2hlUmVhZCI6ODg1NzYsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MTMsInRvdGFsVG9rZW5zIjo4OTEyOSwiY29zdCI6eyJpbnB1dCI6MC4wMDIyMSwib3V0cHV0IjowLjAwMzMzLCJjYWNoZVJlYWQiOjAuMDQ0Mjg4LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNDk4Mjh9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTUxNjgzMjQsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZDYwYWEwMDgxOTFhNzJjOGVhOTJlMzFiZWUxIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjE3ZGQzNjA4IiwicGFyZW50SWQiOiJiYjIzNDE4ZCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTU6NTk6MzQuMDEwWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9GS0lPM3FxVmphdEhOYllLa05ZTmI3ckh8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkNjVkODk0ODE5MWJmOTFkNzk0MjlkYTUzODgiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIgTSBDYXJnby5sb2NrXG4gTSBSRUFETUUubWRcbiBNIGNyYXRlcy9mbGFzaGVyLXF0L0NhcmdvLnRvbWxcbiBEIGNyYXRlcy9mbGFzaGVyLXF0L3FtbC9NYWluLnFtbFxuIE0gY3JhdGVzL2ZsYXNoZXItcXQvc3JjL21haW4ucnNcbj8/IDAxOWY5OTk5LWNjZGQtNzIzNC05MTJhLTYyZTViNjhhN2U5ZC5qc29ubFxuPz8gY3JhdGVzL2ZsYXNoZXItcXQvYnVpbGQucnNcbj8/IGNyYXRlcy9mbGFzaGVyLXF0L3NyYy91aS5jcHBcbj8/IHBpLXNlc3Npb24tMjAyNi0wNy0yNVQxNC0wNy0wMS0zNDFaXzAxOWY5OTk5LWNjZGQtNzIzNC05MTJhLTYyZTViNjhhN2U5ZC5odG1sXG4gQ2FyZ28ubG9jayAgICAgICAgICAgICAgICAgICAgIHwgMTYwICstLS0tLS0tLS0tLS0tLS0tXG4gUkVBRE1FLm1kICAgICAgICAgICAgICAgICAgICAgIHwgIDE0ICstXG4gY3JhdGVzL2ZsYXNoZXItcXQvQ2FyZ28udG9tbCAgIHwgICA4ICstXG4gY3JhdGVzL2ZsYXNoZXItcXQvcW1sL01haW4ucW1sIHwgMzk0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gY3JhdGVzL2ZsYXNoZXItcXQvc3JjL21haW4ucnMgIHwgIDUwICsrKystLVxuIDUgZmlsZXMgY2hhbmdlZCwgNDYgaW5zZXJ0aW9ucygrKSwgNTgwIGRlbGV0aW9ucygtKVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1MTc0MDEwfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiOTI2NWY4MzgiLCJwYXJlbnRJZCI6IjE3ZGQzNjA4IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNTo1OTozNC4wMTBaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX2xuVzBNNzVIUENITlVjOVdOTTc5U3EycXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGQ2NWQ4YTg4MTkxOWNjYzVmYjJlYThjODViNyIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6ImNyYXRlcy9mbGFzaGVyLXF0L0NhcmdvLnRvbWxcbmNyYXRlcy9mbGFzaGVyLXF0L2J1aWxkLnJzXG5jcmF0ZXMvZmxhc2hlci1xdC9zcmMvbWFpbi5yc1xuY3JhdGVzL2ZsYXNoZXItcXQvc3JjL3VpLmNwcFxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1MTc0MDEwfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZGYwMjJlMDAiLCJwYXJlbnRJZCI6IjkyNjVmODM4IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNTo1OTo0MC4wNzRaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkNsZWFuaW5nIHVwIHVudHJhY2tlZCBzZXNzaW9uIGFydGlmYWN0cyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkNjk3MzI4ODE5MWFkZmM5ZTdjNzU0MmVkZDVcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk4xck16YjlzQXhKTGk3LTFTRC1yTmx5MXlZWjBuV1VJY2Zaei12NXUtRXljelB3Q0JKWEVIOFpmcjNyWnVXSmh3b2ZhQUxCT0dESGE1VWczQlhYVC1PMWszdHZsSDBGNkFYNzI0T2FPbVRid1lMUENfV3UzbGNLc1ZnZkllVHE5MVkzUFFkSmt6UHJUbXJkOVFFc3NBajJLNE5QTDVmeXRocUhzenR0MDNfa2VRUmdHWktvcGFGWjdFNDROTGhxVTZuUzFTelg3NFFzRXBvRGhwWEpFYWpsbEllel85M3RfejZhcjlab3BFQkZmSURKc1RfREpMOTVqamNjSnVkQ0ZzbEFOM1ZLWDlnSUVFak5nbHBjbkpJenZ0QzJTMmJVNWl1M1VvQTZLbG16QVgtUmhiQ0VPWGMxWVJyd0VGU3NCUkNfVndCeXByY1RCcmljMUNMWjd1b2p5R3JxUUhSd2xjTDhVZzFMUHNRWTh5THl3cC1qVFNSMHQzbEF1TzRUTGMzaXdyZjhHeXFSdGhMdTU3bENab1B3NlhuNzk3S0Z1Tmg3SFF1cTVpY09Bcnc0OW9Ub2hreTd6RDJDSXBkeDkxeENfeEF0YUNEZTZ2bTJiN0h0bU9OeVJMdDQ3ci1WUll6MXd4UmhOQWNuSGtNRl9qNTFhRmgwTXlQSE1pVUJKb09EX3BmXzAtYTJtSkNnajVqLXVIejhEbVpYb0tpUno1UDlacGFYQk1Fd2t2aHdqRV9naE1sOHhjRjhoWTFKcFdSdmh4Nm1nQmRNcEhibXBFNkhXVzBkRDFKSjVpNFlyc1RyRFJOOC0wOVQxd1FFenNjQldoQ1JJcFFyTkxoRHFQNV8xZ0xfTzYwYk8yZUtuakY3LXhUNUtNOXE3X01EWmVLQmdDMFctbmlMMHhNVENUWHNZcjRoUjY5NTZTekdUbjRLbThmTWZHdERoNUVvWUJzcklkc0txUENhOHkyRHBsVTdqdkVvQWp1YXh1alJyRzhPY1RubzlTVEZEN2Z5OXc1eDVIVV9FMUh0Y3BHWmdYSjRadm1vc1FMR29KbVpzZGo1UHh1RHZrbnh5RTQ5dFdwdW0yZW5CbEg3RFJGVFU5ekdLbmVyUWRCUGdiejFiRXotc3l5anp3X3VCRWhjZWpDRHJmdU9yWS1QaXdXam9VZEhzWnpZN014UGZMR2JIWmZhajQ2V3FSNmRfTlIzQXMzZ1k4YUl1WDYwcXpWeko0X1g3RjJRU1g3ZVU3S2x0SW4zMHRlNjhQbkJSSnlrY2NzREFVX1gyejdPR3dJWFF3c2ZlMkhyVG1oNFlaalM4RGJ0aVZvV1ZOcGhLTS1GUHJRQ3hOem8xMFJpamhpV01tS0pYMUNjazRMRHQ1XzBHRmV3R19uaTMzVTIxcHp6RXRfRnJ6dW1jQXBMMGdPdnNlTXNXcnEzT0NDaDh6TWc3TFViMWktYWV1amJJQmExek51TC1LcWhSbjROTFRmX0VhYkxQczZHRzlkcmhFRmFscEtqV28ydG5yXzM5N3R5VEFLZDBuTnZuMWtITnd5aGxVeUd2OXdNeTRVZjBmOFRIZEFPWUFBa2VzcnpKRmc9XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipDbGVhbmluZyB1cCB1bnRyYWNrZWQgc2Vzc2lvbiBhcnRpZmFjdHMqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfME4wMUhEU1VEdUR0b0tIRFd0bjczaGl2fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZDZiMWUwNDgxOTFiYmY1ZWUwNGMxMDkxMTM1IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6InJtIC1mIDAxOWY5OTk5LWNjZGQtNzIzNC05MTJhLTYyZTViNjhhN2U5ZC5qc29ubCBwaS1zZXNzaW9uLTIwMjYtMDctMjVUMTQtMDctMDEtMzQxWl8wMTlmOTk5OS1jY2RkLTcyMzQtOTEyYS02MmU1YjY4YTdlOWQuaHRtbFxuZ2l0IHN0YXR1cyAtLXNob3J0In19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0Ijo4MjgsIm91dHB1dCI6MTQ0LCJjYWNoZVJlYWQiOjg4NTc2LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjQ1LCJ0b3RhbFRva2VucyI6ODk1NDgsImNvc3QiOnsiaW5wdXQiOjAuMDA0MTQwMDAwMDAwMDAwMDAwNSwib3V0cHV0IjowLjAwNDMyLCJjYWNoZVJlYWQiOjAuMDQ0Mjg4LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNTI3NDh9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTUxNzQwMTMsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZDY2NjNkNDgxOTFiMDIyYTE2NTBiMGM3NDgwIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjBjZmNhN2I1IiwicGFyZW50SWQiOiJkZjAyMmUwMCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTU6NTk6NDAuMDgxWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF8wTjAxSERTVUR1RHRvS0hEV3RuNzNoaXZ8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkNmIxZTA0ODE5MWJiZjVlZTA0YzEwOTExMzUiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIgTSBDYXJnby5sb2NrXG4gTSBSRUFETUUubWRcbiBNIGNyYXRlcy9mbGFzaGVyLXF0L0NhcmdvLnRvbWxcbiBEIGNyYXRlcy9mbGFzaGVyLXF0L3FtbC9NYWluLnFtbFxuIE0gY3JhdGVzL2ZsYXNoZXItcXQvc3JjL21haW4ucnNcbj8/IGNyYXRlcy9mbGFzaGVyLXF0L2J1aWxkLnJzXG4/PyBjcmF0ZXMvZmxhc2hlci1xdC9zcmMvdWkuY3BwXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTUxODAwODB9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIyYTZmZDUyZiIsInBhcmVudElkIjoiMGNmY2E3YjUiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE1OjU5OjQ3LjcyNloiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJZZXPigJR0aGUgZm9yZWlnbiBhcHBlYXJhbmNlIHdhcyBsYXJnZWx5IGNhdXNlZCBieSBRdCBRdWljayBDb250cm9scywgd2hpY2ggZG8gbm90IHVzZSB0cmFkaXRpb25hbCBuYXRpdmUgZGVza3RvcCB3aWRnZXRzLlxuXG5JIHJlcGxhY2VkIHRoZSBRdCBRdWljay9RTUwgaW50ZXJmYWNlIHdpdGggbmF0aXZlIFF0IDUgV2lkZ2V0czpcblxuLSBVc2VzIHRoZSBzeXN0ZW0gUXQgd2lkZ2V0IHN0eWxlIGFuZCBwYWxldHRlXG4tIE5hdGl2ZSBkaWFsb2dzLCBtZW51cywgYnV0dG9ucywgcmFkaW8gYnV0dG9ucywgZm9ybXMsIGFuZCBzY3JvbGwgYXJlYXNcbi0gQm9hcmQgcGlja2VyIGlzIG5vdyBhIG5hdGl2ZSBzZWFyY2hhYmxlIHRyZWUgZ3JvdXBlZCBieSBwbGF0Zm9ybS9Tb0Ncbi0gUmVtb3ZlZCBRTUwgYW5kIHRoZSBgcW1ldGFvYmplY3RgIGRlcGVuZGVuY3lcbi0gUnVzdCBsYXVuY2hlcyB0aGUgUXQgV2lkZ2V0cyBpbXBsZW1lbnRhdGlvbiB0aHJvdWdoIGEgc21hbGwgQysrIEZGSSBsYXllclxuLSBVcGRhdGVkIGJ1aWxkIGluc3RydWN0aW9ucyBpbiBgUkVBRE1FLm1kYFxuXG5WZXJpZmllZCBzdWNjZXNzZnVsbHk6XG5cbmBgYGJhc2hcbmNhcmdvIGJ1aWxkXG5gYGBcblxuQm90aCBHVEsgYW5kIFF0IGFwcGxpY2F0aW9ucyBub3cgYnVpbGQuIFJ1biB0aGUgbmV3IHZlcnNpb24gd2l0aDpcblxuYGBgYmFzaFxuY2FyZ28gcnVuIC1wIGZsYXNoZXItcXRcbmBgYCIsInRleHRTaWduYXR1cmUiOiJ7XCJ2XCI6MSxcImlkXCI6XCJtc2dfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkNmU0OTI0ODE5MThiZGU1ZDFkYjI3NTEyMGJcIixcInBoYXNlXCI6XCJmaW5hbF9hbnN3ZXJcIn0ifV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MTA0Miwib3V0cHV0IjoxNTksImNhY2hlUmVhZCI6ODg1NzYsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MCwidG90YWxUb2tlbnMiOjg5Nzc3LCJjb3N0Ijp7ImlucHV0IjowLjAwNTIxLCJvdXRwdXQiOjAuMDA0NzcsImNhY2hlUmVhZCI6MC4wNDQyODgsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA1NDI2OH19LCJzdG9wUmVhc29uIjoic3RvcCIsInRpbWVzdGFtcCI6MTc4NDk5NTE4MDA4MywicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkNmM5ODc0ODE5MWFkMTQ1NTkwYzQ3NzkxYTAifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZWQ3YWY5Y2QiLCJwYXJlbnRJZCI6IjJhNmZkNTJmIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowMTo1OS44MzFaIiwibWVzc2FnZSI6eyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Im9rYXkgaXQgbG9va3MgYmV0dGVyLCBidXQgaSBkb250IHdhbnQgYW55IGMrKyBpbiB0aGlzIHByb2plY3QuIHdyaXRlIGl0IGluIHJ1c3QgdXNpbmcgcXQgbGlicmFyeS4gYW5kIGlmIG5vdCBleHBsYWluIHdoeS4ifV0sInRpbWVzdGFtcCI6MTc4NDk5NTMxOTgzMH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6Ijk0YmFiYmY1IiwicGFyZW50SWQiOiJlZDdhZjljZCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDI6MTEuODAzWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipJbnZlc3RpZ2F0aW5nIFJ1c3QgUXQgV2lkZ2V0cyBiaW5kaW5ncyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRkZmE5MGY4ODE5MTg4NTU0MGE4MzVjN2Y0NDBcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk40RC15NjZBYWk3RDZhdDVXSmNaMWRlVTNGd1JfeXkxbU1Kd1dWaTBwUEFxblpZa0ZMTV9MV3pUM2ZZaUZIcUlnUlJhTlJ2REJ1bU9LUG03M1pyTE4tdm9HN093LVJpUV9vWU9ycEI5Mmx2T2ZvOUZyRFhTd3JNVWF4NEVVdFVqV3hNTlNBelM0Wkc4c3d5d0dRQTJUX1k0M1hQbHozRWZodlgxNFQzUGhyMVdLUVNkRHZLLTN4d294b3lzMzZWNml0V1R0MWhUd0Ffd0JtcXAzLTJxT2gtZ1IxSHJiT2Vrblp6ZGhvUklFQ09Md1RkVzFXbEctVDdiVzRzQmtsdGJTRkFnM3BmOTBUYkZlWlJyZng4U3ZnRjJySC1ZMllxNGhseTFMekFzanZmems2b0hoUjVIbHk4YnZXZ2lOQ1hhV19fT0phYWZ5alpjSHZId28wNThpSUxkV0xNMXllU1ZIazRaZ1hOQmQxUEZzTUMyM0s0M1BveENfUFFxUHdTQk50MDVyWkVCVERUMS1BTE0tWUROeW0zUldrRUdSemtuVmJ0R050LWFqeWpmRWJsYlZEY3hmelc5NHFXMmhoRmJicDZtZmJManlNTDhoZ2JMV0RCWEFiSnBPa09VUk1BTWJBd3M2WjdhN1Z0UmphZ1djTzNPXzg5MEwwQVRQaUdZWENiRTFfbkI0R2hJaTA1TkstSzhrMWxGTFJWQkFBQVlJWkxnOEoxaGFXamQ4Rm10UmVkVDV3VWlCSEFxR1d3dzA4SjRUemN4S0VvaGZIWnR5ZXNBNWtCSXZFR0FyaWxlT2ZhTkoyWmdEcTFTeExLY2lmNlAtM2FkUDhZYzZJXzM5NThCUUJLNUhZT3dzeklxbjhXX1BBUldPMElSTHNCOHlrQlVvczJ5VFNlNkdsTUtwOFpCNWg3RUZhWUZKRE0zcldHUkZlMGhISFMxUTVxMGhMajBycmp6ZmNKWE1tVnMtU24zSm81QktyaGZlWHEwU2JlSnZpRzdFS3kyd1VxSGZkSGlzQllPMTE4TnFzSUhBdkR5T1JCMmdXNHlxRm9aa05IQnFZY2Q5bzdWTTdHeF91TF9TSFNKZ3BYSUVvNUVGYUM4alo2c1JmYXEwbENnZGFid0xlWkEyYVk5a3ljd29JZ3hIU3lMaHItRC1tQkNVVkZnS2laeUxab1Z2MlhnVEZhWXl3YlN6aTJ0S1gyb091XzNrNlJBMDJQTmdXR0d1czhwdWRURHBWU0h2X2JMdVpDZG1TN2VsXzFyYThpbC0zVFh1VExlTzZ5cnlwLVY5dExwVVFhU0w1UVFKMjFsZ3BMOVcwTmhod0d3Q2FGeDFFa09ybHdGeDdBcC1IcWo0TFdyNVc2RnY0TFo5dkJmYThzN1JsZExsSUJySGx5d1BhbjJkQWVJWEluVUk3RW9TMDk2bk5SMDVnTnhubERydlFwb2FDUFhTR0hGa2ZIaUd5bU91N0doMEhqMGVFaGdlUm0zRm1uVGFTWVgtTXhUbEFyRURRRW82M0hWeHRhcXNsSFdxWW50UWhZTTVhRzZnbTlnbFllSFZXUnkwQ1VSSDFtcXpSWXI4YzhsMHBYUklzWUVzQWZRb2RTQmw5VU45UGpReHJBVDhJVEtDN3VicXlTcmxiS0tkc1hGWWs5LVdxTlJZNi1XTWxSblhka01HbkNzLUI3SHgtdUZmZlEwTTFXYlM4Y3E4c1RPY3BFVG5aR0J5T1ZCd0V5dkY5VVd6cFNlMmFXamc1ZWY5RVFGNVFaemFYZlQwT29tbHkyTVRTMGNKSGtTWnRPVW5MbGF2M3hVand5OWRKNjVrSm5KaHFETndGelNrQktGc19IZjNreDd5SjMweDY1N0lwckVJTnlNSnJXVEgtRHhENjVWMEsxeTk0eWcwVmJpS2NUbThIcUx4Y1Q1Q2tmQkpzPVwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqSW52ZXN0aWdhdGluZyBSdXN0IFF0IFdpZGdldHMgYmluZGluZ3MqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfTU5xMFAxazVUMkNRc2lKQzVvaE1KeXczfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTAzOWJkMDgxOTE5ZDEyMjM5YjZmMGY4YzRiIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImNhcmdvIGluZm8gcXRfd2lkZ2V0cyAyPi9kZXYvbnVsbCB8IGhlYWQgLTgwOyBjYXJnbyBpbmZvIHF0X2NvcmUgMj4vZGV2L251bGwgfCBoZWFkIC01MDsgY2FyZ28gc2VhcmNoIHJpdHVhbCAtLWxpbWl0IDEwIiwidGltZW91dCI6MTIwfX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfUDBvRU5Sb0VlQ3JhcDdrbG5zejllemNlfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTAzOWJlNDgxOTFiM2ViZjY0OTljMzBjM2U3IiwibmFtZSI6IndlYl9zZWFyY2giLCJhcmd1bWVudHMiOnsicXVlcnkiOiJSdXN0IFF0IFdpZGdldHMgY3JhdGUgcXRfd2lkZ2V0cyByaXR1YWwgZXhhbXBsZSBRQXBwbGljYXRpb24gMjAyNSJ9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MTIzNywib3V0cHV0IjoxODcsImNhY2hlUmVhZCI6ODg1NzYsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6ODgsInRvdGFsVG9rZW5zIjo5MDAwMCwiY29zdCI6eyJpbnB1dCI6MC4wMDYxODUsIm91dHB1dCI6MC4wMDU2MSwiY2FjaGVSZWFkIjowLjA0NDI4OCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDU2MDgzfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1MzE5ODM0LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGRmODhhODg4MTkxOGQ1MjkwM2FlZmZkYzdkOCJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJlMjgwNDJhMyIsInBhcmVudElkIjoiOTRiYWJiZjUiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjAyOjIyLjE2OFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfTU5xMFAxazVUMkNRc2lKQzVvaE1KeXczfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTAzOWJkMDgxOTE5ZDEyMjM5YjZmMGY4YzRiIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoicXRfd2lkZ2V0cyAjZ3VpICNmZmkgI3F0ICNyaXR1YWxcbkJpbmRpbmdzIGZvciBRdFdpZGdldHMgQysrIGxpYnJhcnlcbnZlcnNpb246IDAuNS4wXG5saWNlbnNlOiBNSVQgT1IgQXBhY2hlLTIuMFxucnVzdC12ZXJzaW9uOiB1bmtub3duXG5kb2N1bWVudGF0aW9uOiBodHRwczovL3J1c3QtcXQuZ2l0aHViLmlvL3J1c3Rkb2MvcXQvcXRfd2lkZ2V0c1xucmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtcXQvcml0dWFsXG5jcmF0ZXMuaW86IGh0dHBzOi8vY3JhdGVzLmlvL2NyYXRlcy9xdF93aWRnZXRzLzAuNS4wXG5mZWF0dXJlczpcbiAgcml0dWFsX3J1c3Rkb2MgICAgICAgICA9IFtxdF9jb3JlL3JpdHVhbF9ydXN0ZG9jLCBxdF9ndWkvcml0dWFsX3J1c3Rkb2NdXG4gIHJpdHVhbF9ydXN0ZG9jX25pZ2h0bHkgPSBbcXRfY29yZS9yaXR1YWxfcnVzdGRvY19uaWdodGx5LCBxdF9ndWkvcml0dWFsX3J1c3Rkb2NfbmlnaHRseV1cbnF0X2NvcmUgI2d1aSAjZmZpICNxdCAjcml0dWFsXG5CaW5kaW5ncyBmb3IgUXRDb3JlIEMrKyBsaWJyYXJ5XG52ZXJzaW9uOiAwLjUuMFxubGljZW5zZTogTUlUIE9SIEFwYWNoZS0yLjBcbnJ1c3QtdmVyc2lvbjogdW5rbm93blxuZG9jdW1lbnRhdGlvbjogaHR0cHM6Ly9ydXN0LXF0LmdpdGh1Yi5pby9ydXN0ZG9jL3F0L3F0X2NvcmVcbnJlcG9zaXRvcnk6IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LXF0L3JpdHVhbFxuY3JhdGVzLmlvOiBodHRwczovL2NyYXRlcy5pby9jcmF0ZXMvcXRfY29yZS8wLjUuMFxuZmVhdHVyZXM6XG4gIHJpdHVhbF9ydXN0ZG9jICAgICAgICAgPSBbXVxuICByaXR1YWxfcnVzdGRvY19uaWdodGx5ID0gW11cbnJpdHVhbCA9IFwiMC4wLjBcIiAgICAgICAgICAgICAgICMgQXV0b21hdGljIGdlbmVyYXRvciBvZiBDKysgbGlicmFyeSB3cmFwcGVyc1xucml0dWFsLWNsaSA9IFwiMC4xLjBcIiAgICAgICAgICAgIyBtaW5pbWFsIENMSSBoYWJpdCB0cmFja2VyXG5yaXR1YWxfY29tbW9uID0gXCIwLjQuMFwiICAgICAgICAjIENvbW1vbiB1dGlsaXRpZXMgZm9yIHJpdHVhbCBhbmQgcml0dWFsX2J1aWxkXG5yaXR1YWxfYnVpbGQgPSBcIjAuNC4wXCIgICAgICAgICAjIEJ1aWxkIHNjcmlwdCBpbXBsZW1lbnRhdGlvbiBmb3IgQysrIGxpYnJhcnkgd3JhcHBlcnNcbnF0X3JpdHVhbF9jb21tb24gPSBcIjAuNC4wXCIgICAgICMgQ29tbW9uIHV0aWxpdGllcyBmb3IgZ2VuZXJhdGluZyBhbmQgYnVpbGRpbmcgUnVzdC1RdCBjcmF0ZXNcbnF0X3JpdHVhbF9idWlsZCA9IFwiMC41LjBcIiAgICAgICMgQnVpbGQgc2NyaXB0IGltcGxlbWVudGF0aW9uIGZvciBSdXN0IFF0IGNyYXRlc1xucXRfcml0dWFsID0gXCIwLjAuMFwiICAgICAgICAgICAgIyBHZW5lcmF0b3Igb2YgUnVzdC1RdCBjcmF0ZXNcbmNvbW1vbnNlbnNlID0gXCIwLjAuMVwiICAgICAgICAgICMgUGVyc29uYWwgcml0dWFsIGxpYnJhcnkgb2YgZXJnb25vbWljIFJ1c3QgdXRpbGl0aWVzXG5pc29jbGluZS1wcm90b2NvbCA9IFwiMC4xLjBcIiAgICAjIFdpcmUgdHlwZXMgc2hhcmVkIGJldHdlZW4gaXNvY2xpbmUtc2RrIGFuZCBpc29jbGluZS1nYXRld2F5LiBXb3JrZXJJbnB1dCwgV29ya2VyUmVzdWx0LCBUaWNrS2luZOKAplxuY3BwX3N0ZCA9IFwiMC4xLjFcIiAgICAgICAgICAgICAgIyBCaW5kaW5ncyBmb3IgQysrIHN0YW5kYXJkIGxpYnJhcnlcbi4uLiBhbmQgNzMgY3JhdGVzIG1vcmUgKHVzZSAtLWxpbWl0IE4gdG8gc2VlIG1vcmUpXG5ub3RlOiB0byBsZWFybiBtb3JlIGFib3V0IGEgcGFja2FnZSwgcnVuIGBjYXJnbyBpbmZvIDxuYW1lPmBcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk5NTM0MjE2OH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImI3MTk1NzhlIiwicGFyZW50SWQiOiJlMjgwNDJhMyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDI6MjIuMTY4WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9QMG9FTlJvRWVDcmFwN2tsbnN6OWV6Y2V8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlMDM5YmU0ODE5MWIzZWJmNjQ5OWMzMGMzZTciLCJ0b29sTmFtZSI6IndlYl9zZWFyY2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIxLiBHZXR0aW5nIHN0YXJ0ZWQgLSBSaXR1YWxcbmh0dHBzOi8vcnVzdC1xdC5naXRodWIuaW8vcXQvZ2V0dGluZ19zdGFydGVkL1xuXG4yLiBxdF93aWRnZXRzIC0gUnVzdCAtIERvY3MucnNcbmh0dHBzOi8vZG9jcy5ycy9xdF93aWRnZXRzL2xhdGVzdC9xdF93aWRnZXRzL1xuXG4zLiBSaXR1YWwgLSBSaXR1YWxcbmh0dHBzOi8vcnVzdC1xdC5naXRodWIuaW8vXG5cbjQuIHF0X3dpZGdldHMgLSBSdXN0IC0gRG9jcy5yc1xuaHR0cHM6Ly9kb2NzLnJzL3F0X3dpZGdldHMvMC40LjEvcXRfd2lkZ2V0cy9pbmRleC5odG1sXG5cbjUuIEdpdEh1YiAtIHJ1c3QtcXQvcml0dWFsOiBVc2UgQysrIGxpYnJhcmllcyBmcm9tIFJ1c3QgwrcgR2l0SHViXG5odHRwczovL2dpdGh1Yi5jb20vcnVzdC1xdC9yaXR1YWwifV0sImRldGFpbHMiOnsicmVzdWx0cyI6W3sidGl0bGUiOiJHZXR0aW5nIHN0YXJ0ZWQgLSBSaXR1YWwiLCJ1cmwiOiJodHRwczovL3J1c3QtcXQuZ2l0aHViLmlvL3F0L2dldHRpbmdfc3RhcnRlZC8iLCJzbmlwcGV0IjoiIn0seyJ0aXRsZSI6InF0X3dpZGdldHMgLSBSdXN0IC0gRG9jcy5ycyIsInVybCI6Imh0dHBzOi8vZG9jcy5ycy9xdF93aWRnZXRzL2xhdGVzdC9xdF93aWRnZXRzLyIsInNuaXBwZXQiOiIifSx7InRpdGxlIjoiUml0dWFsIC0gUml0dWFsIiwidXJsIjoiaHR0cHM6Ly9ydXN0LXF0LmdpdGh1Yi5pby8iLCJzbmlwcGV0IjoiIn0seyJ0aXRsZSI6InF0X3dpZGdldHMgLSBSdXN0IC0gRG9jcy5ycyIsInVybCI6Imh0dHBzOi8vZG9jcy5ycy9xdF93aWRnZXRzLzAuNC4xL3F0X3dpZGdldHMvaW5kZXguaHRtbCIsInNuaXBwZXQiOiIifSx7InRpdGxlIjoiR2l0SHViIC0gcnVzdC1xdC9yaXR1YWw6IFVzZSBDKysgbGlicmFyaWVzIGZyb20gUnVzdCDCtyBHaXRIdWIiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vcnVzdC1xdC9yaXR1YWwiLCJzbmlwcGV0IjoiIn1dfSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk5NTM0MjE2OH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjlmODljYWY1IiwicGFyZW50SWQiOiJiNzE5NTc4ZSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDI6MjkuNzE3WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipQbGFubmluZyBSdXN0IHJld3JpdGUgd2l0aCBxdF93aWRnZXRzKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGUwZjgzMDQ4MTkxODdmMjNmYjk3MTA4MjA5NVwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTjRVOG9uVUItaHUtUnducUtKZkpjZ044OGJKSU1QOVc1UzFBZHV0OVk0TFFaOERRQmJZYWtrZGJQYXF6T3ozS01WemVSeUlmUm5VQklaM0l0RlV0MUFRbWlfd1lpSjdBMlJaaHA4Q2xHdVk4N2gyeVNObU04TjBfUWZteW1TemNCWEJvelpYMUljSzNsV3E1a1FOU18wcnRuTkRmV281UTNQdDktc0NwdXMzRFRqUzZlR3lCRGpybEV6YUV1YkZPdmJOMTV5UUx0dkJEN3RUTVdoUXNUb2FvOERIbHZPMWxWby1QOVB3WFdtajFpaTJaNVRYbzRvSjAxYWwtdkhHcV9GQ3JwOEVuZlJ1ZVlrRzJCaDcyQ2pKVkVDeFBPMkpEM043MEVrR1FET3NURjJVN0stRTRzbzNBeGxxNW1YbEhrUGhyM2ZJZVZiV0NuQnEzZ09vQzFCQ2g3NHpiUDQtcktUdXRHNWQtTVVtMktJMVc2RnBsQWpZdkpkMDJudG5sblJ2RjVuTVprTjJRMFFQNTdxS295M1p3ck1mak9WV3hCeUtMMV9tdy1lQjFGN2RqQ2xORTRQZk5lNXFzUm1BLW5maDdldTZmSkJwSFVvZ0t4VjFabHI4LXljUHo2YS1fQUxfLWNET0ZYU3RUbzdyRnhxbEFOc1BIc1NYYVMwbS1ZNHZkVVhYUGxxM1FRTDVFYmVYZzhmUllKa2k5TU1tSEltQ2o2YUNaMzBjZkhQcFVhMFVwaVdRWTlfeDRFcC15cGNnX05ndklWU2s3VWV0bHZfNXhfWGNDMTJ4X3c0OGh6anJzTmRRbEl1bDE0WXh6WmVDQTg1WnpqeUVtX2xmWVB3WnFvb3hpYWxlNl8xYVlwUDNDZFhkNVRzdWJJRUhQUldjLTdUTFdOUEcyNng1ZjVva1lNQm9PZFA4aXVlWXd5cDgxT0JMMGZkbUFhU0l6cFh6eUJNVFduN2dVSFZXQWZUV1l3Sm9FZjktd19fM2plT2JsblhEMmhUSXd2UDFGNVlKZGI4Y2pUaGZtMWh5ZnZvUkZnVm5NZHZUNUhhMzRKb1h0ZkFsRGVvQ0NGTDNQVm92Uk9ubkVBRVNoNThTR3NUTlBsTVlHTkV3NUFVWjRxWER0OE92QXk2ZkJYU1JHWEZ3ZThmaTlraHhoeElNSFRHZXdNSHZRTHd0SVdwSEI1V0xXX3NQeF93Wnctc1FIR0NZRDJjSU5uaEE4RU42QUdUd2hlZmpvQ1BSdnoxRGVzNmJ2NDFUdGFFdU15d3lXTzhYVHN6d3VZcDBXelJWbmhnTmFtaXpaSDFsb1ViZVAteFFONVhjMDc1UnViMG9YUW85cU5POTk4aHhHdWhPZ05uRkZZaUs1Wjdjc0NBVkg5ejVrSjdIR1I2ZDVxczZVT3AxUjR1QXJ2VnRqQ29aWTRpbk5SbkNlY0FfTFBqX295Q0tTT29YMkplc2UwelBUcFFZRkp1UTNRMm5kSEUwaGo3VEYwLWc0TU9TU3FLbTNJRTNVT0FzekZjcE12Zzd6a2hzVXZlalBLYlpvYW51X0p5TkdWQTkwb1JuSDNNN2JVOVNrZFlQRFEyTVV4Qi1SdHNMeVlmYVROelVIU0Jscnl3ZjdXWUN0dlBrX2tBWVlWNm1NRks5cEtGaDQxbEJMOXhndGh3N3RqSGRHcjFqU29HWHRXQ3pXdFRqVVo3TlhhVDBGd2VWRHplMmQ4TW5yVzF1QTRLcThDWjRZN1kxbTNKWTY4NmtzLVUzWXd6dnQtMmt1Y3dUUjJZUjEycFhNQlNjdGF1eGt5MElncUoxa1l6WGRWUjJKRkttM2JJNUs3cjNpOXAxaTBZbXluUmFFTHRwbnp6Q183RC0tc2s5YTQ0U1I2bTNKeENLd3g0NlRzMURMM2o5dlVoaVNubG5Bd1VmTXZxdmRsRGlpejhmUUY2V2ZjVnBuaHYtOVpIQzdaZDlHeVJXdHZKcFNiaUoyQ2R2dTc5NldZVzk0cmY1RjNmalpKYjJxN3RXdndmMkJwSXc1dy1OVE5VaUwtaV9Vb1BVQ1oxbC1HbW8tR2lSNVpUWndHN1ZjWUNRb2I3VXQ5MDNhdlY3dWRtSVlsY1ZxSGFlOWJHSDlUOXk5bG4xN2dEZTlyTFpSaksyQm9hZkE4YVU5bzEwc1BkNXdkLTdYSExBMG5KNFJEMno2Z0hheWVjYXJLeWFMRTBONVNHLWJRbXhsek13SWpiMGw1RkViRzc5UGU4bUw0UTBJWHh5cXVvTnNvd1M5V1FyQlI2MlItZjUwUWhLMHJhUjgwQlFIcDgzZ1U5akpHaEthRFNLZmdwa1ZmbU1vdz09XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipQbGFubmluZyBSdXN0IHJld3JpdGUgd2l0aCBxdF93aWRnZXRzKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX05XbzlBNUdva0FCVXVWcmFUZnNDamZzbnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGUxNDQ1ZDg4MTkxYTFlZmYyMWFmOGM5YzIwMCIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJmaW5kIH4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYyAtbWF4ZGVwdGggMiAtdHlwZSBkIC1uYW1lICdxdF93aWRnZXRzLTAuNS4wJyAtbyAtbmFtZSAncXRfY29yZS0wLjUuMCc7IGZpbmQgfi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjLyovcXRfd2lkZ2V0cy0wLjUuMCAtbWF4ZGVwdGggMiAtdHlwZSBmIHwgaGVhZCAtMjAgMj4vZGV2L251bGwifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjEwNzEsIm91dHB1dCI6MjI5LCJjYWNoZVJlYWQiOjg5NjAwLCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjEzMSwidG90YWxUb2tlbnMiOjkwOTAwLCJjb3N0Ijp7ImlucHV0IjowLjAwNTM1NSwib3V0cHV0IjowLjAwNjg3LCJjYWNoZVJlYWQiOjAuMDQ0OCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDU3MDI1fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1MzQyMTcxLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGUwZTg3NjQ4MTkxOGQwMmUwODg5NGM5MDI1MCJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJjYjE5ODM5YyIsInBhcmVudElkIjoiOWY4OWNhZjUiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjAyOjI5Ljc5MFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfTldvOUE1R29rQUJVdVZyYVRmc0NqZnNufGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTE0NDVkODgxOTFhMWVmZjIxYWY4YzljMjAwIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdF9jb3JlLTAuNS4wXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0X3dpZGdldHMtMC41LjBcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRfd2lkZ2V0cy0wLjUuMC9DYXJnby50b21sLm9yaWdcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRfd2lkZ2V0cy0wLjUuMC9yaXR1YWxfZGJfdjEuanNvblxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdF93aWRnZXRzLTAuNS4wL0NhcmdvLnRvbWxcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRfd2lkZ2V0cy0wLjUuMC9idWlsZC5yc1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdF93aWRnZXRzLTAuNS4wLy5jYXJnb192Y3NfaW5mby5qc29uXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0X3dpZGdldHMtMC41LjAvLmNhcmdvLW9rXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0X3dpZGdldHMtMC41LjAvdGVzdHMvbW9kZWxfaW5kZXhfbGlzdC5yc1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdF93aWRnZXRzLTAuNS4wL3Rlc3RzL3B1c2hfYnV0dG9uLnJzXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0X3dpZGdldHMtMC41LjAvYnVpbGRfc2NyaXB0X2RhdGEuanNvblxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdF93aWRnZXRzLTAuNS4wL2NfbGliL2ZpbGUxLmNwcFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdF93aWRnZXRzLTAuNS4wL2NfbGliL3F0X3dpZGdldHNfY19nbG9iYWwuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdF93aWRnZXRzLTAuNS4wL2NfbGliL0NNYWtlTGlzdHMudHh0XG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0X3dpZGdldHMtMC41LjAvY19saWIvc2l6ZWRfdHlwZXMuY3h4XG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0X3dpZGdldHMtMC41LjAvc3JjL2xpYi5yc1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdF93aWRnZXRzLTAuNS4wL3NyYy9mZmkuaW4ucnNcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRfd2lkZ2V0cy0wLjUuMC9zcmMvb3BzLnJzXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0X3dpZGdldHMtMC41LjAvc3JjL2ltcGxfcV9hcHBsaWNhdGlvbi5yc1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdF93aWRnZXRzLTAuNS4wL3NyYy9xX2RyYXdfYm9yZGVyX3BpeG1hcC5yc1xuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1MzQ5NzkwfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiY2VjYzBjOWEiLCJwYXJlbnRJZCI6ImNiMTk4MzljIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowMjozNS4zOTBaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkFzc2Vzc2luZyBDKysgcHJlc2VuY2UgaW4gYmluZGluZ3MgcGFja2FnZSoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlMTc5NTcwODE5MWJhN2E5ZTIyM2ZiNjdkMmVcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk40Yk55eXZBZk5vVnhfTjhjX1VoazFHdHJESkF0XzBHZW9GdU9NSDBaeWVYYUlTWGNqcjl1X3lvdERleFNiZjl3WGFCTm1CNmQ2clZpdkpJWjJpdzdWbTd4OTBJbjc0RFlXam5fYkZFOHFpSWhhSy1qYzVvT0hFdlNBTmptWS03TmNhZDhhZTFaTE1hQ25FQ1hqU3REWWJWX2d4Zl9UQlZvT0x6YVNtbkEyTnJBRTFqak1rci1COTFNWDhEUWl2NmtLWVpOX0ItNER2OElXc1lQcGRwRlk3UXpQSmdZaGgybHYtTFVreXVjTV9mUnFVQ19aRk1ZbGhhS0VQUWYxZGpWQWVBc0ZlTnJTSHhVMzdmRm52UjBtTkZPY2tnUGVHc1paX0drTGwxRVlRemRNSHB6STJzQ29xUFFmdGVyc0dHQjRzMmdTMG9nb1RkX1lJbHhSel9LN3J6V1ZCU3J5Zk1aTjl2QmxlWkFBWDVWZm1xRHdfVlVLcjFONjR6cHBnMllBYkxERVdKU2c0ajhJUTc0NHFOX0R5dWMxUFRhQ0kzeFltSzVSb0tNNDJzSE1rMFBWYjFBQjctcDBPNS1XR3RJTmN5VXYtWjRKbnl3Y0NVVUY4Qm9GRGx1cTBFMW8tTTR6MmhJWFQ0ZElfUnlUOGU3U1Faa0g5LXd4amNiUkxLeXZXQ2loOUdPbHFkS3dFeGlTMVR5bmJGcklzWjBvTkdFLVhucU9HbDVobVN5OEo1TEJxUWRHVlBkbHpIMXozazBnSlVJVGhfM2YxSGl6YmVMbnVVc1pRY0xUdGU2STZkUmdxMFNGb0UxenEwa1FUb0pkM1RjYnVZM09FVHRUZ05TLXFEaVpySGhWX2Jqa3RvSWt0UFFEa2FvcXZfTUtHZ2lnTDBDS1A0YzdvWVF1aENDSmtwaFlPU1BicktZWVdCdGJqQzlUTUp6VHBiZU1FdW4yUEJnQTYxQzctUERZa3h5MDhJckIwMkxtM21ZRzZWN3U2UHBLWjhRLXpSUEZsQ1d4Rm5neEd1d2J2Q3lSTVl0YXNzVjg2WHJhaXY4ektyWHNCeVd2WVJjZXNqZEJlSGd2X2RRMFFDVTU2WFhQRGpHRHhyS2F6VVA0Y1B2QUZDQ0I4alVBd29PaXRMSFZqeE1GSDVkX0FQSWJnRlB4bVVNTDc2d0lKdWVSLWRXMmhOcUMzTS0xWGNPMFNVVlh3T21qdnVEMDd0NjRfbGpyTTM5R0lDVVY1aGVHUmMxNnhlSDhDTS1tMTk0N0k2VHhhOEdXRmo0U1BFUG1LdWhpdHRZYU1Fc2stYzR4SjQzbmJ0dVRYdTNhOTU0WDhaMzdUcHZ6T0lkU0JNZVlGalY4T2FFSFZnWm9JMUhyVGZZQXMzS1ZlYWpmSVFSVV9rNE51VGZmNk5JRUNscVlGWUprOHlIQ3BMQi1wNTlzNTg5X3REby1UVno0RTgwWXFTUlFPeGJlSWNHb1VkUT09XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipBc3Nlc3NpbmcgQysrIHByZXNlbmNlIGluIGJpbmRpbmdzIHBhY2thZ2UqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfUFFObmY0ejVXdE9mc2tGdTVERm1uOGpyfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTFiM2E3MDgxOTFiYmY2OTBjNzIwMDNkNGE3IiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6Ii9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRfd2lkZ2V0cy0wLjUuMC90ZXN0cy9wdXNoX2J1dHRvbi5ycyJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9OREJEdXhCYjhWSXNLdEw3VDZleDhXcjN8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlMWIzYTgwODE5MTg3MWYzYmI0YmY0Yjg1MmMiLCJuYW1lIjoid2ViX2ZldGNoIiwiYXJndW1lbnRzIjp7InVybCI6Imh0dHBzOi8vcnVzdC1xdC5naXRodWIuaW8vcXQvZ2V0dGluZ19zdGFydGVkLyIsIm1heENoYXJzIjoxNTAwMH19LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX1FkcHAwYmtYTVRlazE2elVYbDlScm5zbXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGUxYjNhOGM4MTkxOGQwZmViNTAwYTkwNzVhNSIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJmaW5kIH4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy8qL3F0X3dpZGdldHMtMC41LjAvZXhhbXBsZXMgfi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjLyovcXRfY29yZS0wLjUuMC9leGFtcGxlcyAtdHlwZSBmIDI+L2Rldi9udWxsIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoyMTYzLCJvdXRwdXQiOjIwMCwiY2FjaGVSZWFkIjo4OTYwMCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjozMSwidG90YWxUb2tlbnMiOjkxOTYzLCJjb3N0Ijp7ImlucHV0IjowLjAxMDgxNTAwMDAwMDAwMDAwMiwib3V0cHV0IjowLjAwNiwiY2FjaGVSZWFkIjowLjA0NDgsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA2MTYxNX19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk5NTM0OTc5MywicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlMTYyN2EwODE5MTg5YWQzMDNkOGQ0NmY1YjQifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYjA0ZDcxMDUiLCJwYXJlbnRJZCI6ImNlY2MwYzlhIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowMjozNi4zNzJaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX1BRTm5mNHo1V3RPZnNrRnU1REZtbjhqcnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGUxYjNhNzA4MTkxYmJmNjkwYzcyMDAzZDRhNyIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6InVzZSBxdF93aWRnZXRzOjp7cXRfY29yZTo6UVN0cmluZywgUUFwcGxpY2F0aW9uLCBRUHVzaEJ1dHRvbn07XG5cbiNbdGVzdF1cbmZuIHB1c2hfYnV0dG9uMSgpIHtcbiAgICBRQXBwbGljYXRpb246OmluaXQofF98IHVuc2FmZSB7XG4gICAgICAgIGxldCBidG4gPSBRUHVzaEJ1dHRvbjo6ZnJvbV9xX3N0cmluZygmUVN0cmluZzo6ZnJvbV9zdGRfc3RyKFwiZmlyc3RfYnV0dG9uXCIpKTtcbiAgICAgICAgbGV0IHRleHQgPSBidG4udGV4dCgpLnRvX3N0ZF9zdHJpbmcoKTtcbiAgICAgICAgYXNzZXJ0X2VxISgmdGV4dCwgXCJmaXJzdF9idXR0b25cIik7XG4gICAgICAgIDBcbiAgICB9KVxufVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1MzU2MzcyfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMTYxZTcyZGYiLCJwYXJlbnRJZCI6ImIwNGQ3MTA1IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowMjozNi4zNzJaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX05EQkR1eEJiOFZJc0t0TDdUNmV4OFdyM3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGUxYjNhODA4MTkxODcxZjNiYjRiZjRiODUyYyIsInRvb2xOYW1lIjoid2ViX2ZldGNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiU291cmNlOiBodHRwczovL3J1c3QtcXQuZ2l0aHViLmlvL3F0L2dldHRpbmdfc3RhcnRlZC9cblxuR2V0dGluZyBzdGFydGVkIC0gUml0dWFsIFJpdHVhbCBVc2UgQysrIGxpYnJhcmllcyBmcm9tIFJ1c3QgQWJvdXQgUml0dWFsIFJ1c3QgKyBRdCBndWlkZSBCbG9nIEdldHRpbmcgc3RhcnRlZCBUbyB1c2UgUXQgZnJvbSBSdXN0LCBhZGQgdGhlIGNyYXRlcyBhcyBkZXBlbmRlbmNpZXMgdG8geW91ciBDYXJnby50b21sICwgZm9yIGV4YW1wbGU6IFtkZXBlbmRlbmNpZXNdIHF0X3dpZGdldHMgPSBcIjAuNVwiIEVhY2ggY3JhdGUgcmUtZXhwb3J0cyBpdHMgZGVwZW5kZW5jaWVzLCBzbywgZm9yIGV4YW1wbGUsIHlvdSBjYW4gYWNjZXNzIHF0X2NvcmUgYXMgcXRfd2lkZ2V0czo6cXRfY29yZSB3aXRob3V0IGFkZGluZyBhbiBleHBsaWNpdCBkZXBlbmRlbmN5LiBZb3UgY2FuIGFsc28gYWRkIHRoZW0gYXMgZGlyZWN0IGRlcGVuZGVuY2llcyBmb3IgY29udmVuaWVuY2UsIGJ1dCBtYWtlIHN1cmUgdG8gdXNlIGNvbXBhdGlibGUgdmVyc2lvbnMuIFNlZSBydXN0LXF0L2V4YW1wbGVzIHJlcG9zaXRvcnkgdG8gc2VlIGhvdyB0byB1c2UgdGhlIEFQSSBwcm92aWRlZCBieSBRdCBjcmF0ZXMuIE1vc3Qgb2YgdGhlIFF0IEFQSSBpcyB0cmFuc2xhdGVkIHRvIFJ1c3QgYXMtaXMgd2hlbiBwb3NzaWJsZS4gSWRlbnRpZmllcnMgYXJlIG1vZGlmaWVkIGFjY29yZGluZyB0byBSdXN0JnJzcXVvO3MgbmFtaW5nIGNvbnZlbnRpb24uIE92ZXJsb2FkZWQgbWV0aG9kcyAobWV0aG9kcyBhY2NlcHRpbmcgbXVsdGlwbGUgc2V0cyBvZiBhcmd1bWVudCB0eXBlcykgYXJlIHdyYXBwZWQgYXMgZGlzdGluY3QgUnVzdCBtZXRob2RzIHdpdGggc3VmZml4ZXMgdGhhdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0uIEluIG1hbnkgY2FzZXMsIHlvdSBjYW4gYWRkcmVzcyB0aGUgUXQgZG9jdW1lbnRhdGlvbiBhbmQgdHJhbnNsYXRlIGV4YW1wbGVzIGZyb20gaXQgYWxtb3N0IGRpcmVjdGx5IHRvIFJ1c3QgY29kZS4gQ3JhdGUgZG9jdW1lbnRhdGlvbiAoYXZhaWxhYmxlIG9uIGRvY3MucnMgb3IgdGhyb3VnaCBjYXJnbyBkb2MgKSBmZWF0dXJlcyBlbWJlZGRlZCBRdCBkb2N1bWVudGF0aW9uLiBJbiBhZGRpdGlvbiwgUnVzdCBjcmF0ZXMgcHJvdmlkZSBzb21lIGhlbHBlcnMgdG8gaW1wcm92ZSBlcmdvbm9taWNzOiBRdCBhcHBsaWNhdGlvbiBvYmplY3RzICggUUFwcGxpY2F0aW9uICwgUUd1aUFwcGxpY2F0aW9uICwgUUNvcmVBcHBsaWNhdGlvbiApIHJlcXVpcmUgYXJnYyBhbmQgYXJndiB0byBiZSBwcmVzZW50LCBhbmQgdGhlc2UgYXJlIG5vdCBhdmFpbGFibGUgZGlyZWN0bHkgaW4gUnVzdC4gVXNlIGluaXQgaGVscGVycyB0byBpbml0aWFsaXplIHRoZSBhcHBsaWNhdGlvbiBjb3JyZWN0bHk6IGZuIG1haW4gKCkgeyBRQXBwbGljYXRpb24gOjogaW5pdCAoIHwgYXBwIHwgdW5zYWZlIHsgLy8uLi4gfSkgfSBxdF9jb3JlIHByb3ZpZGVzIEFQSSBmb3IgdXNpbmcgc2lnbmFscyBhbmQgc2xvdHMgY29udmVuaWVudGx5LiBZb3UgY2FuIGNvbm5lY3QgYnVpbHQtaW4gc2lnbmFscyB0byBidWlsdC1pbiBzbG90cyBsaWtlIHRoaXM6IGxldCBtdXQgdGltZXIgPSBRVGltZXIgOjogbmV3XzBhICgpOyB0aW1lciAuIHRpbWVvdXQgKCkuIGNvbm5lY3QgKCBhcHAgLiBzbG90X3F1aXQgKCkpOyBZb3UgY2FuIGFsc28gY29ubmVjdCBzaWduYWxzIHRvIFJ1c3QgY2xvc3VyZXMgKHNlZSBiYXNpY19mb3JtIGV4YW1wbGUgOiBsZXQgYnV0dG9uX2NsaWNrZWQgPSBTbG90Tm9BcmdzIDo6IG5ldyAoIE51bGxQdHIgLCBtb3ZlIHx8IHsgLi4uIH0pOyBidXR0b24gLiBjbGlja2VkICgpLiBjb25uZWN0ICggJiBidXR0b25fY2xpY2tlZCApOyBZb3UgY2FuIGFsc28gY3JlYXRlIGFuZCBlbWl0IHNpZ25hbHM6IHVzZSBxdF9jb3JlIDo6IHsgUVRpbWVyICwgU2lnbmFsT2ZJbnQgfTsgbGV0IHNpZ25hbCA9IFNpZ25hbE9mSW50IDo6IG5ldyAoKTsgbGV0IHRpbWVyID0gUVRpbWVyIDo6IG5ld18wYSAoKTsgc2lnbmFsIC4gY29ubmVjdCAoIHRpbWVyIC4gc2xvdF9zdGFydCAoKSk7IHNpZ25hbCAuIGVtaXQgKCAxMDAgKTsgQ29tcGF0aWJpbGl0eSBvZiBzaWduYWwmcnNxdW87cyBhbmQgc2xvdCZyc3F1bztzIGFyZ3VtZW50cyBpcyBjaGVja2VkIGF0IGNvbXBpbGUgdGltZS4gTm90ZSB0aGF0IGVhY2ggc2V0IG9mIGFyZ3VtZW50IHR5cGVzIHJlcXVpcmVzIGEgc2VwYXJhdGUgUnVzdCB0eXBlIG9mIHNpZ25hbCBvciBzbG90IChlLmcuIFNsb3ROb0FyZ3MgLCBTbG90T2ZJbnQgLCBldGMuKS4gT3RoZXIgY3JhdGVzIG1heSBhbHNvIHByb3ZpZGUgbmV3IHNpZ25hbCBhbmQgc2xvdCBvYmplY3RzIChlLmcuIHF0X3dpZGdldHM6OlNsb3RPZlFUcmVlV2lkZ2V0SXRlbSApLiBRU3RyaW5nOjpmcm9tX3N0ZF9zdHIgLCBRU3RyaW5nOjp0b19zdGRfc3RyaW5nICwgUUJ5dGVBcnJheTo6ZnJvbV9zbGljZSAsIGFuZCBpbXBsPCdhPiBGcm9tPCYnYSBRU3RyaW5nPiBmb3IgU3RyaW5nIHByb3ZpZGUgY29udmVyc2lvbnMgZnJvbSBRdCZyc3F1bztzIHR5cGVzIHRvIFJ1c3QgdHlwZXMgYW5kIGJhY2suIFFGbGFncyBnZW5lcmljIHR5cGUgbWltaWNzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIEMrKydzIFFGbGFncyBjbGFzcy4gcWRiZyBmdW5jdGlvbiBmcm9tIHF0X2NvcmUgd3JhcHMgYSBwcmludGFibGUgKHdpdGggUURlYnVnICkgUXQgb2JqZWN0IGludG8gYSBzaGltIG9iamVjdCB0aGF0IGltcGxlbWVudHMgUnVzdCZyc3F1bztzIGZtdDo6RGVidWcgLiBFZGl0IG9uIEdpdEh1YiBQcmV2IC0gU2V0dGluZyB1cCBOZXh0IC0gU21hcnQgcG9pbnRlcnMgUG93ZXJlZCBieSBIdWdvIC4gVGhlbWUgYnkgVGVjaERvYyAuIERlc2lnbmVkIGJ5IFRoaW5nc3ltIC4gSG9tZSBBYm91dCBSaXR1YWwgU2V0dGluZyB1cCBSdW5uaW5nIGdlbmVyYXRvciBSdXN0ICsgUXQgZ3VpZGUgU2V0dGluZyB1cCBHZXR0aW5nIHN0YXJ0ZWQgU21hcnQgcG9pbnRlcnMgVW5zYWZldHkgRGVwbG95bWVudCBQcm9jZXNzaW5nIGEgQysrIGxpYnJhcnkgU2V0dGluZyB1cCBSdW5uaW5nIGdlbmVyYXRvciJ9XSwiZGV0YWlscyI6eyJ1cmwiOiJodHRwczovL3J1c3QtcXQuZ2l0aHViLmlvL3F0L2dldHRpbmdfc3RhcnRlZC8iLCJjb250ZW50VHlwZSI6InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIsInRydW5jYXRlZCI6ZmFsc2V9LCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1MzU2MzcyfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNWQxNzMxMTgiLCJwYXJlbnRJZCI6IjE2MWU3MmRmIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowMjozNi4zNzJaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX1FkcHAwYmtYTVRlazE2elVYbDlScm5zbXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGUxYjNhOGM4MTkxOGQwZmViNTAwYTkwNzVhNSIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IihubyBvdXRwdXQpXG5cbkNvbW1hbmQgZXhpdGVkIHdpdGggY29kZSAxIn1dLCJkZXRhaWxzIjp7fSwiaXNFcnJvciI6dHJ1ZSwidGltZXN0YW1wIjoxNzg0OTk1MzU2MzcyfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZDQ5YzAxY2QiLCJwYXJlbnRJZCI6IjVkMTczMTE4IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowMjozOS42MTRaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGUxZTg5YWM4MTkxOTUyMzQwYWViM2FiNTM0NlwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTjRmMWt1cFhPalRQcU1nVUxaaUVaWXVnYWZzMVN3SmtHV1ZGM21ULTgzMkprbmQwZ3JLdlQtZTB4TUdmTjFYejVjejJDQjlQR2N2c0ZvTjNhcjNxUkQwcWtUa0tqYVdMUHAzcWxSV3Q4dlFmUTA5cXp4Sjc4TlE1YkJoQVNBNDFwbS1zeElYc1FaaWo1THVZM2pLeGUyQWdadlZ1dFFHWlBiYzFucVBodm9GTXk2QWNlazJpZ3JybHpSenlKc21OeDdBSUM3LVhZc3ViVmZsS1FQQUM3a0FHT3N4LXlrMk5Day0zWTBjRWFKc3NycmRKZGtEMkNhbkJvV1V3dWI0Z0o2aUd6aEkzQWQ0a0xaamllTkk5X3RXOTNTOUxIekNLQkZGMXU0T28xc1E5VnBmeGc0eFY0S280NVNLckZieDhULUR5QUg4MVlFTHFCLU5zeW95N3M3cWl4Q3VGMEp5aVhYQVdTNEFCTkt0Ql9CNVZFd2dPa2tHVnF3SFkxLTZfMDhmVGtENjIyTW5kQ042TW8wLTNaR2NacWpYVWNwMF9IREZ6OEVEWGM0cGt1Qnl5blBmWmFDcWFHVmd2blYwLTdDTEcwWXQwdkFFSmNaejVadkdJRm1kVTR5b0VuY0hJSEpoMG8tZXd4azVPSUhvTmhBOXhNNmV4TFlaR044TVJBc3RvSHZrcjEwX1RpalQ1QXF1RVBDM2YweXhGN2wxNnpJMk1GZ2lKa3lpQTBDRW5oVUhuNVJhUmM2M01ySlBSZmJwYTAxWHJzaVRmajBhT0hRR3hWNGRUTHl6anl6RnVrTm5uYktQcElHd1VLcG5kaklLdENfOGZ1VWhOaERaUkJMd2dQaGNPOVp4TUdKbVFRZmZ5TGVoeTN2bEx4UjRLV0RJaTRzeUhYMjdMYTFHX19oajFHaUJkcUNHV3BtOVVlMTFfb3FBWmw1aF9DTW4tSUEtZ0sySUFXVk4tazBlT3hwamxVSllzYWtxdUJVSTdraENsN3hHVzhkX084MFhqOEttcjl1d2lhV0NnWGFEdjRkM3dFTHZDUTJYejd2MHJrSU5vWVc3WUJFMHNYMzN5UkQtMm1NWWZQTS1qMDAzQ2VkSTVuTFk5aGRNRnBWaF9xVkoxelhRYTdNQ3RISXotM3pKa1VHeW41V1ZIcWRwWUl4YXVnUWtZc2psVlFfOFR2NGtIRHMtRDkxVkN5bFQ4YWQwaWdWSjBveThQQ1F0aWh2d3hXZHJnaklBeTlfTkI5dzhPZ183b3djMEJBdWpyVnczR3djRzU5alBrLVlnNVVmX1I3MjZLdz09XCIsXCJzdW1tYXJ5XCI6W119In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfRVV3c2QwWFI3WHZJb3JDUHd2MjhCSkk4fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTFmMWY5ODgxOTFhYTEyMjRiODYzNmU2NmU4IiwibmFtZSI6IndlYl9zZWFyY2giLCJhcmd1bWVudHMiOnsicXVlcnkiOiJnaXRodWIgcnVzdC1xdCBleGFtcGxlcyBiYXNpY19mb3JtIHF0X3dpZGdldHMgU2xvdE5vQXJncyJ9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MTA4OSwib3V0cHV0Ijo0MSwiY2FjaGVSZWFkIjo5MTY0OCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoxMCwidG90YWxUb2tlbnMiOjkyNzc4LCJjb3N0Ijp7ImlucHV0IjowLjAwNTQ0NSwib3V0cHV0IjowLjAwMTIzLCJjYWNoZVJlYWQiOjAuMDQ1ODI0LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNTI0OTl9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTUzNTYzNzUsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTFjYjVlYzgxOTE5NGM1OTcyM2Y5MDM4ZmM0In19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjE0ZWIzYzk5IiwicGFyZW50SWQiOiJkNDljMDFjZCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDI6NDEuMzY0WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9FVXdzZDBYUjdYdklvckNQd3YyOEJKSTh8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlMWYxZjk4ODE5MWFhMTIyNGI4NjM2ZTY2ZTgiLCJ0b29sTmFtZSI6IndlYl9zZWFyY2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIxLiBleGFtcGxlcy93aWRnZXRzL2Jhc2ljX2Zvcm0vc3JjL21haW4ucnMgYXQgbWFzdGVyIMK3IHJ1c3QtcXQgLi4uIC0gR2l0SHViXG5odHRwczovL2dpdGh1Yi5jb20vcnVzdC1xdC9leGFtcGxlcy9ibG9iL21hc3Rlci93aWRnZXRzL2Jhc2ljX2Zvcm0vc3JjL21haW4ucnNcblxuMi4gUnVzdCArIFF0IGV4YW1wbGVzIC0gR2l0SHViXG5odHRwczovL2dpdGh1Yi5jb20vcnVzdC1xdC9leGFtcGxlc1xuXG4zLiBHZXR0aW5nIHN0YXJ0ZWQgLSBSaXR1YWxcbmh0dHBzOi8vcnVzdC1xdC5naXRodWIuaW8vcXQvZ2V0dGluZ19zdGFydGVkL1xuXG40LiBxdF93aWRnZXRzIC0gUnVzdCAtIERvY3MucnNcbmh0dHBzOi8vZG9jcy5ycy9xdF93aWRnZXRzL2xhdGVzdC9xdF93aWRnZXRzL1xuXG41LiBxdF93aWRnZXRzIC0gUnVzdCAtIERvY3MucnNcbmh0dHBzOi8vZG9jcy5ycy9xdF93aWRnZXRzLzAuNC4xL3F0X3dpZGdldHMvaW5kZXguaHRtbCJ9XSwiZGV0YWlscyI6eyJyZXN1bHRzIjpbeyJ0aXRsZSI6ImV4YW1wbGVzL3dpZGdldHMvYmFzaWNfZm9ybS9zcmMvbWFpbi5ycyBhdCBtYXN0ZXIgwrcgcnVzdC1xdCAuLi4gLSBHaXRIdWIiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vcnVzdC1xdC9leGFtcGxlcy9ibG9iL21hc3Rlci93aWRnZXRzL2Jhc2ljX2Zvcm0vc3JjL21haW4ucnMiLCJzbmlwcGV0IjoiIn0seyJ0aXRsZSI6IlJ1c3QgKyBRdCBleGFtcGxlcyAtIEdpdEh1YiIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LXF0L2V4YW1wbGVzIiwic25pcHBldCI6IiJ9LHsidGl0bGUiOiJHZXR0aW5nIHN0YXJ0ZWQgLSBSaXR1YWwiLCJ1cmwiOiJodHRwczovL3J1c3QtcXQuZ2l0aHViLmlvL3F0L2dldHRpbmdfc3RhcnRlZC8iLCJzbmlwcGV0IjoiIn0seyJ0aXRsZSI6InF0X3dpZGdldHMgLSBSdXN0IC0gRG9jcy5ycyIsInVybCI6Imh0dHBzOi8vZG9jcy5ycy9xdF93aWRnZXRzL2xhdGVzdC9xdF93aWRnZXRzLyIsInNuaXBwZXQiOiIifSx7InRpdGxlIjoicXRfd2lkZ2V0cyAtIFJ1c3QgLSBEb2NzLnJzIiwidXJsIjoiaHR0cHM6Ly9kb2NzLnJzL3F0X3dpZGdldHMvMC40LjEvcXRfd2lkZ2V0cy9pbmRleC5odG1sIiwic25pcHBldCI6IiJ9XX0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTUzNjEzNjR9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI0NDI1NWZmYiIsInBhcmVudElkIjoiMTRlYjNjOTkiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjAyOjQ0LjcyMFoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfYVdzaE1DVmxPNEJzaFRMUmVRS2JGeWFDfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTIzZjY0YzgxOTE5NjVjNDQ1MmJhMTczZWI3IiwibmFtZSI6IndlYl9mZXRjaCIsImFyZ3VtZW50cyI6eyJ1cmwiOiJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcnVzdC1xdC9leGFtcGxlcy9tYXN0ZXIvd2lkZ2V0cy9iYXNpY19mb3JtL3NyYy9tYWluLnJzIiwibWF4Q2hhcnMiOjIwMDAwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjEyNjksIm91dHB1dCI6NDAsImNhY2hlUmVhZCI6OTE2NDgsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MCwidG90YWxUb2tlbnMiOjkyOTU3LCJjb3N0Ijp7ImlucHV0IjowLjAwNjM0NTAwMDAwMDAwMDAwMSwib3V0cHV0IjowLjAwMTIwMDAwMDAwMDAwMDAwMDEsImNhY2hlUmVhZCI6MC4wNDU4MjQsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA1MzM2OX19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk5NTM2MTM2NywicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlMjI1YTU4ODE5MWI1ZjNkMmUzOWU3OTY1MzYifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNDQ5NjdlNTMiLCJwYXJlbnRJZCI6IjQ0MjU1ZmZiIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowMjo0NS43MDFaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX2FXc2hNQ1ZsTzRCc2hUTFJlUUtiRnlhQ3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGUyM2Y2NGM4MTkxOTY1YzQ0NTJiYTE3M2ViNyIsInRvb2xOYW1lIjoid2ViX2ZldGNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiU291cmNlOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vcnVzdC1xdC9leGFtcGxlcy9tYXN0ZXIvd2lkZ2V0cy9iYXNpY19mb3JtL3NyYy9tYWluLnJzXG5cbiMhW3dpbmRvd3Nfc3Vic3lzdGVtID0gXCJ3aW5kb3dzXCJdXG5cbnVzZSBjcHBfY29yZTo6e1B0ciwgUmVmLCBTdGF0aWNVcGNhc3R9O1xudXNlIHF0X2NvcmU6Ontxcywgc2xvdCwgQ29udGV4dE1lbnVQb2xpY3ksIFFCb3gsIFFPYmplY3QsIFFQb2ludCwgU2xvdE5vQXJnc307XG51c2UgcXRfd2lkZ2V0czo6e1xuICAgIFFBY3Rpb24sIFFBcHBsaWNhdGlvbiwgUUxpbmVFZGl0LCBRTWVudSwgUU1lc3NhZ2VCb3gsIFFQdXNoQnV0dG9uLCBRVGFibGVXaWRnZXQsXG4gICAgUVRhYmxlV2lkZ2V0SXRlbSwgUVZCb3hMYXlvdXQsIFFXaWRnZXQsIFNsb3RPZlFQb2ludCwgU2xvdE9mUVRhYmxlV2lkZ2V0SXRlbVFUYWJsZVdpZGdldEl0ZW0sXG59O1xudXNlIHN0ZDo6cmM6OlJjO1xuXG5zdHJ1Y3QgRm9ybSB7XG4gICAgd2lkZ2V0OiBRQm94PFFXaWRnZXQ+LFxuICAgIGxpbmVfZWRpdDogUUJveDxRTGluZUVkaXQ+LFxuICAgIGJ1dHRvbjogUUJveDxRUHVzaEJ1dHRvbj4sXG4gICAgdGFibGU6IFFCb3g8UVRhYmxlV2lkZ2V0Pixcbn1cblxuaW1wbCBTdGF0aWNVcGNhc3Q8UU9iamVjdD4gZm9yIEZvcm0ge1xuICAgIHVuc2FmZSBmbiBzdGF0aWNfdXBjYXN0KHB0cjogUHRyPFNlbGY+KSAtPiBQdHI8UU9iamVjdD4ge1xuICAgICAgICBwdHIud2lkZ2V0LmFzX3B0cigpLnN0YXRpY191cGNhc3QoKVxuICAgIH1cbn1cblxuaW1wbCBGb3JtIHtcbiAgICBmbiBuZXcoKSAtPiBSYzxGb3JtPiB7XG4gICAgICAgIHVuc2FmZSB7XG4gICAgICAgICAgICBsZXQgd2lkZ2V0ID0gUVdpZGdldDo6bmV3XzBhKCk7XG4gICAgICAgICAgICBsZXQgbGF5b3V0ID0gUVZCb3hMYXlvdXQ6Om5ld18xYSgmd2lkZ2V0KTtcblxuICAgICAgICAgICAgbGV0IGxpbmVfZWRpdCA9IFFMaW5lRWRpdDo6bmV3KCk7XG4gICAgICAgICAgICBsYXlvdXQuYWRkX3dpZGdldCgmbGluZV9lZGl0KTtcblxuICAgICAgICAgICAgbGV0IGJ1dHRvbiA9IFFQdXNoQnV0dG9uOjpmcm9tX3Ffc3RyaW5nKCZxcyhcIlN0YXJ0XCIpKTtcbiAgICAgICAgICAgIGJ1dHRvbi5zZXRfZW5hYmxlZChmYWxzZSk7XG4gICAgICAgICAgICBsYXlvdXQuYWRkX3dpZGdldCgmYnV0dG9uKTtcblxuICAgICAgICAgICAgbGV0IHRhYmxlID0gUVRhYmxlV2lkZ2V0OjpuZXdfMGEoKTtcbiAgICAgICAgICAgIHRhYmxlLnNldF9jb250ZXh0X21lbnVfcG9saWN5KENvbnRleHRNZW51UG9saWN5OjpDdXN0b21Db250ZXh0TWVudSk7XG4gICAgICAgICAgICB0YWJsZS5zZXRfcm93X2NvdW50KDIpO1xuICAgICAgICAgICAgdGFibGUuc2V0X2NvbHVtbl9jb3VudCgxKTtcblxuICAgICAgICAgICAgbGV0IGl0ZW0xID0gUVRhYmxlV2lkZ2V0SXRlbTo6bmV3KCkuaW50b19wdHIoKTtcbiAgICAgICAgICAgIGl0ZW0xLnNldF90ZXh0KCZxcyhcIkl0ZW0gMVwiKSk7XG4gICAgICAgICAgICB0YWJsZS5zZXRfaXRlbSgwLCAwLCBpdGVtMSk7XG5cbiAgICAgICAgICAgIGxldCBpdGVtMiA9IFFUYWJsZVdpZGdldEl0ZW06Om5ldygpLmludG9fcHRyKCk7XG4gICAgICAgICAgICBpdGVtMi5zZXRfdGV4dCgmcXMoXCJJdGVtIDJcIikpO1xuICAgICAgICAgICAgdGFibGUuc2V0X2l0ZW0oMSwgMCwgaXRlbTIpO1xuXG4gICAgICAgICAgICBsYXlvdXQuaW5zZXJ0X3dpZGdldF8yYSgwLCAmdGFibGUpO1xuXG4gICAgICAgICAgICB3aWRnZXQuc2hvdygpO1xuXG4gICAgICAgICAgICBsZXQgdGhpcyA9IFJjOjpuZXcoU2VsZiB7XG4gICAgICAgICAgICAgICAgd2lkZ2V0LFxuICAgICAgICAgICAgICAgIGJ1dHRvbixcbiAgICAgICAgICAgICAgICBsaW5lX2VkaXQsXG4gICAgICAgICAgICAgICAgdGFibGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICAgICAgdGhpc1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5zYWZlIGZuIGluaXQoc2VsZjogJlJjPFNlbGY+KSB7XG4gICAgICAgIHNlbGYuYnV0dG9uXG4gICAgICAgICAgICAuY2xpY2tlZCgpXG4gICAgICAgICAgICAuY29ubmVjdCgmc2VsZi5zbG90X29uX2J1dHRvbl9jbGlja2VkKCkpO1xuICAgICAgICBzZWxmLmxpbmVfZWRpdFxuICAgICAgICAgICAgLnRleHRfZWRpdGVkKClcbiAgICAgICAgICAgIC5jb25uZWN0KCZzZWxmLnNsb3Rfb25fbGluZV9lZGl0X3RleHRfZWRpdGVkKCkpO1xuICAgICAgICBzZWxmLnRhYmxlXG4gICAgICAgICAgICAuY3VycmVudF9pdGVtX2NoYW5nZWQoKVxuICAgICAgICAgICAgLmNvbm5lY3QoJnNlbGYuc2xvdF9vbl90YWJsZV9jdXJyZW50X2l0ZW1fY2hhbmdlZCgpKTtcbiAgICAgICAgc2VsZi50YWJsZVxuICAgICAgICAgICAgLmN1c3RvbV9jb250ZXh0X21lbnVfcmVxdWVzdGVkKClcbiAgICAgICAgICAgIC5jb25uZWN0KCZzZWxmLnNsb3Rfb25fdGFibGVfY29udGV4dF9tZW51X3JlcXVlc3RlZCgpKTtcbiAgICB9XG5cbiAgICAjW3Nsb3QoU2xvdE5vQXJncyldXG4gICAgdW5zYWZlIGZuIG9uX2xpbmVfZWRpdF90ZXh0X2VkaXRlZChzZWxmOiAmUmM8U2VsZj4pIHtcbiAgICAgICAgc2VsZi5idXR0b24uc2V0X2VuYWJsZWQoIXNlbGYubGluZV9lZGl0LnRleHQoKS5pc19lbXB0eSgpKTtcbiAgICB9XG5cbiAgICAjW3Nsb3QoU2xvdE5vQXJncyldXG4gICAgdW5zYWZlIGZuIG9uX2J1dHRvbl9jbGlja2VkKHNlbGY6ICZSYzxTZWxmPikge1xuICAgICAgICBsZXQgdGV4dCA9IHNlbGYubGluZV9lZGl0LnRleHQoKTtcbiAgICAgICAgUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uX3Ffd2lkZ2V0Ml9xX3N0cmluZyhcbiAgICAgICAgICAgICZzZWxmLndpZGdldCxcbiAgICAgICAgICAgICZxcyhcIkV4YW1wbGVcIiksXG4gICAgICAgICAgICAmcXMoXCJUZXh0OiBcXFwiJTFcXFwiLiBDb25ncmF0dWxhdGlvbnMhXCIpLmFyZ19xX3N0cmluZygmdGV4dCksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgI1tzbG90KFNsb3RPZlFUYWJsZVdpZGdldEl0ZW1RVGFibGVXaWRnZXRJdGVtKV1cbiAgICB1bnNhZmUgZm4gb25fdGFibGVfY3VycmVudF9pdGVtX2NoYW5nZWQoXG4gICAgICAgIHNlbGY6ICZSYzxTZWxmPixcbiAgICAgICAgY3VycmVudDogUHRyPFFUYWJsZVdpZGdldEl0ZW0+LFxuICAgICAgICBwcmV2aW91czogUHRyPFFUYWJsZVdpZGdldEl0ZW0+LFxuICAgICkge1xuICAgICAgICBpZiAhcHJldmlvdXMuaXNfbnVsbCgpIHtcbiAgICAgICAgICAgIGxldCBmb250ID0gcHJldmlvdXMuZm9udCgpO1xuICAgICAgICAgICAgZm9udC5zZXRfYm9sZChmYWxzZSk7XG4gICAgICAgICAgICBwcmV2aW91cy5zZXRfZm9udCgmZm9udCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgIWN1cnJlbnQuaXNfbnVsbCgpIHtcbiAgICAgICAgICAgIGxldCBmb250ID0gY3VycmVudC5mb250KCk7XG4gICAgICAgICAgICBmb250LnNldF9ib2xkKHRydWUpO1xuICAgICAgICAgICAgY3VycmVudC5zZXRfZm9udCgmZm9udCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjW3Nsb3QoU2xvdE9mUVBvaW50KV1cbiAgICB1bnNhZmUgZm4gb25fdGFibGVfY29udGV4dF9tZW51X3JlcXVlc3RlZChzZWxmOiAmUmM8U2VsZj4sIHBvczogUmVmPFFQb2ludD4pIHtcbiAgICAgICAgbGV0IGdsb2JhbF9wb3MgPSBzZWxmLnRhYmxlLnZpZXdwb3J0KCkubWFwX3RvX2dsb2JhbChwb3MpO1xuICAgICAgICBsZXQgbWVudSA9IFFNZW51OjpuZXcoKTtcbiAgICAgICAgbWVudS5hZGRfYWN0aW9uX3Ffc3RyaW5nKCZxcyhcIkZha2UgYWN0aW9uIDFcIikpO1xuICAgICAgICBtZW51LmFkZF9hY3Rpb25fcV9zdHJpbmcoJnFzKFwiRmFrZSBhY3Rpb24gMlwiKSk7XG5cbiAgICAgICAgbGV0IGFjdGlvbjMgPSBRQWN0aW9uOjpmcm9tX3Ffc3RyaW5nKCZxcyhcIlJlYWwgYWN0aW9uXCIpKTtcbiAgICAgICAgbWVudS5hZGRfYWN0aW9uKCZhY3Rpb24zKTtcblxuICAgICAgICBsZXQgYWN0aW9uID0gbWVudS5leGVjXzFhX211dCgmZ2xvYmFsX3Bvcyk7XG4gICAgICAgIGxldCBtZXNzYWdlID0gaWYgYWN0aW9uLmlzX251bGwoKSB7XG4gICAgICAgICAgICBcIk5vIGFjdGlvbiBzZWxlY3RlZCFcIi50b19zdHJpbmcoKVxuICAgICAgICB9IGVsc2UgaWYgYWN0aW9uLmFzX3Jhd19wdHIoKSA9PSBhY3Rpb24zLmFzX3Jhd19wdHIoKSB7XG4gICAgICAgICAgICBcIlJlYWwgYWN0aW9uIHNlbGVjdGVkIVwiLnRvX3N0cmluZygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQhKFwiRmFrZSBhY3Rpb24gc2VsZWN0ZWQgKHt9KVwiLCBhY3Rpb24udGV4dCgpLnRvX3N0ZF9zdHJpbmcoKSlcbiAgICAgICAgfTtcbiAgICAgICAgUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uX3Ffd2lkZ2V0Ml9xX3N0cmluZygmc2VsZi53aWRnZXQsICZxcyhcIkV4YW1wbGVcIiksICZxcyhtZXNzYWdlKSk7XG4gICAgfVxufVxuXG5mbiBtYWluKCkge1xuICAgIFFBcHBsaWNhdGlvbjo6aW5pdCh8X3wgdW5zYWZlIHtcbiAgICAgICAgbGV0IF9mb3JtID0gRm9ybTo6bmV3KCk7XG4gICAgICAgIFFBcHBsaWNhdGlvbjo6ZXhlYygpXG4gICAgfSlcbn0ifV0sImRldGFpbHMiOnsidXJsIjoiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3J1c3QtcXQvZXhhbXBsZXMvbWFzdGVyL3dpZGdldHMvYmFzaWNfZm9ybS9zcmMvbWFpbi5ycyIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInRydW5jYXRlZCI6ZmFsc2V9LCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1MzY1NzAxfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMGZmZGFmNTgiLCJwYXJlbnRJZCI6IjQ0OTY3ZTUzIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowMzoxMS45NjRaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlBsYW5uaW5nIFJ1c3QgcG9ydCB3aXRoIFF0IHNsb3RzKipcblxuKipBc3Nlc3NpbmcgUXQgd2lkZ2V0IG93bmVyc2hpcCBhbmQgZGlhbG9ncyoqXG5cbioqRGVzaWduaW5nIHNsb3QgY2xvc3VyZXMgd2l0aCBSYyBhbmQgV2VhayoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlMjg4MzBjODE5MWEwNjViMjg2NDY5Yzk0NDRcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk40X2t3X3JuU0VHbGZQc1ZVU3VlSjF6OXkybXgzNlFGSWc5NnZEa2JFVEgyRlRJbjQzaHRZb0IySW5UNi1GYWVsQVBlRkpieGNWdVZtRnRCc3hNTzQtWDNvQi1zenNPY0liRUpVZENfX21OOGd4cENvQkVKREtnZTZVMjcwWlpza0d2ZjFaemRlRmdPcnhmUnBWMjl4NE0tLVlzRmROX2VMUnhFRERCWXZlNVItWWRXOXBEc2JGVUJjV01sTi1odEZRTDd3N3ZWS0xoWDVCR3A2ZnMyYzBud0laQ3V5Smd0NWJDck96bVNPTXFMZEZGZXNFVXFtVHFOZ0JGdVYtb1VBdWx0anJ5QVBZcUUzLVN5MV9CQ3h3VTFiZi1FT0dZSlotZ1p2WWczLXZQZXNOV2dzWHlEZ2hOY0lBRHhQTmRFYjNoR21yXzJsNmpQd25VaEJRSHZVUVVJTUxnRzliWHZCS01ZN2J6X1RobXJ2bVg0SlNiejhROVNmQUNZRkpCUzZucTJ4MjJCQkM1VGZEZVYyYllwQ01JVWxvMTJmeEgtTGw1dy1uM3FUblV6a1lRMmJGYlFvMU9FUlZrOGVPUkpjdDlJTW1PczhhU2NNWjY1bXpVNVhuNUNkdTZUTTlQYXNCS09sTWJCSEJZMDJyU0VMTzhuNWdadFBnZG5tX01WZnVLZ2h2aHdhMGs2VmNid0MtUXFBRHgzcG9VakJGaEZOV1VVejJtVHlQbE8wZ1ZpQ1RtV2JDRG1CSktOa0JIeG5mMnZoWGc1cWtqUlQ1VmRHSjROd0VnMlAzaTlRUjFwTjAyeGxTb2xmX0dFSWRscHRmQWVVSUZZR25xZHpGRUJWaTJ5Nm9lTFV4NTlYbmNUeWpCSnZzcENzcTU2azdyMnVMWkZnRDRGS0dYRFNybVZ0aGQ4elVLekxFUzJjSlFQNVNTam51QTh5MzA4ZEF3S1ZmLWM4Z0pTalg0WVhmc3pHM2poQ25jRE5FdS1TQ2MtNDJGbGo2QUZickt4Z0l2Z0o2RzdjWGUwY0hnRTh4OWdIZ09fSk5mcUpqX0d1X3VuSUE2RktQRUljWUM3UktlZ0FGa2ZWQ1R1dDFKUjRLRG94ZlBSUXk4c1RYanVVVmJ6X0RRTDVhQ0dQQloyRWxxZm5pT2ZRNkZqSWs0d0VaU2p1QnZGRkJJclBhQ05XN2Rra1lLdGJZbHJtZ3QyX1JfN28wM3l5SnNSZHAzWjRwZkMyYU9CaFZNbkZsdXQ3NV8xR29LX0pTVm1NYjE4bHRrN1NMWkhHZWtvM19Cd0tNem1KOWpFZFREV29fcGszMGpzMHhqVVBnTjdUZ3hsUGtBNFQ4YnJFanpfdDR6ckcwbEFMbWlMVm5VV1JyOUphNklMZ2cwUG5pcGNySWhBcTZIYnRQQWlVdlRGaXpUX1pYVUkxNGt6LWlETWZtSlRFb29PTHp6c29Rb2ZYcjFyRmxfRXcwZGFDZ2ZCeW8yZVNqSGYtMldBSUluVGpfT1daejMzTmJIX0VfN05MVFZNY1hLODNRWnVEaDFTakpTU3pSSGtiSEpIeGFwckM5M3VUcWctdkFBVHVtZzY2dEtWQm9JaHhsY09WYmJSOS01dmNFeDl3VldiUFhFdHdYZ2ZKaGhRQ2NQaTlMUG5vcGVjUzBxdmZtZ0tPdVFlWFFZbEJkUGNhcVZPNm5ZQkJHeURvajB3QzlJbXU2UzlaOEpvbDJhSlNVVExXdTRnMkQ4VWFUQ2xxek1LS0RsejU0Q2h3eFV4Q2laaDFib1B3TDRQRk50a3VYZVJLeVR2UUZWTjZHNnE4Q0htX1psWXRXajJQckxRdUEyTGNRQUM4OFFqRXpfY2wwSFg2RXByOEJLVzRxRHZPWXNFZ1ZiSlI5dXRveTQtVG5RdUNDNzd5X1hpUFg5WUZYUXkwWGxKRXlaMWNBUnF5ZGdmSGNEYWhwSmlRWVQxc19XbXhhUjNZZHg4Tk0yYkVaY29tQVBCTUpaeGFxMDRwNndVRk5mdlJvNGpqcHp3c1BCR2xGQkY5T1BUT3hNTEFNa051M3ZucEVMU0J3bm9aZlNYSGxDbTQyVjlLR01iUmtvdjNiLWxmQ0hvNFR1ZVd6V184Vk13M3VIOXhTUzZrREk5UUZOclJCMDNfUUVyR1pZbWFrS29XMVFyak9Vdkxfa0p0ZlJDV3FFUGR2akNDSkgyMXJiQXVESTlhTDducy0xWkVDZ1RJOXNfbUlfN3NYSjZ3VURiY0duXzZuV3FFcllISWY1TXZGakdqcEh4ZHIwOWhqWDFLQzNMNGkwalFhZXk1cm5sQmZ5R1k2a19iYkltbFgxM2t1X0x2UFFhZHFiRzhLNG9FZnR5eHR0X3YzUXhUM09CVG9qNkJ3TzNzRXh0Q25HTl9TcHVWOWl6WGRWVjVNeG1rdTZfaDZZbk02dWpIYVUweUR1Skc0M3BzUkktblh2ZzQwUFYzQjIxZFlFV3ZKMEJUODlCN0RxM3AtMUl3UVBJaDdnc2VfcV9nVkhwZGdkRktMcURhbnZBcERJR2tlUmFBVk9oRjVvYmotNDFoYmdWMjJoOGxCdTYzY0tQOEo4UVRTT2tPZEFkUzB3WXh4VjUyS1JxY2cyQ1pLbW12cW9PeGZqRmI5YVlWX3MyM3V1WFRiSmgxNWNncjY3SUZjSU9HSWU2c1oxQk1lMGE1ODJwYWt0bjRPSUNPX2NMdXYzV1BCTTNlRnYzOHM0U2JROU91TmtZd2c2MVRobXUyenBzM21veXdGalNCUENaNmkwRW9lUGp5UUE0b0xTYlBfbWl6dTBUZU9kVUliS0tzLTh2VC05eC1uWURkU1U5dV8zYWV6eGkxWEI3dlRhdjh1UlljLW1ydXJudEpQZ0NEalgzaVJIcjN4MHBiQlp6emdEeWNFSmhhLTJCbmFLNTdUbFB2S1RFSEo3T3U2My1QYWxzLU02SW9LejJaa3Nmb0ltZG5wSDl4OXhHemk5SHZhUEFVbW1MQi1UWWVveXprOGtNd2pGTzg3SUl5alJVeVlybWNCQWVFUTRjdkhROXlZd1R3MXRVdkVJbTRweG13NFJZOFhkdkRIRlRja0IzalZpdUc1WU0wdzFsaHE2eVJZbF9aT2tiYS1YSlN2MzdCUXdkNDhBd2tIUUZYcVdJMGppMUpzaktWZFhIRVRNYW8zNWg5Z2ZVSkN2WnRKYXFHcEhqNTZjeWtzbXkxWHRwUm5zQXRBMWRnRWxsRWNzNHBoVS1CNFIzRDhBWlJzUTZkdzAtZXRVbG1pcmhOb05OcXpRYTRYTjRoek9NcGMwcmRZTkJlRDhhM3dic0VCZ1h4UmhsQnI3TUtrb1MyZkhiQXdUYWFPdGlfWmlYVEFQTEUxWUhRRlFFTmJ3aXgzSzFaeldRNWFHNHMwWi1FdWM2aXZoUlM2UXBjbGxXLXFBeVA1Z2VKSVo1bzRlM3FZMHlZU19iQWZ2UjcxSEt3a0R6dnNjTWlPbG4yb2NLV2pVWHV1dW9td2lLRXFYYkRZNENiMmlTZFhoVW4wTDlQWUZWZ3Y2U0tzWnZxWVVjMjJDeHZLdmlDa0JYeldGTVNiNlRtbVZxdlJVdVlwNExjUEFnQ1AyVDBYS3c2c2FsSHFtbkVZUjJJWjQxODRLbGl0bXpZaDYxbUkwT18tYXBxckE0dnF6YVlwdjc2eHBYNnBoS1BYNV9pTTB2a1dUX2dFWXpOVE03RXliQzd1VWp2V2pRbkNLSmgtZUZIRFAzQTF4NjhmcHFHcFJueFRvTU02dm5SUkNvMlJPUkhPVm9aV1dIRmppajFyYXQ4enBBaTdOSVhfR1UxU1hJbUEtM2lnajl4QUY5OVU4Ty0zQXdEQlNaZFU0TXFIZ0Y2LXVzWF84S0N6dzhQZDk0VG1tcjB3VkEteDc3Yi1oVnFOTHlVaXgwVzBTTDJZOEEtUE0tZVJjVnI4YzVtNDZJMjhwa2tCbGVVekl5djY3ejdPYllHQW1fbU92aUFwLTNlY0lkRUFKbHNxTWdoQzlidVBBcFBrdFJUMXMwc01VTG0wb3RJZUFfeHNyZHV3bmdlUExzVjNhVGZKVXZidVBtWng3SnZXVlFJMEd4UEZhcXQ1R2VoY2ZYQWZCTjVWMEpHS0hnUXltTHVpVWNJYWJsLXVWZEVjU0NJNUFITlA5dmZYUEFsdWkyVi1uOEJQZkttTWVENE9xNnBQOWdaWUp2WVFfVk5OQzRiUUpGMWhPRlBteExnSHk1NDN5ZGNUVk4wRy12S1JQVDBuS1BRZk5zallBd1NXUVNZLUtfSG8xemtCQ1AwdzhMbXExN2NBRWhoemF2X1luNnZzVnVnNzRQa1NyZUlWcnJwbGZBQ3k3a1NjR0MxYnhPMW1aMWxiN2p1d3BhdnItVF9lbjR4ZmlIMU5SSWhJaUVIM2FvSVN0NldRQzlndXNQMzlaVWdLdEsweFJMV2l2NDBmV05YbjhXNzN0bkNZWm1qblV4eXhHX3FjZ3BqREdwUFk2MTB3bFdLcW5GaVhtUGpHOEw1UkZOSkN0aWdha25iTXFDU1hqbFduYkMyVW1vbHNGamlveVFtNy0xM1dyY004aHJIRHZGUjFCd3Y0S2NQczZ0NWo5RDdXbFgxal9xLWlMQ3hNTlp4VTZhMUZocWRnRGpVem0zNHBRZzlGcDhvUGhremVHbi1YX2swSXNCLXlOaC15MmpXeHQwVVlneWVhbGVlRmdfNFRGMFM0cVFfNGFURVRtUVJ1R1lScjZvMjVmcy1Wa3FSakkwMjNpd0hPc0RNS2FEdjFpblVPU3FpVm9jZXpoNS15T2tMZlNyUEo4Rll5NHBtWXh1amk4MGtBbjNOT0JSRXZzMm5OeGNWbE9rMndYaFk4SkNTc1AwY2FiQ0VldEE1S0lMWkNET1B1WE5IbVNxU2dLNi1GM1c3MF9rUGhLRXZHZVFabHVpOHFNbXA5djQtMVVmdEhuWXJCdWFhMVYtVXMtTVdhV2pvX0M2Z3QwQlNJUWVQQUR2ekdDN1c4bDVHc2hUSWNmR0ltNnlTZzRGTjZubkZRYzlmV1VuY1RBcnN4QkxfMHUzcE1GNGZxWU1aVmd3UjR5YlZwTTBJSjFqdXZqTXFDSVJYaDN4OUdDbzRxSFhsN2g2b29GVGM1ZjRMUUp5d1VaSlBrU3lHUkhwUnZ0RVFDRV9xX0xLaVpUdkotM1hLdzk2N0lWMkFKS05uV2xMOVhKbEswRTV5OEl2d0FqbHl6QUhUVU0xQ2ZRcjJTcUh0ekRsbDJPaU83UnQ5azdNVHQtWDFxT0VDcWVVcXlsYUtlbjlLT2JHdXVzU08xTzZyMWZ4M3ZLYnF4R0ZydDlsYjB6bDVXcmZ5LVpGaTJDQ2VLVnZPTU5ObjZGTlZIYlhIVW53cTJYcGtJSkdSSGRCRmhxQUk2eXU4Y2R4d3o1V1lKS3ZZd0ozenNZYS03UUtYZFBDTTZ4RVhoSzAtTXk2bnVqX3FHc0N2U0MzajNpbkh1MklLekUtR3hhdGY0ckpEUGtCYW5yR290TXE3Z0dDS3VZa0tjRlFnR3kyN1M1Ni1yWW9RcWhyNWhnMDVueC1mUENvTTNORkZpYVZ4UT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlBsYW5uaW5nIFJ1c3QgcG9ydCB3aXRoIFF0IHNsb3RzKipcIn0se1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkFzc2Vzc2luZyBRdCB3aWRnZXQgb3duZXJzaGlwIGFuZCBkaWFsb2dzKipcIn0se1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkRlc2lnbmluZyBzbG90IGNsb3N1cmVzIHdpdGggUmMgYW5kIFdlYWsqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfYlhRbWZ6OFhlSWJzaDNGbUE0MTJPSkZ1fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTNmZDAzYzgxOTFiMGJjZmExMjZiOWZjMjI0IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6InJnICdwdWIgdW5zYWZlIGZuIGdldF9vcGVuX2ZpbGVfbmFtZXxwdWIgdW5zYWZlIGZuIGdldF9zYXZlX2ZpbGVfbmFtZXxwdWIgdW5zYWZlIGZuIGdldF9pdGVtJyB+Ly5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvKi9xdF93aWRnZXRzLTAuNS4wL3NyYy9mZmkuaW4ucnMgfCBoZWFkIC0zMCJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9NUzVMN1A4U3NQZkY1bVFzaDNjMnVDczh8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlM2ZkMGNjODE5MWE4Mzg1YmZkN2YwZjg2N2YiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoicmcgJ3B1YiB1bnNhZmUgZm4gKGFkZF9yb3d8YWRkX3dpZGdldHxhZGRfbGF5b3V0fHNldF93aWRnZXR8c2V0X2NlbnRyYWxfd2lkZ2V0fHNldF93aW5kb3dfdGl0bGV8c2V0X3BsYWNlaG9sZGVyX3RleHR8c2V0X2NsZWFyX2J1dHRvbl9lbmFibGVkKScgfi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjLyovcXRfd2lkZ2V0cy0wLjUuMC9zcmMvZmZpLmluLnJzIHwgaGVhZCAtODAifX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfeWxlTmZNcjVURDdHQWhKcGhzdjBFZTJnfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTNmZDBkODgxOTE4ODVjZWMwN2Y3ODRjMTM2IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6InJnICdwdWIgdW5zYWZlIGZuIChuZXdfMGF8bmV3XzFhfGZyb21fcV9zdHJpbmd8ZXhlY3xzbG90X2FjY2VwdHxjdXJyZW50X2l0ZW18c2V0X2hlYWRlcl9oaWRkZW58YWRkX3RvcF9sZXZlbF9pdGVtfGFkZF9jaGlsZCknIH4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy8qL3F0X3dpZGdldHMtMC41LjAvc3JjL2ZmaS5pbi5ycyB8IGhlYWQgLTgwIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoxMzM3LCJvdXRwdXQiOjc0MSwiY2FjaGVSZWFkIjo5MjY3MiwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjo0OTksInRvdGFsVG9rZW5zIjo5NDc1MCwiY29zdCI6eyJpbnB1dCI6MC4wMDY2ODUwMDAwMDAwMDAwMDEsIm91dHB1dCI6MC4wMjIyMywiY2FjaGVSZWFkIjowLjA0NjMzNTk5OTk5OTk5OTk5NSwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDc1MjUxfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1MzY1NzA0LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGUyNjBlZGM4MTkxOTFiNWNjODE4MDdkNmIwNiJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIwM2FhODQ5NSIsInBhcmVudElkIjoiMGZmZGFmNTgiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjAzOjExLjk5MFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfYlhRbWZ6OFhlSWJzaDNGbUE0MTJPSkZ1fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTNmZDAzYzgxOTFiMGJjZmExMjZiOWZjMjI0IiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiKG5vIG91dHB1dCkifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTUzOTE5OTB9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI0YmQ2NjUxZiIsInBhcmVudElkIjoiMDNhYTg0OTUiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjAzOjExLjk5MFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfTVM1TDdQOFNzUGZGNW1Rc2gzYzJ1Q3M4fGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTNmZDBjYzgxOTFhODM4NWJmZDdmMGY4NjdmIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiKG5vIG91dHB1dCkifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTUzOTE5OTB9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI1ODhjNDJiMSIsInBhcmVudElkIjoiNGJkNjY1MWYiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjAzOjExLjk5MFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfeWxlTmZNcjVURDdHQWhKcGhzdjBFZTJnfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTNmZDBkODgxOTE4ODVjZWMwN2Y3ODRjMTM2IiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiKG5vIG91dHB1dCkifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTUzOTE5OTB9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4NmM1ODlmMSIsInBhcmVudElkIjoiNTg4YzQyYjEiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjAzOjExLjk5MFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiaSdtIG9rYXkgaWYgYysrIGlzIGluIGRlcGVuZGVuY2llcywgaSBkb24ndCB3YW50IGMrKyBpbiBNWSBwYXJ0IG9mIHByb2plY3QifV0sInRpbWVzdGFtcCI6MTc4NDk5NTM4ODgzMH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImI3ZDhlMzBhIiwicGFyZW50SWQiOiI4NmM1ODlmMSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDM6MTguNDg4WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipJbnNwZWN0aW5nIGdlbmVyYXRlZCBGRkkgbW9kdWxlcyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlNDNhNDE4ODE5MWI5NTQzZGJiZTNmZmVlZTlcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk41RUlxcjAwV3pjZFpzUGU1QnNLckt3T0dodjRNWVRHTTJHdWtnTndaUnF3V3lQZFUtZmFOVUhsOUh4cjgzTXlkNjJ0dmFaaHNGVFNpaVBXZklKYVUxbmFZdmJyc1dJY3ZQZ3lmamUxMGYxdmsxQnZBX1FuZk5KM0lJSEpTX1BUQkp6Y0RVSk16MWRCeU55cUVTemIzT3UxYUV5R2hsclVJSGkzRlJHR2FIb2JCSktvNVA5VUtHS29wYi1GNU4yeUZGaVFHQ25XaW9ZaG1xa21NVGhmVTB4UV9kNWJxY1JNM2xwYWQ5UkFZQURoZnB5MGx4Q1NDQkhKWDNPdkJGeHF1Z000TlVISWVEaWZBUWl3MXB2eU0wUWlRME1Rd3cxcmlQdGEyNFlLLV9HVkpRYVJ0Q0FnZUkydkxUWjRydW8telAzcFNVS0pUajNENGhNcmh4UnctSEVaajczT3NET0JwSWg1M05SVTczZ2FjbERXbGVWMkpXR2RKWUhubl9ZaGFTSVo2OERiT0ZNUXBkNnl6UnJtbS1NWDMtanhrZEhjekhmaWZJZktMUDZKeHB3TzZnbTJoYVJVZXlLZ21OMjF0NmtyWnJZQ1VPRVdNOWFnZGdvXy1GT3RwdjdtRi16UWc3Q2pvQ0xUVk0yZGVtUzNVZkdwb2FYbWdFNzc3cWp5Tm9Ec3RQS3QtVWNVNUhZTXFES2JQeEZfeFNDaXBrakcyNld3ZUJlckxXaDU3d1RQOC1oZHVaWU05aWR2T2lneTNvNlVFU1BZR05ySDFxUmxtYVZIc3hCZkFxWUE0dE40UmdkcjJyWDBWNndTQVFucEZFRjI2N2RjYzZJMTdUcTU1WV9MbWFEUHlwZXkzWG5iTGZ6c09acEdmT01YNWtnaFdlM3Q3d3BuVWkyLU9GQkFUemdSdmthN3lUM1hTNWtldGZ6cGJOS2F5R2t3SVg2d1dkTmljb1VNM0plN21YV1pwTmpTT0dQWXBXTkxkbzdXQzNjaHZPQmk3YTFZZG56bjhBV1pYLXVRd2NrYkUwLUNjX21TV085Q19hTVJabGd6QzVTRURJeGFCYXFKMVJJR0lVMVBjV2JTZ3RfdHVmWjVwR3hTMmtQZ183dXBtOS1ZZXc0UHJmanZwNlNaTXN0b2hDOXhHQ1JZWjY3QWNuWHB1cVVYeE9BSDVYU2Y4VlllUDlzay10Ym5NM2NsOEFVa1EtaXJseWxCdTl0Z3lDN0Y4dXA4a2NtdUhxOVBIQ3ZZN0I4U0dybGdLM3pFLXdOSURXcktDQkxBZVg4ZnZ3UktJN29ySzc2ZGgzOVZJQm5UV1RTYnhKdW1GNEJibzQzWmJJUjVoQWZSOVFaUEcxZElkTk54VlVSMmg2Q1N5SlJUMDU5b2tFaDMzRUFUcTY5d3pJQjNUNXlCbllMNjZ5dzVDVWp5dVlGUU5VaEpwZWp0Qm5kNkdRblMxV0NmaktmT3hBYmtHd3ZCRERFa295WWtNc3RGTUdhMDdRQVh3RT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkluc3BlY3RpbmcgZ2VuZXJhdGVkIEZGSSBtb2R1bGVzKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsXzg1N0JIZzl3TjAzSEpqWDNzUWtpY1F2N3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU0NGUwNDA4MTkxOGUyM2Q4ZDUyMTgyM2MyNyIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJncmVwIC1uICdzdHJ1Y3QgUUZpbGVEaWFsb2dcXHxpbXBsIFFGaWxlRGlhbG9nXFx8Z2V0X29wZW5fZmlsZScgfi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjLyovcXRfd2lkZ2V0cy0wLjUuMC9zcmMvZmZpLmluLnJzIHwgaGVhZDsgd2MgLWwgfi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjLyovcXRfd2lkZ2V0cy0wLjUuMC9zcmMvZmZpLmluLnJzOyBmaW5kIHRhcmdldC9kZWJ1Zy9idWlsZC9xdF93aWRnZXRzLSogLW5hbWUgZmZpLnJzIC1vIC1uYW1lIGdlbmVyYXRlZC5ycyB8IGhlYWQifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjExMTYsIm91dHB1dCI6MTQ2LCJjYWNoZVJlYWQiOjkzNjk2LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjM2LCJ0b3RhbFRva2VucyI6OTQ5NTgsImNvc3QiOnsiaW5wdXQiOjAuMDA1NTgwMDAwMDAwMDAwMDAxLCJvdXRwdXQiOjAuMDA0MzgsImNhY2hlUmVhZCI6MC4wNDY4NDgsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA1NjgwOH19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk5NTM5MTk5NCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlNDA3YzE0ODE5MWIwZTc2ZTFmZDgzMzZmNzUifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiY2QzNGNhZTMiLCJwYXJlbnRJZCI6ImI3ZDhlMzBhIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowMzoxOC41MTBaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsXzg1N0JIZzl3TjAzSEpqWDNzUWtpY1F2N3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU0NGUwNDA4MTkxOGUyM2Q4ZDUyMTgyM2MyNyIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IjExNzk5NiAvaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0X3dpZGdldHMtMC41LjAvc3JjL2ZmaS5pbi5yc1xuZmluZDog4oCYdGFyZ2V0L2RlYnVnL2J1aWxkL3F0X3dpZGdldHMtKuKAmTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1Mzk4NTEwfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZWM3MTFlNzgiLCJwYXJlbnRJZCI6ImNkMzRjYWUzIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowMzoyMy4xNjRaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU0OTUxMTA4MTkxYjE4ZjdmZThjM2NhNDEwOVwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTjVKUXpfR0ZvY2R0bklkQm5acjU5NV96eUNvd2UyLUlPNmRONlAtRFFlc3l1c0g5V0VXX1RjVkJBdTREZFE1T1pQNkpDcnhYNlAxVWhKekhweWNZNkw2YXl1Z1RoR3BFRTBTZ2VyTUlSdHVxOW9aV1lGTEVOQWdzOG1fUEdvS2thX04wY1VrQnRNWlNrY3JEd016MnR0amxZVExlUmQ5OVZ3cFYxYmVIZ0p0Q2JoaEo3QXh6dkZSZlhsemt0dlVJQUxLbXAzM0ZSd1c5UEVTOTlOblFoTXdYNDZPcXhBOEpfcXc0aXJsaHpRaWZzNnNpRC1hZkJaMFZEdTZJYkRDZTYxcDB4ODhLUnNJY2dnMlhOaVRmOXR5U05XYkdyLVFURi1ia2tUcmZvZUw2Smt3bjQ3dzRWYTFqdDJlaGNjb3ItekdJNld5ZXJiX0pmejlQdE1mWEJvZ3NDMUo5TkdDVzFTN1dGUVBYcWR1TFBXd0hub2NhLTdsX1c0b2x1bnUzamZ3NlJzMkFkaEQ4M3NVakpuczFBdEdmMVZSNkxSX29CbEUtSGQtMUY5VUhxaTRaSW1wa2VxR0FYMDhaUk9HUHluMVR0Nm5XTkc2bC1aWGhpTHFxUHVsWmpoRURFc2plMkNzMnlRYTNvU2NOWFBjRFdISXBjY29Xa3hucFZXdG5zVEF3MFhiQl9jdzUxUndqMkhsbDVJM2x4NG5jd3RNUDNzRWdJM3N5T0FwUzFHZS1VMlBlQUJSUWtsUXhQeWpXLXNGY0pmdlhoa2VWTDRoRklzZDVCQVRZVDIwUzRrazR2QnAxWjYtVlRaWGxlSlpfa1Rrby16S1g2QXFUdjlRMG5nTllpREpJVFpxb01WNFhtQ2Vac1RGNHprWlFNUEF4dy15dmEtRmNPRTh2T3hOWExwSWZZTzJrOXRVQk1BVFBsZUdpbXVWMVZVdEFLU2lnVlNEYktnUHVETXJ2a1JnQlJsSWRVSF9aQzBiaW9Hck1SYjNmb0d4NXVPYXh4WUlCUno2dDNzZU0xVVBpMlRuQlVNWDRRWThhSUxuVWVOZGxaY0o2Y1dQeFM0XzB4MDZYdFREUnU0QzhsUk5meG5BWEdiUmpFQUZhSmhQYU5FUHBMM1BuMWVRN1RSS1k4bHl2dVlXbk5KV3VqZHk2TTN0N1p2Mnhnd29mXy1EQmxkZnh0bDRrUWJsS1Fwa0N5cW9zbzNKd1VWajFyOXl0TWtHdllWaFVveG9nR2RXWkU1aVJ3ZUFqcWprS2w4NzB0bm1tYnFsc1dac3FER1k1VG45endnZVpMSHVxQT09XCIsXCJzdW1tYXJ5XCI6W119In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfdXNxT2IzbmlYOHZnU09mcHZKVnNkczhYfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTQ5Y2YwYzgxOTFhZjc0MTAyOGVmOGY1NjE2IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6InJnICdnZXRfb3Blbl9maWxlJyB+Ly5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvKi9xdF93aWRnZXRzLTAuNS4wL3NyYy9mZmkuaW4ucnMgfCBoZWFkOyByZyAnUUZpbGVEaWFsb2cnIH4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy8qL3F0X3dpZGdldHMtMC41LjAvc3JjL2ZmaS5pbi5ycyB8IGhlYWQifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjMxMiwib3V0cHV0Ijo5MywiY2FjaGVSZWFkIjo5NDcyMCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoxMSwidG90YWxUb2tlbnMiOjk1MTI1LCJjb3N0Ijp7ImlucHV0IjowLjAwMTU2MDAwMDAwMDAwMDAwMDIsIm91dHB1dCI6MC4wMDI3OSwiY2FjaGVSZWFkIjowLjA0NzM2LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNTE3MX19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk5NTM5ODUxMywicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlNDZkYzk4ODE5MTk4YjEzMzVjOTNmMjg1OWEifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYTE2MzAxMDEiLCJwYXJlbnRJZCI6ImVjNzExZTc4IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowMzoyMy4xNzVaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX3VzcU9iM25pWDh2Z1NPZnB2SlZzZHM4WHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU0OWNmMGM4MTkxYWY3NDEwMjhlZjhmNTYxNiIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiAgICBwdWIgZm4gY3RyX3F0X3dpZGdldHNfZmZpX1FGaWxlRGlhbG9nX3N0YXRpY01ldGFPYmplY3QoKSAtPiAqY29uc3QgOjpxdF9jb3JlOjpRTWV0YU9iamVjdDtcbiAgICAvLy8gPHA+UXQgdXNlcyB0aGlzIHZhbHVlIGludGVybmFsbHksIGUuZy4gaW4gPGEgaHJlZj1cImh0dHA6Ly9kb2MucXQuaW8vcXQtNS9xZmlsZWRpYWxvZy5odG1sXCI+UUZpbGVEaWFsb2c8L2E+LjwvcD5cbiAgICAvLy8gPHA+UXQgdXNlcyB0aGlzIHZhbHVlIGludGVybmFsbHksIGUuZy4gaW4gPGEgaHJlZj1cImh0dHA6Ly9kb2MucXQuaW8vcXQtNS9xZmlsZWRpYWxvZy5odG1sXCI+UUZpbGVEaWFsb2c8L2E+LjwvcD5cbiAgICBwdWIgZm4gY3RyX3F0X3dpZGdldHNfZmZpX1FGaWxlRGlhbG9nX21ldGFPYmplY3QoXG4gICAgICAgIHRoaXNfcHRyOiAqY29uc3QgY3JhdGU6OlFGaWxlRGlhbG9nLFxuICAgIHB1YiBmbiBjdHJfcXRfd2lkZ2V0c19mZmlfUUZpbGVEaWFsb2dfcXRfbWV0YWNhc3QoXG4gICAgICAgIHRoaXNfcHRyOiAqbXV0IGNyYXRlOjpRRmlsZURpYWxvZyxcbiAgICBwdWIgZm4gY3RyX3F0X3dpZGdldHNfZmZpX1FGaWxlRGlhbG9nX3F0X21ldGFjYWxsKFxuICAgICAgICB0aGlzX3B0cjogKm11dCBjcmF0ZTo6UUZpbGVEaWFsb2csXG4gICAgcHViIGZuIGN0cl9xdF93aWRnZXRzX2ZmaV9RRmlsZURpYWxvZ190cihcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk5NTQwMzE3NX19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImRjMmUwNmFiIiwicGFyZW50SWQiOiJhMTYzMDEwMSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDM6MjYuNDI4WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipTZWFyY2hpbmcgZm9yIGdldE9wZW5GaWxlTmFtZSBmdW5jdGlvbioqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlNGNmMDUwODE5MWIzYjA5Yzg2YjEwMjRjNjNcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk41TmdPZ2c2elp5NlRPWmZGLTlaakFmVklkZ0NUMHhienZEQjdaUy1nb3dXUWFuZHJkVlJmcE5vejg0cXlYVWg3MmVpRjhCbUtKZUJpdHZqY1VoMHNma3k1QU5BQnpva1ZLOHcwVktBZGpKVzRTLUcwNFZVSDZzckloVUREMUUxVmxlVkRGUEx6a0g2QUFfMzBXdnhSSVRuRzhWaC1SNDZmWDBQdkh4RzFYNXlaTzFjNG9wYjg4NDVqYUhiX2lnUm8zYlZ1NHFNQ2xHSEJRSkxiNWFHbmFJYTVmaDVqXzY1b2RqalBNR3piV0xSQ28yZmd6RnMxWk9QYkxfa1BiNHZMOHlVUXNyckpZTUwyR3BlSEpPMHFjN1B4UFlfX09IV25sX015cjF6S2pjZEdkS29zQmxmMGQyaDE5VV91djdEU01xdEZla04xT09tWjB0MUU3Znd4NEd1TV9seW5jbG4xMzJsOW1rR0Y0YUQxa19TTmlWZW9NaVpfODZJaXpOQ2pPLTM4eFpyVFRsXy1mUlZVT0htb1JIdGF2Yy02MXUxVlpiaHBsQVd6QW9QeV9VcFFYQU5TZk1YanBHd09ORHQ3OWI2djhjSGk5SlpQajJ3ZDIydUhacl94WHNIOE84SXdIU1hrZlNCY2FWR3JfVElHRUU5eEcxcVFadllNQjdmRTl5clhvMlg1ejRreVY1U3FoTFYzb0EwRlpWeUJ4OEhDU2NNeVh4STZTT0NJUkstNU5ZSEMtVmxxYmk2TFlzS3YxZThDdV9OWno1M0J1ODRlLU1LRE5zLVh3LS1SLTMwcmFhVElGWHdvaVQ4MnhaT1JiUTRZbk5teUt5ZVZWR1I5Z18zdHhYUzdrWm16c0NScjJnc0hfbmhHdjE1dkFoVnozT29uLU9qSlFPOVZGRDdheWxkTDVxZnROZzdWNzhYaUxtMnZJUllfbzRiQzlfeDkzWmdSMkUxSmJrUVRFVWNhTnozLVhLc2g2Ym5GY0k2NjZHYnBwUl84Sm9fX1JXV2JCVWd0U1ZIQ1dwbmEyc3lnVDNXMTBZRmFoUmVLZ1RaVmljanUybmFINUxjeldDOW5JSU1PRUdrVDIyNWhJR1JiejhCaHo0VlJEZUdKTFJSQ004ZkJUM3BGNGlNMVcxRk5MNmVMek0xTW9jZUJEUGNSRklyWEdDLWtaemhaX1BZZFAtUl9PRFBVR2NaaThYT1R6Ri0zX0k1Y3ByTmtMOEJBT2k2TnVyR21LS0tOVGNqM0U1SVA3akxyV0pNd1dSR01LeFJFTDctMmZ1MU1BZ2xNMm02NExOd0hIRFNYaVdfVWpydGxibVJNdFRQNktITFVYaW9aS1pWcldRQUs0c2U0R3l6cGdIYVNHdEE5aGRpbXAtLXduWlZRPT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlNlYXJjaGluZyBmb3IgZ2V0T3BlbkZpbGVOYW1lIGZ1bmN0aW9uKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX3BqaTdQZUpYdG15Wll5REI4ODhFV3V3RnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU0ZGM0NjA4MTkxOGM3ZDM3Y2EwYWQzNWMyYiIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJyZyAnZ2V0T3BlbkZpbGVOYW1lJyB+Ly5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvKi9xdF93aWRnZXRzLTAuNS4wL3NyYy9mZmkuaW4ucnMgfCBoZWFkIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0Ijo2MjYsIm91dHB1dCI6NzMsImNhY2hlUmVhZCI6OTQ3MjAsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MjIsInRvdGFsVG9rZW5zIjo5NTQxOSwiY29zdCI6eyJpbnB1dCI6MC4wMDMxMzAwMDAwMDAwMDAwMDA0LCJvdXRwdXQiOjAuMDAyMTksImNhY2hlUmVhZCI6MC4wNDczNiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDUyNjh9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTU0MDMxNzcsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTRiOGYwYzgxOTE5ZDAwMDczMzdkNmM1NTBlIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjAyY2RhZGViIiwicGFyZW50SWQiOiJkYzJlMDZhYiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDM6MjYuNDM1WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9wamk3UGVKWHRteVpZeURCODg4RVd1d0Z8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlNGRjNDYwODE5MThjN2QzN2NhMGFkMzVjMmIiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIgICAgLy8vIDxhIGhyZWY9XCJodHRwOi8vZG9jLnF0LmlvL3F0LTUvcWZpbGVkaWFsb2cuaHRtbCNnZXRPcGVuRmlsZU5hbWVcIj5DKysgZG9jdW1lbnRhdGlvbjwvYT46PGRpdiBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzVDRkY5NTsgYmFja2dyb3VuZDogI0Q2RkZFNDsgcGFkZGluZzogMTZweDsnPjxwPlRoaXMgaXMgYSBjb252ZW5pZW5jZSBzdGF0aWMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGV4aXN0aW5nIGZpbGUgc2VsZWN0ZWQgYnkgdGhlIHVzZXIuIElmIHRoZSB1c2VyIHByZXNzZXMgQ2FuY2VsLCBpdCByZXR1cm5zIGEgbnVsbCBzdHJpbmcuPC9wPlxuICAgIC8vLyAgIDxzcGFuIGNsYXNzPVwidHlwZVwiPjxhIGhyZWY9XCJodHRwOi8vZG9jLnF0LmlvL3F0LTUvcXN0cmluZy5odG1sXCI+UVN0cmluZzwvYT48L3NwYW4+IGZpbGVOYW1lIDxzcGFuIGNsYXNzPVwib3BlcmF0b3JcIj49PC9zcGFuPiA8c3BhbiBjbGFzcz1cInR5cGVcIj48YSBocmVmPVwiaHR0cDovL2RvYy5xdC5pby9xdC01L3FmaWxlZGlhbG9nLmh0bWwjUUZpbGVEaWFsb2dcIj5RRmlsZURpYWxvZzwvYT48L3NwYW4+PHNwYW4gY2xhc3M9XCJvcGVyYXRvclwiPjo6PC9zcGFuPmdldE9wZW5GaWxlTmFtZSg8c3BhbiBjbGFzcz1cImtleXdvcmRcIj50aGlzPC9zcGFuPjxzcGFuIGNsYXNzPVwib3BlcmF0b3JcIj4sPC9zcGFuPiB0cig8c3BhbiBjbGFzcz1cInN0cmluZ1wiPlwiT3BlbiBGaWxlXCI8L3NwYW4+KTxzcGFuIGNsYXNzPVwib3BlcmF0b3JcIj4sPC9zcGFuPlxuICAgIC8vLyA8cD48Yj5TZWUgYWxzbyA8L2I+PGEgaHJlZj1cImh0dHA6Ly9kb2MucXQuaW8vcXQtNS9xZmlsZWRpYWxvZy5odG1sI2dldE9wZW5GaWxlTmFtZXNcIj5nZXRPcGVuRmlsZU5hbWVzPC9hPigpLCA8YSBocmVmPVwiaHR0cDovL2RvYy5xdC5pby9xdC01L3FmaWxlZGlhbG9nLmh0bWwjZ2V0U2F2ZUZpbGVOYW1lXCI+Z2V0U2F2ZUZpbGVOYW1lPC9hPigpLCBhbmQgPGEgaHJlZj1cImh0dHA6Ly9kb2MucXQuaW8vcXQtNS9xZmlsZWRpYWxvZy5odG1sI2dldEV4aXN0aW5nRGlyZWN0b3J5XCI+Z2V0RXhpc3RpbmdEaXJlY3Rvcnk8L2E+KCkuPC9wPjwvZGl2PlxuICAgIHB1YiBmbiBjdHJfcXRfd2lkZ2V0c19mZmlfUUZpbGVEaWFsb2dfZ2V0T3BlbkZpbGVOYW1lKFxuICAgIC8vLyA8cD5UaGUgZnVuY3Rpb24gaXMgdXNlZCBzaW1pbGFybHkgdG8gPGEgaHJlZj1cImh0dHA6Ly9kb2MucXQuaW8vcXQtNS9xZmlsZWRpYWxvZy5odG1sI2dldE9wZW5GaWxlTmFtZVwiPlFGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5hbWU8L2E+KCkuIEluIHBhcnRpY3VsYXIgPGk+cGFyZW50PC9pPiwgPGk+Y2FwdGlvbjwvaT4sIDxpPmRpcjwvaT4sIDxpPmZpbHRlcjwvaT4sIDxpPnNlbGVjdGVkRmlsdGVyPC9pPiBhbmQgPGk+b3B0aW9uczwvaT4gYXJlIHVzZWQgaW4gdGhlIGV4YWN0IHNhbWUgd2F5LjwvcD5cbiAgICAvLy8gPHA+VGhlIG1haW4gZGlmZmVyZW5jZSB3aXRoIDxhIGhyZWY9XCJodHRwOi8vZG9jLnF0LmlvL3F0LTUvcWZpbGVkaWFsb2cuaHRtbCNnZXRPcGVuRmlsZU5hbWVcIj5RRmlsZURpYWxvZzo6Z2V0T3BlbkZpbGVOYW1lPC9hPigpIGNvbWVzIGZyb20gdGhlIGFiaWxpdHkgb2ZmZXJlZCB0byB0aGUgdXNlciB0byBzZWxlY3QgYSByZW1vdGUgZmlsZS4gVGhhdCdzIHdoeSB0aGUgcmV0dXJuIHR5cGUgYW5kIHRoZSB0eXBlIG9mIDxpPmRpcjwvaT4gaXMgPGEgaHJlZj1cImh0dHA6Ly9kb2MucXQuaW8vcXQtNS9xdXJsLmh0bWxcIj5RVXJsPC9hPi48L3A+XG4gICAgLy8vIDxwPjxiPlNlZSBhbHNvIDwvYj48YSBocmVmPVwiaHR0cDovL2RvYy5xdC5pby9xdC01L3FmaWxlZGlhbG9nLmh0bWwjZ2V0T3BlbkZpbGVOYW1lXCI+Z2V0T3BlbkZpbGVOYW1lPC9hPigpLCA8YSBocmVmPVwiaHR0cDovL2RvYy5xdC5pby9xdC01L3FmaWxlZGlhbG9nLmh0bWwjZ2V0T3BlbkZpbGVVcmxzXCI+Z2V0T3BlbkZpbGVVcmxzPC9hPigpLCA8YSBocmVmPVwiaHR0cDovL2RvYy5xdC5pby9xdC01L3FmaWxlZGlhbG9nLmh0bWwjZ2V0U2F2ZUZpbGVVcmxcIj5nZXRTYXZlRmlsZVVybDwvYT4oKSwgYW5kIDxhIGhyZWY9XCJodHRwOi8vZG9jLnF0LmlvL3F0LTUvcWZpbGVkaWFsb2cuaHRtbCNnZXRFeGlzdGluZ0RpcmVjdG9yeVVybFwiPmdldEV4aXN0aW5nRGlyZWN0b3J5VXJsPC9hPigpLjwvcD48L2Rpdj5cbiAgICAvLy8gPHA+PGI+U2VlIGFsc28gPC9iPjxhIGhyZWY9XCJodHRwOi8vZG9jLnF0LmlvL3F0LTUvcWZpbGVkaWFsb2cuaHRtbCNnZXRPcGVuRmlsZU5hbWVcIj5nZXRPcGVuRmlsZU5hbWU8L2E+KCksIDxhIGhyZWY9XCJodHRwOi8vZG9jLnF0LmlvL3F0LTUvcWZpbGVkaWFsb2cuaHRtbCNnZXRPcGVuRmlsZU5hbWVzXCI+Z2V0T3BlbkZpbGVOYW1lczwvYT4oKSwgYW5kIDxhIGhyZWY9XCJodHRwOi8vZG9jLnF0LmlvL3F0LTUvcWZpbGVkaWFsb2cuaHRtbCNnZXRFeGlzdGluZ0RpcmVjdG9yeVwiPmdldEV4aXN0aW5nRGlyZWN0b3J5PC9hPigpLjwvcD48L2Rpdj5cbiAgICAvLy8gPHA+PGI+U2VlIGFsc28gPC9iPjxhIGhyZWY9XCJodHRwOi8vZG9jLnF0LmlvL3F0LTUvcWZpbGVkaWFsb2cuaHRtbCNnZXRPcGVuRmlsZU5hbWVcIj5nZXRPcGVuRmlsZU5hbWU8L2E+KCksIDxhIGhyZWY9XCJodHRwOi8vZG9jLnF0LmlvL3F0LTUvcWZpbGVkaWFsb2cuaHRtbCNnZXRPcGVuRmlsZU5hbWVzXCI+Z2V0T3BlbkZpbGVOYW1lczwvYT4oKSwgYW5kIDxhIGhyZWY9XCJodHRwOi8vZG9jLnF0LmlvL3F0LTUvcWZpbGVkaWFsb2cuaHRtbCNnZXRTYXZlRmlsZU5hbWVcIj5nZXRTYXZlRmlsZU5hbWU8L2E+KCkuPC9wPjwvZGl2PlxuICAgIC8vLyA8YSBocmVmPVwiaHR0cDovL2RvYy5xdC5pby9xdC01L3FmaWxlZGlhbG9nLmh0bWwjZ2V0T3BlbkZpbGVOYW1lc1wiPkMrKyBkb2N1bWVudGF0aW9uPC9hPjo8ZGl2IHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjNUNGRjk1OyBiYWNrZ3JvdW5kOiAjRDZGRkU0OyBwYWRkaW5nOiAxNnB4Oyc+PHA+VGhpcyBpcyBhIGNvbnZlbmllbmNlIHN0YXRpYyBmdW5jdGlvbiB0aGF0IHdpbGwgcmV0dXJuIG9uZSBvciBtb3JlIGV4aXN0aW5nIGZpbGVzIHNlbGVjdGVkIGJ5IHRoZSB1c2VyLjwvcD5cbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk5NTQwNjQzNX19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImM2ZDMyZTQzIiwicGFyZW50SWQiOiIwMmNkYWRlYiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDM6MzYuNjQ2WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipQbGFubmluZyBkZXBlbmRlbmN5IHVwZGF0ZXMgYW5kIGJ1aWxkIGluc3BlY3Rpb24qKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTU1MDEwODgxOTE5ZjJjNTYwMWY4MzYzZWUwXCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpONVh6Tjk3WnVkT0RodkhhOXNPWFVXTEl3XzBHS1NjbGZtMGtZeWJQajlIOXFieWNwRWdCWnYzTFB3OWRfMm9hMGFYOWRjcjBoNmZwalFsR3ZVZGNGQkdBRFlIUG1YVTJvN0hJWENuVk5jeGo3OXp2cUd6TXo2Uk0zWjJfNjZ5RHlwTEhWYjJzSndOV0NjbXlqX3locklBSFFWMFhGNFN2NklGb0dubGotemh0QzZjbDlCX0ZGVFlZUnpsWDd5WU5EbmxFRS00eWVZOHo4OVdEakR6ZjY2WTZxZlJXTE5ITEgzeHdiRUhob3VPVk1NanNYcTEzT1FsMFA4ajhaRnVwTTZiNzhzZGRrRmt6YW1fMlJ1NlN2T29hZmRYT1A1WXJ1YjBlTFF2QTRqbjlZRm9PSzZSZzRpclNKNTREZmlkNmhnVENvczVQV2ZRT2tIZnp1SWRGbGNtSzBMSW5tbXRUTkNFdUJCMGFDQ1lyVDhYVUJtNklKZ2dFQWkzaXBXQjB3RGFHZmRhT1N5Z0F6X0gtekt6c2oxNmh5R25pSjRDdDV1WHJ5TWtjaHlBX0YxclItREN0dVM2Y1FFblJxOXI1RTR2TkdIaTA5OUhIWnZheUZ5RXNleVl5Y3poSHdJcGYzalhzbUxLMmRLSEIxRGZWZlpsYXNzd2QwcDRzZHFSb3cxRTBBTElMdW84Y1FSV1VaeGhPaW5EcnZaSzNTUzJlTUFJSWh1ZWdSOENOQzlUUFVzME45VV9GcnkzMEJDVXEyX0lXT1B3SWU3dnhxTjhac3lxM0p1OXF0NU5fN0RrcWF0UkNORkttRUJ4Y01hWWN3TXdEblVld28zYVB6aXhxU3NXUjVzOW15Z0JqZTNXSlpLSGtaa3Vqb1k4SmItRmtEUFJ0QW0yOGR0RzhGVHNrZ1VjSjRWRjFVOVhDOWhtb0FZQnRwTm02aHJsMUhBSW9DdVRod1kyS3d3a21zUE9IalJRdGQzWVA1dWljSWxLMzAzQ0czMW9ETlI5S0k5N2RoWVpoWk13TW82cHR5Qll5Mmc1WHRCbEdxNExvNjAyWG5pdkd0R1RkZm5jT2JudFhPajJfLUhCdmFCWk1FZ3B2Y2RjVWpNeDZIcjE0NlNEeEh3Q25ocGV6dk50YkFQT2NuV3NQYWN4T2s1b3lYV1AzSUtwRnAxdnlOczd3OGVyOURzT1RTQUhmUk5WeUt2MWJ2QjN1U0o5NGROcUF4ZC1zdE8tVDJ2RDl6c21GNjUzSHN3ZnJ6OGFNSGpDMGp2MEtWTHp2b2FJRUx4MWNraXhpTDVPZXRqMmNFcU1lNU1wNkJWWUJhUzFvWGJwZ0M0bDEwNm95Y2RzeGdZcjZzMnlGUFVSZFlmODBWdkpEY3BaRW9vM1gzVFpRMWlTX0hmWGFCYTU4S01CSXNSMTJ6aVdqRGk1UFJ3V1ByeXAxR0NjbHY0UFVhd09jTDhINHVBTi1NZ1BrVVFrQkkyNTZDbjIwVHM3UE95anY0UDJzS2FOMUFoRFpoRXRETGFZUVM0bWhya0p3OWttVUVOaFZNU2xBR2N2N0Qxb0JlcGMwYVEyUjVPZUhzc05CcDl0bTBVOEZWMUMxaGp2OHdmWTFvM3ktZHB2VC1DY29udE9PNEZKX1FaaHJrYTMzeGMxYkdHcXBwREhZX1ExYk1pUkE1T1BCUjh2dTJYSS1iMEhnRm1iY3N6RUwwcVRxQXg5dFQ3b0pHZ1NVLWFkVHJhQnVvMmR3UXFCTkQ2d0dIM2hJUmplQmZZVDhGR2tzdWg4NFFVMmxnaU92UG83QVk2RFJZMkhvdHZ2MUxzSmNnPT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlBsYW5uaW5nIGRlcGVuZGVuY3kgdXBkYXRlcyBhbmQgYnVpbGQgaW5zcGVjdGlvbioqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF8wa1hmMncyZHRVMDdyNTVNZlVoSTlNbGt8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlNTc5MjE0ODE5MWE5OGUzMDJhYmM5NmJmZmEiLCJuYW1lIjoid3JpdGUiLCJhcmd1bWVudHMiOnsicGF0aCI6ImNyYXRlcy9mbGFzaGVyLXF0L0NhcmdvLnRvbWwiLCJjb250ZW50IjoiW3BhY2thZ2VdXG5uYW1lID0gXCJmbGFzaGVyLXF0XCJcbnZlcnNpb24gPSBcIjAuMS4wXCJcbmVkaXRpb24gPSBcIjIwMjRcIlxuZGVzY3JpcHRpb24gPSBcIkEgbmF0aXZlIFF0IFdpZGdldHMgaW50ZXJmYWNlIGZvciBwcmVwYXJpbmcgQUxUIExpbnV4IFNCQyBpbWFnZXNcIlxubGljZW5zZSA9IFwiR1BMLTIuMC1vci1sYXRlclwiXG5cbltkZXBlbmRlbmNpZXNdXG5jcHBfY29yZSA9IFwiMC42XCJcbnF0X3dpZGdldHMgPSBcIjAuNVwiXG4ifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjE2NzEsIm91dHB1dCI6MTgyLCJjYWNoZVJlYWQiOjk0NzIwLCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjY5LCJ0b3RhbFRva2VucyI6OTY1NzMsImNvc3QiOnsiaW5wdXQiOjAuMDA4MzU1MDAwMDAwMDAwMDAxLCJvdXRwdXQiOjAuMDA1NDYwMDAwMDAwMDAwMDAwNCwiY2FjaGVSZWFkIjowLjA0NzM2LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNjExNzV9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTU0MDY0MzcsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTRmMDI1YzgxOTFhYzdjZmMzOTg5ZmJkNWZmIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjM0N2Y0YTgzIiwicGFyZW50SWQiOiJjNmQzMmU0MyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDM6MzYuNjUxWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF8wa1hmMncyZHRVMDdyNTVNZlVoSTlNbGt8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlNTc5MjE0ODE5MWE5OGUzMDJhYmM5NmJmZmEiLCJ0b29sTmFtZSI6IndyaXRlIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiU3VjY2Vzc2Z1bGx5IHdyb3RlIDIyNyBieXRlcyB0byBjcmF0ZXMvZmxhc2hlci1xdC9DYXJnby50b21sIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1NDE2NjUxfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiOTIxMzEyMTQiLCJwYXJlbnRJZCI6IjM0N2Y0YTgzIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowMzo0MC4wNjRaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX09qVzZidVROZ2hqaXVZdnloUnhlSGhFY3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU1YTczNmM4MTkxOGU1ZjViN2FiNTU0ODk3ZCIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJybSAtZiBjcmF0ZXMvZmxhc2hlci1xdC9idWlsZC5ycyBjcmF0ZXMvZmxhc2hlci1xdC9zcmMvdWkuY3BwXG5jYXQgPiBjcmF0ZXMvZmxhc2hlci1xdC9zcmMvbWFpbi5ycyA8PCdFT0YnXG51c2UgcXRfd2lkZ2V0czo6UUFwcGxpY2F0aW9uO1xuZm4gbWFpbigpIHsgUUFwcGxpY2F0aW9uOjppbml0KHxffCAwKTsgfVxuRU9GXG5jYXJnbyBjaGVjayAtcCBmbGFzaGVyLXF0IiwidGltZW91dCI6MTIwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjg1NCwib3V0cHV0Ijo4NywiY2FjaGVSZWFkIjo5NTc0NCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjowLCJ0b3RhbFRva2VucyI6OTY2ODUsImNvc3QiOnsiaW5wdXQiOjAuMDA0MjcsIm91dHB1dCI6MC4wMDI2MSwiY2FjaGVSZWFkIjowLjA0Nzg3MiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDU0NzUxOTk5OTk5OTk5OTk1fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1NDE2NjUzLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU1OTAwNGM4MTkxYjVjYzNjNjg0NjE5NzdkMSJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI2ZTE2NmY1ZiIsInBhcmVudElkIjoiOTIxMzEyMTQiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjAzOjU3LjYzMFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfT2pXNmJ1VE5naGppdVl2eWhSeGVIaEVjfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTVhNzM2YzgxOTE4ZTVmNWI3YWI1NTQ4OTdkIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiICAgIFVwZGF0aW5nIGNyYXRlcy5pbyBpbmRleFxuICAgICBMb2NraW5nIDU5IHBhY2thZ2VzIHRvIGxhdGVzdCBSdXN0IDEuOTcuMCBjb21wYXRpYmxlIHZlcnNpb25zXG4gICAgICBBZGRpbmcgYWRkcjJsaW5lIHYwLjI1LjFcbiAgICAgIEFkZGluZyBhZGxlcjIgdjIuMC4xXG4gICAgICBBZGRpbmcgYWhvLWNvcmFzaWNrIHYxLjEuNFxuICAgICAgQWRkaW5nIGF0dHkgdjAuMi4xNFxuICAgICAgQWRkaW5nIGJhY2t0cmFjZSB2MC4zLjc2XG4gICAgICBBZGRpbmcgYmluY29kZSB2MS4zLjNcbiAgICAgIEFkZGluZyBjZmctaWYgdjEuMC40XG4gICAgICBBZGRpbmcgY3BwX2NvcmUgdjAuNi4wXG4gICAgICBBZGRpbmcgZHVuY2UgdjEuMC41XG4gICAgICBBZGRpbmcgZWl0aGVyIHYxLjE3LjBcbiAgICAgIEFkZGluZyBlbnZfbG9nZ2VyIHYwLjcuMVxuICAgICAgQWRkaW5nIGZhaWx1cmUgdjAuMS44XG4gICAgICBBZGRpbmcgZmFpbHVyZV9kZXJpdmUgdjAuMS44XG4gICAgICBBZGRpbmcgZ2ltbGkgdjAuMzIuM1xuICAgICAgQWRkaW5nIGhlcm1pdC1hYmkgdjAuMS4xOVxuICAgICAgQWRkaW5nIGhlcm1pdC1hYmkgdjAuNS4yXG4gICAgICBBZGRpbmcgaHVtYW50aW1lIHYxLjMuMFxuICAgICAgQWRkaW5nIGl0ZXJ0b29scyB2MC44LjJcbiAgICAgIEFkZGluZyBpdG9hIHYxLjAuMThcbiAgICAgIEFkZGluZyBrZXJuZWwzMi1zeXMgdjAuMi4yXG4gICAgICBBZGRpbmcgbGF6eV9zdGF0aWMgdjEuNS4wXG4gICAgICBBZGRpbmcgbG9nIHYwLjQuMzNcbiAgICAgIEFkZGluZyBtaW5pel9veGlkZSB2MC44LjlcbiAgICAgIEFkZGluZyBudW1fY3B1cyB2MS4xNy4wXG4gICAgICBBZGRpbmcgb2JqZWN0IHYwLjM3LjNcbiAgICAgIEFkZGluZyBwYXRoZGlmZiB2MC4xLjBcbiAgICAgIEFkZGluZyBwcm9jLW1hY3JvLWhhY2sgdjAuNS4yMCtkZXByZWNhdGVkXG4gICAgICBBZGRpbmcgcXRfY29yZSB2MC41LjBcbiAgICAgIEFkZGluZyBxdF9ndWkgdjAuNS4wXG4gICAgICBBZGRpbmcgcXRfbWFjcm9zIHYwLjEuMVxuICAgICAgQWRkaW5nIHF0X3JpdHVhbF9idWlsZCB2MC41LjBcbiAgICAgIEFkZGluZyBxdF9yaXR1YWxfY29tbW9uIHYwLjQuMFxuICAgICAgQWRkaW5nIHF0X3dpZGdldHMgdjAuNS4wXG4gICAgICBBZGRpbmcgcXVpY2stZXJyb3IgdjEuMi4zXG4gICAgICBBZGRpbmcgcmVnZXggdjEuMTMuMVxuICAgICAgQWRkaW5nIHJlZ2V4LWF1dG9tYXRhIHYwLjQuMTZcbiAgICAgIEFkZGluZyByZWdleC1zeW50YXggdjAuOC4xMVxuICAgICAgQWRkaW5nIHJpdHVhbF9idWlsZCB2MC40LjBcbiAgICAgIEFkZGluZyByaXR1YWxfY29tbW9uIHYwLjQuMFxuICAgICAgQWRkaW5nIHJ1c3RjLWRlbWFuZ2xlIHYwLjEuMjhcbiAgICAgIEFkZGluZyBzZW12ZXIgdjAuOS4wXG4gICAgICBBZGRpbmcgc2VtdmVyLXBhcnNlciB2MC43LjBcbiAgICAgIEFkZGluZyBzZXJkZSB2MS4wLjIyOVxuICAgICAgQWRkaW5nIHNlcmRlX2pzb24gdjEuMC4xNTFcbiAgICAgIEFkZGluZyBzaGVsbC13b3JkcyB2MC4xLjBcbiAgICAgIEFkZGluZyBzeW4gdjEuMC4xMDlcbiAgICAgIEFkZGluZyBzeW5zdHJ1Y3R1cmUgdjAuMTIuNlxuICAgICAgQWRkaW5nIHRlcm0gdjAuNC42XG4gICAgICBBZGRpbmcgdGVybS1wYWludGVyIHYwLjIuNFxuICAgICAgQWRkaW5nIHRlcm1jb2xvciB2MS40LjFcbiAgICAgIEFkZGluZyB0b21sIHYwLjQuMTBcbiAgICAgIEFkZGluZyB1bmljb2RlLXhpZCB2MC4yLjZcbiAgICAgIEFkZGluZyB3aW5hcGkgdjAuMi44XG4gICAgICBBZGRpbmcgd2luYXBpIHYwLjMuOVxuICAgICAgQWRkaW5nIHdpbmFwaS1idWlsZCB2MC4xLjFcbiAgICAgIEFkZGluZyB3aW5hcGktaTY4Ni1wYy13aW5kb3dzLWdudSB2MC40LjBcbiAgICAgIEFkZGluZyB3aW5hcGktdXRpbCB2MC4xLjExXG4gICAgICBBZGRpbmcgd2luYXBpLXg4Nl82NC1wYy13aW5kb3dzLWdudSB2MC40LjBcbiAgICAgIEFkZGluZyB6bWlqIHYxLjAuMjNcbiBEb3dubG9hZGluZyBjcmF0ZXMgLi4uXG4gIERvd25sb2FkZWQgZmFpbHVyZV9kZXJpdmUgdjAuMS44XG4gIERvd25sb2FkZWQgcGF0aGRpZmYgdjAuMS4wXG4gIERvd25sb2FkZWQgYmFja3RyYWNlIHYwLjMuNzZcbiAgRG93bmxvYWRlZCBhdHR5IHYwLjIuMTRcbiAgRG93bmxvYWRlZCBwcm9jLW1hY3JvLWhhY2sgdjAuNS4yMCtkZXByZWNhdGVkXG4gIERvd25sb2FkZWQgYmluY29kZSB2MS4zLjNcbiAgRG93bmxvYWRlZCBkdW5jZSB2MS4wLjVcbiAgRG93bmxvYWRlZCBlaXRoZXIgdjEuMTcuMFxuICBEb3dubG9hZGVkIGVudl9sb2dnZXIgdjAuNy4xXG4gIERvd25sb2FkZWQgaHVtYW50aW1lIHYxLjMuMFxuICBEb3dubG9hZGVkIGFkZHIybGluZSB2MC4yNS4xXG4gIERvd25sb2FkZWQgZmFpbHVyZSB2MC4xLjhcbiAgRG93bmxvYWRlZCBxdWljay1lcnJvciB2MS4yLjNcbiAgRG93bmxvYWRlZCBpdGVydG9vbHMgdjAuOC4yXG4gIERvd25sb2FkZWQgc2VtdmVyLXBhcnNlciB2MC43LjBcbiAgRG93bmxvYWRlZCB0ZXJtY29sb3IgdjEuNC4xXG4gIERvd25sb2FkZWQgc2VtdmVyIHYwLjkuMFxuICBEb3dubG9hZGVkIHN5bnN0cnVjdHVyZSB2MC4xMi42XG4gIERvd25sb2FkZWQgem1paiB2MS4wLjIzXG4gIERvd25sb2FkZWQgcnVzdGMtZGVtYW5nbGUgdjAuMS4yOFxuICBEb3dubG9hZGVkIHRvbWwgdjAuNC4xMFxuICBEb3dubG9hZGVkIHNlcmRlIHYxLjAuMjI5XG4gIERvd25sb2FkZWQgc2VyZGVfanNvbiB2MS4wLjE1MVxuICBEb3dubG9hZGVkIGdpbWxpIHYwLjMyLjNcbiAgRG93bmxvYWRlZCBvYmplY3QgdjAuMzcuM1xuICBEb3dubG9hZGVkIHF0X3JpdHVhbF9jb21tb24gdjAuNC4wXG4gIERvd25sb2FkZWQgY3BwX2NvcmUgdjAuNi4wXG4gIERvd25sb2FkZWQgcXRfbWFjcm9zIHYwLjEuMVxuICBEb3dubG9hZGVkIHF0X3JpdHVhbF9idWlsZCB2MC41LjBcbiAgRG93bmxvYWRlZCB0ZXJtIHYwLjQuNlxuICBEb3dubG9hZGVkIHNoZWxsLXdvcmRzIHYwLjEuMFxuICBEb3dubG9hZGVkIHJpdHVhbF9idWlsZCB2MC40LjBcbiAgRG93bmxvYWRlZCByaXR1YWxfY29tbW9uIHYwLjQuMFxuICBEb3dubG9hZGVkIHRlcm0tcGFpbnRlciB2MC4yLjRcbiAgRG93bmxvYWRlZCBxdF9ndWkgdjAuNS4wXG4gICBDb21waWxpbmcgc3luIHYxLjAuMTA5XG4gICBDb21waWxpbmcgc2VyZGVfY29yZSB2MS4wLjIyOVxuICAgQ29tcGlsaW5nIG9iamVjdCB2MC4zNy4zXG4gICBDb21waWxpbmcgc2VyZGUgdjEuMC4yMjlcbiAgIENvbXBpbGluZyBhaG8tY29yYXNpY2sgdjEuMS40XG4gICBDb21waWxpbmcgZ2ltbGkgdjAuMzIuM1xuICAgQ29tcGlsaW5nIGFkbGVyMiB2Mi4wLjFcbiAgIENvbXBpbGluZyBmYWlsdXJlX2Rlcml2ZSB2MC4xLjhcbiAgIENvbXBpbGluZyB6bWlqIHYxLjAuMjNcbiAgIENvbXBpbGluZyBzZXJkZV9qc29uIHYxLjAuMTUxXG4gICBDb21waWxpbmcgY2ZnLWlmIHYxLjAuNFxuICAgQ29tcGlsaW5nIGxpYmMgdjAuMi4xODlcbiAgIENvbXBpbGluZyBydXN0Yy1kZW1hbmdsZSB2MC4xLjI4XG4gICBDb21waWxpbmcgc2VtdmVyLXBhcnNlciB2MC43LjBcbiAgIENvbXBpbGluZyBpdG9hIHYxLjAuMThcbiAgIENvbXBpbGluZyBzeW4gdjMuMC4zXG4gICBDb21waWxpbmcgdGVybSB2MC40LjZcbiAgIENvbXBpbGluZyBtaW5pel9veGlkZSB2MC44LjlcbiAgIENvbXBpbGluZyBlaXRoZXIgdjEuMTcuMFxuICAgQ29tcGlsaW5nIGxvZyB2MC40LjMzXG4gICBDb21waWxpbmcgc2VtdmVyIHYwLjkuMFxuICAgQ29tcGlsaW5nIGxhenlfc3RhdGljIHYxLjUuMFxuICAgQ29tcGlsaW5nIGR1bmNlIHYxLjAuNVxuICAgQ29tcGlsaW5nIHNoZWxsLXdvcmRzIHYwLjEuMFxuICAgQ29tcGlsaW5nIHBhdGhkaWZmIHYwLjEuMFxuICAgQ29tcGlsaW5nIGl0ZXJ0b29scyB2MC44LjJcbiAgIENvbXBpbGluZyB0ZXJtLXBhaW50ZXIgdjAuMi40XG4gICBDb21waWxpbmcgcXVpY2stZXJyb3IgdjEuMi4zXG4gICBDb21waWxpbmcgdGVybWNvbG9yIHYxLjQuMVxuICAgQ29tcGlsaW5nIHByb2MtbWFjcm8taGFjayB2MC41LjIwK2RlcHJlY2F0ZWRcbiAgIENvbXBpbGluZyBodW1hbnRpbWUgdjEuMy4wXG4gICBDb21waWxpbmcgcmVnZXgtYXV0b21hdGEgdjAuNC4xNlxuICAgQ29tcGlsaW5nIG51bV9jcHVzIHYxLjE3LjBcbiAgIENvbXBpbGluZyBhdHR5IHYwLjIuMTRcbiAgICBDaGVja2luZyBjcHBfY29yZSB2MC42LjBcbiAgIENvbXBpbGluZyBzZXJkZV9kZXJpdmUgdjEuMC4yMjlcbiAgIENvbXBpbGluZyBhZGRyMmxpbmUgdjAuMjUuMVxuICAgQ29tcGlsaW5nIHJlZ2V4IHYxLjEzLjFcbiAgIENvbXBpbGluZyBiaW5jb2RlIHYxLjMuM1xuICAgQ29tcGlsaW5nIHRvbWwgdjAuNC4xMFxuICAgQ29tcGlsaW5nIGJhY2t0cmFjZSB2MC4zLjc2XG4gICBDb21waWxpbmcgc3luc3RydWN0dXJlIHYwLjEyLjZcbiAgIENvbXBpbGluZyBlbnZfbG9nZ2VyIHYwLjcuMVxuICAgQ29tcGlsaW5nIHF0X21hY3JvcyB2MC4xLjFcbiAgIENvbXBpbGluZyBmYWlsdXJlIHYwLjEuOFxuICAgQ29tcGlsaW5nIHJpdHVhbF9jb21tb24gdjAuNC4wXG4gICBDb21waWxpbmcgcml0dWFsX2J1aWxkIHYwLjQuMFxuICAgQ29tcGlsaW5nIHF0X3JpdHVhbF9jb21tb24gdjAuNC4wXG4gICBDb21waWxpbmcgcXRfcml0dWFsX2J1aWxkIHYwLjUuMFxuICAgQ29tcGlsaW5nIHF0X2NvcmUgdjAuNS4wXG4gICBDb21waWxpbmcgcXRfZ3VpIHYwLjUuMFxuICAgQ29tcGlsaW5nIHF0X3dpZGdldHMgdjAuNS4wXG5lcnJvcjogZmFpbGVkIHRvIHJ1biBjdXN0b20gYnVpbGQgY29tbWFuZCBmb3IgYHF0X2NvcmUgdjAuNS4wYFxuXG5DYXVzZWQgYnk6XG4gIHByb2Nlc3MgZGlkbid0IGV4aXQgc3VjY2Vzc2Z1bGx5OiBgL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci90YXJnZXQvZGVidWcvYnVpbGQvcXRfY29yZS05YjY4Njc4OGRjNDA4ZTA0L2J1aWxkLXNjcmlwdC1idWlsZGAgKGV4aXQgc3RhdHVzOiAxKVxuICAtLS0gc3RkZXJyXG4gIFsyMDI2LTA3LTI1VDE2OjAzOjU3WiBFUlJPUiByaXR1YWxfY29tbW9uOjplcnJvcnNdIEVycm9yOlxuICBbMjAyNi0wNy0yNVQxNjowMzo1N1ogRVJST1Igcml0dWFsX2NvbW1vbjo6ZXJyb3JzXSAgICBmYWlsZWQgdG8gcnVuIGNvbW1hbmQ6IFwicW1ha2VcIiBcIi1xdWVyeVwiIFwiUVRfVkVSU0lPTlwiXG4gIFsyMDI2LTA3LTI1VDE2OjAzOjU3WiBFUlJPUiByaXR1YWxfY29tbW9uOjplcnJvcnNdICAgIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgKG9zIGVycm9yIDIpXG53YXJuaW5nOiBidWlsZCBmYWlsZWQsIHdhaXRpbmcgZm9yIG90aGVyIGpvYnMgdG8gZmluaXNoLi4uXG5lcnJvcjogZmFpbGVkIHRvIHJ1biBjdXN0b20gYnVpbGQgY29tbWFuZCBmb3IgYHF0X2d1aSB2MC41LjBgXG5cbkNhdXNlZCBieTpcbiAgcHJvY2VzcyBkaWRuJ3QgZXhpdCBzdWNjZXNzZnVsbHk6IGAvaG9tZS9hZ3VzY2hpbi9Qcm9qZWN0cy9mbGFzaGVyL3RhcmdldC9kZWJ1Zy9idWlsZC9xdF9ndWktMjk3Yzg0ZDY2YTVjNDY5YS9idWlsZC1zY3JpcHQtYnVpbGRgIChleGl0IHN0YXR1czogMSlcbiAgLS0tIHN0ZGVyclxuICBbMjAyNi0wNy0yNVQxNjowMzo1N1ogRVJST1Igcml0dWFsX2NvbW1vbjo6ZXJyb3JzXSBFcnJvcjpcbiAgWzIwMjYtMDctMjVUMTY6MDM6NTdaIEVSUk9SIHJpdHVhbF9jb21tb246OmVycm9yc10gICAgZmFpbGVkIHRvIHJ1biBjb21tYW5kOiBcInFtYWtlXCIgXCItcXVlcnlcIiBcIlFUX1ZFUlNJT05cIlxuICBbMjAyNi0wNy0yNVQxNjowMzo1N1ogRVJST1Igcml0dWFsX2NvbW1vbjo6ZXJyb3JzXSAgICBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IChvcyBlcnJvciAyKVxuZXJyb3I6IGZhaWxlZCB0byBydW4gY3VzdG9tIGJ1aWxkIGNvbW1hbmQgZm9yIGBxdF93aWRnZXRzIHYwLjUuMGBcblxuQ2F1c2VkIGJ5OlxuICBwcm9jZXNzIGRpZG4ndCBleGl0IHN1Y2Nlc3NmdWxseTogYC9ob21lL2FndXNjaGluL1Byb2plY3RzL2ZsYXNoZXIvdGFyZ2V0L2RlYnVnL2J1aWxkL3F0X3dpZGdldHMtYzhmNjhlNjVlMjhkZjg2OS9idWlsZC1zY3JpcHQtYnVpbGRgIChleGl0IHN0YXR1czogMSlcbiAgLS0tIHN0ZGVyclxuICBbMjAyNi0wNy0yNVQxNjowMzo1N1ogRVJST1Igcml0dWFsX2NvbW1vbjo6ZXJyb3JzXSBFcnJvcjpcbiAgWzIwMjYtMDctMjVUMTY6MDM6NTdaIEVSUk9SIHJpdHVhbF9jb21tb246OmVycm9yc10gICAgZmFpbGVkIHRvIHJ1biBjb21tYW5kOiBcInFtYWtlXCIgXCItcXVlcnlcIiBcIlFUX1ZFUlNJT05cIlxuICBbMjAyNi0wNy0yNVQxNjowMzo1N1ogRVJST1Igcml0dWFsX2NvbW1vbjo6ZXJyb3JzXSAgICBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IChvcyBlcnJvciAyKVxuXG5cbkNvbW1hbmQgZXhpdGVkIHdpdGggY29kZSAxMDEifV0sImRldGFpbHMiOnt9LCJpc0Vycm9yIjp0cnVlLCJ0aW1lc3RhbXAiOjE3ODQ5OTU0Mzc2MzB9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI3Mzc2NTg2OCIsInBhcmVudElkIjoiNmUxNjZmNWYiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjA0OjAwLjkyOFoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqVmVyaWZ5aW5nIHFtYWtlIGV4ZWN1dGFibGUgcGF0aCoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlNmY0NjhjODE5MTg0MjZlYjAxY2M1MjNjZDNcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk41dzlndE94bl9kNGJjZkFvYzNFZnpTV3Zpbl90cy1oOElyUUhhckJ1ald4QnB1LVV2V2pHMTM5bFN3ZHdOTElOaDBIYlV6RnRZYTZ0M19GcmVfbzMwZ1ZaLUYzU1F6aDl0U1BpelpydUhlUDFIbFhfcDNGMkd0MXlWeEJMN1JhdHRDNGNsNmx6b2NVNTRTLUk1Tm5aSmpoQWxaYms2bENIdVVjeTJ1eGpuRXBKUnUzcU5sN2VzLWRnaGw3Y0xQMFNkY29BUnJhWEpaRENvanE1UmNocU9KdzJOZS1udVhMMUFPVlBldU8wc3BydUFOTkpJTURMS0h3U3U0ZVVXcFFtY05fSFRlTTNLYkdwN1U0SElGZFZQWEFBSlpRWjhRalpfUVRieGg0R1RwUWF2R25sYVFVaFZZRS11T3BYMUVaRzl4dWFOZFB5TDc1RWNWa21HVjE5YXFOdUk1SVM0Mm1odU13S1NUVm90a1p6Szc2Y29obHdnTXZnSkhPa25iREM5SE5qclhUMlZfMXlEWkp1V1ItTDE5NV9IZkxoMEVmV2FHbGtWaTlEQmpMRjlzaDhSN2RTUnViOEl4Nk9yT283SV9EREFMaTh2XzdER1BtQzJROXExaEpvenptRlBkQ1BNb05KVmxqY3BzcEhDVERFRGNvc09ub1R6THhYZHdiWGFDNzdMaU54dkJRdHFmWXlLSkRXYWRmMlFMd0NGQnpqQmIybjZqWlpKSml0TUQwaWU3bHdnUWd0NkdmbTR0Wkp2aG9hNE5hTThPaHRQT3hTemlaS3lrdHhrVnBJX0dra3lvZ2ZkOHNoR3drVEVhbk15ak1wUG9YSkdXMFlqalR2N1EyUDZjdTZqWUdmaUxrV3A4R2lWR3lzcUxiUUMxRFRFT3dpOWNGYkotbG5QV0dNdGxIRmh0MlM1X0dxVE9SbnJUclpEWE5keE1ScG90TmRJS0thRi00RzY1LXlweHBBdk10ZnZPNHR0Mm05Rk5OUkdaS2l4dXJIRnBxNllQMVpWa2F0NjhNYTRfbDZPOHBIdC13SmtRakVUNV9iNFVWVThiQ0daT3haTlQyVUNtdjVxNUs1ZG1tZ2FNTjl0aTEyWE1QREZxZkxIYmpkWEMtTV9vOWNOX2JDdXhkVGt2SzdpNUwyRFpDcFFidUNuOENVekQ1U1llZkd6elJNY0hnOHJsbV9DWF9YbmJjaF9rSjdyYk56SUFWMVg4VFRKbnpvcktkZ01ta3FSVzNIWkc1ZVRaYVExbjlYdXFiYVlCRTFCckw2ZjlBeHd3ZEVGUVkxellnRmpTczJBUmhEakt3ek56N0JEZDN3TmVibHpVV1R6MHRWakV6MjVvTnFnSzhXa192RzZySjVUc254VVhuamtJcTFzNHpnPT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlZlcmlmeWluZyBxbWFrZSBleGVjdXRhYmxlIHBhdGgqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfeVltOWFidno1STRaUGhteUo2VlB6WGdPfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTcwMjA5MDgxOTFiOTI0YWM2MWZjNWJmMzY1IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImZpbmQgL3VzciAtdHlwZSBmIC1uYW1lIHFtYWtlIDI+L2Rldi9udWxsIHwgaGVhZCAtMjA7IHBrZy1jb25maWcgLS12YXJpYWJsZT1ob3N0X2JpbnMgUXQ1Q29yZTsgcGtnLWNvbmZpZyAtLXZhcmlhYmxlPXByZWZpeCBRdDVDb3JlIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjozMjYxLCJvdXRwdXQiOjg0LCJjYWNoZVJlYWQiOjk1NzQ0LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjI1LCJ0b3RhbFRva2VucyI6OTkwODksImNvc3QiOnsiaW5wdXQiOjAuMDE2MzA1LCJvdXRwdXQiOjAuMDAyNTIsImNhY2hlUmVhZCI6MC4wNDc4NzIsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA2NjY5N319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk5NTQzNzYzMywicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlNmUyMWZjODE5MTkyYTdjZTM5OTRlNjVhOGIifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYTMwOTJiZTEiLCJwYXJlbnRJZCI6IjczNzY1ODY4IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNDowNC40MTBaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX3lZbTlhYnZ6NUk0WlBobXlKNlZQelhnT3xmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU3MDIwOTA4MTkxYjkyNGFjNjFmYzViZjM2NSIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii91c3Ivc2hhcmUvcXQ1L2JpblxuL3Vzci9zaGFyZS9xdDVcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk5NTQ0NDQxMH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6Ijk3MDIxZTZjIiwicGFyZW50SWQiOiJhMzA5MmJlMSIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDQ6MDkuNzk5WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipJbnZlc3RpZ2F0aW5nIHFtYWtlIHBhY2thZ2Ugc2VwYXJhdGlvbioqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlNzc0MTc4ODE5MWFiMzZkMDE3OWUyOGYzNDFcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk41NFlDTkhZaGtyWjhsbWRfSnRjQlplcDh1dFpJalNVTTdoQnBSS3JwNzJMcjNPVXVVRG01U2ZxTFpfS3FqWTNrSUF3emZ3S1h2RWVmb0dDZHo3YnhGLWcxMGl4d2h0UUZuMDU1bzdteXBja2llSTZBemVIajA5bzc1WjJ2RkVDYTNvVW5YS1ktb3Z0X3hneWE0MnM2b05ZeFprQ0djaDdrM2V1bE1ZbTdkVlNJa2lLSjB4bHgwZkRGcVphaVJKNUQ3ZVB4SU9jLWRueW1iTHo5OTdXSnlqVlFTSnhUeFpVUi1BMkQyZFRxQnhDYTlmZXZYT3ZnMFNka1VhMHdmb1V0TlkxVkNQczBaTDc0MTBsLWpaZnVraklac19FYXY5SjhWMmcwUjVGR2tjUVBJdC13VXRnYmpLYUo1OWhTN2hiU3hfTEgxVERfVnNpWHZ5ZEF1RVY4SlFTaV9RcTQ5UDZiNFNIeWpCejVGa2kxbHJkaHlEOVRuRVNid0Z3em45bEE2WGlEUkNjWU0ydk1KY2dPcDQyd2xkZkNIU2Y0NDFyTUI1OGp3Vko4OVlaT1lKTm55a2ZhUjZ2YlpsUDJFZ3NFT3RxaGQ3cEFYckZ4N1dndURldE1udW5zN05vYmlWTlJobVFyaEZoZllkMDFtQ2Q1SXhkck9uUm5yVzdDYUdBWjVMa3VmMTN4QWxEbEdWSzBkV3R0cGdaaldGZ184U1JWZnpVZ2U5aGtUY2lJQjFOSE5hWmRJcjU5bmlzam1RV2VVYTVWbllVWFBoMkN3aW9fNW5rbVBzMzlBaXFEQnpFa0VJTlI1ekJvbmMyS09LdVFoeTlXVU5nbExJdkFaOXBEeGZTalhEeGFSQXRtN0RWSXlZMlFCY2htYjFoOU9JcHgyR3l4MGdyaGFEUTExbzZ3c2c3OWtwRW9aQVZFZFY3OHoyTmpNcm9Md2pPTnVDLWJkZy1CRkxUX0FPZlVCRk5JLV8zRURKbHlPemhjRExWR2JEZFpOX3dGTWI1dWNRa0NodFFZeFNleUYxZmdGVktMQ0NWdDE3aGt1aUFwYnkxVEliUkJETS1PUTZRcnZOcGhQc016S09lTXBnaVZVOUw1TTVTamJhN0ppcGhULVZtbDdKclBkZ0lQV0t4MVNYOXpXY1dKem40ZndlQkJtZnAwMFlsM0pwUlVreFRycGRLeDdERUx3ZEJGWWNZaGZkRkpweE5MSm01eUV4MEZyWERGN3ExQV9QTkNnMzhkdkhPNlNnZ29fR1hUVk9zU3pkdGJlVjRZMHhYMzZtaThYX2Rka18tYkF2V2I1VmxTSi1XT2FjUlZKYVhCRzJkOGt2dG96RGJRY0pWeWNSb3pOVDNtZmZyRzVwVE43c3lMVHR2MXBnQnZuWTEwRVZOSndWX1BtRFlTQTBRT0EydkN2SnBLaTNJN2k0dDNINl8yb3I1QW81dU1FbEdfd01oem4yVFZIaENYVTRJaGFXQ3F0dDVxOTVTZklydTZoRTlNaz1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkludmVzdGlnYXRpbmcgcW1ha2UgcGFja2FnZSBzZXBhcmF0aW9uKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX0gydDB2R0ZaUHRKOTRWZkxkbnZlbjFTaXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU3ODQyMDg4MTkxOWE2ZDhjZDMyMzc4YmUwOSIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJhcHQtY2FjaGUgc2VhcmNoICdxbWFrZScgfCBoZWFkIC0zMDsgcnBtIC1xYSB8IGdyZXAgJ15xdDUnIHwgc29ydCB8IGhlYWQgLTMwIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoyOTcsIm91dHB1dCI6NzksImNhY2hlUmVhZCI6OTg4MTYsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MzMsInRvdGFsVG9rZW5zIjo5OTE5MiwiY29zdCI6eyJpbnB1dCI6MC4wMDE0ODUwMDAwMDAwMDAwMDAyLCJvdXRwdXQiOjAuMDAyMzcsImNhY2hlUmVhZCI6MC4wNDk0MDgsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA1MzI2M319LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk5NTQ0NDQxNCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlNzRjNDNjODE5MTkwYjVkM2FjZWQxOTc4ZmEifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMWJiZWFkNTEiLCJwYXJlbnRJZCI6Ijk3MDIxZTZjIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNDoxMy44NzVaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX0gydDB2R0ZaUHRKOTRWZkxkbnZlbjFTaXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU3ODQyMDg4MTkxOWE2ZDhjZDMyMzc4YmUwOSIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6InFicyAtIE1vZGVybiBidWlsZCB0b29sIGZvciBzb2Z0d2FyZSBwcm9qZWN0c1xuaTU4Ni1xYnMgLSBNb2Rlcm4gYnVpbGQgdG9vbCBmb3Igc29mdHdhcmUgcHJvamVjdHNcbmRlYmhlbHBlciAtIFRvb2xzIGZvciBEZWJpYW4gUGFja2FnZXNcbnBlcmwtUlBNLVNvdXJjZS1EZXBlbmRlbmN5LUFuYWx5emVyIC0gUGVybCBsaWJyYXJ5IGZvciBmaW5kaW5nIGJ1aWxkIGRlcGVuZGVuY2llcyBmcm9tIHNvZnR3YXJlIHNvdXJjZXNcbnB5dGhvbjMtbW9kdWxlLVB5UXQtYnVpbGRlciAtIFRoZSBQRVAgNTE3IGNvbXBsaWFudCBQeVF0IGJ1aWxkIHN5c3RlbVxucHl0aG9uMy1tb2R1bGUtYmVhcnR5cGUgLSBVbmJlYXJhYmx5IGZhc3QgbmVhci1yZWFsLXRpbWUgaHlicmlkIHJ1bnRpbWUtc3RhdGljIHR5cGUtY2hlY2tpbmcgaW4gcHVyZSBQeXRob25cbnF0NS1iYXNlLWNvbW1vbi01LjE1LjE4LWFsdDEueDg2XzY0XG5xdDUtYmFzZS1kZXZlbC01LjE1LjE4LWFsdDEueDg2XzY0XG5xdDUtZGVjbGFyYXRpdmUtY29tbW9uLTUuMTUuMTgtYWx0MS54ODZfNjRcbnF0NS1kZWNsYXJhdGl2ZS1kZXZlbC01LjE1LjE4LWFsdDEueDg2XzY0XG5xdDUtcXVpY2tjb250cm9sczItNS4xNS4xOC1hbHQxLng4Nl82NFxucXQ1LXF1aWNrY29udHJvbHMyLWNvbW1vbi01LjE1LjE4LWFsdDEubm9hcmNoXG5xdDUtcXVpY2tjb250cm9sczItZGV2ZWwtNS4xNS4xOC1hbHQxLng4Nl82NFxucXQ1LXF1aWNrY29udHJvbHMtNS4xNS4xOC1hbHQxLng4Nl82NFxucXQ1LXN2Zy1jb21tb24tNS4xNS4xOC1hbHQxLm5vYXJjaFxucXQ1LXRyYW5zbGF0aW9ucy01LjE1LjE4LWFsdDEubm9hcmNoXG5xdDUtdmlydHVhbGtleWJvYXJkLTUuMTUuMTgtYWx0MS54ODZfNjRcbnF0NS12aXJ0dWFsa2V5Ym9hcmQtY29tbW9uLTUuMTUuMTgtYWx0MS5ub2FyY2hcbnF0NS13YXlsYW5kLWNvbW1vbi01LjE1LjE4LWFsdDEubm9hcmNoXG5xdDUteDExZXh0cmFzLWNvbW1vbi01LjE1LjE4LWFsdDEubm9hcmNoXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTU0NTM4NzV9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJlNzQ2NzlhYiIsInBhcmVudElkIjoiMWJiZWFkNTEiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjA0OjEzLjg3NloiLCJtZXNzYWdlIjp7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiaSBuZWVkIHlvdSB0byB3cml0ZSBpdCBpbiBxdDYifV0sInRpbWVzdGFtcCI6MTc4NDk5NTQ0NzMzMH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjRmOGIxODBiIiwicGFyZW50SWQiOiJlNzQ2NzlhYiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDQ6MjUuNjExWiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipBc3Nlc3NpbmcgUXQ2IHN1cHBvcnQgaW4gY3h4LXF0KioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU4MjdiODQ4MTkxOGUyNzc1NTE0NzY4MzY4ZlwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTjZKZGxpWm9pOEJkUTYwQkhxMDcwY0V0bDZRR3BEdW16d2FuNllpdnVHNXltZFpyWGFGb0NJY04yNkJ4ZVljUWtmS0otNkV0TDJNYzRnR2RFWFhUSnVWVTczR3B1SFRGcE9meEVuVktxUmpkRjdBQTN1OUlDNjZwS1FyNTN1UWM1c3ZldjdOSEFvQWFKNmtEZkI3cnl2Y1ZycThpRGlmRDdpMTh5aW5GZUZfczlfOFRmaXV5ZnpIYzBDUi0yUFZJd3U5M3JPNktndjQzWmt5bUhLUVFha3ZsZkxUU3Y0enU5My1EUWQtcmg4Y0h4dTY4UWRFdmVCOC1lRE5mQkJfa3hSOVhTZlB6X2N3NTVaU2tfTzRzUVAtWkJsOFU1UUl3WUE0OXhTSDZvd0U0NXhhdU1iWTdFZVRjQlhLcGJKdk1DSlBMRXVjTFJXc2duajdLV2dEVjVpVWxKRFh2bUdnSjFhcHRybl81THI3eVRTdXhjQ0dRMVdFaUZoRV81S0xWMWxoczdKODA2a092NVVDcnZHSG43OVFIUmgwQW9EUktibTVadlNBblA2UXhjaDVqdnVhMXIxd3lwU3g3Mkhta2pYbXlQR0Q0N1h0YU84cFV0WmcwaEgyS1hkcnRGLXFydnVkcjJyeU5SU25ZRjZYZER2WW5aR0EtTHZmYUJnMDVIMVNGZC16LVZGLUIxakYySEZMUWVaVHg3enF3dzdBNUZtTGdtWlcwNkIydmx4N1ZDNTlMY0lzY3NfR0dlMUtlWVVnWmVhV2JGNGpldEVPQkNTanZ0Z2c3bThLRTA4ME55TnNXUlVhN2swbzR2Z3c1b1c0X0NMWTBLbHExdHdTZmNpcmRtUXVMRTIzZ2w2czItb0JYVkJTRXIzdXJrUmFmcHJkZFBLbzVZZl9xSXBBRU00MksxVWppZXVQQkRrTE01WU1yV05NX25OQkhOcUtpSm9leWd1Y2M3WDdsQ1dKUjhfc2Eycmd1OUx0QTQ2cy1tNW9FZkkzdlFKMXloNnhfWjB3WjVrVzE0Wm9YSm45WC15UXNhNGpyNDc4cnBhbXd0Uzl6azlXUnFDUkcyZXppY1p4RUhVNDh3RVpPWVI4NS1LZEk3ZXpMUk1EY3FOUUJYbF9Da1Z4blR2bk9xbjR3aE8zWlpGTkg2Vm96RlVfcGdKVHloVm9JbTVjb0xEbTZaLUpLY0w4WEFrbWJZUGtaOEFnNlo1ek1Lb0ZaYnlnc05rSDRYNVY3dXl0N2Rld2JWOEZsUVQxOGd2QXZCOXVhMlhteGZRLXpqX0Q1TTk5T2hwRXBqRm5jRmpwa21ZVkF4WnFESTJPMnZ2Vks5WkMtd01mdXdzVFpnZFpCRHFDUmYwa0lncFRlVVA1RHhDUTFMSFZMd0lwdkhZcGdvR1BwSEJicFVjUHJiOEhESXM3eUM0Tlc1VXVueDNmeTV6RVVidHpWSllHMkpITXRsREtZV3VhZ3FyV0t1RW9NY3NvaGpGTzQwTGw1Wm1SUGVwdGpnUUR3Vld5VUhyRW9ZbFMtTXd6bUVLY19lTG9JR0ZKRzFMMkNhWHVKUElfanBqZlBkWS1aM010QlVsZVkzb1FwSXlVZG83Qi0yUnJjZGliUERqM2loczhUUXdOcF9uR2ZqNnJrY2hOd3ZjSndMT29WRUs4Q05wTHdsWnYwZmNWVGJGZ0JILU54MHd4V1JxVzRUclFINmhQaG9yNWNQVWtLV2c5Tml3eXpVZnV1LXNLc0JRU1ZyeF9SS29ZZVFoR2RVeElfc2hUcTJ6T2lVaUZKandYbXhIVGZGcUJVYXdvLWFHb0lwVkY4ZkhMSUZKUnNMTGRvNFRwOEhMT09Ndk9lbk02QW5YZTlNXzRMN0R1V2hadmxFYl8xd2xvYXdyamFmWVQ1Sm9DSXc9PVwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqQXNzZXNzaW5nIFF0NiBzdXBwb3J0IGluIGN4eC1xdCoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF8wU2ZKQUlMNGp1Q1NxTUFTdmh3Rk5tOG18ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlODk1ZTk0ODE5MTk1NmU1YjZiYzU5ZDkyNzUiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoiY2FyZ28gaW5mbyBjeHgtcXQtbGliIDI+L2Rldi9udWxsIHwgaGVhZCAtMTAwOyBjYXJnbyBpbmZvIGN4eC1xdCAyPi9kZXYvbnVsbCB8IGhlYWQgLTcwOyBjYXJnbyBzZWFyY2ggcXQ2IC0tbGltaXQgMjAiLCJ0aW1lb3V0IjoxMjB9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9hOHJsS045TEpzSXQ2RU4yZHdpdUpydWl8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlODk1ZWE4ODE5MWJkNGEyZTBhOWQ4MmRiNDkiLCJuYW1lIjoid2ViX3NlYXJjaCIsImFyZ3VtZW50cyI6eyJxdWVyeSI6IlJ1c3QgUXQ2IFdpZGdldHMgYmluZGluZ3MgY3JhdGUgbm8gQysrIGN4eC1xdCBRQXBwbGljYXRpb24gUVdpZGdldCJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF8yQVdvbml6dExudFRwUXIzek9McktkNWh8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlODk1ZWI0ODE5MTlkNzBiYWY4ZmRhMDc0NTUiLCJuYW1lIjoid2ViX3NlYXJjaCIsImFyZ3VtZW50cyI6eyJxdWVyeSI6IlJ1c3QgUXQ2IGJpbmRpbmdzIHF0X3dpZGdldHMgcml0dWFsIFF0NiBzdXBwb3J0In19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0Ijo3MzgsIm91dHB1dCI6MjI3LCJjYWNoZVJlYWQiOjk4ODE2LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjk2LCJ0b3RhbFRva2VucyI6OTk3ODEsImNvc3QiOnsiaW5wdXQiOjAuMDAzNjksIm91dHB1dCI6MC4wMDY4MSwiY2FjaGVSZWFkIjowLjA0OTQwOCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDU5OTA4fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1NDUzODc4LCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU4MDk2NTg4MTkxYWNjNWU5Y2Q5ZTEwNGEzZSJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJlMWRjNzU0ZSIsInBhcmVudElkIjoiNGY4YjE4MGIiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjA0OjM1LjA3OFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfMFNmSkFJTDRqdUNTcU1BU3Zod0ZObThtfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTg5NWU5NDgxOTE5NTZlNWI2YmM1OWQ5Mjc1IiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiY3h4LXF0LWxpYlxuUXQgdHlwZXMgZm9yIGludGVncmF0aW5nIGBjeHgtcXRgIGNyYXRlIHdpdGggYGN4eGBcbnZlcnNpb246IDAuOS4xXG5saWNlbnNlOiBNSVQgT1IgQXBhY2hlLTIuMFxucnVzdC12ZXJzaW9uOiAxLjg1LjBcbmRvY3VtZW50YXRpb246IGh0dHBzOi8vZG9jcy5ycy9jeHgtcXQtbGliLzAuOS4xXG5yZXBvc2l0b3J5OiBodHRwczovL2dpdGh1Yi5jb20vS0RBQi9jeHgtcXQvXG5jcmF0ZXMuaW86IGh0dHBzOi8vY3JhdGVzLmlvL2NyYXRlcy9jeHgtcXQtbGliLzAuOS4xXG5mZWF0dXJlczpcbiArZGVmYXVsdCAgICAgICAgICAgICAgPSBbXVxuICBieXRlcyAgICAgICAgICAgICAgICA9IFtkZXA6Ynl0ZXNdXG4gIGNocm9ubyAgICAgICAgICAgICAgID0gW2RlcDpjaHJvbm9dXG4gIGZ1bGwgICAgICAgICAgICAgICAgID0gW3F0X2Z1bGwsIHNlcmRlLCB1cmwsIHV1aWQsIHRpbWUsIHJnYiwgaHR0cCwgY2hyb25vLCBieXRlcywgaW1hZ2UtdjAtMjQsIGltYWdlLXYwLTI1XVxuICBodHRwICAgICAgICAgICAgICAgICA9IFtkZXA6aHR0cF1cbiAgaW1hZ2UtdjAtMjQgICAgICAgICAgPSBbZGVwOmltYWdlLXYwLTI0XVxuICBpbWFnZS12MC0yNSAgICAgICAgICA9IFtkZXA6aW1hZ2UtdjAtMjVdXG4gIGxpbmtfcXRfb2JqZWN0X2ZpbGVzID0gW2N4eC1xdC1idWlsZC9saW5rX3F0X29iamVjdF9maWxlc11cbiAgcXRfZnVsbCAgICAgICAgICAgICAgPSBbcXRfZ3VpLCBxdF9xbWwsIHF0X3F1aWNrY29udHJvbHNdXG4gIHF0X2d1aSAgICAgICAgICAgICAgID0gW11cbiAgcXRfcW1sICAgICAgICAgICAgICAgPSBbXVxuICBxdF9xdWlja2NvbnRyb2xzICAgICA9IFtdXG4gIHJnYiAgICAgICAgICAgICAgICAgID0gW2RlcDpyZ2JdXG4gIHNlcmRlICAgICAgICAgICAgICAgID0gW2RlcDpzZXJkZV1cbiAgdGltZSAgICAgICAgICAgICAgICAgPSBbZGVwOnRpbWVdXG4gIHVybCAgICAgICAgICAgICAgICAgID0gW2RlcDp1cmxdXG4gIHV1aWQgICAgICAgICAgICAgICAgID0gW2RlcDp1dWlkXVxuY3h4LXF0ICNjeHggI2ZmaSAjUU1MICNRdFxuU2FmZSBpbnRlcm9wIGJldHdlZW4gUnVzdCBhbmQgUXRcbnZlcnNpb246IDAuOS4xXG5saWNlbnNlOiBNSVQgT1IgQXBhY2hlLTIuMFxucnVzdC12ZXJzaW9uOiAxLjg1LjBcbmRvY3VtZW50YXRpb246IGh0dHBzOi8vZG9jcy5ycy9jeHgtcXQvMC45LjFcbmhvbWVwYWdlOiBodHRwczovL2tkYWIuZ2l0aHViLmlvL2N4eC1xdC9ib29rL1xucmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL0tEQUIvY3h4LXF0L1xuY3JhdGVzLmlvOiBodHRwczovL2NyYXRlcy5pby9jcmF0ZXMvY3h4LXF0LzAuOS4xXG5xdHJzID0gXCIwLjQuMlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHF0cnMgLSBBIHR5cGUtc2FmZSwgYnVpbGRlci1wYXR0ZXJuLWRyaXZlbiBRdDYgR1VJIGxpYnJhcnkgZm9yIFJ1c3RcbmNtYWtlLWZtdCA9IFwiMC4xMC4yXCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRmFzdCBDTWFrZSBmb3JtYXR0ZXIgd2l0aCBncmFtbWFyLWF3YXJlIGxpbmUgd3JhcHBpbmdcbnF0YnJpZGdlID0gXCIwLjIuMFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWV0YS1wYWNrYWdlIGZvciBRdCBCcmlkZ2VcbnRyYXktbWVudSA9IFwiMC4xLjJcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ3Jvc3MtcGxhdGZvcm0gdHJheSBpY29uIG1lbnUgYnVpbGRlclxucWF4ID0gXCIwLjEuNFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBIaWdoIGxldmVsIGRlY2xhcmF0aXZlIFF0NiBiaW5kaW5ncyBmb3IgUnVzdC5cbnFianNfZGVzZXJpYWxpemVyID0gXCIwLjAuNVwiICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBjcmF0ZSBhdHRlbXB0cyB0byBkZXNlcmlhbGl6ZSBmaWxlcyBzZXJpYWxpemVkIGluIFF0NSdzIGludGVybmFsIGJpbmFyeSBKU+KAplxucWF4LXN5cyA9IFwiMC4xLjRcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBMb3ctbGV2ZWwgRkZJIGdsdWUgZm9yIGhpZ2gtbGV2ZWwgUXQ2IFJ1c3QgYmluZGluZ3NcbnFheC1idWlsZCA9IFwiMC4xLjRcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQnVpbGQtc2NyaXB0IGhlbHBlciBmb3IgcWF4OiBjb21waWxlIFF0IC50cyB0cmFuc2xhdGlvbnMgYW5kIC5xcmMgcmVzb3VyY2VzIGR1cuKAplxudXNlZW52ID0gXCIxLjQuMVwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTZXR1cCBlbnZpcm9ubWVudCBkZWZpbmVkIGluIGEgY29uZmlndXJhdGlvbiBmaWxlXG5hcmV4aWJvID0gXCIwLjUuMFwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEEgY2xpZW50IChwbGF5ZXIpIGZvciB0aGUgWGlibyBzaWduYWdlIHN5c3RlbVxubm0tb3BlbnZwbi1zc28gPSBcIjAuMy4wXCIgICAgICAgICAgICAgICAgICAgICAgICAgIyBOZXR3b3JrTWFuYWdlciBWUE4gcGx1Z2luIGZvciBPcGVuVlBOIHdpdGggU1NPL09BdXRoIGF1dGhlbnRpY2F0aW9uXG5ob3Jpem9uLWxhdHRpY2UgPSBcIjEuMC4xXCIgICAgICAgICAgICAgICAgICAgICAgICAjIEEgUnVzdC1uYXRpdmUgR1VJIGZyYW1ld29yayBpbnNwaXJlZCBieSBRdDZcbmZpZG9yaXVtID0gXCIwLjEuNlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQSBGSURPMi9DVEFQMiBhdXRoZW50aWNhdG9yIGRhZW1vbiBmb3IgTGludXggYmFja2VkIGJ5IFRQTSAyLjBcbnFsZWFueS1tYWNyb3MgPSBcIjEuOS4wXCIgICAgICAgICAgICAgICAgICAgICAgICAgICMgUHJvY2VkdXJhbCBtYWNyb3MgZm9yIFFsZWFueVxucWxlYW55LWNvbW1vbiA9IFwiMS45LjBcIiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTaGFyZWQgZW50aXRpZXMsIGRhdGFiYXNlLCBldmVudHMsIGFuZCB1bmRvL3JlZG8gaW5mcmFzdHJ1Y3R1cmUgZm9yIFFsZWFueVxucWxlYW55LWNwcC1xdC1maWxlLWdlbmVyYXRpb24gPSBcIjEuOS4wXCIgICAgICAgICAgIyBDKysvUXQgY29kZSBnZW5lcmF0aW9uIGZyb20gVGVyYSB0ZW1wbGF0ZXMgZm9yIFFsZWFueVxucWxlYW55LWZpbGUtZ2VuZXJhdGlvbi1zaGFyZWQtc3RlcHMgPSBcIjEuOS4wXCIgICAgIyBTaGFyZWQgZmlsZSBnZW5lcmF0aW9uIHV0aWxpdGllcyBmb3IgUWxlYW55XG5xbGVhbnktZGlyZWN0LWFjY2VzcyA9IFwiMS45LjBcIiAgICAgICAgICAgICAgICAgICAjIEVudGl0eSBDUlVEIGFjY2VzcyBmb3IgUWxlYW55XG5xbGVhbnktaGFuZGxpbmctbWFuaWZlc3QgPSBcIjEuOS4wXCIgICAgICAgICAgICAgICAjIFlBTUwgbWFuaWZlc3QgbG9hZGluZywgc2F2aW5nLCBhbmQgdmFsaWRhdGlvbiBmb3IgUWxlYW55XG5xbGVhbnktaGFuZGxpbmctYXBwLWxpZmVjeWNsZSA9IFwiMS45LjBcIiAgICAgICAgICAjIEFwcGxpY2F0aW9uIGluaXRpYWxpemF0aW9uIGFuZCBjbGVhbnVwIGZvciBRbGVhbnlcbi4uLiBhbmQgNSBjcmF0ZXMgbW9yZSAodXNlIC0tbGltaXQgTiB0byBzZWUgbW9yZSlcbm5vdGU6IHRvIGxlYXJuIG1vcmUgYWJvdXQgYSBwYWNrYWdlLCBydW4gYGNhcmdvIGluZm8gPG5hbWU+YFxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1NDc1MDc4fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNTQ4MWI3ZmMiLCJwYXJlbnRJZCI6ImUxZGM3NTRlIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNDozNS4wNzhaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX2E4cmxLTjlMSnNJdDZFTjJkd2l1SnJ1aXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU4OTVlYTg4MTkxYmQ0YTJlMGE5ZDgyZGI0OSIsInRvb2xOYW1lIjoid2ViX3NlYXJjaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IjEuIEdpdEh1YiAtIEtEQUIvY3h4LXF0OiBTYWZlIGludGVyb3AgYmV0d2VlbiBSdXN0IGFuZCBRdFxuaHR0cHM6Ly9naXRodWIuY29tL0tEQUIvY3h4LXF0XG5cbjIuIEdldHRpbmcgU3RhcnRlZCAtIENYWC1RdCBEb2N1bWVudGF0aW9uIC0gR2l0SHViIFBhZ2VzXG5odHRwczovL2tkYWIuZ2l0aHViLmlvL2N4eC1xdC9ib29rL2dldHRpbmctc3RhcnRlZC9pbmRleC5odG1sXG5cbjMuIEludHJvZHVjdGlvbiAtIENYWC1RdCBEb2N1bWVudGF0aW9uIC0gR2l0SHViIFBhZ2VzXG5odHRwczovL2tkYWIuZ2l0aHViLmlvL2N4eC1xdC9ib29rL1xuXG40LiBjeHgtcXQtbGliIOKAlCBzeXN0ZW0gbGlicmFyeSBpbnRlcmZhY2UgZm9yIFJ1c3QgLy8gTGliLnJzXG5odHRwczovL2xpYi5ycy9jcmF0ZXMvY3h4LXF0LWxpYlxuXG41LiBjeHgtcXQvUkVBRE1FLm1kIGF0IG1haW4gwrcgS0RBQi9jeHgtcXQgwrcgR2l0SHViXG5odHRwczovL2dpdGh1Yi5jb20vS0RBQi9jeHgtcXQvYmxvYi9tYWluL1JFQURNRS5tZCJ9XSwiZGV0YWlscyI6eyJyZXN1bHRzIjpbeyJ0aXRsZSI6IkdpdEh1YiAtIEtEQUIvY3h4LXF0OiBTYWZlIGludGVyb3AgYmV0d2VlbiBSdXN0IGFuZCBRdCIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9LREFCL2N4eC1xdCIsInNuaXBwZXQiOiIifSx7InRpdGxlIjoiR2V0dGluZyBTdGFydGVkIC0gQ1hYLVF0IERvY3VtZW50YXRpb24gLSBHaXRIdWIgUGFnZXMiLCJ1cmwiOiJodHRwczovL2tkYWIuZ2l0aHViLmlvL2N4eC1xdC9ib29rL2dldHRpbmctc3RhcnRlZC9pbmRleC5odG1sIiwic25pcHBldCI6IiJ9LHsidGl0bGUiOiJJbnRyb2R1Y3Rpb24gLSBDWFgtUXQgRG9jdW1lbnRhdGlvbiAtIEdpdEh1YiBQYWdlcyIsInVybCI6Imh0dHBzOi8va2RhYi5naXRodWIuaW8vY3h4LXF0L2Jvb2svIiwic25pcHBldCI6IiJ9LHsidGl0bGUiOiJjeHgtcXQtbGliIOKAlCBzeXN0ZW0gbGlicmFyeSBpbnRlcmZhY2UgZm9yIFJ1c3QgLy8gTGliLnJzIiwidXJsIjoiaHR0cHM6Ly9saWIucnMvY3JhdGVzL2N4eC1xdC1saWIiLCJzbmlwcGV0IjoiIn0seyJ0aXRsZSI6ImN4eC1xdC9SRUFETUUubWQgYXQgbWFpbiDCtyBLREFCL2N4eC1xdCDCtyBHaXRIdWIiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vS0RBQi9jeHgtcXQvYmxvYi9tYWluL1JFQURNRS5tZCIsInNuaXBwZXQiOiIifV19LCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1NDc1MDc4fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZmVmNmJkOTkiLCJwYXJlbnRJZCI6IjU0ODFiN2ZjIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNDozNS4wNzhaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsXzJBV29uaXp0TG50VHBRcjN6T0xyS2Q1aHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU4OTVlYjQ4MTkxOWQ3MGJhZjhmZGEwNzQ1NSIsInRvb2xOYW1lIjoid2ViX3NlYXJjaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IjEuIFJpdHVhbCAtIFJpdHVhbFxuaHR0cHM6Ly9ydXN0LXF0LmdpdGh1Yi5pby9cblxuMi4gR2l0SHViIC0gcnVzdC1xdC9yaXR1YWw6IFVzZSBDKysgbGlicmFyaWVzIGZyb20gUnVzdCDCtyBHaXRIdWJcbmh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LXF0L3JpdHVhbFxuXG4zLiBHZXR0aW5nIHN0YXJ0ZWQgLSBSaXR1YWxcbmh0dHBzOi8vcnVzdC1xdC5naXRodWIuaW8vcXQvZ2V0dGluZ19zdGFydGVkL1xuXG40LiByaXR1YWw6IEMrKyBsaWJyYXJ5IGJpbmRpbmdzIGZvciBSdXN0IC0gbnVtZmVyLmNvbVxuaHR0cHM6Ly9udW1mZXIuY29tL3J1c3QtcXQvcml0dWFsXG5cbjUuIFJ1c3QtUXQgwrcgR2l0SHViXG5odHRwczovL2dpdGh1Yi5jb20vcnVzdC1xdCJ9XSwiZGV0YWlscyI6eyJyZXN1bHRzIjpbeyJ0aXRsZSI6IlJpdHVhbCAtIFJpdHVhbCIsInVybCI6Imh0dHBzOi8vcnVzdC1xdC5naXRodWIuaW8vIiwic25pcHBldCI6IiJ9LHsidGl0bGUiOiJHaXRIdWIgLSBydXN0LXF0L3JpdHVhbDogVXNlIEMrKyBsaWJyYXJpZXMgZnJvbSBSdXN0IMK3IEdpdEh1YiIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LXF0L3JpdHVhbCIsInNuaXBwZXQiOiIifSx7InRpdGxlIjoiR2V0dGluZyBzdGFydGVkIC0gUml0dWFsIiwidXJsIjoiaHR0cHM6Ly9ydXN0LXF0LmdpdGh1Yi5pby9xdC9nZXR0aW5nX3N0YXJ0ZWQvIiwic25pcHBldCI6IiJ9LHsidGl0bGUiOiJyaXR1YWw6IEMrKyBsaWJyYXJ5IGJpbmRpbmdzIGZvciBSdXN0IC0gbnVtZmVyLmNvbSIsInVybCI6Imh0dHBzOi8vbnVtZmVyLmNvbS9ydXN0LXF0L3JpdHVhbCIsInNuaXBwZXQiOiIifSx7InRpdGxlIjoiUnVzdC1RdCDCtyBHaXRIdWIiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vcnVzdC1xdCIsInNuaXBwZXQiOiIifV19LCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1NDc1MDc4fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZDIwZjZmMzkiLCJwYXJlbnRJZCI6ImZlZjZiZDk5IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNDo0MS4wNDRaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU5NmI3NDg4MTkxYjNlMjBhMTAyMGRlNTExZFwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTjZZanpWRlNYbHI3b250SDJTYUV4YVYxUmp6aE1kSXdQVXRYTmVJekFrMkQ0ci1DMUlPbFlpQ1ptTlF3dGI1TVB4eW1BMWd5NzRNMDFlVUJIcnc4ekwwYjNBRGh2aXpjc3pqdWZHUzdoWVF3Tjk3SnVTUl8tODJKZ1g1ZkZXbzY3X2Q4RDVPT0FDU1BQUDlLcUZ1NkY1MFZTNHVvc0NZZEdrLU5EaUd4UWFEOGw2UXRPVnd5OVcxaFEydkxIRVQtUFNhbTN0ck02R3drUVNLTlFLcGVTNXk4WWNIOE8teTNjVWxIc2lBVWNYSklOaUd5WTMybndKZzI2YzFiQlA3QUJISk50SmZPVjZCVlF1b3ZkUmFXVS11UG5OcHdqSDJGN1UzamFPTW5NMVBQVThZSm5UZi14UXNPNFNYUzBRVndZSG1WTTVPWWFSOGpJQjhHZzROeFl3WEhVeFMwQTBydmRsSHRCQmZDRURhY0FfZWRWUVFfclJjMVUxVzFvV25hSmMxU1RIWVZ2ZnJIX09vaFN0VjdOb0VxbTdOOTNEcHFYZGhTWVZZZVZkaDh1elpNM1FWVEJXbFRtS280amJmVDdrWUYwdnU5ODhnWExwRWQwZ0RERndudVdMQTdFQTdiOHpkTVNaNjN1NmJTU0hJbWMzVW5PLUw2NXBvdGdseDNYa2VxeldSNms5cVhMVnZfc3drUXYyaU5JcGIxZHRvdlotTkVGby1PRXpvSkVKam9na3FnVXlBYkxPd3poN0dFVmVKX2ZiLVBxMFlNMVdkamhxMDlQSTJMSXQ4YXFueEkwTnlVUWxHWGh2MmZJV1d5MTZuVUN2MFdabmlQLUZUVDdUT0VndDctOV85bFJUMTRnOFpRdjFSSHRHRzNRYjd0MTBJWGJhcG04cE1aR01pRUtWc3BNTURxR1FxTVAyVkRZcHhFODhrVklRa2VYODdZRDFWU2RVNTB1NURoM3Z6YzFLX1BqOFUzcnYwUlRsRkstTFlNRHM1TDJ5cGw0bFBFX0Uxc1VjQXhfdndLZnZWVnBYZktQSkx1N0dpcDVGV1o3WjNhNE04dnQzNW8wTjJzNFRaSEptenNGQUNOYkRvYnlIbkk4S01jMFBtdGJuSm9JVWN3Q2Q1WHZjdUdBcU9UQ3ltWHg2UXhHdkVXNks0V0tyTDUzQUViOGxxY1BNTlRxRllFMEJQcjhSbTJGMmJBZDJPREptU3JtQzFQdy1VaUJlRlZrM1ZPZjJwWGU4M2Mxb25pNHd6NW41VXNwYXpVekNaXCIsXCJzdW1tYXJ5XCI6W119In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfRVFHVFBZcXNnaldxampvZ3lHdVV3UTVQfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTk4ZDVkYzgxOTE5Y2I4ODcxMDJmNWNkMGM1IiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImNhcmdvIGluZm8gcXRycyAyPi9kZXYvbnVsbCB8IGhlYWQgLTEwMDsgY2FyZ28gaW5mbyBxYXggMj4vZGV2L251bGwgfCBoZWFkIC0xMDAiLCJ0aW1lb3V0IjoxMjB9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF8zc3ZjR2Y0bVo0Um1YclQwN2dBeEpkdXp8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlOThkNWYwODE5MWI4ZWVlMzI5MDJjNmRkYjQiLCJuYW1lIjoid2ViX3NlYXJjaCIsImFyZ3VtZW50cyI6eyJxdWVyeSI6InF0cnMgUnVzdCBRdDYgR1VJIGV4YW1wbGVzIGdpdGh1YiJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9GaGd5Smt5UFBSdEx0UUpPVW43V0t6Sm18ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlOThkNWY4ODE5MWFhMWFhOGMwZjA4Yzc3MTciLCJuYW1lIjoid2ViX3NlYXJjaCIsImFyZ3VtZW50cyI6eyJxdWVyeSI6InFheCBSdXN0IFF0NiB3aWRnZXRzIGV4YW1wbGVzIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoyMjUzLCJvdXRwdXQiOjExNywiY2FjaGVSZWFkIjo5ODgxNiwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoxMCwidG90YWxUb2tlbnMiOjEwMTE4NiwiY29zdCI6eyJpbnB1dCI6MC4wMTEyNjUsIm91dHB1dCI6MC4wMDM1MSwiY2FjaGVSZWFkIjowLjA0OTQwOCwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDY0MTgzfX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1NDc1MDgxLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU5M2FmMmM4MTkxODJlZDI5ZjNiZjA5ZGQxYSJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIxMGQzMDQ3MyIsInBhcmVudElkIjoiZDIwZjZmMzkiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjA0OjQ5LjQ2MFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfRVFHVFBZcXNnaldxampvZ3lHdVV3UTVQfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZTk4ZDVkYzgxOTE5Y2I4ODcxMDJmNWNkMGM1IiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoicXRycyAjcXQgI2d1aSAjcXQ2ICN3aWRnZXRzICNjeHhcbnF0cnMgLSBBIHR5cGUtc2FmZSwgYnVpbGRlci1wYXR0ZXJuLWRyaXZlbiBRdDYgR1VJIGxpYnJhcnkgZm9yIFJ1c3RcbnZlcnNpb246IDAuNC4yXG5saWNlbnNlOiBNSVQgT1IgQXBhY2hlLTIuMFxucnVzdC12ZXJzaW9uOiB1bmtub3duXG5kb2N1bWVudGF0aW9uOiBodHRwczovL2RvY3MucnMvcXRycy8wLjQuMlxucmVwb3NpdG9yeTogaHR0cHM6Ly9naXRodWIuY29tL3poYW5naGFveHZhbi9xdHJzXG5jcmF0ZXMuaW86IGh0dHBzOi8vY3JhdGVzLmlvL2NyYXRlcy9xdHJzLzAuNC4yXG5xYXggI2d1aSAjcXQgI3VpXG5IaWdoIGxldmVsIGRlY2xhcmF0aXZlIFF0NiBiaW5kaW5ncyBmb3IgUnVzdC5cbnZlcnNpb246IDAuMS40XG5saWNlbnNlOiBNSVQgT1IgQXBhY2hlLTIuMFxucnVzdC12ZXJzaW9uOiB1bmtub3duXG5kb2N1bWVudGF0aW9uOiBodHRwczovL2RvY3MucnMvcWF4LzAuMS40XG5yZXBvc2l0b3J5OiBodHRwczovL2dpdGh1Yi5jb20vbW9uc2xlci1zb2Z0d2FyZS9xYXhcbmNyYXRlcy5pbzogaHR0cHM6Ly9jcmF0ZXMuaW8vY3JhdGVzL3FheC8wLjEuNFxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1NDg5NDYwfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNjNkZmQxMzkiLCJwYXJlbnRJZCI6IjEwZDMwNDczIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNDo0OS40NjBaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsXzNzdmNHZjRtWjRSbVhyVDA3Z0F4SmR1enxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU5OGQ1ZjA4MTkxYjhlZWUzMjkwMmM2ZGRiNCIsInRvb2xOYW1lIjoid2ViX3NlYXJjaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IjEuIHF0cnMg4oCUIFJ1c3Qtc3R5bGUgUXQ2IGJpbmRpbmdzIC0gR2l0SHViXG5odHRwczovL2dpdGh1Yi5jb20vemhhbmdoYW94dmFuL3F0cnNcblxuMi4gR2l0SHViIC0gS0RBQi9jeHgtcXQ6IFNhZmUgaW50ZXJvcCBiZXR3ZWVuIFJ1c3QgYW5kIFF0XG5odHRwczovL2dpdGh1Yi5jb20vS0RBQi9jeHgtcXRcblxuMy4gTGFuZ3VhZ2UgQmluZGluZ3MgLSBRdCBXaWtpXG5odHRwczovL3dpa2kucXQuaW8vTGFuZ3VhZ2VfQmluZGluZ3NcblxuNC4gQnVpbGQgYSBkZXNrdG9wIGFwcCB3aXRoIFF0IGFuZCBSdXN0IC0gREVWIENvbW11bml0eVxuaHR0cHM6Ly9kZXYudG8vbG9ncm9ja2V0L2J1aWxkLWEtZGVza3RvcC1hcHAtd2l0aC1xdC1hbmQtcnVzdC0xY2ZpXG5cbjUuIFJ1c3QgcXQ2IFByb2plY3RzIHwgTGliSHVudFxuaHR0cHM6Ly93d3cubGliaHVudC5jb20vbC9ydXN0L3RvcGljL3F0NiJ9XSwiZGV0YWlscyI6eyJyZXN1bHRzIjpbeyJ0aXRsZSI6InF0cnMg4oCUIFJ1c3Qtc3R5bGUgUXQ2IGJpbmRpbmdzIC0gR2l0SHViIiwidXJsIjoiaHR0cHM6Ly9naXRodWIuY29tL3poYW5naGFveHZhbi9xdHJzIiwic25pcHBldCI6IiJ9LHsidGl0bGUiOiJHaXRIdWIgLSBLREFCL2N4eC1xdDogU2FmZSBpbnRlcm9wIGJldHdlZW4gUnVzdCBhbmQgUXQiLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vS0RBQi9jeHgtcXQiLCJzbmlwcGV0IjoiIn0seyJ0aXRsZSI6Ikxhbmd1YWdlIEJpbmRpbmdzIC0gUXQgV2lraSIsInVybCI6Imh0dHBzOi8vd2lraS5xdC5pby9MYW5ndWFnZV9CaW5kaW5ncyIsInNuaXBwZXQiOiIifSx7InRpdGxlIjoiQnVpbGQgYSBkZXNrdG9wIGFwcCB3aXRoIFF0IGFuZCBSdXN0IC0gREVWIENvbW11bml0eSIsInVybCI6Imh0dHBzOi8vZGV2LnRvL2xvZ3JvY2tldC9idWlsZC1hLWRlc2t0b3AtYXBwLXdpdGgtcXQtYW5kLXJ1c3QtMWNmaSIsInNuaXBwZXQiOiIifSx7InRpdGxlIjoiUnVzdCBxdDYgUHJvamVjdHMgfCBMaWJIdW50IiwidXJsIjoiaHR0cHM6Ly93d3cubGliaHVudC5jb20vbC9ydXN0L3RvcGljL3F0NiIsInNuaXBwZXQiOiIifV19LCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1NDg5NDYwfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiMmI4ZmEyYzgiLCJwYXJlbnRJZCI6IjYzZGZkMTM5IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNDo0OS40NjFaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX0ZoZ3lKa3lQUFJ0THRRSk9VbjdXS3pKbXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGU5OGQ1Zjg4MTkxYWExYWE4YzBmMDhjNzcxNyIsInRvb2xOYW1lIjoid2ViX3NlYXJjaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IjEuIEdpdEh1YiAtIG1vbnNsZXItc29mdHdhcmUvcWF4OiBIaWdoIGxldmVsIGRlY2xhcmF0aXZlIFF0NiBiaW5kaW5ncyBmb3IgLi4uXG5odHRwczovL2dpdGh1Yi5jb20vbW9uc2xlci1zb2Z0d2FyZS9xYXhcblxuMi4gR2l0SHViIC0gemhhbmdoYW94dmFuL3F0cnM6IHF0cnMgLSBBIHR5cGUtc2FmZSwgYnVpbGRlci1wYXR0ZXJuLWRyaXZlbiAuLi5cbmh0dHBzOi8vZ2l0aHViLmNvbS96aGFuZ2hhb3h2YW4vcXRyc1xuXG4zLiBRdCBXaWRnZXRzIEV4YW1wbGVzIHwgUXQgV2lkZ2V0cyB8IFF0IDYuMTEuMVxuaHR0cHM6Ly9kb2MucXQuaW8vcXQtNi9leGFtcGxlcy13aWRnZXRzLmh0bWxcblxuNC4gcWF4LWJ1aWxkIOKAlCBDYXJnbyBsaWJyYXJ5IC8vIExpYi5yc1xuaHR0cHM6Ly9saWIucnMvY3JhdGVzL3FheC1idWlsZFxuXG41LiBRdCBFeGFtcGxlcyBBbmQgVHV0b3JpYWxzIHwgUXQgNi4xMVxuaHR0cHM6Ly9kb2MucXQuaW8vcXQtNi9xdGV4YW1wbGVzYW5kdHV0b3JpYWxzLmh0bWwifV0sImRldGFpbHMiOnsicmVzdWx0cyI6W3sidGl0bGUiOiJHaXRIdWIgLSBtb25zbGVyLXNvZnR3YXJlL3FheDogSGlnaCBsZXZlbCBkZWNsYXJhdGl2ZSBRdDYgYmluZGluZ3MgZm9yIC4uLiIsInVybCI6Imh0dHBzOi8vZ2l0aHViLmNvbS9tb25zbGVyLXNvZnR3YXJlL3FheCIsInNuaXBwZXQiOiIifSx7InRpdGxlIjoiR2l0SHViIC0gemhhbmdoYW94dmFuL3F0cnM6IHF0cnMgLSBBIHR5cGUtc2FmZSwgYnVpbGRlci1wYXR0ZXJuLWRyaXZlbiAuLi4iLCJ1cmwiOiJodHRwczovL2dpdGh1Yi5jb20vemhhbmdoYW94dmFuL3F0cnMiLCJzbmlwcGV0IjoiIn0seyJ0aXRsZSI6IlF0IFdpZGdldHMgRXhhbXBsZXMgfCBRdCBXaWRnZXRzIHwgUXQgNi4xMS4xIiwidXJsIjoiaHR0cHM6Ly9kb2MucXQuaW8vcXQtNi9leGFtcGxlcy13aWRnZXRzLmh0bWwiLCJzbmlwcGV0IjoiIn0seyJ0aXRsZSI6InFheC1idWlsZCDigJQgQ2FyZ28gbGlicmFyeSAvLyBMaWIucnMiLCJ1cmwiOiJodHRwczovL2xpYi5ycy9jcmF0ZXMvcWF4LWJ1aWxkIiwic25pcHBldCI6IiJ9LHsidGl0bGUiOiJRdCBFeGFtcGxlcyBBbmQgVHV0b3JpYWxzIHwgUXQgNi4xMSIsInVybCI6Imh0dHBzOi8vZG9jLnF0LmlvL3F0LTYvcXRleGFtcGxlc2FuZHR1dG9yaWFscy5odG1sIiwic25pcHBldCI6IiJ9XX0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTU0ODk0NjF9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIxZDMxMDJiOSIsInBhcmVudElkIjoiMmI4ZmEyYzgiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjA0OjU0LjgwOFoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfeWZFUVczdEtsOU1pTTV1TEg5ZGtqSTJWfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWE2ODAwMDgxOTFhMTc5OGVjYjhhMjVjMWIzIiwibmFtZSI6IndlYl9mZXRjaCIsImFyZ3VtZW50cyI6eyJ1cmwiOiJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vemhhbmdoYW94dmFuL3F0cnMvbWFpbi9SRUFETUUubWQiLCJtYXhDaGFycyI6MjAwMDB9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6ODQwLCJvdXRwdXQiOjQwLCJjYWNoZVJlYWQiOjEwMDg2NCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjowLCJ0b3RhbFRva2VucyI6MTAxNzQ0LCJjb3N0Ijp7ImlucHV0IjowLjAwNDIwMDAwMDAwMDAwMDAwMSwib3V0cHV0IjowLjAwMTIwMDAwMDAwMDAwMDAwMDEsImNhY2hlUmVhZCI6MC4wNTA0MzIsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA1NTgzMn19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk5NTQ4OTQ2NCwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlYTIwNjI0ODE5MWI0OWEwMmQ0NDQyODUxNzYifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNTVmNTc5OGMiLCJwYXJlbnRJZCI6IjFkMzEwMmI5IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNDo1NS4xOTdaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX3lmRVFXM3RLbDlNaU01dUxIOWRrakkyVnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGVhNjgwMDA4MTkxYTE3OThlY2I4YTI1YzFiMyIsInRvb2xOYW1lIjoid2ViX2ZldGNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiU291cmNlOiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vemhhbmdoYW94dmFuL3F0cnMvbWFpbi9SRUFETUUubWRcblxuIyBxdHJzIOKAlCBSdXN0LXN0eWxlIFF0NiBiaW5kaW5nc1xuXG5bIVtDcmF0ZXMuaW9dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vY3JhdGVzL3YvcXRycy5zdmcpXShodHRwczovL2NyYXRlcy5pby9jcmF0ZXMvcXRycylcblshW0RvY3MucnNdKGh0dHBzOi8vZG9jcy5ycy9xdHJzL2JhZGdlLnN2ZyldKGh0dHBzOi8vZG9jcy5ycy9xdHJzKVxuWyFbTGljZW5zZTogTUlUIE9SIEFwYWNoZS0yLjBdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvbGljZW5zZS1NSVQlMkZBcGFjaGUtLTIuMC1ibHVlLnN2ZyldKExJQ0VOU0UpXG5cbiFbRGVtb10oaHR0cHM6Ly9naXRodWIuY29tL3poYW5naGFveHZhbi9xdHJzL2Jsb2IvbWFpbi9hc3NldHMvZGVtby5wbmcpXG5cbkEgdHlwZS1zYWZlLCBidWlsZGVyLXBhdHRlcm4tZHJpdmVuIFF0NiBHVUkgbGlicmFyeSBmb3IgUnVzdC4gQnVpbHQgb25cbltgY3h4YF0oaHR0cHM6Ly9jeHgucnMpIGZvciB6ZXJvLWNvc3QgQysrIGludGVyb3AsIHdpdGggUkFJSSBtZW1vcnlcbm1hbmFnZW1lbnQgYW5kIHNpZ25hbC9jYWxsYmFjayBicmlkZ2luZy5cblxuIyMgRmVhdHVyZXNcblxuLSBCdWlsZGVyIHBhdHRlcm4g4oCUIGNoYWluIGAudGl0bGUoXCJYXCIpLnNpemUoODAwLCA2MDApLmJ1aWxkKClgXG4tIFJBSUkgY2xlYW51cCDigJQgYXV0b21hdGljIEMrKyBkZWxldGlvbiwgcGFyZW50LWNoaWxkIGF3YXJlIChubyBkb3VibGUtZnJlZSlcbi0gU2lnbmFsIGJyaWRnaW5nIOKAlCBRdCBzaWduYWxzIGludm9rZSBSdXN0IGNsb3N1cmVzIHZpYSBhIGdsb2JhbCB0cmFtcG9saW5lXG4tIExheW91dCBvd25lcnNoaXAg4oCUIGFkZGluZyBhIHdpZGdldCB0byBhIGxheW91dCB0cmFuc2ZlcnMgb3duZXJzaGlwXG4tIC51aSBmaWxlIGxvYWRpbmcg4oCUIGxvYWQgUXQgRGVzaWduZXIgYC51aWAgZmlsZXMgYXQgcnVudGltZVxuLSBaZXJvIHVuc2FmZSBpbiBwdWJsaWMgQVBJIOKAlCBhbGwgRkZJIGlzIGVuY2Fwc3VsYXRlZFxuXG4jIyBRdWljayBTdGFydFxuXG5gYGBydXN0XG51c2UgcXRyczo6cHJlbHVkZTo6KjtcblxuZm4gbWFpbigpIHtcbiAgICBsZXQgYXBwID0gQXBwbGljYXRpb246Om5ldygpO1xuXG4gICAgbGV0IG11dCB3aW5kb3cgPSBXaWRnZXQ6Om5ldygpXG4gICAgICAgIC50aXRsZShcIkhlbGxvLCBxdHJzIVwiKVxuICAgICAgICAuc2l6ZSg0MDAsIDMwMClcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBsZXQgbXV0IGxheW91dCA9IFZCb3hMYXlvdXQ6OndpdGhfcGFyZW50KCZ3aW5kb3cpO1xuXG4gICAgbGV0IGJ0biA9IFB1c2hCdXR0b246Om5ldyhcIkNsaWNrIG1lXCIpXG4gICAgICAgIC5vbl9jbGlja2VkKHx8IHByaW50bG4hKFwiY2xpY2tlZCFcIikpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIGxldCBsYWJlbCA9IExhYmVsOjpuZXcoXCJXZWxjb21lIVwiKS5idWlsZCgpO1xuXG4gICAgbGF5b3V0LmFkZChidG4pO1xuICAgIGxheW91dC5hZGQobGFiZWwpO1xuXG4gICAgd2luZG93LnNldF9sYXlvdXQoJmxheW91dCk7XG4gICAgd2luZG93LnNob3coKTtcblxuICAgIGFwcC5leGVjKCk7XG59XG5gYGBcblxuWW91IGNhbiBzZWUgW2RlbW8ucnNdKGh0dHBzOi8vZ2l0aHViLmNvbS96aGFuZ2hhb3h2YW4vcXRycy9ibG9iL21haW4vZXhhbXBsZXMvZGVtby9kZW1vLnJzKSBmb3IgZGV0YWlscy5cblxuIyMgV2lkZ2V0c1xuXG4jIyMgV2luZG93cyAmIENvbnRhaW5lcnNcbnwgVHlwZSB8IFF0IENsYXNzIHwgU2lnbmFscyB8XG58LS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tfFxufCBgQXBwbGljYXRpb25gIHwgYFFBcHBsaWNhdGlvbmAgfCDigJQgfFxufCBgV2lkZ2V0YCB8IGBRV2lkZ2V0YCB8IOKAlCB8XG58IGBNYWluV2luZG93YCB8IGBRTWFpbldpbmRvd2AgfCDigJQgfFxufCBgR3JvdXBCb3hgIHwgYFFHcm91cEJveGAgfCDigJQgfFxufCBgVGFiV2lkZ2V0YCB8IGBRVGFiV2lkZ2V0YCB8IGBvbl9jdXJyZW50X2NoYW5nZWQoaTMyKWAgfFxufCBgU3RhY2tlZFdpZGdldGAgfCBgUVN0YWNrZWRXaWRnZXRgIHwgYG9uX2N1cnJlbnRfY2hhbmdlZChpMzIpYCB8XG58IGBTY3JvbGxBcmVhYCB8IGBRU2Nyb2xsQXJlYWAgfCDigJQgfFxufCBgU3BsaXR0ZXJgIHwgYFFTcGxpdHRlcmAgfCDigJQgfFxuXG4jIyMgQnV0dG9ucyAmIENvbnRyb2xzXG58IFR5cGUgfCBRdCBDbGFzcyB8IFNpZ25hbHMgfFxufC0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLXxcbnwgYFB1c2hCdXR0b25gIHwgYFFQdXNoQnV0dG9uYCB8IGBvbl9jbGlja2VkYCB8XG58IGBUb29sQnV0dG9uYCB8IGBRVG9vbEJ1dHRvbmAgfCBgb25fY2xpY2tlZGA8YnI+YG9uX3RvZ2dsZWQoYm9vbClgIHxcbnwgYENoZWNrQm94YCB8IGBRQ2hlY2tCb3hgIHwgYG9uX3RvZ2dsZWQoYm9vbClgIHxcbnwgYFJhZGlvQnV0dG9uYCB8IGBRUmFkaW9CdXR0b25gIHwgYG9uX3RvZ2dsZWQoYm9vbClgIHxcbnwgYFNsaWRlcmAgfCBgUVNsaWRlcmAgfCBgb25fdmFsdWVfY2hhbmdlZChpMzIpYCB8XG58IGBTcGluQm94YCB8IGBRU3BpbkJveGAgfCBgb25fdmFsdWVfY2hhbmdlZChpMzIpYCB8XG58IGBDb21ib0JveGAgfCBgUUNvbWJvQm94YCB8IGBvbl9jdXJyZW50X3RleHRfY2hhbmdlZGA8YnI+YG9uX2N1cnJlbnRfaW5kZXhfY2hhbmdlZChpMzIpYCB8XG5cbiMjIyBUZXh0ICYgRGlzcGxheVxufCBUeXBlIHwgUXQgQ2xhc3MgfCBTaWduYWxzIHxcbnwtLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS18XG58IGBMYWJlbGAgfCBgUUxhYmVsYCB8IOKAlCB8XG58IGBMaW5lRWRpdGAgfCBgUUxpbmVFZGl0YCB8IGBvbl9yZXR1cm5fcHJlc3NlZGAgfFxufCBgVGV4dEVkaXRgIHwgYFFUZXh0RWRpdGAgfCBgb25fdGV4dF9jaGFuZ2VkYCB8XG58IGBQbGFpblRleHRFZGl0YCB8IGBRUGxhaW5UZXh0RWRpdGAgfCBgb25fdGV4dF9jaGFuZ2VkYDxicj5gb25fY3Vyc29yX3Bvc2l0aW9uX2NoYW5nZWRgIHxcbnwgYFRleHRCcm93c2VyYCB8IGBRVGV4dEJyb3dzZXJgIHwgYG9uX2FuY2hvcl9jbGlja2VkKFN0cmluZylgPGJyPmBvbl90ZXh0X2NoYW5nZWRgIHxcbnwgYFByb2dyZXNzQmFyYCB8IGBRUHJvZ3Jlc3NCYXJgIHwg4oCUIHxcblxuIyMjIEl0ZW0gVmlld3NcbnwgVHlwZSB8IFF0IENsYXNzIHwgU2lnbmFscyB8XG58LS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tfFxufCBgTGlzdFdpZGdldGAgfCBgUUxpc3RXaWRnZXRgIHwgYG9uX2l0ZW1fY2xpY2tlZChTdHJpbmcpYDxicj5gb25faXRlbV9kb3VibGVfY2xpY2tlZChTdHJpbmcpYDxicj5gb25fY3VycmVudF9pdGVtX2NoYW5nZWQoU3RyaW5nKWAgfFxufCBgVGFibGVXaWRnZXRgIHwgYFFUYWJsZVdpZGdldGAgfCBgb25fY2VsbF9jbGlja2VkYDxicj5gb25fY2VsbF9kb3VibGVfY2xpY2tlZGA8YnI+YG9uX2N1cnJlbnRfY2VsbF9jaGFuZ2VkYCB8XG58IGBUcmVlV2lkZ2V0YCB8IGBRVHJlZVdpZGdldGAgfCBgb25faXRlbV9jbGlja2VkKFN0cmluZylgPGJyPmBvbl9pdGVtX2RvdWJsZV9jbGlja2VkKFN0cmluZylgPGJyPmBvbl9pdGVtX2V4cGFuZGVkKFN0cmluZylgPGJyPmBvbl9pdGVtX2NvbGxhcHNlZChTdHJpbmcpYDxicj5gb25fY3VycmVudF9pdGVtX2NoYW5nZWQoU3RyaW5nKWAgfFxuXG4jIyMgRGF0ZSAmIFRpbWVcbnwgVHlwZSB8IFF0IENsYXNzIHwgU2lnbmFscyB8XG58LS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tfFxufCBgRGF0ZUVkaXRgIHwgYFFEYXRlRWRpdGAgfCBgb25fZGF0ZV9jaGFuZ2VkKFN0cmluZylgIHxcbnwgYFRpbWVFZGl0YCB8IGBRVGltZUVkaXRgIHwgYG9uX3RpbWVfY2hhbmdlZChTdHJpbmcpYCB8XG58IGBEYXRlVGltZUVkaXRgIHwgYFFEYXRlVGltZUVkaXRgIHwgYG9uX2RhdGVfdGltZV9jaGFuZ2VkKFN0cmluZylgIHxcbnwgYENhbGVuZGFyV2lkZ2V0YCB8IGBRQ2FsZW5kYXJXaWRnZXRgIHwgYG9uX3NlbGVjdGlvbl9jaGFuZ2VkYDxicj5gb25fYWN0aXZhdGVkKFN0cmluZylgIHxcblxuIyMjIE1lbnVzICYgVG9vbGJhcnNcbnwgVHlwZSB8IFF0IENsYXNzIHwgU2lnbmFscyB8XG58LS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tfFxufCBgQWN0aW9uYCB8IGBRQWN0aW9uYCB8IGBvbl90cmlnZ2VyZWQoYm9vbClgPGJyPmBvbl90b2dnbGVkKGJvb2wpYCB8XG58IGBNZW51YCB8IGBRTWVudWAgfCDigJQgfFxufCBgTWVudUJhcmAgfCBgUU1lbnVCYXJgIHwg4oCUIHxcbnwgYFRvb2xCYXJgIHwgYFFUb29sQmFyYCB8IHBlci1hY3Rpb24gY2FsbGJhY2tzIHZpYSBgYWRkX2FjdGlvbmAgfFxufCBgU3RhdHVzQmFyYCB8IGBRU3RhdHVzQmFyYCB8IOKAlCB8XG5cbiMjIyBEaWFsb2dzXG58IFR5cGUgfCBRdCBDbGFzcyB8IE5vdGVzIHxcbnwtLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tfFxufCBgTWVzc2FnZUJveGAgfCBgUU1lc3NhZ2VCb3hgIHwgQnVpbGRlciArIGBleGVjKClgLCBzdGF0aWMgYGFib3V0KClgIHxcbnwgYEZpbGVEaWFsb2dgIHwgYFFGaWxlRGlhbG9nYCB8IGBvcGVuX2ZpbGVgLCBgc2F2ZV9maWxlYCwgYHNlbGVjdF9kaXJlY3RvcnlgIChzdGF0aWMpIHxcbnwgYFByb2dyZXNzRGlhbG9nYCB8IGBRUHJvZ3Jlc3NEaWFsb2dgIHwgQnVpbGRlciB3aXRoIGBzZXRfdmFsdWVgIC8gYHdhc19jYW5jZWxlZGAgfFxufCBgSW5wdXREaWFsb2dgIHwgYFFJbnB1dERpYWxvZ2AgfCBgZ2V0X3RleHRgLCBgZ2V0X2ludGAsIGBnZXRfZG91YmxlYCwgYGdldF9pdGVtYCAoc3RhdGljKSB8XG58IGBNZXNzYWdlQm94YCB8IGBRTWVzc2FnZUJveGAgfCBgaW5mb3JtYXRpb25gLCBgd2FybmluZ2AsIGBjcml0aWNhbGAsIGBxdWVzdGlvbmAgKHN0YXRpYykgfFxuXG4jIyMgTGF5b3V0c1xufCBUeXBlIHwgUXQgQ2xhc3MgfCBTaWduYWxzIHxcbnwtLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS18XG58IGBWQm94TGF5b3V0YCB8IGBRVkJveExheW91dGAgfCDigJQgfFxufCBgSEJveExheW91dGAgfCBgUUhCb3hMYXlvdXRgIHwg4oCUIHxcbnwgYEdyaWRMYXlvdXRgIHwgYFFHcmlkTGF5b3V0YCB8IOKAlCB8XG5cbiMjIyBTdHlsaW5nICYgVXRpbGl0aWVzXG58IFR5cGUgfCBRdCBDbGFzcyB8IFNpZ25hbHMgfFxufC0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLXxcbnwgYEZyYW1lYCB8IGBRRnJhbWVgIHwg4oCUIChzaGFwZS9zaGFkb3cpIHxcbnwgYEZvbnRgIHwgYFFGb250YCB8IOKAlCAoZmFtaWx5LCBzaXplLCB3ZWlnaHQgYnVpbGRlcikgfFxufCBgRm9udEV4dGAgfCAqKHRyYWl0KSogfCBgZm9udCgpYCAvIGBzZXRfZm9udCgpYCBibGFua2V0LWltcGwgfFxufCBgU2hvcnRjdXRgIHwgYFFTaG9ydGN1dGAgfCBgb25fYWN0aXZhdGVkKClgIChRT2JqZWN0KSB8XG5cbiMjIyBTeXN0ZW1cbnwgVHlwZSB8IFF0IENsYXNzIHwgU2lnbmFscyB8XG58LS0tLS0tfC0tLS0tLS0tLS18LS0tLS0tLS0tfFxufCBgVGltZXJgIHwgYFFUaW1lcmAgfCBgb25fdGltZW91dGA8YnI+YHNpbmdsZV9zaG90KG1zLCBmbilgIHxcbnwgYFN5c3RlbVRyYXlJY29uYCB8IGBRU3lzdGVtVHJheUljb25gIHwgYG9uX2FjdGl2YXRlZChUcmF5SWNvblJlYXNvbilgIHxcbnwgYFVpTG9hZGVyYCB8IGBRVWlMb2FkZXJgIHwgYC51aWAgZmlsZSBsb2FkaW5nIHxcbnwgYFBvaW50YCB8IGBRUG9pbnRgIHwg4oCUIHxcblxuIyMgUHJlcmVxdWlzaXRlc1xuXG5RdDYgd2l0aCBkZXZlbG9wbWVudCBoZWFkZXJzOlxuXG58IFBsYXRmb3JtIHwgSW5zdHJ1Y3Rpb25zIHxcbnwtLS18LS0tfFxufCBEZWJpYW4gLyBVYnVudHUgfCBgc3VkbyBhcHQgaW5zdGFsbCBxdDYtYmFzZS1kZXYgcXQ2LWRlY2xhcmF0aXZlLWRldmAgfFxufCBGZWRvcmEgfCBgc3VkbyBkbmYgaW5zdGFsbCBxdDYtcXRiYXNlLWRldmVsIHF0Ni1xdGRlY2xhcmF0aXZlLWRldmVsYCB8XG58IEFyY2ggfCBgc3VkbyBwYWNtYW4gLVMgcXQ2LWJhc2UgcXQ2LWRlY2xhcmF0aXZlYCB8XG58IG1hY09TIChIb21lYnJldykgfCBgYnJldyBpbnN0YWxsIHF0QDZgIHxcbnwgV2luZG93cyB8IEluc3RhbGwgZnJvbSBbcXQuaW9dKGh0dHBzOi8vd3d3LnF0LmlvL2Rvd25sb2FkLW9wZW4tc291cmNlKSBvciB2aWEgW3ZjcGtnXShodHRwczovL3ZjcGtnLmlvKSB8XG5cblJlbWVtYmVyIHRvIHNldCBhIGBQQVRIYCBlbnZpcm9ubWVudCB0byB0ZWxsIGBxdHJzYCB3aGVyZSB0aGUgYHFtYWtlYCBhcmUuXG5cbiMjIEluc3RhbGxhdGlvblxuXG5BZGQgdG8geW91ciBgQ2FyZ28udG9tbGA6XG5cbmBgYHRvbWxcbltkZXBlbmRlbmNpZXNdXG5xdHJzID0gXCIwLjQuMlwiXG5gYGBcblxuIyMgTWVtb3J5IG1hbmFnZW1lbnRcblxuV2lkZ2V0cyBhcmUgZGVsZXRlZCBhdXRvbWF0aWNhbGx5IG9uIGBEcm9wYCDigJQgdW5sZXNzIHRoZXkgaGF2ZSBhIFF0XG5wYXJlbnQgKHNldCBleHBsaWNpdGx5IG9yIHZpYSBsYXlvdXQpLiBJbiB0aGF0IGNhc2UgUXQncyBwYXJlbnQtY2hpbGQgdHJlZVxuaGFuZGxlcyBkZWxldGlvbiwgcHJldmVudGluZyBkb3VibGUtZnJlZS5cblxuYGBgXG5XaWRnZXQgY3JlYXRlZCB3aXRob3V0IHBhcmVudCAgLT4gIERyb3AgZGVsZXRlcyBDKysgb2JqZWN0XG5XaWRnZXQgY3JlYXRlZCB3aXRoIHBhcmVudCAgICAgLT4gIERyb3Agc2tpcHMgZGVsZXRpb24gKFF0IGhhbmRsZXMgaXQpXG5XaWRnZXQgYWRkZWQgdG8gbGF5b3V0ICAgICAgICAgLT4gIExheW91dCB0YWtlcyBvd25lcnNoaXAsIERyb3Agc2tpcHMgZGVsZXRpb25cbmBgYFxuXG4jIyBUaHJlYWQgc2FmZXR5XG5cblF0IEdVSSBjbGFzc2VzIGFyZSAqKm5vdCB0aHJlYWQtc2FmZSoqLiBBbGwgd2lkZ2V0IGNyZWF0aW9uLCBtdXRhdGlvbiwgYW5kXG50aGUgZXZlbnQgbG9vcCBtdXN0IGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuXG5cbiMjIExpY2Vuc2VcblxuTUlUIE9SIEFwYWNoZS0yLjAg4oCUIHNlZSBbTElDRU5TRS1NSVRdKExJQ0VOU0UtTUlUKSBhbmQgW0xJQ0VOU0UtQVBBQ0hFXShMSUNFTlNFLUFQQUNIRSkuIn1dLCJkZXRhaWxzIjp7InVybCI6Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS96aGFuZ2hhb3h2YW4vcXRycy9tYWluL1JFQURNRS5tZCIsImNvbnRlbnRUeXBlIjoidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIsInRydW5jYXRlZCI6ZmFsc2V9LCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1NDk1MTk3fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNTBhNmQxYWMiLCJwYXJlbnRJZCI6IjU1ZjU3OThjIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNToxNS4zNDNaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkNoZWNraW5nIFF0NiBhdmFpbGFiaWxpdHkgd2l0aCBwa2ctY29uZmlnKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGViNDkyODA4MTkxOWNkMDY2MzE1MDkxN2NlOFwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTjYxNV9ScHZkRWJFYVZnVU4zYk1UbFV0RUlmOUI4QTZFMXpNMVBjS0Y3Q1dPOFJGSDd6VUhSQWxmeDI5NWZRR2JWMGlKengtX3E0UUZEY0Q0TFVkcDdsd1pxN1I3eFNjN1poSVJBODFZQk5Xa1poOXB2UVZsVHVIRmlwS1kxQkwySFd0T3RpOWh2TzNGWEdsR2ZnLW1xQW01M21sVlN2RWRnOEZSYnM2aG9zSTI5bklHMDVERmtFVEF1ZVZnalZQVGdWUzRQdG1rOGF4X0pQTm9sWTlJTEVFbnRsb3ZKOEtMTXIweVU5Q2RVaDJLQkI4TWxSSWl5YUJtOUpZczJ3d0N1ejZvNFExQUFuNXRMS3ZQVjI1aDFaamF3TXFlZTBTLUdNcWVhbWUwMTdrMFZ0aW9YdFQ2aTBaSnFmVmdoYnRENmZmSGVsYjJnVGFZaDNTQktEeXVhMnNyNlhHRUZkbEtmaEZOSGZhT1E3TWtFb1JPcmc3MDBIQ0pYek85Z25FdE02T3o4ZlVOOU1QRFZ0QURQOTNtRFRsNnowLTlOUlZNTVViUnhpbVVHd3lHekNyWXVOT25nYnhJN2txXzNqRmJMZjBkaFdxLUU5bUt3X0g0ZnRpQnExUTRUUW1nQ21KVWZnYTYtczRHRWE4LTh2TzA2ZGR0QXNqdk1VUTdwUnRBWUVoUXZzU2VhcGxEazdSUWZrYkxLcUxUaFJPV21TT0c4WDZxUTBpU3JVNk9kS2ZHTGNBbEtIVElUWUd6bzRlTUg5SWhGVGtSR1JGTDg0SkhpTXVhZ2hNdENXOHNuQm1sclBwczRVZUU0X1JReDd5dlQzRm9mcVhJY05uR0VlbXlUY1ZQdFNJa0Qycm5hU2V5U3U5UkY2M3N2SHBEZXZBdEhVcEQtMWxCWjAwVl90MWp5TzR3bXItREY2VklOZlpnVWh5dzFkN3hiaEREaUhDbTk0WTRXZTZaVWJOQ0hQellQYUtpS0NtRnFzb2ozbFB3MV8tckFaYVh2NUZWTmh1TW1EdF9PS0M4S0c0N0FoQUxmZDZ3NjNla3FzbjVRTlIyWkdIY2oyODZTekp0X0w3Y0M0N1lBbHdEZUdlZFQ0UkNYZm9QcVlhZEVncHM5SFJKNU5JNW5rZUwxY2NQMFhEOVlxZzViYi15bnR1ajAxSTh2OEYxMkVHdm1BSEp1Si1ZYzhvV1pFcy11dmZhQjU0RHFqdE00MXpHMnM5VngwM0EwVGZzSFVObHo0cllqYU41RW1KUTlkNGlMSFpJclh0a2pWVnFRcDZBU09mZVF2eTJjcnNFVEF5TWY5NU15d3paWEd3d2RtVVJZMy1rTT1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkNoZWNraW5nIFF0NiBhdmFpbGFiaWxpdHkgd2l0aCBwa2ctY29uZmlnKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX3FYNVoyNDJVbklWd0pvU05ZSHN4ak5rRnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGViNWEyOGM4MTkxYjg2ODVlYTdhYTY2NTM0MCIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJwa2ctY29uZmlnIC0tbW9kdmVyc2lvbiBRdDZDb3JlIFF0NldpZGdldHMgMj4mMTsgY29tbWFuZCAtdiBxbWFrZTY7IGFwdC1jYWNoZSBzZWFyY2ggJ15xdDYtYmFzZS1kZXZlbCQnIn19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0IjoyOTAyLCJvdXRwdXQiOjY3LCJjYWNoZVJlYWQiOjEwMDg2NCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoxNSwidG90YWxUb2tlbnMiOjEwMzgzMywiY29zdCI6eyJpbnB1dCI6MC4wMTQ1MSwib3V0cHV0IjowLjAwMjAxLCJjYWNoZVJlYWQiOjAuMDUwNDMyLCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNjY5NTJ9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTU0OTUyMDAsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWE3OTg2NDgxOTE4ODE4YTEyYWFlMWU3ZjNmIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjFiOTAwY2ZiIiwicGFyZW50SWQiOiI1MGE2ZDFhYyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDU6MTguNDc4WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9xWDVaMjQyVW5JVndKb1NOWUhzeGpOa0Z8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlYjVhMjhjODE5MWI4Njg1ZWE3YWE2NjUzNDAiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJQYWNrYWdlIFF0NkNvcmUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgcGtnLWNvbmZpZyBzZWFyY2ggcGF0aC5cblBlcmhhcHMgeW91IHNob3VsZCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGBRdDZDb3JlLnBjJ1xudG8gdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZVxuTm8gcGFja2FnZSAnUXQ2Q29yZScgZm91bmRcblBhY2thZ2UgUXQ2V2lkZ2V0cyB3YXMgbm90IGZvdW5kIGluIHRoZSBwa2ctY29uZmlnIHNlYXJjaCBwYXRoLlxuUGVyaGFwcyB5b3Ugc2hvdWxkIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgYFF0NldpZGdldHMucGMnXG50byB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlXG5ObyBwYWNrYWdlICdRdDZXaWRnZXRzJyBmb3VuZFxucXQ2LWJhc2UtZGV2ZWwgLSBEZXZlbG9wbWVudCBmaWxlcyBmb3IgcXQ2LWJhc2VcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk5NTUxODQ3OH19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjQ2N2E1OGRjIiwicGFyZW50SWQiOiIxYjkwMGNmYiIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDU6MjUuNjc3WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipJbnNwZWN0aW5nIFF0IFJTIGNyYXRlIGFuZCBleGFtcGxlcyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlYzExZWM0ODE5MTgxYjI0MWNiYzYzNGQ5YzVcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk43RUY1R0NRam5JWEtJbUZLckJkWlQ0ajJXTDB5MUF3N2RsVng1QnA1bUpCWC1yY1hWOXJ5SXFiMnJtOFBCYVpub3R0Y1lwRWVxUFotV3VPOV9ISDIwRVV5bW51bk4yTkJMTk9XVDhqZW1JZ2dPSXlYQWtDQUtZcmE0dUJBUFBkTTdRZ05Md0JwMm53WXBDSEI2UE9CTzg3TndYbGktTHpwWkpvck9DcXRKV1VTZEpjclQxQVplRWNJcUN0T0RjOVZTRFNjLUZQT1ZVU1kzbWkzRzJKaWtZVWhsV2tYbXZ4NGNNdDQ1REVLOExaWTFYY2c2TjFPc0tpTEhVd2FaWWNyc1pPRW1YeVhXWUpUX1BZeGhLT2JmZlN5WnQ3UkZIM3JGY21ESzJndlhKZ1VzRkZYenRyYVBHRGowb2FiaTVGUTFpZm1SYzM1QnBZOEIxblNlMnJCZ2I3X1UwMzRib1B6X01rRHNfWllGMFBhQm9oX2UzbVVkSXJiemp2dnFQSERORklfdFhpN2YwX29RMER0eGVYd0p5ODhFaWJzM0Y1TXRmbS1LTUg4MExGamwzMFh4TzV2SjZEUjFic0d0MXRQc2FUZFhlZnJNOFJ3QmhDY1ltYmtuUlJXMUptOFpjMUdKRm01N2JEUDBiQTFmcmlWMHdGRmllR0plMzRPdm9iWHFCZlRZbklta2tyYUFsVXM5ekQ1WkZ4SnhxSUdkU1h0ZEhBX3g3OFhsY0RjV3dmVVdSU2RPU3V1aW14TV9IbGFjdUVRcGt3VU5zd2FHUE40bE4xVlBHeFY3WWRNSU9rRTFkdk02ZVRKU2pxdzZkazQyeHVQUEZrUm5oU21iWDdFNFY3SFJEUG9OS3VMaFJ2SUN1MGNBUWxxLWdpUjMzUUNqMFd2NmNOTk45UjdPZHAwZ2plc1BYRDJhUGNNaS1jbURLUjhIRWtpWnVYY0F2Z0JGTWtONlRDR1pRY1A1WVc1a0tnY1A4MTZ0eEhqWjNFclRFNXhhNUdXTUtfS3lBb0pWbmRpUGdqVXVtUVhPa0Q5SFI5R2M1WTRKZkpBZE42SmVxaE43bUlVYmY3Nm5fRjdJbFVHT04yNXJ1bm52dWxQM2REb215VUpjc1V1X1ZXQjFiU1F6LVdEMmRHSHp0cm1sS3NXRTRuTEdBcjdDOUFZU2xpRGFCWmtfUVN6a1dGR3N2VEFaTmhicFYwWjF3QW8tTlVjcVFrdFpyamtNbFNESVZlSjI5MUR3YjF0Y1VRanBteHdtZ0VPSWFDalNDdVU3ZHVhckxEY2JXN2lrSjlFNTNuY29rdm0wS09tUV9BUTlBck5oMDhGM3BPd1g1aVM0amtxYlIwUDd2YkRPd3V2QlRuTTFvR3VMRVM5S1djWE9OeVZfRE1hZkIzdzdialg3T2o3d0oyQWpqTFZnWDhoWkZMWm9GcHdPN1ZvNDQtaWhINVd2VUFVTlZzMzF6elc5SXJxdUlOdXQ2UVlBNXllVEY0cXI5dGNPS18tMkxiQ0dqdFRJZnNxczdicXVvWldqVFwiLFwic3VtbWFyeVwiOlt7XCJ0eXBlXCI6XCJzdW1tYXJ5X3RleHRcIixcInRleHRcIjpcIioqSW5zcGVjdGluZyBRdCBSUyBjcmF0ZSBhbmQgZXhhbXBsZXMqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfV1FlS1cwZEU4NkJHb2VLU3NtMDhPM2NifGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWM0MTJkMDgxOTFhNGRhZjI3ZGI1MWJiOWZhIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6ImZpbmQgfi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjIC1tYXhkZXB0aCAyIC10eXBlIGQgLW5hbWUgJ3F0cnMtMC40LjInOyBjYXJnbyBpbmZvIHF0cnMgPi9kZXYvbnVsbCJ9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6MTAzNCwib3V0cHV0Ijo5MiwiY2FjaGVSZWFkIjoxMDI5MTIsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MzcsInRvdGFsVG9rZW5zIjoxMDQwMzgsImNvc3QiOnsiaW5wdXQiOjAuMDA1MTcsIm91dHB1dCI6MC4wMDI3NiwiY2FjaGVSZWFkIjowLjA1MTQ1NTk5OTk5OTk5OTk5NSwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDU5Mzg1OTk5OTk5OTk5OTk0fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1NTE4NDgyLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGViZWRmMmM4MTkxYTdlZjhiMjhhODg2ZDk4ZCJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIyODc2NTZkMiIsInBhcmVudElkIjoiNDY3YTU4ZGMiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjA1OjI2LjU0OVoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfV1FlS1cwZEU4NkJHb2VLU3NtMDhPM2NifGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWM0MTJkMDgxOTFhNGRhZjI3ZGI1MWJiOWZhIiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yXG4gICAgVXBkYXRpbmcgY3JhdGVzLmlvIGluZGV4XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTU1MjY1NDl9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4ZDRmZjBmMSIsInBhcmVudElkIjoiMjg3NjU2ZDIiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjA1OjMyLjIyN1oiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqUmV2aWV3aW5nIGRlbW8vd2lkZ2V0cyBBUEkqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWM5YThhYzgxOTFiNjRhNGIxZDJjMGEzOWUwXCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpON01YbVBZUzcxS1pfazdCWlQ5WnU5enkyTkh3Sm40NXBfZXgwR1dBdnRfUXVWVXdqSnZxTVF1Y0RDWG5XajMxbHZaSGVBT21UZjR0Q2VUZ1ZvTTZrQkFuY1VfNEh5NFZuTXozYzBSMl9SNlFzQjFucXpEYk5aem1KZzZGeXVWbG1TaURLZzRYNm5vRVM1ZVduYzIzSk9wcm9TMFJPb0VzdWJ6Um5aSDhoV2d4eXI1NE5CNDN1b2Q2YU9VUGV1X096dU1vU1FBUkNzV2xNa1ptMHZJbTM0YXkwNVVBbEgtN2c4UHJHZUcxVDhoeTA1OGxPajUzMzNTbWRuRGJWa29rMUNHb1RhSWVDbzUwLTI4SUtiQ0VfbnFDbTVQZTZsamxEWEMzR3k1c2R3YThUTHNJU2JaQU1PM2F2NDA1Tk1hUFhYOFJMQ0ZDcTRJODhiX2pvN3kwd1dkOUtrSmcwNHV4Z3N2T1pFZjBtbmNZOTh6MXgycXJNckxwQVFXUHl4U2MtQUtwekNnRzYyc013VGlXblVkVFJiandUVG9WWDhVOGVxNUJqWnRjQUoyeFJLamxEZjFNcWtJeGhVa0o2SUg1M3Z5Z1dnYUY0cU5TMFZxWVlWOVZnUUhSVXEyNUJOVnJESmt1VFBWN2ZTeXhCdkJIVWs0NWd4QVlqMURQajlRek05aW9hTGpOUmxtWWFXZFRGRWgydWg0amg2ZEJwd3VfU1VTb2o0VGpQQk9PYWx1RVlnV3c3OUQ4MjlaYXFTdXFBNjQ5a00zSDdYSjE0TWdhc2VjWlN5VXZiVnZTTjU0Z0lTbkhDZXUwdUYtaHBjNjU2Z0RHcktKTEtIV3h3TEZkUjNmbkYwZGxTVXduZ2JZVFVGbmNHNzVZTmNpWlBEMXY1VW5KenY5RUpFVmZocXJOMG10RUZvQmxBT3RaQ0ZzQnZUM2dhYkJaajRMb05EVzZrQzJCMVJTYmJqTkpOek5tNU9BMHg2WC1ZdjhTTGNCZVJVWER6cTZiLUdjaDJ4bkJxc014Ry1veW1mNXhyV3FVRjBiclJqVVVFMmQ3aFdGMFhyY05xOTJVNzl1OHFmeS1xT25tbm5weGtmbGYyYTJzNHNlMFRHZHBmWXJ0X2VkajduQmtDSk5qZkczd0VMeVRUUmlHdk5ZbENPT0ZvZlFzalFBREZBZkFVZHdJd1BKZ3V5VDRlY1VVZlVUdXZIMTJtS3NxU2lSbUdSMi1EZUNmeUtWdGtVZWc0RTJFR21mNTNlYTZlTFZWalI5N21KdTFxYzhcIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlJldmlld2luZyBkZW1vL3dpZGdldHMgQVBJKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX1h3cTZoa3RKTEtEYm5VVjA1QjRxbHB3MnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGVjYzE0OTg4MTkxOGU4M2E0OTAwOGQzMWU4ZCIsIm5hbWUiOiJiYXNoIiwiYXJndW1lbnRzIjp7ImNvbW1hbmQiOiJmaW5kIH4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy8qL3F0cnMtMC40LjIgLW1heGRlcHRoIDMgLXR5cGUgZiB8IHNvcnQgfCBoZWFkIC04MCJ9fSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF9rWnZFZnZaaU9VT1dFd29EYmhsbk5Fakx8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlY2MxNGFjODE5MWJiMDRmZjU1MzNhNjViYTMiLCJuYW1lIjoicmVhZCIsImFyZ3VtZW50cyI6eyJwYXRoIjoiL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9saWIucnMiLCJsaW1pdCI6MjAwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjExODAsIm91dHB1dCI6MTMzLCJjYWNoZVJlYWQiOjEwMjkxMiwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjo5LCJ0b3RhbFRva2VucyI6MTA0MjI1LCJjb3N0Ijp7ImlucHV0IjowLjAwNTkwMDAwMDAwMDAwMDAwMSwib3V0cHV0IjowLjAwMzk5MDAwMDAwMDAwMDAwMDUsImNhY2hlUmVhZCI6MC4wNTE0NTU5OTk5OTk5OTk5OTUsImNhY2hlV3JpdGUiOjAsInRvdGFsIjowLjA2MTM0Nn19LCJzdG9wUmVhc29uIjoidG9vbFVzZSIsInRpbWVzdGFtcCI6MTc4NDk5NTUyNjU1MiwicmVzcG9uc2VJZCI6InJlc3BfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlYzZmZGI4ODE5MWJmMThmMWI4MjliODYzZGMifX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiM2I5Y2QzZTYiLCJwYXJlbnRJZCI6IjhkNGZmMGYxIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNTozMi4yMzNaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX1h3cTZoa3RKTEtEYm5VVjA1QjRxbHB3MnxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGVjYzE0OTg4MTkxOGU4M2E0OTAwOGQzMWU4ZCIsInRvb2xOYW1lIjoiYmFzaCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9hc3NldHMvZGVtby5wbmdcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9hc3NldHMvaWNvbi5wbmdcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9idWlsZC5yc1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL0NhcmdvLmxvY2tcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi8uY2FyZ28tb2tcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9DYXJnby50b21sXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvQ2FyZ28udG9tbC5vcmlnXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvLmNhcmdvX3Zjc19pbmZvLmpzb25cbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9DSEFOR0VMT0cubWRcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9DT05UUklCVVRJTkdfV0lER0VULm1kXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvZXhhbXBsZXMvYmFzaWMvYmFzaWMucnNcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9leGFtcGxlcy9kZW1vL2RlbW8ucnNcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9leGFtcGxlcy9lZGl0b3IvZWRpdG9yLnJzXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvZXhhbXBsZXMvdWkvdWkucnNcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9leGFtcGxlcy91aS91aS51aVxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yLy5naXRpZ25vcmVcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi8uZ2l0bWVzc2FnZVxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL0xJQ0VOQ0UtQVBBQ0hFXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvTElDRU5TRS1NSVRcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9SRUFETUUubWRcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvYWN0aW9uLnJzXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2FwcC5yc1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9idXR0b24ucnNcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY2FsZW5kYXJ3aWRnZXQucnNcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY2hlY2tib3gucnNcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY29tYm9ib3gucnNcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY29ubi5yc1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvYWN0aW9uLmhcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY3BwL2FwcC5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC9idXR0b24uaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvY2FsZW5kYXJ3aWRnZXQuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvY2hlY2tib3guaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvY29tYm9ib3guaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvZGF0ZWVkaXQuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvZGF0ZXRpbWVlZGl0Lmhcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY3BwL2RpYWxvZy5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC9maWxlZGlhbG9nLmhcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY3BwL2ZvbnQuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvZnJhbWUuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvZ3JvdXBib3guaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvaW5wdXRkaWFsb2cuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvaW5wdXQuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvbGFiZWwuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvbGF5b3V0Lmhcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY3BwL2xpc3R3aWRnZXQuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvbWFpbndpbmRvdy5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC9tZW51Lmhcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY3BwL21lc3NhZ2Vib3guaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvcGxhaW50ZXh0ZWRpdC5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC9wb2ludC5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC9wcm9ncmVzc2Jhci5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC9wcm9ncmVzc2RpYWxvZy5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC9xdF93aWRnZXQuY3BwXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC9xdF93aWRnZXQuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvcmFkaW9idXR0b24uaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvc2Nyb2xsYXJlYS5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC9zaG9ydGN1dC5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC9zaWduYWwuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvc2xpZGVyLmhcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY3BwL3NwaW5ib3guaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvc3BsaXR0ZXIuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvc3RhY2tlZHdpZGdldC5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC9zdGF0dXNiYXIuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvc3lzdGVtdHJheWljb24uaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvdGFibGV3aWRnZXQuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvdGFid2lkZ2V0Lmhcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY3BwL3RleHRicm93c2VyLmhcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY3BwL3RleHRlZGl0Lmhcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY3BwL3RocmVhZC5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC90aW1lZWRpdC5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC90aW1lci5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC90b29sYmFyLmhcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvY3BwL3Rvb2xidXR0b24uaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9jcHAvdHJlZXdpZGdldC5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC91aWxvYWRlci5oXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2NwcC93aWRnZXQuaFxuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9kYXRlZWRpdC5yc1xuL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2NhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9xdHJzLTAuNC4yL3NyYy9kYXRldGltZWVkaXQucnNcbi9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvZGlhbG9nLnJzXG4vaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL2ZmaS5yc1xuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1NTMyMjMzfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiNGY1NmY4NjciLCJwYXJlbnRJZCI6IjNiOWNkM2U2IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNTozMi4yMzNaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX2tadkVmdlppT1VPV0V3b0RiaGxuTkVqTHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGVjYzE0YWM4MTkxYmIwNGZmNTUzM2E2NWJhMyIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii8vISAjIHF0cnMg4oCUIFJ1c3Qtc3R5bGUgUXQ2IGJpbmRpbmdzXG4vLyFcbi8vISBBIHR5cGUtc2FmZSwgYnVpbGRlci1wYXR0ZXJuLWRyaXZlbiBRdDYgR1VJIGxpYnJhcnkgZm9yIFJ1c3QuXG4vLyEgQnVpbHQgb24gW2BjeHhgXSBmb3IgQysrIGludGVyb3AsIHdpdGggUkFJSSBtZW1vcnkgbWFuYWdlbWVudCxcbi8vISBzaWduYWwvY2FsbGJhY2sgYnJpZGdpbmcsIGFuZCBhIGZsdWVudCBidWlsZGVyIEFQSS5cbi8vIVxuLy8hICMjIEluc3RhbGxhdGlvblxuLy8hXG4vLyEgQWRkIHRvIHlvdXIgYENhcmdvLnRvbWxgOlxuLy8hXG4vLyEgYGBgdG9tbFxuLy8hIFtkZXBlbmRlbmNpZXNdXG4vLyEgcXRycyA9IFwiMC40LjJcIlxuLy8hIGBgYFxuLy8hXG4vLyEgIyMgRGVzaWduIHByaW5jaXBsZXNcbi8vIVxuLy8hIC0gQnVpbGRlciBwYXR0ZXJuIGV2ZXJ5d2hlcmUg4oCUIGNoYWluIGAudGl0bGUoXCJYXCIpLnNpemUoODAwLCA2MDApLnNob3coKWBcbi8vISAtIFJBSUkgY2xlYW51cCDigJQgd2lkZ2V0cyBhcmUgYXV0b21hdGljYWxseSBkZWxldGVkIG9uIGBEcm9wYCwgd2l0aFxuLy8hICAgcGFyZW50LWNoaWxkIGF3YXJlbmVzcyAod2lkZ2V0cyB3aXRoIGEgUXQgcGFyZW50IHNraXAgQysrIGRlbGV0aW9uIHRvXG4vLyEgICBhdm9pZCBkb3VibGUtZnJlZSkuXG4vLyEgLSBUeXBlLXNhZmUgbGF5b3V0IG93bmVyc2hpcCDigJQgYWRkaW5nIGEgd2lkZ2V0IHRvIGEgbGF5b3V0IHRyYW5zZmVyc1xuLy8hICAgb3duZXJzaGlwOyB0aGUgbGF5b3V0IGRyb3BzIGl0cyBjaGlsZHJlbiB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlLlxuLy8hIC0gWmVyby1jb3N0IHNpZ25hbCBicmlkZ2luZyDigJQgUXQgc2lnbmFscyBpbnZva2UgUnVzdCBjbG9zdXJlcyB2aWEgYVxuLy8hICAgc2luZ2xlIGdsb2JhbCB0cmFtcG9saW5lOyBjb250ZXh0IHRva2VucyBhcmUgcGxhaW4gYHU2NGAgdmFsdWVzLlxuLy8hXG4vLyEgIyMgQXJjaGl0ZWN0dXJlXG4vLyFcbi8vISB8IExheWVyIHwgQ3JhdGUgbW9kdWxlIHwgV2hhdCBpdCBkb2VzIHxcbi8vISB8LS0tfC0tLXwtLS18XG4vLyEgfCBDKysgZ2x1ZSB8ICooaW50ZXJuYWwpKiB8IElubGluZSB3cmFwcGVycyBhcm91bmQgUXQ1L1F0NiBBUEkgfFxuLy8hIHwgY3h4IGJyaWRnZSB8IFtgZmZpYF0gfCBPcGFxdWUgQysrIHR5cGVzICsgYGV4dGVybiBcIkMrK1wiYCBzaWduYXR1cmVzIHxcbi8vISB8IFNhZmUgd3JhcHBlcnMgfCBbYGFwcGBdLCBbYHdpZGdldGBdLCBbYGJ1dHRvbmBdLCAuLi4gfCBCdWlsZGVyIHBhdHRlcm5zLCBSQUlJLCBzaWduYWxzIHxcbi8vISB8IFB1YmxpYyBBUEkgfCAqKHRoaXMgbW9kdWxlKSogfCBSZS1leHBvcnRzIG9mIGFsbCBzYWZlIHR5cGVzIHxcbi8vIVxuLy8hICMjIFdpZGdldCBnYWxsZXJ5XG4vLyFcbi8vISAjIyMgV2luZG93cyAmIENvbnRhaW5lcnNcbi8vIVxuLy8hIHwgVHlwZSB8IFF0IGNsYXNzIHwgU2lnbmFscyB8XG4vLyEgfC0tLXwtLS18LS0tfFxuLy8hIHwgW2BBcHBsaWNhdGlvbmBdIHwgYFFBcHBsaWNhdGlvbmAgfCDigJQgfFxuLy8hIHwgW2BXaWRnZXRgXSB8IGBRV2lkZ2V0YCB8IOKAlCB8XG4vLyEgfCBbYE1haW5XaW5kb3dgXSB8IGBRTWFpbldpbmRvd2AgfCDigJQgfFxuLy8hIHwgW2BHcm91cEJveGBdIHwgYFFHcm91cEJveGAgfCDigJQgfFxuLy8hIHwgW2BUYWJXaWRnZXRgXSB8IGBRVGFiV2lkZ2V0YCB8IGBvbl9jdXJyZW50X2NoYW5nZWQoaTMyKWAgfFxuLy8hIHwgW2BTdGFja2VkV2lkZ2V0YF0gfCBgUVN0YWNrZWRXaWRnZXRgIHwgYG9uX2N1cnJlbnRfY2hhbmdlZChpMzIpYCB8XG4vLyEgfCBbYFNjcm9sbEFyZWFgXSB8IGBRU2Nyb2xsQXJlYWAgfCDigJQgfFxuLy8hIHwgW2BTcGxpdHRlcmBdIHwgYFFTcGxpdHRlcmAgfCDigJQgfFxuLy8hXG4vLyEgIyMjIEJ1dHRvbnMgJiBDb250cm9sc1xuLy8hXG4vLyEgfCBUeXBlIHwgUXQgY2xhc3MgfCBTaWduYWxzIHxcbi8vISB8LS0tfC0tLXwtLS18XG4vLyEgfCBbYFB1c2hCdXR0b25gXSB8IGBRUHVzaEJ1dHRvbmAgfCBgb25fY2xpY2tlZGAgfFxuLy8hIHwgW2BUb29sQnV0dG9uYF0gfCBgUVRvb2xCdXR0b25gIHwgYG9uX2NsaWNrZWRgPGJyPmBvbl90b2dnbGVkKGJvb2wpYCB8XG4vLyEgfCBbYENoZWNrQm94YF0gfCBgUUNoZWNrQm94YCB8IGBvbl90b2dnbGVkKGJvb2wpYCB8XG4vLyEgfCBbYFJhZGlvQnV0dG9uYF0gfCBgUVJhZGlvQnV0dG9uYCB8IGBvbl90b2dnbGVkKGJvb2wpYCB8XG4vLyEgfCBbYFNsaWRlcmBdIHwgYFFTbGlkZXJgIHwgYG9uX3ZhbHVlX2NoYW5nZWQoaTMyKWAgfFxuLy8hIHwgW2BTcGluQm94YF0gfCBgUVNwaW5Cb3hgIHwgYG9uX3ZhbHVlX2NoYW5nZWQoaTMyKWAgfFxuLy8hIHwgW2BDb21ib0JveGBdIHwgYFFDb21ib0JveGAgfCBgb25fY3VycmVudF90ZXh0X2NoYW5nZWRgPGJyPmBvbl9jdXJyZW50X2luZGV4X2NoYW5nZWQoaTMyKWAgfFxuLy8hXG4vLyEgIyMjIFRleHQgJiBEaXNwbGF5XG4vLyFcbi8vISB8IFR5cGUgfCBRdCBjbGFzcyB8IFNpZ25hbHMgfFxuLy8hIHwtLS18LS0tfC0tLXxcbi8vISB8IFtgTGFiZWxgXSB8IGBRTGFiZWxgIHwg4oCUIHxcbi8vISB8IFtgTGluZUVkaXRgXSB8IGBRTGluZUVkaXRgIHwgYG9uX3JldHVybl9wcmVzc2VkYCB8XG4vLyEgfCBbYFRleHRFZGl0YF0gfCBgUVRleHRFZGl0YCB8IGBvbl90ZXh0X2NoYW5nZWRgIHxcbi8vISB8IFtgUGxhaW5UZXh0RWRpdGBdIHwgYFFQbGFpblRleHRFZGl0YCB8IGBvbl90ZXh0X2NoYW5nZWRgPGJyPmBvbl9jdXJzb3JfcG9zaXRpb25fY2hhbmdlZGAgfFxuLy8hIHwgW2BUZXh0QnJvd3NlcmBdIHwgYFFUZXh0QnJvd3NlcmAgfCBgb25fYW5jaG9yX2NsaWNrZWQoU3RyaW5nKWA8YnI+YG9uX3RleHRfY2hhbmdlZGAgfFxuLy8hIHwgW2BQcm9ncmVzc0JhcmBdIHwgYFFQcm9ncmVzc0JhcmAgfCDigJQgfFxuLy8hXG4vLyEgIyMjIEl0ZW0gVmlld3Ncbi8vIVxuLy8hIHwgVHlwZSB8IFF0IGNsYXNzIHwgU2lnbmFscyB8XG4vLyEgfC0tLXwtLS18LS0tfFxuLy8hIHwgW2BMaXN0V2lkZ2V0YF0gfCBgUUxpc3RXaWRnZXRgIHwgYG9uX2l0ZW1fY2xpY2tlZChTdHJpbmcpYDxicj5gb25faXRlbV9kb3VibGVfY2xpY2tlZChTdHJpbmcpYDxicj5gb25fY3VycmVudF9pdGVtX2NoYW5nZWQoU3RyaW5nKWAgfFxuLy8hIHwgW2BUYWJsZVdpZGdldGBdIHwgYFFUYWJsZVdpZGdldGAgfCBgb25fY2VsbF9jbGlja2VkYDxicj5gb25fY2VsbF9kb3VibGVfY2xpY2tlZGA8YnI+YG9uX2N1cnJlbnRfY2VsbF9jaGFuZ2VkYCB8XG4vLyEgfCBbYFRyZWVXaWRnZXRgXSB8IGBRVHJlZVdpZGdldGAgfCBgb25faXRlbV9jbGlja2VkKFN0cmluZylgPGJyPmBvbl9pdGVtX2RvdWJsZV9jbGlja2VkKFN0cmluZylgPGJyPmBvbl9pdGVtX2V4cGFuZGVkKFN0cmluZylgPGJyPmBvbl9pdGVtX2NvbGxhcHNlZChTdHJpbmcpYDxicj5gb25fY3VycmVudF9pdGVtX2NoYW5nZWQoU3RyaW5nKWAgfFxuLy8hXG4vLyEgIyMjIERhdGUgJiBUaW1lXG4vLyFcbi8vISB8IFR5cGUgfCBRdCBjbGFzcyB8IFNpZ25hbHMgfFxuLy8hIHwtLS18LS0tfC0tLXxcbi8vISB8IFtgRGF0ZUVkaXRgXSB8IGBRRGF0ZUVkaXRgIHwgYG9uX2RhdGVfY2hhbmdlZChTdHJpbmcpYCB8XG4vLyEgfCBbYFRpbWVFZGl0YF0gfCBgUVRpbWVFZGl0YCB8IGBvbl90aW1lX2NoYW5nZWQoU3RyaW5nKWAgfFxuLy8hIHwgW2BEYXRlVGltZUVkaXRgXSB8IGBRRGF0ZVRpbWVFZGl0YCB8IGBvbl9kYXRlX3RpbWVfY2hhbmdlZChTdHJpbmcpYCB8XG4vLyEgfCBbYENhbGVuZGFyV2lkZ2V0YF0gfCBgUUNhbGVuZGFyV2lkZ2V0YCB8IGBvbl9zZWxlY3Rpb25fY2hhbmdlZGA8YnI+YG9uX2FjdGl2YXRlZChTdHJpbmcpYCB8XG4vLyFcbi8vISAjIyMgTWVudXMgJiBUb29sYmFyc1xuLy8hXG4vLyEgfCBUeXBlIHwgUXQgY2xhc3MgfCBTaWduYWxzIHxcbi8vISB8LS0tfC0tLXwtLS18XG4vLyEgfCBbYEFjdGlvbmBdIHwgYFFBY3Rpb25gIHwgYG9uX3RyaWdnZXJlZChib29sKWA8YnI+YG9uX3RvZ2dsZWQoYm9vbClgIHxcbi8vISB8IFtgTWVudWBdIHwgYFFNZW51YCB8IOKAlCB8XG4vLyEgfCBbYE1lbnVCYXJgXSB8IGBRTWVudUJhcmAgfCDigJQgfFxuLy8hIHwgW2BUb29sQmFyYF0gfCBgUVRvb2xCYXJgIHwgcGVyLWFjdGlvbiBjYWxsYmFja3MgdmlhIGBhZGRfYWN0aW9uYCB8XG4vLyEgfCBbYFN0YXR1c0JhcmBdIHwgYFFTdGF0dXNCYXJgIHwg4oCUIHxcbi8vIVxuLy8hICMjIyBEaWFsb2dzXG4vLyFcbi8vISB8IFR5cGUgfCBRdCBjbGFzcyB8IE5vdGVzIHxcbi8vISB8LS0tfC0tLXwtLS18XG4vLyEgfCBbYE1lc3NhZ2VCb3hgXSB8IGBRTWVzc2FnZUJveGAgfCBCdWlsZGVyICsgYGV4ZWMoKWAsIHN0YXRpYyBgYWJvdXQoKWAgfFxuLy8hIHwgW2BGaWxlRGlhbG9nYF0gfCBgUUZpbGVEaWFsb2dgIHwgYG9wZW5fZmlsZWAsIGBzYXZlX2ZpbGVgLCBgc2VsZWN0X2RpcmVjdG9yeWAgKHN0YXRpYykgfFxuLy8hIHwgW2BQcm9ncmVzc0RpYWxvZ2BdIHwgYFFQcm9ncmVzc0RpYWxvZ2AgfCBCdWlsZGVyIHdpdGggYHNldF92YWx1ZWAgLyBgd2FzX2NhbmNlbGVkYCB8XG4vLyEgfCBgaW5wdXRkaWFsb2dgIHwgYFFJbnB1dERpYWxvZ2AgfCBgZ2V0X3RleHRgLCBgZ2V0X2ludGAsIGBnZXRfZG91YmxlYCwgYGdldF9pdGVtYCAoc3RhdGljKSB8XG4vLyEgfCBgZGlhbG9nYCB8IGBRTWVzc2FnZUJveGAgfCBgaW5mb3JtYXRpb25gLCBgd2FybmluZ2AsIGBjcml0aWNhbGAsIGBxdWVzdGlvbmAgKHN0YXRpYykgfFxuLy8hXG4vLyEgIyMjIExheW91dHNcbi8vIVxuLy8hIHwgVHlwZSB8IFF0IGNsYXNzIHwgU2lnbmFscyB8XG4vLyEgfC0tLXwtLS18LS0tfFxuLy8hIHwgW2BWQm94TGF5b3V0YF0gfCBgUVZCb3hMYXlvdXRgIHwg4oCUIHxcbi8vISB8IFtgSEJveExheW91dGBdIHwgYFFIQm94TGF5b3V0YCB8IOKAlCB8XG4vLyEgfCBbYEdyaWRMYXlvdXRgXSB8IGBRR3JpZExheW91dGAgfCDigJQgfFxuLy8hXG4vLyEgIyMjIFN0eWxpbmcgJiBVdGlsaXRpZXNcbi8vIVxuLy8hIHwgVHlwZSB8IFF0IGNsYXNzIHwgU2lnbmFscyB8XG4vLyEgfC0tLXwtLS18LS0tfFxuLy8hIHwgW2BGcmFtZWBdIHwgYFFGcmFtZWAgfCDigJQgKHNoYXBlL3NoYWRvdyBkZWNvcmF0aW9ucykgfFxuLy8hIHwgW2BGb250YF0gfCBgUUZvbnRgIHwg4oCUIChidWlsZGVyOiBmYW1pbHksIHNpemUsIHdlaWdodCkgfFxuLy8hIHwgW2BGb250RXh0YF0gfCAqKHRyYWl0KSogfCBgZm9udCgpYCAvIGBzZXRfZm9udCgpYCBvbiBhbGwgd2lkZ2V0cyB8XG4vLyEgfCBbYFNob3J0Y3V0YF0gfCBgUVNob3J0Y3V0YCB8IGBvbl9hY3RpdmF0ZWQoKWAgKFFPYmplY3QpIHxcbi8vIVxuLy8hICMjIyBTeXN0ZW1cbi8vIVxuLy8hIHwgVHlwZSB8IFF0IGNsYXNzIHwgU2lnbmFscyB8XG4vLyEgfC0tLXwtLS18LS0tfFxuLy8hIHwgW2BUaW1lcmBdIHwgYFFUaW1lcmAgfCBgb25fdGltZW91dGA8YnI+YHNpbmdsZV9zaG90KG1zLCBmbilgIHxcbi8vISB8IFtgU3lzdGVtVHJheUljb25gXSB8IGBRU3lzdGVtVHJheUljb25gIHwgYG9uX2FjdGl2YXRlZChUcmF5SWNvblJlYXNvbilgIHxcbi8vISB8IFtgVWlMb2FkZXJgXSB8IGBRVWlMb2FkZXJgIHwgYC51aWAgZmlsZSBsb2FkaW5nIHxcbi8vISB8IFtgUG9pbnRgXSB8IGBRUG9pbnRgIHwg4oCUIHxcbi8vIVxuLy8hICMjIFF1aWNrIGV4YW1wbGVcbi8vIVxuLy8hIGBgYG5vX3J1blxuLy8hIHVzZSBxdHJzOjpwcmVsdWRlOjoqO1xuLy8hXG4vLyEgZm4gbWFpbigpIHtcbi8vISAgICAgbGV0IGFwcCA9IEFwcGxpY2F0aW9uOjpuZXcoKTtcbi8vIVxuLy8hICAgICBsZXQgbXV0IHdpbmRvdyA9IFdpZGdldDo6bmV3KClcbi8vISAgICAgICAgIC50aXRsZShcIkhlbGxvLCBxdHJzIVwiKVxuLy8hICAgICAgICAgLnNpemUoNDAwLCAzMDApXG4vLyEgICAgICAgICAuYnVpbGQoKTtcbi8vIVxuLy8hICAgICBsZXQgbXV0IGxheW91dCA9IFZCb3hMYXlvdXQ6OndpdGhfcGFyZW50KCZ3aW5kb3cpO1xuLy8hXG4vLyEgICAgIGxldCBidG4gPSBQdXNoQnV0dG9uOjpuZXcoXCJDbGljayBtZVwiKVxuLy8hICAgICAgICAgLm9uX2NsaWNrZWQofHwgcHJpbnRsbiEoXCJjbGlja2VkIVwiKSlcbi8vISAgICAgICAgIC5idWlsZCgpO1xuLy8hICAgICBsZXQgbGFiZWwgPSBMYWJlbDo6bmV3KFwiV2VsY29tZSFcIikuYnVpbGQoKTtcbi8vIVxuLy8hICAgICBsYXlvdXQuYWRkKGJ0bik7XG4vLyEgICAgIGxheW91dC5hZGQobGFiZWwpO1xuLy8hXG4vLyEgICAgIHdpbmRvdy5zZXRfbGF5b3V0KCZsYXlvdXQpO1xuLy8hICAgICB3aW5kb3cuc2hvdygpO1xuLy8hXG4vLyEgICAgIGFwcC5leGVjKCk7XG4vLyEgfVxuLy8hIGBgYFxuLy8hXG4vLyEgIyMgVGhyZWFkIHNhZmV0eVxuLy8hXG4vLyEgUXQgR1VJIGNsYXNzZXMgYXJlICoqbm90IHRocmVhZC1zYWZlKiouIEFsbCB3aWRnZXQgY3JlYXRpb24sIG11dGF0aW9uLFxuLy8hIGFuZCB0aGUgZXZlbnQgbG9vcCBtdXN0IGhhcHBlbiBvbiB0aGUgbWFpbiB0aHJlYWQuIFRoaXMgbGlicmFyeSBkb2VzXG4vLyEgbm90IGFkZCBhbnkgc3luY2hyb25pc2F0aW9uIOKAlCB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBzdGF5aW5nIG9uIHRoZVxuLy8hIHJpZ2h0IHRocmVhZCwganVzdCBhcyBpbiBDKysgUXQuXG4vLyFcbi8vISAjIyBMaW5raW5nXG4vLyFcbi8vISBRdDYgKENvcmUsIEd1aSwgV2lkZ2V0cykgbXVzdCBiZSBpbnN0YWxsZWQgd2l0aCBkZXZlbG9wbWVudCBoZWFkZXJzLlxuLy8hIFRoZSBidWlsZCBzY3JpcHQgdXNlcyBgcW1ha2VgIHRvIGxvY2F0ZSB0aGVtLiBJZiB5b3Ugc2VlXG4vLyEgYFF0IG5vdCBmb3VuZCFgLCBpbnN0YWxsIHRoZSBgcXQ2LWJhc2UtZGV2YCBwYWNrYWdlXG4vLyEgKG9yIGVxdWl2YWxlbnQpIGZvciB5b3VyIGRpc3RyaWJ1dGlvbi5cblxucHViIG1vZCBhY3Rpb247XG5wdWIgbW9kIGFwcDtcbnB1YiBtb2QgYnV0dG9uO1xucHViIG1vZCBjaGVja2JveDtcbnB1YiBtb2QgY29tYm9ib3g7XG5wdWIgbW9kIGNvbm47XG5wdWIgbW9kIGRhdGVlZGl0O1xucHViIG1vZCBkYXRldGltZWVkaXQ7XG5wdWIgbW9kIGRpYWxvZztcbnB1YiBtb2QgZmZpO1xucHViIG1vZCBncmlkO1xucHViIG1vZCBncm91cGJveDtcbnB1YiBtb2QgaW5wdXQ7XG5wdWIgbW9kIGlucHV0ZGlhbG9nO1xucHViIG1vZCBsYWJlbDtcbnB1YiBtb2QgbGF5b3V0O1xucHViIG1vZCBsaXN0d2lkZ2V0O1xucHViIG1vZCBtZW51O1xucHViIG1vZCBtYWlud2luZG93O1xucHViIG1vZCBtZXNzYWdlYm94O1xuXG5bMTEwIG1vcmUgbGluZXMgaW4gZmlsZS4gVXNlIG9mZnNldD0yMDEgdG8gY29udGludWUuXSJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk5NTUzMjIzM319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImQzYjgxMmQzIiwicGFyZW50SWQiOiI0ZjU2Zjg2NyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDU6NDAuNjA4WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipJbnNwZWN0aW5nIFRyZWUgQVBJIGZvciBxdHJzKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGVjZTM0YTQ4MTkxYjQwNWYyM2UzOTg5NmI1ZVwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTjdVM2RtWFduYXY2bHBCOGVHNzUySHllTFh3b0FKb2FieFpWazZJRm04bTNBX3Q0SF9WWDJjYVdTWDI0d0FLSHBfc0FlSHVpaXdONDV6eVRoMlpFSnhDMEZKTUowdkhGSUVzUXhGemMySlRFX1RKQnV6c0RicS16bTJGZnZuQjF5WFRxbDJTRGpsVTRMRkM3REJPUldXb0hMNEtIUHNWNE1kb2t1UnFtWmstVzdPUDUwVzFHUHlHT0RRX1dHZ2xacXFZMlRyMEtRT3drSDFmV0d4Qms1S0VlR2tpZ0tDX1laUUN5YjRpOVN4QlQ0Rnl5ZHVjQlU0REtxRzF4dmlqLWhvVnY3ZHlwV0I4YXFnQ1dDekM4bmliV0h0dm5HYzA3LVl1MVJ0MC1vX0wwMnhUZnZhMGQ2aEE1dTBtb0ZGMnpQOWVYTGYwMDNCTzA3bGp4ZjRvWUV4TWRTSTE4QXdBdXo3M042VTlselM2aHVCM2tGUTNDRUtKalNuVVV6TEFPNXk2cDVUbjlfZmJZWnlsZ2hkYU90Mm4zRjlMY3pNLXJPZDRmLVRfSUw0NmJUaGJMdUVOYUg3eHBGYURIQ1dadGFRdG5yQTNKMEwzeEx5MU56V0xYcU9iMTZ2MURRN0pEVVkwaExuRUt1Z3NYcTZkUng2Ri1UdjdtN0t2YnNCSm9Zcm5qaGJPRmoyT3Q4YmFxYU9ORFJwSGZkMkgzdlpKSksyUXBkbllybjZQUklsMEZOMXUzdmFCYXd0S29JQUl6RE5BUWw0QVZyeVhaMkswdXA3Wm1FRWowaUR3UU9OWXZMYWFpd2xlNFdqaVcwTURPWG9XM2pnN1YtY2tsUWVXUUVBS2phWkV1Wll6ZzRERFV6ckZHREk3cGhXMHZOUloxSl9OOG5zT2JKSHlwNlpTYV94VzJfajMybUZ2bVBuMDlrbm9RM1VhdHRxak9JbkI5SXJkWDFxSlFOOFdXOGRsbWJ1TEljVWpJQjFiRnJGVEstNnRLdy15aTZKbGVlSFVFWlA5dWRhWFA3ZG5zeFY5dGJoUXlFbHJNUGdvUmZUVFhjakZZRGRXS1AyejhqcFZTTVdVOFg2czc4bFQtOXlYSVhncE5NMjk2MjVEZEtVN21KakRxa0N3Qm05ZGtrZm9HSmI3SDRUX3hkV09nc0hTbzZPa0Z1VXpzY1lSdm1KZmVlNk1FT0ppQ29Wc2FNdUtqWGtZdzlVSnMtVGdkVjJxUUJkZHNiYUJPa0k3dlRpSElCM3phcURWcG9RV2FMVV9DNHZkVjRJUWZ3QXpSbmQtYnkwSmsyVXRWcFR6OHZSNUxidUg4aU8zaHpXQVpCNDhGQklFMzQ0VjlnRmpLUUZwVUdmQjBJanF3QTh5blhCWDlPVlpZbjBnekpocWEwNUVnRUF4RVFFNlQxXzJocm89XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipJbnNwZWN0aW5nIFRyZWUgQVBJIGZvciBxdHJzKipcIn1dfSJ9LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsX290cHdGc0Jod1RCRVk2MkNUbVg1Z3NVUHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGVkNDcxZmM4MTkxOTIwZGE1Y2VhOTJhMTQ2NCIsIm5hbWUiOiJyZWFkIiwiYXJndW1lbnRzIjp7InBhdGgiOiIvaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvZXhhbXBsZXMvZGVtby9kZW1vLnJzIiwibGltaXQiOjUwMH19LHsidHlwZSI6InRvb2xDYWxsIiwiaWQiOiJjYWxsXzQ4cXZRTnQ0cUtQY21NV3o3S0hQRnAxWHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGVkNDcyMGM4MTkxODc2M2ZhN2YxMjE0YzYxMSIsIm5hbWUiOiJyZWFkIiwiYXJndW1lbnRzIjp7InBhdGgiOiIvaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL3F0cnMtMC40LjIvc3JjL3RyZWV3aWRnZXQucnMiLCJsaW1pdCI6MzAwfX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfRFQ1N2V5NHZ3S0dLMmFLSFFxeThpbWpxfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWQ0NzIxNDgxOTFiYjFmN2I5MjFkMTBmMDZlIiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6Ii9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvaW5wdXRkaWFsb2cucnMiLCJsaW1pdCI6MjIwfX0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfamxHNElLand2U3NOVzlTSE5DWmg0dWxofGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWQ0NzIxODgxOTE4Y2VlMzBjNzcxODc0YjljIiwibmFtZSI6InJlYWQiLCJhcmd1bWVudHMiOnsicGF0aCI6Ii9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvcXRycy0wLjQuMi9zcmMvZmlsZWRpYWxvZy5ycyIsImxpbWl0IjoyMDB9fV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6NTc4Mywib3V0cHV0IjoyNzUsImNhY2hlUmVhZCI6MTAzOTM2LCJjYWNoZVdyaXRlIjowLCJyZWFzb25pbmciOjI1LCJ0b3RhbFRva2VucyI6MTA5OTk0LCJjb3N0Ijp7ImlucHV0IjowLjAyODkxNTAwMDAwMDAwMDAwMywib3V0cHV0IjowLjAwODI1LCJjYWNoZVJlYWQiOjAuMDUxOTY4LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wODkxMzN9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTU1MzIyMzcsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWNjOWI2YzgxOTE5ZDRhNjA4YTdiZTJkZjc4In19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjhhNjM0MzhkIiwicGFyZW50SWQiOiJkM2I4MTJkMyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDU6NDAuNjEwWiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9vdHB3RnNCaHdUQkVZNjJDVG1YNWdzVVB8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlZDQ3MWZjODE5MTkyMGRhNWNlYTkyYTE0NjQiLCJ0b29sTmFtZSI6InJlYWQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiIvLyBleGFtcGxlcy9kZW1vLnJzIOKAlCBxdHJzIHdpZGdldCBnYWxsZXJ5IGRlbW9cbi8vXG4vLyBSdW46IGNhcmdvIHJ1biAtLWV4YW1wbGUgZGVtb1xuXG51c2UgcXRyczo6cHJlbHVkZTo6KjtcbnVzZSBxdHJzOjpkaWFsb2c7XG51c2UgcXRyczo6c2lnbmFsczo6c2xpZGVyX3NpZ25hbHM6OlZBTFVFX0NIQU5HRUQgYXMgU0xJREVSX1ZBTFVFX0NIQU5HRUQ7XG51c2UgcXRyczo6c2lnbmFsczo6c3Bpbl9ib3hfc2lnbmFsczo6VkFMVUVfQ0hBTkdFRCBhcyBTUElOX1ZBTFVFX0NIQU5HRUQ7XG51c2UgcXRyczo6c2lnbmFsczo6c3Bpbl9ib3hfc2xvdHM6OlNFVF9WQUxVRTtcbnVzZSBxdHJzOjpzaWduYWxzOjpzbGlkZXJfc2xvdHM6OlNFVF9WQUxVRSBhcyBTTElERVJfU0VUX1ZBTFVFO1xudXNlIHF0cnM6OnNpZ25hbHM6OnByb2dyZXNzX2Jhcl9zbG90czo6U0VUX1ZBTFVFIGFzIFBCX1NFVF9WQUxVRTtcblxuZm4gbWFpbigpIHtcbiAgICBsZXQgYXBwID0gQXBwbGljYXRpb246Om5ldygpO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTWFpbiB3aW5kb3dcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBsZXQgd2luZG93ID0gV2lkZ2V0OjpuZXcoKVxuICAgICAgICAudGl0bGUoXCJxdHJzIFdpZGdldCBHYWxsZXJ5XCIpXG4gICAgICAgIC5pY29uKFwiYXNzZXRzL2ljb24ucG5nXCIpXG4gICAgICAgIC5zaXplKDkwMCwgNzAwKVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE1haW4gbGF5b3V0XG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgbGV0IG11dCBtYWluX2xheW91dCA9IFZCb3hMYXlvdXQ6OndpdGhfcGFyZW50KCZ3aW5kb3cpO1xuICAgIG1haW5fbGF5b3V0LnNldF9zcGFjaW5nKDEwKTtcbiAgICBtYWluX2xheW91dC5zZXRfY29udGVudHNfbWFyZ2lucygxNSwgMTUsIDE1LCAxNSk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBUaXRsZVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGxldCB0aXRsZV9sYWJlbCA9IExhYmVsOjpuZXcoXCJcXG5xdHJzIFdpZGdldCBHYWxsZXJ5XCIpXG4gICAgICAgIC5wYXJlbnQoJndpbmRvdylcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgbWFpbl9sYXlvdXQuYWRkKHRpdGxlX2xhYmVsKTtcbiAgICBcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBTZWN0aW9uIDE6IEJ1dHRvbnNcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBsZXQgZ3JvdXAxID0gR3JvdXBCb3g6Om5ldyhcIkJ1dHRvbnNcIilcbiAgICAgICAgLnBhcmVudCgmd2luZG93KVxuICAgICAgICAuYnVpbGQoKTtcbiAgICBsZXQgbXV0IGcxX2xheW91dCA9IFZCb3hMYXlvdXQ6OndpdGhfcGFyZW50KCZncm91cDEpO1xuICAgIGcxX2xheW91dC5zZXRfc3BhY2luZyg4KTtcblxuICAgIC8vIFB1c2hCdXR0b25cbiAgICBsZXQgYnRuID0gUHVzaEJ1dHRvbjo6bmV3KFwiQ2xpY2sgTWVcIilcbiAgICAgICAgLm9uX2NsaWNrZWQofHwgcHJpbnRsbiEoXCJbTE9HXSBCdXR0b24gY2xpY2tlZFwiKSlcbiAgICAgICAgLnBhcmVudCgmZ3JvdXAxKVxuICAgICAgICAuYnVpbGQoKTtcbiAgICBnMV9sYXlvdXQuYWRkKGJ0bik7XG5cbiAgICAvLyBDaGVja0JveFxuICAgIGxldCBjYiA9IENoZWNrQm94OjpuZXcoXCJDaGVjayBtZVwiKVxuICAgICAgICAuY2hlY2tlZChmYWxzZSlcbiAgICAgICAgLm9uX3RvZ2dsZWQofGNoZWNrZWR8IHByaW50bG4hKFwiW0xPR10gQ2hlY2tCb3g6IHt9XCIsIGNoZWNrZWQpKVxuICAgICAgICAucGFyZW50KCZncm91cDEpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIGcxX2xheW91dC5hZGQoY2IpO1xuXG4gICAgLy8gUmFkaW9CdXR0b24gZ3JvdXBcbiAgICBsZXQgcmIxX2xhYmVsID0gTGFiZWw6Om5ldyhcIlJhZGlvIEdyb3VwIChjbGljayB0byBsb2cpOlwiKS5wYXJlbnQoJmdyb3VwMSkuYnVpbGQoKTtcbiAgICBnMV9sYXlvdXQuYWRkKHJiMV9sYWJlbCk7XG5cbiAgICBsZXQgcmIxID0gUmFkaW9CdXR0b246Om5ldyhcIk9wdGlvbiBBXCIpXG4gICAgICAgIC5jaGVja2VkKHRydWUpXG4gICAgICAgIC5vbl90b2dnbGVkKHxjaGVja2VkfCB7XG4gICAgICAgICAgICBpZiBjaGVja2VkIHtcbiAgICAgICAgICAgICAgICBwcmludGxuIShcIltMT0ddIFJhZGlvIHNlbGVjdGVkOiBBXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucGFyZW50KCZncm91cDEpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIGcxX2xheW91dC5hZGQocmIxKTtcblxuICAgIGxldCByYjIgPSBSYWRpb0J1dHRvbjo6bmV3KFwiT3B0aW9uIEJcIilcbiAgICAgICAgLmNoZWNrZWQoZmFsc2UpXG4gICAgICAgIC5vbl90b2dnbGVkKHxjaGVja2VkfCB7XG4gICAgICAgICAgICBpZiBjaGVja2VkIHtcbiAgICAgICAgICAgICAgICBwcmludGxuIShcIltMT0ddIFJhZGlvIHNlbGVjdGVkOiBCXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucGFyZW50KCZncm91cDEpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIGcxX2xheW91dC5hZGQocmIyKTtcblxuICAgIGxldCByYjMgPSBSYWRpb0J1dHRvbjo6bmV3KFwiT3B0aW9uIENcIilcbiAgICAgICAgLmNoZWNrZWQoZmFsc2UpXG4gICAgICAgIC5vbl90b2dnbGVkKHxjaGVja2VkfCB7XG4gICAgICAgICAgICBpZiBjaGVja2VkIHtcbiAgICAgICAgICAgICAgICBwcmludGxuIShcIltMT0ddIFJhZGlvIHNlbGVjdGVkOiBDXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucGFyZW50KCZncm91cDEpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIGcxX2xheW91dC5hZGQocmIzKTtcblxuICAgIG1haW5fbGF5b3V0LmFkZChncm91cDEpO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gU2VjdGlvbiAyOiBJbnB1dCB3aWRnZXRzXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgbGV0IGdyb3VwMiA9IEdyb3VwQm94OjpuZXcoXCJJbnB1dHNcIilcbiAgICAgICAgLnBhcmVudCgmd2luZG93KVxuICAgICAgICAuYnVpbGQoKTtcbiAgICBsZXQgbXV0IGcyX2xheW91dCA9IFZCb3hMYXlvdXQ6OndpdGhfcGFyZW50KCZncm91cDIpO1xuICAgIGcyX2xheW91dC5zZXRfc3BhY2luZyg4KTtcblxuICAgIC8vIExpbmVFZGl0XG4gICAgbGV0IGVkaXQgPSBMaW5lRWRpdDo6bmV3KFwiVHlwZSB0ZXh0IGhlcmUuLi5cIilcbiAgICAgICAgLm9uX3JldHVybl9wcmVzc2VkKHx8IHByaW50bG4hKFwiW0xPR10gTGluZUVkaXQgcmV0dXJuIHByZXNzZWRcIikpXG4gICAgICAgIC5wYXJlbnQoJmdyb3VwMilcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgZzJfbGF5b3V0LmFkZChlZGl0KTtcblxuICAgIC8vIENvbWJvQm94XG4gICAgbGV0IG11dCBjb21ibyA9IENvbWJvQm94OjpuZXcoKVxuICAgICAgICAuaXRlbXMoJltcIkl0ZW0gMVwiLCBcIkl0ZW0gMlwiLCBcIkl0ZW0gM1wiLCBcIkl0ZW0gNFwiXSlcbiAgICAgICAgLm9uX2N1cnJlbnRfdGV4dF9jaGFuZ2VkKHx8IHByaW50bG4hKFwiW0xPR10gQ29tYm9Cb3ggdGV4dCBjaGFuZ2VkXCIpKVxuICAgICAgICAucGFyZW50KCZncm91cDIpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIGNvbWJvLmNvbm5lY3RfY3VycmVudF9pbmRleF9jaGFuZ2VkKHxpZHh8IHtcbiAgICAgICAgcHJpbnRsbiEoXCJbTE9HXSBDb21ib0JveCBpbmRleDoge31cIiwgaWR4KTtcbiAgICB9KTtcbiAgICBnMl9sYXlvdXQuYWRkKGNvbWJvKTtcblxuICAgIC8vIFRleHRFZGl0XG4gICAgbGV0IHRleHRfZWRpdCA9IFRleHRFZGl0OjpuZXcoKVxuICAgICAgICAucGxhY2Vob2xkZXIoXCJXcml0ZSBtdWx0aS1saW5lIHRleHQgaGVyZS4uLlwiKVxuICAgICAgICAub25fdGV4dF9jaGFuZ2VkKHx8IHByaW50bG4hKFwiW0xPR10gVGV4dEVkaXQgY29udGVudCBjaGFuZ2VkXCIpKVxuICAgICAgICAucGFyZW50KCZncm91cDIpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIGcyX2xheW91dC5hZGQodGV4dF9lZGl0KTtcblxuICAgIG1haW5fbGF5b3V0LmFkZChncm91cDIpO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gU2VjdGlvbiAzOiBGdWxsIEJpZGlyZWN0aW9uYWwgU3luYyAoU2xpZGVyIOKGlCBTcGluQm94IOKGkiBQcm9ncmVzc0JhcilcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBsZXQgZ3JvdXAzID0gR3JvdXBCb3g6Om5ldyhcIlZhbHVlc1wiKVxuICAgICAgICAucGFyZW50KCZ3aW5kb3cpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIGxldCBtdXQgZzNfbGF5b3V0ID0gVkJveExheW91dDo6d2l0aF9wYXJlbnQoJmdyb3VwMyk7XG4gICAgZzNfbGF5b3V0LnNldF9zcGFjaW5nKDgpO1xuXG4gICAgLy8gQnVpbGQgYWxsIHdpZGdldHMgZmlyc3QgKGJlZm9yZSBhZGRpbmcgdG8gbGF5b3V0KVxuICAgIGxldCBiYXIgPSBQcm9ncmVzc0Jhcjo6bmV3KClcbiAgICAgICAgLnJhbmdlKDAsIDEwMClcbiAgICAgICAgLnZhbHVlKDUwKVxuICAgICAgICAuZm9ybWF0KFwiJXAlXCIpXG4gICAgICAgIC5wYXJlbnQoJmdyb3VwMylcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICBsZXQgc2xpZGVyID0gU2xpZGVyOjpob3Jpem9udGFsKClcbiAgICAgICAgLnJhbmdlKDAsIDEwMClcbiAgICAgICAgLnBhcmVudCgmZ3JvdXAzKVxuICAgICAgICAuYnVpbGQoKTtcbiAgICBzbGlkZXIuc2V0X3ZhbHVlKDUwKTtcblxuICAgIGxldCBzcGluID0gU3BpbkJveDo6bmV3KClcbiAgICAgICAgLnJhbmdlKDAsIDEwMClcbiAgICAgICAgLnZhbHVlKDUwKVxuICAgICAgICAuc3VmZml4KFwiIHVuaXRzXCIpXG4gICAgICAgIC5wYXJlbnQoJmdyb3VwMylcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBBTEwgY29ubmVjdGlvbnMgQkVGT1JFIGFkZGluZyB0byBsYXlvdXRcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIC8vIFNsaWRlciDihpIgU3BpbkJveCAoYmlkaXJlY3Rpb25hbClcbiAgICBzbGlkZXIuY29ubmVjdChcbiAgICAgICAgU0xJREVSX1ZBTFVFX0NIQU5HRUQsXG4gICAgICAgICZzcGluLFxuICAgICAgICBTRVRfVkFMVUUsXG4gICAgICAgIENvbm5UeXBlOjpRdWV1ZWQsXG4gICAgKTtcblxuICAgIC8vIFNwaW5Cb3gg4oaSIFNsaWRlciAoYmlkaXJlY3Rpb25hbClcbiAgICBzcGluLmNvbm5lY3QoXG4gICAgICAgIFNQSU5fVkFMVUVfQ0hBTkdFRCxcbiAgICAgICAgJnNsaWRlcixcbiAgICAgICAgU0xJREVSX1NFVF9WQUxVRSxcbiAgICAgICAgQ29ublR5cGU6OlF1ZXVlZCxcbiAgICApO1xuXG4gICAgLy8gU2xpZGVyIOKGkiBQcm9ncmVzc0JhclxuICAgIHNsaWRlci5jb25uZWN0KFxuICAgICAgICBTTElERVJfVkFMVUVfQ0hBTkdFRCxcbiAgICAgICAgJmJhcixcbiAgICAgICAgUEJfU0VUX1ZBTFVFLFxuICAgICAgICBDb25uVHlwZTo6QXV0byxcbiAgICApO1xuXG4gICAgLy8gU3BpbkJveCDihpIgUHJvZ3Jlc3NCYXJcbiAgICBzcGluLmNvbm5lY3QoXG4gICAgICAgIFNQSU5fVkFMVUVfQ0hBTkdFRCxcbiAgICAgICAgJmJhcixcbiAgICAgICAgUEJfU0VUX1ZBTFVFLFxuICAgICAgICBDb25uVHlwZTo6QXV0byxcbiAgICApO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gTk9XIGFkZCB3aWRnZXRzIHRvIGxheW91dCAoYWZ0ZXIgYWxsIGNvbm5lY3Rpb25zKVxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGczX2xheW91dC5hZGQoYmFyKTtcbiAgICBnM19sYXlvdXQuYWRkKHNsaWRlcik7XG4gICAgZzNfbGF5b3V0LmFkZChzcGluKTtcblxuICAgIG1haW5fbGF5b3V0LmFkZChncm91cDMpO1xuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gU2VjdGlvbiA0OiBUYWJXaWRnZXRcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBsZXQgbXV0IHRhYnMgPSBUYWJXaWRnZXQ6Om5ldygpXG4gICAgICAgIC5vbl9jdXJyZW50X2NoYW5nZWQofGlkeHwgcHJpbnRsbiEoXCJbTE9HXSBUYWIgY2hhbmdlZCB0bzoge31cIiwgaWR4KSlcbiAgICAgICAgLnBhcmVudCgmd2luZG93KVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIC8vIFRhYiAxOiBTaW1wbGUgdGV4dFxuICAgIGxldCB0YWIxID0gV2lkZ2V0OjpuZXcoKS5wYXJlbnQoJnRhYnMpLmJ1aWxkKCk7XG4gICAgbGV0IG11dCB0YWIxX2xheW91dCA9IFZCb3hMYXlvdXQ6OndpdGhfcGFyZW50KCZ0YWIxKTtcbiAgICBsZXQgdGFiMV9sYWJlbCA9IExhYmVsOjpuZXcoXCJUaGlzIGlzIFRhYiAxXCIpLnBhcmVudCgmdGFiMSkuYnVpbGQoKTtcbiAgICB0YWIxX2xheW91dC5hZGQodGFiMV9sYWJlbCk7XG4gICAgdGFicy5hZGRfdGFiKEJveDo6bmV3KHRhYjEpLCBcIlRhYiAxXCIpO1xuXG4gICAgLy8gVGFiIDI6IENoZWNrQm94ZXNcbiAgICBsZXQgdGFiMiA9IFdpZGdldDo6bmV3KCkucGFyZW50KCZ0YWJzKS5idWlsZCgpO1xuICAgIGxldCBtdXQgdGFiMl9sYXlvdXQgPSBWQm94TGF5b3V0Ojp3aXRoX3BhcmVudCgmdGFiMik7XG4gICAgbGV0IGNiMSA9IENoZWNrQm94OjpuZXcoXCJPcHRpb24gWFwiKS5wYXJlbnQoJnRhYjIpLmJ1aWxkKCk7XG4gICAgbGV0IGNiMiA9IENoZWNrQm94OjpuZXcoXCJPcHRpb24gWVwiKS5wYXJlbnQoJnRhYjIpLmJ1aWxkKCk7XG4gICAgdGFiMl9sYXlvdXQuYWRkKGNiMSk7XG4gICAgdGFiMl9sYXlvdXQuYWRkKGNiMik7XG4gICAgdGFicy5hZGRfdGFiKEJveDo6bmV3KHRhYjIpLCBcIlRhYiAyXCIpO1xuXG4gICAgLy8gVGFiIDM6IEJ1dHRvblxuICAgIGxldCB0YWIzID0gV2lkZ2V0OjpuZXcoKS5wYXJlbnQoJnRhYnMpLmJ1aWxkKCk7XG4gICAgbGV0IG11dCB0YWIzX2xheW91dCA9IFZCb3hMYXlvdXQ6OndpdGhfcGFyZW50KCZ0YWIzKTtcbiAgICBsZXQgYnRuX3RhYjMgPSBQdXNoQnV0dG9uOjpuZXcoXCJUYWIgMyBCdXR0b25cIilcbiAgICAgICAgLm9uX2NsaWNrZWQofHwgcHJpbnRsbiEoXCJbTE9HXSBUYWIgMyBidXR0b24gY2xpY2tlZFwiKSlcbiAgICAgICAgLnBhcmVudCgmdGFiMylcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgdGFiM19sYXlvdXQuYWRkKGJ0bl90YWIzKTtcbiAgICB0YWJzLmFkZF90YWIoQm94OjpuZXcodGFiMyksIFwiVGFiIDNcIik7XG5cbiAgICBtYWluX2xheW91dC5hZGQodGFicyk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBTZWN0aW9uIDU6IE1lbnUgKyBNZW51QmFyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgbGV0IGZpbGVfbWVudSA9IE1lbnU6Om5ldyhcIkZpbGVcIilcbiAgICAgICAgLmFjdGlvbihcIk5ld1wiLCB8fCBwcmludGxuIShcIltMT0ddIE1lbnU6IE5ld1wiKSlcbiAgICAgICAgLmFjdGlvbihcIk9wZW5cIiwgfHwge1xuICAgICAgICAgICAgcHJpbnRsbiEoXCJbTE9HXSBNZW51OiBPcGVuXCIpO1xuICAgICAgICAgICAgaWYgbGV0IFNvbWUocGF0aCkgPSBGaWxlRGlhbG9nOjpvcGVuX2ZpbGUoXG4gICAgICAgICAgICAgICAgTm9uZSwgIC8vIE5vIHBhcmVudCBuZWVkZWRcbiAgICAgICAgICAgICAgICBcIlNlbGVjdCBhIGZpbGVcIixcbiAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgICAgIFwiQWxsIEZpbGVzICgqLiopOztUZXh0IEZpbGVzICgqLnR4dCk7O0ltYWdlcyAoKi5wbmcgKi5qcGcgKi5ibXApXCJcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHByaW50bG4hKFwiW0xPR10gRmlsZSBzZWxlY3RlZDoge31cIiwgcGF0aCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByaW50bG4hKFwiW0xPR10gRmlsZSBkaWFsb2cgY2FuY2VsbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuYWN0aW9uKFwiU2F2ZVwiLCB8fCB7XG4gICAgICAgICAgICBwcmludGxuIShcIltMT0ddIE1lbnU6IFNhdmVcIik7XG4gICAgICAgICAgICBpZiBsZXQgU29tZShwYXRoKSA9IEZpbGVEaWFsb2c6OnNlbGVjdF9kaXJlY3RvcnkoXG4gICAgICAgICAgICAgICAgTm9uZSwgXCJTZWxlY3QgYSBkaXJlY3RvcnkgdG8gc2F2ZVwiLCBcbiAgICAgICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcHJpbnRsbiEoXCJbTE9HXSBEaXJlY3Rvcnkgc2VsZWN0ZWQ6IHt9XCIsIHBhdGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcmludGxuIShcIltMT0ddIEZpbGUgZGlhbG9nIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmFjdGlvbihcIkV4aXRcIiwgfHwge1xuICAgICAgICAgICAgcHJpbnRsbiEoXCJbTE9HXSBNZW51OiBFeGl0XCIpO1xuICAgICAgICAgICAgc3RkOjpwcm9jZXNzOjpleGl0KDApO1xuICAgICAgICB9KVxuICAgICAgICAucGFyZW50KCZ3aW5kb3cpXG4gICAgICAgIC5idWlsZCgpO1xuXG4gICAgbGV0IGVkaXRfbWVudSA9IE1lbnU6Om5ldyhcIkVkaXRcIilcbiAgICAgICAgLmFjdGlvbihcIkNvcHlcIiwgfHwgcHJpbnRsbiEoXCJbTE9HXSBNZW51OiBDb3B5XCIpKVxuICAgICAgICAuYWN0aW9uKFwiUGFzdGVcIiwgfHwgcHJpbnRsbiEoXCJbTE9HXSBNZW51OiBQYXN0ZVwiKSlcbiAgICAgICAgLmFjdGlvbihcIkN1dFwiLCB8fCBwcmludGxuIShcIltMT0ddIE1lbnU6IEN1dFwiKSlcbiAgICAgICAgLnBhcmVudCgmd2luZG93KVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGxldCBoZWxwX21lbnUgPSBNZW51OjpuZXcoXCJIZWxwXCIpXG4gICAgICAgIC5hY3Rpb24oXCJBYm91dFwiLCB8fCB7XG4gICAgICAgICAgICBwcmludGxuIShcIltMT0ddIE1lbnU6IEFib3V0XCIpO1xuICAgICAgICAgICAgZGlhbG9nOjppbmZvcm1hdGlvbihcbiAgICAgICAgICAgICAgICBOb25lLCAgLy8gTm8gcGFyZW50IG5lZWRlZFxuICAgICAgICAgICAgICAgIFwiQWJvdXRcIixcbiAgICAgICAgICAgICAgICBcInF0cnMgV2lkZ2V0IEdhbGxlcnlcXG5WZXJzaW9uIDAuNC4yXFxuXFxuQWxsIHdpZGdldHMgdGVzdFwiLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnBhcmVudCgmd2luZG93KVxuICAgICAgICAuYnVpbGQoKTtcblxuICAgIGxldCBfbWVudWJhciA9IE1lbnVCYXI6Om5ldygpXG4gICAgICAgIC5hZGRfbWVudShmaWxlX21lbnUpXG4gICAgICAgIC5hZGRfbWVudShlZGl0X21lbnUpXG4gICAgICAgIC5hZGRfbWVudShoZWxwX21lbnUpXG4gICAgICAgIC5wYXJlbnQoJndpbmRvdylcbiAgICAgICAgLmJ1aWxkKCk7XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAvLyBCb3R0b20gYnV0dG9uczogRGlhbG9nc1xuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIGxldCBtdXQgYm90dG9tX2xheW91dCA9IEhCb3hMYXlvdXQ6Om5ldygpO1xuICAgIGJvdHRvbV9sYXlvdXQuc2V0X3NwYWNpbmcoMTApO1xuXG4gICAgbGV0IGluZm9fYnRuID0gUHVzaEJ1dHRvbjo6bmV3KFwiU2hvdyBJbmZvXCIpXG4gICAgICAgIC5vbl9jbGlja2VkKHx8IHtcbiAgICAgICAgICAgIHByaW50bG4hKFwiW0xPR10gSW5mbyBkaWFsb2cgc2hvd25cIik7XG4gICAgICAgICAgICBkaWFsb2c6OmluZm9ybWF0aW9uKE5vbmUsIFwiSW5mb1wiLCBcIlRoaXMgaXMgYW4gaW5mb3JtYXRpb24gZGlhbG9nXCIpO1xuICAgICAgICB9KVxuICAgICAgICAucGFyZW50KCZ3aW5kb3cpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIGJvdHRvbV9sYXlvdXQuYWRkKGluZm9fYnRuKTtcblxuICAgIGxldCB3YXJuX2J0biA9IFB1c2hCdXR0b246Om5ldyhcIlNob3cgV2FybmluZ1wiKVxuICAgICAgICAub25fY2xpY2tlZCh8fCB7XG4gICAgICAgICAgICBwcmludGxuIShcIltMT0ddIFdhcm5pbmcgZGlhbG9nIHNob3duXCIpO1xuICAgICAgICAgICAgZGlhbG9nOjp3YXJuaW5nKE5vbmUsIFwiV2FybmluZ1wiLCBcIlRoaXMgaXMgYSB3YXJuaW5nIGRpYWxvZ1wiKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnBhcmVudCgmd2luZG93KVxuICAgICAgICAuYnVpbGQoKTtcbiAgICBib3R0b21fbGF5b3V0LmFkZCh3YXJuX2J0bik7XG5cbiAgICBsZXQgYXNrX2J0biA9IFB1c2hCdXR0b246Om5ldyhcIkFzayBRdWVzdGlvblwiKVxuICAgICAgICAub25fY2xpY2tlZCh8fCB7XG4gICAgICAgICAgICBwcmludGxuIShcIltMT0ddIFF1ZXN0aW9uIGRpYWxvZyBzaG93blwiKTtcbiAgICAgICAgICAgIGxldCBhbnN3ZXIgPSBkaWFsb2c6OnF1ZXN0aW9uKE5vbmUsIFwiUXVlc3Rpb25cIiwgXCJBcmUgeW91IHN1cmU/XCIpO1xuICAgICAgICAgICAgcHJpbnRsbiEoXCJbTE9HXSBBbnN3ZXI6IHt9XCIsIGlmIGFuc3dlciB7IFwiWWVzXCIgfSBlbHNlIHsgXCJOb1wiIH0pO1xuICAgICAgICB9KVxuICAgICAgICAucGFyZW50KCZ3aW5kb3cpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIGJvdHRvbV9sYXlvdXQuYWRkKGFza19idG4pO1xuXG4gICAgbGV0IG11dCBib3R0b21fd2lkZ2V0ID0gV2lkZ2V0OjpuZXcoKS5wYXJlbnQoJndpbmRvdykuYnVpbGQoKTtcbiAgICBib3R0b21fd2lkZ2V0LnNldF9sYXlvdXQoJmJvdHRvbV9sYXlvdXQpO1xuICAgIG1haW5fbGF5b3V0LmFkZChib3R0b21fd2lkZ2V0KTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFN0YXR1cyBiYXJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICBsZXQgc3RhdHVzX2xhYmVsID0gTGFiZWw6Om5ldyhcIlN0YXR1czogUmVhZHkgLSBBbGwgd2lkZ2V0cyBsb2FkZWRcIilcbiAgICAgICAgLnBhcmVudCgmd2luZG93KVxuICAgICAgICAuYnVpbGQoKTtcbiAgICBtYWluX2xheW91dC5hZGQoc3RhdHVzX2xhYmVsKTtcblxuICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFNob3cgd2luZG93IGFuZCBydW5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICB3aW5kb3cuc2hvdygpO1xuICAgIHByaW50bG4hKFwiW0xPR10gQXBwbGljYXRpb24gc3RhcnRlZCAtIGFsbCB3aWRnZXRzIGxvYWRlZFwiKTtcbiAgICBwcmludGxuIShcIltMT0ddIEludGVyYWN0IHdpdGggd2lkZ2V0cyB0byBzZWUgbG9ncyBpbiB0ZXJtaW5hbFwiKTtcblxuICAgIGFwcC5leGVjKCk7XG59In1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1NTQwNjEwfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiM2FiN2U1MTkiLCJwYXJlbnRJZCI6IjhhNjM0MzhkIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNTo0MC42MTBaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsXzQ4cXZRTnQ0cUtQY21NV3o3S0hQRnAxWHxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGVkNDcyMGM4MTkxODc2M2ZhN2YxMjE0YzYxMSIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii8vISBUcmVlIHdpZGdldCBmb3IgZGlzcGxheWluZyBoaWVyYXJjaGljYWwgZGF0YS5cbi8vIVxuLy8hIFdyYXBzIFtgUVRyZWVXaWRnZXRgXShodHRwczovL2RvYy5xdC5pby9xdC02L3F0cmVld2lkZ2V0Lmh0bWwpLlxuXG51c2UgY3h4OjpsZXRfY3h4X3N0cmluZztcblxudXNlIGNyYXRlOjpmZmk7XG51c2UgY3JhdGU6OnNpZ25hbDo6e3NlbGYsIFNpZ25hbEhhbmRsZX07XG51c2UgY3JhdGU6OndpZGdldDo6QXNXaWRnZXQ7XG5cbi8vLyBBIHRyZWUgd2lkZ2V0IGZvciBkaXNwbGF5aW5nIGhpZXJhcmNoaWNhbCBpdGVtcy5cbi8vL1xuLy8vIFVzZSBhICoqYnVpbGRlciBwYXR0ZXJuKio6IFtgVHJlZVdpZGdldDo6bmV3YF0gcmV0dXJucyBhIFtgQnVpbGRlcmBdLlxuLy8vXG4vLy8gIyBTaWduYWxzXG4vLy9cbi8vLyB8IE1ldGhvZCB8IFF0IHNpZ25hbCB8IENhbGxiYWNrIHJlY2VpdmVzIHxcbi8vLyB8LS0tfC0tLXwtLS18XG4vLy8gfCBbYEJ1aWxkZXI6Om9uX2l0ZW1fY2xpY2tlZGBdIHwgYFFUcmVlV2lkZ2V0OjppdGVtQ2xpY2tlZGAgfCBgU3RyaW5nYCAoaXRlbSB0ZXh0KSB8XG4vLy8gfCBbYEJ1aWxkZXI6Om9uX2l0ZW1fZG91YmxlX2NsaWNrZWRgXSB8IGBRVHJlZVdpZGdldDo6aXRlbURvdWJsZUNsaWNrZWRgIHwgYFN0cmluZ2AgKGl0ZW0gdGV4dCkgfFxuLy8vIHwgW2BCdWlsZGVyOjpvbl9pdGVtX2V4cGFuZGVkYF0gfCBgUVRyZWVXaWRnZXQ6Oml0ZW1FeHBhbmRlZGAgfCBgU3RyaW5nYCAoaXRlbSB0ZXh0KSB8XG4vLy8gfCBbYEJ1aWxkZXI6Om9uX2l0ZW1fY29sbGFwc2VkYF0gfCBgUVRyZWVXaWRnZXQ6Oml0ZW1Db2xsYXBzZWRgIHwgYFN0cmluZ2AgKGl0ZW0gdGV4dCkgfFxuLy8vIHwgW2BCdWlsZGVyOjpvbl9jdXJyZW50X2l0ZW1fY2hhbmdlZGBdIHwgYFFUcmVlV2lkZ2V0OjpjdXJyZW50SXRlbUNoYW5nZWRgIHwgYFN0cmluZ2AgKGl0ZW0gdGV4dCkgfFxuLy8vXG4vLy8gIyBFeGFtcGxlXG4vLy9cbi8vLyBgYGBub19ydW5cbi8vLyB1c2UgcXRyczo6VHJlZVdpZGdldDtcbi8vL1xuLy8vIGxldCB0cmVlID0gVHJlZVdpZGdldDo6bmV3KClcbi8vLyAgICAgLm9uX2l0ZW1fY2xpY2tlZCh8dGV4dHwgcHJpbnRsbiEoXCJjbGlja2VkOiB7fVwiLCB0ZXh0KSlcbi8vLyAgICAgLmJ1aWxkKCk7XG4vLy9cbi8vLyB0cmVlLmFkZF90b3BfbGV2ZWxfaXRlbShcIlJvb3RcIik7XG4vLy8gdHJlZS5zZXRfaGVhZGVyX2xhYmVsKFwiTmFtZVwiKTtcbi8vLyBgYGBcbnB1YiBzdHJ1Y3QgVHJlZVdpZGdldCB7XG4gICAgcHRyOiAqbXV0IGZmaTo6UVRyZWVXaWRnZXQsXG4gICAgaGFzX3BhcmVudDogYm9vbCxcbiAgICBzaWduYWxfaGFuZGxlczogVmVjPFNpZ25hbEhhbmRsZT4sXG59XG5cbmltcGwgVHJlZVdpZGdldCB7XG4gICAgLy8vIFN0YXJ0IGJ1aWxkaW5nIGEgbmV3IHRyZWUgd2lkZ2V0LlxuICAgIHB1YiBmbiBuZXcoKSAtPiBCdWlsZGVyIHsgQnVpbGRlcjo6bmV3KCkgfVxuXG4gICAgLy8gLS0tIEl0ZW0gbWFuYWdlbWVudCAtLS1cblxuICAgIC8vLyBBZGQgYSB0b3AtbGV2ZWwgaXRlbSB3aXRoIHRoZSBnaXZlbiB0ZXh0LlxuICAgIHB1YiBmbiBhZGRfdG9wX2xldmVsX2l0ZW0oJnNlbGYsIHRleHQ6ICZzdHIpIHtcbiAgICAgICAgZGVidWdfYXNzZXJ0ISghc2VsZi5wdHIuaXNfbnVsbCgpKTtcbiAgICAgICAgbGV0X2N4eF9zdHJpbmchKGNfdGV4dCA9IHRleHQpO1xuICAgICAgICB1bnNhZmUgeyBmZmk6OlFUcmVlV2lkZ2V0X2FkZFRvcExldmVsSXRlbShzZWxmLnB0ciwgJmNfdGV4dCk7IH1cbiAgICB9XG5cbiAgICAvLy8gUmVtb3ZlIGFsbCBpdGVtcy5cbiAgICBwdWIgZm4gY2xlYXIoJnNlbGYpIHtcbiAgICAgICAgZGVidWdfYXNzZXJ0ISghc2VsZi5wdHIuaXNfbnVsbCgpKTtcbiAgICAgICAgdW5zYWZlIHsgZmZpOjpRVHJlZVdpZGdldF9jbGVhcihzZWxmLnB0cik7IH1cbiAgICB9XG5cbiAgICAvLyAtLS0gR2V0dGVycyAtLS1cblxuICAgIC8vLyBHZXQgdGhlIHRleHQgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLlxuICAgIHB1YiBmbiBjdXJyZW50X2l0ZW1fdGV4dCgmc2VsZikgLT4gU3RyaW5nIHtcbiAgICAgICAgZGVidWdfYXNzZXJ0ISghc2VsZi5wdHIuaXNfbnVsbCgpKTtcbiAgICAgICAgdW5zYWZlIHsgZmZpOjpRVHJlZVdpZGdldF9jdXJyZW50SXRlbVRleHQoc2VsZi5wdHIpIH1cbiAgICB9XG5cbiAgICAvLyAtLS0gSGVhZGVyIC0tLVxuXG4gICAgLy8vIFNldCB0aGUgaGVhZGVyIGxhYmVsIChzaW5nbGUgY29sdW1uKS5cbiAgICBwdWIgZm4gc2V0X2hlYWRlcl9sYWJlbCgmc2VsZiwgdGV4dDogJnN0cikge1xuICAgICAgICBkZWJ1Z19hc3NlcnQhKCFzZWxmLnB0ci5pc19udWxsKCkpO1xuICAgICAgICBsZXRfY3h4X3N0cmluZyEoY190ZXh0ID0gdGV4dCk7XG4gICAgICAgIHVuc2FmZSB7IGZmaTo6UVRyZWVXaWRnZXRfc2V0SGVhZGVyTGFiZWwoc2VsZi5wdHIsICZjX3RleHQpOyB9XG4gICAgfVxuXG4gICAgLy8vIFNldCBtdWx0aXBsZSBoZWFkZXIgbGFiZWxzLlxuICAgIHB1YiBmbiBzZXRfaGVhZGVyX2xhYmVscygmc2VsZiwgbGFiZWxzOiAmWyZzdHJdKSB7XG4gICAgICAgIGRlYnVnX2Fzc2VydCEoIXNlbGYucHRyLmlzX251bGwoKSk7XG4gICAgICAgIGxldCB2ZWM6IFZlYzxTdHJpbmc+ID0gbGFiZWxzLml0ZXIoKS5tYXAofHN8IHMudG9fc3RyaW5nKCkpLmNvbGxlY3QoKTtcbiAgICAgICAgdW5zYWZlIHsgZmZpOjpRVHJlZVdpZGdldF9zZXRIZWFkZXJMYWJlbHMoc2VsZi5wdHIsIHZlYyk7IH1cbiAgICB9XG5cbiAgICAvLyAtLS0gRXhwYW5kL0NvbGxhcHNlIC0tLVxuXG4gICAgLy8vIEV4cGFuZCBhbGwgaXRlbXMuXG4gICAgcHViIGZuIGV4cGFuZF9hbGwoJnNlbGYpIHtcbiAgICAgICAgZGVidWdfYXNzZXJ0ISghc2VsZi5wdHIuaXNfbnVsbCgpKTtcbiAgICAgICAgdW5zYWZlIHsgZmZpOjpRVHJlZVdpZGdldF9leHBhbmRBbGwoc2VsZi5wdHIpOyB9XG4gICAgfVxuXG4gICAgLy8vIENvbGxhcHNlIGFsbCBpdGVtcy5cbiAgICBwdWIgZm4gY29sbGFwc2VfYWxsKCZzZWxmKSB7XG4gICAgICAgIGRlYnVnX2Fzc2VydCEoIXNlbGYucHRyLmlzX251bGwoKSk7XG4gICAgICAgIHVuc2FmZSB7IGZmaTo6UVRyZWVXaWRnZXRfY29sbGFwc2VBbGwoc2VsZi5wdHIpOyB9XG4gICAgfVxuXG4gICAgLy8vIEV4cGFuZCB0aGUgaXRlbSB3aXRoIHRoZSBnaXZlbiB0ZXh0LlxuICAgIHB1YiBmbiBleHBhbmRfaXRlbSgmc2VsZiwgdGV4dDogJnN0cikge1xuICAgICAgICBkZWJ1Z19hc3NlcnQhKCFzZWxmLnB0ci5pc19udWxsKCkpO1xuICAgICAgICBsZXRfY3h4X3N0cmluZyEoY190ZXh0ID0gdGV4dCk7XG4gICAgICAgIHVuc2FmZSB7IGZmaTo6UVRyZWVXaWRnZXRfZXhwYW5kSXRlbShzZWxmLnB0ciwgJmNfdGV4dCk7IH1cbiAgICB9XG5cbiAgICAvLyAtLS0gQ3VycmVudCBpdGVtIC0tLVxuXG4gICAgLy8vIFNldCB0aGUgY3VycmVudCBpdGVtIGJ5IHRleHQuXG4gICAgcHViIGZuIHNldF9jdXJyZW50X2l0ZW0oJnNlbGYsIHRleHQ6ICZzdHIpIHtcbiAgICAgICAgZGVidWdfYXNzZXJ0ISghc2VsZi5wdHIuaXNfbnVsbCgpKTtcbiAgICAgICAgbGV0X2N4eF9zdHJpbmchKGNfdGV4dCA9IHRleHQpO1xuICAgICAgICB1bnNhZmUgeyBmZmk6OlFUcmVlV2lkZ2V0X3NldEN1cnJlbnRJdGVtKHNlbGYucHRyLCAmY190ZXh0KTsgfVxuICAgIH1cblxuICAgIC8vLyBHZXQgdGhlIG51bWJlciBvZiB0b3AtbGV2ZWwgaXRlbXMuXG4gICAgcHViIGZuIHRvcF9sZXZlbF9pdGVtX2NvdW50KCZzZWxmKSAtPiBpMzIge1xuICAgICAgICBkZWJ1Z19hc3NlcnQhKCFzZWxmLnB0ci5pc19udWxsKCkpO1xuICAgICAgICB1bnNhZmUgeyBmZmk6OlFUcmVlV2lkZ2V0X3RvcExldmVsSXRlbUNvdW50KHNlbGYucHRyKSB9XG4gICAgfVxuXG4gICAgLy8gLS0tIFNpZ25hbCBjb25uZWN0aW9ucyAocnVudGltZSkgLS0tXG5cbiAgICAvLy8gQ29ubmVjdCBjYWxsYmFjayB3aGVuIGFuIGl0ZW0gaXMgY2xpY2tlZC4gUmVjZWl2ZXMgdGhlIGl0ZW0gdGV4dC5cbiAgICBwdWIgZm4gY29ubmVjdF9pdGVtX2NsaWNrZWQ8RjogRm4oU3RyaW5nKT4oJm11dCBzZWxmLCBmOiBGKSB7XG4gICAgICAgIGRlYnVnX2Fzc2VydCEoIXNlbGYucHRyLmlzX251bGwoKSk7XG4gICAgICAgIGxldCBoYW5kbGUgPSBzaWduYWw6OmxlYWtfc3RyaW5nKGYpO1xuICAgICAgICB1bnNhZmUgeyBmZmk6OlFUcmVlV2lkZ2V0X29uSXRlbUNsaWNrZWQoc2VsZi5wdHIsIGhhbmRsZS50b2tlbik7IH1cbiAgICAgICAgc2VsZi5zaWduYWxfaGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gICAgfVxuXG4gICAgLy8vIENvbm5lY3QgY2FsbGJhY2sgd2hlbiBhbiBpdGVtIGlzIGRvdWJsZS1jbGlja2VkLiBSZWNlaXZlcyB0aGUgaXRlbSB0ZXh0LlxuICAgIHB1YiBmbiBjb25uZWN0X2l0ZW1fZG91YmxlX2NsaWNrZWQ8RjogRm4oU3RyaW5nKT4oJm11dCBzZWxmLCBmOiBGKSB7XG4gICAgICAgIGRlYnVnX2Fzc2VydCEoIXNlbGYucHRyLmlzX251bGwoKSk7XG4gICAgICAgIGxldCBoYW5kbGUgPSBzaWduYWw6OmxlYWtfc3RyaW5nKGYpO1xuICAgICAgICB1bnNhZmUgeyBmZmk6OlFUcmVlV2lkZ2V0X29uSXRlbURvdWJsZUNsaWNrZWQoc2VsZi5wdHIsIGhhbmRsZS50b2tlbik7IH1cbiAgICAgICAgc2VsZi5zaWduYWxfaGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gICAgfVxuXG4gICAgLy8vIENvbm5lY3QgY2FsbGJhY2sgd2hlbiBhbiBpdGVtIGlzIGV4cGFuZGVkLiBSZWNlaXZlcyB0aGUgaXRlbSB0ZXh0LlxuICAgIHB1YiBmbiBjb25uZWN0X2l0ZW1fZXhwYW5kZWQ8RjogRm4oU3RyaW5nKT4oJm11dCBzZWxmLCBmOiBGKSB7XG4gICAgICAgIGRlYnVnX2Fzc2VydCEoIXNlbGYucHRyLmlzX251bGwoKSk7XG4gICAgICAgIGxldCBoYW5kbGUgPSBzaWduYWw6OmxlYWtfc3RyaW5nKGYpO1xuICAgICAgICB1bnNhZmUgeyBmZmk6OlFUcmVlV2lkZ2V0X29uSXRlbUV4cGFuZGVkKHNlbGYucHRyLCBoYW5kbGUudG9rZW4pOyB9XG4gICAgICAgIHNlbGYuc2lnbmFsX2hhbmRsZXMucHVzaChoYW5kbGUpO1xuICAgIH1cblxuICAgIC8vLyBDb25uZWN0IGNhbGxiYWNrIHdoZW4gYW4gaXRlbSBpcyBjb2xsYXBzZWQuIFJlY2VpdmVzIHRoZSBpdGVtIHRleHQuXG4gICAgcHViIGZuIGNvbm5lY3RfaXRlbV9jb2xsYXBzZWQ8RjogRm4oU3RyaW5nKT4oJm11dCBzZWxmLCBmOiBGKSB7XG4gICAgICAgIGRlYnVnX2Fzc2VydCEoIXNlbGYucHRyLmlzX251bGwoKSk7XG4gICAgICAgIGxldCBoYW5kbGUgPSBzaWduYWw6OmxlYWtfc3RyaW5nKGYpO1xuICAgICAgICB1bnNhZmUgeyBmZmk6OlFUcmVlV2lkZ2V0X29uSXRlbUNvbGxhcHNlZChzZWxmLnB0ciwgaGFuZGxlLnRva2VuKTsgfVxuICAgICAgICBzZWxmLnNpZ25hbF9oYW5kbGVzLnB1c2goaGFuZGxlKTtcbiAgICB9XG5cbiAgICAvLy8gQ29ubmVjdCBjYWxsYmFjayB3aGVuIHRoZSBjdXJyZW50IGl0ZW0gY2hhbmdlcy4gUmVjZWl2ZXMgdGhlIGl0ZW0gdGV4dC5cbiAgICBwdWIgZm4gY29ubmVjdF9jdXJyZW50X2l0ZW1fY2hhbmdlZDxGOiBGbihTdHJpbmcpPigmbXV0IHNlbGYsIGY6IEYpIHtcbiAgICAgICAgZGVidWdfYXNzZXJ0ISghc2VsZi5wdHIuaXNfbnVsbCgpKTtcbiAgICAgICAgbGV0IGhhbmRsZSA9IHNpZ25hbDo6bGVha19zdHJpbmcoZik7XG4gICAgICAgIHVuc2FmZSB7IGZmaTo6UVRyZWVXaWRnZXRfb25DdXJyZW50SXRlbUNoYW5nZWQoc2VsZi5wdHIsIGhhbmRsZS50b2tlbik7IH1cbiAgICAgICAgc2VsZi5zaWduYWxfaGFuZGxlcy5wdXNoKGhhbmRsZSk7XG4gICAgfVxuXG4gICAgI1tkb2MoaGlkZGVuKV1cbiAgICBwdWIoY3JhdGUpIGZuIGZyb21fcmF3KHB0cjogKm11dCBmZmk6OlFUcmVlV2lkZ2V0KSAtPiBTZWxmIHtcbiAgICAgICAgZGVidWdfYXNzZXJ0ISghcHRyLmlzX251bGwoKSk7XG4gICAgICAgIFNlbGYgeyBwdHIsIGhhc19wYXJlbnQ6IHRydWUsIHNpZ25hbF9oYW5kbGVzOiBWZWM6Om5ldygpIH1cbiAgICB9XG59XG5cbmltcGwgQXNXaWRnZXQgZm9yIFRyZWVXaWRnZXQge1xuICAgIGZuIHdpZGdldF9wdHIoJnNlbGYpIC0+ICptdXQgZmZpOjpRV2lkZ2V0IHtcbiAgICAgICAgZGVidWdfYXNzZXJ0ISghc2VsZi5wdHIuaXNfbnVsbCgpKTtcbiAgICAgICAgdW5zYWZlIHsgZmZpOjp0b1FXaWRnZXRfUVRyZWVXaWRnZXQoc2VsZi5wdHIpIH1cbiAgICB9XG4gICAgZm4gc2V0X2hhc19wYXJlbnQoJm11dCBzZWxmKSB7IHNlbGYuaGFzX3BhcmVudCA9IHRydWU7IH1cbn1cblxuaW1wbCBEcm9wIGZvciBUcmVlV2lkZ2V0IHtcbiAgICBmbiBkcm9wKCZtdXQgc2VsZikge1xuICAgICAgICBpZiBzZWxmLnB0ci5pc19udWxsKCkgeyByZXR1cm47IH1cbiAgICAgICAgaWYgc2VsZi5oYXNfcGFyZW50IHtcbiAgICAgICAgICAgIHVuc2FmZSB7IGZmaTo6UVdpZGdldF9kaXNjb25uZWN0QWxsKHNlbGYucHRyIGFzICptdXQgXyk7IH1cbiAgICAgICAgICAgIGZvciBoIGluIHNlbGYuc2lnbmFsX2hhbmRsZXMuZHJhaW4oLi4pIHsgdW5zYWZlIHsgaC5yZWNsYWltKCk7IH0gfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIGggaW4gc2VsZi5zaWduYWxfaGFuZGxlcy5kcmFpbiguLikgeyB1bnNhZmUgeyBoLnJlY2xhaW0oKTsgfSB9XG4gICAgICAgICAgICB1bnNhZmUgeyBmZmk6OlFUcmVlV2lkZ2V0X2RlbGV0ZShzZWxmLnB0cikgfTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLnB0ciA9IHN0ZDo6cHRyOjpudWxsX211dCgpO1xuICAgIH1cbn1cblxuLy8vIEJ1aWxkZXIgZm9yIFtgVHJlZVdpZGdldGBdLlxucHViIHN0cnVjdCBCdWlsZGVyIHtcbiAgICBvbl9pdGVtX2NsaWNrZWQ6IE9wdGlvbjxCb3g8ZHluIEZuKFN0cmluZyk+PixcbiAgICBvbl9pdGVtX2RvdWJsZV9jbGlja2VkOiBPcHRpb248Qm94PGR5biBGbihTdHJpbmcpPj4sXG4gICAgb25faXRlbV9leHBhbmRlZDogT3B0aW9uPEJveDxkeW4gRm4oU3RyaW5nKT4+LFxuICAgIG9uX2l0ZW1fY29sbGFwc2VkOiBPcHRpb248Qm94PGR5biBGbihTdHJpbmcpPj4sXG4gICAgb25fY3VycmVudF9pdGVtX2NoYW5nZWQ6IE9wdGlvbjxCb3g8ZHluIEZuKFN0cmluZyk+PixcbiAgICBwYXJlbnQ6IE9wdGlvbjwqbXV0IGZmaTo6UVdpZGdldD4sXG59XG5cbmltcGwgQnVpbGRlciB7XG4gICAgZm4gbmV3KCkgLT4gU2VsZiB7XG4gICAgICAgIFNlbGYge1xuICAgICAgICAgICAgb25faXRlbV9jbGlja2VkOiBOb25lLFxuICAgICAgICAgICAgb25faXRlbV9kb3VibGVfY2xpY2tlZDogTm9uZSxcbiAgICAgICAgICAgIG9uX2l0ZW1fZXhwYW5kZWQ6IE5vbmUsXG4gICAgICAgICAgICBvbl9pdGVtX2NvbGxhcHNlZDogTm9uZSxcbiAgICAgICAgICAgIG9uX2N1cnJlbnRfaXRlbV9jaGFuZ2VkOiBOb25lLFxuICAgICAgICAgICAgcGFyZW50OiBOb25lLFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8vIENhbGxlZCB3aGVuIGFuIGl0ZW0gaXMgY2xpY2tlZC4gUmVjZWl2ZXMgdGhlIGl0ZW0gdGV4dC5cbiAgICBwdWIgZm4gb25faXRlbV9jbGlja2VkPEY6IEZuKFN0cmluZykgKyAnc3RhdGljPihtdXQgc2VsZiwgZjogRikgLT4gU2VsZiB7XG4gICAgICAgIHNlbGYub25faXRlbV9jbGlja2VkID0gU29tZShCb3g6Om5ldyhmKSk7XG4gICAgICAgIHNlbGZcbiAgICB9XG5cbiAgICAvLy8gQ2FsbGVkIHdoZW4gYW4gaXRlbSBpcyBkb3VibGUtY2xpY2tlZC4gUmVjZWl2ZXMgdGhlIGl0ZW0gdGV4dC5cbiAgICBwdWIgZm4gb25faXRlbV9kb3VibGVfY2xpY2tlZDxGOiBGbihTdHJpbmcpICsgJ3N0YXRpYz4obXV0IHNlbGYsIGY6IEYpIC0+IFNlbGYge1xuICAgICAgICBzZWxmLm9uX2l0ZW1fZG91YmxlX2NsaWNrZWQgPSBTb21lKEJveDo6bmV3KGYpKTtcbiAgICAgICAgc2VsZlxuICAgIH1cblxuICAgIC8vLyBDYWxsZWQgd2hlbiBhbiBpdGVtIGlzIGV4cGFuZGVkLiBSZWNlaXZlcyB0aGUgaXRlbSB0ZXh0LlxuICAgIHB1YiBmbiBvbl9pdGVtX2V4cGFuZGVkPEY6IEZuKFN0cmluZykgKyAnc3RhdGljPihtdXQgc2VsZiwgZjogRikgLT4gU2VsZiB7XG4gICAgICAgIHNlbGYub25faXRlbV9leHBhbmRlZCA9IFNvbWUoQm94OjpuZXcoZikpO1xuICAgICAgICBzZWxmXG4gICAgfVxuXG4gICAgLy8vIENhbGxlZCB3aGVuIGFuIGl0ZW0gaXMgY29sbGFwc2VkLiBSZWNlaXZlcyB0aGUgaXRlbSB0ZXh0LlxuICAgIHB1YiBmbiBvbl9pdGVtX2NvbGxhcHNlZDxGOiBGbihTdHJpbmcpICsgJ3N0YXRpYz4obXV0IHNlbGYsIGY6IEYpIC0+IFNlbGYge1xuICAgICAgICBzZWxmLm9uX2l0ZW1fY29sbGFwc2VkID0gU29tZShCb3g6Om5ldyhmKSk7XG4gICAgICAgIHNlbGZcbiAgICB9XG5cbiAgICAvLy8gQ2FsbGVkIHdoZW4gdGhlIGN1cnJlbnQgaXRlbSBjaGFuZ2VzLiBSZWNlaXZlcyB0aGUgaXRlbSB0ZXh0LlxuICAgIHB1YiBmbiBvbl9jdXJyZW50X2l0ZW1fY2hhbmdlZDxGOiBGbihTdHJpbmcpICsgJ3N0YXRpYz4obXV0IHNlbGYsIGY6IEYpIC0+IFNlbGYge1xuICAgICAgICBzZWxmLm9uX2N1cnJlbnRfaXRlbV9jaGFuZ2VkID0gU29tZShCb3g6Om5ldyhmKSk7XG4gICAgICAgIHNlbGZcbiAgICB9XG5cbiAgICAvLy8gU2V0IHRoZSBwYXJlbnQgd2lkZ2V0LlxuICAgIHB1YiBmbiBwYXJlbnQobXV0IHNlbGYsIHBhcmVudDogJmR5biBBc1dpZGdldCkgLT4gU2VsZiB7XG4gICAgICAgIHNlbGYucGFyZW50ID0gU29tZShwYXJlbnQud2lkZ2V0X3B0cigpKTtcbiAgICAgICAgc2VsZlxuICAgIH1cblxuICAgIC8vLyBDcmVhdGUgdGhlIEMrKyBgUVRyZWVXaWRnZXRgIGFuZCByZXR1cm4gdGhlIFJ1c3Qgd3JhcHBlci5cbiAgICBwdWIgZm4gYnVpbGQoc2VsZikgLT4gVHJlZVdpZGdldCB7XG4gICAgICAgIGxldCBwdHIgPSB1bnNhZmUge1xuICAgICAgICAgICAgZmZpOjpRVHJlZVdpZGdldF9uZXcoc2VsZi5wYXJlbnQudW53cmFwX29yKHN0ZDo6cHRyOjpudWxsX211dCgpKSlcbiAgICAgICAgfTtcbiAgICAgICAgZGVidWdfYXNzZXJ0ISghcHRyLmlzX251bGwoKSk7XG4gICAgICAgIGxldCBtdXQgdHcgPSBUcmVlV2lkZ2V0IHtcbiAgICAgICAgICAgIHB0cixcbiAgICAgICAgICAgIGhhc19wYXJlbnQ6IHNlbGYucGFyZW50LmlzX3NvbWUoKSxcbiAgICAgICAgICAgIHNpZ25hbF9oYW5kbGVzOiBWZWM6Om5ldygpLFxuICAgICAgICB9O1xuICAgICAgICBpZiBsZXQgU29tZShmKSA9IHNlbGYub25faXRlbV9jbGlja2VkIHtcbiAgICAgICAgICAgIGxldCBoID0gc2lnbmFsOjpsZWFrX3N0cmluZyhmKTtcbiAgICAgICAgICAgIHVuc2FmZSB7IGZmaTo6UVRyZWVXaWRnZXRfb25JdGVtQ2xpY2tlZChwdHIsIGgudG9rZW4pOyB9XG4gICAgICAgICAgICB0dy5zaWduYWxfaGFuZGxlcy5wdXNoKGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIGxldCBTb21lKGYpID0gc2VsZi5vbl9pdGVtX2RvdWJsZV9jbGlja2VkIHtcbiAgICAgICAgICAgIGxldCBoID0gc2lnbmFsOjpsZWFrX3N0cmluZyhmKTtcbiAgICAgICAgICAgIHVuc2FmZSB7IGZmaTo6UVRyZWVXaWRnZXRfb25JdGVtRG91YmxlQ2xpY2tlZChwdHIsIGgudG9rZW4pOyB9XG4gICAgICAgICAgICB0dy5zaWduYWxfaGFuZGxlcy5wdXNoKGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIGxldCBTb21lKGYpID0gc2VsZi5vbl9pdGVtX2V4cGFuZGVkIHtcbiAgICAgICAgICAgIGxldCBoID0gc2lnbmFsOjpsZWFrX3N0cmluZyhmKTtcbiAgICAgICAgICAgIHVuc2FmZSB7IGZmaTo6UVRyZWVXaWRnZXRfb25JdGVtRXhwYW5kZWQocHRyLCBoLnRva2VuKTsgfVxuICAgICAgICAgICAgdHcuc2lnbmFsX2hhbmRsZXMucHVzaChoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiBsZXQgU29tZShmKSA9IHNlbGYub25faXRlbV9jb2xsYXBzZWQge1xuICAgICAgICAgICAgbGV0IGggPSBzaWduYWw6OmxlYWtfc3RyaW5nKGYpO1xuICAgICAgICAgICAgdW5zYWZlIHsgZmZpOjpRVHJlZVdpZGdldF9vbkl0ZW1Db2xsYXBzZWQocHRyLCBoLnRva2VuKTsgfVxuICAgICAgICAgICAgdHcuc2lnbmFsX2hhbmRsZXMucHVzaChoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiBsZXQgU29tZShmKSA9IHNlbGYub25fY3VycmVudF9pdGVtX2NoYW5nZWQge1xuICAgICAgICAgICAgbGV0IGggPSBzaWduYWw6OmxlYWtfc3RyaW5nKGYpO1xuICAgICAgICAgICAgdW5zYWZlIHsgZmZpOjpRVHJlZVdpZGdldF9vbkN1cnJlbnRJdGVtQ2hhbmdlZChwdHIsIGgudG9rZW4pOyB9XG4gICAgICAgICAgICB0dy5zaWduYWxfaGFuZGxlcy5wdXNoKGgpO1xuICAgICAgICB9XG4gICAgICAgIHR3XG4gICAgfVxufVxuIn1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1NTQwNjEwfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiYjNlNWJlMWYiLCJwYXJlbnRJZCI6IjNhYjdlNTE5IiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNTo0MC42MTBaIiwibWVzc2FnZSI6eyJyb2xlIjoidG9vbFJlc3VsdCIsInRvb2xDYWxsSWQiOiJjYWxsX0RUNTdleTR2d0tHSzJhS0hRcXk4aW1qcXxmY18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGVkNDcyMTQ4MTkxYmIxZjdiOTIxZDEwZjA2ZSIsInRvb2xOYW1lIjoicmVhZCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ii8vISBTdGF0aWMgY29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBpbnB1dCBkaWFsb2dzLlxuLy8hXG4vLyEgV3JhcHMgc3RhdGljIG1ldGhvZHMgb25cbi8vISBbYFFJbnB1dERpYWxvZ2BdKGh0dHBzOi8vZG9jLnF0LmlvL3F0LTYvcWlucHV0ZGlhbG9nLmh0bWwpLlxuLy8hXG4vLyEgIyBOb3RlXG4vLyFcbi8vISBUaGVzZSBhcmUgcHVyZSBzdGF0aWMgZnVuY3Rpb25zIOKAlCB0aGVyZSBpcyBubyBzdHJ1Y3Qgb3IgYnVpbGRlciBwYXR0ZXJuLlxuXG51c2UgY3h4OjpsZXRfY3h4X3N0cmluZztcblxudXNlIGNyYXRlOjpmZmk7XG51c2UgY3JhdGU6OndpZGdldDo6QXNXaWRnZXQ7XG5cbi8vLyBTaG93IGEgbW9kYWwgZGlhbG9nIGFza2luZyB0aGUgdXNlciB0byBlbnRlciBhIHN0cmluZy5cbi8vL1xuLy8vIFJldHVybnMgdGhlIGVudGVyZWQgdGV4dCwgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSB1c2VyIGNhbmNlbGxlZC5cbnB1YiBmbiBnZXRfdGV4dChwYXJlbnQ6IE9wdGlvbjwmZHluIEFzV2lkZ2V0PiwgdGl0bGU6ICZzdHIsIGxhYmVsOiAmc3RyLCBkZWZhdWx0X3RleHQ6ICZzdHIpIC0+IFN0cmluZyB7XG4gICAgbGV0IHBhcmVudF9wdHIgPSBwYXJlbnQubWFwKHxwfCBwLndpZGdldF9wdHIoKSkudW53cmFwX29yKHN0ZDo6cHRyOjpudWxsX211dCgpKTtcbiAgICBsZXRfY3h4X3N0cmluZyEoY190aXRsZSA9IHRpdGxlKTtcbiAgICBsZXRfY3h4X3N0cmluZyEoY19sYWJlbCA9IGxhYmVsKTtcbiAgICBsZXRfY3h4X3N0cmluZyEoY19kZWZhdWx0ID0gZGVmYXVsdF90ZXh0KTtcbiAgICB1bnNhZmUgeyBmZmk6OlFJbnB1dERpYWxvZ19nZXRUZXh0KHBhcmVudF9wdHIsICZjX3RpdGxlLCAmY19sYWJlbCwgJmNfZGVmYXVsdCkgfVxufVxuXG4vLy8gU2hvdyBhIG1vZGFsIGRpYWxvZyBhc2tpbmcgdGhlIHVzZXIgdG8gZW50ZXIgYW4gaW50ZWdlci5cbi8vL1xuLy8vIFJldHVybnMgYDBgIGlmIHRoZSB1c2VyIGNhbmNlbGxlZC5cbnB1YiBmbiBnZXRfaW50KFxuICAgIHBhcmVudDogT3B0aW9uPCZkeW4gQXNXaWRnZXQ+LFxuICAgIHRpdGxlOiAmc3RyLFxuICAgIGxhYmVsOiAmc3RyLFxuICAgIHZhbHVlOiBpMzIsXG4gICAgbWluOiBpMzIsXG4gICAgbWF4OiBpMzIsXG4gICAgc3RlcDogaTMyLFxuKSAtPiBpMzIge1xuICAgIGxldCBwYXJlbnRfcHRyID0gcGFyZW50Lm1hcCh8cHwgcC53aWRnZXRfcHRyKCkpLnVud3JhcF9vcihzdGQ6OnB0cjo6bnVsbF9tdXQoKSk7XG4gICAgbGV0X2N4eF9zdHJpbmchKGNfdGl0bGUgPSB0aXRsZSk7XG4gICAgbGV0X2N4eF9zdHJpbmchKGNfbGFiZWwgPSBsYWJlbCk7XG4gICAgdW5zYWZlIHsgZmZpOjpRSW5wdXREaWFsb2dfZ2V0SW50KHBhcmVudF9wdHIsICZjX3RpdGxlLCAmY19sYWJlbCwgdmFsdWUsIG1pbiwgbWF4LCBzdGVwKSB9XG59XG5cbi8vLyBTaG93IGEgbW9kYWwgZGlhbG9nIGFza2luZyB0aGUgdXNlciB0byBlbnRlciBhIGZsb2F0aW5nLXBvaW50IG51bWJlci5cbi8vL1xuLy8vIFJldHVybnMgYDAuMGAgaWYgdGhlIHVzZXIgY2FuY2VsbGVkLlxucHViIGZuIGdldF9kb3VibGUoXG4gICAgcGFyZW50OiBPcHRpb248JmR5biBBc1dpZGdldD4sXG4gICAgdGl0bGU6ICZzdHIsXG4gICAgbGFiZWw6ICZzdHIsXG4gICAgdmFsdWU6IGY2NCxcbiAgICBtaW46IGY2NCxcbiAgICBtYXg6IGY2NCxcbiAgICBkZWNpbWFsczogaTMyLFxuKSAtPiBmNjQge1xuICAgIGxldCBwYXJlbnRfcHRyID0gcGFyZW50Lm1hcCh8cHwgcC53aWRnZXRfcHRyKCkpLnVud3JhcF9vcihzdGQ6OnB0cjo6bnVsbF9tdXQoKSk7XG4gICAgbGV0X2N4eF9zdHJpbmchKGNfdGl0bGUgPSB0aXRsZSk7XG4gICAgbGV0X2N4eF9zdHJpbmchKGNfbGFiZWwgPSBsYWJlbCk7XG4gICAgdW5zYWZlIHsgZmZpOjpRSW5wdXREaWFsb2dfZ2V0RG91YmxlKHBhcmVudF9wdHIsICZjX3RpdGxlLCAmY19sYWJlbCwgdmFsdWUsIG1pbiwgbWF4LCBkZWNpbWFscykgfVxufVxuXG4vLy8gU2hvdyBhIG1vZGFsIGRpYWxvZyBhc2tpbmcgdGhlIHVzZXIgdG8gcGljayBhbiBpdGVtIGZyb20gYSBsaXN0LlxuLy8vXG4vLy8gUmV0dXJucyB0aGUgc2VsZWN0ZWQgaXRlbSB0ZXh0LCBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIHVzZXIgY2FuY2VsbGVkLlxucHViIGZuIGdldF9pdGVtKFxuICAgIHBhcmVudDogT3B0aW9uPCZkeW4gQXNXaWRnZXQ+LFxuICAgIHRpdGxlOiAmc3RyLFxuICAgIGxhYmVsOiAmc3RyLFxuICAgIGl0ZW1zOiAmWyZzdHJdLFxuICAgIGN1cnJlbnQ6IGkzMixcbiAgICBlZGl0YWJsZTogYm9vbCxcbikgLT4gU3RyaW5nIHtcbiAgICBsZXQgcGFyZW50X3B0ciA9IHBhcmVudC5tYXAofHB8IHAud2lkZ2V0X3B0cigpKS51bndyYXBfb3Ioc3RkOjpwdHI6Om51bGxfbXV0KCkpO1xuICAgIGxldF9jeHhfc3RyaW5nIShjX3RpdGxlID0gdGl0bGUpO1xuICAgIGxldF9jeHhfc3RyaW5nIShjX2xhYmVsID0gbGFiZWwpO1xuICAgIGxldCBpdGVtc192ZWM6IFZlYzxTdHJpbmc+ID0gaXRlbXMuaXRlcigpLm1hcCh8c3wgcy50b19zdHJpbmcoKSkuY29sbGVjdCgpO1xuICAgIHVuc2FmZSB7IGZmaTo6UUlucHV0RGlhbG9nX2dldEl0ZW0ocGFyZW50X3B0ciwgJmNfdGl0bGUsICZjX2xhYmVsLCBpdGVtc192ZWMsIGN1cnJlbnQsIGVkaXRhYmxlKSB9XG59XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTU1NDA2MTB9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiIxYjA0ZmIxYyIsInBhcmVudElkIjoiYjNlNWJlMWYiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjA1OjQwLjYxMFoiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfamxHNElLand2U3NOVzlTSE5DWmg0dWxofGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWQ0NzIxODgxOTE4Y2VlMzBjNzcxODc0YjljIiwidG9vbE5hbWUiOiJyZWFkIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiLy8hIEZpbGUgZGlhbG9nIGZvciBvcGVuaW5nIGFuZCBzYXZpbmcgZmlsZXMuXG4vLyFcbi8vISBXcmFwcyBbYFFGaWxlRGlhbG9nYF0oaHR0cHM6Ly9kb2MucXQuaW8vcXQtNi9xZmlsZWRpYWxvZy5odG1sKS5cblxudXNlIGN4eDo6bGV0X2N4eF9zdHJpbmc7XG51c2UgY3JhdGU6OmZmaTtcbnVzZSBjcmF0ZTo6d2lkZ2V0OjpBc1dpZGdldDtcblxuLy8vIEZpbGUgZGlhbG9nIGNvbnZlbmllbmNlIGZ1bmN0aW9ucy5cbi8vL1xuLy8vIFByb3ZpZGVzIHN0YXRpYyBtZXRob2RzIGZvciBjb21tb24gZmlsZSBzZWxlY3Rpb24gb3BlcmF0aW9ucy5cbi8vL1xuLy8vICMgRXhhbXBsZVxuLy8vXG4vLy8gYGBgbm9fcnVuXG4vLy8gdXNlIHF0cnM6OkZpbGVEaWFsb2c7XG4vLy9cbi8vLyAvLyBPcGVuIGEgZmlsZVxuLy8vIGlmIGxldCBTb21lKHBhdGgpID0gRmlsZURpYWxvZzo6b3Blbl9maWxlKE5vbmUsIFwiT3BlbiBJbWFnZVwiLCBcIlwiLCBcIkltYWdlcyAoKi5wbmcgKi5qcGcpXCIpIHtcbi8vLyAgICAgcHJpbnRsbiEoXCJTZWxlY3RlZDoge31cIiwgcGF0aCk7XG4vLy8gfVxuLy8vXG4vLy8gLy8gU2F2ZSBhIGZpbGVcbi8vLyBpZiBsZXQgU29tZShwYXRoKSA9IEZpbGVEaWFsb2c6OnNhdmVfZmlsZShOb25lLCBcIlNhdmUgRG9jdW1lbnRcIiwgXCJcIiwgXCJUZXh0IEZpbGVzICgqLnR4dClcIikge1xuLy8vICAgICBwcmludGxuIShcIlNhdmUgdG86IHt9XCIsIHBhdGgpO1xuLy8vIH1cbi8vL1xuLy8vIC8vIFNlbGVjdCBhIGRpcmVjdG9yeVxuLy8vIGlmIGxldCBTb21lKHBhdGgpID0gRmlsZURpYWxvZzo6c2VsZWN0X2RpcmVjdG9yeShOb25lLCBcIlNlbGVjdCBGb2xkZXJcIiwgXCJcIikge1xuLy8vICAgICBwcmludGxuIShcIlNlbGVjdGVkIGRpcjoge31cIiwgcGF0aCk7XG4vLy8gfVxuLy8vIGBgYFxucHViIHN0cnVjdCBGaWxlRGlhbG9nO1xuXG5pbXBsIEZpbGVEaWFsb2cge1xuICAgIC8vLyBPcGVuIGEgc2luZ2xlIGZpbGUuXG4gICAgLy8vXG4gICAgLy8vICMgUGFyYW1ldGVyc1xuICAgIC8vL1xuICAgIC8vLyAqIGBwYXJlbnRgIOKAlCBPcHRpb25hbCBwYXJlbnQgd2lkZ2V0XG4gICAgLy8vICogYGNhcHRpb25gIOKAlCBEaWFsb2cgdGl0bGVcbiAgICAvLy8gKiBgZGlyYCDigJQgU3RhcnRpbmcgZGlyZWN0b3J5IChlbXB0eSBmb3IgZGVmYXVsdClcbiAgICAvLy8gKiBgZmlsdGVyYCDigJQgRmlsZSBmaWx0ZXIsIGUuZy4gYFwiSW1hZ2VzICgqLnBuZyAqLmpwZylcImBcbiAgICAvLy9cbiAgICAvLy8gIyBSZXR1cm5zXG4gICAgLy8vXG4gICAgLy8vIGBTb21lKHBhdGgpYCBpZiBhIGZpbGUgd2FzIHNlbGVjdGVkLCBgTm9uZWAgaWYgY2FuY2VsbGVkLlxuICAgIHB1YiBmbiBvcGVuX2ZpbGUoXG4gICAgICAgIHBhcmVudDogT3B0aW9uPCZkeW4gQXNXaWRnZXQ+LFxuICAgICAgICBjYXB0aW9uOiAmc3RyLFxuICAgICAgICBkaXI6ICZzdHIsXG4gICAgICAgIGZpbHRlcjogJnN0cixcbiAgICApIC0+IE9wdGlvbjxTdHJpbmc+IHtcbiAgICAgICAgbGV0IHBhcmVudF9wdHIgPSBwYXJlbnQubWFwKHxwfCBwLndpZGdldF9wdHIoKSkudW53cmFwX29yKHN0ZDo6cHRyOjpudWxsX211dCgpKTtcbiAgICAgICAgbGV0X2N4eF9zdHJpbmchKGNfY2FwdGlvbiA9IGNhcHRpb24pO1xuICAgICAgICBsZXRfY3h4X3N0cmluZyEoY19kaXIgPSBkaXIpO1xuICAgICAgICBsZXRfY3h4X3N0cmluZyEoY19maWx0ZXIgPSBmaWx0ZXIpO1xuXG4gICAgICAgIGxldCByZXN1bHQgPSB1bnNhZmUge1xuICAgICAgICAgICAgZmZpOjpRRmlsZURpYWxvZ19nZXRPcGVuRmlsZU5hbWUoXG4gICAgICAgICAgICAgICAgcGFyZW50X3B0cixcbiAgICAgICAgICAgICAgICAmY19jYXB0aW9uLFxuICAgICAgICAgICAgICAgICZjX2RpcixcbiAgICAgICAgICAgICAgICAmY19maWx0ZXIsXG4gICAgICAgICAgICApXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgcmVzdWx0LmlzX2VtcHR5KCkgeyBOb25lIH0gZWxzZSB7IFNvbWUocmVzdWx0KSB9XG4gICAgfVxuXG4gICAgLy8vIE9wZW4gbXVsdGlwbGUgZmlsZXMuXG4gICAgLy8vXG4gICAgLy8vICMgUGFyYW1ldGVyc1xuICAgIC8vL1xuICAgIC8vLyAqIGBwYXJlbnRgIOKAlCBPcHRpb25hbCBwYXJlbnQgd2lkZ2V0XG4gICAgLy8vICogYGNhcHRpb25gIOKAlCBEaWFsb2cgdGl0bGVcbiAgICAvLy8gKiBgZGlyYCDigJQgU3RhcnRpbmcgZGlyZWN0b3J5IChlbXB0eSBmb3IgZGVmYXVsdClcbiAgICAvLy8gKiBgZmlsdGVyYCDigJQgRmlsZSBmaWx0ZXIsIGUuZy4gYFwiSW1hZ2VzICgqLnBuZyAqLmpwZylcImBcbiAgICAvLy9cbiAgICAvLy8gIyBSZXR1cm5zXG4gICAgLy8vXG4gICAgLy8vIEEgdmVjdG9yIG9mIHNlbGVjdGVkIGZpbGUgcGF0aHMsIGVtcHR5IGlmIGNhbmNlbGxlZC5cbiAgICBwdWIgZm4gb3Blbl9maWxlcyhcbiAgICAgICAgcGFyZW50OiBPcHRpb248JmR5biBBc1dpZGdldD4sXG4gICAgICAgIGNhcHRpb246ICZzdHIsXG4gICAgICAgIGRpcjogJnN0cixcbiAgICAgICAgZmlsdGVyOiAmc3RyLFxuICAgICkgLT4gVmVjPFN0cmluZz4ge1xuICAgICAgICBsZXQgcGFyZW50X3B0ciA9IHBhcmVudC5tYXAofHB8IHAud2lkZ2V0X3B0cigpKS51bndyYXBfb3Ioc3RkOjpwdHI6Om51bGxfbXV0KCkpO1xuICAgICAgICBsZXRfY3h4X3N0cmluZyEoY19jYXB0aW9uID0gY2FwdGlvbik7XG4gICAgICAgIGxldF9jeHhfc3RyaW5nIShjX2RpciA9IGRpcik7XG4gICAgICAgIGxldF9jeHhfc3RyaW5nIShjX2ZpbHRlciA9IGZpbHRlcik7XG5cbiAgICAgICAgdW5zYWZlIHtcbiAgICAgICAgICAgIGZmaTo6UUZpbGVEaWFsb2dfZ2V0T3BlbkZpbGVOYW1lcyhcbiAgICAgICAgICAgICAgICBwYXJlbnRfcHRyLFxuICAgICAgICAgICAgICAgICZjX2NhcHRpb24sXG4gICAgICAgICAgICAgICAgJmNfZGlyLFxuICAgICAgICAgICAgICAgICZjX2ZpbHRlcixcbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vLyBTYXZlIGEgZmlsZS5cbiAgICAvLy9cbiAgICAvLy8gIyBQYXJhbWV0ZXJzXG4gICAgLy8vXG4gICAgLy8vICogYHBhcmVudGAg4oCUIE9wdGlvbmFsIHBhcmVudCB3aWRnZXRcbiAgICAvLy8gKiBgY2FwdGlvbmAg4oCUIERpYWxvZyB0aXRsZVxuICAgIC8vLyAqIGBkaXJgIOKAlCBTdGFydGluZyBkaXJlY3RvcnkgKGVtcHR5IGZvciBkZWZhdWx0KVxuICAgIC8vLyAqIGBmaWx0ZXJgIOKAlCBGaWxlIGZpbHRlciwgZS5nLiBgXCJUZXh0IEZpbGVzICgqLnR4dClcImBcbiAgICAvLy9cbiAgICAvLy8gIyBSZXR1cm5zXG4gICAgLy8vXG4gICAgLy8vIGBTb21lKHBhdGgpYCBpZiBhIGZpbGUgd2FzIHNlbGVjdGVkLCBgTm9uZWAgaWYgY2FuY2VsbGVkLlxuICAgIHB1YiBmbiBzYXZlX2ZpbGUoXG4gICAgICAgIHBhcmVudDogT3B0aW9uPCZkeW4gQXNXaWRnZXQ+LFxuICAgICAgICBjYXB0aW9uOiAmc3RyLFxuICAgICAgICBkaXI6ICZzdHIsXG4gICAgICAgIGZpbHRlcjogJnN0cixcbiAgICApIC0+IE9wdGlvbjxTdHJpbmc+IHtcbiAgICAgICAgbGV0IHBhcmVudF9wdHIgPSBwYXJlbnQubWFwKHxwfCBwLndpZGdldF9wdHIoKSkudW53cmFwX29yKHN0ZDo6cHRyOjpudWxsX211dCgpKTtcbiAgICAgICAgbGV0X2N4eF9zdHJpbmchKGNfY2FwdGlvbiA9IGNhcHRpb24pO1xuICAgICAgICBsZXRfY3h4X3N0cmluZyEoY19kaXIgPSBkaXIpO1xuICAgICAgICBsZXRfY3h4X3N0cmluZyEoY19maWx0ZXIgPSBmaWx0ZXIpO1xuXG4gICAgICAgIGxldCByZXN1bHQgPSB1bnNhZmUge1xuICAgICAgICAgICAgZmZpOjpRRmlsZURpYWxvZ19nZXRTYXZlRmlsZU5hbWUoXG4gICAgICAgICAgICAgICAgcGFyZW50X3B0cixcbiAgICAgICAgICAgICAgICAmY19jYXB0aW9uLFxuICAgICAgICAgICAgICAgICZjX2RpcixcbiAgICAgICAgICAgICAgICAmY19maWx0ZXIsXG4gICAgICAgICAgICApXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgcmVzdWx0LmlzX2VtcHR5KCkgeyBOb25lIH0gZWxzZSB7IFNvbWUocmVzdWx0KSB9XG4gICAgfVxuXG4gICAgLy8vIFNlbGVjdCBhbiBleGlzdGluZyBkaXJlY3RvcnkuXG4gICAgLy8vXG4gICAgLy8vICMgUGFyYW1ldGVyc1xuICAgIC8vL1xuICAgIC8vLyAqIGBwYXJlbnRgIOKAlCBPcHRpb25hbCBwYXJlbnQgd2lkZ2V0XG4gICAgLy8vICogYGNhcHRpb25gIOKAlCBEaWFsb2cgdGl0bGVcbiAgICAvLy8gKiBgZGlyYCDigJQgU3RhcnRpbmcgZGlyZWN0b3J5IChlbXB0eSBmb3IgZGVmYXVsdClcbiAgICAvLy9cbiAgICAvLy8gIyBSZXR1cm5zXG4gICAgLy8vXG4gICAgLy8vIGBTb21lKHBhdGgpYCBpZiBhIGRpcmVjdG9yeSB3YXMgc2VsZWN0ZWQsIGBOb25lYCBpZiBjYW5jZWxsZWQuXG4gICAgcHViIGZuIHNlbGVjdF9kaXJlY3RvcnkoXG4gICAgICAgIHBhcmVudDogT3B0aW9uPCZkeW4gQXNXaWRnZXQ+LFxuICAgICAgICBjYXB0aW9uOiAmc3RyLFxuICAgICAgICBkaXI6ICZzdHIsXG4gICAgKSAtPiBPcHRpb248U3RyaW5nPiB7XG4gICAgICAgIGxldCBwYXJlbnRfcHRyID0gcGFyZW50Lm1hcCh8cHwgcC53aWRnZXRfcHRyKCkpLnVud3JhcF9vcihzdGQ6OnB0cjo6bnVsbF9tdXQoKSk7XG4gICAgICAgIGxldF9jeHhfc3RyaW5nIShjX2NhcHRpb24gPSBjYXB0aW9uKTtcbiAgICAgICAgbGV0X2N4eF9zdHJpbmchKGNfZGlyID0gZGlyKTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0gdW5zYWZlIHtcbiAgICAgICAgICAgIGZmaTo6UUZpbGVEaWFsb2dfZ2V0RXhpc3RpbmdEaXJlY3RvcnkoXG4gICAgICAgICAgICAgICAgcGFyZW50X3B0cixcbiAgICAgICAgICAgICAgICAmY19jYXB0aW9uLFxuICAgICAgICAgICAgICAgICZjX2RpcixcbiAgICAgICAgICAgIClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiByZXN1bHQuaXNfZW1wdHkoKSB7IE5vbmUgfSBlbHNlIHsgU29tZShyZXN1bHQpIH1cbiAgICB9XG59In1dLCJpc0Vycm9yIjpmYWxzZSwidGltZXN0YW1wIjoxNzg0OTk1NTQwNjEwfX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiZTcwYjFiZjIiLCJwYXJlbnRJZCI6IjFiMDRmYjFjIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNTo0MC42MTFaIiwibWVzc2FnZSI6eyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6InVzZSBwb3B1bGFyIGxpYnJhcmllcywgbm90IHNvbWUgbGlicmFyeSB3aXRoIG9uZSBnaXRodWIgc3RhciJ9XSwidGltZXN0YW1wIjoxNzg0OTk1NTM0MzE3fX0seyJ0eXBlIjoibWVzc2FnZSIsImlkIjoiODkxOGY2ODgiLCJwYXJlbnRJZCI6ImU3MGIxYmYyIiwidGltZXN0YW1wIjoiMjAyNi0wNy0yNVQxNjowNjoxMC40MjBaIiwibWVzc2FnZSI6eyJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKkFzc2Vzc2luZyBSdXN0IFF0NiBXaWRnZXRzIGxpbWl0YXRpb25zKipcblxuKipQbGFubmluZyB0byByZXN0b3JlIHByaW9yIEMrKyBzdGF0ZSoqXG5cbioqQ29uc2lkZXJpbmcgcmVzdG9yaW5nIGZ1bmN0aW9uYWwgQysrIHNvdXJjZXMqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWQ4N2YwNDgxOTFhOTMzZDBkYzgwNmU4ZjRmXCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpON3JPLTdYVEFFeFoyVFQwTTNQbzdlUDVEZkdoVllGUFlkeVYwdVFib0lKY3poZW1NX3Y1ZTg4WG11Z1RVQmlNcGZSUGFyc3JFd0xpaUtXdGR3LUd1elFFamdVZWUzZFZhOWFiVG1uUHF6cElIdWMzRENFTTNrVHVVeVRreEoxcWd2T29JQVF0MnlrS1kzemc4S3FnRm94aEgyTHR0bWtYS2lRZEZyRF9mRjBad2lVbFdDNTBRZGc5WUhTcGp0WmhOVXRMbVUyQ0o0b2pMMU5fYWt5bzVUbzFvM3B3dlluX3pCb19xY1hMbjdkRk5VY01uQm5JY0J5Qm9LRDJyam9hNmxfRU1KY1I3RnBqVkU5RFh4VTFoeTBHdWRPSkM4OFZTOENXc013Nkt5Q2ZtWU9ncFNDNXFyWFcwd2JTMmVMdWRjT3Ezbl9CY0FwUnE1V3dPdjdwWjZULURCZTZOVzlqTmN0R2QwM3doTm5vWkNRS1JPVDZXYUJBZnVqb1FCekJkTXNlVjV3bWlCSGdrRzZHb01vQmdWZ2ZMY01ydDRJdHRZQ0s4blR0Y3k4ZThMSWhfRzdBd2RCRm10Q0RaT1lRTnRDei1oMEN2NTlicTlJQTRya3lDTjZNMENyWGptZ2o2TTNoWEszWE0wNW96OTJjOVIxcTJHOGNicEcxa0lCRTBSTFZMcUk0S0REbjQxWnhBZFdPRVRZb0R0Mjd4NkNZc3lJak1zZFJYdUl3SWkwQ2thbmhjZEFYWG9oa1FUME1fVXQxeHYtTkFMVDFVRFRRR1JzU3Y2N0ZDYjN6THA4ZkJ1ZXhjZVVoa2ZmTHY3TXk1aHRwQXhqRU1MQ3Q1MHBhZm9rcEpjMHpkQ3ZseVNQVWFkQnN5eENGMkpGTzhLeWdPVFRNVEFRNmpTUWhTVDN3RTlzSERiLWVpYUl3Z1JLVzR6V2RSb2VMdjNzVVRxQWRNM0pSNlROQnZIRDJFYWJCazR2WjBtMFlXQ1dPdVY3TG1LX0o1NjlFU1QxVzhQa3VKdjY4dERPN0NKTERjbjRDNmFsRjA0Y2xkX2hLNXVfMklLVWU0aUYzS3Z2NjZlc0pBWG1fRGVMZVUzYW8yMzVyWUtJVXhWZ2NvcEo1RWdhOFVldV9KQ3J0SG5sWjVQbEE4a1dRMlFUNlBkZERDUmtvSFBjamU5ZE92LTgxT2xDXzBQd2xrXzhGQm0tek1kdTJ5VXdkNVRmLU9oSGstcjl5VndSSk0wVzVQLVVNd0Jsel9EWHloOWE1dUZqOTRaOWRmUmxramkxTk04bkVmSGZhQk0tMGdpRVRibS1VNkJoZklSVzZkXzE5bnQzTndEcVhrOEMydHdrS0lnS0d6SHBCUXlpZXZCTVdnZHlKelN3ZkwxRk1JN0xRRDFBWTdFVnpiQXMtYzZab0N2aHk2aktYZ3B1OEVjSDNyTGxvcmRLa2VDWEZJbTJTRFRITDNaM0Zva05KeTc2emN6cTNnUVVxTHk4UlJHMnh2NWVReHRKaEh2ZGhhSmFIWTBSSlpxQUZpWURaa0RZVlRpZ2hmaDRQalFFWVJ0QmktbzJkY2lzdWt0ZHQ5NnpQYjV5ck41SkZWN1k4RmJUUUxWVTFmS0lIOW96WEVMa3h6b002MFUtcWh1VHNLY0cxX2I1V3pBbjRSYUtYbWwweXhtYkFKZmh1dU5NNjJiV3gwV3piT215MVI5d1FsOTVPUVN1bGpPR2MyTjNkMWkwRmhibl9HbkNIZERhSmJ3WHQ0aXFiWDIwcTJGX2hVdnhnaV92NFJpc25wbWo1UkZLeWY0RUE1TnBBYk9lN0pCMHc4UVBOb1Z0Sk1PV01wWloxV2RZY3pvb3FaZFNFYkFLWWp4M2QzM0YyUGFfbDczS1k0aWdXSXVpZ09OTTUzUG1WcW40WWt3UU96djNzdUdmSzRQYUUwT0VHdzc2d3VTOEFPZmNrODZPdElOWkh3LTlSWmhfdTBBZmRLc1l3YWI0aDhwcXVLNDZ1T3JPdFg1ZUtVeUlXOHpHZ1MtOXhOZjdVM01aNmp0bG5ja19ZZmVRbERCWGlZQVhNdzYyOXFSWElnenhtYWdhMHN0V3pWb1dHU0NmUlNOM0Z4OUdIZXhOMFVHSzM3cXVqbl9yY1NWOS1tR3l6TUxhenBYNmh2OGIxa21TUHVPZFdLYUtvVms0N1lpWTVRX1JGMno0SkNZcnVvMXJJTE55YWJKcml4LWw3MWtTOTlDRFFHb1FOY3d1LWhuNVNQUVhZUFRlY2pmX2FZekpYb1BzT0QyTVpLenBlT01VVENUdC1kdEFLNXhQWkpNdm13SFhvMElwQ25sRDlKSDljVVg0SmRlNmc2ZnFaX1ExYjVFMng0NEt3TVkxXzg5SWpZNUdySFhEajVoYlRyYmZWQl9sQ0xpbEtaT0lDQURGS2hoNTRUOU9Ba1VsdzBlcUxLd1NSYnJZUU5WWUlxVDUzZTZqSlFLT3l6MWJybzUzc0F2Z0pCV292ak9nZVd0dG93LVIyNGdtOHBuSGJLeDIwZjhvVEdtVkNOT2Fjb25Sb2ZnU2o0OWhTZUttRVpOR01JYmhoTjRscWhON1JOVDN2VDlMLUtxa1FDTlJWaXBOREJTOTYwNmdydGM4VWMxMURmNk5qY3Qxb3lXcktZSTBRRGlqNmRUZ0p4eThPMzRINDFHTExHbXlILUYtWkxMZGRHOEI5TzZMV09ETlBuSTd0R3EzRXZFWEVXLTZINHdkY2U3d0VmWFd6RVRyZVI4S0pncEY3Q3NBWklJMHVzX25NZHhkRV9qU011N2RvaFBpbFktajRzUzhhWnFBRTJ2c2NJOVlKWnJMc3lTQlVtcTJlWkNKQ2pKSEFrdWZ1S0FyM2Y4YzNpcU9hcWY5dDRwVkZJR015Wng0VmFxVHk1YVFPRy1FRERJajR0TWhobjFIcEd0UFM4TUxxQ1k5UWhYdzNGVGN5TWlJd2RLdkJHS0xJaVA2aHZ3YXFMVl9yVmlPQWtsbTduR0o3TUZzR1BheFdWb094c0R4MEE0VktNWkdOUWFDd2paUGhHZU5hUFhwOFIwbDlyR2cwd3hTN0duaHloX045clJCUldxcXhtVXRIWUxvYVNCc0hnYjlHcmswRnEyeVpjSXJPM2JxSkIzMmhIUXFIWFU0TDBwYUJjMExMeUZ6d2I1QzQ2M05PdDlkdkVaOVdldUNEU3l3TjV0cEQ2MGtDSThNQWxrM2FEM1l1MXNkRlVrVVdUdjVISVFmSFgzWDdLaF84Ry1XUEZ5bVdMdXYtb1NEcnJYMU1yalJSMXlwNUdXdEstVVU5UFlOTFlaaVlCY1FrLTZsZnVDWG5hblNiWDFXV192bGYtUktTdjQ3NGYyTk16cEpVbTg4dEg2S0FDQUh2U2phckZLMkR2SWdQU21nYTdlR2FoalF0dWV6dnBUT1R1NG8wUHBNdzUxUGFTT3dldnlBeHNhc0tORHE0Q1Exbk02R2Zhejc3NXBESzFfdi16QzJHRS00T0VYUG5fbnBwazlpUi1oMFlUVnNULTVwMWYxb2tqRHEzcGNHcGI4SG40SUpxQ0c3SmpRaktpZVRxN1lnMG1wUTlEdFdrdFlzM0hUdU9taWZTRmxFR0ZxLW4tcm83MnU0Z0F5ZlZqVmRvRjdiNzFMSHJSRjVYT3R4N2E0MjZ1bHBJZ0ZOTnkwa3lqWGZwVURlampLUFJmdmVHY3pTUHBJMUM0NTB4M0Nwc29aZG5JREo1UENjX1dObDF1UW4xTmdGQTdqdUhqNml0Z0pEMUY4bnZkY2hLNER2dlVYSm9pUFdNQXlnbTQwY0hRalpQQ3prWkttNmRQRTduNWZrMDJHWTBieHhWcmNpR3F6QWRTazBaX1QtNF9FSEI2aEU4YWpfRjdfMzlNdzN3d1hjMnRydGdvS2ZDMWs2NlpucGc5VmFsV3dxT1BOXzVnVHo1NDlKMnl4aFVaQ0ZZb3JyQ2lqTjBvaG9qQmdpVnQtczVvamdpdHpzZ3c5VnV0Zkh2SjFsRHo0WnUwZ1IyY1VBd2dsc3U3RFVwRms3TVpMS29qclQwXy1RNlVaSUg3X1VIaDhyMEQtazBnajZWYXp0aTQzdVZjemVnNVN3YzVqdTFZVEFVeVAwM2l5NklzZlZTUFJ2dEs0ajdtZk5nU2R1dnpMUlE0NHJvNEFvNmd6bXI3cWU1bnh2OUl6a1hISGtlOXhRU2FmZ1dMNl91c05iekFFQkdqZEs2TU1TeW8zQWhWYWNkT2RfOUpoRHFxTTc3YkNoZm9CWDVCZEJrVURYb05PdUdFdmZZdmFscVR3NkE3TFc1LTE1dlFLVERPY3hVZmZsWXhOaXI5c3VrY1ZkOUEtMldwVzkzVDNIemx5ckdWR1dvY1E4NkVZVmk2cWJVUnpvREtsa2RIZEpYbzNmdkdNNFRxeHlUZ0JJUDJpNnpaaHd0d3FQWEVqQTlGNXZvUDVHNTRIdnZlMkVLM3lqbUlNUlhFV0c5S04wcXVvZU9JWEV1cF8wTUR2ZFVXRGRhMklFajZWUE13YmVLUG1pR1hLd011NDc3Y0FBTmFuTUxic2w0UTk2cjZhU2VOalVnTWxXS3gzNjJwNV9qVWRnSDNBLTFTX01TNm9abkVKNm1SRTQxZ3hub0pnaEZPQ1ZfUTNaSXNHMkZucXBLY1R4dGRNdDc5ZkFwVko0dlRGR01PelNCeHR3ZWZkSEd4aUd5OC1UYzdmQjFWU2dKMDRKcTcwVUVrTzBtRzdQSm9CazVSR09PN3lRdlpvRDd4YnVkUUYtWjNGRmRKempSZVFObDJERXYtRjlXWjZpMHE3cWU1LXZlTGVRZHczZmdhM05NOHhodnBiZUlRbzZCUG52LVJZWmJTVUFUNUpfQ0Npc2hQdm9aSW1zbURkQ1N5U2ZzdG1uVWhHTWQ3SG1LcTdWVFhsdlJTaWpTaGtSRzkyV3FkekZ2STdvUzZieWNOU3E3V2xTNFg5SU10RURBYV92SGUtUzU3V2ZnZmhfaDlTTTQyZ1FmX2xPbnJLLUhwdlNIc0dnOGgwNmpCWDZSLURZQWlDR3gtOEhiQUlic1lJWVMyMkpDdEdaeVZKSi1YaU1Ydms1ZTlXVDhqX0pmZm5nLWpqQUhYcXlac19KTjlkanhER1FyRzVReC01WkpVY3FyaVlta0NzMW5obTFocDFnM0d5RUZtVUU0VGFxOXpnSTZxUlpXb3hXNHhZOFdMU2I3dFRrWWtRM0FmRktwbGtQQkQtUldJSjlhOXl5bjd5V0tXcXRQcjN4MWZWbGgxTnRZWnRMLThqbGZUbHVjT2pZRHp2MzZRbFYyWEtmdi0zTUVtbERmZGNFV01pajVwZXB0a0pKa1p5LVd3blNcIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkFzc2Vzc2luZyBSdXN0IFF0NiBXaWRnZXRzIGxpbWl0YXRpb25zKipcIn0se1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlBsYW5uaW5nIHRvIHJlc3RvcmUgcHJpb3IgQysrIHN0YXRlKipcIn0se1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkNvbnNpZGVyaW5nIHJlc3RvcmluZyBmdW5jdGlvbmFsIEMrKyBzb3VyY2VzKipcIn1dfSJ9LHsidHlwZSI6InRoaW5raW5nIiwidGhpbmtpbmciOiIqKlBsYW5uaW5nIGZpbGUgcmVjb3ZlcnkgZnJvbSBzZXNzaW9uIGxvZ3MqKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWViZjJhYzgxOTE4MDU4NTBhYWFkMGZhODlhXCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpON3YtNVh6dmVydzZ5MkFGUjRQbjg5SzFBMXFWLXlqd1JoS2JiMVRfUFYwdVBHSWF0anRBcENUX3Z2U2hidzhIZzhYc19UWjRidm16OG1GNU5NcVJMaVJITmtpVjhSWmpYaEktNHMwMmpYc0VmM2R4VHpqRDFSYmp2MmMwd3ZveG5CZ292eW9GdzF4NE5uTkZOR1lRa1oxY3dIdWE2aElZdC03Wk5URUpRemxmYmNEbHNPNmRGbzhPb2lSY0o4dEo2X2E0X19XSUplanlGY1JUZXYta3cxVkljNDRtSHRyTzJ1R0Q0ZHlKTnVyeG9Vcm1IV1Q4LVE5c2RKUXpoTG5KS0FmWmdpT0R3VkVPRVFaUW5HNzJXOU12RlJvdHRpQ3NWOEpidmhudHJ5bmw0aXliS3B2UUhkOTUwTlZGQk1rb2lpM0tjVVJkSWFjRG05RGdieHI4YUUzUzI5NFJ2UmYyMEx1YWxpOG1XYmVQR25Ra0k0bzRkRXFVaWxyaS02OWxKV3FyMUFQT25FZ216aW5XY0Q0OFFfUUNvYkoycjctc3pHQ1dVWFY5aEJwYXVZa2RmTU9HWlNWUFNua0djbUxSOHJxQVRCZzRQWHR2ZWRpT25FVV82Rm5QZ0pkWThha0hTa1d5SGZtLWJKTDN2YktEd3gyWlpoM1lZZFVuYk5sR1hFZEtxaGpqaU5QN3UyVXBlbW5La1AwcmU2RG1YN29hS0RKcExSRTV4STlTWllRb1hYbG5HcFJZOWphVkt4aGExd1NBMjFpNWR4N1VZMVBBaW9YckRQNXhLbVE4d2I3VkdJUm1HLXRNcEF0V3hKNEdiLU51dXhkdVNZVTBHQ2pEWFJnZzFwUFgzckhoRklWS1FMZHp5R2k0SHJlQmFxYWdVa05sN2UwSUZZelRLS2tYRjF4WkZWb3BuTnJEa3ktTUJJQUNHZ05xN0NTMHBOSUtZeWhHeXlVU1JWd1oxYUtfMWp1RHhCX0p2UW52UE5mcHp5TnNiT1RBZVpmdU42Y1YyX2VkSmV6WHpRaGNCUm1OeWpxNEdQZ2NiY29FVTk0Wm8zOTFNb2V1WW9ZaGdoLWpVTGJlYVdvcVEwVEN1dFI5OEFwbUk4TV9wTWhrNDh6ejF0NEF5Njl6SUs2clJSRHBVeDhPZEk4WVE3d1JjVzVGUm94eE55S2tqWDUxWVpPUE9GVHpmUTd4azhOaEExQVhjcEhLZUR2R0dybFdmN3pNb2RlRDFnV1BFSDJGUFZReXdCQ3FyUEI1cjFPbUpjSERFV2h2SjJTdHRuTkJ2ZjlVTGFDY25NS09KcUV4Yzlqa2Jhdy0wN3NQWERMd1ZGUzZobk02Y1QxLVFudGhpcU54NTJxWDBWWkdpbVpCb0pCRm1CdEw5Tk5rSHE1UGVaSUlkdDNGdG1Fbi1YSlVfUUZiZmg3bThvM0tSNzdybmxVS2hhUEZKQ3gwYnVkRDNRSGRkNnRPb0lCVDR1RUZZclJ1VDRDQnBTeUxiNmtPSVZfUndnSUQ1eGJDOHVSejFsMk1JdTFfUkFJemxSUk8wMnFhbXdCM1pFZGZjMzZhMUxaaHpxNklGT3F6TllPaVFldjcwS2ZOR1g0cFVNelFaR2xIbzB1WV9OSFdUMVczWlpuRFYtRmpZQVlzekxWTzdvejNQOTFsb1JwNmhQU2NZZmdyekw1WkpWMGdSZ2MxSWNHZ1FyZ3NSdl9EbWh3V25jdk9lMjl0d2F1YWNwNmY4am55cWMxS19UVGRKWGx5cUdJQnZzQjF5ckZLTkVlV3BlME1vQ0RwR1NQcUVGMW5Kc085bDRqU2xrbmlwTlZpTHl6d1BVVlZxTUdiZU5ya282V3NWUUFoQjNSWlpzd19xRmZmOFFkVlBWTTJxMlZ5ZlM1VV9wYnA4b2otMHNpbzVOc2s4X1ZVMXV1U2dtNFVGOD1cIixcInN1bW1hcnlcIjpbe1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlBsYW5uaW5nIGZpbGUgcmVjb3ZlcnkgZnJvbSBzZXNzaW9uIGxvZ3MqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfTnFqOGpQOTJPOXQ4VnpucExOSXp3c29WfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWVmYWVjMDgxOTFiYzQ4ZDQzYjIzNjM3MzMyIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6InB5dGhvbjMgLSA8PCdQWSdcbmltcG9ydCBqc29uLCBvc1xucD1vcy5lbnZpcm9uWydQSV9TRVNTSU9OX0ZJTEUnXVxuZm9yIGxpbmUgaW4gb3BlbihwKTpcbiB0cnk6IHg9anNvbi5sb2FkcyhsaW5lKVxuIGV4Y2VwdDogY29udGludWVcbiBzPXN0cih4KVxuIGlmICdjcmF0ZXMvZmxhc2hlci1xdC9zcmMvdWkuY3BwJyBpbiBzOlxuICBwcmludCh4LmtleXMoKSwgeC5nZXQoJ3R5cGUnKSwgbGVuKGxpbmUpKVxuUFkiLCJ0aW1lb3V0IjoyMH19XSwiYXBpIjoib3BlbmFpLWNvZGV4LXJlc3BvbnNlcyIsInByb3ZpZGVyIjoib3BlbmFpLWNvZGV4IiwibW9kZWwiOiJncHQtNS42LXNvbCIsInVzYWdlIjp7ImlucHV0Ijo3OTczLCJvdXRwdXQiOjY5OSwiY2FjaGVSZWFkIjoxMDkwNTYsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6NTk2LCJ0b3RhbFRva2VucyI6MTE3NzI4LCJjb3N0Ijp7ImlucHV0IjowLjAzOTg2NTAwMDAwMDAwMDAwNSwib3V0cHV0IjowLjAyMDk3LCJjYWNoZVJlYWQiOjAuMDU0NTI4LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4xMTUzNjN9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTU1NDA2MTMsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWQ1MDNiNDgxOTFiODE3MzZkYmVjY2RhZDczIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjRjMWY3ODYzIiwicGFyZW50SWQiOiI4OTE4ZjY4OCIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDY6MTAuNDU3WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9OcWo4alA5Mk85dDhWem5wTE5Jendzb1Z8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlZWZhZWMwODE5MWJjNDhkNDNiMjM2MzczMzIiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJkaWN0X2tleXMoWyd0eXBlJywgJ2lkJywgJ3BhcmVudElkJywgJ3RpbWVzdGFtcCcsICdtZXNzYWdlJ10pIG1lc3NhZ2UgMTg5MzlcbmRpY3Rfa2V5cyhbJ3R5cGUnLCAnaWQnLCAncGFyZW50SWQnLCAndGltZXN0YW1wJywgJ21lc3NhZ2UnXSkgbWVzc2FnZSAzODhcbmRpY3Rfa2V5cyhbJ3R5cGUnLCAnaWQnLCAncGFyZW50SWQnLCAndGltZXN0YW1wJywgJ21lc3NhZ2UnXSkgbWVzc2FnZSAyODQ2XG5kaWN0X2tleXMoWyd0eXBlJywgJ2lkJywgJ3BhcmVudElkJywgJ3RpbWVzdGFtcCcsICdtZXNzYWdlJ10pIG1lc3NhZ2UgMTk1M1xuZGljdF9rZXlzKFsndHlwZScsICdpZCcsICdwYXJlbnRJZCcsICd0aW1lc3RhbXAnLCAnbWVzc2FnZSddKSBtZXNzYWdlIDk3MVxuZGljdF9rZXlzKFsndHlwZScsICdpZCcsICdwYXJlbnRJZCcsICd0aW1lc3RhbXAnLCAnbWVzc2FnZSddKSBtZXNzYWdlIDQ0NFxuZGljdF9rZXlzKFsndHlwZScsICdpZCcsICdwYXJlbnRJZCcsICd0aW1lc3RhbXAnLCAnbWVzc2FnZSddKSBtZXNzYWdlIDUyMFxuZGljdF9rZXlzKFsndHlwZScsICdpZCcsICdwYXJlbnRJZCcsICd0aW1lc3RhbXAnLCAnbWVzc2FnZSddKSBtZXNzYWdlIDkyM1xuZGljdF9rZXlzKFsndHlwZScsICdpZCcsICdwYXJlbnRJZCcsICd0aW1lc3RhbXAnLCAnbWVzc2FnZSddKSBtZXNzYWdlIDczODdcbiJ9XSwiaXNFcnJvciI6ZmFsc2UsInRpbWVzdGFtcCI6MTc4NDk5NTU3MDQ1N319LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6IjAwZjM5NDZjIiwicGFyZW50SWQiOiI0YzFmNzg2MyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDY6MjQuNTY0WiIsIm1lc3NhZ2UiOnsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0aGlua2luZyIsInRoaW5raW5nIjoiKipEZWNpZGluZyBSdXN0IFF0NSBwbGFjZWhvbGRlciByZW1vdmFsIGFwcHJvYWNoKipcblxuKipQbGFubmluZyByZXN0b3JhdGlvbiBvZiBsYXN0IHdvcmtpbmcgQysrIHN0YXRlKioiLCJ0aGlua2luZ1NpZ25hdHVyZSI6IntcImlkXCI6XCJyc18wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGVmNDQ1YjQ4MTkxOTFhZWQ2YTdiNzQzZmI1OFwiLFwidHlwZVwiOlwicmVhc29uaW5nXCIsXCJjb250ZW50XCI6W10sXCJlbmNyeXB0ZWRfY29udGVudFwiOlwiZ0FBQUFBQnFaTjc5SlFJQ0JkMFdvcmtaNFQ0Q24yZDlSOVFPSU9aa1A4Rmp2UkpiekJROUU5TldCQm9fRXdFc1hkUmZ5Yjd6OTgzX19IVFhKUGlLVFF5STRhdWpNYW9DcnpDOG80Sy00NmhIRVZLZmFydmk0ZjlfMW5hZ1F4c2xJbkJOeEJWY1ZUTVRoUHhSclVJS3BaWUNiT2pHQkM3aFdESEFtN09aeFk2N1JTWlpWY1ZlTHVxTlZZeEVGcWJXLTZZZ2tUbFlDb2Y4bEpwdG1pSklGVW9uenBXVndNdmNZRmFlSUMyM0p1eTJVUk9HYzNwdjBOQVMtZ2tXaU1jV1VKNURzWTM5WVRGWV9DTFJtUXB6LVFIZHIwVFloemptcjMwZ1lQd0g4VzFMLWNhRnVtdVV6LUxLSzlkcEdVazFfc1BjbkR0QmdsdzUtLXF5NkhFUERJYVRueHlIM2RZQThGWk40ZkI2ZXJmM0hWakVhV3NoSU9SOGE4blBrN29JcDlfUE1FbzMtWUFPcmR3MmZZNGZtMHZKaWZYQVN0U3JTSGhtNW41d3RDb2ZCZzUtVHowUzNBdHVnd2VHSWFsX2dtb1lpY21SMkM0X2x1SkgzUzFyVWNlUDBsRGxoVUxRQVJ5WS1xQVNSSjBTM00tcGJLWV9MQm81Mzl4UnYwVGdZVFZ6R2tQd243TE4taDJGcTQtbE5mNUZLWnJfUUNvTWEwNkpRVHk2dnE1Ym1Wd091amJjdm1ZUFFna1J0b1Nnb2Jrc2FUN0d4TGhackg4VmlqUXZPc3lhQV9PeGE2Zk1xMVBTeEtxbFA1emFEY0UtUlUycm1ZMVAwNzdxYXRTNW1GeW9leDdPR09JNDFnWjdvNmJFdndxOGdvYVQ0N3hvZktxdTVfby1MRko0WW8tRWJrNnJOc0xWSzVtTzdhRGxRaXk2NWltN1draXBUeUMxSTgxTUstWFl2R3A1UXpMaGZXVFFQMVdzUFNzYllzaDYwT0J6QmJSU0dVdVRDTUl6Mlg2QUNHaEpuVzhmRzRNVm1JTFpaZDdMTjR3US1NMmhWbzE3ZXVodzAyR05tWWRPcUFZdy14b0tSRkRXS19IN1pwdzdrX2RvRjlKRzU5SmE5bnVHdlpuMm1QWXJRWlRJQzJDR2dQMjVVWEhmem5GOXBLc1pudzNCMVZGRDR5OEpLeTNmLTRLNTFwc3BkZ09fc2FrcHY5T3VES0h6LWM4RUxldVViZjVEbXp6NGF6RlluVEtnQnhULTMzUnZDb1hLc0VDeEpqT3Jrajc1alRPQjFkUTZjbFc5elZEXzA1QVFhdm5LLVpVMUJNd3ZpZE92OFd1LXVWbkY4ZXBuS0M3OXR2TnVVVVhidVVvYXV0Yzd3QmctaDc3b2lWZmNEVTFhZGNsd09GX3A3djRlTlpTZHcyeDR2WGxyYmFkV09OeEFHTUpZZ2xmd3BxUHZlb1V2R3k5aGdEbEdzaEN2QW9UelFwSzQzcktEYU5lUkxOSkE3NGQ5ajVFWElURXljZl9CQkp2RTAzbWxuM0FJZ29faUdHek1ZWjJFbnFJUi1zY2Etck41RW1MRlM2ZkxQVDYxVU9FWW5NUXFReU85ZWhhMXlKZDE3TGZpdnpIeW5RSUo5NFFyTU9mTjdneDI3cVk1TG44YjJhQzd5X2xSQXhQMmpwQ2NGVm9XY0dxbEJSTjh0S1pKSjdFbWJ4dU1uTzJDQVc0Nmp6ZFdaSGRuczhwZDEyRVp6ekt4VHpOU3RwcEJyNEpZQ0JrcXFUWTJ6OXk2NVN0NXdQazBYcjRNbWFRV1g3SnZNaEVsWXFNeXpMZ1VJbTRYNjNrSHJTZnpKMExvc3p1bzlpUHlxQThvYlRVeTJxNkE2QVpkZl9xSUxhMERDZHN1RXNZZFA5VzFhODItSEhlRmwzMWpTTXlCSF9XR3BYeEJiOFcwVEJNQ0twVk1RNExDaFFJMEVwTmNHR3VrNlJfdVNmVVlNaUhGWURBR3BsSkJuZUxIWklkMWNFNmRXMnFZbE90SnZDeTNEdVNxZHBRc0RySXhqNG5HVXl0c0dNblllbkxmbmdQQzh4cU9oRW16VkVkdlh3c2dEY3VmbXZKRWFQNENnSzg3cXdnMllwTkFoS2pESGxNTXhvZFVDcTlZV0VBNUp5aEUxaklsTW41NjRGZGR2dHg3eXc1UFFrNnpTSWJCMmpURFBVaUt4V05vQzctbjI2QWcwVmZQN3NPMUdWQ2RxMG1SYkZST1EtQnEwODNvMEltWldtT0UyUnVZSUVaeFE4NDk4eXVuQmV5SVBqOFpPaGJKM2daQnRiekxSUGgwZEUwVFJRbDVNaGN2VFFBYWl4N2R1a1RBend0dDZYZERBYnozUkNqWTBuUnd0T1Z4RS1hbllCZmpfMkg5RkdsWTdkdW9PVlVVNjBPWVlRV3kyY2xOU2ZMOG5YMF9FWlRyX0FKUnB2bmNQTnZMbkRMY2w0aV9USmRnTWEtb0RpQ3FveXJ0bTlVa1dXbmhsd1BsaDg5VTcyX0t6d2o0b2huSmNzZjgtWW9sc1FRN2xRbU5EMHJEeE1UcTZyV0x4cVZqUzBLWHhKMTBRVGlKbWR0V2pkZWNsYkZFaE1lQUx6UkEtcndFSTFhcmdqcVNsbTVkZ0pCTElkZ0IwcDU0c2ZFUHVhOW4tczFSUURKVzRIc1pQUmFJMlE5dExlUTZnZXhHSXZjRnBfY29hUUtweUNrVmFPS3pld3pPM1h0cTAxWGx6YjVsQlNMVHBDeGtUNi0wcVhkaXlrM3RXcWE1QTRqeFcwUEZ5SEVyNVR5Nml1Ty1sMTRNNmJPR0VUTlV1RHp4YXUydko0RU8zdzhJQjZKWnVsdVc5SUFLNTYyT2ZLZVU5WmtNTV96TmE0b1ZUeWZMb1dSYURuQWRCdVdEc05iejlPcmp5OG1qcFlMd28zLWlURnpjSGdQcUptZGUwNGhsU3d1OHVGeUI4dUdSVkFfNEJHYXBTUGpwSEg5SFJJU19oMnBveE5KNGVMc3B4a1d2RWxod3dDRlk1V1hfWkhwaTktY1ZlQm1XaTBMY2NKTlJlTVlwelNOSEpLcjNWNm5pZm9sdU84d1hYY3pSZ0RqUDdCMkQxQ1hwSExpZW5kcUExWmJvWUlHTWxPaVYycVNmZnlsZ2ZZeVhzSk91SHdSTmc0SHhTcmU2bjBFTm5jbjg5bTEwc3RfS3RJQU83d2NDazlXOXd5SGUxVzhhN0FFcmNNS1hMTUNfVWo5ck1lZWFxQ0t2MmktRVpERHJGaEFxUENYekktR1ZlckdvNnhvZFhPU0dGQnF6OXl1NmF3elFPdjcyMV9HaG8tQmg0dU1BV1lwQ25kUFFrXzhCY3lLSExXWl92WEt5bVh0UURwT0ZTVUMtaURRdEFMNVpBR0tKT0VCYmJSZmlHd1R0cGNCQ202eXM2ekFXVGl4X19qVUlqb0E0OXpVdDVBMEpHZUgxNkFFWDFCSzlWT3pyaVliY0dBYnFnN0traVdUQ1FJT2Znd01adUVfMWhvMnZGeklnbDhLVFEzWks0VXN5bmJIQ0w5WlRJd1U4VC1qWU5BbDNadXI2X05VUWp3cFNGNlNkY05ITVJ5YkJJY1J1LTNSUTBpVkJMMF9OMzBoUFdvc2FMOEd2ZEdDOVVBREhXSE9UR3hPSUV3THRNRVFnTjhDcmh3ZExaYzF1TGRhRTVQLUVsZ0xyeHd6MUpRdzMzNmM9XCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipEZWNpZGluZyBSdXN0IFF0NSBwbGFjZWhvbGRlciByZW1vdmFsIGFwcHJvYWNoKipcIn0se1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKlBsYW5uaW5nIHJlc3RvcmF0aW9uIG9mIGxhc3Qgd29ya2luZyBDKysgc3RhdGUqKlwifV19In0seyJ0eXBlIjoidG9vbENhbGwiLCJpZCI6ImNhbGxfTkc5dU4yTVBWRnVrVmlHR1VkekJselREfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWZkZThkYzgxOTFiMjE4ZThjOGNkZmM3MjhhIiwibmFtZSI6ImJhc2giLCJhcmd1bWVudHMiOnsiY29tbWFuZCI6InB5dGhvbjMgLSA8PCdQWSdcbmltcG9ydCBqc29uLG9zXG5mb3IgbGluZSBpbiBvcGVuKG9zLmVudmlyb25bJ1BJX1NFU1NJT05fRklMRSddKTpcbiB0cnk6eD1qc29uLmxvYWRzKGxpbmUpXG4gZXhjZXB0OmNvbnRpbnVlXG4gbT14LmdldCgnbWVzc2FnZScse30pXG4gaWYgaXNpbnN0YW5jZShtLGRpY3QpOlxuICBmb3IgYyBpbiBtLmdldCgnY29udGVudCcsW10pOlxuICAgaWYgaXNpbnN0YW5jZShjLGRpY3QpIGFuZCBjLmdldCgndHlwZScpPT0ndG9vbENhbGwnIGFuZCBjLmdldCgnbmFtZScpPT0nd3JpdGUnIGFuZCBjLmdldCgnYXJndW1lbnRzJyx7fSkuZ2V0KCdwYXRoJywnJykuc3RhcnRzd2l0aCgnY3JhdGVzL2ZsYXNoZXItcXQnKTpcbiAgICBhPWNbJ2FyZ3VtZW50cyddOyBwcmludChhWydwYXRoJ10sbGVuKGEuZ2V0KCdjb250ZW50JywnJykpKVxuUFkifX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjE3MTcsIm91dHB1dCI6NDUyLCJjYWNoZVJlYWQiOjExNjIyNCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoyOTUsInRvdGFsVG9rZW5zIjoxMTgzOTMsImNvc3QiOnsiaW5wdXQiOjAuMDA4NTg1LCJvdXRwdXQiOjAuMDEzNTYwMDAwMDAwMDAwMDAxLCJjYWNoZVJlYWQiOjAuMDU4MTEyLCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wODAyNTd9fSwic3RvcFJlYXNvbiI6InRvb2xVc2UiLCJ0aW1lc3RhbXAiOjE3ODQ5OTU1NzA0NjEsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZWYzMGFlODgxOTE5MDNlYjJhOTZlZTcyMTFjIn19LHsidHlwZSI6Im1lc3NhZ2UiLCJpZCI6ImU4NDI2NWMwIiwicGFyZW50SWQiOiIwMGYzOTQ2YyIsInRpbWVzdGFtcCI6IjIwMjYtMDctMjVUMTY6MDY6MjQuNTg3WiIsIm1lc3NhZ2UiOnsicm9sZSI6InRvb2xSZXN1bHQiLCJ0b29sQ2FsbElkIjoiY2FsbF9ORzl1TjJNUFZGdWtWaUdHVWR6Qmx6VER8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRlZmRlOGRjODE5MWIyMThlOGM4Y2RmYzcyOGEiLCJ0b29sTmFtZSI6ImJhc2giLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJjcmF0ZXMvZmxhc2hlci1xdC9zcmMvbWFpbi5ycyAxM1xuY3JhdGVzL2ZsYXNoZXItcXQvc3JjL21haW4ucnMgMjEyM1xuY3JhdGVzL2ZsYXNoZXItcXQvcW1sL01haW4ucW1sIDE1NjU2XG5jcmF0ZXMvZmxhc2hlci1xdC9DYXJnby50b21sIDI0NlxuY3JhdGVzL2ZsYXNoZXItcXQvYnVpbGQucnMgNDc1XG5jcmF0ZXMvZmxhc2hlci1xdC9zcmMvdWkuY3BwIDE2Mzc0XG5jcmF0ZXMvZmxhc2hlci1xdC9zcmMvbWFpbi5ycyAyNzQ4XG5jcmF0ZXMvZmxhc2hlci1xdC9idWlsZC5ycyA5MDZcbmNyYXRlcy9mbGFzaGVyLXF0L0NhcmdvLnRvbWwgMjI3XG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTU1ODQ1ODd9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI3MDk5ZmNkNiIsInBhcmVudElkIjoiZTg0MjY1YzAiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjA2OjM0LjcxOFoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqRXh0cmFjdGluZyBsYXRlc3QgQ2FyZ28gYW5kIGJ1aWxkIGluZm8qKiIsInRoaW5raW5nU2lnbmF0dXJlIjoie1wiaWRcIjpcInJzXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZjA1MDdlYzgxOTE5NDg3ZWRmYWMwYmI2YTI0XCIsXCJ0eXBlXCI6XCJyZWFzb25pbmdcIixcImNvbnRlbnRcIjpbXSxcImVuY3J5cHRlZF9jb250ZW50XCI6XCJnQUFBQUFCcVpOOEdMTkdqekYtS2l2YW9ENVJUQXh4bVhVVGdaSkNCYnN0YnhScWxuT1Q4YkVHOWFuQ1Y2TENoMW5iMFluZnhjVldHWUJvNWNIQWlvSHl1RVdSX1FXQUV5Z3Y2ckNaVmp3aXJSSWt6dFpnVGhVcDZtQy1PVkZzY19CTDUwZkZ3d0FaR3FjcWY5MmtIY0R4NlFnRUVNeTd3MGpNdFFFMWJoMEFTazFHN1VDVkpxaTRHNjEySUJnUGxYU2M4VU45ZWRCeUNUT1dtSnZrZm1OY0Z0bkxjMVZKWFl0dlBuOG9rcmM0bnJqUDI2NXowMVJPWTIzbzFjYVpsVndmdFpDQ0pFZjBrcUVzOVQ2bURFWU1ldW5oNTNCQ3kzcUtHQnJlaGdreEZYOHR4czFTTkZZLUZWNUdyd0ZibDhSbDJBM1hOY1djS25zeDUzc1dsMWdrRXhHMXZiM2RIMERXVnFhblFsTlE1Q3BlV3JCeklVY3l4ZUZLRU82dktXS0ljU2FkQ0hGQ0J0Y1JqVzFjcEJ2dWRnQmk3M1VwN0p5aGVUV2ozSnNpS1VCUURGc09vc09GVnJnSnhxaDJlWmNMWVh0OGV0WFNSeWxTNTNhdWM0N3BzZ1pyUC1HcE5jck9RNXJEbVpUcGlVdFNPbHJCOEdJU3BITG9IT2Y4WF91ZnhrQ0FQMnprM0ROZTlWN2hPSWxLSkxZLUg2SkQyN29vV2FxYnkwWjc1UWd2ejJoVjJrVTNyQ1ViZVkyemxrM0VwMnhUemZQX0NvVXhVeDF5OUNlX3RDSzNKYWNQOUhVRHdxeHpvam55OFhLYVB1RlRpNkg1WnVuNV9PMlBGek5qQUdxbkNReTZsVHQ1QzQtWnhQVkxHMzE2X2x3OWZSMTdVQUFfVm5sX1VhaWpyZUNQYXlydmVIOVV1OFVrWlgyQUVvR1Rjak9vMXROZHpyYjZvNTU4S0lpVnA5T3o3eHo2a3ZtOFNzbVE0LWRRTENTcVdISjQ1TFQyRGpRbjRDTTZkOGZQaVJHaVlmczJBeHdZRG15dFd1M1NVbU1WMDdsTUx4a1NZUU90Z281dUF5cHZzaVFUelRrb0FXRkc5ZVIyNnFKeUlFZmpvc2VqNGtMNHZWZ1NqZjM0eFRSd2dwU214a081TDhCUWY2M1JRVTk3ODhyMzMxQ29peVFPMDBDYldUSWlseGhnR0dUUW9XUVhPSVNzYzRKOHlnWlMwLUZLZ2oxY05VWkgxUF9zQ0RhVVZWaDJtQVc3NnUzS0E2bVRfcDYyMFRuV2JVT3BRdUZhM3ZrWUdEbEp3WExBT1pYWHhsRVNJNTFtaEkycWlfbTJvaGxRMmZCaGQzN0dnYkU1WG9PekJVUVpWXCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipFeHRyYWN0aW5nIGxhdGVzdCBDYXJnbyBhbmQgYnVpbGQgaW5mbyoqXCJ9XX0ifSx7InR5cGUiOiJ0b29sQ2FsbCIsImlkIjoiY2FsbF95cXZHNWd1REtldW9sMnhORXpLYXhaZEJ8ZmNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRmMDZiYjY0ODE5MTljNzA4NjBkZjIwYmFmYTQiLCJuYW1lIjoiYmFzaCIsImFyZ3VtZW50cyI6eyJjb21tYW5kIjoicHl0aG9uMyAtIDw8J1BZJ1xuaW1wb3J0IGpzb24sb3MscGF0aGxpYlxud2FudGVkPXtcbiAnY3JhdGVzL2ZsYXNoZXItcXQvQ2FyZ28udG9tbCc6MjQ2LFxuICdjcmF0ZXMvZmxhc2hlci1xdC9idWlsZC5ycyc6OTA2LFxuICdjcmF0ZXMvZmxhc2hlci1xdC9zcmMvdWkuY3BwJzoxNjM3NCxcbiAnY3JhdGVzL2ZsYXNoZXItcXQvc3JjL21haW4ucnMnOjI3NDgsXG59XG5mb3IgbGluZSBpbiBvcGVuKG9zLmVudmlyb25bJ1BJX1NFU1NJT05fRklMRSddKTpcbiB0cnk6eD1qc29uLmxvYWRzKGxpbmUpXG4gZXhjZXB0OmNvbnRpbnVlXG4gbT14LmdldCgnbWVzc2FnZScse30pXG4gaWYgbm90IGlzaW5zdGFuY2UobSxkaWN0KTpjb250aW51ZVxuIGZvciBjIGluIG0uZ2V0KCdjb250ZW50JyxbXSk6XG4gIGlmIG5vdCBpc2luc3RhbmNlKGMsZGljdCkgb3IgYy5nZXQoJ3R5cGUnKSE9J3Rvb2xDYWxsJyBvciBjLmdldCgnbmFtZScpIT0nd3JpdGUnOmNvbnRpbnVlXG4gIGE9Yy5nZXQoJ2FyZ3VtZW50cycse30pOyBwPWEuZ2V0KCdwYXRoJyk7IGNvbnRlbnQ9YS5nZXQoJ2NvbnRlbnQnLCcnKVxuICBpZiBwIGluIHdhbnRlZCBhbmQgbGVuKGNvbnRlbnQpPT13YW50ZWRbcF06XG4gICBwYXRobGliLlBhdGgocCkucGFyZW50Lm1rZGlyKHBhcmVudHM9VHJ1ZSxleGlzdF9vaz1UcnVlKTsgcGF0aGxpYi5QYXRoKHApLndyaXRlX3RleHQoY29udGVudCk7IHByaW50KCdyZXN0b3JlZCcscClcblBZXG5jYXJnbyBidWlsZCAtcCBmbGFzaGVyLXF0IiwidGltZW91dCI6MTIwfX1dLCJhcGkiOiJvcGVuYWktY29kZXgtcmVzcG9uc2VzIiwicHJvdmlkZXIiOiJvcGVuYWktY29kZXgiLCJtb2RlbCI6ImdwdC01LjYtc29sIiwidXNhZ2UiOnsiaW5wdXQiOjEyNjksIm91dHB1dCI6Mjg4LCJjYWNoZVJlYWQiOjExNzI0OCwiY2FjaGVXcml0ZSI6MCwicmVhc29uaW5nIjoyNCwidG90YWxUb2tlbnMiOjExODgwNSwiY29zdCI6eyJpbnB1dCI6MC4wMDYzNDUwMDAwMDAwMDAwMDEsIm91dHB1dCI6MC4wMDg2NCwiY2FjaGVSZWFkIjowLjA1ODYyMzk5OTk5OTk5OTk5NiwiY2FjaGVXcml0ZSI6MCwidG90YWwiOjAuMDczNjA5fX0sInN0b3BSZWFzb24iOiJ0b29sVXNlIiwidGltZXN0YW1wIjoxNzg0OTk1NTg0NTkyLCJyZXNwb25zZUlkIjoicmVzcF8wMWI5OTVlM2E3NzA1ZWU0MDE2YTY0ZGYwMTAwOTQ4MTkxYTk4ZjY3ZTIxMDg5MzBiZCJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiI4YmNlZTZiNiIsInBhcmVudElkIjoiNzA5OWZjZDYiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjA2OjM5LjA0MloiLCJtZXNzYWdlIjp7InJvbGUiOiJ0b29sUmVzdWx0IiwidG9vbENhbGxJZCI6ImNhbGxfeXF2RzVndURLZXVvbDJ4TkV6S2F4WmRCfGZjXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZjA2YmI2NDgxOTE5YzcwODYwZGYyMGJhZmE0IiwidG9vbE5hbWUiOiJiYXNoIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoicmVzdG9yZWQgY3JhdGVzL2ZsYXNoZXItcXQvQ2FyZ28udG9tbFxucmVzdG9yZWQgY3JhdGVzL2ZsYXNoZXItcXQvc3JjL3VpLmNwcFxucmVzdG9yZWQgY3JhdGVzL2ZsYXNoZXItcXQvc3JjL21haW4ucnNcbnJlc3RvcmVkIGNyYXRlcy9mbGFzaGVyLXF0L2J1aWxkLnJzXG4gICAgVXBkYXRpbmcgY3JhdGVzLmlvIGluZGV4XG4gICAgIExvY2tpbmcgMyBwYWNrYWdlcyB0byBsYXRlc3QgUnVzdCAxLjk3LjAgY29tcGF0aWJsZSB2ZXJzaW9uc1xuICAgICAgQWRkaW5nIGNjIHYxLjQuMFxuICAgICAgQWRkaW5nIGZpbmQtbXN2Yy10b29scyB2MC4xLjlcbiAgICAgIEFkZGluZyBzaGxleCB2Mi4wLjFcbiAgIENvbXBpbGluZyBmbGFzaGVyLXF0IHYwLjEuMCAoL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlci9jcmF0ZXMvZmxhc2hlci1xdClcbiAgICBGaW5pc2hlZCBgZGV2YCBwcm9maWxlIFt1bm9wdGltaXplZCArIGRlYnVnaW5mb10gdGFyZ2V0KHMpIGluIDQuMjdzXG4ifV0sImlzRXJyb3IiOmZhbHNlLCJ0aW1lc3RhbXAiOjE3ODQ5OTU1OTkwNDJ9fSx7InR5cGUiOiJtZXNzYWdlIiwiaWQiOiJhYmRlYzIxOSIsInBhcmVudElkIjoiOGJjZWU2YjYiLCJ0aW1lc3RhbXAiOiIyMDI2LTA3LTI1VDE2OjA3OjAwLjc2MVoiLCJtZXNzYWdlIjp7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGhpbmtpbmciLCJ0aGlua2luZyI6IioqQ2xhcmlmeWluZyBRdDYgY29tcGF0aWJpbGl0eSBsaW1pdGF0aW9ucyoqXG5cbioqTGlzdGluZyBmaW5hbCBRdDYgaW50ZWdyYXRpb24gb3B0aW9ucyoqIiwidGhpbmtpbmdTaWduYXR1cmUiOiJ7XCJpZFwiOlwicnNfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRmMTIwYjkwODE5MWJiOGUzNDEwYTI4ZWRkZmRcIixcInR5cGVcIjpcInJlYXNvbmluZ1wiLFwiY29udGVudFwiOltdLFwiZW5jcnlwdGVkX2NvbnRlbnRcIjpcImdBQUFBQUJxWk44YzFGc1FidTlDM1pUbU0xXzZxc0h6N3BlSnQwVHRDclctcnFSVnNQUS1YbXM0dS12Y1ZoUFVaTmstTVQtVW9nSmxZTnpKMVFnU0hSWk9kbE5XTDZadHBPamJORGtkcFJ6ZVhRVTBKVThjQU5FTXlPeDFUS045Rmo5V21ORGF4TF9WWnptRlh5a2FfbHA4WVNmUk02TEw2NEdwR0doVzVOb2lFY1NReVVtc3REMm1UZXpvVzd4OGVVOV9GQjNUTUNoNXY0TzhqOFctMEF2bHh1ZXF4UkNFQkZiV1BnTVhMTXo2LVdrdENmVzBuaGtsZ1VYTU1TeTcxSTZhOVdFTC0teTNMYmFEbF9SUnhlNF9QdVdoWHZQZEdDbkk2cUhrSkhtY0FXZms5UDl3TkcyOXU3dU10MmxVRVFjZzRkaHZDa0wtdU4zTkVTYXM0TndjRUxVRDJpWk9aMTlwbEVydEJYdTNuZ09MOGlTRUluTE1ucG1NejhVSWIyaDNMMFRSQmtweFlIMHQzaGFSbVU1ZXJpQUJ3OVA3bGh4VUlPZjRaUmNKN3lrQUwySWY1WS1keVpxWnMyVHFzTktVLV8xaXJxZnhuM3d3QUg2eEZvQ0pkNWhHR2lvMEdaQlFiSEppNHYzQXZLT0JqbGpNbVRCY2U0aTFudTR1LVlOS21iRU00UWNra0MxU3JlZUl1OFpGMlBiRTRmQnBjMW1GX0xSUXUyTnF2ZkhKdmszamRkTEdNcnVPZlJOVVUzWmZ1Q3FUSWtkRmw3Qzl4NVBqenhWN0hFdGdsMndCX2FnSUZsWnliaGJqTzNXZTZ0UThOVUdoRWpkZEduTzRhRkw1MU5ZT1Y5WEdKWFktcjlGZ1huczFEQll4dU9kMHhXUmpJMFpkVEJpYUhtZ0UyczJ5dWVZSEpkZkZnOFNFQUpDMHZ5Z3V3cmF3UEdwMkE4YlZNTndwVlFPQm93cW93S2Q5RHpPM2ltbWQ4aHJmYTV4UGtsbVhsX1UtSzFVLXZFazRlOWZ4ZVRCT2prbFo0LWNKaVZKOW9TeklyaDE0RTc4WDBZQkRCZk1aWVJVcXVBSXR4X1I5RGV5OVE4S3dza2Z6WG1qR1pXREpQa1hlVExpNmNEMmlTMU5ZVXg5dDQ5dmp6ODU2NUxTSUt1a0FyUGRHUFZXdnlKS3R1cUxaMkdUM3ZBOHV4V0VQbjdDTXZTR3N4b3VyMWlpX3BWNW5IYnVnZ3VHVTN1NGpxWDc5Vl9NbGRyRThOVU9wNGxCQUc1TVM5SUlkVE9fRElqS09nRXZZV2FrejBSSXVLbHdQRG9ScnNOUTNyOFloWEpjc2lpMnJQMWRqZzhDNkhoTnlYQjFROWVVaHowT0J0X0RFYjBTYk4xN01YSEZvT2Z6N1UwUkR5cUxWNi1kQXBBeUp5MHFBaUVHdEMtem9tN3Y4Wjc3bFg2aFNyYm1SekpOdldnbnd0dWp1TV9Jc1NDZkxBaGgyWUJ3aVY4bzRsVHNfNHJqdVp5c1JLTUNGem83TTlyVkdWUGJZR2t6bXliNzBVSE9MWmV2dWxaSDVxdWdTVkdVT2NzVG1ickZDYzhCOTc2TmNKMkxVSWdoRXBUTC01LWxTU1hWRzVydkJKaUxyempmY2FOV2tXV2pLMWp4V1U1bUgtbS1jZW5OaFE5Y29lRUJJcjBRQmJlb2dYRU5sTTF2dmFZcFhyeXQ3Qk1DOU1uZVVJZ3M0b1VQcFZCU2pWVXF3QVlNWmtBa2lwWVpFMmI1QUhuU3dYVE96TVktd2hUdHc3YTVFYkFXdTFELTRWeVduWjNabTRjaFNZQnp4STAzTFRaRHA3ZlQzUTBMaU51RzF1bVI0OFZEdXVKaHJwRDhFUktHQlc5QjRpa2I3MXVKRG1VUExGM3Q1Z0FXRmppYTgySkh5NmRKaUpkdjlVRFQzNjRLY05YUjlqTXNkc1V3SUJlc1Fpa2pkWGo3YlFRcG9DZ0tUdzY3R2FqTTN5UXQ2QzN3NHRzLXF0b1AycjdOaVJjQUFFdU9EVmNIbnR5VTVHRDFEbzJ4eUV5dVVaM3BrVVNIMklubGVzUHFvSUJrMGx3QnZJOGVBMzh0SVBheTJGc05tWElvejJmOU9UZmFJa1RHUHgzOGFXRGtUckZYcDUtLWVzN2s5UTJfbWdCQkVyOUxRVU5vd2R1QzVnNVN0Q2lldGlXemFjYUd3Tkd3dFphNGhyYklJV0J0THduOXRLUnBYWlRaaHgyZFFXa2k3NVNfN2tZUVUyNFZ2MHpYVHV4NEpGLTBycEZEejBkUGdrMVZNbFYzYS1IYzd1anRGdGRNZ0hoRXl6S2V3NWdzdEdSamh1bXpIdm9GY1lHc1JLNHdZY2tqOEFPTlJoVmQtZ3RWZlJfWTRYQzJwY1FRcFhHbF85Q0FvSVhWejFvXzRra0lGbW9QOHEyODhJZkFDcmNnS0EzV1lkamltRGNZU1U4Nlo5MTlvRi1mRHZBd1ZYWnp1WnZrVjJuY1JTeDR1bmpQSzhDamF0THRtQzBpODlQdmRnOHR2SEtXVXQ5b0Q2c3pHeXY0ekZsUUR2MDEwNXI3TFd5azRzWVdlMUtnVFUwM1ZaM0d6d0ZIem9lcTlUeWZ5WW1BdldDd2ZhOWl5c2R2Y2dUU3o0Q0dHSU9WeG9PWGFEbFlvUU9QX2FpeTdacTZhX2hGblJzNXlDbmxic3JUY3EtRFlyMTVXQ2NCOGh0eXZ1bWlJUDZBSmJQblFnRm1BUWdET29QdERfRlA4WE02WWhKZ1RLVjZwYVk0aUVna1p6WEt1YXRLTDNmMndMYjQ5ODBlbkRyN3VIMUstaXBhLVR1N3k3NTE0cnZLb1c0MlRWR2FYMV9JMXZnYVJFVndsa1FySkNMaGlZb1Q0cnh6VkYtcHZBS1dxZjJ1TThyczI5M0FES3RObkFYOXhoNFp2NkJKTHVyeWx5UWxQd002d1BJNVcyZWJ3ajg0aEFQUzV3MUdKXCIsXCJzdW1tYXJ5XCI6W3tcInR5cGVcIjpcInN1bW1hcnlfdGV4dFwiLFwidGV4dFwiOlwiKipDbGFyaWZ5aW5nIFF0NiBjb21wYXRpYmlsaXR5IGxpbWl0YXRpb25zKipcIn0se1widHlwZVwiOlwic3VtbWFyeV90ZXh0XCIsXCJ0ZXh0XCI6XCIqKkxpc3RpbmcgZmluYWwgUXQ2IGludGVncmF0aW9uIG9wdGlvbnMqKlwifV19In0seyJ0eXBlIjoidGV4dCIsInRleHQiOiJUaG9zZSByZXF1aXJlbWVudHMgY3VycmVudGx5IGNvbmZsaWN0OlxuXG4tICoqQ1hYLVF0KiogaXMgdGhlIGVzdGFibGlzaGVkLCBtYWludGFpbmVkIFJ1c3QvUXQ2IGludGVncmF0aW9uLCBidXQgcHJpbWFyaWx5IHN1cHBvcnRzIFJ1c3QtYmFja2VkIGBRT2JqZWN0YHMgd2l0aCBRTUwvUXQgUXVpY2suIEl0IGRvZXMgbm90IHByb3ZpZGUgY29tcHJlaGVuc2l2ZSBSdXN0IGJpbmRpbmdzIGZvciBRdCBXaWRnZXRzLlxuLSAqKlJpdHVhbCBgcXRfd2lkZ2V0c2AqKiB0YXJnZXRzIFF0NSBhbmQgaXMgbGFyZ2VseSB1bm1haW50YWluZWQuXG4tICoqcXRycy9xYXgqKiBvZmZlciBSdXN0LWZhY2luZyBRdDYgQVBJcywgYnV0IGFyZSB2ZXJ5IG5ldyBhbmQgbWluaW1hbGx5IGFkb3B0ZWQsIGNvbnRyYXJ5IHRvIHlvdXIgcG9wdWxhci1saWJyYXJ5IHJlcXVpcmVtZW50LlxuLSBOYXRpdmUgUXQgV2lkZ2V0cyB1c2UgYSBDKysgQUJJLCBzbyBiaW5kaW5ncyBhbHdheXMgbmVlZCBnZW5lcmF0ZWQgQysrIGdsdWUgaW50ZXJuYWxseS4gVGhhdCBpcyBmaW5lIGluIGRlcGVuZGVuY2llcywgYnV0IG5vIGVzdGFibGlzaGVkIFF0NiBjcmF0ZSBjdXJyZW50bHkgZXhwb3NlcyB0aGUgZnVsbCBXaWRnZXRzIEFQSSBjbGVhbmx5IGZyb20gUnVzdC5cblxuVGhlIHJlYWxpc3RpYyBvcHRpb25zIGFyZTpcblxuMS4gKipDWFgtUXQgKyBRdDYvUU1MKiog4oCUIGVzdGFibGlzaGVkIGxpYnJhcnkgYW5kIG5vIHByb2plY3QgQysrLCBidXQgcmV0dXJucyB0byBRdCBRdWljayBzdHlsaW5nLlxuMi4gKipRdDYgV2lkZ2V0cyArIHByb2plY3QgQysrIGJyaWRnZSoqIOKAlCBnZW51aW5lbHkgbmF0aXZlIGFwcGVhcmFuY2UuXG4zLiAqKnF0cnMgKyBRdDYgV2lkZ2V0cyoqIOKAlCBwcm9qZWN0IGNvZGUgZW50aXJlbHkgUnVzdCBhbmQgbmF0aXZlLWxvb2tpbmcsIGJ1dCByZWxpZXMgb24gYSB5b3VuZywgbG93LWFkb3B0aW9uIGxpYnJhcnkuXG5cbkkgaGF2ZSBsZWZ0IHRoZSBwcmV2aW91cyB3b3JraW5nIGltcGxlbWVudGF0aW9uIGludGFjdCByYXRoZXIgdGhhbiByZXBsYWNpbmcgaXQgd2l0aCBhbiB1bm1haW50YWluZWQgb3Igb2JzY3VyZSBkZXBlbmRlbmN5LiIsInRleHRTaWduYXR1cmUiOiJ7XCJ2XCI6MSxcImlkXCI6XCJtc2dfMDFiOTk1ZTNhNzcwNWVlNDAxNmE2NGRmMWNlMTUwODE5MWJiYzNhM2ZhZTJmZGViMDhcIixcInBoYXNlXCI6XCJmaW5hbF9hbnN3ZXJcIn0ifV0sImFwaSI6Im9wZW5haS1jb2RleC1yZXNwb25zZXMiLCJwcm92aWRlciI6Im9wZW5haS1jb2RleCIsIm1vZGVsIjoiZ3B0LTUuNi1zb2wiLCJ1c2FnZSI6eyJpbnB1dCI6Njk5LCJvdXRwdXQiOjQ3MCwiY2FjaGVSZWFkIjoxMTgyNzIsImNhY2hlV3JpdGUiOjAsInJlYXNvbmluZyI6MjIyLCJ0b3RhbFRva2VucyI6MTE5NDQxLCJjb3N0Ijp7ImlucHV0IjowLjAwMzQ5NTAwMDAwMDAwMDAwMDMsIm91dHB1dCI6MC4wMTQxLCJjYWNoZVJlYWQiOjAuMDU5MTM1OTk5OTk5OTk5OTk0LCJjYWNoZVdyaXRlIjowLCJ0b3RhbCI6MC4wNzY3MzF9fSwic3RvcFJlYXNvbiI6InN0b3AiLCJ0aW1lc3RhbXAiOjE3ODQ5OTU1OTkwNDcsInJlc3BvbnNlSWQiOiJyZXNwXzAxYjk5NWUzYTc3MDVlZTQwMTZhNjRkZjBmNzUwNDgxOTE5M2JjZjgyZTZiNzA5NGY3In19XSwibGVhZklkIjoiYWJkZWMyMTkiLCJzeXN0ZW1Qcm9tcHQiOiJZb3UgYXJlIGFuIGV4cGVydCBjb2RpbmcgYXNzaXN0YW50IG9wZXJhdGluZyBpbnNpZGUgcGksIGEgY29kaW5nIGFnZW50IGhhcm5lc3MuIFlvdSBoZWxwIHVzZXJzIGJ5IHJlYWRpbmcgZmlsZXMsIGV4ZWN1dGluZyBjb21tYW5kcywgZWRpdGluZyBjb2RlLCBhbmQgd3JpdGluZyBuZXcgZmlsZXMuXG5cbkF2YWlsYWJsZSB0b29sczpcbi0gcmVhZDogUmVhZCBmaWxlIGNvbnRlbnRzXG4tIGJhc2g6IEV4ZWN1dGUgYmFzaCBjb21tYW5kcyAobHMsIGdyZXAsIGZpbmQsIGV0Yy4pXG4tIGVkaXQ6IE1ha2UgcHJlY2lzZSBmaWxlIGVkaXRzIHdpdGggZXhhY3QgdGV4dCByZXBsYWNlbWVudCwgaW5jbHVkaW5nIG11bHRpcGxlIGRpc2pvaW50IGVkaXRzIGluIG9uZSBjYWxsXG4tIHdyaXRlOiBDcmVhdGUgb3Igb3ZlcndyaXRlIGZpbGVzXG4tIHdlYl9zZWFyY2g6IFNlYXJjaCB0aGUgcHVibGljIHdlYiBmb3IgY3VycmVudCBpbmZvcm1hdGlvblxuLSB3ZWJfZmV0Y2g6IEZldGNoIGFuZCByZWFkIGEgd2ViIHBhZ2UgZnJvbSBhbiBodHRwKHMpIFVSTFxuXG5JbiBhZGRpdGlvbiB0byB0aGUgdG9vbHMgYWJvdmUsIHlvdSBtYXkgaGF2ZSBhY2Nlc3MgdG8gb3RoZXIgY3VzdG9tIHRvb2xzIGRlcGVuZGluZyBvbiB0aGUgcHJvamVjdC5cblxuR3VpZGVsaW5lczpcbi0gVXNlIGJhc2ggZm9yIGZpbGUgb3BlcmF0aW9ucyBsaWtlIGxzLCByZywgZmluZFxuLSBVc2UgcmVhZCB0byBleGFtaW5lIGZpbGVzIGluc3RlYWQgb2YgY2F0IG9yIHNlZC5cbi0gSW5zcGVjdCBQSV8qIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgY3VycmVudCBtb2RlbCBhbmQgc2Vzc2lvbiBkZXRhaWxzLlxuLSBVc2UgZWRpdCBmb3IgcHJlY2lzZSBjaGFuZ2VzIChlZGl0c1tdLm9sZFRleHQgbXVzdCBtYXRjaCBleGFjdGx5KVxuLSBXaGVuIGNoYW5naW5nIG11bHRpcGxlIHNlcGFyYXRlIGxvY2F0aW9ucyBpbiBvbmUgZmlsZSwgdXNlIG9uZSBlZGl0IGNhbGwgd2l0aCBtdWx0aXBsZSBlbnRyaWVzIGluIGVkaXRzW10gaW5zdGVhZCBvZiBtdWx0aXBsZSBlZGl0IGNhbGxzXG4tIEVhY2ggZWRpdHNbXS5vbGRUZXh0IGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgb3JpZ2luYWwgZmlsZSwgbm90IGFmdGVyIGVhcmxpZXIgZWRpdHMgYXJlIGFwcGxpZWQuIERvIG5vdCBlbWl0IG92ZXJsYXBwaW5nIG9yIG5lc3RlZCBlZGl0cy4gTWVyZ2UgbmVhcmJ5IGNoYW5nZXMgaW50byBvbmUgZWRpdC5cbi0gS2VlcCBlZGl0c1tdLm9sZFRleHQgYXMgc21hbGwgYXMgcG9zc2libGUgd2hpbGUgc3RpbGwgYmVpbmcgdW5pcXVlIGluIHRoZSBmaWxlLiBEbyBub3QgcGFkIHdpdGggbGFyZ2UgdW5jaGFuZ2VkIHJlZ2lvbnMuXG4tIFVzZSB3cml0ZSBvbmx5IGZvciBuZXcgZmlsZXMgb3IgY29tcGxldGUgcmV3cml0ZXMuXG4tIFVzZSB3ZWJfc2VhcmNoIGZvciBjdXJyZW50LCBuaWNoZSwgb3IgZXh0ZXJuYWxseSB2ZXJpZmlhYmxlIGluZm9ybWF0aW9uOyBjaXRlIHJlc3VsdCBVUkxzIGluIHRoZSByZXNwb25zZS5cbi0gVXNlIHdlYl9mZXRjaCB0byBpbnNwZWN0IGEgcmVsZXZhbnQgcGFnZSByZXR1cm5lZCBieSB3ZWJfc2VhcmNoIGJlZm9yZSByZWx5aW5nIG9uIGl0cyBkZXRhaWxzLlxuLSBCZSBjb25jaXNlIGluIHlvdXIgcmVzcG9uc2VzXG4tIFNob3cgZmlsZSBwYXRocyBjbGVhcmx5IHdoZW4gd29ya2luZyB3aXRoIGZpbGVzXG5cblBpIGRvY3VtZW50YXRpb24gKHJlYWQgb25seSB3aGVuIHRoZSB1c2VyIGFza3MgYWJvdXQgcGkgaXRzZWxmLCBpdHMgU0RLLCBleHRlbnNpb25zLCB0aGVtZXMsIHNraWxscywgb3IgVFVJKTpcbi0gTWFpbiBkb2N1bWVudGF0aW9uOiAvaG9tZS9hZ3VzY2hpbi8ubG9jYWwvc2hhcmUvYnVuL2luc3RhbGwvZ2xvYmFsL25vZGVfbW9kdWxlcy9AZWFyZW5kaWwtd29ya3MvcGktY29kaW5nLWFnZW50L1JFQURNRS5tZFxuLSBBZGRpdGlvbmFsIGRvY3M6IC9ob21lL2FndXNjaGluLy5sb2NhbC9zaGFyZS9idW4vaW5zdGFsbC9nbG9iYWwvbm9kZV9tb2R1bGVzL0BlYXJlbmRpbC13b3Jrcy9waS1jb2RpbmctYWdlbnQvZG9jc1xuLSBFeGFtcGxlczogL2hvbWUvYWd1c2NoaW4vLmxvY2FsL3NoYXJlL2J1bi9pbnN0YWxsL2dsb2JhbC9ub2RlX21vZHVsZXMvQGVhcmVuZGlsLXdvcmtzL3BpLWNvZGluZy1hZ2VudC9leGFtcGxlcyAoZXh0ZW5zaW9ucywgY3VzdG9tIHRvb2xzLCBTREspXG4tIFdoZW4gcmVhZGluZyBwaSBkb2NzIG9yIGV4YW1wbGVzLCByZXNvbHZlIGRvY3MvLi4uIHVuZGVyIEFkZGl0aW9uYWwgZG9jcyBhbmQgZXhhbXBsZXMvLi4uIHVuZGVyIEV4YW1wbGVzLCBub3QgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnlcbi0gV2hlbiBhc2tlZCBhYm91dDogZXh0ZW5zaW9ucyAoZG9jcy9leHRlbnNpb25zLm1kLCBleGFtcGxlcy9leHRlbnNpb25zLyksIHRoZW1lcyAoZG9jcy90aGVtZXMubWQpLCBza2lsbHMgKGRvY3Mvc2tpbGxzLm1kKSwgcHJvbXB0IHRlbXBsYXRlcyAoZG9jcy9wcm9tcHQtdGVtcGxhdGVzLm1kKSwgVFVJIGNvbXBvbmVudHMgKGRvY3MvdHVpLm1kKSwga2V5YmluZGluZ3MgKGRvY3Mva2V5YmluZGluZ3MubWQpLCBTREsgaW50ZWdyYXRpb25zIChkb2NzL3Nkay5tZCksIGN1c3RvbSBwcm92aWRlcnMgKGRvY3MvY3VzdG9tLXByb3ZpZGVyLm1kKSwgYWRkaW5nIG1vZGVscyAoZG9jcy9tb2RlbHMubWQpLCBwaSBwYWNrYWdlcyAoZG9jcy9wYWNrYWdlcy5tZCksIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZG9jcy9lbnZpcm9ubWVudC12YXJpYWJsZXMubWQpXG4tIFdoZW4gd29ya2luZyBvbiBwaSB0b3BpY3MsIHJlYWQgdGhlIGRvY3MgYW5kIGV4YW1wbGVzLCBhbmQgZm9sbG93IC5tZCBjcm9zcy1yZWZlcmVuY2VzIGJlZm9yZSBpbXBsZW1lbnRpbmdcbi0gQWx3YXlzIHJlYWQgcGkgLm1kIGZpbGVzIGNvbXBsZXRlbHkgYW5kIGZvbGxvdyBsaW5rcyB0byByZWxhdGVkIGRvY3MgKGUuZy4sIHR1aS5tZCBmb3IgVFVJIEFQSSBkZXRhaWxzKVxuQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeTogL2hvbWUvYWd1c2NoaW4vUHJvamVjdHMvZmxhc2hlciIsInRvb2xzIjpbeyJuYW1lIjoicmVhZCIsImRlc2NyaXB0aW9uIjoiUmVhZCB0aGUgY29udGVudHMgb2YgYSBmaWxlLiBTdXBwb3J0cyB0ZXh0IGZpbGVzIGFuZCBpbWFnZXMgKGpwZywgcG5nLCBnaWYsIHdlYnAsIGJtcCkuIEltYWdlcyBhcmUgc2VudCBhcyBhdHRhY2htZW50cy4gRm9yIHRleHQgZmlsZXMsIG91dHB1dCBpcyB0cnVuY2F0ZWQgdG8gMjAwMCBsaW5lcyBvciA1MEtCICh3aGljaGV2ZXIgaXMgaGl0IGZpcnN0KS4gVXNlIG9mZnNldC9saW1pdCBmb3IgbGFyZ2UgZmlsZXMuIFdoZW4geW91IG5lZWQgdGhlIGZ1bGwgZmlsZSwgY29udGludWUgd2l0aCBvZmZzZXQgdW50aWwgY29tcGxldGUuIiwicGFyYW1ldGVycyI6eyJ0eXBlIjoib2JqZWN0IiwicmVxdWlyZWQiOlsicGF0aCJdLCJwcm9wZXJ0aWVzIjp7InBhdGgiOnsidHlwZSI6InN0cmluZyIsImRlc2NyaXB0aW9uIjoiUGF0aCB0byB0aGUgZmlsZSB0byByZWFkIChyZWxhdGl2ZSBvciBhYnNvbHV0ZSkifSwib2Zmc2V0Ijp7InR5cGUiOiJudW1iZXIiLCJkZXNjcmlwdGlvbiI6IkxpbmUgbnVtYmVyIHRvIHN0YXJ0IHJlYWRpbmcgZnJvbSAoMS1pbmRleGVkKSJ9LCJsaW1pdCI6eyJ0eXBlIjoibnVtYmVyIiwiZGVzY3JpcHRpb24iOiJNYXhpbXVtIG51bWJlciBvZiBsaW5lcyB0byByZWFkIn19fX0seyJuYW1lIjoiYmFzaCIsImRlc2NyaXB0aW9uIjoiRXhlY3V0ZSBhIGJhc2ggY29tbWFuZCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gUmV0dXJucyBzdGRvdXQgYW5kIHN0ZGVyci4gT3V0cHV0IGlzIHRydW5jYXRlZCB0byBsYXN0IDIwMDAgbGluZXMgb3IgNTBLQiAod2hpY2hldmVyIGlzIGhpdCBmaXJzdCkuIElmIHRydW5jYXRlZCwgZnVsbCBvdXRwdXQgaXMgc2F2ZWQgdG8gYSB0ZW1wIGZpbGUuIE9wdGlvbmFsbHkgcHJvdmlkZSBhIHRpbWVvdXQgaW4gc2Vjb25kcy4iLCJwYXJhbWV0ZXJzIjp7InR5cGUiOiJvYmplY3QiLCJyZXF1aXJlZCI6WyJjb21tYW5kIl0sInByb3BlcnRpZXMiOnsiY29tbWFuZCI6eyJ0eXBlIjoic3RyaW5nIiwiZGVzY3JpcHRpb24iOiJCYXNoIGNvbW1hbmQgdG8gZXhlY3V0ZSJ9LCJ0aW1lb3V0Ijp7InR5cGUiOiJudW1iZXIiLCJkZXNjcmlwdGlvbiI6IlRpbWVvdXQgaW4gc2Vjb25kcyAob3B0aW9uYWwsIG5vIGRlZmF1bHQgdGltZW91dCkifX19fSx7Im5hbWUiOiJlZGl0IiwiZGVzY3JpcHRpb24iOiJFZGl0IGEgc2luZ2xlIGZpbGUgdXNpbmcgZXhhY3QgdGV4dCByZXBsYWNlbWVudC4gRXZlcnkgZWRpdHNbXS5vbGRUZXh0IG11c3QgbWF0Y2ggYSB1bmlxdWUsIG5vbi1vdmVybGFwcGluZyByZWdpb24gb2YgdGhlIG9yaWdpbmFsIGZpbGUuIElmIHR3byBjaGFuZ2VzIGFmZmVjdCB0aGUgc2FtZSBibG9jayBvciBuZWFyYnkgbGluZXMsIG1lcmdlIHRoZW0gaW50byBvbmUgZWRpdCBpbnN0ZWFkIG9mIGVtaXR0aW5nIG92ZXJsYXBwaW5nIGVkaXRzLiBEbyBub3QgaW5jbHVkZSBsYXJnZSB1bmNoYW5nZWQgcmVnaW9ucyBqdXN0IHRvIGNvbm5lY3QgZGlzdGFudCBjaGFuZ2VzLiIsInBhcmFtZXRlcnMiOnsidHlwZSI6Im9iamVjdCIsInJlcXVpcmVkIjpbInBhdGgiLCJlZGl0cyJdLCJwcm9wZXJ0aWVzIjp7InBhdGgiOnsidHlwZSI6InN0cmluZyIsImRlc2NyaXB0aW9uIjoiUGF0aCB0byB0aGUgZmlsZSB0byBlZGl0IChyZWxhdGl2ZSBvciBhYnNvbHV0ZSkifSwiZWRpdHMiOnsidHlwZSI6ImFycmF5IiwiaXRlbXMiOnsidHlwZSI6Im9iamVjdCIsInJlcXVpcmVkIjpbIm9sZFRleHQiLCJuZXdUZXh0Il0sInByb3BlcnRpZXMiOnsib2xkVGV4dCI6eyJ0eXBlIjoic3RyaW5nIiwiZGVzY3JpcHRpb24iOiJFeGFjdCB0ZXh0IGZvciBvbmUgdGFyZ2V0ZWQgcmVwbGFjZW1lbnQuIEl0IG11c3QgYmUgdW5pcXVlIGluIHRoZSBvcmlnaW5hbCBmaWxlIGFuZCBtdXN0IG5vdCBvdmVybGFwIHdpdGggYW55IG90aGVyIGVkaXRzW10ub2xkVGV4dCBpbiB0aGUgc2FtZSBjYWxsLiJ9LCJuZXdUZXh0Ijp7InR5cGUiOiJzdHJpbmciLCJkZXNjcmlwdGlvbiI6IlJlcGxhY2VtZW50IHRleHQgZm9yIHRoaXMgdGFyZ2V0ZWQgZWRpdC4ifX19LCJkZXNjcmlwdGlvbiI6Ik9uZSBvciBtb3JlIHRhcmdldGVkIHJlcGxhY2VtZW50cy4gRWFjaCBlZGl0IGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgb3JpZ2luYWwgZmlsZSwgbm90IGluY3JlbWVudGFsbHkuIERvIG5vdCBpbmNsdWRlIG92ZXJsYXBwaW5nIG9yIG5lc3RlZCBlZGl0cy4gSWYgdHdvIGNoYW5nZXMgdG91Y2ggdGhlIHNhbWUgYmxvY2sgb3IgbmVhcmJ5IGxpbmVzLCBtZXJnZSB0aGVtIGludG8gb25lIGVkaXQgaW5zdGVhZC4ifX19fSx7Im5hbWUiOiJ3cml0ZSIsImRlc2NyaXB0aW9uIjoiV3JpdGUgY29udGVudCB0byBhIGZpbGUuIENyZWF0ZXMgdGhlIGZpbGUgaWYgaXQgZG9lc24ndCBleGlzdCwgb3ZlcndyaXRlcyBpZiBpdCBkb2VzLiBBdXRvbWF0aWNhbGx5IGNyZWF0ZXMgcGFyZW50IGRpcmVjdG9yaWVzLiIsInBhcmFtZXRlcnMiOnsidHlwZSI6Im9iamVjdCIsInJlcXVpcmVkIjpbInBhdGgiLCJjb250ZW50Il0sInByb3BlcnRpZXMiOnsicGF0aCI6eyJ0eXBlIjoic3RyaW5nIiwiZGVzY3JpcHRpb24iOiJQYXRoIHRvIHRoZSBmaWxlIHRvIHdyaXRlIChyZWxhdGl2ZSBvciBhYnNvbHV0ZSkifSwiY29udGVudCI6eyJ0eXBlIjoic3RyaW5nIiwiZGVzY3JpcHRpb24iOiJDb250ZW50IHRvIHdyaXRlIHRvIHRoZSBmaWxlIn19fX0seyJuYW1lIjoid2ViX3NlYXJjaCIsImRlc2NyaXB0aW9uIjoiU2VhcmNoIHRoZSBwdWJsaWMgd2ViIGFuZCByZXR1cm4gcmVzdWx0IHRpdGxlcywgVVJMcywgYW5kIHNuaXBwZXRzLiIsInBhcmFtZXRlcnMiOnsidHlwZSI6Im9iamVjdCIsInJlcXVpcmVkIjpbInF1ZXJ5Il0sInByb3BlcnRpZXMiOnsicXVlcnkiOnsidHlwZSI6InN0cmluZyIsImRlc2NyaXB0aW9uIjoiV2ViIHNlYXJjaCBxdWVyeSJ9LCJtYXhSZXN1bHRzIjp7InR5cGUiOiJpbnRlZ2VyIiwibWluaW11bSI6MSwibWF4aW11bSI6MTB9fX19LHsibmFtZSI6IndlYl9mZXRjaCIsImRlc2NyaXB0aW9uIjoiRmV0Y2ggYSBwdWJsaWMgd2ViIHBhZ2UgYW5kIGV4dHJhY3QgcmVhZGFibGUgdGV4dCBmcm9tIGl0LiIsInBhcmFtZXRlcnMiOnsidHlwZSI6Im9iamVjdCIsInJlcXVpcmVkIjpbInVybCJdLCJwcm9wZXJ0aWVzIjp7InVybCI6eyJ0eXBlIjoic3RyaW5nIiwiZGVzY3JpcHRpb24iOiJQdWJsaWMgaHR0cChzKSBVUkwgdG8gZmV0Y2gifSwibWF4Q2hhcnMiOnsidHlwZSI6ImludGVnZXIiLCJtaW5pbXVtIjoxMDAwLCJtYXhpbXVtIjozMDAwMH19fX1dfQ==</script>
<!-- Vendored libraries -->
<script>/**
* marked v18.0.5 - a markdown parser
* Copyright (c) 2018-2026, MarkedJS. (MIT License)
* Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)
* https://github.com/markedjs/marked
*/
/**
* DO NOT EDIT THIS FILE
* The code in this file is generated from files in ./src/
*/
(function(g,f){if(typeof exports=="object"&&typeof module<"u"){module.exports=f()}else if("function"==typeof define && define.amd){define("marked",f)}else {g["marked"]=f()}}(typeof globalThis < "u" ? globalThis : typeof self < "u" ? self : this,function(){var exports={};var __exports=exports;var module={exports};
"use strict";var N=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var we=Object.getOwnPropertyNames;var ye=Object.prototype.hasOwnProperty;var Pe=(l,e)=>{for(var t in e)N(l,t,{get:e[t],enumerable:!0})},Se=(l,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of we(e))!ye.call(l,s)&&s!==t&&N(l,s,{get:()=>e[s],enumerable:!(n=Oe(e,s))||n.enumerable});return l};var $e=l=>Se(N({},"__esModule",{value:!0}),l);var Rt={};Pe(Rt,{Hooks:()=>P,Lexer:()=>x,Marked:()=>C,Parser:()=>b,Renderer:()=>y,TextRenderer:()=>S,Tokenizer:()=>w,defaults:()=>T,getDefaults:()=>_,lexer:()=>bt,marked:()=>g,options:()=>ht,parse:()=>mt,parseInline:()=>ft,parser:()=>xt,setOptions:()=>kt,use:()=>dt,walkTokens:()=>gt});module.exports=$e(Rt);function _(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=_();function Q(l){T=l}var z={exec:()=>null};function E(l){let e=[];return t=>{let n=Math.max(0,Math.min(3,t-1)),s=e[n];return s||(s=l(n),e[n]=s),s}}function d(l,e=""){let t=typeof l=="string"?l:l.source,n={replace:(s,r)=>{let i=typeof r=="string"?r:r.source;return i=i.replace(m.caret,"$1"),t=t.replace(s,i),n},getRegex:()=>new RegExp(t,e)};return n}var Le=((l="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+l)}catch{return!1}})(),m={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:E(l=>new RegExp(`^ {0,${l}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:E(l=>new RegExp(`^ {0,${l}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:E(l=>new RegExp(`^ {0,${l}}(?:\`\`\`|~~~)`)),headingBeginRegex:E(l=>new RegExp(`^ {0,${l}}#`)),htmlBeginRegex:E(l=>new RegExp(`^ {0,${l}}<(?:[a-z].*>|!--)`,"i")),blockquoteBeginRegex:E(l=>new RegExp(`^ {0,${l}}>`))},_e=/^(?:[ \t]*(?:\n|$))+/,ze=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Me=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,D=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Ee=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,F=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,ae=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,le=d(ae).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),Ie=d(ae).replace(/bull/g,F).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),U=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Ae=/^[^\n]+/,K=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,Ce=d(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",K).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Be=d(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,F).getRegex(),H="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",W=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,De=d("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",W).replace("tag",H).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),ue=d(U).replace("hr",D).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",H).getRegex(),qe=d(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",ue).getRegex(),X={blockquote:qe,code:ze,def:Ce,fences:Me,heading:Ee,hr:D,html:De,lheading:le,list:Be,newline:_e,paragraph:ue,table:z,text:Ae},ie=d("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",D).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",H).getRegex(),ve={...X,lheading:Ie,table:ie,paragraph:d(U).replace("hr",D).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",ie).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",H).getRegex()},He={...X,html:d(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",W).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:z,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:d(U).replace("hr",D).replace("heading",` *#{1,6} *[^
]`).replace("lheading",le).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Ze=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Ge=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,pe=/^( {2,}|\\)\n(?!\s*$)/,Ne=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,I=/[\p{P}\p{S}]/u,Z=/[\s\p{P}\p{S}]/u,J=/[^\s\p{P}\p{S}]/u,Qe=d(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,Z).getRegex(),ce=/(?!~)[\p{P}\p{S}]/u,je=/(?!~)[\s\p{P}\p{S}]/u,Fe=/(?:[^\s\p{P}\p{S}]|~)/u,Ue=d(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Le?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),he=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,Ke=d(he,"u").replace(/punct/g,I).getRegex(),We=d(he,"u").replace(/punct/g,ce).getRegex(),ke="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Xe=d(ke,"gu").replace(/notPunctSpace/g,J).replace(/punctSpace/g,Z).replace(/punct/g,I).getRegex(),Je=d(ke,"gu").replace(/notPunctSpace/g,Fe).replace(/punctSpace/g,je).replace(/punct/g,ce).getRegex(),Ve=d("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,J).replace(/punctSpace/g,Z).replace(/punct/g,I).getRegex(),Ye=d(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,I).getRegex(),et="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",tt=d(et,"gu").replace(/notPunctSpace/g,J).replace(/punctSpace/g,Z).replace(/punct/g,I).getRegex(),nt=d(/\\(punct)/,"gu").replace(/punct/g,I).getRegex(),rt=d(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),st=d(W).replace("(?:-->|$)","-->").getRegex(),it=d("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",st).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),v=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,ot=d(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",v).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),de=d(/^!?\[(label)\]\[(ref)\]/).replace("label",v).replace("ref",K).getRegex(),ge=d(/^!?\[(ref)\](?:\[\])?/).replace("ref",K).getRegex(),at=d("reflink|nolink(?!\\()","g").replace("reflink",de).replace("nolink",ge).getRegex(),oe=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,V={_backpedal:z,anyPunctuation:nt,autolink:rt,blockSkip:Ue,br:pe,code:Ge,del:z,delLDelim:z,delRDelim:z,emStrongLDelim:Ke,emStrongRDelimAst:Xe,emStrongRDelimUnd:Ve,escape:Ze,link:ot,nolink:ge,punctuation:Qe,reflink:de,reflinkSearch:at,tag:it,text:Ne,url:z},lt={...V,link:d(/^!?\[(label)\]\((.*?)\)/).replace("label",v).getRegex(),reflink:d(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",v).getRegex()},j={...V,emStrongRDelimAst:Je,emStrongLDelim:We,delLDelim:Ye,delRDelim:tt,url:d(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",oe).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:d(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",oe).getRegex()},ut={...j,br:d(pe).replace("{2,}","*").getRegex(),text:d(j.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},q={normal:X,gfm:ve,pedantic:He},A={normal:V,gfm:j,breaks:ut,pedantic:lt};var pt={"&":"&","<":"<",">":">",'"':""","'":"'"},fe=l=>pt[l];function O(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,fe)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,fe);return l}function Y(l){try{l=encodeURI(l).replace(m.percentDecode,"%")}catch{return null}return l}function ee(l,e){let t=l.replace(m.findPipe,(r,i,o)=>{let u=!1,a=i;for(;--a>=0&&o[a]==="\\";)u=!u;return u?"|":" |"}),n=t.split(m.splitPipe),s=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push("");for(;s<n.length;s++)n[s]=n[s].trim().replace(m.slashPipe,"|");return n}function L(l,e,t){let n=l.length;if(n===0)return"";let s=0;for(;s<n;){let r=l.charAt(n-s-1);if(r===e&&!t)s++;else if(r!==e&&t)s++;else break}return l.slice(0,n-s)}function te(l){let e=l.split(`
`),t=e.length-1;for(;t>=0&&m.blankLine.test(e[t]);)t--;return e.length-t<=2?l:e.slice(0,t+1).join(`
`)}function me(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]==="\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function xe(l,e=0){let t=e,n="";for(let s of l)if(s===" "){let r=4-t%4;n+=" ".repeat(r),t+=r}else n+=s,t++;return n}function be(l,e,t,n,s){let r=e.href,i=e.title||null,o=l[1].replace(s.other.outputLinkReplace,"$1");n.state.inLink=!0;let u={type:l[0].charAt(0)==="!"?"image":"link",raw:t,href:r,title:i,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,u}function ct(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let s=n[1];return e.split(`
`).map(r=>{let i=r.match(t.other.beginningSpace);if(i===null)return r;let[o]=i;return o.length>=s.length?r.slice(s.length):r}).join(`
`)}var w=class{options;rules;lexer;constructor(e){this.options=e||T}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=this.options.pedantic?t[0]:te(t[0]),s=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:s}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],s=ct(n,t[3]||"",this.rules);return{type:"code",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:s}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let s=L(n,"#");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:"heading",raw:L(t[0],`
`),depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:L(t[0],`
`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=L(t[0],`
`).split(`
`),s="",r="",i=[];for(;n.length>0;){let o=!1,u=[],a;for(a=0;a<n.length;a++)if(this.rules.other.blockquoteStart.test(n[a]))u.push(n[a]),o=!0;else if(!o)u.push(n[a]);else break;n=n.slice(a);let c=u.join(`
`),p=c.replace(this.rules.other.blockquoteSetextReplace,`
$1`).replace(this.rules.other.blockquoteSetextReplace2,"");s=s?`${s}
${c}`:c,r=r?`${r}
${p}`:p;let k=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(p,i,!0),this.lexer.state.top=k,n.length===0)break;let h=i.at(-1);if(h?.type==="code")break;if(h?.type==="blockquote"){let R=h,f=R.raw+`
`+n.join(`
`),$=this.blockquote(f);i[i.length-1]=$,s=s.substring(0,s.length-R.raw.length)+$.raw,r=r.substring(0,r.length-R.text.length)+$.text;break}else if(h?.type==="list"){let R=h,f=R.raw+`
`+n.join(`
`),$=this.list(f);i[i.length-1]=$,s=s.substring(0,s.length-h.raw.length)+$.raw,r=r.substring(0,r.length-R.raw.length)+$.raw,n=f.substring(i.at(-1).raw.length).split(`
`);continue}}return{type:"blockquote",raw:s,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),s=n.length>1,r={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");let i=this.rules.other.listItemRegex(n),o=!1;for(;e;){let a=!1,c="",p="";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;c=t[0],e=e.substring(c.length);let k=xe(t[2].split(`
`,1)[0],t[1].length),h=e.split(`
`,1)[0],R=!k.trim(),f=0;if(this.options.pedantic?(f=2,p=k.trimStart()):R?f=t[1].length+1:(f=k.search(this.rules.other.nonSpaceChar),f=f>4?1:f,p=k.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(c+=h+`
`,e=e.substring(h.length+1),a=!0),!a){let $=this.rules.other.nextBulletRegex(f),ne=this.rules.other.hrRegex(f),re=this.rules.other.fencesBeginRegex(f),se=this.rules.other.headingBeginRegex(f),Re=this.rules.other.htmlBeginRegex(f),Te=this.rules.other.blockquoteBeginRegex(f);for(;e;){let G=e.split(`
`,1)[0],B;if(h=G,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting," "),B=h):B=h.replace(this.rules.other.tabCharGlobal," "),re.test(h)||se.test(h)||Re.test(h)||Te.test(h)||$.test(h)||ne.test(h))break;if(B.search(this.rules.other.nonSpaceChar)>=f||!h.trim())p+=`
`+B.slice(f);else{if(R||k.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||re.test(k)||se.test(k)||ne.test(k))break;p+=`
`+h}R=!h.trim(),c+=G+`
`,e=e.substring(G.length+1),k=B.slice(f)}}r.loose||(o?r.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(o=!0)),r.items.push({type:"list_item",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(p),loose:!1,text:p,tokens:[]}),r.raw+=c}let u=r.items.at(-1);if(u)u.raw=u.raw.trimEnd(),u.text=u.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let a of r.items){this.lexer.state.top=!1,a.tokens=this.lexer.blockTokens(a.text,[]);let c=a.tokens[0];if(a.task&&(c?.type==="text"||c?.type==="paragraph")){a.text=a.text.replace(this.rules.other.listReplaceTask,""),c.raw=c.raw.replace(this.rules.other.listReplaceTask,""),c.text=c.text.replace(this.rules.other.listReplaceTask,"");for(let k=this.lexer.inlineQueue.length-1;k>=0;k--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[k].src)){this.lexer.inlineQueue[k].src=this.lexer.inlineQueue[k].src.replace(this.rules.other.listReplaceTask,"");break}let p=this.rules.other.listTaskCheckbox.exec(a.raw);if(p){let k={type:"checkbox",raw:p[0]+" ",checked:p[0]!=="[ ]"};a.checked=k.checked,r.loose?a.tokens[0]&&["paragraph","text"].includes(a.tokens[0].type)&&"tokens"in a.tokens[0]&&a.tokens[0].tokens?(a.tokens[0].raw=k.raw+a.tokens[0].raw,a.tokens[0].text=k.raw+a.tokens[0].text,a.tokens[0].tokens.unshift(k)):a.tokens.unshift({type:"paragraph",raw:k.raw,text:k.raw,tokens:[k]}):a.tokens.unshift(k)}}else a.task&&(a.task=!1);if(!r.loose){let p=a.tokens.filter(h=>h.type==="space"),k=p.length>0&&p.some(h=>this.rules.other.anyLine.test(h.raw));r.loose=k}}if(r.loose)for(let a of r.items){a.loose=!0;for(let c of a.tokens)c.type==="text"&&(c.type="paragraph")}return r}}html(e){let t=this.rules.block.html.exec(e);if(t){let n=te(t[0]);return{type:"html",block:!0,raw:n,pre:t[1]==="pre"||t[1]==="script"||t[1]==="style",text:n}}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),s=t[2]?t[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:n,raw:L(t[0],`
`),href:s,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=ee(t[1]),s=t[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,"").split(`
`):[],i={type:"table",raw:L(t[0],`
`),header:[],align:[],rows:[]};if(n.length===s.length){for(let o of s)this.rules.other.tableAlignRight.test(o)?i.align.push("right"):this.rules.other.tableAlignCenter.test(o)?i.align.push("center"):this.rules.other.tableAlignLeft.test(o)?i.align.push("left"):i.align.push(null);for(let o=0;o<n.length;o++)i.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:i.align[o]});for(let o of r)i.rows.push(ee(o,i.header.length).map((u,a)=>({text:u,tokens:this.lexer.inline(u),header:!1,align:i.align[a]})));return i}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let n=t[1].trim();return{type:"heading",raw:L(t[0],`
`),depth:t[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`
`?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let i=L(n.slice(0,-1),"\\");if((n.length-i.length)%2===0)return}else{let i=me(t[2],"()");if(i===-2)return;if(i>-1){let u=(t[0].indexOf("!")===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,u).trim(),t[3]=""}}let s=t[2],r="";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],r=i[3])}else r=t[3]?t[3].slice(1,-1):"";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),be(t,{href:s&&s.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=t[s.toLowerCase()];if(!r){let i=n[0].charAt(0);return{type:"text",raw:i,text:i}}return be(n,r,n[0],this.lexer,this.rules)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s||!s[1]&&!s[2]&&!s[3]&&!s[4]||s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(s[1]||s[3]||"")||!n||this.rules.inline.punctuation.exec(n)){let i=[...s[0]].length-1,o,u,a=i,c=0,p=s[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(p.lastIndex=0,t=t.slice(-1*e.length+i);(s=p.exec(t))!==null;){if(o=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!o)continue;if(u=[...o].length,s[3]||s[4]){a+=u;continue}else if((s[5]||s[6])&&i%3&&!((i+u)%3)){c+=u;continue}if(a-=u,a>0)continue;u=Math.min(u,u+a+c);let k=[...s[0]][0].length,h=e.slice(0,i+s.index+k+u);if(Math.min(i,u)%2){let f=h.slice(1,-1);return{type:"em",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:"strong",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal," "),s=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&r&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e,t,n=""){let s=this.rules.inline.delLDelim.exec(e);if(!s)return;if(!(s[1]||"")||!n||this.rules.inline.punctuation.exec(n)){let i=[...s[0]].length-1,o,u,a=i,c=this.rules.inline.delRDelim;for(c.lastIndex=0,t=t.slice(-1*e.length+i);(s=c.exec(t))!==null;){if(o=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!o||(u=[...o].length,u!==i))continue;if(s[3]||s[4]){a+=u;continue}if(a-=u,a>0)continue;u=Math.min(u,u+a);let p=[...s[0]][0].length,k=e.slice(0,i+s.index+p+u),h=k.slice(i,-i);return{type:"del",raw:k,text:h,tokens:this.lexer.inlineTokens(h)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,s;return t[2]==="@"?(n=t[1],s="mailto:"+n):(n=t[1],s=n),{type:"link",raw:t[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,s;if(t[2]==="@")n=t[0],s="mailto:"+n;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??"";while(r!==t[0]);n=t[0],t[1]==="www."?s="http://"+t[0]:s=t[0]}return{type:"link",raw:t[0],text:n,href:s,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:"text",raw:t[0],text:t[0],escaped:n}}}};var x=class l{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new w,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:q.normal,inline:A.normal};this.options.pedantic?(t.block=q.pedantic,t.inline=A.pedantic):this.options.gfm&&(t.block=q.gfm,this.options.breaks?t.inline=A.breaks:t.inline=A.gfm),this.tokenizer.rules=t}static get rules(){return{block:q,inline:A}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`
`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(m.tabCharGlobal," ").replace(m.spaceLine,""));let s=1/0;for(;e;){if(e.length<s)s=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let r;if(this.options.extensions?.block?.some(o=>(r=o.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let o=t.at(-1);r.raw.length===1&&o!==void 0?o.raw+=`
`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let o=t.at(-1);o?.type==="paragraph"||o?.type==="text"?(o.raw+=(o.raw.endsWith(`
`)?"":`
`)+r.raw,o.text+=`
`+r.text,this.inlineQueue.at(-1).src=o.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let o=t.at(-1);o?.type==="paragraph"||o?.type==="text"?(o.raw+=(o.raw.endsWith(`
`)?"":`
`)+r.raw,o.text+=`
`+r.raw,this.inlineQueue.at(-1).src=o.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let o=1/0,u=e.slice(1),a;this.options.extensions.startBlock.forEach(c=>{a=c.call({lexer:this},u),typeof a=="number"&&a>=0&&(o=Math.min(o,a))}),o<1/0&&o>=0&&(i=e.substring(0,o+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let o=t.at(-1);n&&o?.type==="paragraph"?(o.raw+=(o.raw.endsWith(`
`)?"":`
`)+r.raw,o.text+=`
`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let o=t.at(-1);o?.type==="text"?(o.raw+=(o.raw.endsWith(`
`)?"":`
`)+r.raw,o.text+=`
`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.text):t.push(r);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e,s=null;if(this.tokens.links){let a=Object.keys(this.tokens.links);if(a.length>0)for(;(s=this.tokenizer.rules.inline.reflinkSearch.exec(n))!==null;)a.includes(s[0].slice(s[0].lastIndexOf("[")+1,-1))&&(n=n.slice(0,s.index)+"["+"a".repeat(s[0].length-2)+"]"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(s=this.tokenizer.rules.inline.anyPunctuation.exec(n))!==null;)n=n.slice(0,s.index)+"++"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let r;for(;(s=this.tokenizer.rules.inline.blockSkip.exec(n))!==null;)r=s[2]?s[2].length:0,n=n.slice(0,s.index+r)+"["+"a".repeat(s[0].length-r-2)+"]"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let i=!1,o="",u=1/0;for(;e;){if(e.length<u)u=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}i||(o=""),i=!1;let a;if(this.options.extensions?.inline?.some(p=>(a=p.call({lexer:this},e,t))?(e=e.substring(a.raw.length),t.push(a),!0):!1))continue;if(a=this.tokenizer.escape(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.tag(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.link(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(a.raw.length);let p=t.at(-1);a.type==="text"&&p?.type==="text"?(p.raw+=a.raw,p.text+=a.text):t.push(a);continue}if(a=this.tokenizer.emStrong(e,n,o)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.codespan(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.br(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.del(e,n,o)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.autolink(e)){e=e.substring(a.raw.length),t.push(a);continue}if(!this.state.inLink&&(a=this.tokenizer.url(e))){e=e.substring(a.raw.length),t.push(a);continue}let c=e;if(this.options.extensions?.startInline){let p=1/0,k=e.slice(1),h;this.options.extensions.startInline.forEach(R=>{h=R.call({lexer:this},k),typeof h=="number"&&h>=0&&(p=Math.min(p,h))}),p<1/0&&p>=0&&(c=e.substring(0,p+1))}if(a=this.tokenizer.inlineText(c)){e=e.substring(a.raw.length),a.raw.slice(-1)!=="_"&&(o=a.raw.slice(-1)),i=!0;let p=t.at(-1);p?.type==="text"?(p.raw+=a.raw,p.text+=a.text):t.push(a);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t="Infinite loop on byte: "+e;if(this.options.silent)console.error(t);else throw new Error(t)}};var y=class{options;parser;constructor(e){this.options=e||T}space(e){return""}code({text:e,lang:t,escaped:n}){let s=(t||"").match(m.notSpaceStart)?.[0],r=e.replace(m.endingNewline,"")+`
`;return s?'<pre><code class="language-'+O(s)+'">'+(n?r:O(r,!0))+`</code></pre>
`:"<pre><code>"+(n?r:O(r,!0))+`</code></pre>
`}blockquote({tokens:e}){return`<blockquote>
${this.parser.parse(e)}</blockquote>
`}html({text:e}){return e}def(e){return""}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>
`}hr(e){return`<hr>
`}list(e){let t=e.ordered,n=e.start,s="";for(let o=0;o<e.items.length;o++){let u=e.items[o];s+=this.listitem(u)}let r=t?"ol":"ul",i=t&&n!==1?' start="'+n+'"':"";return"<"+r+i+`>
`+s+"</"+r+`>
`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>
`}checkbox({checked:e}){return"<input "+(e?'checked="" ':"")+'disabled="" type="checkbox"> '}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>
`}table(e){let t="",n="";for(let r=0;r<e.header.length;r++)n+=this.tablecell(e.header[r]);t+=this.tablerow({text:n});let s="";for(let r=0;r<e.rows.length;r++){let i=e.rows[r];n="";for(let o=0;o<i.length;o++)n+=this.tablecell(i[o]);s+=this.tablerow({text:n})}return s&&(s=`<tbody>${s}</tbody>`),`<table>
<thead>
`+t+`</thead>
`+s+`</table>
`}tablerow({text:e}){return`<tr>
${e}</tr>
`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`</${n}>
`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${O(e,!0)}</code>`}br(e){return"<br>"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let s=this.parser.parseInline(n),r=Y(e);if(r===null)return s;e=r;let i='<a href="'+e+'"';return t&&(i+=' title="'+O(t)+'"'),i+=">"+s+"</a>",i}image({href:e,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=Y(e);if(r===null)return O(n);e=r;let i=`<img src="${e}" alt="${O(n)}"`;return t&&(i+=` title="${O(t)}"`),i+=">",i}text(e){return"tokens"in e&&e.tokens?this.parser.parseInline(e.tokens):"escaped"in e&&e.escaped?e.text:O(e.text)}};var S=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return""+e}image({text:e}){return""+e}br(){return""}checkbox({raw:e}){return e}};var b=class l{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new y,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new S}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e){this.renderer.parser=this;let t="";for(let n=0;n<e.length;n++){let s=e[n];if(this.options.extensions?.renderers?.[s.type]){let i=s,o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(i.type)){t+=o||"";continue}}let r=s;switch(r.type){case"space":{t+=this.renderer.space(r);break}case"hr":{t+=this.renderer.hr(r);break}case"heading":{t+=this.renderer.heading(r);break}case"code":{t+=this.renderer.code(r);break}case"table":{t+=this.renderer.table(r);break}case"blockquote":{t+=this.renderer.blockquote(r);break}case"list":{t+=this.renderer.list(r);break}case"checkbox":{t+=this.renderer.checkbox(r);break}case"html":{t+=this.renderer.html(r);break}case"def":{t+=this.renderer.def(r);break}case"paragraph":{t+=this.renderer.paragraph(r);break}case"text":{t+=this.renderer.text(r);break}default:{let i='Token with "'+r.type+'" type was not found.';if(this.options.silent)return console.error(i),"";throw new Error(i)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n="";for(let s=0;s<e.length;s++){let r=e[s];if(this.options.extensions?.renderers?.[r.type]){let o=this.options.extensions.renderers[r.type].call({parser:this},r);if(o!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(r.type)){n+=o||"";continue}}let i=r;switch(i.type){case"escape":{n+=t.text(i);break}case"html":{n+=t.html(i);break}case"link":{n+=t.link(i);break}case"image":{n+=t.image(i);break}case"checkbox":{n+=t.checkbox(i);break}case"strong":{n+=t.strong(i);break}case"em":{n+=t.em(i);break}case"codespan":{n+=t.codespan(i);break}case"br":{n+=t.br(i);break}case"del":{n+=t.del(i);break}case"text":{n+=t.text(i);break}default:{let o='Token with "'+i.type+'" type was not found.';if(this.options.silent)return console.error(o),"";throw new Error(o)}}}return n}};var P=class{options;block;constructor(e){this.options=e||T}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?x.lex:x.lexInline}provideParser(e=this.block){return e?b.parse:b.parseInline}};var C=class{defaults=_();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=b;Renderer=y;TextRenderer=S;Lexer=x;Tokenizer=w;Hooks=P;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let s of e)switch(n=n.concat(t.call(this,s)),s.type){case"table":{let r=s;for(let i of r.header)n=n.concat(this.walkTokens(i.tokens,t));for(let i of r.rows)for(let o of i)n=n.concat(this.walkTokens(o.tokens,t));break}case"list":{let r=s;n=n.concat(this.walkTokens(r.items,t));break}default:{let r=s;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(i=>{let o=r[i].flat(1/0);n=n.concat(this.walkTokens(o,t))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let i=t.renderers[r.name];i?t.renderers[r.name]=function(...o){let u=r.renderer.apply(this,o);return u===!1&&(u=i.apply(this,o)),u}:t.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let i=t[r.level];i?i.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level==="block"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level==="inline"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),s.extensions=t),n.renderer){let r=this.defaults.renderer||new y(this.defaults);for(let i in n.renderer){if(!(i in r))throw new Error(`renderer '${i}' does not exist`);if(["options","parser"].includes(i))continue;let o=i,u=n.renderer[o],a=r[o];r[o]=(...c)=>{let p=u.apply(r,c);return p===!1&&(p=a.apply(r,c)),p||""}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new w(this.defaults);for(let i in n.tokenizer){if(!(i in r))throw new Error(`tokenizer '${i}' does not exist`);if(["options","rules","lexer"].includes(i))continue;let o=i,u=n.tokenizer[o],a=r[o];r[o]=(...c)=>{let p=u.apply(r,c);return p===!1&&(p=a.apply(r,c)),p}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new P;for(let i in n.hooks){if(!(i in r))throw new Error(`hook '${i}' does not exist`);if(["options","block"].includes(i))continue;let o=i,u=n.hooks[o],a=r[o];P.passThroughHooks.has(i)?r[o]=c=>{if(this.defaults.async&&P.passThroughHooksRespectAsync.has(i))return(async()=>{let k=await u.call(r,c);return a.call(r,k)})();let p=u.call(r,c);return a.call(r,p)}:r[o]=(...c)=>{if(this.defaults.async)return(async()=>{let k=await u.apply(r,c);return k===!1&&(k=await a.apply(r,c)),k})();let p=u.apply(r,c);return p===!1&&(p=a.apply(r,c)),p}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,i=n.walkTokens;s.walkTokens=function(o){let u=[];return u.push(i.call(this,o)),r&&(u=u.concat(r.call(this,o))),u}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,s)=>{let r={...s},i={...this.defaults,...r},o=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let u=i.hooks?await i.hooks.preprocess(n):n,c=await(i.hooks?await i.hooks.provideLexer(e):e?x.lex:x.lexInline)(u,i),p=i.hooks?await i.hooks.processAllTokens(c):c;i.walkTokens&&await Promise.all(this.walkTokens(p,i.walkTokens));let h=await(i.hooks?await i.hooks.provideParser(e):e?b.parse:b.parseInline)(p,i);return i.hooks?await i.hooks.postprocess(h):h})().catch(o);try{i.hooks&&(n=i.hooks.preprocess(n));let a=(i.hooks?i.hooks.provideLexer(e):e?x.lex:x.lexInline)(n,i);i.hooks&&(a=i.hooks.processAllTokens(a)),i.walkTokens&&this.walkTokens(a,i.walkTokens);let p=(i.hooks?i.hooks.provideParser(e):e?b.parse:b.parseInline)(a,i);return i.hooks&&(p=i.hooks.postprocess(p)),p}catch(u){return o(u)}}}onError(e,t){return n=>{if(n.message+=`
Please report this to https://github.com/markedjs/marked.`,e){let s="<p>An error occurred:</p><pre>"+O(n.message+"",!0)+"</pre>";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}};var M=new C;function g(l,e){return M.parse(l,e)}g.options=g.setOptions=function(l){return M.setOptions(l),g.defaults=M.defaults,Q(g.defaults),g};g.getDefaults=_;g.defaults=T;g.use=function(...l){return M.use(...l),g.defaults=M.defaults,Q(g.defaults),g};g.walkTokens=function(l,e){return M.walkTokens(l,e)};g.parseInline=M.parseInline;g.Parser=b;g.parser=b.parse;g.Renderer=y;g.TextRenderer=S;g.Lexer=x;g.lexer=x.lex;g.Tokenizer=w;g.Hooks=P;g.parse=g;var ht=g.options,kt=g.setOptions,dt=g.use,gt=g.walkTokens,ft=g.parseInline,mt=g,xt=b.parse,bt=x.lex;
if(__exports != exports)module.exports = exports;return module.exports}));
</script>
<!-- highlight.js -->
<script>/*!
Highlight.js v11.9.0 (git: f47103d4f1)
(c) 2006-2023 undefined and other contributors
License: BSD-3-Clause
*/
var hljs=function(){"use strict";function e(n){
return n instanceof Map?n.clear=n.delete=n.set=()=>{
throw Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=()=>{
throw Error("set is read-only")
}),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((t=>{
const a=n[t],i=typeof a;"object"!==i&&"function"!==i||Object.isFrozen(a)||e(a)
})),n}class n{constructor(e){
void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
ignoreMatch(){this.isMatchIgnored=!0}}function t(e){
return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")
}function a(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n]
;return n.forEach((e=>{for(const n in e)t[n]=e[n]})),t}const i=e=>!!e.scope
;class r{constructor(e,n){
this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){
this.buffer+=t(e)}openNode(e){if(!i(e))return;const n=((e,{prefix:n})=>{
if(e.startsWith("language:"))return e.replace("language:","language-")
;if(e.includes(".")){const t=e.split(".")
;return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ")
}return`${n}${e}`})(e.scope,{prefix:this.classPrefix});this.span(n)}
closeNode(e){i(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){
this.buffer+=`<span class="${e}">`}}const s=(e={})=>{const n={children:[]}
;return Object.assign(n,e),n};class o{constructor(){
this.rootNode=s(),this.stack=[this.rootNode]}get top(){
return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
this.top.children.push(e)}openNode(e){const n=s({scope:e})
;this.add(n),this.stack.push(n)}closeNode(){
if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){
return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),
n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){
"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
o._collapse(e)})))}}class l extends o{constructor(e){super(),this.options=e}
addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){
this.closeNode()}__addSublanguage(e,n){const t=e.root
;n&&(t.scope="language:"+n),this.add(t)}toHTML(){
return new r(this,this.options).value()}finalize(){
return this.closeAllNodes(),!0}}function c(e){
return e?"string"==typeof e?e:e.source:null}function d(e){return b("(?=",e,")")}
function g(e){return b("(?:",e,")*")}function u(e){return b("(?:",e,")?")}
function b(...e){return e.map((e=>c(e))).join("")}function m(...e){const n=(e=>{
const n=e[e.length-1]
;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{}
})(e);return"("+(n.capture?"":"?:")+e.map((e=>c(e))).join("|")+")"}
function p(e){return RegExp(e.toString()+"|").exec("").length-1}
const _=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./
;function h(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t
;let a=c(e),i="";for(;a.length>0;){const e=_.exec(a);if(!e){i+=a;break}
i+=a.substring(0,e.index),
a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?i+="\\"+(Number(e[1])+n):(i+=e[0],
"("===e[0]&&t++)}return i})).map((e=>`(${e})`)).join(n)}
const f="[a-zA-Z]\\w*",E="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",N="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",w="\\b(0b[01]+)",v={
begin:"\\\\[\\s\\S]",relevance:0},O={scope:"string",begin:"'",end:"'",
illegal:"\\n",contains:[v]},k={scope:"string",begin:'"',end:'"',illegal:"\\n",
contains:[v]},x=(e,n,t={})=>{const i=a({scope:"comment",begin:e,end:n,
contains:[]},t);i.contains.push({scope:"doctag",
begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})
;const r=m("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/)
;return i.contains.push({begin:b(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),i
},M=x("//","$"),S=x("/\\*","\\*/"),A=x("#","$");var C=Object.freeze({
__proto__:null,APOS_STRING_MODE:O,BACKSLASH_ESCAPE:v,BINARY_NUMBER_MODE:{
scope:"number",begin:w,relevance:0},BINARY_NUMBER_RE:w,COMMENT:x,
C_BLOCK_COMMENT_MODE:S,C_LINE_COMMENT_MODE:M,C_NUMBER_MODE:{scope:"number",
begin:N,relevance:0},C_NUMBER_RE:N,END_SAME_AS_BEGIN:e=>Object.assign(e,{
"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{
n.data._beginMatch!==e[1]&&n.ignoreMatch()}}),HASH_COMMENT_MODE:A,IDENT_RE:f,
MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+E,relevance:0},
NUMBER_MODE:{scope:"number",begin:y,relevance:0},NUMBER_RE:y,
PHRASAL_WORDS_MODE:{
begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
},QUOTE_STRING_MODE:k,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/,
end:/\/[gimuy]*/,contains:[v,{begin:/\[/,end:/\]/,relevance:0,contains:[v]}]},
RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
SHEBANG:(e={})=>{const n=/^#![ ]*\//
;return e.binary&&(e.begin=b(n,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:n,
end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},
TITLE_MODE:{scope:"title",begin:f,relevance:0},UNDERSCORE_IDENT_RE:E,
UNDERSCORE_TITLE_MODE:{scope:"title",begin:E,relevance:0}});function T(e,n){
"."===e.input[e.index-1]&&n.ignoreMatch()}function R(e,n){
void 0!==e.className&&(e.scope=e.className,delete e.className)}function D(e,n){
n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
e.__beforeBegin=T,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
void 0===e.relevance&&(e.relevance=0))}function I(e,n){
Array.isArray(e.illegal)&&(e.illegal=m(...e.illegal))}function L(e,n){
if(e.match){
if(e.begin||e.end)throw Error("begin & end are not supported with match")
;e.begin=e.match,delete e.match}}function B(e,n){
void 0===e.relevance&&(e.relevance=1)}const $=(e,n)=>{if(!e.beforeMatch)return
;if(e.starts)throw Error("beforeMatch cannot be used with starts")
;const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n]
})),e.keywords=t.keywords,e.begin=b(t.beforeMatch,d(t.begin)),e.starts={
relevance:0,contains:[Object.assign(t,{endsParent:!0})]
},e.relevance=0,delete t.beforeMatch
},z=["of","and","for","in","not","or","if","then","parent","list","value"],F="keyword"
;function U(e,n,t=F){const a=Object.create(null)
;return"string"==typeof e?i(t,e.split(" ")):Array.isArray(e)?i(t,e):Object.keys(e).forEach((t=>{
Object.assign(a,U(e[t],n,t))})),a;function i(e,t){
n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((n=>{const t=n.split("|")
;a[t[0]]=[e,j(t[0],t[1])]}))}}function j(e,n){
return n?Number(n):(e=>z.includes(e.toLowerCase()))(e)?0:1}const P={},K=e=>{
console.error(e)},H=(e,...n)=>{console.log("WARN: "+e,...n)},q=(e,n)=>{
P[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),P[`${e}/${n}`]=!0)
},G=Error();function Z(e,n,{key:t}){let a=0;const i=e[t],r={},s={}
;for(let e=1;e<=n.length;e++)s[e+a]=i[e],r[e+a]=!0,a+=p(n[e-1])
;e[t]=s,e[t]._emit=r,e[t]._multi=!0}function W(e){(e=>{
e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,
delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={
_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope
}),(e=>{if(Array.isArray(e.begin)){
if(e.skip||e.excludeBegin||e.returnBegin)throw K("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),
G
;if("object"!=typeof e.beginScope||null===e.beginScope)throw K("beginScope must be object"),
G;Z(e,e.begin,{key:"beginScope"}),e.begin=h(e.begin,{joinWith:""})}})(e),(e=>{
if(Array.isArray(e.end)){
if(e.skip||e.excludeEnd||e.returnEnd)throw K("skip, excludeEnd, returnEnd not compatible with endScope: {}"),
G
;if("object"!=typeof e.endScope||null===e.endScope)throw K("endScope must be object"),
G;Z(e,e.end,{key:"endScope"}),e.end=h(e.end,{joinWith:""})}})(e)}function Q(e){
function n(n,t){
return RegExp(c(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":""))
}class t{constructor(){
this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
addRule(e,n){
n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),
this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)
;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(h(e,{joinWith:"|"
}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex
;const n=this.matcherRe.exec(e);if(!n)return null
;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t]
;return n.splice(0,t),Object.assign(n,a)}}class i{constructor(){
this.rules=[],this.multiRegexes=[],
this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t
;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))),
n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){
return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){
this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){
const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex
;let t=n.exec(e)
;if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{
const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)}
return t&&(this.regexIndex+=t.position+1,
this.regexIndex===this.count&&this.considerAll()),t}}
if(e.compilerExtensions||(e.compilerExtensions=[]),
e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")
;return e.classNameAliases=a(e.classNameAliases||{}),function t(r,s){const o=r
;if(r.isCompiled)return o
;[R,L,W,$].forEach((e=>e(r,s))),e.compilerExtensions.forEach((e=>e(r,s))),
r.__beforeBegin=null,[D,I,B].forEach((e=>e(r,s))),r.isCompiled=!0;let l=null
;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords),
l=r.keywords.$pattern,
delete r.keywords.$pattern),l=l||/\w+/,r.keywords&&(r.keywords=U(r.keywords,e.case_insensitive)),
o.keywordPatternRe=n(l,!0),
s&&(r.begin||(r.begin=/\B|\b/),o.beginRe=n(o.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),
r.end&&(o.endRe=n(o.end)),
o.terminatorEnd=c(o.end)||"",r.endsWithParent&&s.terminatorEnd&&(o.terminatorEnd+=(r.end?"|":"")+s.terminatorEnd)),
r.illegal&&(o.illegalRe=n(r.illegal)),
r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((n=>a(e,{
variants:null},n)))),e.cachedVariants?e.cachedVariants:X(e)?a(e,{
starts:e.starts?a(e.starts):null
}):Object.isFrozen(e)?a(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{t(e,o)
})),r.starts&&t(r.starts,s),o.matcher=(e=>{const n=new i
;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin"
}))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end"
}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n})(o),o}(e)}function X(e){
return!!e&&(e.endsWithParent||X(e.starts))}class V extends Error{
constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}}
const J=t,Y=a,ee=Symbol("nomatch"),ne=t=>{
const a=Object.create(null),i=Object.create(null),r=[];let s=!0
;const o="Could not find the language '{}', did you forget to load/include a language module?",c={
disableAutodetect:!0,name:"Plain text",contains:[]};let p={
ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,
languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
cssSelector:"pre code",languages:null,__emitter:l};function _(e){
return p.noHighlightRe.test(e)}function h(e,n,t){let a="",i=""
;"object"==typeof n?(a=e,
t=n.ignoreIllegals,i=n.language):(q("10.7.0","highlight(lang, code, ...args) has been deprecated."),
q("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
i=e,a=n),void 0===t&&(t=!0);const r={code:a,language:i};x("before:highlight",r)
;const s=r.result?r.result:f(r.language,r.code,t)
;return s.code=r.code,x("after:highlight",s),s}function f(e,t,i,r){
const l=Object.create(null);function c(){if(!x.keywords)return void S.addText(A)
;let e=0;x.keywordPatternRe.lastIndex=0;let n=x.keywordPatternRe.exec(A),t=""
;for(;n;){t+=A.substring(e,n.index)
;const i=w.case_insensitive?n[0].toLowerCase():n[0],r=(a=i,x.keywords[a]);if(r){
const[e,a]=r
;if(S.addText(t),t="",l[i]=(l[i]||0)+1,l[i]<=7&&(C+=a),e.startsWith("_"))t+=n[0];else{
const t=w.classNameAliases[e]||e;g(n[0],t)}}else t+=n[0]
;e=x.keywordPatternRe.lastIndex,n=x.keywordPatternRe.exec(A)}var a
;t+=A.substring(e),S.addText(t)}function d(){null!=x.subLanguage?(()=>{
if(""===A)return;let e=null;if("string"==typeof x.subLanguage){
if(!a[x.subLanguage])return void S.addText(A)
;e=f(x.subLanguage,A,!0,M[x.subLanguage]),M[x.subLanguage]=e._top
}else e=E(A,x.subLanguage.length?x.subLanguage:null)
;x.relevance>0&&(C+=e.relevance),S.__addSublanguage(e._emitter,e.language)
})():c(),A=""}function g(e,n){
""!==e&&(S.startScope(n),S.addText(e),S.endScope())}function u(e,n){let t=1
;const a=n.length-1;for(;t<=a;){if(!e._emit[t]){t++;continue}
const a=w.classNameAliases[e[t]]||e[t],i=n[t];a?g(i,a):(A=i,c(),A=""),t++}}
function b(e,n){
return e.scope&&"string"==typeof e.scope&&S.openNode(w.classNameAliases[e.scope]||e.scope),
e.beginScope&&(e.beginScope._wrap?(g(A,w.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),
A=""):e.beginScope._multi&&(u(e.beginScope,n),A="")),x=Object.create(e,{parent:{
value:x}}),x}function m(e,t,a){let i=((e,n)=>{const t=e&&e.exec(n)
;return t&&0===t.index})(e.endRe,a);if(i){if(e["on:end"]){const a=new n(e)
;e["on:end"](t,a),a.isMatchIgnored&&(i=!1)}if(i){
for(;e.endsParent&&e.parent;)e=e.parent;return e}}
if(e.endsWithParent)return m(e.parent,t,a)}function _(e){
return 0===x.matcher.regexIndex?(A+=e[0],1):(D=!0,0)}function h(e){
const n=e[0],a=t.substring(e.index),i=m(x,e,a);if(!i)return ee;const r=x
;x.endScope&&x.endScope._wrap?(d(),
g(n,x.endScope._wrap)):x.endScope&&x.endScope._multi?(d(),
u(x.endScope,e)):r.skip?A+=n:(r.returnEnd||r.excludeEnd||(A+=n),
d(),r.excludeEnd&&(A=n));do{
x.scope&&S.closeNode(),x.skip||x.subLanguage||(C+=x.relevance),x=x.parent
}while(x!==i.parent);return i.starts&&b(i.starts,e),r.returnEnd?0:n.length}
let y={};function N(a,r){const o=r&&r[0];if(A+=a,null==o)return d(),0
;if("begin"===y.type&&"end"===r.type&&y.index===r.index&&""===o){
if(A+=t.slice(r.index,r.index+1),!s){const n=Error(`0 width match regex (${e})`)
;throw n.languageName=e,n.badRule=y.rule,n}return 1}
if(y=r,"begin"===r.type)return(e=>{
const t=e[0],a=e.rule,i=new n(a),r=[a.__beforeBegin,a["on:begin"]]
;for(const n of r)if(n&&(n(e,i),i.isMatchIgnored))return _(t)
;return a.skip?A+=t:(a.excludeBegin&&(A+=t),
d(),a.returnBegin||a.excludeBegin||(A=t)),b(a,e),a.returnBegin?0:t.length})(r)
;if("illegal"===r.type&&!i){
const e=Error('Illegal lexeme "'+o+'" for mode "'+(x.scope||"<unnamed>")+'"')
;throw e.mode=x,e}if("end"===r.type){const e=h(r);if(e!==ee)return e}
if("illegal"===r.type&&""===o)return 1
;if(R>1e5&&R>3*r.index)throw Error("potential infinite loop, way more iterations than matches")
;return A+=o,o.length}const w=v(e)
;if(!w)throw K(o.replace("{}",e)),Error('Unknown language: "'+e+'"')
;const O=Q(w);let k="",x=r||O;const M={},S=new p.__emitter(p);(()=>{const e=[]
;for(let n=x;n!==w;n=n.parent)n.scope&&e.unshift(n.scope)
;e.forEach((e=>S.openNode(e)))})();let A="",C=0,T=0,R=0,D=!1;try{
if(w.__emitTokens)w.__emitTokens(t,S);else{for(x.matcher.considerAll();;){
R++,D?D=!1:x.matcher.considerAll(),x.matcher.lastIndex=T
;const e=x.matcher.exec(t);if(!e)break;const n=N(t.substring(T,e.index),e)
;T=e.index+n}N(t.substring(T))}return S.finalize(),k=S.toHTML(),{language:e,
value:k,relevance:C,illegal:!1,_emitter:S,_top:x}}catch(n){
if(n.message&&n.message.includes("Illegal"))return{language:e,value:J(t),
illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T,
context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:k},_emitter:S};if(s)return{
language:e,value:J(t),illegal:!1,relevance:0,errorRaised:n,_emitter:S,_top:x}
;throw n}}function E(e,n){n=n||p.languages||Object.keys(a);const t=(e=>{
const n={value:J(e),illegal:!1,relevance:0,_top:c,_emitter:new p.__emitter(p)}
;return n._emitter.addText(e),n})(e),i=n.filter(v).filter(k).map((n=>f(n,e,!1)))
;i.unshift(t);const r=i.sort(((e,n)=>{
if(e.relevance!==n.relevance)return n.relevance-e.relevance
;if(e.language&&n.language){if(v(e.language).supersetOf===n.language)return 1
;if(v(n.language).supersetOf===e.language)return-1}return 0})),[s,o]=r,l=s
;return l.secondBest=o,l}function y(e){let n=null;const t=(e=>{
let n=e.className+" ";n+=e.parentNode?e.parentNode.className:""
;const t=p.languageDetectRe.exec(n);if(t){const n=v(t[1])
;return n||(H(o.replace("{}",t[1])),
H("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"}
return n.split(/\s+/).find((e=>_(e)||v(e)))})(e);if(_(t))return
;if(x("before:highlightElement",{el:e,language:t
}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e)
;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),
console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),
console.warn("The element with unescaped HTML:"),
console.warn(e)),p.throwUnescapedHTML))throw new V("One of your code blocks includes unescaped HTML.",e.innerHTML)
;n=e;const a=n.textContent,r=t?h(a,{language:t,ignoreIllegals:!0}):E(a)
;e.innerHTML=r.value,e.dataset.highlighted="yes",((e,n,t)=>{const a=n&&i[n]||t
;e.classList.add("hljs"),e.classList.add("language-"+a)
})(e,t,r.language),e.result={language:r.language,re:r.relevance,
relevance:r.relevance},r.secondBest&&(e.secondBest={
language:r.secondBest.language,relevance:r.secondBest.relevance
}),x("after:highlightElement",{el:e,result:r,text:a})}let N=!1;function w(){
"loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(y):N=!0
}function v(e){return e=(e||"").toLowerCase(),a[e]||a[i[e]]}
function O(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
i[e.toLowerCase()]=n}))}function k(e){const n=v(e)
;return n&&!n.disableAutodetect}function x(e,n){const t=e;r.forEach((e=>{
e[t]&&e[t](n)}))}
"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{
N&&w()}),!1),Object.assign(t,{highlight:h,highlightAuto:E,highlightAll:w,
highlightElement:y,
highlightBlock:e=>(q("10.7.0","highlightBlock will be removed entirely in v12.0"),
q("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=Y(p,e)},
initHighlighting:()=>{
w(),q("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},
initHighlightingOnLoad:()=>{
w(),q("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")
},registerLanguage:(e,n)=>{let i=null;try{i=n(t)}catch(n){
if(K("Language definition for '{}' could not be registered.".replace("{}",e)),
!s)throw n;K(n),i=c}
i.name||(i.name=e),a[e]=i,i.rawDefinition=n.bind(null,t),i.aliases&&O(i.aliases,{
languageName:e})},unregisterLanguage:e=>{delete a[e]
;for(const n of Object.keys(i))i[n]===e&&delete i[n]},
listLanguages:()=>Object.keys(a),getLanguage:v,registerAliases:O,
autoDetection:k,inherit:Y,addPlugin:e=>{(e=>{
e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{
e["before:highlightBlock"](Object.assign({block:n.el},n))
}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{
e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),r.push(e)},
removePlugin:e=>{const n=r.indexOf(e);-1!==n&&r.splice(n,1)}}),t.debugMode=()=>{
s=!1},t.safeMode=()=>{s=!0},t.versionString="11.9.0",t.regex={concat:b,
lookahead:d,either:m,optional:u,anyNumberOfTimes:g}
;for(const n in C)"object"==typeof C[n]&&e(C[n]);return Object.assign(t,C),t
},te=ne({});te.newInstance=()=>ne({});var ae=te;const ie=e=>({IMPORTANT:{
scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{
scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},
FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},
ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",
contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{
scope:"number",
begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}
}),re=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],se=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],oe=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],le=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],ce=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),de=oe.concat(le)
;var ge="[0-9](_*[0-9])*",ue=`\\.(${ge})`,be="[0-9a-fA-F](_*[0-9a-fA-F])*",me={
className:"number",variants:[{
begin:`(\\b(${ge})((${ue})|\\.)?|(${ue}))[eE][+-]?(${ge})[fFdD]?\\b`},{
begin:`\\b(${ge})((${ue})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{
begin:`(${ue})[fFdD]?\\b`},{begin:`\\b(${ge})[fFdD]\\b`},{
begin:`\\b0[xX]((${be})\\.?|(${be})?\\.(${be}))[pP][+-]?(${ge})[fFdD]?\\b`},{
begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${be})[lL]?\\b`},{
begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],
relevance:0};function pe(e,n,t){return-1===t?"":e.replace(n,(a=>pe(e,n,t-1)))}
const _e="[A-Za-z$_][0-9A-Za-z$_]*",he=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],fe=["true","false","null","undefined","NaN","Infinity"],Ee=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],ye=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Ne=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],we=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],ve=[].concat(Ne,Ee,ye)
;function Oe(e){const n=e.regex,t=_e,a={begin:/<[A-Za-z0-9\\._:-]+/,
end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
const t=e[0].length+e.index,a=e.input[t]
;if("<"===a||","===a)return void n.ignoreMatch();let i
;">"===a&&(((e,{after:n})=>{const t="</"+e[0].slice(1)
;return-1!==e.input.indexOf(t,n)})(e,{after:t})||n.ignoreMatch())
;const r=e.input.substring(t)
;((i=r.match(/^\s*=/))||(i=r.match(/^\s+extends\s+/))&&0===i.index)&&n.ignoreMatch()
}},i={$pattern:_e,keyword:he,literal:fe,built_in:ve,"variable.language":we
},r="[0-9](_?[0-9])*",s=`\\.(${r})`,o="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",l={
className:"number",variants:[{
begin:`(\\b(${o})((${s})|\\.)?|(${s}))[eE][+-]?(${r})\\b`},{
begin:`\\b(${o})\\b((${s})\\b|\\.)?|(${s})\\b`},{
begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{
begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{
begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{
begin:"\\b0[0-7]+n?\\b"}],relevance:0},c={className:"subst",begin:"\\$\\{",
end:"\\}",keywords:i,contains:[]},d={begin:"html`",end:"",starts:{end:"`",
returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,c],subLanguage:"xml"}},g={
begin:"css`",end:"",starts:{end:"`",returnEnd:!1,
contains:[e.BACKSLASH_ESCAPE,c],subLanguage:"css"}},u={begin:"gql`",end:"",
starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,c],
subLanguage:"graphql"}},b={className:"string",begin:"`",end:"`",
contains:[e.BACKSLASH_ESCAPE,c]},m={className:"comment",
variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{
begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",
begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
excludeBegin:!0,relevance:0},{className:"variable",begin:t+"(?=\\s*(-)|$)",
endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]
},p=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,b,{match:/\$\d+/},l]
;c.contains=p.concat({begin:/\{/,end:/\}/,keywords:i,contains:["self"].concat(p)
});const _=[].concat(m,c.contains),h=_.concat([{begin:/\(/,end:/\)/,keywords:i,
contains:["self"].concat(_)}]),f={className:"params",begin:/\(/,end:/\)/,
excludeBegin:!0,excludeEnd:!0,keywords:i,contains:h},E={variants:[{
match:[/class/,/\s+/,t,/\s+/,/extends/,/\s+/,n.concat(t,"(",n.concat(/\./,t),")*")],
scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{
match:[/class/,/\s+/,t],scope:{1:"keyword",3:"title.class"}}]},y={relevance:0,
match:n.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),
className:"title.class",keywords:{_:[...Ee,...ye]}},N={variants:[{
match:[/function/,/\s+/,t,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
className:{1:"keyword",3:"title.function"},label:"func.def",contains:[f],
illegal:/%/},w={
match:n.concat(/\b/,(v=[...Ne,"super","import"],n.concat("(?!",v.join("|"),")")),t,n.lookahead(/\(/)),
className:"title.function",relevance:0};var v;const O={
begin:n.concat(/\./,n.lookahead(n.concat(t,/(?![0-9A-Za-z$_(])/))),end:t,
excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},k={
match:[/get|set/,/\s+/,t,/(?=\()/],className:{1:"keyword",3:"title.function"},
contains:[{begin:/\(\)/},f]
},x="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",M={
match:[/const|var|let/,/\s+/,t,/\s*/,/=\s*/,/(async\s*)?/,n.lookahead(x)],
keywords:"async",className:{1:"keyword",3:"title.function"},contains:[f]}
;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:i,exports:{
PARAMS_CONTAINS:h,CLASS_REFERENCE:y},illegal:/#(?![$_A-z])/,
contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
label:"use_strict",className:"meta",relevance:10,
begin:/^\s*['"]use (strict|asm)['"]/
},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,b,m,{match:/\$\d+/},l,y,{
className:"attr",begin:t+n.lookahead(":"),relevance:0},M,{
begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
keywords:"return throw case",relevance:0,contains:[m,e.REGEXP_MODE,{
className:"function",begin:x,returnBegin:!0,end:"\\s*=>",contains:[{
className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{
className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,
excludeEnd:!0,keywords:i,contains:h}]}]},{begin:/,/,relevance:0},{match:/\s+/,
relevance:0},{variants:[{begin:"<>",end:"</>"},{
match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:a.begin,
"on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{
begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},N,{
beginKeywords:"while if switch catch for"},{
begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
returnBegin:!0,label:"func.def",contains:[f,e.inherit(e.TITLE_MODE,{begin:t,
className:"title.function"})]},{match:/\.\.\./,relevance:0},O,{match:"\\$"+t,
relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},
contains:[f]},w,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
className:"variable.constant"},E,k,{match:/\$[(.]/}]}}
const ke=e=>b(/\b/,e,/\w$/.test(e)?/\b/:/\B/),xe=["Protocol","Type"].map(ke),Me=["init","self"].map(ke),Se=["Any","Self"],Ae=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],Ce=["false","nil","true"],Te=["assignment","associativity","higherThan","left","lowerThan","none","right"],Re=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],De=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],Ie=m(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),Le=m(Ie,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),Be=b(Ie,Le,"*"),$e=m(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),ze=m($e,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),Fe=b($e,ze,"*"),Ue=b(/[A-Z]/,ze,"*"),je=["attached","autoclosure",b(/convention\(/,m("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",b(/objc\(/,Fe,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],Pe=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"]
;var Ke=Object.freeze({__proto__:null,grmr_bash:e=>{const n=e.regex,t={},a={
begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]}
;Object.assign(t,{className:"variable",variants:[{
begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={
className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},r={
begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
end:/(\w+)/,className:"string"})]}},s={className:"string",begin:/"/,end:/"/,
contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(s);const o={begin:/\$?\(\(/,
end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{
name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,
keyword:["if","then","else","elif","fi","for","while","until","in","do","done","case","esac","function","select"],
literal:["true","false"],
built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]
},contains:[l,e.SHEBANG(),c,o,e.HASH_COMMENT_MODE,r,{match:/(\/[a-z._-]+)+/},s,{
match:/\\"/},{className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}},
grmr_c:e=>{const n=e.regex,t=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]
}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={
className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{
match:/\batomic_[a-z]{3,6}\b/}]},o={className:"string",variants:[{
begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{
begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
end:"'",illegal:"."},e.END_SAME_AS_BEGIN({
begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={
className:"number",variants:[{begin:"\\b(0b[01']+)"},{
begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"
},{
begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{
className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={
className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0
},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={
keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],
type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"],
literal:"true false NULL",
built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"
},b=[c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],m={variants:[{begin:/=/,end:/;/},{
begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],
keywords:u,contains:b.concat([{begin:/\(/,end:/\)/,keywords:u,
contains:b.concat(["self"]),relevance:0}]),relevance:0},p={
begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,
keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{
begin:g,returnBegin:!0,contains:[e.inherit(d,{className:"title.function"})],
relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,
keywords:u,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,
end:/\)/,keywords:u,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s]
}]},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u,
disableAutodetect:!0,illegal:"</",contains:[].concat(m,p,b,[c,{
begin:e.IDENT_RE+"::",keywords:u},{className:"class",
beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{
beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c,
strings:o,keywords:u}}},grmr_cpp:e=>{const n=e.regex,t=e.COMMENT("//","$",{
contains:[{begin:/\\\n/}]
}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="(?!struct)("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={
className:"type",begin:"\\b[a-z\\d_]*_t\\b"},o={className:"string",variants:[{
begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{
begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
end:"'",illegal:"."},e.END_SAME_AS_BEGIN({
begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={
className:"number",variants:[{begin:"\\b(0b[01']+)"},{
begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"
},{
begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{
className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={
className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0
},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={
type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],
keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],
literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],
_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]
},b={className:"function.dispatch",relevance:0,keywords:{
_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]
},
begin:n.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/))
},m=[b,c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],p={variants:[{begin:/=/,end:/;/},{
begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],
keywords:u,contains:m.concat([{begin:/\(/,end:/\)/,keywords:u,
contains:m.concat(["self"]),relevance:0}]),relevance:0},_={className:"function",
begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,
keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{
begin:g,returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{
begin:/:/,endsWithParent:!0,contains:[o,l]},{relevance:0,match:/,/},{
className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0,
contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,end:/\)/,keywords:u,
relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s]}]
},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C++",
aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:u,illegal:"</",
classNameAliases:{"function.dispatch":"built_in"},
contains:[].concat(p,_,b,m,[c,{
begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",
end:">",keywords:u,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:u},{
match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],
className:{1:"keyword",3:"title.class"}}])}},grmr_csharp:e=>{const n={
keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]),
built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],
literal:["default","false","null","true"]},t=e.inherit(e.TITLE_MODE,{
begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{
begin:"\\b(0b[01']+)"},{
begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{
begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
}],relevance:0},i={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]
},r=e.inherit(i,{illegal:/\n/}),s={className:"subst",begin:/\{/,end:/\}/,
keywords:n},o=e.inherit(s,{illegal:/\n/}),l={className:"string",begin:/\$"/,
end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/
},e.BACKSLASH_ESCAPE,o]},c={className:"string",begin:/\$@"/,end:'"',contains:[{
begin:/\{\{/},{begin:/\}\}/},{begin:'""'},s]},d=e.inherit(c,{illegal:/\n/,
contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},o]})
;s.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],
o.contains=[d,l,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{
illegal:/\n/})];const g={variants:[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
},u={begin:"<",end:">",contains:[{beginKeywords:"in out"},t]
},b=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",m={
begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],
keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,
contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{
begin:"\x3c!--|--\x3e"},{begin:"</?",end:">"}]}]
}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",
end:"$",keywords:{
keyword:"if else elif endif define undef warning error line region endregion pragma checksum"
}},g,a,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,
illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"
},t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",
relevance:0,end:/[{;=]/,illegal:/[^\s:]/,
contains:[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{
beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,
contains:[t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",
begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{
className:"string",begin:/"/,end:/"/}]},{
beginKeywords:"new return throw await else",relevance:0},{className:"function",
begin:"("+b+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,
end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{
beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial",
relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,
contains:[e.TITLE_MODE,u],relevance:0},{match:/\(\)/},{className:"params",
begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,
contains:[g,a,e.C_BLOCK_COMMENT_MODE]
},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},m]}},grmr_css:e=>{
const n=e.regex,t=ie(e),a=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{
name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{
keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},
contains:[t.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/
},t.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0
},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0
},t.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{
begin:":("+oe.join("|")+")"},{begin:":(:)?("+le.join("|")+")"}]
},t.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ce.join("|")+")\\b"},{
begin:/:/,end:/[;}{]/,
contains:[t.BLOCK_COMMENT,t.HEXCOLOR,t.IMPORTANT,t.CSS_NUMBER_MODE,...a,{
begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"
},contains:[...a,{className:"string",begin:/[^)]/,endsWithParent:!0,
excludeEnd:!0}]},t.FUNCTION_DISPATCH]},{begin:n.lookahead(/@/),end:"[{;]",
relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/
},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{
$pattern:/[a-z-]+/,keyword:"and or not only",attribute:se.join(" ")},contains:[{
begin:/[a-z-]+(?=:)/,className:"attribute"},...a,t.CSS_NUMBER_MODE]}]},{
className:"selector-tag",begin:"\\b("+re.join("|")+")\\b"}]}},grmr_diff:e=>{
const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{
className:"meta",relevance:10,
match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)
},{className:"comment",variants:[{
begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),
end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{
className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,
end:/$/}]}},grmr_go:e=>{const n={
keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],
type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],
literal:["true","false","iota","nil"],
built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]
};return{name:"Go",aliases:["golang"],keywords:n,illegal:"</",
contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",
variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{
className:"number",variants:[{begin:e.C_NUMBER_RE+"[i]",relevance:1
},e.C_NUMBER_MODE]},{begin:/:=/},{className:"function",beginKeywords:"func",
end:"\\s*(\\{|$)",excludeEnd:!0,contains:[e.TITLE_MODE,{className:"params",
begin:/\(/,end:/\)/,endsParent:!0,keywords:n,illegal:/["']/}]}]}},
grmr_graphql:e=>{const n=e.regex;return{name:"GraphQL",aliases:["gql"],
case_insensitive:!0,disableAutodetect:!1,keywords:{
keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"],
literal:["true","false","null"]},
contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{
scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation",
begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/,
end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{
scope:"symbol",begin:n.concat(/[_A-Za-z][_0-9A-Za-z]*/,n.lookahead(/\s*:/)),
relevance:0}],illegal:[/[;<']/,/BEGIN/]}},grmr_ini:e=>{const n=e.regex,t={
className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{
begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{begin:/;/,end:/$/},{begin:/#/,
end:/$/}];const i={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{
begin:/\$\{(.*?)\}/}]},r={className:"literal",
begin:/\bon|off|true|false|yes|no\b/},s={className:"string",
contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{
begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]
},o={begin:/\[/,end:/\]/,contains:[a,r,i,s,t,"self"],relevance:0
},l=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{
name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,
contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{
begin:n.concat(l,"(\\s*\\.\\s*",l,")*",n.lookahead(/\s*=\s*[^#\s]/)),
className:"attr",starts:{end:/$/,contains:[a,o,r,i,s,t]}}]}},grmr_java:e=>{
const n=e.regex,t="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",a=t+pe("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),i={
keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits"],
literal:["false","true","null"],
type:["char","boolean","long","float","int","byte","short","double"],
built_in:["super","this"]},r={className:"meta",begin:"@"+t,contains:[{
begin:/\(/,end:/\)/,contains:["self"]}]},s={className:"params",begin:/\(/,
end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0}
;return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/,
contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,
relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{
begin:/import java\.[a-z]+\./,keywords:"import",relevance:2
},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,
className:"string",contains:[e.BACKSLASH_ESCAPE]
},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{
match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,t],className:{
1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{
begin:[n.concat(/(?!else)/,t),/\s+/,t,/\s+/,/=(?!=)/],className:{1:"type",
3:"variable",5:"operator"}},{begin:[/record/,/\s+/,t],className:{1:"keyword",
3:"title.class"},contains:[s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{
beginKeywords:"new throw return else",relevance:0},{
begin:["(?:"+a+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{
2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/,
end:/\)/,keywords:i,relevance:0,
contains:[r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,me,e.C_BLOCK_COMMENT_MODE]
},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},me,r]}},grmr_javascript:Oe,
grmr_json:e=>{const n=["true","false","null"],t={scope:"literal",
beginKeywords:n.join(" ")};return{name:"JSON",keywords:{literal:n},contains:[{
className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{
match:/[{}[\],:]/,className:"punctuation",relevance:0
},e.QUOTE_STRING_MODE,t,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],
illegal:"\\S"}},grmr_kotlin:e=>{const n={
keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",
built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",
literal:"true false null"},t={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"
},a={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},i={
className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string",
variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i,a]},{begin:"'",end:"'",
illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,
contains:[e.BACKSLASH_ESCAPE,i,a]}]};a.contains.push(r);const s={
className:"meta",
begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"
},o={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,
end:/\)/,contains:[e.inherit(r,{className:"string"}),"self"]}]
},l=me,c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={
variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,
contains:[]}]},g=d;return g.variants[1].contains=[d],d.variants[1].contains=[g],
{name:"Kotlin",aliases:["kt","kts"],keywords:n,
contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",
begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",
begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",
begin:/@\w+/}]}},t,s,o,{className:"function",beginKeywords:"fun",end:"[(]|$",
returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{
begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,
contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/</,end:/>/,
keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,
endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,
endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,c],relevance:0
},e.C_LINE_COMMENT_MODE,c,s,o,r,e.C_NUMBER_MODE]},c]},{
begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{
3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,
illegal:"extends implements",contains:[{
beginKeywords:"public protected internal private constructor"
},e.UNDERSCORE_TITLE_MODE,{className:"type",begin:/</,end:/>/,excludeBegin:!0,
excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,
excludeBegin:!0,returnEnd:!0},s,o]},r,{className:"meta",begin:"^#!/usr/bin/env",
end:"$",illegal:"\n"},l]}},grmr_less:e=>{
const n=ie(e),t=de,a="[\\w-]+",i="("+a+"|@\\{"+a+"\\})",r=[],s=[],o=e=>({
className:"string",begin:"~?"+e+".*?"+e}),l=(e,n,t)=>({className:e,begin:n,
relevance:t}),c={$pattern:/[a-z-]+/,keyword:"and or not only",
attribute:se.join(" ")},d={begin:"\\(",end:"\\)",contains:s,keywords:c,
relevance:0}
;s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,o("'"),o('"'),n.CSS_NUMBER_MODE,{
begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",
excludeEnd:!0}
},n.HEXCOLOR,d,l("variable","@@?"+a,10),l("variable","@\\{"+a+"\\}"),l("built_in","~?`[^`]*?`"),{
className:"attribute",begin:a+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0
},n.IMPORTANT,{beginKeywords:"and not"},n.FUNCTION_DISPATCH);const g=s.concat({
begin:/\{/,end:/\}/,contains:r}),u={beginKeywords:"when",endsWithParent:!0,
contains:[{beginKeywords:"and not"}].concat(s)},b={begin:i+"\\s*:",
returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/
},n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ce.join("|")+")\\b",
end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]
},m={className:"keyword",
begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",
starts:{end:"[;{}]",keywords:c,returnEnd:!0,contains:s,relevance:0}},p={
className:"variable",variants:[{begin:"@"+a+"\\s*:",relevance:15},{begin:"@"+a
}],starts:{end:"[;}]",returnEnd:!0,contains:g}},_={variants:[{
begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:i,end:/\{/}],returnBegin:!0,
returnEnd:!0,illegal:"[<='$\"]",relevance:0,
contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,u,l("keyword","all\\b"),l("variable","@\\{"+a+"\\}"),{
begin:"\\b("+re.join("|")+")\\b",className:"selector-tag"
},n.CSS_NUMBER_MODE,l("selector-tag",i,0),l("selector-id","#"+i),l("selector-class","\\."+i,0),l("selector-tag","&",0),n.ATTRIBUTE_SELECTOR_MODE,{
className:"selector-pseudo",begin:":("+oe.join("|")+")"},{
className:"selector-pseudo",begin:":(:)?("+le.join("|")+")"},{begin:/\(/,
end:/\)/,relevance:0,contains:g},{begin:"!important"},n.FUNCTION_DISPATCH]},h={
begin:a+":(:)?"+`(${t.join("|")})`,returnBegin:!0,contains:[_]}
;return r.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,m,p,h,b,_,u,n.FUNCTION_DISPATCH),
{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:r}},
grmr_lua:e=>{const n="\\[=*\\[",t="\\]=*\\]",a={begin:n,end:t,contains:["self"]
},i=[e.COMMENT("--(?!"+n+")","$"),e.COMMENT("--"+n,t,{contains:[a],relevance:10
})];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,
literal:"true false nil",
keyword:"and break do else elseif end for goto if in local not or repeat return then until while",
built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"
},contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)",
contains:[e.inherit(e.TITLE_MODE,{
begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",
begin:"\\(",endsWithParent:!0,contains:i}].concat(i)
},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",
begin:n,end:t,contains:[a],relevance:5}])}},grmr_makefile:e=>{const n={
className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",
contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%<?\^\+\*]/}]},t={className:"string",
begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n]},a={className:"variable",
begin:/\$\([\w-]+\s/,end:/\)/,keywords:{
built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"
},contains:[n]},i={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},r={
className:"section",begin:/^[^\s]+:/,end:/$/,contains:[n]};return{
name:"Makefile",aliases:["mk","mak","make"],keywords:{$pattern:/[\w-]+/,
keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"
},contains:[e.HASH_COMMENT_MODE,n,t,a,i,{className:"meta",begin:/^\.PHONY:/,
end:/$/,keywords:{$pattern:/[\.\w]+/,keyword:".PHONY"}},r]}},grmr_markdown:e=>{
const n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},t={
variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{
begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,
relevance:2},{
begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),
relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{
begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/
},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,
returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",
excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",
end:"\\]",excludeBegin:!0,excludeEnd:!0}]},a={className:"strong",contains:[],
variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]
},i={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{
begin:/_(?![_\s])/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[]
}),s=e.inherit(i,{contains:[]});a.contains.push(s),i.contains.push(r)
;let o=[n,t];return[a,i,r,s].forEach((e=>{e.contains=e.contains.concat(o)
})),o=o.concat(a,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{
className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:o},{
begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",
contains:o}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",
end:"\\s+",excludeEnd:!0},a,i,{className:"quote",begin:"^>\\s+",contains:o,
end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{
begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{
begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",
contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{
begin:"^[-\\*]{3,}",end:"$"},t,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{
className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{
className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}},grmr_objectivec:e=>{
const n=/[a-zA-Z@][a-zA-Z0-9_]*/,t={$pattern:n,
keyword:["@interface","@class","@protocol","@implementation"]};return{
name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],
keywords:{"variable.language":["this","super"],$pattern:n,
keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],
literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],
built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],
type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]
},illegal:"</",contains:[{className:"built_in",
begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"
},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.C_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{
className:"string",variants:[{begin:'@"',end:'"',illegal:"\\n",
contains:[e.BACKSLASH_ESCAPE]}]},{className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,
keywords:{
keyword:"if else elif endif define undef warning error line pragma ifdef ifndef include"
},contains:[{begin:/\\\n/,relevance:0},e.inherit(e.QUOTE_STRING_MODE,{
className:"string"}),{className:"string",begin:/<.*?>/,end:/$/,illegal:"\\n"
},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",
begin:"("+t.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:t,
contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,
relevance:0}]}},grmr_perl:e=>{const n=e.regex,t=/[dualxmsipngr]{0,12}/,a={
$pattern:/[\w.]+/,
keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0"
},i={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:a},r={begin:/->\{/,
end:/\}/},s={variants:[{begin:/\$\d/},{
begin:n.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")
},{begin:/[$%@][^\s\w{]/,relevance:0}]
},o=[e.BACKSLASH_ESCAPE,i,s],l=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],c=(e,a,i="\\1")=>{
const r="\\1"===i?i:n.concat(i,a)
;return n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,r,/(?:\\.|[^\\\/])*?/,i,t)
},d=(e,a,i)=>n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,i,t),g=[s,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{
endsWithParent:!0}),r,{className:"string",contains:o,variants:[{
begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",
end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{
begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",
relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",
contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",
contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{
begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number",
begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",
relevance:0},{
begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",
keywords:"split return print reverse grep",relevance:0,
contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{
begin:c("s|tr|y",n.either(...l,{capture:!0}))},{begin:c("s|tr|y","\\(","\\)")},{
begin:c("s|tr|y","\\[","\\]")},{begin:c("s|tr|y","\\{","\\}")}],relevance:2},{
className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{
begin:d("(?:m|qr)?",/\//,/\//)},{begin:d("m|qr",n.either(...l,{capture:!0
}),/\1/)},{begin:d("m|qr",/\(/,/\)/)},{begin:d("m|qr",/\[/,/\]/)},{
begin:d("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub",
end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{
begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",
subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]
}];return i.contains=g,r.contains=g,{name:"Perl",aliases:["pl","pm"],keywords:a,
contains:g}},grmr_php:e=>{
const n=e.regex,t=/(?![A-Za-z0-9])(?![$])/,a=n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,t),i=n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,t),r={
scope:"variable",match:"\\$+"+a},s={scope:"subst",variants:[{begin:/\$\w+/},{
begin:/\{\$/,end:/\}/}]},o=e.inherit(e.APOS_STRING_MODE,{illegal:null
}),l="[ \t\n]",c={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{
illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(s)}),o,{
begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,
contains:e.QUOTE_STRING_MODE.contains.concat(s),"on:begin":(e,n)=>{
n.data._beginMatch=e[1]||e[2]},"on:end":(e,n)=>{
n.data._beginMatch!==e[1]&&n.ignoreMatch()}},e.END_SAME_AS_BEGIN({
begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/})]},d={scope:"number",variants:[{
begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{
begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{
begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"
}],relevance:0
},g=["false","null","true"],u=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],b=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],m={
keyword:u,literal:(e=>{const n=[];return e.forEach((e=>{
n.push(e),e.toLowerCase()===e?n.push(e.toUpperCase()):n.push(e.toLowerCase())
})),n})(g),built_in:b},p=e=>e.map((e=>e.replace(/\|\d+$/,""))),_={variants:[{
match:[/new/,n.concat(l,"+"),n.concat("(?!",p(b).join("\\b|"),"\\b)"),i],scope:{
1:"keyword",4:"title.class"}}]},h=n.concat(a,"\\b(?!\\()"),f={variants:[{
match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),h],scope:{2:"variable.constant"
}},{match:[/::/,/class/],scope:{2:"variable.language"}},{
match:[i,n.concat(/::/,n.lookahead(/(?!class\b)/)),h],scope:{1:"title.class",
3:"variable.constant"}},{match:[i,n.concat("::",n.lookahead(/(?!class\b)/))],
scope:{1:"title.class"}},{match:[i,/::/,/class/],scope:{1:"title.class",
3:"variable.language"}}]},E={scope:"attr",
match:n.concat(a,n.lookahead(":"),n.lookahead(/(?!::)/))},y={relevance:0,
begin:/\(/,end:/\)/,keywords:m,contains:[E,r,f,e.C_BLOCK_COMMENT_MODE,c,d,_]
},N={relevance:0,
match:[/\b/,n.concat("(?!fn\\b|function\\b|",p(u).join("\\b|"),"|",p(b).join("\\b|"),"\\b)"),a,n.concat(l,"*"),n.lookahead(/(?=\()/)],
scope:{3:"title.function.invoke"},contains:[y]};y.contains.push(N)
;const w=[E,f,e.C_BLOCK_COMMENT_MODE,c,d,_];return{case_insensitive:!1,
keywords:m,contains:[{begin:n.concat(/#\[\s*/,i),beginScope:"meta",end:/]/,
endScope:"meta",keywords:{literal:g,keyword:["new","array"]},contains:[{
begin:/\[/,end:/]/,keywords:{literal:g,keyword:["new","array"]},
contains:["self",...w]},...w,{scope:"meta",match:i}]
},e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{contains:[{
scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,
keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE,
contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{
begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{
begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},r,N,f,{
match:[/const/,/\s/,a],scope:{1:"keyword",3:"variable.constant"}},_,{
scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,
excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"
},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",
begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:m,
contains:["self",r,f,e.C_BLOCK_COMMENT_MODE,c,d]}]},{scope:"class",variants:[{
beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",
illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{
beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{
beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,
contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{
beginKeywords:"use",relevance:0,end:";",contains:[{
match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},c,d]}
},grmr_php_template:e=>({name:"PHP template",subLanguage:"xml",contains:[{
begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",
end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0
},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,
skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,
contains:null,skip:!0})]}]}),grmr_plaintext:e=>({name:"Plain text",
aliases:["text","txt"],disableAutodetect:!0}),grmr_python:e=>{
const n=e.regex,t=/[\p{XID_Start}_]\p{XID_Continue}*/u,a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],i={
$pattern:/[A-Za-z]\w+|__\w+__/,keyword:a,
built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],
literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],
type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]
},r={className:"meta",begin:/^(>>>|\.\.\.) /},s={className:"subst",begin:/\{/,
end:/\}/,keywords:i,illegal:/#/},o={begin:/\{\{/,relevance:0},l={
className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{
begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,
contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{
begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,
contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{
begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,
contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,
end:/"""/,contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([uU]|[rR])'/,end:/'/,
relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{
begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,
end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,
contains:[e.BACKSLASH_ESCAPE,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,
contains:[e.BACKSLASH_ESCAPE,o,s]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
},c="[0-9](_?[0-9])*",d=`(\\b(${c}))?\\.(${c})|\\b(${c})\\.`,g="\\b|"+a.join("|"),u={
className:"number",relevance:0,variants:[{
begin:`(\\b(${c})|(${d}))[eE][+-]?(${c})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{
begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{
begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})`
},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${c})[jJ](?=${g})`
}]},b={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:i,
contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={
className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,
end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i,
contains:["self",r,u,l,e.HASH_COMMENT_MODE]}]};return s.contains=[l,u,r],{
name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:i,
illegal:/(<\/|\?)|=>/,contains:[r,u,{begin:/\bself\b/},{beginKeywords:"if",
relevance:0},l,b,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,t],scope:{
1:"keyword",3:"title.function"},contains:[m]},{variants:[{
match:[/\bclass/,/\s+/,t,/\s*/,/\(\s*/,t,/\s*\)/]},{match:[/\bclass/,/\s+/,t]}],
scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{
className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[u,m,l]}]}},
grmr_python_repl:e=>({aliases:["pycon"],contains:[{className:"meta.prompt",
starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{
begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}),grmr_r:e=>{
const n=e.regex,t=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,a=n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),i=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!{{HIGHLIGHT_JS}}|:<=>@^~]|\*\*/,r=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/)
;return{name:"R",keywords:{$pattern:t,
keyword:"function if in break next repeat else for while",
literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",
built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"
},contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,
starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),
endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{
scope:"variable",variants:[{match:t},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0
}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]
}),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE],
variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/
}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/
}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/
}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/
}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/
}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',
relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{
1:"operator",2:"number"},match:[i,a]},{scope:{1:"operator",2:"number"},
match:[/%[^%]*%/,a]},{scope:{1:"punctuation",2:"number"},match:[r,a]},{scope:{
2:"number"},match:[/[^a-zA-Z0-9._]|^/,a]}]},{scope:{3:"operator"},
match:[t,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{
match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:r},{begin:"`",end:"`",
contains:[{begin:/\\./}]}]}},grmr_ruby:e=>{
const n=e.regex,t="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={
"variable.constant":["__FILE__","__LINE__","__ENCODING__"],
"variable.language":["self","super"],
keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"],
built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],
literal:["true","false","nil"]},s={className:"doctag",begin:"@[A-Za-z]+"},o={
begin:"#<",end:">"},l=[e.COMMENT("#","$",{contains:[s]
}),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10
}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/,
end:/\}/,keywords:r},d={className:"string",contains:[e.BACKSLASH_ESCAPE,c],
variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{
begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{
begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?</,end:/>/},{begin:/%[qQwWx]?\//,
end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{
begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{
begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{
begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{
begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{
begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),
contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,
contains:[e.BACKSLASH_ESCAPE,c]})]}]},g="[0-9](_?[0-9])*",u={className:"number",
relevance:0,variants:[{
begin:`\\b([1-9](_?[0-9])*|0)(\\.(${g}))?([eE][+-]?(${g})|r)?i?\\b`},{
begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"
},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{
begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{
begin:"\\b0(_?[0-7])+r?i?\\b"}]},b={variants:[{match:/\(\)/},{
className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,
keywords:r}]},m=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{
match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class",
4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{
2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{
1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{
match:[/def/,/\s+/,t],scope:{1:"keyword",3:"title.function"},contains:[b]},{
begin:e.IDENT_RE+"::"},{className:"symbol",
begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",
begin:":(?!\\s)",contains:[d,{begin:t}],relevance:0},u,{className:"variable",
begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{
className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0,
relevance:0,keywords:r},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",
keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],
illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{
begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",
end:"\\][a-z]*"}]}].concat(o,l),relevance:0}].concat(o,l)
;c.contains=m,b.contains=m;const p=[{begin:/^\s*=>/,starts:{end:"$",contains:m}
},{className:"meta.prompt",
begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])",
starts:{end:"$",keywords:r,contains:m}}];return l.unshift(o),{name:"Ruby",
aliases:["rb","gemspec","podspec","thor","irb"],keywords:r,illegal:/\/\*/,
contains:[e.SHEBANG({binary:"ruby"})].concat(p).concat(l).concat(m)}},
grmr_rust:e=>{const n=e.regex,t={className:"title.function.invoke",relevance:0,
begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,e.IDENT_RE,n.lookahead(/\s*\(/))
},a="([ui](8|16|32|64|128|size)|f(32|64))?",i=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],r=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"]
;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:r,
keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","unsafe","unsized","use","virtual","where","while","yield"],
literal:["true","false","Some","None","Ok","Err"],built_in:i},illegal:"</",
contains:[e.C_LINE_COMMENT_MODE,e.COMMENT("/\\*","\\*/",{contains:["self"]
}),e.inherit(e.QUOTE_STRING_MODE,{begin:/b?"/,illegal:null}),{
className:"string",variants:[{begin:/b?r(#*)"(.|\n)*?"\1(?!#)/},{
begin:/b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/}]},{className:"symbol",
begin:/'[a-zA-Z_][a-zA-Z0-9_]*/},{className:"number",variants:[{
begin:"\\b0b([01_]+)"+a},{begin:"\\b0o([0-7_]+)"+a},{
begin:"\\b0x([A-Fa-f0-9_]+)"+a},{
begin:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+a}],relevance:0},{
begin:[/fn/,/\s+/,e.UNDERSCORE_IDENT_RE],className:{1:"keyword",
3:"title.function"}},{className:"meta",begin:"#!?\\[",end:"\\]",contains:[{
className:"string",begin:/"/,end:/"/}]},{
begin:[/let/,/\s+/,/(?:mut\s+)?/,e.UNDERSCORE_IDENT_RE],className:{1:"keyword",
3:"keyword",4:"variable"}},{
begin:[/for/,/\s+/,e.UNDERSCORE_IDENT_RE,/\s+/,/in/],className:{1:"keyword",
3:"variable",5:"keyword"}},{begin:[/type/,/\s+/,e.UNDERSCORE_IDENT_RE],
className:{1:"keyword",3:"title.class"}},{
begin:[/(?:trait|enum|struct|union|impl|for)/,/\s+/,e.UNDERSCORE_IDENT_RE],
className:{1:"keyword",3:"title.class"}},{begin:e.IDENT_RE+"::",keywords:{
keyword:"Self",built_in:i,type:r}},{className:"punctuation",begin:"->"},t]}},
grmr_scss:e=>{const n=ie(e),t=le,a=oe,i="@[a-z-]+",r={className:"variable",
begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS",
case_insensitive:!0,illegal:"[=/|']",
contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n.CSS_NUMBER_MODE,{
className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{
className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0
},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",
begin:"\\b("+re.join("|")+")\\b",relevance:0},{className:"selector-pseudo",
begin:":("+a.join("|")+")"},{className:"selector-pseudo",
begin:":(:)?("+t.join("|")+")"},r,{begin:/\(/,end:/\)/,
contains:[n.CSS_NUMBER_MODE]},n.CSS_VARIABLE,{className:"attribute",
begin:"\\b("+ce.join("|")+")\\b"},{
begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"
},{begin:/:/,end:/[;}{]/,relevance:0,
contains:[n.BLOCK_COMMENT,r,n.HEXCOLOR,n.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.IMPORTANT,n.FUNCTION_DISPATCH]
},{begin:"@(page|font-face)",keywords:{$pattern:i,keyword:"@page @font-face"}},{
begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,
keyword:"and or not only",attribute:se.join(" ")},contains:[{begin:i,
className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"
},r,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.HEXCOLOR,n.CSS_NUMBER_MODE]
},n.FUNCTION_DISPATCH]}},grmr_shell:e=>({name:"Shell Session",
aliases:["console","shellsession"],contains:[{className:"meta.prompt",
begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,
subLanguage:"bash"}}]}),grmr_sql:e=>{
const n=e.regex,t=e.COMMENT("--","$"),a=["true","false","unknown"],i=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],r=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],s=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],o=r,l=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!r.includes(e))),c={
begin:n.concat(/\b/,n.either(...o),/\s*\(/),relevance:0,keywords:{built_in:o}}
;return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{
$pattern:/\b[\w\.]+/,keyword:((e,{exceptions:n,when:t}={})=>{const a=t
;return n=n||[],e.map((e=>e.match(/\|\d+$/)||n.includes(e)?e:a(e)?e+"|0":e))
})(l,{when:e=>e.length<3}),literal:a,type:i,
built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]
},contains:[{begin:n.either(...s),relevance:0,keywords:{$pattern:/[\w\.]+/,
keyword:l.concat(s),literal:a,type:i}},{className:"type",
begin:n.either("double precision","large object","with timezone","without timezone")
},c,{className:"variable",begin:/@[a-z0-9][a-z0-9_]*/},{className:"string",
variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/,
contains:[{begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{
className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,
relevance:0}]}},grmr_swift:e=>{const n={match:/\s+/,relevance:0
},t=e.COMMENT("/\\*","\\*/",{contains:["self"]}),a=[e.C_LINE_COMMENT_MODE,t],i={
match:[/\./,m(...xe,...Me)],className:{2:"keyword"}},r={match:b(/\./,m(...Ae)),
relevance:0},s=Ae.filter((e=>"string"==typeof e)).concat(["_|0"]),o={variants:[{
className:"keyword",
match:m(...Ae.filter((e=>"string"!=typeof e)).concat(Se).map(ke),...Me)}]},l={
$pattern:m(/\b\w+/,/#\w+/),keyword:s.concat(Re),literal:Ce},c=[i,r,o],g=[{
match:b(/\./,m(...De)),relevance:0},{className:"built_in",
match:b(/\b/,m(...De),/(?=\()/)}],u={match:/->/,relevance:0},p=[u,{
className:"operator",relevance:0,variants:[{match:Be},{match:`\\.(\\.|${Le})+`}]
}],_="([0-9]_*)+",h="([0-9a-fA-F]_*)+",f={className:"number",relevance:0,
variants:[{match:`\\b(${_})(\\.(${_}))?([eE][+-]?(${_}))?\\b`},{
match:`\\b0x(${h})(\\.(${h}))?([pP][+-]?(${_}))?\\b`},{match:/\b0o([0-7]_*)+\b/
},{match:/\b0b([01]_*)+\b/}]},E=(e="")=>({className:"subst",variants:[{
match:b(/\\/,e,/[0\\tnr"']/)},{match:b(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]
}),y=(e="")=>({className:"subst",match:b(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)
}),N=(e="")=>({className:"subst",label:"interpol",begin:b(/\\/,e,/\(/),end:/\)/
}),w=(e="")=>({begin:b(e,/"""/),end:b(/"""/,e),contains:[E(e),y(e),N(e)]
}),v=(e="")=>({begin:b(e,/"/),end:b(/"/,e),contains:[E(e),N(e)]}),O={
className:"string",
variants:[w(),w("#"),w("##"),w("###"),v(),v("#"),v("##"),v("###")]
},k=[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,
contains:[e.BACKSLASH_ESCAPE]}],x={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,
contains:k},M=e=>{const n=b(e,/\//),t=b(/\//,e);return{begin:n,end:t,
contains:[...k,{scope:"comment",begin:`#(?!.*${t})`,end:/$/}]}},S={
scope:"regexp",variants:[M("###"),M("##"),M("#"),x]},A={match:b(/`/,Fe,/`/)
},C=[A,{className:"variable",match:/\$\d+/},{className:"variable",
match:`\\${ze}+`}],T=[{match:/(@|#(un)?)available/,scope:"keyword",starts:{
contains:[{begin:/\(/,end:/\)/,keywords:Pe,contains:[...p,f,O]}]}},{
scope:"keyword",match:b(/@/,m(...je))},{scope:"meta",match:b(/@/,Fe)}],R={
match:d(/\b[A-Z]/),relevance:0,contains:[{className:"type",
match:b(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,ze,"+")
},{className:"type",match:Ue,relevance:0},{match:/[?!]+/,relevance:0},{
match:/\.\.\./,relevance:0},{match:b(/\s+&\s+/,d(Ue)),relevance:0}]},D={
begin:/</,end:/>/,keywords:l,contains:[...a,...c,...T,u,R]};R.contains.push(D)
;const I={begin:/\(/,end:/\)/,relevance:0,keywords:l,contains:["self",{
match:b(Fe,/\s*:/),keywords:"_|0",relevance:0
},...a,S,...c,...g,...p,f,O,...C,...T,R]},L={begin:/</,end:/>/,
keywords:"repeat each",contains:[...a,R]},B={begin:/\(/,end:/\)/,keywords:l,
contains:[{begin:m(d(b(Fe,/\s*:/)),d(b(Fe,/\s+/,Fe,/\s*:/))),end:/:/,
relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",
match:Fe}]},...a,...c,...p,f,O,...T,R,I],endsParent:!0,illegal:/["']/},$={
match:[/(func|macro)/,/\s+/,m(A.match,Fe,Be)],className:{1:"keyword",
3:"title.function"},contains:[L,B,n],illegal:[/\[/,/%/]},z={
match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},
contains:[L,B,n],illegal:/\[|%/},F={match:[/operator/,/\s+/,Be],className:{
1:"keyword",3:"title"}},U={begin:[/precedencegroup/,/\s+/,Ue],className:{
1:"keyword",3:"title"},contains:[R],keywords:[...Te,...Ce],end:/}/}
;for(const e of O.variants){const n=e.contains.find((e=>"interpol"===e.label))
;n.keywords=l;const t=[...c,...g,...p,f,O,...C];n.contains=[...t,{begin:/\(/,
end:/\)/,contains:["self",...t]}]}return{name:"Swift",keywords:l,
contains:[...a,$,z,{beginKeywords:"struct protocol class extension enum actor",
end:"\\{",excludeEnd:!0,keywords:l,contains:[e.inherit(e.TITLE_MODE,{
className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...c]
},F,U,{beginKeywords:"import",end:/$/,contains:[...a],relevance:0
},S,...c,...g,...p,f,O,...C,...T,R,I]}},grmr_typescript:e=>{
const n=Oe(e),t=_e,a=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],i={
beginKeywords:"namespace",end:/\{/,excludeEnd:!0,
contains:[n.exports.CLASS_REFERENCE]},r={beginKeywords:"interface",end:/\{/,
excludeEnd:!0,keywords:{keyword:"interface extends",built_in:a},
contains:[n.exports.CLASS_REFERENCE]},s={$pattern:_e,
keyword:he.concat(["type","namespace","interface","public","private","protected","implements","declare","abstract","readonly","enum","override"]),
literal:fe,built_in:ve.concat(a),"variable.language":we},o={className:"meta",
begin:"@"+t},l=(e,n,t)=>{const a=e.contains.findIndex((e=>e.label===n))
;if(-1===a)throw Error("can not find mode to replace");e.contains.splice(a,1,t)}
;return Object.assign(n.keywords,s),
n.exports.PARAMS_CONTAINS.push(o),n.contains=n.contains.concat([o,i,r]),
l(n,"shebang",e.SHEBANG()),l(n,"use_strict",{className:"meta",relevance:10,
begin:/^\s*['"]use strict['"]/
}),n.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(n,{
name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),n},grmr_vbnet:e=>{
const n=e.regex,t=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,i=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,r=/\d{1,2}(:\d{1,2}){1,2}/,s={
className:"literal",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{
begin:n.concat(/# */,r,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{
begin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,r),/ *#/)}]
},o=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]
}),l=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]})
;return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,
classNameAliases:{label:"symbol"},keywords:{
keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",
built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",
type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",
literal:"true false nothing"},
illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{
className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/,
end:/"/,illegal:/\n/,contains:[{begin:/""/}]},s,{className:"number",relevance:0,
variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/
},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{
begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{
className:"label",begin:/^\w+:/},o,l,{className:"meta",
begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,
end:/$/,keywords:{
keyword:"const disable else elseif enable end externalsource if region then"},
contains:[l]}]}},grmr_wasm:e=>{e.regex;const n=e.COMMENT(/\(;/,/;\)/)
;return n.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,
keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"]
},contains:[e.COMMENT(/;;/,/$/),n,{match:[/(?:offset|align)/,/\s*/,/=/],
className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{
match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{
begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",
3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/,
className:"type"},{className:"keyword",
match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/
},{className:"number",relevance:0,
match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/
}]}},grmr_xml:e=>{
const n=e.regex,t=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),a={
className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/,
contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]
},r=e.inherit(i,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{
className:"string"}),o=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={
endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",
begin:/[\p{L}0-9._:-]+/u,relevance:0},{begin:/=\s*/,relevance:0,contains:[{
className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[a]},{
begin:/'/,end:/'/,contains:[a]},{begin:/[^\s"'=<>`]+/}]}]}]};return{
name:"HTML, XML",
aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],
case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin:/<![a-z]/,
end:/>/,relevance:10,contains:[i,o,s,r,{begin:/\[/,end:/\]/,contains:[{
className:"meta",begin:/<![a-z]/,end:/>/,contains:[i,r,o,s]}]}]
},e.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,
relevance:10},a,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,
relevance:10,contains:[o]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",
begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{
end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",
begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{
end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{
className:"tag",begin:/<>|<\/>/},{className:"tag",
begin:n.concat(/</,n.lookahead(n.concat(t,n.either(/\/>/,/>/,/\s/)))),
end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:l}]},{
className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(t,/>/))),contains:[{
className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}
},grmr_yaml:e=>{
const n="true false yes no null",t="[\\w#;/?:@&=+$,.~*'()[\\]]+",a={
className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/
},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",
variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(a,{
variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),r={
end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},s={begin:/\{/,
end:/\}/,contains:[r],illegal:"\\n",relevance:0},o={begin:"\\[",end:"\\]",
contains:[r],illegal:"\\n",relevance:0},l=[{className:"attr",variants:[{
begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{
begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$",
relevance:10},{className:"string",
begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{
begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,
relevance:0},{className:"type",begin:"!\\w+!"+t},{className:"type",
begin:"!<"+t+">"},{className:"type",begin:"!"+t},{className:"type",begin:"!!"+t
},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",
begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",
relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{
className:"number",
begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"
},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},s,o,a],c=[...l]
;return c.pop(),c.push(i),r.contains=c,{name:"YAML",case_insensitive:!0,
aliases:["yml"],contains:l}}});const He=ae;for(const e of Object.keys(Ke)){
const n=e.replace("grmr_","").replace("_","-");He.registerLanguage(n,Ke[e])}
return He}()
;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);</script>
<!-- Main application code -->
<script>
(function() {
'use strict';
// ============================================================
// DATA LOADING
// ============================================================
const base64 = document.getElementById('session-data').textContent;
const binary = atob(base64);
const bytes = new Uint8Array(binary.length);
for (let i = 0; i < binary.length; i++) {
bytes[i] = binary.charCodeAt(i);
}
const data = JSON.parse(new TextDecoder('utf-8').decode(bytes));
const { header, entries, leafId: defaultLeafId, systemPrompt, tools, renderedTools } = data;
// ============================================================
// URL PARAMETER HANDLING
// ============================================================
// Parse URL parameters for deep linking: leafId and targetId
// Check for injected params (when loaded in iframe via srcdoc) or use window.location
const injectedParams = document.querySelector('meta[name="pi-url-params"]');
const searchString = injectedParams ? injectedParams.content : window.location.search.substring(1);
const urlParams = new URLSearchParams(searchString);
const urlLeafId = urlParams.get('leafId');
const urlTargetId = urlParams.get('targetId');
// Use URL leafId if provided, otherwise fall back to session default
const leafId = urlLeafId || defaultLeafId;
// ============================================================
// DATA STRUCTURES
// ============================================================
// Entry lookup by ID
const byId = new Map();
for (const entry of entries) {
byId.set(entry.id, entry);
}
// Tool call lookup (toolCallId -> {name, arguments})
const toolCallMap = new Map();
for (const entry of entries) {
if (entry.type === 'message' && entry.message.role === 'assistant') {
const content = entry.message.content;
if (Array.isArray(content)) {
for (const block of content) {
if (block.type === 'toolCall') {
toolCallMap.set(block.id, { name: block.name, arguments: block.arguments });
}
}
}
}
}
// Label lookup (entryId -> label string)
// Labels are stored in 'label' entries that reference their target via targetId
const labelMap = new Map();
for (const entry of entries) {
if (entry.type === 'label' && entry.targetId && entry.label) {
labelMap.set(entry.targetId, entry.label);
}
}
// ============================================================
// TREE DATA PREPARATION (no DOM, pure data)
// ============================================================
/**
* Build tree structure from flat entries.
* Returns array of root nodes, each with { entry, children, label }.
*/
function buildTree() {
const nodeMap = new Map();
const roots = [];
// Create nodes
for (const entry of entries) {
nodeMap.set(entry.id, {
entry,
children: [],
label: labelMap.get(entry.id)
});
}
// Build parent-child relationships
for (const entry of entries) {
const node = nodeMap.get(entry.id);
if (entry.parentId === null || entry.parentId === undefined || entry.parentId === entry.id) {
roots.push(node);
} else {
const parent = nodeMap.get(entry.parentId);
if (parent) {
parent.children.push(node);
} else {
roots.push(node);
}
}
}
// Sort children by timestamp
function sortChildren(node) {
node.children.sort((a, b) =>
new Date(a.entry.timestamp).getTime() - new Date(b.entry.timestamp).getTime()
);
node.children.forEach(sortChildren);
}
roots.forEach(sortChildren);
return roots;
}
/**
* Build set of entry IDs on path from root to target.
*/
function buildActivePathIds(targetId) {
const ids = new Set();
let current = byId.get(targetId);
while (current) {
ids.add(current.id);
// Stop if no parent or self-referencing (root)
if (!current.parentId || current.parentId === current.id) {
break;
}
current = byId.get(current.parentId);
}
return ids;
}
/**
* Get array of entries from root to target (the conversation path).
*/
function getPath(targetId) {
const path = [];
let current = byId.get(targetId);
while (current) {
path.unshift(current);
// Stop if no parent or self-referencing (root)
if (!current.parentId || current.parentId === current.id) {
break;
}
current = byId.get(current.parentId);
}
return path;
}
// Tree node lookup for finding leaves
let treeNodeMap = null;
/**
* Find the newest leaf node reachable from a given node.
* This allows clicking any node in a branch to show the full branch.
* Children are sorted by timestamp, so the newest is always last.
*/
function findNewestLeaf(nodeId) {
// Build tree node map lazily
if (!treeNodeMap) {
treeNodeMap = new Map();
const tree = buildTree();
function mapNodes(node) {
treeNodeMap.set(node.entry.id, node);
node.children.forEach(mapNodes);
}
tree.forEach(mapNodes);
}
const node = treeNodeMap.get(nodeId);
if (!node) return nodeId;
// Follow the newest (last) child at each level
let current = node;
while (current.children.length > 0) {
current = current.children[current.children.length - 1];
}
return current.entry.id;
}
/**
* Flatten tree into list with indentation and connector info.
* Returns array of { node, indent, showConnector, isLast, gutters, isVirtualRootChild, multipleRoots }.
* Matches tree-selector.ts logic exactly.
*/
function flattenTree(roots, activePathIds) {
const result = [];
const multipleRoots = roots.length > 1;
// Mark which subtrees contain the active leaf
const containsActive = new Map();
function markActive(node) {
let has = activePathIds.has(node.entry.id);
for (const child of node.children) {
if (markActive(child)) has = true;
}
containsActive.set(node, has);
return has;
}
roots.forEach(markActive);
// Stack: [node, indent, justBranched, showConnector, isLast, gutters, isVirtualRootChild]
const stack = [];
// Add roots (prioritize branch containing active leaf)
const orderedRoots = [...roots].sort((a, b) =>
Number(containsActive.get(b)) - Number(containsActive.get(a))
);
for (let i = orderedRoots.length - 1; i >= 0; i--) {
const isLast = i === orderedRoots.length - 1;
stack.push([orderedRoots[i], multipleRoots ? 1 : 0, multipleRoots, multipleRoots, isLast, [], multipleRoots]);
}
while (stack.length > 0) {
const [node, indent, justBranched, showConnector, isLast, gutters, isVirtualRootChild] = stack.pop();
result.push({ node, indent, showConnector, isLast, gutters, isVirtualRootChild, multipleRoots });
const children = node.children;
const multipleChildren = children.length > 1;
// Order children (active branch first)
const orderedChildren = [...children].sort((a, b) =>
Number(containsActive.get(b)) - Number(containsActive.get(a))
);
// Calculate child indent (matches tree-selector.ts)
let childIndent;
if (multipleChildren) {
// Parent branches: children get +1
childIndent = indent + 1;
} else if (justBranched && indent > 0) {
// First generation after a branch: +1 for visual grouping
childIndent = indent + 1;
} else {
// Single-child chain: stay flat
childIndent = indent;
}
// Build gutters for children
const connectorDisplayed = showConnector && !isVirtualRootChild;
const currentDisplayIndent = multipleRoots ? Math.max(0, indent - 1) : indent;
const connectorPosition = Math.max(0, currentDisplayIndent - 1);
const childGutters = connectorDisplayed
? [...gutters, { position: connectorPosition, show: !isLast }]
: gutters;
// Add children in reverse order for stack
for (let i = orderedChildren.length - 1; i >= 0; i--) {
const childIsLast = i === orderedChildren.length - 1;
stack.push([orderedChildren[i], childIndent, multipleChildren, multipleChildren, childIsLast, childGutters, false]);
}
}
return result;
}
/**
* Build ASCII prefix string for tree node.
*/
function buildTreePrefix(flatNode) {
const { indent, showConnector, isLast, gutters, isVirtualRootChild, multipleRoots } = flatNode;
const displayIndent = multipleRoots ? Math.max(0, indent - 1) : indent;
const connector = showConnector && !isVirtualRootChild ? (isLast ? '└─ ' : '├─ ') : '';
const connectorPosition = connector ? displayIndent - 1 : -1;
const totalChars = displayIndent * 3;
const prefixChars = [];
for (let i = 0; i < totalChars; i++) {
const level = Math.floor(i / 3);
const posInLevel = i % 3;
const gutter = gutters.find(g => g.position === level);
if (gutter) {
prefixChars.push(posInLevel === 0 ? (gutter.show ? '│' : ' ') : ' ');
} else if (connector && level === connectorPosition) {
if (posInLevel === 0) {
prefixChars.push(isLast ? '└' : '├');
} else if (posInLevel === 1) {
prefixChars.push('─');
} else {
prefixChars.push(' ');
}
} else {
prefixChars.push(' ');
}
}
return prefixChars.join('');
}
// ============================================================
// FILTERING (pure data)
// ============================================================
let filterMode = 'default';
let searchQuery = '';
function hasTextContent(content) {
if (typeof content === 'string') return content.trim().length > 0;
if (Array.isArray(content)) {
for (const c of content) {
if (c.type === 'text' && c.text && c.text.trim().length > 0) return true;
}
}
return false;
}
function extractContent(content) {
if (typeof content === 'string') return content;
if (Array.isArray(content)) {
return content
.filter(c => c.type === 'text' && c.text)
.map(c => c.text)
.join('');
}
return '';
}
/**
* Parse a skill block from message text.
* Returns null if the text doesn't contain a skill block.
* Matches the format: <skill name="..." location="...">\n...\n</skill>\n\nuser message
*/
function parseSkillBlock(text) {
const match = text.match(/^<skill name="([^"]+)" location="([^"]+)">\n([\s\S]*?)\n<\/skill>(?:\n\n([\s\S]+))?$/);
if (!match) return null;
return {
name: match[1],
location: match[2],
content: match[3],
userMessage: match[4]?.trim() || undefined,
};
}
function getSearchableText(entry, label) {
const parts = [];
if (label) parts.push(label);
switch (entry.type) {
case 'message': {
const msg = entry.message;
parts.push(msg.role);
if (msg.content) parts.push(extractContent(msg.content));
if (msg.role === 'bashExecution' && msg.command) parts.push(msg.command);
break;
}
case 'custom_message':
parts.push(entry.customType);
parts.push(typeof entry.content === 'string' ? entry.content : extractContent(entry.content));
break;
case 'compaction':
parts.push('compaction');
break;
case 'branch_summary':
parts.push('branch summary', entry.summary);
break;
case 'model_change':
parts.push('model', entry.modelId);
break;
case 'thinking_level_change':
parts.push('thinking', entry.thinkingLevel);
break;
}
return parts.join(' ').toLowerCase();
}
/**
* Filter flat nodes based on current filterMode and searchQuery.
*/
function filterNodes(flatNodes, currentLeafId) {
const searchTokens = searchQuery.toLowerCase().split(/\s+/).filter(Boolean);
const filtered = flatNodes.filter(flatNode => {
const entry = flatNode.node.entry;
const label = flatNode.node.label;
const isCurrentLeaf = entry.id === currentLeafId;
// Always show current leaf
if (isCurrentLeaf) return true;
// Hide assistant messages with only tool calls (no text) unless error/aborted
if (entry.type === 'message' && entry.message.role === 'assistant') {
const msg = entry.message;
const hasText = hasTextContent(msg.content);
const isErrorOrAborted = msg.stopReason && msg.stopReason !== 'stop' && msg.stopReason !== 'toolUse';
if (!hasText && !isErrorOrAborted) return false;
}
// Apply filter mode
const isSettingsEntry = ['label', 'custom', 'model_change', 'thinking_level_change'].includes(entry.type);
let passesFilter = true;
switch (filterMode) {
case 'user-only':
passesFilter = entry.type === 'message' && entry.message.role === 'user';
break;
case 'no-tools':
passesFilter = !isSettingsEntry && !(entry.type === 'message' && entry.message.role === 'toolResult');
break;
case 'labeled-only':
passesFilter = label !== undefined;
break;
case 'all':
passesFilter = true;
break;
default: // 'default'
passesFilter = !isSettingsEntry;
break;
}
if (!passesFilter) return false;
// Apply search filter
if (searchTokens.length > 0) {
const nodeText = getSearchableText(entry, label);
if (!searchTokens.every(t => nodeText.includes(t))) return false;
}
return true;
});
// Recalculate visual structure based on visible tree
recalculateVisualStructure(filtered, flatNodes);
return filtered;
}
/**
* Recompute indentation/connectors for the filtered view
*
* Filtering can hide intermediate entries; descendants attach to the nearest visible ancestor.
* Keep indentation semantics aligned with flattenTree() so single-child chains don't drift right.
*/
function recalculateVisualStructure(filteredNodes, allFlatNodes) {
if (filteredNodes.length === 0) return;
const visibleIds = new Set(filteredNodes.map(n => n.node.entry.id));
// Build entry map for parent lookup (using full tree)
const entryMap = new Map();
for (const flatNode of allFlatNodes) {
entryMap.set(flatNode.node.entry.id, flatNode);
}
// Find nearest visible ancestor for a node
function findVisibleAncestor(nodeId) {
let currentId = entryMap.get(nodeId)?.node.entry.parentId;
while (currentId != null) {
if (visibleIds.has(currentId)) {
return currentId;
}
currentId = entryMap.get(currentId)?.node.entry.parentId;
}
return null;
}
// Build visible tree structure
const visibleParent = new Map();
const visibleChildren = new Map();
visibleChildren.set(null, []); // root-level nodes
for (const flatNode of filteredNodes) {
const nodeId = flatNode.node.entry.id;
const ancestorId = findVisibleAncestor(nodeId);
visibleParent.set(nodeId, ancestorId);
if (!visibleChildren.has(ancestorId)) {
visibleChildren.set(ancestorId, []);
}
visibleChildren.get(ancestorId).push(nodeId);
}
// Update multipleRoots based on visible roots
const visibleRootIds = visibleChildren.get(null);
const multipleRoots = visibleRootIds.length > 1;
// Build a map for quick lookup: nodeId → FlatNode
const filteredNodeMap = new Map();
for (const flatNode of filteredNodes) {
filteredNodeMap.set(flatNode.node.entry.id, flatNode);
}
// DFS traversal of visible tree, applying same indentation rules as flattenTree()
// Stack items: [nodeId, indent, justBranched, showConnector, isLast, gutters, isVirtualRootChild]
const stack = [];
// Add visible roots in reverse order (to process in forward order via stack)
for (let i = visibleRootIds.length - 1; i >= 0; i--) {
const isLast = i === visibleRootIds.length - 1;
stack.push([
visibleRootIds[i],
multipleRoots ? 1 : 0,
multipleRoots,
multipleRoots,
isLast,
[],
multipleRoots
]);
}
while (stack.length > 0) {
const [nodeId, indent, justBranched, showConnector, isLast, gutters, isVirtualRootChild] = stack.pop();
const flatNode = filteredNodeMap.get(nodeId);
if (!flatNode) continue;
// Update this node's visual properties
flatNode.indent = indent;
flatNode.showConnector = showConnector;
flatNode.isLast = isLast;
flatNode.gutters = gutters;
flatNode.isVirtualRootChild = isVirtualRootChild;
flatNode.multipleRoots = multipleRoots;
// Get visible children of this node
const children = visibleChildren.get(nodeId) || [];
const multipleChildren = children.length > 1;
// Calculate child indent using same rules as flattenTree():
// - Parent branches (multiple children): children get +1
// - Just branched and indent > 0: children get +1 for visual grouping
// - Single-child chain: stay flat
let childIndent;
if (multipleChildren) {
childIndent = indent + 1;
} else if (justBranched && indent > 0) {
childIndent = indent + 1;
} else {
childIndent = indent;
}
// Build gutters for children (same logic as flattenTree)
const connectorDisplayed = showConnector && !isVirtualRootChild;
const currentDisplayIndent = multipleRoots ? Math.max(0, indent - 1) : indent;
const connectorPosition = Math.max(0, currentDisplayIndent - 1);
const childGutters = connectorDisplayed
? [...gutters, { position: connectorPosition, show: !isLast }]
: gutters;
// Add children in reverse order (to process in forward order via stack)
for (let i = children.length - 1; i >= 0; i--) {
const childIsLast = i === children.length - 1;
stack.push([
children[i],
childIndent,
multipleChildren,
multipleChildren,
childIsLast,
childGutters,
false
]);
}
}
}
// ============================================================
// TREE DISPLAY TEXT (pure data -> string)
// ============================================================
function shortenPath(p) {
if (typeof p !== 'string') return '';
if (p.startsWith('/Users/')) {
const parts = p.split('/');
if (parts.length > 2) return '~' + p.slice(('/Users/' + parts[2]).length);
}
if (p.startsWith('/home/')) {
const parts = p.split('/');
if (parts.length > 2) return '~' + p.slice(('/home/' + parts[2]).length);
}
return p;
}
function formatToolCall(name, args) {
switch (name) {
case 'read': {
const path = shortenPath(String(args.path || args.file_path || ''));
const offset = args.offset;
const limit = args.limit;
let display = path;
if (offset !== undefined || limit !== undefined) {
const start = offset ?? 1;
const end = limit !== undefined ? start + limit - 1 : '';
display += `:${start}${end ? `-${end}` : ''}`;
}
return `[read: ${display}]`;
}
case 'write':
return `[write: ${shortenPath(String(args.path || args.file_path || ''))}]`;
case 'edit':
return `[edit: ${shortenPath(String(args.path || args.file_path || ''))}]`;
case 'bash': {
const rawCmd = String(args.command || '');
const cmd = rawCmd.replace(/[\n\t]/g, ' ').trim().slice(0, 50);
return `[bash: ${cmd}${rawCmd.length > 50 ? '...' : ''}]`;
}
case 'grep':
return `[grep: /${args.pattern || ''}/ in ${shortenPath(String(args.path || '.'))}]`;
case 'find':
return `[find: ${args.pattern || ''} in ${shortenPath(String(args.path || '.'))}]`;
case 'ls':
return `[ls: ${shortenPath(String(args.path || '.'))}]`;
default: {
const argsStr = JSON.stringify(args).slice(0, 40);
return `[${name}: ${argsStr}${JSON.stringify(args).length > 40 ? '...' : ''}]`;
}
}
}
function escapeHtml(text) {
return String(text)
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
function sanitizeMarkdownUrl(value) {
const href = String(value || '').trim().replace(/[\x00-\x1f\x7f]/g, '');
if (!href) return href;
const scheme = href.match(/^([A-Za-z][A-Za-z0-9+.-]*):/);
if (scheme && !/^(https?|mailto|tel|ftp)$/i.test(scheme[1])) {
return null;
}
return href;
}
/**
* Truncate string to maxLen chars, append "..." if truncated.
*/
function truncate(s, maxLen = 100) {
if (s.length <= maxLen) return s;
return s.slice(0, maxLen) + '...';
}
/**
* Get display text for tree node (returns HTML string).
*/
function getTreeNodeDisplayHtml(entry, label) {
const normalize = s => s.replace(/[\n\t]/g, ' ').trim();
const labelHtml = label ? `<span class="tree-label">[${escapeHtml(label)}]</span> ` : '';
switch (entry.type) {
case 'message': {
const msg = entry.message;
if (msg.role === 'user') {
const rawContent = extractContent(msg.content);
const skillBlock = parseSkillBlock(rawContent);
if (skillBlock) {
let treeHtml = labelHtml + `<span class="tree-role-skill">skill:</span> ${escapeHtml(skillBlock.name)}`;
if (skillBlock.userMessage) {
treeHtml += ` · <span class="tree-role-user">user:</span> ${escapeHtml(truncate(normalize(skillBlock.userMessage)))}`;
}
return treeHtml;
}
const content = truncate(normalize(rawContent));
return labelHtml + `<span class="tree-role-user">user:</span> ${escapeHtml(content)}`;
}
if (msg.role === 'assistant') {
const textContent = truncate(normalize(extractContent(msg.content)));
if (textContent) {
return labelHtml + `<span class="tree-role-assistant">assistant:</span> ${escapeHtml(textContent)}`;
}
if (msg.stopReason === 'aborted') {
return labelHtml + `<span class="tree-role-assistant">assistant:</span> <span class="tree-muted">(aborted)</span>`;
}
if (msg.errorMessage) {
return labelHtml + `<span class="tree-role-assistant">assistant:</span> <span class="tree-error">${escapeHtml(truncate(msg.errorMessage))}</span>`;
}
return labelHtml + `<span class="tree-role-assistant">assistant:</span> <span class="tree-muted">(no text)</span>`;
}
if (msg.role === 'toolResult') {
const toolCall = msg.toolCallId ? toolCallMap.get(msg.toolCallId) : null;
if (toolCall) {
return labelHtml + `<span class="tree-role-tool">${escapeHtml(formatToolCall(toolCall.name, toolCall.arguments))}</span>`;
}
return labelHtml + `<span class="tree-role-tool">[${escapeHtml(msg.toolName || 'tool')}]</span>`;
}
if (msg.role === 'bashExecution') {
const cmd = truncate(normalize(msg.command || ''));
return labelHtml + `<span class="tree-role-tool">[bash]:</span> ${escapeHtml(cmd)}`;
}
return labelHtml + `<span class="tree-muted">[${escapeHtml(msg.role)}]</span>`;
}
case 'compaction':
return labelHtml + `<span class="tree-compaction">[compaction: ${Math.round(entry.tokensBefore/1000)}k tokens]</span>`;
case 'branch_summary': {
const summary = truncate(normalize(entry.summary || ''));
return labelHtml + `<span class="tree-branch-summary">[branch summary]:</span> ${escapeHtml(summary)}`;
}
case 'custom_message': {
const content = typeof entry.content === 'string' ? entry.content : extractContent(entry.content);
return labelHtml + `<span class="tree-custom">[${escapeHtml(entry.customType)}]:</span> ${escapeHtml(truncate(normalize(content)))}`;
}
case 'model_change':
return labelHtml + `<span class="tree-muted">[model: ${escapeHtml(entry.modelId)}]</span>`;
case 'thinking_level_change':
return labelHtml + `<span class="tree-muted">[thinking: ${escapeHtml(entry.thinkingLevel)}]</span>`;
default:
return labelHtml + `<span class="tree-muted">[${escapeHtml(entry.type)}]</span>`;
}
}
// ============================================================
// TREE RENDERING (DOM manipulation)
// ============================================================
let currentLeafId = leafId;
let currentTargetId = urlTargetId || leafId;
let treeRendered = false;
function renderTree() {
const tree = buildTree();
const activePathIds = buildActivePathIds(currentLeafId);
const flatNodes = flattenTree(tree, activePathIds);
const filtered = filterNodes(flatNodes, currentLeafId);
const container = document.getElementById('tree-container');
// Full render only on first call or when filter/search changes
if (!treeRendered) {
container.innerHTML = '';
for (const flatNode of filtered) {
const entry = flatNode.node.entry;
const isOnPath = activePathIds.has(entry.id);
const isTarget = entry.id === currentTargetId;
const div = document.createElement('div');
div.className = 'tree-node';
if (isOnPath) div.classList.add('in-path');
if (isTarget) div.classList.add('active');
div.dataset.id = entry.id;
const prefix = buildTreePrefix(flatNode);
const prefixSpan = document.createElement('span');
prefixSpan.className = 'tree-prefix';
prefixSpan.textContent = prefix;
const marker = document.createElement('span');
marker.className = 'tree-marker';
marker.textContent = isOnPath ? '•' : ' ';
const content = document.createElement('span');
content.className = 'tree-content';
content.innerHTML = getTreeNodeDisplayHtml(entry, flatNode.node.label);
div.appendChild(prefixSpan);
div.appendChild(marker);
div.appendChild(content);
// Navigate to the newest leaf through this node, but scroll to the clicked node
div.addEventListener('click', () => {
if (window.getSelection().toString()) return;
const leafId = findNewestLeaf(entry.id);
navigateTo(leafId, 'target', entry.id);
});
container.appendChild(div);
}
treeRendered = true;
} else {
// Just update markers and classes
const nodes = container.querySelectorAll('.tree-node');
for (const node of nodes) {
const id = node.dataset.id;
const isOnPath = activePathIds.has(id);
const isTarget = id === currentTargetId;
node.classList.toggle('in-path', isOnPath);
node.classList.toggle('active', isTarget);
const marker = node.querySelector('.tree-marker');
if (marker) {
marker.textContent = isOnPath ? '•' : ' ';
}
}
}
document.getElementById('tree-status').textContent = `${filtered.length} / ${flatNodes.length} entries`;
// Scroll active node into view after layout
setTimeout(() => {
const activeNode = container.querySelector('.tree-node.active');
if (activeNode) {
activeNode.scrollIntoView({ block: 'nearest' });
}
}, 0);
}
function forceTreeRerender() {
treeRendered = false;
renderTree();
}
// ============================================================
// MESSAGE RENDERING
// ============================================================
function formatTokens(count) {
if (count < 1000) return count.toString();
if (count < 10000) return (count / 1000).toFixed(1) + 'k';
if (count < 1000000) return Math.round(count / 1000) + 'k';
return (count / 1000000).toFixed(1) + 'M';
}
function formatTimestamp(ts) {
if (!ts) return '';
const date = new Date(ts);
return date.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit', second: '2-digit' });
}
function replaceTabs(text) {
return text.replace(/\t/g, ' ');
}
/** Safely coerce value to string for display. Returns null if invalid type. */
function str(value) {
if (typeof value === 'string') return value;
if (value == null) return '';
return null;
}
function getLanguageFromPath(filePath) {
const ext = filePath.split('.').pop()?.toLowerCase();
const extToLang = {
ts: 'typescript', tsx: 'typescript', js: 'javascript', jsx: 'javascript',
py: 'python', rb: 'ruby', rs: 'rust', go: 'go', java: 'java',
c: 'c', cpp: 'cpp', h: 'c', hpp: 'cpp', cs: 'csharp',
php: 'php', sh: 'bash', bash: 'bash', zsh: 'bash',
sql: 'sql', html: 'html', css: 'css', scss: 'scss',
json: 'json', yaml: 'yaml', yml: 'yaml', xml: 'xml',
md: 'markdown', dockerfile: 'dockerfile'
};
return extToLang[ext];
}
function findToolResult(toolCallId) {
for (const entry of entries) {
if (entry.type === 'message' && entry.message.role === 'toolResult') {
if (entry.message.toolCallId === toolCallId) {
return entry.message;
}
}
}
return null;
}
function formatExpandableOutput(text, maxLines, lang) {
text = replaceTabs(text);
const lines = text.split('\n');
const displayLines = lines.slice(0, maxLines);
const remaining = lines.length - maxLines;
if (lang) {
let highlighted;
try {
highlighted = hljs.highlight(text, { language: lang }).value;
} catch {
highlighted = escapeHtml(text);
}
if (remaining > 0) {
const previewCode = displayLines.join('\n');
let previewHighlighted;
try {
previewHighlighted = hljs.highlight(previewCode, { language: lang }).value;
} catch {
previewHighlighted = escapeHtml(previewCode);
}
return `<div class="tool-output expandable" onclick="if(window.getSelection().toString())return;this.classList.toggle('expanded')">
<div class="output-preview"><pre><code class="hljs">${previewHighlighted}</code></pre>
<div class="expand-hint">... (${remaining} more lines)</div></div>
<div class="output-full"><pre><code class="hljs">${highlighted}</code></pre></div></div>`;
}
return `<div class="tool-output"><pre><code class="hljs">${highlighted}</code></pre></div>`;
}
// Plain text output
if (remaining > 0) {
let out = '<div class="tool-output expandable" onclick="if(window.getSelection().toString())return;this.classList.toggle(\'expanded\')">';
out += '<div class="output-preview">';
for (const line of displayLines) {
out += `<div>${escapeHtml(replaceTabs(line))}</div>`;
}
out += `<div class="expand-hint">... (${remaining} more lines)</div></div>`;
out += '<div class="output-full">';
for (const line of lines) {
out += `<div>${escapeHtml(replaceTabs(line))}</div>`;
}
out += '</div></div>';
return out;
}
let out = '<div class="tool-output">';
for (const line of displayLines) {
out += `<div>${escapeHtml(replaceTabs(line))}</div>`;
}
out += '</div>';
return out;
}
function renderToolCall(call) {
const result = findToolResult(call.id);
const isError = result?.isError || false;
const statusClass = result ? (isError ? 'error' : 'success') : 'pending';
const getResultText = () => {
if (!result) return '';
const textBlocks = result.content.filter(c => c.type === 'text');
return textBlocks.map(c => c.text).join('\n');
};
const getResultImages = () => {
if (!result) return [];
return result.content.filter(c => c.type === 'image');
};
const renderResultImages = () => {
const images = getResultImages();
if (images.length === 0) return '';
return '<div class="tool-images">' +
images.map(img => `<img src="data:${escapeHtml(img.mimeType || 'image/png')};base64,${escapeHtml(img.data || '')}" class="tool-image" />`).join('') +
'</div>';
};
const toolDomId = `tool-call-${escapeHtml(call.id)}`;
let html = `<div class="tool-execution ${statusClass}" id="${toolDomId}">`;
const args = call.arguments || {};
const name = call.name;
const invalidArg = '<span class="tool-error">[invalid arg]</span>';
switch (name) {
case 'bash': {
const command = str(args.command);
const cmdDisplay = command === null ? invalidArg : escapeHtml(command || '...');
html += `<div class="tool-command">$ ${cmdDisplay}</div>`;
if (result) {
const output = getResultText().trim();
if (output) html += formatExpandableOutput(output, 5);
}
break;
}
case 'read': {
const filePath = str(args.file_path ?? args.path);
const offset = args.offset;
const limit = args.limit;
let pathHtml = filePath === null ? invalidArg : escapeHtml(shortenPath(filePath || ''));
if (filePath !== null && (offset !== undefined || limit !== undefined)) {
const startLine = offset ?? 1;
const endLine = limit !== undefined ? startLine + limit - 1 : '';
pathHtml += `<span class="line-numbers">:${startLine}${endLine ? '-' + endLine : ''}</span>`;
}
html += `<div class="tool-header"><span class="tool-name">read</span> <span class="tool-path">${pathHtml}</span></div>`;
if (result) {
html += renderResultImages();
const output = getResultText();
const lang = filePath ? getLanguageFromPath(filePath) : null;
if (output) html += formatExpandableOutput(output, 10, lang);
}
break;
}
case 'write': {
const filePath = str(args.file_path ?? args.path);
const content = str(args.content);
html += `<div class="tool-header"><span class="tool-name">write</span> <span class="tool-path">${filePath === null ? invalidArg : escapeHtml(shortenPath(filePath || ''))}</span>`;
if (content !== null && content) {
const lines = content.split('\n');
if (lines.length > 10) html += ` <span class="line-count">(${lines.length} lines)</span>`;
}
html += '</div>';
if (content === null) {
html += `<div class="tool-error">[invalid content arg - expected string]</div>`;
} else if (content) {
const lang = filePath ? getLanguageFromPath(filePath) : null;
html += formatExpandableOutput(content, 10, lang);
}
if (result) {
const output = getResultText().trim();
if (output) html += `<div class="tool-output"><div>${escapeHtml(output)}</div></div>`;
}
break;
}
case 'edit': {
const filePath = str(args.file_path ?? args.path);
html += `<div class="tool-header"><span class="tool-name">edit</span> <span class="tool-path">${filePath === null ? invalidArg : escapeHtml(shortenPath(filePath || ''))}</span></div>`;
if (result?.details?.diff) {
const diffLines = result.details.diff.split('\n');
html += '<div class="tool-diff">';
for (const line of diffLines) {
const cls = line.match(/^\+/) ? 'diff-added' : line.match(/^-/) ? 'diff-removed' : 'diff-context';
html += `<div class="${cls}">${escapeHtml(replaceTabs(line))}</div>`;
}
html += '</div>';
} else if (result) {
const output = getResultText().trim();
if (output) html += `<div class="tool-output"><pre>${escapeHtml(output)}</pre></div>`;
}
break;
}
case 'ls': {
const dirPath = str(args.path);
const limit = args.limit;
let pathHtml = dirPath === null ? invalidArg : escapeHtml(shortenPath(dirPath || '.'));
if (limit !== undefined) {
pathHtml += ` <span class="line-count">(limit ${escapeHtml(String(limit))})</span>`;
}
html += `<div class="tool-header"><span class="tool-name">ls</span> <span class="tool-path">${pathHtml}</span></div>`;
if (result) {
const output = getResultText().trim();
if (output) html += formatExpandableOutput(output, 20);
}
break;
}
default: {
// Check for pre-rendered custom tool HTML
const rendered = renderedTools?.[call.id];
if (rendered?.callHtml || rendered?.resultHtmlCollapsed || rendered?.resultHtmlExpanded) {
// Custom tool with pre-rendered HTML from TUI renderer
if (rendered.callHtml) {
html += `<div class="tool-header ansi-rendered">${rendered.callHtml}</div>`;
} else {
html += `<div class="tool-header"><span class="tool-name">${escapeHtml(name)}</span></div>`;
}
if (rendered.resultHtmlCollapsed && rendered.resultHtmlExpanded && rendered.resultHtmlCollapsed !== rendered.resultHtmlExpanded) {
// Both collapsed and expanded differ - render expandable section
html += `<div class="tool-output expandable ansi-rendered" onclick="if(window.getSelection().toString())return;this.classList.toggle('expanded')">
<div class="output-preview">${rendered.resultHtmlCollapsed}</div>
<div class="output-full">${rendered.resultHtmlExpanded}</div>
</div>`;
} else if (rendered.resultHtmlExpanded) {
// Only expanded exists (or collapsed is identical) - show directly
html += `<div class="tool-output ansi-rendered">${rendered.resultHtmlExpanded}</div>`;
} else if (result) {
// No pre-rendered result HTML - fallback to JSON
const output = getResultText();
if (output) html += formatExpandableOutput(output, 10);
}
} else {
// Fallback to JSON display (existing behavior)
html += `<div class="tool-header"><span class="tool-name">${escapeHtml(name)}</span></div>`;
html += `<div class="tool-output"><pre>${escapeHtml(JSON.stringify(args, null, 2))}</pre></div>`;
if (result) {
const output = getResultText();
if (output) html += formatExpandableOutput(output, 10);
}
}
}
}
html += '</div>';
return html;
}
/**
* Download the session data as a JSONL file.
* Reconstructs the original format: header line + entry lines.
*/
window.downloadSessionJson = function() {
// Build JSONL content: header first, then all entries
const lines = [];
if (header) {
lines.push(JSON.stringify({ type: 'header', ...header }));
}
for (const entry of entries) {
lines.push(JSON.stringify(entry));
}
const jsonlContent = lines.join('\n');
// Create download
const blob = new Blob([jsonlContent], { type: 'application/x-ndjson' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `${header?.id || 'session'}.jsonl`;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
}
/**
* Build a shareable URL for a specific message.
* URL format: base?gistId&leafId=<leafId>&targetId=<entryId>
*/
function buildShareUrl(entryId) {
// Check for injected base URL (used when loaded in iframe via srcdoc)
const baseUrlMeta = document.querySelector('meta[name="pi-share-base-url"]');
const baseUrl = baseUrlMeta ? baseUrlMeta.content : window.location.href.split('?')[0];
const url = new URL(window.location.href);
// Find the gist ID (first query param without value, e.g., ?abc123)
const gistId = Array.from(url.searchParams.keys()).find(k => !url.searchParams.get(k));
// Build the share URL
const params = new URLSearchParams();
params.set('leafId', currentLeafId);
params.set('targetId', entryId);
// If we have an injected base URL (iframe context), use it directly
if (baseUrlMeta) {
return `${baseUrl}&${params.toString()}`;
}
// Otherwise build from current location (direct file access)
url.search = gistId ? `?${gistId}&${params.toString()}` : `?${params.toString()}`;
return url.toString();
}
/**
* Copy text to clipboard with visual feedback.
* Uses navigator.clipboard with fallback to execCommand for HTTP contexts.
*/
async function copyToClipboard(text, button) {
let success = false;
try {
if (navigator.clipboard && navigator.clipboard.writeText) {
await navigator.clipboard.writeText(text);
success = true;
}
} catch (err) {
// Clipboard API failed, try fallback
}
// Fallback for HTTP or when Clipboard API is unavailable
if (!success) {
try {
const textarea = document.createElement('textarea');
textarea.value = text;
textarea.style.position = 'fixed';
textarea.style.opacity = '0';
document.body.appendChild(textarea);
textarea.select();
success = document.execCommand('copy');
document.body.removeChild(textarea);
} catch (err) {
console.error('Failed to copy:', err);
}
}
if (success && button) {
const originalHtml = button.innerHTML;
button.innerHTML = '✓';
button.classList.add('copied');
setTimeout(() => {
button.innerHTML = originalHtml;
button.classList.remove('copied');
}, 1500);
}
}
/**
* Render the copy-link button HTML for a message.
*/
function renderCopyLinkButton(entryId) {
return `<button class="copy-link-btn" data-entry-id="${escapeHtml(entryId)}" title="Copy link to this message">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/>
<path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/>
</svg>
</button>`;
}
function renderEntry(entry) {
const ts = formatTimestamp(entry.timestamp);
const tsHtml = ts ? `<div class="message-timestamp">${ts}</div>` : '';
const entryDomId = `entry-${escapeHtml(entry.id)}`;
const copyBtnHtml = renderCopyLinkButton(entry.id);
if (entry.type === 'message') {
const msg = entry.message;
if (msg.role === 'user') {
const content = msg.content;
const text = typeof content === 'string' ? content :
content.filter(c => c.type === 'text').map(c => c.text).join('\n');
const skillBlock = parseSkillBlock(text);
if (skillBlock) {
// Collect images from content array
const images = Array.isArray(content) ? content.filter(c => c.type === 'image') : [];
const hasUserContent = skillBlock.userMessage || images.length > 0;
let html = `<div class="skill-user-entry" id="${entryDomId}">${copyBtnHtml}${tsHtml}`;
// Skill invocation (collapsed by default, click to expand)
html += `<div class="skill-invocation" onclick="if(window.getSelection().toString())return;this.classList.toggle('expanded')">
<div class="skill-invocation-label">[skill] ${escapeHtml(skillBlock.name)}</div>
<div class="skill-invocation-collapsed">${escapeHtml(skillBlock.name)} (click to expand)</div>
<div class="skill-invocation-content markdown-content">${safeMarkedParse(skillBlock.content)}</div>
</div>`;
// User message (separate block if present)
if (hasUserContent) {
html += '<div class="user-message">';
if (images.length > 0) {
html += '<div class="message-images">';
for (const img of images) {
html += `<img src="data:${escapeHtml(img.mimeType || 'image/png')};base64,${escapeHtml(img.data || '')}" class="message-image" />`;
}
html += '</div>';
}
if (skillBlock.userMessage) {
html += `<div class="markdown-content">${safeMarkedParse(skillBlock.userMessage)}</div>`;
}
html += '</div>';
}
html += '</div>';
return html;
}
// No skill block - normal user message
let html = `<div class="user-message" id="${entryDomId}">${copyBtnHtml}${tsHtml}`;
if (Array.isArray(content)) {
const images = content.filter(c => c.type === 'image');
if (images.length > 0) {
html += '<div class="message-images">';
for (const img of images) {
html += `<img src="data:${escapeHtml(img.mimeType || 'image/png')};base64,${escapeHtml(img.data || '')}" class="message-image" />`;
}
html += '</div>';
}
}
if (text.trim()) {
html += `<div class="markdown-content">${safeMarkedParse(text)}</div>`;
}
html += '</div>';
return html;
}
if (msg.role === 'assistant') {
let html = `<div class="assistant-message" id="${entryDomId}">${copyBtnHtml}${tsHtml}`;
for (const block of msg.content) {
if (block.type === 'text' && block.text.trim()) {
html += `<div class="assistant-text markdown-content">${safeMarkedParse(block.text)}</div>`;
} else if (block.type === 'thinking' && block.thinking.trim()) {
html += `<div class="thinking-block">
<div class="thinking-text">${escapeHtml(block.thinking)}</div>
<div class="thinking-collapsed">Thinking ...</div>
</div>`;
}
}
for (const block of msg.content) {
if (block.type === 'toolCall') {
html += renderToolCall(block);
}
}
if (msg.stopReason === 'aborted') {
html += '<div class="error-text">Aborted</div>';
} else if (msg.stopReason === 'error') {
html += `<div class="error-text">Error: ${escapeHtml(msg.errorMessage || 'Unknown error')}</div>`;
}
html += '</div>';
return html;
}
if (msg.role === 'bashExecution') {
const isError = msg.cancelled || (msg.exitCode !== 0 && msg.exitCode !== null);
let html = `<div class="tool-execution ${isError ? 'error' : 'success'}" id="${entryDomId}">${tsHtml}`;
html += `<div class="tool-command">$ ${escapeHtml(msg.command)}</div>`;
if (msg.output) html += formatExpandableOutput(msg.output, 10);
if (msg.cancelled) {
html += '<div style="color: var(--warning)">(cancelled)</div>';
} else if (msg.exitCode !== 0 && msg.exitCode !== null) {
html += `<div style="color: var(--error)">(exit ${msg.exitCode})</div>`;
}
html += '</div>';
return html;
}
if (msg.role === 'toolResult') return '';
}
if (entry.type === 'model_change') {
return `<div class="model-change" id="${entryDomId}">${tsHtml}Switched to model: <span class="model-name">${escapeHtml(entry.provider)}/${escapeHtml(entry.modelId)}</span></div>`;
}
if (entry.type === 'compaction') {
return `<div class="compaction" id="${entryDomId}" onclick="if(window.getSelection().toString())return;this.classList.toggle('expanded')">
<div class="compaction-label">[compaction]</div>
<div class="compaction-collapsed">Compacted from ${entry.tokensBefore.toLocaleString()} tokens</div>
<div class="compaction-content"><strong>Compacted from ${entry.tokensBefore.toLocaleString()} tokens</strong>\n\n${escapeHtml(entry.summary)}</div>
</div>`;
}
if (entry.type === 'branch_summary') {
return `<div class="branch-summary" id="${entryDomId}">${tsHtml}
<div class="branch-summary-header">Branch Summary</div>
<div class="markdown-content">${safeMarkedParse(entry.summary)}</div>
</div>`;
}
if (entry.type === 'custom_message' && entry.display) {
return `<div class="hook-message" id="${entryDomId}">${tsHtml}
<div class="hook-type">[${escapeHtml(entry.customType)}]</div>
<div class="markdown-content">${safeMarkedParse(typeof entry.content === 'string' ? entry.content : JSON.stringify(entry.content))}</div>
</div>`;
}
return '';
}
// ============================================================
// HEADER / STATS
// ============================================================
function computeStats(entryList) {
let userMessages = 0, assistantMessages = 0, toolResults = 0;
let customMessages = 0, compactions = 0, branchSummaries = 0, toolCalls = 0;
const tokens = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
const cost = { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 };
const models = new Set();
for (const entry of entryList) {
if (entry.type === 'message') {
const msg = entry.message;
if (msg.role === 'user') userMessages++;
if (msg.role === 'assistant') {
assistantMessages++;
if (msg.model) models.add(msg.provider ? `${msg.provider}/${msg.model}` : msg.model);
if (msg.usage) {
tokens.input += msg.usage.input || 0;
tokens.output += msg.usage.output || 0;
tokens.cacheRead += msg.usage.cacheRead || 0;
tokens.cacheWrite += msg.usage.cacheWrite || 0;
if (msg.usage.cost) {
cost.input += msg.usage.cost.input || 0;
cost.output += msg.usage.cost.output || 0;
cost.cacheRead += msg.usage.cost.cacheRead || 0;
cost.cacheWrite += msg.usage.cost.cacheWrite || 0;
}
}
toolCalls += msg.content.filter(c => c.type === 'toolCall').length;
}
if (msg.role === 'toolResult') toolResults++;
} else if (entry.type === 'compaction') {
compactions++;
} else if (entry.type === 'branch_summary') {
branchSummaries++;
} else if (entry.type === 'custom_message') {
customMessages++;
}
}
return { userMessages, assistantMessages, toolResults, customMessages, compactions, branchSummaries, toolCalls, tokens, cost, models: Array.from(models) };
}
const globalStats = computeStats(entries);
function renderHeader() {
const totalCost = globalStats.cost.input + globalStats.cost.output + globalStats.cost.cacheRead + globalStats.cost.cacheWrite;
const tokenParts = [];
if (globalStats.tokens.input) tokenParts.push(`↑${formatTokens(globalStats.tokens.input)}`);
if (globalStats.tokens.output) tokenParts.push(`↓${formatTokens(globalStats.tokens.output)}`);
if (globalStats.tokens.cacheRead) tokenParts.push(`R${formatTokens(globalStats.tokens.cacheRead)}`);
if (globalStats.tokens.cacheWrite) tokenParts.push(`W${formatTokens(globalStats.tokens.cacheWrite)}`);
const msgParts = [];
if (globalStats.userMessages) msgParts.push(`${globalStats.userMessages} user`);
if (globalStats.assistantMessages) msgParts.push(`${globalStats.assistantMessages} assistant`);
if (globalStats.toolResults) msgParts.push(`${globalStats.toolResults} tool results`);
if (globalStats.customMessages) msgParts.push(`${globalStats.customMessages} custom`);
if (globalStats.compactions) msgParts.push(`${globalStats.compactions} compactions`);
if (globalStats.branchSummaries) msgParts.push(`${globalStats.branchSummaries} branch summaries`);
let html = `
<div class="header">
<h1>Session: ${escapeHtml(header?.id || 'unknown')}</h1>
<div class="help-bar">
<span class="help-hint">T toggle thinking · O toggle tools</span>
<div class="help-actions">
<button type="button" class="header-toggle-btn" data-action="toggle-thinking" title="Toggle thinking (T)">Toggle thinking</button>
<button type="button" class="header-toggle-btn" data-action="toggle-tools" title="Toggle tools (O)">Toggle tools</button>
<button type="button" class="download-json-btn" onclick="downloadSessionJson()" title="Download session as JSONL">↓ JSONL</button>
</div>
</div>
<div class="header-info">
<div class="info-item"><span class="info-label">Date:</span><span class="info-value">${header?.timestamp ? new Date(header.timestamp).toLocaleString() : 'unknown'}</span></div>
<div class="info-item"><span class="info-label">Models:</span><span class="info-value">${escapeHtml(globalStats.models.join(', ') || 'unknown')}</span></div>
<div class="info-item"><span class="info-label">Messages:</span><span class="info-value">${msgParts.join(', ') || '0'}</span></div>
<div class="info-item"><span class="info-label">Tool Calls:</span><span class="info-value">${globalStats.toolCalls}</span></div>
<div class="info-item"><span class="info-label">Tokens:</span><span class="info-value">${tokenParts.join(' ') || '0'}</span></div>
<div class="info-item"><span class="info-label">Cost:</span><span class="info-value">${totalCost.toFixed(3)}</span></div>
</div>
</div>`;
// Render system prompt (user's base prompt, applies to all providers)
if (systemPrompt) {
const lines = systemPrompt.split('\n');
const previewLines = 10;
if (lines.length > previewLines) {
const preview = lines.slice(0, previewLines).join('\n');
const remaining = lines.length - previewLines;
html += `<div class="system-prompt expandable" onclick="if(window.getSelection().toString())return;this.classList.toggle('expanded')">
<div class="system-prompt-header">System Prompt</div>
<div class="system-prompt-preview">${escapeHtml(preview)}</div>
<div class="system-prompt-expand-hint">... (${remaining} more lines, click to expand)</div>
<div class="system-prompt-full">${escapeHtml(systemPrompt)}</div>
</div>`;
} else {
html += `<div class="system-prompt">
<div class="system-prompt-header">System Prompt</div>
<div class="system-prompt-full" style="display: block">${escapeHtml(systemPrompt)}</div>
</div>`;
}
}
if (tools && tools.length > 0) {
html += `<div class="tools-list">
<div class="tools-header">Available Tools</div>
<div class="tools-content">
${tools.map(t => {
const hasParams = t.parameters && typeof t.parameters === 'object' && t.parameters.properties && Object.keys(t.parameters.properties).length > 0;
if (!hasParams) {
return `<div class="tool-item"><span class="tool-item-name">${escapeHtml(t.name)}</span> - <span class="tool-item-desc">${escapeHtml(t.description)}</span></div>`;
}
const params = t.parameters;
const properties = params.properties;
const required = params.required || [];
let paramsHtml = '';
for (const [name, prop] of Object.entries(properties)) {
const isRequired = required.includes(name);
const typeStr = prop.type || 'any';
const reqLabel = isRequired ? '<span class="tool-param-required">required</span>' : '<span class="tool-param-optional">optional</span>';
paramsHtml += `<div class="tool-param"><span class="tool-param-name">${escapeHtml(name)}</span> <span class="tool-param-type">${escapeHtml(typeStr)}</span> ${reqLabel}`;
if (prop.description) {
paramsHtml += `<div class="tool-param-desc">${escapeHtml(prop.description)}</div>`;
}
paramsHtml += `</div>`;
}
return `<div class="tool-item" onclick="if(window.getSelection().toString())return;this.classList.toggle('params-expanded')"><span class="tool-item-name">${escapeHtml(t.name)}</span> - <span class="tool-item-desc">${escapeHtml(t.description)}</span> <span class="tool-params-hint"></span><div class="tool-params-content">${paramsHtml}</div></div>`;
}).join('')}
</div>
</div>`;
}
return html;
}
// ============================================================
// NAVIGATION
// ============================================================
// Cache for rendered entry DOM nodes
const entryCache = new Map();
function getScrollTargetElementId(entryId) {
const entry = byId.get(entryId);
if (entry?.type === 'message' && entry.message.role === 'toolResult' && entry.message.toolCallId) {
// getElementById() matches the parsed DOM id attribute, whose HTML entities
// were already resolved from the escaped id rendered by renderToolCall().
return `tool-call-${entry.message.toolCallId}`;
}
return `entry-${entryId}`;
}
function renderEntryToNode(entry) {
// Check cache first
if (entryCache.has(entry.id)) {
return entryCache.get(entry.id).cloneNode(true);
}
// Render to HTML string, then parse to node
const html = renderEntry(entry);
if (!html) return null;
const template = document.createElement('template');
template.innerHTML = html;
const node = template.content.firstElementChild;
// Cache the node
if (node) {
entryCache.set(entry.id, node.cloneNode(true));
}
return node;
}
function navigateTo(targetId, scrollMode = 'target', scrollToEntryId = null) {
currentLeafId = targetId;
currentTargetId = scrollToEntryId || targetId;
const path = getPath(targetId);
renderTree();
document.getElementById('header-container').innerHTML = renderHeader();
attachHeaderHandlers();
// Build messages using cached DOM nodes
const messagesEl = document.getElementById('messages');
const fragment = document.createDocumentFragment();
for (const entry of path) {
const node = renderEntryToNode(entry);
if (node) {
fragment.appendChild(node);
}
}
messagesEl.innerHTML = '';
messagesEl.appendChild(fragment);
// Attach click handlers for copy-link buttons
messagesEl.querySelectorAll('.copy-link-btn').forEach(btn => {
btn.addEventListener('click', (e) => {
e.stopPropagation();
const entryId = btn.dataset.entryId;
const shareUrl = buildShareUrl(entryId);
copyToClipboard(shareUrl, btn);
});
});
// Use setTimeout(0) to ensure DOM is fully laid out before scrolling
setTimeout(() => {
const content = document.getElementById('content');
if (scrollMode === 'bottom') {
content.scrollTop = content.scrollHeight;
} else if (scrollMode === 'target') {
// If scrollToEntryId is provided, scroll to that specific entry.
// Tool result entries are rendered inside their assistant tool-call block,
// so route them to the visible tool-call element instead.
const scrollTargetId = scrollToEntryId || targetId;
const targetEl = document.getElementById(getScrollTargetElementId(scrollTargetId)) ||
document.getElementById(`entry-${scrollTargetId}`);
if (targetEl) {
targetEl.scrollIntoView({ block: 'center' });
// Briefly highlight the target message
if (scrollToEntryId) {
targetEl.classList.add('highlight');
setTimeout(() => targetEl.classList.remove('highlight'), 2000);
}
}
}
}, 0);
}
// ============================================================
// INITIALIZATION
// ============================================================
// Configure marked with syntax highlighting and TUI-compatible HTML handling
const strictStrikethroughRegex = /^(~~)(?=[^\s~])((?:\\.|[^\\])*?(?:\\.|[^\s~\\]))\1(?=[^~]|$)/;
marked.use({
breaks: true,
gfm: true,
tokenizer: {
// Treat HTML-like input as plain text so tags are shown verbatim,
// matching the TUI markdown renderer.
html() {
return undefined;
},
tag() {
return undefined;
},
del(src) {
const match = strictStrikethroughRegex.exec(src);
if (!match) return undefined;
return {
type: 'del',
raw: match[0],
text: match[2],
tokens: this.lexer.inlineTokens(match[2])
};
}
},
renderer: {
// Sanitize link URLs with a scheme allow-list. Browsers strip C0
// controls from schemes, so strip them before checking and emitting.
link(token) {
const href = sanitizeMarkdownUrl(token.href);
if (href === null) {
return this.parser.parseInline(token.tokens);
}
let out = '<a href="' + escapeHtml(href) + '"';
if (token.title) {
out += ' title="' + escapeHtml(token.title) + '"';
}
out += '>' + this.parser.parseInline(token.tokens) + '</a>';
return out;
},
// Sanitize image src URLs with the same scheme allow-list.
image(token) {
const href = sanitizeMarkdownUrl(token.href);
if (href === null) {
return escapeHtml(token.text || '');
}
let out = '<img src="' + escapeHtml(href) + '" alt="' + escapeHtml(token.text || '') + '"';
if (token.title) {
out += ' title="' + escapeHtml(token.title) + '"';
}
out += '>';
return out;
},
// Code blocks: syntax highlight, no HTML escaping
code(token) {
const code = token.text;
const lang = token.lang;
let highlighted;
if (lang && hljs.getLanguage(lang)) {
try {
highlighted = hljs.highlight(code, { language: lang }).value;
} catch {
highlighted = escapeHtml(code);
}
} else {
// Auto-detect language if not specified
try {
highlighted = hljs.highlightAuto(code).value;
} catch {
highlighted = escapeHtml(code);
}
}
return `<pre><code class="hljs">${highlighted}</code></pre>`;
},
// Inline code: escape HTML
codespan(token) {
return `<code>${escapeHtml(token.text)}</code>`;
}
}
});
// Simple marked parse (escaping handled in renderers)
function safeMarkedParse(text) {
return marked.parse(text);
}
// Search input
const searchInput = document.getElementById('tree-search');
searchInput.addEventListener('input', (e) => {
searchQuery = e.target.value;
forceTreeRerender();
});
// Filter buttons
document.querySelectorAll('.filter-btn').forEach(btn => {
btn.addEventListener('click', () => {
document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
btn.classList.add('active');
filterMode = btn.dataset.filter;
forceTreeRerender();
});
});
// Sidebar toggle
const sidebar = document.getElementById('sidebar');
const overlay = document.getElementById('sidebar-overlay');
const hamburger = document.getElementById('hamburger');
const sidebarResizer = document.getElementById('sidebar-resizer');
const SIDEBAR_WIDTH_STORAGE_KEY = 'pi-share:v1:sidebar-width';
const MIN_CONTENT_WIDTH = 320;
function isMobileLayout() {
return window.matchMedia('(max-width: 900px)').matches;
}
function getSidebarBounds() {
const rootStyles = getComputedStyle(document.documentElement);
const minWidth = parseFloat(rootStyles.getPropertyValue('--sidebar-min-width')) || 240;
const maxWidth = parseFloat(rootStyles.getPropertyValue('--sidebar-max-width')) || 720;
const viewportMaxWidth = window.innerWidth - MIN_CONTENT_WIDTH;
return {
minWidth,
maxWidth: Math.max(minWidth, Math.min(maxWidth, viewportMaxWidth))
};
}
function clampSidebarWidth(width) {
const { minWidth, maxWidth } = getSidebarBounds();
return Math.max(minWidth, Math.min(maxWidth, width));
}
function applySidebarWidth(width) {
document.documentElement.style.setProperty('--sidebar-width', `${Math.round(clampSidebarWidth(width))}px`);
}
function loadSidebarWidth() {
try {
const raw = localStorage.getItem(SIDEBAR_WIDTH_STORAGE_KEY);
if (raw === null) return null;
const width = Number(raw);
return Number.isFinite(width) ? width : null;
} catch {
return null;
}
}
function saveSidebarWidth(width) {
try {
localStorage.setItem(SIDEBAR_WIDTH_STORAGE_KEY, String(Math.round(clampSidebarWidth(width))));
} catch {
// Ignore storage failures (e.g. private browsing restrictions)
}
}
function setupSidebarResize() {
const savedWidth = loadSidebarWidth();
if (savedWidth !== null) {
applySidebarWidth(savedWidth);
}
if (!sidebarResizer) return;
let cleanupDrag = null;
const stopDrag = (pointerId) => {
if (cleanupDrag) {
cleanupDrag(pointerId);
cleanupDrag = null;
}
};
sidebarResizer.addEventListener('pointerdown', (e) => {
if (isMobileLayout()) return;
e.preventDefault();
const startX = e.clientX;
const startWidth = sidebar.getBoundingClientRect().width;
document.body.classList.add('sidebar-resizing');
sidebarResizer.setPointerCapture?.(e.pointerId);
const onPointerMove = (event) => {
applySidebarWidth(startWidth + (event.clientX - startX));
};
cleanupDrag = (pointerIdToRelease) => {
document.body.classList.remove('sidebar-resizing');
sidebarResizer.releasePointerCapture?.(pointerIdToRelease);
window.removeEventListener('pointermove', onPointerMove);
window.removeEventListener('pointerup', onPointerUp);
window.removeEventListener('pointercancel', onPointerCancel);
saveSidebarWidth(sidebar.getBoundingClientRect().width);
};
const onPointerUp = (event) => stopDrag(event.pointerId);
const onPointerCancel = (event) => stopDrag(event.pointerId);
window.addEventListener('pointermove', onPointerMove);
window.addEventListener('pointerup', onPointerUp);
window.addEventListener('pointercancel', onPointerCancel);
});
sidebarResizer.addEventListener('dblclick', () => {
if (isMobileLayout()) return;
applySidebarWidth(400);
saveSidebarWidth(400);
});
window.addEventListener('resize', () => {
if (isMobileLayout()) return;
applySidebarWidth(sidebar.getBoundingClientRect().width);
});
}
setupSidebarResize();
hamburger.addEventListener('click', () => {
sidebar.classList.add('open');
overlay.classList.add('open');
hamburger.style.display = 'none';
});
const closeSidebar = () => {
sidebar.classList.remove('open');
overlay.classList.remove('open');
hamburger.style.display = '';
};
overlay.addEventListener('click', closeSidebar);
document.getElementById('sidebar-close').addEventListener('click', closeSidebar);
// Toggle states
let thinkingExpanded = true;
let toolOutputsExpanded = false;
const toggleThinking = () => {
thinkingExpanded = !thinkingExpanded;
document.querySelectorAll('.thinking-text').forEach(el => {
el.style.display = thinkingExpanded ? '' : 'none';
});
document.querySelectorAll('.thinking-collapsed').forEach(el => {
el.style.display = thinkingExpanded ? 'none' : 'block';
});
};
const toggleToolOutputs = () => {
toolOutputsExpanded = !toolOutputsExpanded;
document.querySelectorAll('.tool-output.expandable').forEach(el => {
el.classList.toggle('expanded', toolOutputsExpanded);
});
document.querySelectorAll('.compaction').forEach(el => {
el.classList.toggle('expanded', toolOutputsExpanded);
});
document.querySelectorAll('.skill-invocation').forEach(el => {
el.classList.toggle('expanded', toolOutputsExpanded);
});
};
const attachHeaderHandlers = () => {
document.querySelector('[data-action="toggle-thinking"]')?.addEventListener('click', toggleThinking);
document.querySelector('[data-action="toggle-tools"]')?.addEventListener('click', toggleToolOutputs);
};
const isEditableTarget = (element) => {
if (!element) return false;
const tagName = element.tagName;
if (tagName === 'INPUT' || tagName === 'TEXTAREA' || tagName === 'SELECT' || tagName === 'BUTTON') {
return true;
}
return element.isContentEditable || Boolean(element.closest?.('[contenteditable="true"]'));
};
// Keyboard shortcuts
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
searchInput.value = '';
searchQuery = '';
navigateTo(leafId, 'bottom');
}
if (isEditableTarget(document.activeElement)) {
return;
}
const key = e.key.toLowerCase();
if (key === 't') {
e.preventDefault();
toggleThinking();
} else if (key === 'o') {
e.preventDefault();
toggleToolOutputs();
}
});
// Initial render
// If URL has targetId, scroll to that specific message; otherwise stay at top
if (leafId) {
if (urlTargetId && byId.has(urlTargetId)) {
// Deep link: navigate to leaf and scroll to target message
navigateTo(leafId, 'target', urlTargetId);
} else {
navigateTo(leafId, 'none');
}
} else if (entries.length > 0) {
// Fallback: use last entry if no leafId
navigateTo(entries[entries.length - 1].id, 'none');
}
})();
</script>
</body>
</html>
|