tiny-markdown-editor 0.2.30 → 0.2.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tiny-mde.js +2 -2
- package/dist/tiny-mde.min.js +1 -1
- package/lib/svg/svg.js +16 -116
- package/package.json +1 -1
package/dist/tiny-mde.js
CHANGED
|
@@ -2584,7 +2584,7 @@
|
|
|
2584
2584
|
ol: "<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>",
|
|
2585
2585
|
redo: "<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>",
|
|
2586
2586
|
strikethrough: "<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>",
|
|
2587
|
-
tasklist: "
|
|
2587
|
+
tasklist: "<svg\n height=\"18\"\n width=\"18\"\n>\n <path\n d=\"M 2.3339844,1 C 1.6039663,1 1,1.6039663 1,2.3339844 V 5.6660156 C 1,6.3960337 1.6039663,7 2.3339844,7 H 5.6660156 C 6.3960337,7 7,6.3960337 7,5.6660156 V 2.3339844 C 7,1.6039663 6.3960337,1 5.6660156,1 Z m 0,1 H 5.6660156 C 5.8593309,2 6,2.1406691 6,2.3339844 V 5.6660156 C 6,5.8593309 5.8593309,6 5.6660156,6 H 2.3339844 C 2.1406691,6 2,5.8593309 2,5.6660156 V 2.3339844 C 2,2.1406691 2.1406691,2 2.3339844,2 Z\"\n />\n <path\n d=\"M 2.3339844,11 C 1.6039663,11 1,11.603966 1,12.333984 v 3.332032 C 1,16.396034 1.6039663,17 2.3339844,17 H 5.6660156 C 6.3960337,17 7,16.396034 7,15.666016 V 12.333984 C 7,11.603966 6.3960337,11 5.6660156,11 Z m 0,1 H 5.6660156 C 5.8593309,12 6,12.140669 6,12.333984 v 3.332032 C 6,15.859331 5.8593309,16 5.6660156,16 H 2.3339844 C 2.1406691,16 2,15.859331 2,15.666016 V 12.333984 C 2,12.140669 2.1406691,12 2.3339844,12 Z\"\n />\n <path\n d=\"m 10,3 h 7 c 0.554,0 1,0.446 1,1 0,0.554 -0.446,1 -1,1 H 10 C 9.446,5 9,4.554 9,4 9,3.446 9.446,3 10,3 Z\" />\n <path\n d=\"m 10,13 h 7 c 0.554,0 1,0.446 1,1 0,0.554 -0.446,1 -1,1 H 10 C 9.446,15 9,14.554 9,14 9,13.446 9.446,13 10,13 Z\" />\n <path\n d=\"M 4.8417969,2.5253906 A 0.5,0.5 0 0 0 4.5527344,2.7773438 L 3.8632813,4.15625 3.3535156,3.6464844 a 0.5,0.5 0 0 0 -0.7070312,0 0.5,0.5 0 0 0 0,0.7070312 l 1,1 A 0.50005,0.50005 0 0 0 4.4472656,5.2226562 l 1,-1.9999999 A 0.5,0.5 0 0 0 5.2226562,2.5527344 0.5,0.5 0 0 0 4.8417969,2.5253906 Z\"\n />\n</svg>",
|
|
2588
2588
|
ul: "<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>",
|
|
2589
2589
|
undo: "<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n"
|
|
2590
2590
|
};
|
|
@@ -6309,4 +6309,4 @@
|
|
|
6309
6309
|
}));
|
|
6310
6310
|
//# sourceMappingURL=index.js.map
|
|
6311
6311
|
|
|
6312
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9tLXRva2VuLWxpc3QtcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsInNyYy9zdmcvc3ZnLnRzIiwic3JjL1RpbnlNREVDb21tYW5kQmFyLnRzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsInNyYy9ncmFtbWFyLnRzIiwic3JjL1RpbnlNREUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiZcbiAgIVN5bWJvbC5zaGFtICYmXG4gIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNDIuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDIuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJ2EnLCAneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnYWJjZCcpICE9PSBudWxsO1xufSk7XG5cbi8vIFVDIEJyb3dzZXIgYnVnXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTAwOFxudmFyIE1JU1NFRF9TVElDS1kgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEkUmVnRXhwKCdhJywgJ3knKS5zdGlja3k7XG59KTtcblxudmFyIEJST0tFTl9DQVJFVCA9IFVOU1VQUE9SVEVEX1kgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM2ODdcbiAgdmFyIHJlID0gJFJlZ0V4cCgnXnInLCAnZ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ3N0cicpICE9PSBudWxsO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCUk9LRU5fQ0FSRVQ6IEJST0tFTl9DQVJFVCxcbiAgTUlTU0VEX1NUSUNLWTogTUlTU0VEX1NUSUNLWSxcbiAgVU5TVVBQT1JURURfWTogVU5TVVBQT1JURURfWVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWFzc2lnbm1lbnQgLS0gYXZvaWQgbWVtb3J5IGxlYWtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdzJykgLT4gLy4vcyBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnLicsICdzJyk7XG4gIHJldHVybiAhKHJlLmRvdEFsbCAmJiByZS50ZXN0KCdcXG4nKSAmJiByZS5mbGFncyA9PT0gJ3MnKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJyg/PGE+YiknLCAnZycpIC0+IC8oPzxhPmIpL2cgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgY2FsbChuYXRpdmVFeGVjLCByZTEsICdhJyk7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRztcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHJpbmcpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocmUpO1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByYXcgPSBzdGF0ZS5yYXc7XG4gICAgdmFyIHJlc3VsdCwgcmVDb3B5LCBsYXN0SW5kZXgsIG1hdGNoLCBpLCBvYmplY3QsIGdyb3VwO1xuXG4gICAgaWYgKHJhdykge1xuICAgICAgcmF3Lmxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIHJlc3VsdCA9IGNhbGwocGF0Y2hlZEV4ZWMsIHJhdywgc3RyKTtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJhdy5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHM7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IGNhbGwocmVnZXhwRmxhZ3MsIHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gcmVwbGFjZShmbGFncywgJ3knLCAnJyk7XG4gICAgICBpZiAoaW5kZXhPZihmbGFncywgJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gc3RyaW5nU2xpY2Uoc3RyLCByZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgY2hhckF0KHN0ciwgcmUubGFzdEluZGV4IC0gMSkgIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IGNhbGwobmF0aXZlRXhlYywgc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gc3RyaW5nU2xpY2UobWF0Y2guaW5wdXQsIGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IHN0cmluZ1NsaWNlKG1hdGNoWzBdLCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24ndCB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZXhlY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUuZXhlY1xuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGluIG9sZCBXZWJLaXQgdmVyc2lvbnMsIGBlbGVtZW50LmNsYXNzTGlzdGAgaXMgbm90IGFuIGluc3RhbmNlIG9mIGdsb2JhbCBgRE9NVG9rZW5MaXN0YFxudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG52YXIgY2xhc3NMaXN0ID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdzcGFuJykuY2xhc3NMaXN0O1xudmFyIERPTVRva2VuTGlzdFByb3RvdHlwZSA9IGNsYXNzTGlzdCAmJiBjbGFzc0xpc3QuY29uc3RydWN0b3IgJiYgY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01Ub2tlbkxpc3RQcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgPyB1bmRlZmluZWQgOiBET01Ub2tlbkxpc3RQcm90b3R5cGU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIFVOU0NPUEFCTEVTID0gd2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmlmIChBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU10gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gJE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIFRBRywgU1RBVElDKSB7XG4gIGlmICh0YXJnZXQgJiYgIVNUQVRJQykgdGFyZ2V0ID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgaWYgKHRhcmdldCAmJiAhaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc09iamVjdChhcmd1bWVudCkgfHwgYXJndW1lbnQgPT09IG51bGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc1Bvc3NpYmxlUHJvdG90eXBlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIHJlcXVpcmVPYmplY3RDb2VyY2libGUoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gTztcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSBudWxsO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgRE9NVG9rZW5MaXN0UHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS10b2tlbi1saXN0LXByb3RvdHlwZScpO1xudmFyIEFycmF5SXRlcmF0b3JNZXRob2RzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9yTWV0aG9kcy52YWx1ZXM7XG5cbnZhciBoYW5kbGVQcm90b3R5cGUgPSBmdW5jdGlvbiAoQ29sbGVjdGlvblByb3RvdHlwZSwgQ09MTEVDVElPTl9OQU1FKSB7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlKSB7XG4gICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdICE9PSBBcnJheVZhbHVlcykgdHJ5IHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSA9IEFycmF5VmFsdWVzO1xuICAgIH1cbiAgICBzZXRUb1N0cmluZ1RhZyhDb2xsZWN0aW9uUHJvdG90eXBlLCBDT0xMRUNUSU9OX05BTUUsIHRydWUpO1xuICAgIGlmIChET01JdGVyYWJsZXNbQ09MTEVDVElPTl9OQU1FXSkgZm9yICh2YXIgTUVUSE9EX05BTUUgaW4gQXJyYXlJdGVyYXRvck1ldGhvZHMpIHtcbiAgICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdICE9PSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pIHRyeSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBNRVRIT0RfTkFNRSwgQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdID0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICBoYW5kbGVQcm90b3R5cGUoZ2xvYmFsVGhpc1tDT0xMRUNUSU9OX05BTUVdICYmIGdsb2JhbFRoaXNbQ09MTEVDVElPTl9OQU1FXS5wcm90b3R5cGUsIENPTExFQ1RJT05fTkFNRSk7XG59XG5cbmhhbmRsZVByb3RvdHlwZShET01Ub2tlbkxpc3RQcm90b3R5cGUsICdET01Ub2tlbkxpc3QnKTtcbiIsImNvbnN0IHN2ZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgYmxvY2txdW90ZTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHJlY3Qgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiIHg9XCIzXCIgeT1cIjRcIiByeT1cIjFcIi8+PHJlY3Qgcnk9XCIxXCIgeT1cIjRcIiB4PVwiMTBcIiBoZWlnaHQ9XCI1XCIgd2lkdGg9XCI1XCIvPjxwYXRoIGQ9XCJNOCA2Ljk5OXYzYzAgMS0xIDMtMSAzcy0uMzMxIDEtMS4zMzEgMWgtMWMtMSAwLS42NjktMS0uNjY5LTFzMS0yIDEtM3YtM3ptNyAwdjNjMCAxLTEgMy0xIDNzLS4zMzEgMS0xLjMzMSAxaC0xYy0xIDAtLjY2OS0xLS42NjktMXMxLTIgMS0zdi0zelwiLz48L3N2Zz5gLFxuICBib2xkOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTQgMmExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoNmM0IDAgNS0yIDUtNCAwLTEuMzIyLS40MzQtMi42MzYtMS44ODUtMy4zODFDMTMuNzcyIDcuODg1IDE0IDYuOTQ1IDE0IDZjMC0yLTEtNC01LTR6bTEgMmg0YzEuNjY4IDAgMi4zMi4zOTMgMi42LjY3Mi4yOC4yNzkuNC42NjIuNCAxLjMyOHMtLjEyIDEuMDU3LS40IDEuMzM4Yy0uMjc1LjI3NC0xLjAxNC42NDYtMi42LjY2Mkg1em01IDZjMS42NjYuMDA1IDIuMzE4LjM4OCAyLjU5Ni42NjYuMjc3LjI3OC40MDQuNjY3LjQwNCAxLjMzNHMtLjEyNyAxLjA2LS40MDQgMS4zMzhjLS4yNzguMjc4LS45My42Ni0yLjU5Ni42NjJsLTQuOTkyLjAwNEw1IDEwelwiLz48L3N2Zz5gLFxuICBjbGVhcl9mb3JtYXR0aW5nOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTExLjAzIDFhMSAxIDAgMDAtLjc0LjNsLTkgOWExIDEgMCAwMDAgMS40bDQgNEExIDEgMCAwMDYgMTZoMmExIDEgMCAwMC43LS4zbDgtOGExIDEgMCAwMDAtMS40bC01LTVhMSAxIDAgMDAtLjY3LS4zek04LjcgNS43bDMuNTggMy42TDcuNiAxNEg2LjRsLTMtMyA1LjMtNS4zelwiLz48cmVjdCByeT1cIi44XCIgcng9XCIuOFwiIHk9XCIxNFwiIHg9XCIxNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjJcIi8+PHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHg9XCIxM1wiIHk9XCIxNFwiIHJ4PVwiLjhcIiByeT1cIi44XCIvPjxyZWN0IHJ5PVwiLjhcIiByeD1cIi44XCIgeT1cIjE0XCIgeD1cIjEwXCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMlwiLz48L3N2Zz5gLFxuICBjb2RlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTEzLjUgMi45OTRhLjUuNSAwIDAwLS41LjUuNS41IDAgMDAwIC4wMzRWNC41M2E1Ljk5MyA1Ljk5MyAwIDAwLTcuNDUxLS40NDVBNiA2IDAgMTAxMi40NSAxMy45YTUuOTkgNS45OSAwIDAwMS4zNDYtMS4zMzQuNS41IDAgMDAuMDk2LS4xMDEuNS41IDAgMDAtLjEyLS42OTguNS41IDAgMDAtLjY5Ny4xMmwtLjAwNC0uMDA1YTUgNSAwIDAxLTEuMTk3IDEuMiA1IDUgMCAxMTEuMjE1LTYuOTY1LjUuNSAwIDAwLjY5Ny4xMi41LjUgMCAwMC4yMTEtLjQ0VjQuNzQ1SDE0VjMuNDkzYS41LjUgMCAwMC0uNS0uNXpcIi8+PC9zdmc+YCxcbiAgaDE6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMyAyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXY2aDZWMnMwLTEgMS0xaDFjMSAwIDEgMSAxIDF2MTRzMCAxLTEgMWgtMWMtMSAwLTEtMS0xLTF2LTZINnY2czAgMS0xIDFINGMtMSAwLTEtMS0xLTF6XCIvPjwvc3ZnPmAsXG4gIGgyOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTQgMnMwLTEgMS0xIDEgMSAxIDF2NmMxLTEgMi0xIDQtMSAzIDAgNCAyIDQgNHY1czAgMS0xIDEtMS0xLTEtMXYtNWMwLTEuMDk0LTEtMi0yLTItMiAwLTMgMC00IDJ2NXMwIDEtMSAxLTEtMS0xLTF6XCIvPjwvc3ZnPmAsXG4gIGhyOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCByeT1cIjFcIiB5PVwiOFwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjE4XCIvPjwvc3ZnPmAsXG4gIGltYWdlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTEgMnYxNGgxNlYySDF6bTIgMmgxMnY3bC0zLTMtNCA0LTItMi0zIDNWNHpcIi8+PGNpcmNsZSByPVwiMS41XCIgY3k9XCI2LjVcIiBjeD1cIjUuNVwiLz48L3N2Zz5gLFxuICBpdGFsaWM6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNOSAyYTEgMSAwIDAwMCAyTDcgMTRhMSAxIDAgMTAwIDJoMmExIDEgMCAwMDAtMmwyLTEwYTEgMSAwIDEwMC0yelwiLz48L3N2Zz5gLFxuICBsaW5rOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTkuMDcgNS4xOGEzLjkgMy45IDAgMDAtMS41Mi40M0M2LjMxIDYuMjIgNS4zIDcuMjkgNC4zIDguMjljLTEgMS0yLjA3IDIuMDItMi42OCAzLjI2LS4zMS42Mi0uNSAxLjMzLS40MSAyLjA3LjA5Ljc1LjQ4IDEuNDcgMS4xIDIuMDkuNjEuNjEgMS4zMyAxIDIuMDggMS4xLjc0LjA5IDEuNDUtLjEgMi4wNy0uNDIgMS4yNC0uNjEgMi4yNi0xLjY4IDMuMjYtMi42OC40Ni0uNDcuOTQtLjk0IDEuMzktMS40NGwtLjQzLjI2Yy0uNjguMzQtMS40OS41Ni0yLjM2LjQ2LS4yLS4wMy0uNC0uMDgtLjYtLjE0LS43OS43Ni0xLjU1IDEuNDUtMi4xNiAxLjc2LS4zOC4xOS0uNjcuMjQtLjkyLjIxLS4yNi0uMDMtLjU0LS4xNC0uOTItLjUzLS4zOS0uMzgtLjUtLjY2LS41My0uOTEtLjAzLS4yNi4wMi0uNTUuMjEtLjkzLjM5LS43NiAxLjMyLTEuNzQgMi4zMi0yLjc0IDEtMSAxLjk4LTEuOTMgMi43NC0yLjMyLjM4LS4xOS42Ny0uMjQuOTMtLjIxLjI1LjAzLjUzLjE0LjkxLjUzLjM5LjM4LjUuNjYuNTMuOTJ2LjA2bDEuMTItMS4wNi40NC0uNDdjLS4xOC0uMy0uNC0uNi0uNjctLjg3LS42Mi0uNjEtMS4zNC0xLTIuMDktMS4xYTMuMDggMy4wOCAwIDAwLS41NS0uMDF6XCIvPjxwYXRoIGQ9XCJNMTMuMDcuODZhMy45IDMuOSAwIDAwLTEuNTIuNDNjLTEuMjQuNjItMi4yNiAxLjY5LTMuMjYgMi42OS0uNDYuNDctLjk0Ljk0LTEuMzkgMS40My4xNS0uMDguMjgtLjE4LjQzLS4yNWE0LjQgNC40IDAgMDEyLjM2LS40NmMuMi4wMi40LjA3LjYuMTQuNzktLjc3IDEuNTUtMS40NiAyLjE2LTEuNzYuMzgtLjE5LjY3LS4yNS45My0uMjEuMjUuMDMuNTMuMTQuOTEuNTIuMzkuMzguNS42Ni41My45Mi4wMy4yNi0uMDIuNTUtLjIxLjkzLS4zOS43Ni0xLjMyIDEuNzQtMi4zMiAyLjc0LTEgMS0xLjk4IDEuOTMtMi43NCAyLjMxLS4zOC4yLS42Ny4yNS0uOTMuMjItLjI1LS4wNC0uNTMtLjE1LS45MS0uNTMtLjM5LS4zOC0uNS0uNjYtLjUzLS45MlY5Yy0uMzYuMzMtLjczLjY3LTEuMTIgMS4wNmwtLjQzLjQ2Yy4xNy4zLjQuNi42Ni44Ny42Mi42MiAxLjM0IDEgMi4wOCAxLjEuNzUuMSAxLjQ2LS4xIDIuMDgtLjQxIDEuMjQtLjYyIDIuMjYtMS42OSAzLjI2LTIuNjlzMi4wNy0yLjAyIDIuNjgtMy4yNmMuMzEtLjYyLjUtMS4zMi40MS0yLjA3YTMuNjMgMy42MyAwIDAwLTEuMS0yLjA4Yy0uNjEtLjYyLTEuMzMtMS0yLjA3LTEuMWEzLjA4IDMuMDggMCAwMC0uNTYtLjAyelwiLz48L3N2Zz5gLFxuICBvbDogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0xLjUgN2EuNS41IDAgMTAwIDFoMWEuNS41IDAgMDEuNS41YzAgLjE2NC0uMDguMzEtLjE0LjM1NWwtMS42NTUgMS4yNUEuNDkyLjQ5MiAwIDAwMSAxMC41YS41LjUgMCAwMC41LjVoMmEuNS41IDAgMDAwLTFIM2wuMzk4LS4yOTlBMS41IDEuNSAwIDAwMi41IDd6XCIvPjxwYXRoIGQ9XCJNMS41IDEyYy0uNjY3IDAtLjY2NyAxIDAgMWgxLjI1Yy4zMzMgMCAuMzMzLjUgMCAuNUgyLjVjLS42NjcgMC0uNjY3IDEgMCAxaC4yNWMuMzMzIDAgLjMzMy41IDAgLjVIMS41Yy0uNjY3IDAtLjY2NyAxIDAgMWgxYy4zOTggMCAuNzgtLjEzMSAxLjA2LS4zNjUuMjgyLS4yMzUuNDQtLjU1NC40NC0uODg1YTEuMTIxIDEuMTIxIDAgMDAtLjMwMy0uNzVjLjE5MS0uMjA0LjMtLjQ3LjMwMy0uNzUgMC0uMzMyLS4xNTgtLjY1MS0uNDQtLjg4NS0uMy0uMjQxLS42NzUtLjM3LTEuMDYtLjM2NXpcIi8+PHJlY3QgeT1cIjEzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48cmVjdCByeT1cIjFcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMlwiIHg9XCI2XCIgeT1cIjhcIi8+PHJlY3QgeT1cIjNcIiB4PVwiNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjEyXCIgcnk9XCIxXCIvPjxwYXRoIGQ9XCJNMS41IDJhLjUuNSAwIDEwMCAxSDJ2MmgtLjVhLjUuNSAwIDEwMCAxaDJhLjUuNSAwIDEwMC0xSDNWMi41YzAtLjI3Ny0uMjIzLS41LS41LS41elwiLz48L3N2Zz5gLFxuICByZWRvOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTSA3LjI2OTUzMDgsMi43MDUwNzgxIEMgOC4xMTI4NzU1LDIuNzA4MTU4MSA4Ljk1Mjk4OTUsMi44NzEyMTU2IDkuNzMwNDY5LDMuMTM0NzY1NiAxMS40MDg4NzQsMy43MDM3MTIxIDEyLjkwMTQyLDQuNjg0NzEwNCAxNCw1LjYzNjcxODggViA0IGggMiBWIDkgSCAxMSBWIDcgaCAxLjUwOTc2NSBDIDExLjU5MDc1LDYuMjQ4NTE3MyAxMC4zNDAyMDgsNS40NTM4MDggOS4wODc4OTA0LDUuMDI5Mjk2OSA3LjQzMDkzOTgsNC40Njc2MjMxIDUuOTQ1MzQ1OCw0LjQ2ODcxNyA0LjcwNzAzMDgsNS43MDcwMzEyIGMgLTEuMjI1MDE0LDEuMjI1MDE0MiAtMS40MDk3NjksMi43MjA2OTUzIC0wLjc3OTI5Nyw0LjI5Njg3NDggMC42MzA0NzIsMS41NzYxOCAyLjE2NzQ3NSwzLjE1ODAwNiA0LjQ0MzM1OTgsNC4wNjgzNiBsIC0wLjc0MjE4NzgsMS44NTU0NjggYyAtMi43MjQxMTUsLTEuMDg5NjQ2IC00LjY4NzExMiwtMy4wMDc4MiAtNS41NTY2NCwtNS4xODE2NCAtMC44Njk1MjgsLTIuMTczODIwNiAtMC41NTQyODMsLTQuNjc4MTM5MyAxLjIyMDcwMywtNi40NTMxMjUyIDAuOTIzODU3LC0wLjkyMzg1NjggMi4wMTUzODgsLTEuMzg4ODI4IDMuMTM0NzY1LC0xLjUzNTE1NjMgMC4yNzk4NDUsLTAuMDM2NTgyIDAuNTYwNjgyLC0wLjA1Mzc2MSAwLjg0MTc5NywtMC4wNTI3MzQgelwiIC8+PC9zdmc+YCxcbiAgc3RyaWtldGhyb3VnaDogYDxzdmcgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCI+PHBhdGggZD1cIk0xMCAyQzYgMiA0IDQgNCA2YzAgLjMzOC4wOC42NzIuMTkzIDFoMi4zNEM2LjExMyA2LjYyOSA2IDYuMjk1IDYgNmMwLS4zMzQuMTE3LS43MjUuNjkxLTEuMTU0QzcuMjY1IDQuNDE2IDguMzMxIDQgMTAgNGgzYTEgMSAwIDAwMC0yem0xLjQ3NyA5Yy40MTMuMzY4LjUyMy43MDYuNTIzIDEgMCAuMzM0LS4xMjcuNzEyLS43MDEgMS4xNDMtLjU3NS40My0xLjYzMi44NS0zLjI5OS44NTdsLTEuMDA2LjAwN1YxNEg1YTEgMSAwIDAwMCAyaDNjNCAwIDYtMiA2LTQgMC0uMzM4LS4wODEtLjY3Mi0uMTk1LTF6XCIvPjxyZWN0IHJ5PVwiMVwiIHk9XCI4XCIgeD1cIjFcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxNlwiLz48L3N2Zz5gLFxuICB0YXNrbGlzdDogYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCIgc3RhbmRhbG9uZT1cIm5vXCI/PlxuPHN2Z1xuICAgaGVpZ2h0PVwiMThcIlxuICAgd2lkdGg9XCIxOFwiXG4gICB2ZXJzaW9uPVwiMS4xXCJcbiAgIGlkPVwic3ZnNFwiXG4gICBzb2RpcG9kaTpkb2NuYW1lPVwidGFza2xpc3Quc3ZnXCJcbiAgIGlua3NjYXBlOnZlcnNpb249XCIxLjQgKGU3YzNmZWIxLCAyMDI0LTEwLTA5KVwiXG4gICB4bWxuczppbmtzY2FwZT1cImh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGVcIlxuICAgeG1sbnM6c29kaXBvZGk9XCJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZFwiXG4gICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgIHhtbG5zOnN2Zz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gIDxkZWZzXG4gICAgIGlkPVwiZGVmczRcIiAvPlxuICA8c29kaXBvZGk6bmFtZWR2aWV3XG4gICAgIGlkPVwibmFtZWR2aWV3NFwiXG4gICAgIHBhZ2Vjb2xvcj1cIiNmZmZmZmZcIlxuICAgICBib3JkZXJjb2xvcj1cIiMwMDAwMDBcIlxuICAgICBib3JkZXJvcGFjaXR5PVwiMC4yNVwiXG4gICAgIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PVwiMlwiXG4gICAgIGlua3NjYXBlOnBhZ2VvcGFjaXR5PVwiMC4wXCJcbiAgICAgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD1cIjBcIlxuICAgICBpbmtzY2FwZTpkZXNrY29sb3I9XCIjZDFkMWQxXCJcbiAgICAgc2hvd2dyaWQ9XCJ0cnVlXCJcbiAgICAgaW5rc2NhcGU6em9vbT1cIjI0LjkzNDA0NFwiXG4gICAgIGlua3NjYXBlOmN4PVwiOS4zODQ3NTkxXCJcbiAgICAgaW5rc2NhcGU6Y3k9XCI3LjgyMDYzMjZcIlxuICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9XCIxMjAwXCJcbiAgICAgaW5rc2NhcGU6d2luZG93LWhlaWdodD1cIjEwMjdcIlxuICAgICBpbmtzY2FwZTp3aW5kb3cteD1cIjY2MVwiXG4gICAgIGlua3NjYXBlOndpbmRvdy15PVwiNDRcIlxuICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPVwiMFwiXG4gICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9XCJzdmc0XCI+XG4gICAgPGlua3NjYXBlOmdyaWRcbiAgICAgICBpZD1cImdyaWQ0XCJcbiAgICAgICB1bml0cz1cInB4XCJcbiAgICAgICBvcmlnaW54PVwiMFwiXG4gICAgICAgb3JpZ2lueT1cIjBcIlxuICAgICAgIHNwYWNpbmd4PVwiMVwiXG4gICAgICAgc3BhY2luZ3k9XCIxXCJcbiAgICAgICBlbXBjb2xvcj1cIiMwMDk5ZTVcIlxuICAgICAgIGVtcG9wYWNpdHk9XCIwLjMwMTk2MDc4XCJcbiAgICAgICBjb2xvcj1cIiMwMDk5ZTVcIlxuICAgICAgIG9wYWNpdHk9XCIwLjE0OTAxOTYxXCJcbiAgICAgICBlbXBzcGFjaW5nPVwiNVwiXG4gICAgICAgZW5hYmxlZD1cInRydWVcIlxuICAgICAgIHZpc2libGU9XCJ0cnVlXCIgLz5cbiAgPC9zb2RpcG9kaTpuYW1lZHZpZXc+XG4gIDxyZWN0XG4gICAgIHg9XCIxLjI1XCJcbiAgICAgeT1cIjI1Ljc1XCJcbiAgICAgd2lkdGg9XCI2XCJcbiAgICAgaGVpZ2h0PVwiNlwiXG4gICAgIHJ4PVwiMVwiXG4gICAgIGZpbGw9XCJub25lXCJcbiAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgaWQ9XCJyZWN0MVwiIC8+XG4gIDxwYXRoXG4gICAgIGQ9XCJtIDIuNzUsMjguNzUgMS4zLDEuNSAyLjcsLTMuNVwiXG4gICAgIGZpbGw9XCJub25lXCJcbiAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgaWQ9XCJwYXRoMVwiIC8+XG4gIDxyZWN0XG4gICAgIHg9XCIxLjI1XCJcbiAgICAgeT1cIjMzLjc1XCJcbiAgICAgd2lkdGg9XCI2XCJcbiAgICAgaGVpZ2h0PVwiNlwiXG4gICAgIHJ4PVwiMVwiXG4gICAgIGZpbGw9XCJub25lXCJcbiAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgaWQ9XCJyZWN0MlwiIC8+XG4gIDxyZWN0XG4gICAgIHJ5PVwiMVwiXG4gICAgIHk9XCIyNy4yNVwiXG4gICAgIHg9XCI5LjI1XCJcbiAgICAgaGVpZ2h0PVwiMlwiXG4gICAgIHdpZHRoPVwiOFwiXG4gICAgIGlkPVwicmVjdDNcIiAvPlxuICA8cmVjdFxuICAgICByeT1cIjFcIlxuICAgICB5PVwiMzUuMjVcIlxuICAgICB4PVwiOS4yNVwiXG4gICAgIGhlaWdodD1cIjJcIlxuICAgICB3aWR0aD1cIjhcIlxuICAgICBpZD1cInJlY3Q0XCIgLz5cbiAgPHBhdGhcbiAgICAgc3R5bGU9XCJzdHJva2UtbGluZWNhcDpyb3VuZFwiXG4gICAgIGQ9XCJNIDIuMzMzOTg0NCwxIEMgMS42MDM5NjYzLDEgMSwxLjYwMzk2NjMgMSwyLjMzMzk4NDQgViA1LjY2NjAxNTYgQyAxLDYuMzk2MDMzNyAxLjYwMzk2NjMsNyAyLjMzMzk4NDQsNyBIIDUuNjY2MDE1NiBDIDYuMzk2MDMzNyw3IDcsNi4zOTYwMzM3IDcsNS42NjYwMTU2IFYgMi4zMzM5ODQ0IEMgNywxLjYwMzk2NjMgNi4zOTYwMzM3LDEgNS42NjYwMTU2LDEgWiBtIDAsMSBIIDUuNjY2MDE1NiBDIDUuODU5MzMwOSwyIDYsMi4xNDA2NjkxIDYsMi4zMzM5ODQ0IFYgNS42NjYwMTU2IEMgNiw1Ljg1OTMzMDkgNS44NTkzMzA5LDYgNS42NjYwMTU2LDYgSCAyLjMzMzk4NDQgQyAyLjE0MDY2OTEsNiAyLDUuODU5MzMwOSAyLDUuNjY2MDE1NiBWIDIuMzMzOTg0NCBDIDIsMi4xNDA2NjkxIDIuMTQwNjY5MSwyIDIuMzMzOTg0NCwyIFpcIlxuICAgICBpZD1cInJlY3Q1XCIgLz5cbiAgPHBhdGhcbiAgICAgc3R5bGU9XCJzdHJva2UtbGluZWNhcDpyb3VuZFwiXG4gICAgIGQ9XCJNIDIuMzMzOTg0NCwxMSBDIDEuNjAzOTY2MywxMSAxLDExLjYwMzk2NiAxLDEyLjMzMzk4NCB2IDMuMzMyMDMyIEMgMSwxNi4zOTYwMzQgMS42MDM5NjYzLDE3IDIuMzMzOTg0NCwxNyBIIDUuNjY2MDE1NiBDIDYuMzk2MDMzNywxNyA3LDE2LjM5NjAzNCA3LDE1LjY2NjAxNiBWIDEyLjMzMzk4NCBDIDcsMTEuNjAzOTY2IDYuMzk2MDMzNywxMSA1LjY2NjAxNTYsMTEgWiBtIDAsMSBIIDUuNjY2MDE1NiBDIDUuODU5MzMwOSwxMiA2LDEyLjE0MDY2OSA2LDEyLjMzMzk4NCB2IDMuMzMyMDMyIEMgNiwxNS44NTkzMzEgNS44NTkzMzA5LDE2IDUuNjY2MDE1NiwxNiBIIDIuMzMzOTg0NCBDIDIuMTQwNjY5MSwxNiAyLDE1Ljg1OTMzMSAyLDE1LjY2NjAxNiBWIDEyLjMzMzk4NCBDIDIsMTIuMTQwNjY5IDIuMTQwNjY5MSwxMiAyLjMzMzk4NDQsMTIgWlwiXG4gICAgIGlkPVwicmVjdDUtN1wiIC8+XG4gIDxyZWN0XG4gICAgIHk9XCIzXCJcbiAgICAgeD1cIjlcIlxuICAgICBoZWlnaHQ9XCIyXCJcbiAgICAgd2lkdGg9XCI5XCJcbiAgICAgcnk9XCIxXCJcbiAgICAgaWQ9XCJyZWN0Mi0zXCJcbiAgICAgc3R5bGU9XCJzdHJva2Utd2lkdGg6MVwiIC8+XG4gIDxyZWN0XG4gICAgIHk9XCIxM1wiXG4gICAgIHg9XCI5XCJcbiAgICAgaGVpZ2h0PVwiMlwiXG4gICAgIHdpZHRoPVwiOVwiXG4gICAgIHJ5PVwiMVwiXG4gICAgIGlkPVwicmVjdDItMy03XCJcbiAgICAgc3R5bGU9XCJzdHJva2Utd2lkdGg6MVwiIC8+XG4gIDxwYXRoXG4gICAgIHN0eWxlPVwic3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kXCJcbiAgICAgZD1cIk0gNC44NDE3OTY5LDIuNTI1MzkwNiBBIDAuNSwwLjUgMCAwIDAgNC41NTI3MzQ0LDIuNzc3MzQzOCBMIDMuODYzMjgxMyw0LjE1NjI1IDMuMzUzNTE1NiwzLjY0NjQ4NDQgYSAwLjUsMC41IDAgMCAwIC0wLjcwNzAzMTIsMCAwLjUsMC41IDAgMCAwIDAsMC43MDcwMzEyIGwgMSwxIEEgMC41MDAwNSwwLjUwMDA1IDAgMCAwIDQuNDQ3MjY1Niw1LjIyMjY1NjIgbCAxLC0xLjk5OTk5OTkgQSAwLjUsMC41IDAgMCAwIDUuMjIyNjU2MiwyLjU1MjczNDQgMC41LDAuNSAwIDAgMCA0Ljg0MTc5NjksMi41MjUzOTA2IFpcIlxuICAgICBpZD1cInBhdGg2XCIgLz5cbjwvc3ZnPlxuYCxcbiAgdWw6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxjaXJjbGUgY3g9XCIyXCIgY3k9XCI5XCIgcj1cIjJcIi8+PGNpcmNsZSBjeT1cIjRcIiBjeD1cIjJcIiByPVwiMlwiLz48cmVjdCB5PVwiM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PGNpcmNsZSBjeD1cIjJcIiBjeT1cIjE0XCIgcj1cIjJcIi8+PHJlY3Qgcnk9XCIxXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjJcIiB4PVwiNlwiIHk9XCI4XCIvPjxyZWN0IHk9XCIxM1wiIHg9XCI2XCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMTJcIiByeT1cIjFcIi8+PC9zdmc+YCxcbiAgdW5kbzogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0gMTAuNzMwNDY5IDIuNzA1MDc4MSBDIDkuODg3MTI0MyAyLjcwODE1OTQgOS4wNDcwMTAzIDIuODcxMjE1NiA4LjI2OTUzMTIgMy4xMzQ3NjU2IEMgNi41OTExMjU2IDMuNzAzNzEyMSA1LjA5ODU3OTcgNC42ODQ3MTA0IDQgNS42MzY3MTg4IEwgNCA0IEwgMiA0IEwgMiA5IEwgNyA5IEwgNyA3IEwgNS40OTAyMzQ0IDcgQyA2LjQwOTI0OTkgNi4yNDg1MTczIDcuNjU5NzkxNCA1LjQ1MzgwOCA4LjkxMjEwOTQgNS4wMjkyOTY5IEMgMTAuNTY5MDYgNC40Njc2MjMxIDEyLjA1NDY1NCA0LjQ2ODcxNyAxMy4yOTI5NjkgNS43MDcwMzEyIEMgMTQuNTE3OTgzIDYuOTMyMDQ1NCAxNC43MDI3MzggOC40Mjc3MjY1IDE0LjA3MjI2NiAxMC4wMDM5MDYgQyAxMy40NDE3OTQgMTEuNTgwMDg2IDExLjkwNDc5MSAxMy4xNjE5MTIgOS42Mjg5MDYyIDE0LjA3MjI2NiBMIDEwLjM3MTA5NCAxNS45Mjc3MzQgQyAxMy4wOTUyMDkgMTQuODM4MDg4IDE1LjA1ODIwNiAxMi45MTk5MTQgMTUuOTI3NzM0IDEwLjc0NjA5NCBDIDE2Ljc5NzI2MiA4LjU3MjI3MzQgMTYuNDgyMDE3IDYuMDY3OTU0NyAxNC43MDcwMzEgNC4yOTI5Njg4IEMgMTMuNzgzMTc0IDMuMzY5MTEyIDEyLjY5MTY0MyAyLjkwNDE0MDggMTEuNTcyMjY2IDIuNzU3ODEyNSBDIDExLjI5MjQyMSAyLjcyMTIzMDQgMTEuMDExNTg0IDIuNzA0MDUxIDEwLjczMDQ2OSAyLjcwNTA3ODEgeiBcIiAvPjwvc3ZnPlxuYFxufTtcblxuZXhwb3J0IGRlZmF1bHQgc3ZnOyIsImltcG9ydCBzdmcgZnJvbSBcIi4vc3ZnL3N2Z1wiO1xuaW1wb3J0IHsgRWRpdG9yLCBQb3NpdGlvbiwgU2VsZWN0aW9uRXZlbnQgfSBmcm9tIFwiLi9UaW55TURFXCI7XG5cbmNvbnN0IGlzTWFjTGlrZSA9IC8oTWFjfGlQaG9uZXxpUG9kfGlQYWQpL2kudGVzdChcbiAgdHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiA/IG5hdmlnYXRvci5wbGF0Zm9ybSA6IFwiXCJcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEFjdGlvbiB7XG4gIChlZGl0b3I6IEVkaXRvcik6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEVuYWJsZWQge1xuICAoZWRpdG9yOiBFZGl0b3IsIGZvY3VzPzogUG9zaXRpb24sIGFuY2hvcj86IFBvc2l0aW9uKTogYm9vbGVhbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZERlZmluaXRpb24ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGFjdGlvbj86IHN0cmluZyB8IENvbW1hbmRBY3Rpb247XG4gIGlubmVySFRNTD86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGhvdGtleT86IHN0cmluZztcbiAgZW5hYmxlZD86IENvbW1hbmRFbmFibGVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRCYXJQcm9wcyB7XG4gIGVsZW1lbnQ/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgZWRpdG9yPzogRWRpdG9yO1xuICBjb21tYW5kcz86IChzdHJpbmcgfCBDb21tYW5kRGVmaW5pdGlvbilbXTtcbn1cblxuaW50ZXJmYWNlIEhvdGtleSB7XG4gIG1vZGlmaWVyczogc3RyaW5nW107XG4gIGNvbW1hbmQ6IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBjb2RlPzogc3RyaW5nO1xufVxuXG5jb25zdCBEZWZhdWx0Q29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmREZWZpbml0aW9uPiA9IHtcbiAgYm9sZDoge1xuICAgIG5hbWU6IFwiYm9sZFwiLFxuICAgIGFjdGlvbjogXCJib2xkXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuYm9sZCxcbiAgICB0aXRsZTogXCJCb2xkXCIsXG4gICAgaG90a2V5OiBcIk1vZC1CXCIsXG4gIH0sXG4gIGl0YWxpYzoge1xuICAgIG5hbWU6IFwiaXRhbGljXCIsXG4gICAgYWN0aW9uOiBcIml0YWxpY1wiLFxuICAgIGlubmVySFRNTDogc3ZnLml0YWxpYyxcbiAgICB0aXRsZTogXCJJdGFsaWNcIixcbiAgICBob3RrZXk6IFwiTW9kLUlcIixcbiAgfSxcbiAgc3RyaWtldGhyb3VnaDoge1xuICAgIG5hbWU6IFwic3RyaWtldGhyb3VnaFwiLFxuICAgIGFjdGlvbjogXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuc3RyaWtldGhyb3VnaCxcbiAgICB0aXRsZTogXCJTdHJpa2V0aHJvdWdoXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtNVwiLFxuICB9LFxuICBjb2RlOiB7XG4gICAgbmFtZTogXCJjb2RlXCIsXG4gICAgYWN0aW9uOiBcImNvZGVcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5jb2RlLFxuICAgIHRpdGxlOiBcIkZvcm1hdCBhcyBjb2RlXCIsXG4gIH0sXG4gIGgxOiB7XG4gICAgbmFtZTogXCJoMVwiLFxuICAgIGFjdGlvbjogXCJoMVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmgxLFxuICAgIHRpdGxlOiBcIkxldmVsIDEgaGVhZGluZ1wiLFxuICAgIGhvdGtleTogXCJNb2QtU2hpZnQtMVwiLFxuICB9LFxuICBoMjoge1xuICAgIG5hbWU6IFwiaDJcIixcbiAgICBhY3Rpb246IFwiaDJcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5oMixcbiAgICB0aXRsZTogXCJMZXZlbCAyIGhlYWRpbmdcIixcbiAgICBob3RrZXk6IFwiTW9kLVNoaWZ0LTJcIixcbiAgfSxcbiAgdWw6IHtcbiAgICBuYW1lOiBcInVsXCIsXG4gICAgYWN0aW9uOiBcInVsXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcudWwsXG4gICAgdGl0bGU6IFwiQnVsbGV0ZWQgbGlzdFwiLFxuICB9LFxuICBvbDoge1xuICAgIG5hbWU6IFwib2xcIixcbiAgICBhY3Rpb246IFwib2xcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5vbCxcbiAgICB0aXRsZTogXCJOdW1iZXJlZCBsaXN0XCIsXG4gIH0sXG4gIGJsb2NrcXVvdGU6IHtcbiAgICBuYW1lOiBcImJsb2NrcXVvdGVcIixcbiAgICBhY3Rpb246IFwiYmxvY2txdW90ZVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmJsb2NrcXVvdGUsXG4gICAgdGl0bGU6IFwiUXVvdGVcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1RXCIsXG4gIH0sXG4gIHRhc2tsaXN0OiB7XG4gICAgbmFtZTogXCJ0YXNrbGlzdFwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiBlZGl0b3IudG9nZ2xlVGFza0xpc3QoKSxcbiAgICBlbmFibGVkOiAoZWRpdG9yOiBFZGl0b3IsIGZvY3VzPzogUG9zaXRpb24pID0+XG4gICAgICBmb2N1cyA/IGVkaXRvci5pc1Rhc2tMaXN0SXRlbShmb2N1cy5yb3cpIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy50YXNrbGlzdCxcbiAgICB0aXRsZTogXCJUYXNrIGxpc3RcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1UXCIsXG4gIH0sXG4gIGluc2VydExpbms6IHtcbiAgICBuYW1lOiBcImluc2VydExpbmtcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgaWYgKGVkaXRvci5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIGVkaXRvci53cmFwU2VsZWN0aW9uKFwiW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT5cbiAgICAgIGVkaXRvci5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkgPyBmYWxzZSA6IG51bGwsXG4gICAgaW5uZXJIVE1MOiBzdmcubGluayxcbiAgICB0aXRsZTogXCJJbnNlcnQgbGlua1wiLFxuICAgIGhvdGtleTogXCJNb2QtS1wiLFxuICB9LFxuICBpbnNlcnRJbWFnZToge1xuICAgIG5hbWU6IFwiaW5zZXJ0SW1hZ2VcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4ge1xuICAgICAgaWYgKGVkaXRvci5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIGVkaXRvci53cmFwU2VsZWN0aW9uKFwiIVtcIiwgXCJdKClcIik7XG4gICAgfSxcbiAgICBlbmFibGVkOiAoZWRpdG9yOiBFZGl0b3IpID0+XG4gICAgICBlZGl0b3IuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpID8gZmFsc2UgOiBudWxsLFxuICAgIGlubmVySFRNTDogc3ZnLmltYWdlLFxuICAgIHRpdGxlOiBcIkluc2VydCBpbWFnZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LUlcIixcbiAgfSxcbiAgaHI6IHtcbiAgICBuYW1lOiBcImhyXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IGVkaXRvci5wYXN0ZShcIlxcbioqKlxcblwiKSxcbiAgICBlbmFibGVkOiAoKSA9PiBmYWxzZSxcbiAgICBpbm5lckhUTUw6IHN2Zy5ocixcbiAgICB0aXRsZTogXCJJbnNlcnQgaG9yaXpvbnRhbCBsaW5lXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtTFwiLFxuICB9LFxuICB1bmRvOiB7XG4gICAgbmFtZTogXCJ1bmRvXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IGVkaXRvci51bmRvKCksXG4gICAgZW5hYmxlZDogKGVkaXRvcjogRWRpdG9yKSA9PiAoZWRpdG9yLmNhblVuZG8gPyBmYWxzZSA6IG51bGwpLFxuICAgIGlubmVySFRNTDogc3ZnLnVuZG8sXG4gICAgdGl0bGU6IFwiVW5kb1wiLFxuICB9LFxuICByZWRvOiB7XG4gICAgbmFtZTogXCJyZWRvXCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IGVkaXRvci5yZWRvKCksXG4gICAgZW5hYmxlZDogKGVkaXRvcjogRWRpdG9yKSA9PiAoZWRpdG9yLmNhblJlZG8gPyBmYWxzZSA6IG51bGwpLFxuICAgIGlubmVySFRNTDogc3ZnLnJlZG8sXG4gICAgdGl0bGU6IFwiUmVkb1wiLFxuICB9LFxufTtcblxuZXhwb3J0IGNsYXNzIENvbW1hbmRCYXIge1xuICBwdWJsaWMgZTogSFRNTERpdkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBjb21tYW5kczogUmVjb3JkPHN0cmluZywgQ29tbWFuZERlZmluaXRpb24+ID0ge307XG4gIHB1YmxpYyBidXR0b25zOiBSZWNvcmQ8c3RyaW5nLCBIVE1MRGl2RWxlbWVudD4gPSB7fTtcbiAgcHVibGljIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4gPSB7fTtcbiAgcHJpdmF0ZSBob3RrZXlzOiBIb3RrZXlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBDb21tYW5kQmFyUHJvcHMpIHtcbiAgICB0aGlzLmUgPSBudWxsO1xuICAgIHRoaXMuZWRpdG9yID0gbnVsbDtcbiAgICB0aGlzLmNvbW1hbmRzID0ge307XG4gICAgdGhpcy5idXR0b25zID0ge307XG4gICAgdGhpcy5zdGF0ZSA9IHt9O1xuICAgIHRoaXMuaG90a2V5cyA9IFtdO1xuXG4gICAgbGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5lbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IHByb3BzLmVsZW1lbnQ7XG4gICAgfVxuICAgIFxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVDb21tYW5kQmFyRWxlbWVudChcbiAgICAgIGVsZW1lbnQsXG4gICAgICBwcm9wcy5jb21tYW5kcyB8fCBbXG4gICAgICAgIFwiYm9sZFwiLFxuICAgICAgICBcIml0YWxpY1wiLFxuICAgICAgICBcInN0cmlrZXRocm91Z2hcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiY29kZVwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJoMVwiLFxuICAgICAgICBcImgyXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcInVsXCIsXG4gICAgICAgIFwib2xcIixcbiAgICAgICAgXCJ0YXNrbGlzdFwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJibG9ja3F1b3RlXCIsXG4gICAgICAgIFwiaHJcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwidW5kb1wiLFxuICAgICAgICBcInJlZG9cIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwiaW5zZXJ0TGlua1wiLFxuICAgICAgICBcImluc2VydEltYWdlXCIsXG4gICAgICBdXG4gICAgKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4gdGhpcy5oYW5kbGVLZXlkb3duKGUpKTtcbiAgICBpZiAocHJvcHMuZWRpdG9yKSB0aGlzLnNldEVkaXRvcihwcm9wcy5lZGl0b3IpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb21tYW5kQmFyRWxlbWVudChwYXJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCwgY29tbWFuZHM6IChzdHJpbmcgfCBDb21tYW5kRGVmaW5pdGlvbilbXSk6IHZvaWQge1xuICAgIHRoaXMuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgdGhpcy5lLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQmFyXCI7XG5cbiAgICBmb3IgKGxldCBjb21tYW5kIG9mIGNvbW1hbmRzKSB7XG4gICAgICBpZiAoY29tbWFuZCA9PT0gXCJ8XCIpIHtcbiAgICAgICAgbGV0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZWwuY2xhc3NOYW1lID0gXCJUTUNvbW1hbmREaXZpZGVyXCI7XG4gICAgICAgIHRoaXMuZS5hcHBlbmRDaGlsZChlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgY29tbWFuZE5hbWU6IHN0cmluZztcbiAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgaWYgKERlZmF1bHRDb21tYW5kc1tjb21tYW5kXSkge1xuICAgICAgICAgICAgY29tbWFuZE5hbWUgPSBjb21tYW5kO1xuICAgICAgICAgICAgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0gPSBEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwib2JqZWN0XCIgJiYgY29tbWFuZC5uYW1lKSB7XG4gICAgICAgICAgY29tbWFuZE5hbWUgPSBjb21tYW5kLm5hbWU7XG4gICAgICAgICAgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0gPSB7fSBhcyBDb21tYW5kRGVmaW5pdGlvbjtcbiAgICAgICAgICBpZiAoRGVmYXVsdENvbW1hbmRzW2NvbW1hbmROYW1lXSkge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSwgRGVmYXVsdENvbW1hbmRzW2NvbW1hbmROYW1lXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0sIGNvbW1hbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRpdGxlID0gdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0udGl0bGUgfHwgY29tbWFuZE5hbWU7XG5cbiAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmhvdGtleSkge1xuICAgICAgICAgIGNvbnN0IGtleXMgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5ob3RrZXkhLnNwbGl0KFwiLVwiKTtcbiAgICAgICAgICBsZXQgbW9kaWZpZXJzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGxldCBtb2RpZmllcmV4cGxhbmF0aW9uOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIFxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5c1tpXSkge1xuICAgICAgICAgICAgICBjYXNlIFwiQ3RybFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwiY3RybEtleVwiKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJDdHJsXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQ21kXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKMmFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIkFsdFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwiYWx0S2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkFsdFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk9wdGlvblwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwiYWx0S2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKMpVwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIldpblwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwibWV0YUtleVwiKTtcbiAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLiip4gV2luXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiU2hpZnRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcInNoaWZ0S2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKHp1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk1vZFwiOlxuICAgICAgICAgICAgICAgIGlmIChpc01hY0xpa2UpIHtcbiAgICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwibWV0YUtleVwiKTtcbiAgICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKMmFwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJjdHJsS2V5XCIpO1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQ3RybFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJNb2QyXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFjTGlrZSkgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oylXCIpO1xuICAgICAgICAgICAgICAgIGVsc2UgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQWx0XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goa2V5c1trZXlzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICBsZXQgaG90a2V5OiBIb3RrZXkgPSB7XG4gICAgICAgICAgICBtb2RpZmllcnM6IG1vZGlmaWVycyxcbiAgICAgICAgICAgIGNvbW1hbmQ6IGNvbW1hbmROYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgICAgY29uc3QgbGFzdEtleSA9IGtleXNba2V5cy5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAobGFzdEtleS5tYXRjaCgvXlswLTldJC8pKSB7XG4gICAgICAgICAgICBob3RrZXkuY29kZSA9IGBEaWdpdCR7bGFzdEtleX1gO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGFzdEtleS5tYXRjaCgvXlthLXpBLVpdJC8pKSB7XG4gICAgICAgICAgICBob3RrZXkuY29kZSA9IGBLZXkke2xhc3RLZXkudG9VcHBlckNhc2UoKX1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob3RrZXkua2V5ID0gbGFzdEtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmhvdGtleXMucHVzaChob3RrZXkpO1xuICAgICAgICAgIHRpdGxlID0gdGl0bGUuY29uY2F0KGAgKCR7bW9kaWZpZXJleHBsYW5hdGlvbi5qb2luKFwiK1wiKX0pYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmROYW1lXS50aXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmlubmVySFRNTCA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmlubmVySFRNTCB8fCBcIj9cIjtcblxuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgKGUpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVDbGljayhjb21tYW5kTmFtZSwgZSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJlbnRFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNsaWNrKGNvbW1hbmROYW1lOiBzdHJpbmcsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHJldHVybjtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gRm9jdXMgdGhlIGVkaXRvciBpZiBpdCdzIG5vdCBhbHJlYWR5IGZvY3VzZWRcbiAgICBpZiAodGhpcy5lZGl0b3IuZSkge1xuICAgICAgY29uc3QgZWRpdG9ySGFkRm9jdXMgPSB0aGlzLmVkaXRvci5lLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgdGhpcy5lZGl0b3IuZS5mb2N1cygpO1xuICAgICAgLy8gT25seSByZXN0b3JlIHRoZSBsYXN0IHNlbGVjdGlvbiBpZiB0aGUgZWRpdG9yIHdhcyBub3QgZm9jdXNlZCBiZWZvcmVcbiAgICAgIGlmICghZWRpdG9ySGFkRm9jdXMpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IucmVzdG9yZUxhc3RTZWxlY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgaWYgKHRoaXMuc3RhdGVbY29tbWFuZE5hbWVdID09PSBmYWxzZSlcbiAgICAgICAgKHRoaXMuZWRpdG9yIGFzIGFueSkuc2V0Q29tbWFuZFN0YXRlKGNvbW1hbmROYW1lLCB0cnVlKTtcbiAgICAgIGVsc2UgKHRoaXMuZWRpdG9yIGFzIGFueSkuc2V0Q29tbWFuZFN0YXRlKGNvbW1hbmROYW1lLCBmYWxzZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICh0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gYXMgQ29tbWFuZEFjdGlvbikodGhpcy5lZGl0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRFZGl0b3IoZWRpdG9yOiBFZGl0b3IpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvciA9IGVkaXRvcjtcbiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvblwiLCAoZSkgPT4gdGhpcy5oYW5kbGVTZWxlY3Rpb24oZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTZWxlY3Rpb24oZXZlbnQ6IFNlbGVjdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmNvbW1hbmRTdGF0ZSkge1xuICAgICAgZm9yIChsZXQgY29tbWFuZCBpbiB0aGlzLmNvbW1hbmRzKSB7XG4gICAgICAgIGlmIChldmVudC5jb21tYW5kU3RhdGVbY29tbWFuZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbW1hbmRzW2NvbW1hbmRdLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbY29tbWFuZF0gPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmRdLmVuYWJsZWQhKFxuICAgICAgICAgICAgICB0aGlzLmVkaXRvciEsXG4gICAgICAgICAgICAgIGV2ZW50LmZvY3VzLFxuICAgICAgICAgICAgICBldmVudC5hbmNob3JcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbY29tbWFuZF0gPSBldmVudC5mb2N1cyA/IGZhbHNlIDogbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IGV2ZW50LmNvbW1hbmRTdGF0ZVtjb21tYW5kXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnN0YXRlW2NvbW1hbmRdID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9BY3RpdmVcIjtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlW2NvbW1hbmRdID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fSW5hY3RpdmVcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0Rpc2FibGVkXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBPbmx5IGhhbmRsZSBrZXlib2FyZCBzaG9ydGN1dHMgaWYgdGhpcyBlZGl0b3IgaXMgY3VycmVudGx5IGZvY3VzZWRcbiAgICBpZiAoIXRoaXMuZWRpdG9yIHx8ICF0aGlzLmVkaXRvci5lKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmVkaXRvci5lLmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG5cbiAgICBvdXRlcjogZm9yIChsZXQgaG90a2V5IG9mIHRoaXMuaG90a2V5cykge1xuICAgICAgaWYgKFxuICAgICAgICAoaG90a2V5LmtleSAmJiBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gaG90a2V5LmtleSkgfHxcbiAgICAgICAgKGhvdGtleS5jb2RlICYmIGV2ZW50LmNvZGUgPT09IGhvdGtleS5jb2RlKVxuICAgICAgKSB7XG4gICAgICAgIGZvciAobGV0IG1vZGlmaWVyIG9mIGhvdGtleS5tb2RpZmllcnMpIHtcbiAgICAgICAgICBpZiAoIShldmVudCBhcyBhbnkpW21vZGlmaWVyXSkgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYW5kbGVDbGljayhob3RrZXkuY29tbWFuZCwgZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1hbmRCYXI7IiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tZnVuY3Rpb24tcHJvdG90eXBlLWJpbmQsIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYycpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgRk9SQ0VELCBTSEFNKSB7XG4gIHZhciBTWU1CT0wgPSB3ZWxsS25vd25TeW1ib2woS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT09IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuXG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gV2UgY2FuJ3QgdXNlIHJlYWwgcmVnZXggaGVyZSBzaW5jZSBpdCBjYXVzZXMgZGVvcHRpbWl6YXRpb25cbiAgICAgIC8vIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGluIFY4XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzA2XG4gICAgICByZSA9IHt9O1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgICAgcmUuZmxhZ3MgPSAnJztcbiAgICAgIHJlW1NZTUJPTF0gPSAvLi9bU1lNQk9MXTtcbiAgICB9XG5cbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgICAgZXhlY0NhbGxlZCA9IHRydWU7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KTtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICBGT1JDRURcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBtZXRob2RzID0gZXhlYyhTWU1CT0wsICcnW0tFWV0sIGZ1bmN0aW9uIChuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgdmFyICRleGVjID0gcmVnZXhwLmV4ZWM7XG4gICAgICBpZiAoJGV4ZWMgPT09IHJlZ2V4cEV4ZWMgfHwgJGV4ZWMgPT09IFJlZ0V4cFByb3RvdHlwZS5leGVjKSB7XG4gICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBjYWxsKG5hdGl2ZVJlZ0V4cE1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IGNhbGwobmF0aXZlTWV0aG9kLCBzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgfSk7XG5cbiAgICBkZWZpbmVCdWlsdEluKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgbWV0aG9kc1swXSk7XG4gICAgZGVmaW5lQnVpbHRJbihSZWdFeHBQcm90b3R5cGUsIFNZTUJPTCwgbWV0aG9kc1sxXSk7XG4gIH1cblxuICBpZiAoU0hBTSkgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFJlZ0V4cFByb3RvdHlwZVtTWU1CT0xdLCAnc2hhbScsIHRydWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoQ09OVkVSVF9UT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgcG9zKSB7XG4gICAgdmFyIFMgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgdmFyIHBvc2l0aW9uID0gdG9JbnRlZ2VyT3JJbmZpbml0eShwb3MpO1xuICAgIHZhciBzaXplID0gUy5sZW5ndGg7XG4gICAgdmFyIGZpcnN0LCBzZWNvbmQ7XG4gICAgaWYgKHBvc2l0aW9uIDwgMCB8fCBwb3NpdGlvbiA+PSBzaXplKSByZXR1cm4gQ09OVkVSVF9UT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBmaXJzdCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24pO1xuICAgIHJldHVybiBmaXJzdCA8IDB4RDgwMCB8fCBmaXJzdCA+IDB4REJGRiB8fCBwb3NpdGlvbiArIDEgPT09IHNpemVcbiAgICAgIHx8IChzZWNvbmQgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uICsgMSkpIDwgMHhEQzAwIHx8IHNlY29uZCA+IDB4REZGRlxuICAgICAgICA/IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBjaGFyQXQoUywgcG9zaXRpb24pXG4gICAgICAgICAgOiBmaXJzdFxuICAgICAgICA6IENPTlZFUlRfVE9fU1RSSU5HXG4gICAgICAgICAgPyBzdHJpbmdTbGljZShTLCBwb3NpdGlvbiwgcG9zaXRpb24gKyAyKVxuICAgICAgICAgIDogKGZpcnN0IC0gMHhEODAwIDw8IDEwKSArIChzZWNvbmQgLSAweERDMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5jb2RlcG9pbnRhdFxuICBjb2RlQXQ6IGNyZWF0ZU1ldGhvZChmYWxzZSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxuICBjaGFyQXQ6IGNyZWF0ZU1ldGhvZCh0cnVlKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcblxudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWRvcy9uby12dWxuZXJhYmxlIC0tIHNhZmVcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJidgXXxcXGR7MSwyfSkvZztcblxuLy8gYEdldFN1YnN0aXR1dGlvbmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICB9XG4gIHJldHVybiByZXBsYWNlKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgdmFyIGNhcHR1cmU7XG4gICAgc3dpdGNoIChjaGFyQXQoY2gsIDApKSB7XG4gICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyaW5nU2xpY2Uoc3RyLCAwLCBwb3NpdGlvbik7XG4gICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyaW5nU2xpY2Uoc3RyLCB0YWlsUG9zKTtcbiAgICAgIGNhc2UgJzwnOlxuICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tzdHJpbmdTbGljZShjaCwgMSwgLTEpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaGFyQXQoY2gsIDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2hhckF0KGNoLCAxKTtcbiAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgIH1cbiAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICB9XG4gICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAoaXNDYWxsYWJsZShleGVjKSkge1xuICAgIHZhciByZXN1bHQgPSBjYWxsKGV4ZWMsIFIsIFMpO1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwpIGFuT2JqZWN0KHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSA9PT0gJ1JlZ0V4cCcpIHJldHVybiBjYWxsKHJlZ2V4cEV4ZWMsIFIsIFMpO1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgZ2V0U3Vic3RpdHV0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24nKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBSRVBMQUNFID0gd2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIElFIDw9IDExIHJlcGxhY2VzICQwIHdpdGggdGhlIHdob2xlIG1hdGNoLCBhcyBpZiBpdCB3YXMgJCZcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMjQ2NjYvZ2V0dGluZy1pZS10by1yZXBsYWNlLWEtcmVnZXgtd2l0aC10aGUtbGl0ZXJhbC1zdHJpbmctMFxudmFyIFJFUExBQ0VfS0VFUFNfJDAgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3ByZWZlci1lc2NhcGUtcmVwbGFjZW1lbnQtZG9sbGFyLWNoYXIgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuICdhJy5yZXBsYWNlKC8uLywgJyQwJykgPT09ICckMCc7XG59KSgpO1xuXG4vLyBTYWZhcmkgPD0gMTMuMC4zKD8pIHN1YnN0aXR1dGVzIG50aCBjYXB0dXJlIHdoZXJlIG4+bSB3aXRoIGFuIGVtcHR5IHN0cmluZ1xudmFyIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKC8uL1tSRVBMQUNFXSkge1xuICAgIHJldHVybiAvLi9bUkVQTEFDRV0oJ2EnLCAnJDAnKSA9PT0gJyc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSkoKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXVzZWxlc3MtZG9sbGFyLXJlcGxhY2VtZW50cyAtLSBmYWxzZSBwb3NpdGl2ZVxuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3JlcGxhY2UnLCBmdW5jdGlvbiAoXywgbmF0aXZlUmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBVTlNBRkVfU1VCU1RJVFVURSA9IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID8gJyQnIDogJyQwJztcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBpc09iamVjdChzZWFyY2hWYWx1ZSkgPyBnZXRNZXRob2Qoc2VhcmNoVmFsdWUsIFJFUExBQ0UpIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHJlcGxhY2VyXG4gICAgICAgID8gY2FsbChyZXBsYWNlciwgc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiBjYWxsKG5hdGl2ZVJlcGxhY2UsIHRvU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAoc3RyaW5nLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByZXBsYWNlVmFsdWUgPT0gJ3N0cmluZycgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsIFVOU0FGRV9TVUJTVElUVVRFKSA9PT0gLTEgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsICckPCcpID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlUmVwbGFjZSwgcngsIFMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gaXNDYWxsYWJsZShyZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIHZhciBmdWxsVW5pY29kZTtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcblxuICAgICAgICBwdXNoKHJlc3VsdHMsIHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcblxuICAgICAgICB2YXIgbWF0Y2hTdHIgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG5cbiAgICAgICAgdmFyIG1hdGNoZWQgPSB0b1N0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlck9ySW5maW5pdHkocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIHZhciByZXBsYWNlbWVudDtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBwdXNoKGNhcHR1cmVzLCBtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBjb25jYXQoW21hdGNoZWRdLCBjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHB1c2gocmVwbGFjZXJBcmdzLCBuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IHRvU3RyaW5nKGFwcGx5KHJlcGxhY2VWYWx1ZSwgdW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBzdHJpbmdTbGljZShTLCBuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcbn0sICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyB8fCAhUkVQTEFDRV9LRUVQU18kMCB8fCBSRUdFWFBfUkVQTEFDRV9TVUJTVElUVVRFU19VTkRFRklORURfQ0FQVFVSRSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBhIHN0cmluZyBvZiBhbGwgdmFsaWQgdW5pY29kZSB3aGl0ZXNwYWNlc1xubW9kdWxlLmV4cG9ydHMgPSAnXFx1MDAwOVxcdTAwMEFcXHUwMDBCXFx1MDAwQ1xcdTAwMERcXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUyMDAwXFx1MjAwMVxcdTIwMDInICtcbiAgJ1xcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ15bJyArIHdoaXRlc3BhY2VzICsgJ10rJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoJyhefFteJyArIHdoaXRlc3BhY2VzICsgJ10pWycgKyB3aGl0ZXNwYWNlcyArICddKyQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIGlmIChUWVBFICYgMSkgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgcnRyaW0sICckMScpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5QUk9QRVI7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgbm9uID0gJ1xcdTIwMEJcXHUwMDg1XFx1MTgwRSc7XG5cbi8vIGNoZWNrIHRoYXQgYSBtZXRob2Qgd29ya3Mgd2l0aCB0aGUgY29ycmVjdCBsaXN0XG4vLyBvZiB3aGl0ZXNwYWNlcyBhbmQgaGFzIGEgY29ycmVjdCBuYW1lXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXSgpXG4gICAgICB8fCBub25bTUVUSE9EX05BTUVdKCkgIT09IG5vblxuICAgICAgfHwgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xuXG4vLyBtYWtlcyBzdWJjbGFzc2luZyB3b3JrIGNvcnJlY3QgZm9yIHdyYXBwZWQgYnVpbHQtaW5zXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkdGhpcywgZHVtbXksIFdyYXBwZXIpIHtcbiAgdmFyIE5ld1RhcmdldCwgTmV3VGFyZ2V0UHJvdG90eXBlO1xuICBpZiAoXG4gICAgLy8gaXQgY2FuIHdvcmsgb25seSB3aXRoIG5hdGl2ZSBgc2V0UHJvdG90eXBlT2ZgXG4gICAgc2V0UHJvdG90eXBlT2YgJiZcbiAgICAvLyB3ZSBoYXZlbid0IGNvbXBsZXRlbHkgY29ycmVjdCBwcmUtRVM2IHdheSBmb3IgZ2V0dGluZyBgbmV3LnRhcmdldGAsIHNvIHVzZSB0aGlzXG4gICAgaXNDYWxsYWJsZShOZXdUYXJnZXQgPSBkdW1teS5jb25zdHJ1Y3RvcikgJiZcbiAgICBOZXdUYXJnZXQgIT09IFdyYXBwZXIgJiZcbiAgICBpc09iamVjdChOZXdUYXJnZXRQcm90b3R5cGUgPSBOZXdUYXJnZXQucHJvdG90eXBlKSAmJlxuICAgIE5ld1RhcmdldFByb3RvdHlwZSAhPT0gV3JhcHBlci5wcm90b3R5cGVcbiAgKSBzZXRQcm90b3R5cGVPZigkdGhpcywgTmV3VGFyZ2V0UHJvdG90eXBlKTtcbiAgcmV0dXJuICR0aGlzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxuLy8gYElzUmVnRXhwYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNyZWdleHBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNsYXNzb2YoaXQpID09PSAnUmVnRXhwJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgcmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG5cbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSKSB7XG4gIHZhciBmbGFncyA9IFIuZmxhZ3M7XG4gIHJldHVybiBmbGFncyA9PT0gdW5kZWZpbmVkICYmICEoJ2ZsYWdzJyBpbiBSZWdFeHBQcm90b3R5cGUpICYmICFoYXNPd24oUiwgJ2ZsYWdzJykgJiYgaXNQcm90b3R5cGVPZihSZWdFeHBQcm90b3R5cGUsIFIpXG4gICAgPyBjYWxsKHJlZ0V4cEZsYWdzLCBSKSA6IGZsYWdzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVGFyZ2V0LCBTb3VyY2UsIGtleSkge1xuICBrZXkgaW4gVGFyZ2V0IHx8IGRlZmluZVByb3BlcnR5KFRhcmdldCwga2V5LCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gU291cmNlW2tleV07IH0sXG4gICAgc2V0OiBmdW5jdGlvbiAoaXQpIHsgU291cmNlW2tleV0gPSBpdDsgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKSB7XG4gIGlmIChkZXNjcmlwdG9yLmdldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5nZXQsIG5hbWUsIHsgZ2V0dGVyOiB0cnVlIH0pO1xuICBpZiAoZGVzY3JpcHRvci5zZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3Iuc2V0LCBuYW1lLCB7IHNldHRlcjogdHJ1ZSB9KTtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5LmYodGFyZ2V0LCBuYW1lLCBkZXNjcmlwdG9yKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09OU1RSVUNUT1JfTkFNRSkge1xuICB2YXIgQ29uc3RydWN0b3IgPSBnZXRCdWlsdEluKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiBDb25zdHJ1Y3RvciAmJiAhQ29uc3RydWN0b3JbU1BFQ0lFU10pIHtcbiAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoQ29uc3RydWN0b3IsIFNQRUNJRVMsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICAgIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBnZXRSZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcbnZhciBwcm94eUFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5lbmZvcmNlO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBVTlNVUFBPUlRFRF9ET1RfQUxMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsJyk7XG52YXIgVU5TVVBQT1JURURfTkNHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xudmFyIE5hdGl2ZVJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IE5hdGl2ZVJlZ0V4cC5wcm90b3R5cGU7XG52YXIgU3ludGF4RXJyb3IgPSBnbG9iYWxUaGlzLlN5bnRheEVycm9yO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhSZWdFeHBQcm90b3R5cGUuZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuLy8gVE9ETzogVXNlIG9ubHkgcHJvcGVyIFJlZ0V4cElkZW50aWZpZXJOYW1lXG52YXIgSVNfTkNHID0gL15cXD88W15cXHNcXGQhIyUmKis8PT5AXl1bXlxccyEjJSYqKzw9PkBeXSo+LztcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG5cbi8vIFwibmV3XCIgc2hvdWxkIGNyZWF0ZSBhIG5ldyBvYmplY3QsIG9sZCB3ZWJraXQgYnVnXG52YXIgQ09SUkVDVF9ORVcgPSBuZXcgTmF0aXZlUmVnRXhwKHJlMSkgIT09IHJlMTtcblxudmFyIE1JU1NFRF9TVElDS1kgPSBzdGlja3lIZWxwZXJzLk1JU1NFRF9TVElDS1k7XG52YXIgVU5TVVBQT1JURURfWSA9IHN0aWNreUhlbHBlcnMuVU5TVVBQT1JURURfWTtcblxudmFyIEJBU0VfRk9SQ0VEID0gREVTQ1JJUFRPUlMgJiZcbiAgKCFDT1JSRUNUX05FVyB8fCBNSVNTRURfU1RJQ0tZIHx8IFVOU1VQUE9SVEVEX0RPVF9BTEwgfHwgVU5TVVBQT1JURURfTkNHIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZTJbTUFUQ0hdID0gZmFsc2U7XG4gICAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9pbmNvbnNpc3RlbnQtZnVuY3Rpb24tY2FsbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIHJldHVybiBOYXRpdmVSZWdFeHAocmUxKSAhPT0gcmUxIHx8IE5hdGl2ZVJlZ0V4cChyZTIpID09PSByZTIgfHwgU3RyaW5nKE5hdGl2ZVJlZ0V4cChyZTEsICdpJykpICE9PSAnL2EvaSc7XG4gIH0pKTtcblxudmFyIGhhbmRsZURvdEFsbCA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIGJyYWNrZXRzID0gZmFsc2U7XG4gIHZhciBjaHI7XG4gIGZvciAoOyBpbmRleCA8PSBsZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gICAgaWYgKGNociA9PT0gJ1xcXFwnKSB7XG4gICAgICByZXN1bHQgKz0gY2hyICsgY2hhckF0KHN0cmluZywgKytpbmRleCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKCFicmFja2V0cyAmJiBjaHIgPT09ICcuJykge1xuICAgICAgcmVzdWx0ICs9ICdbXFxcXHNcXFxcU10nO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hyID09PSAnWycpIHtcbiAgICAgICAgYnJhY2tldHMgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChjaHIgPT09ICddJykge1xuICAgICAgICBicmFja2V0cyA9IGZhbHNlO1xuICAgICAgfSByZXN1bHQgKz0gY2hyO1xuICAgIH1cbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxudmFyIGhhbmRsZU5DRyA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIG5hbWVkID0gW107XG4gIHZhciBuYW1lcyA9IGNyZWF0ZShudWxsKTtcbiAgdmFyIGJyYWNrZXRzID0gZmFsc2U7XG4gIHZhciBuY2cgPSBmYWxzZTtcbiAgdmFyIGdyb3VwaWQgPSAwO1xuICB2YXIgZ3JvdXBuYW1lID0gJyc7XG4gIHZhciBjaHI7XG4gIGZvciAoOyBpbmRleCA8PSBsZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gICAgaWYgKGNociA9PT0gJ1xcXFwnKSB7XG4gICAgICBjaHIgKz0gY2hhckF0KHN0cmluZywgKytpbmRleCk7XG4gICAgfSBlbHNlIGlmIChjaHIgPT09ICddJykge1xuICAgICAgYnJhY2tldHMgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKCFicmFja2V0cykgc3dpdGNoICh0cnVlKSB7XG4gICAgICBjYXNlIGNociA9PT0gJ1snOlxuICAgICAgICBicmFja2V0cyA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBjaHIgPT09ICcoJzpcbiAgICAgICAgcmVzdWx0ICs9IGNocjtcbiAgICAgICAgLy8gaWdub3JlIG5vbi1jYXB0dXJpbmcgZ3JvdXBzXG4gICAgICAgIGlmIChzdHJpbmdTbGljZShzdHJpbmcsIGluZGV4ICsgMSwgaW5kZXggKyAzKSA9PT0gJz86Jykge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChleGVjKElTX05DRywgc3RyaW5nU2xpY2Uoc3RyaW5nLCBpbmRleCArIDEpKSkge1xuICAgICAgICAgIGluZGV4ICs9IDI7XG4gICAgICAgICAgbmNnID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBncm91cGlkKys7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgY2FzZSBjaHIgPT09ICc+JyAmJiBuY2c6XG4gICAgICAgIGlmIChncm91cG5hbWUgPT09ICcnIHx8IGhhc093bihuYW1lcywgZ3JvdXBuYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSW52YWxpZCBjYXB0dXJlIGdyb3VwIG5hbWUnKTtcbiAgICAgICAgfVxuICAgICAgICBuYW1lc1tncm91cG5hbWVdID0gdHJ1ZTtcbiAgICAgICAgbmFtZWRbbmFtZWQubGVuZ3RoXSA9IFtncm91cG5hbWUsIGdyb3VwaWRdO1xuICAgICAgICBuY2cgPSBmYWxzZTtcbiAgICAgICAgZ3JvdXBuYW1lID0gJyc7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAobmNnKSBncm91cG5hbWUgKz0gY2hyO1xuICAgIGVsc2UgcmVzdWx0ICs9IGNocjtcbiAgfSByZXR1cm4gW3Jlc3VsdCwgbmFtZWRdO1xufTtcblxuLy8gYFJlZ0V4cGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLWNvbnN0cnVjdG9yXG5pZiAoaXNGb3JjZWQoJ1JlZ0V4cCcsIEJBU0VfRk9SQ0VEKSkge1xuICB2YXIgUmVnRXhwV3JhcHBlciA9IGZ1bmN0aW9uIFJlZ0V4cChwYXR0ZXJuLCBmbGFncykge1xuICAgIHZhciB0aGlzSXNSZWdFeHAgPSBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgdGhpcyk7XG4gICAgdmFyIHBhdHRlcm5Jc1JlZ0V4cCA9IGlzUmVnRXhwKHBhdHRlcm4pO1xuICAgIHZhciBmbGFnc0FyZVVuZGVmaW5lZCA9IGZsYWdzID09PSB1bmRlZmluZWQ7XG4gICAgdmFyIGdyb3VwcyA9IFtdO1xuICAgIHZhciByYXdQYXR0ZXJuID0gcGF0dGVybjtcbiAgICB2YXIgcmF3RmxhZ3MsIGRvdEFsbCwgc3RpY2t5LCBoYW5kbGVkLCByZXN1bHQsIHN0YXRlO1xuXG4gICAgaWYgKCF0aGlzSXNSZWdFeHAgJiYgcGF0dGVybklzUmVnRXhwICYmIGZsYWdzQXJlVW5kZWZpbmVkICYmIHBhdHRlcm4uY29uc3RydWN0b3IgPT09IFJlZ0V4cFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiBwYXR0ZXJuO1xuICAgIH1cblxuICAgIGlmIChwYXR0ZXJuSXNSZWdFeHAgfHwgaXNQcm90b3R5cGVPZihSZWdFeHBQcm90b3R5cGUsIHBhdHRlcm4pKSB7XG4gICAgICBwYXR0ZXJuID0gcGF0dGVybi5zb3VyY2U7XG4gICAgICBpZiAoZmxhZ3NBcmVVbmRlZmluZWQpIGZsYWdzID0gZ2V0UmVnRXhwRmxhZ3MocmF3UGF0dGVybik7XG4gICAgfVxuXG4gICAgcGF0dGVybiA9IHBhdHRlcm4gPT09IHVuZGVmaW5lZCA/ICcnIDogdG9TdHJpbmcocGF0dGVybik7XG4gICAgZmxhZ3MgPSBmbGFncyA9PT0gdW5kZWZpbmVkID8gJycgOiB0b1N0cmluZyhmbGFncyk7XG4gICAgcmF3UGF0dGVybiA9IHBhdHRlcm47XG5cbiAgICBpZiAoVU5TVVBQT1JURURfRE9UX0FMTCAmJiAnZG90QWxsJyBpbiByZTEpIHtcbiAgICAgIGRvdEFsbCA9ICEhZmxhZ3MgJiYgc3RyaW5nSW5kZXhPZihmbGFncywgJ3MnKSA+IC0xO1xuICAgICAgaWYgKGRvdEFsbCkgZmxhZ3MgPSByZXBsYWNlKGZsYWdzLCAvcy9nLCAnJyk7XG4gICAgfVxuXG4gICAgcmF3RmxhZ3MgPSBmbGFncztcblxuICAgIGlmIChNSVNTRURfU1RJQ0tZICYmICdzdGlja3knIGluIHJlMSkge1xuICAgICAgc3RpY2t5ID0gISFmbGFncyAmJiBzdHJpbmdJbmRleE9mKGZsYWdzLCAneScpID4gLTE7XG4gICAgICBpZiAoc3RpY2t5ICYmIFVOU1VQUE9SVEVEX1kpIGZsYWdzID0gcmVwbGFjZShmbGFncywgL3kvZywgJycpO1xuICAgIH1cblxuICAgIGlmIChVTlNVUFBPUlRFRF9OQ0cpIHtcbiAgICAgIGhhbmRsZWQgPSBoYW5kbGVOQ0cocGF0dGVybik7XG4gICAgICBwYXR0ZXJuID0gaGFuZGxlZFswXTtcbiAgICAgIGdyb3VwcyA9IGhhbmRsZWRbMV07XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gaW5oZXJpdElmUmVxdWlyZWQoTmF0aXZlUmVnRXhwKHBhdHRlcm4sIGZsYWdzKSwgdGhpc0lzUmVnRXhwID8gdGhpcyA6IFJlZ0V4cFByb3RvdHlwZSwgUmVnRXhwV3JhcHBlcik7XG5cbiAgICBpZiAoZG90QWxsIHx8IHN0aWNreSB8fCBncm91cHMubGVuZ3RoKSB7XG4gICAgICBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHJlc3VsdCk7XG4gICAgICBpZiAoZG90QWxsKSB7XG4gICAgICAgIHN0YXRlLmRvdEFsbCA9IHRydWU7XG4gICAgICAgIHN0YXRlLnJhdyA9IFJlZ0V4cFdyYXBwZXIoaGFuZGxlRG90QWxsKHBhdHRlcm4pLCByYXdGbGFncyk7XG4gICAgICB9XG4gICAgICBpZiAoc3RpY2t5KSBzdGF0ZS5zdGlja3kgPSB0cnVlO1xuICAgICAgaWYgKGdyb3Vwcy5sZW5ndGgpIHN0YXRlLmdyb3VwcyA9IGdyb3VwcztcbiAgICB9XG5cbiAgICBpZiAocGF0dGVybiAhPT0gcmF3UGF0dGVybikgdHJ5IHtcbiAgICAgIC8vIGZhaWxzIGluIG9sZCBlbmdpbmVzLCBidXQgd2UgaGF2ZSBubyBhbHRlcm5hdGl2ZXMgZm9yIHVuc3VwcG9ydGVkIHJlZ2V4IHN5bnRheFxuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdCwgJ3NvdXJjZScsIHJhd1BhdHRlcm4gPT09ICcnID8gJyg/OiknIDogcmF3UGF0dGVybik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICBmb3IgKHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhOYXRpdmVSZWdFeHApLCBpbmRleCA9IDA7IGtleXMubGVuZ3RoID4gaW5kZXg7KSB7XG4gICAgcHJveHlBY2Nlc3NvcihSZWdFeHBXcmFwcGVyLCBOYXRpdmVSZWdFeHAsIGtleXNbaW5kZXgrK10pO1xuICB9XG5cbiAgUmVnRXhwUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVnRXhwV3JhcHBlcjtcbiAgUmVnRXhwV3JhcHBlci5wcm90b3R5cGUgPSBSZWdFeHBQcm90b3R5cGU7XG4gIGRlZmluZUJ1aWx0SW4oZ2xvYmFsVGhpcywgJ1JlZ0V4cCcsIFJlZ0V4cFdyYXBwZXIsIHsgY29uc3RydWN0b3I6IHRydWUgfSk7XG59XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC1AQHNwZWNpZXNcbnNldFNwZWNpZXMoJ1JlZ0V4cCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAnZCcpIC0+IC8uL2QgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBGT1JDRUQgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBJTkRJQ0VTX1NVUFBPUlQgPSB0cnVlO1xuICB0cnkge1xuICAgIFJlZ0V4cCgnLicsICdkJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgSU5ESUNFU19TVVBQT1JUID0gZmFsc2U7XG4gIH1cblxuICB2YXIgTyA9IHt9O1xuICAvLyBtb2Rlcm4gVjggYnVnXG4gIHZhciBjYWxscyA9ICcnO1xuICB2YXIgZXhwZWN0ZWQgPSBJTkRJQ0VTX1NVUFBPUlQgPyAnZGdpbXN5JyA6ICdnaW1zeSc7XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChrZXksIGNocikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxscyArPSBjaHI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IH0pO1xuICB9O1xuXG4gIHZhciBwYWlycyA9IHtcbiAgICBkb3RBbGw6ICdzJyxcbiAgICBnbG9iYWw6ICdnJyxcbiAgICBpZ25vcmVDYXNlOiAnaScsXG4gICAgbXVsdGlsaW5lOiAnbScsXG4gICAgc3RpY2t5OiAneSdcbiAgfTtcblxuICBpZiAoSU5ESUNFU19TVVBQT1JUKSBwYWlycy5oYXNJbmRpY2VzID0gJ2QnO1xuXG4gIGZvciAodmFyIGtleSBpbiBwYWlycykgYWRkR2V0dGVyKGtleSwgcGFpcnNba2V5XSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycpLmdldC5jYWxsKE8pO1xuXG4gIHJldHVybiByZXN1bHQgIT09IGV4cGVjdGVkIHx8IGNhbGxzICE9PSBleHBlY3RlZDtcbn0pO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5pZiAoRk9SQ0VEKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZWdFeHBGbGFnc1xufSk7XG4iLCJleHBvcnQgaW50ZXJmYWNlIEdyYW1tYXJSdWxlIHtcbiAgcmVnZXhwOiBSZWdFeHA7XG4gIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIGxhYmVsUGxhY2Vob2xkZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSFRNTEJsb2NrUnVsZSB7XG4gIHN0YXJ0OiBSZWdFeHA7XG4gIGVuZDogUmVnRXhwIHwgZmFsc2U7XG4gIHBhcmFJbnRlcnJ1cHQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5saW5lQ29tbWFuZCB7XG4gIHR5cGU6ICdpbmxpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcHJlOiBzdHJpbmc7XG4gICAgcG9zdDogc3RyaW5nO1xuICB9O1xuICB1bnNldDoge1xuICAgIHByZVBhdHRlcm46IFJlZ0V4cDtcbiAgICBwb3N0UGF0dGVybjogUmVnRXhwO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2xpbmUnO1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcGF0dGVybjogUmVnRXhwO1xuICAgIHJlcGxhY2VtZW50OiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIENvbW1hbmQgPSBJbmxpbmVDb21tYW5kIHwgTGluZUNvbW1hbmQ7XG5cbmNvbnN0IHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgUmVnRXhwPiA9IHtcbiAgQVNDSUlQdW5jdHVhdGlvbjogL1shXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXV5fYHt8fX5cXFxcXS8sXG4gIC8vIE5ld2xpbmVzIGFyZSBleGNsdWRlZCBzbyB0aGF0LCB3aGVuIGEgcGFyYWdyYXBoIHNwYW5uaW5nIG11bHRpcGxlIHNvdXJjZSBsaW5lcyBpcyBwYXJzZWQgYXNcbiAgLy8gb25lIGpvaW5lZCBzdHJpbmcsIGEgc29mdCBsaW5lIGJyZWFrIChcXG4pIHRlcm1pbmF0ZXMgdGhlIGN1cnJlbnQgdGV4dCBydW4gYW5kIGNhbiBiZSBoYW5kbGVkXG4gIC8vIGV4cGxpY2l0bHkgYXMgYSBsaW5lIGJyZWFrIHJhdGhlciB0aGFuIGJlaW5nIHN3YWxsb3dlZCBpbnRvIGEgZGVmYXVsdCB0b2tlbi5cbiAgTm90VHJpZ2dlckNoYXI6IC9bXmBfKltcXF0oKTw+IX5cXG5dLyxcbiAgU2NoZW1lOiAvW0EtWmEtel1bQS1aYS16MC05Ky4tXXsxLDMxfS8sXG4gIEVtYWlsOiAvW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KSovLCAvLyBGcm9tIENvbW1vbk1hcmsgc3BlY1xuICBIVE1MT3BlblRhZzogLzxIVE1MVGFnTmFtZSg/OkhUTUxBdHRyaWJ1dGUpKlxccypcXC8/Pi8sXG4gIEhUTUxDbG9zZVRhZzogLzxcXC9IVE1MVGFnTmFtZVxccyo+LyxcbiAgSFRNTFRhZ05hbWU6IC9bQS1aYS16XVtBLVphLXowLTktXSovLCBcbiAgSFRNTENvbW1lbnQ6IC88IS0tKD86W14+LV18KD86W14+LV0oPzpbXi1dfC1bXi1dKSpbXi1dKSktLT4vLFxuICBIVE1MUEk6IC88XFw/KD86fC58KD86W14/XXxcXD9bXj5dKSopXFw/Pi8sXG4gIEhUTUxEZWNsYXJhdGlvbjogLzwhW0EtWl0rXFxzW14+XSo+LyxcbiAgSFRNTENEQVRBOiAvPCFcXFtDREFUQVxcWy4qP1xcXVxcXT4vLFxuICBIVE1MQXR0cmlidXRlOiAvXFxzK1tBLVphLXpfOl1bQS1aYS16MC05Xy46LV0qKD86SFRNTEF0dFZhbHVlKT8vLFxuICBIVE1MQXR0VmFsdWU6IC9cXHMqPVxccyooPzooPzonW14nXSonKXwoPzpcIlteXCJdKlwiKXwoPzpbXlxcc1wiJz08PmBdKykpLyxcbiAgS25vd25UYWc6IC9hZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aDF8aDJ8aDN8aDR8aDV8aDZ8aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRhYmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsL1xufTtcblxuLy8gRnJvbSBDb21tb25NYXJrLmpzLiBcbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvbkxlYWRpbmcgPSBuZXcgUmVnRXhwKC9eKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKS8pO1xuXG5leHBvcnQgY29uc3QgcHVuY3R1YXRpb25UcmFpbGluZyA9IG5ldyBSZWdFeHAoLyg/OlshXCIjJCUmJygpKissXFwtLi86Ozw9Pj9AW1xcXVxcXFxeX2B7fH1+XFx4QTFcXHhBN1xceEFCXFx4QjZcXHhCN1xceEJCXFx4QkZcXHUwMzdFXFx1MDM4N1xcdTA1NUEtXFx1MDU1RlxcdTA1ODlcXHUwNThBXFx1MDVCRVxcdTA1QzBcXHUwNUMzXFx1MDVDNlxcdTA1RjNcXHUwNUY0XFx1MDYwOVxcdTA2MEFcXHUwNjBDXFx1MDYwRFxcdTA2MUJcXHUwNjFFXFx1MDYxRlxcdTA2NkEtXFx1MDY2RFxcdTA2RDRcXHUwNzAwLVxcdTA3MERcXHUwN0Y3LVxcdTA3RjlcXHUwODMwLVxcdTA4M0VcXHUwODVFXFx1MDk2NFxcdTA5NjVcXHUwOTcwXFx1MEFGMFxcdTBERjRcXHUwRTRGXFx1MEU1QVxcdTBFNUJcXHUwRjA0LVxcdTBGMTJcXHUwRjE0XFx1MEYzQS1cXHUwRjNEXFx1MEY4NVxcdTBGRDAtXFx1MEZENFxcdTBGRDlcXHUwRkRBXFx1MTA0QS1cXHUxMDRGXFx1MTBGQlxcdTEzNjAtXFx1MTM2OFxcdTE0MDBcXHUxNjZEXFx1MTY2RVxcdTE2OUJcXHUxNjlDXFx1MTZFQi1cXHUxNkVEXFx1MTczNVxcdTE3MzZcXHUxN0Q0LVxcdTE3RDZcXHUxN0Q4LVxcdTE3REFcXHUxODAwLVxcdTE4MEFcXHUxOTQ0XFx1MTk0NVxcdTFBMUVcXHUxQTFGXFx1MUFBMC1cXHUxQUE2XFx1MUFBOC1cXHUxQUFEXFx1MUI1QS1cXHUxQjYwXFx1MUJGQy1cXHUxQkZGXFx1MUMzQi1cXHUxQzNGXFx1MUM3RVxcdTFDN0ZcXHUxQ0MwLVxcdTFDQzdcXHUxQ0QzXFx1MjAxMC1cXHUyMDI3XFx1MjAzMC1cXHUyMDQzXFx1MjA0NS1cXHUyMDUxXFx1MjA1My1cXHUyMDVFXFx1MjA3RFxcdTIwN0VcXHUyMDhEXFx1MjA4RVxcdTIzMDgtXFx1MjMwQlxcdTIzMjlcXHUyMzJBXFx1Mjc2OC1cXHUyNzc1XFx1MjdDNVxcdTI3QzZcXHUyN0U2LVxcdTI3RUZcXHUyOTgzLVxcdTI5OThcXHUyOUQ4LVxcdTI5REJcXHUyOUZDXFx1MjlGRFxcdTJDRjktXFx1MkNGQ1xcdTJDRkVcXHUyQ0ZGXFx1MkQ3MFxcdTJFMDAtXFx1MkUyRVxcdTJFMzAtXFx1MkU0MlxcdTMwMDEtXFx1MzAwM1xcdTMwMDgtXFx1MzAxMVxcdTMwMTQtXFx1MzAxRlxcdTMwMzBcXHUzMDNEXFx1MzBBMFxcdTMwRkJcXHVBNEZFXFx1QTRGRlxcdUE2MEQtXFx1QTYwRlxcdUE2NzNcXHVBNjdFXFx1QTZGMi1cXHVBNkY3XFx1QTg3NC1cXHVBODc3XFx1QThDRVxcdUE4Q0ZcXHVBOEY4LVxcdUE4RkFcXHVBOEZDXFx1QTkyRVxcdUE5MkZcXHVBOTVGXFx1QTlDMS1cXHVBOUNEXFx1QTlERVxcdUE5REZcXHVBQTVDLVxcdUFBNUZcXHVBQURFXFx1QUFERlxcdUFBRjBcXHVBQUYxXFx1QUJFQlxcdUZEM0VcXHVGRDNGXFx1RkUxMC1cXHVGRTE5XFx1RkUzMC1cXHVGRTUyXFx1RkU1NC1cXHVGRTYxXFx1RkU2M1xcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwQVxcdUZGMEMtXFx1RkYwRlxcdUZGMUFcXHVGRjFCXFx1RkYxRlxcdUZGMjBcXHVGRjNCLVxcdUZGM0RcXHVGRjNGXFx1RkY1QlxcdUZGNURcXHVGRjVGLVxcdUZGNjVdfFxcdUQ4MDBbXFx1REQwMC1cXHVERDAyXFx1REY5RlxcdURGRDBdfFxcdUQ4MDFcXHVERDZGfFxcdUQ4MDJbXFx1REM1N1xcdUREMUZcXHVERDNGXFx1REU1MC1cXHVERTU4XFx1REU3RlxcdURFRjAtXFx1REVGNlxcdURGMzktXFx1REYzRlxcdURGOTktXFx1REY5Q118XFx1RDgwNFtcXHVEQzQ3LVxcdURDNERcXHVEQ0JCXFx1RENCQ1xcdURDQkUtXFx1RENDMVxcdURENDAtXFx1REQ0M1xcdURENzRcXHVERDc1XFx1RERDNS1cXHVEREM5XFx1RERDRFxcdUREREJcXHVERERELVxcdUREREZcXHVERTM4LVxcdURFM0RcXHVERUE5XXxcXHVEODA1W1xcdURDQzZcXHVEREMxLVxcdURERDdcXHVERTQxLVxcdURFNDNcXHVERjNDLVxcdURGM0VdfFxcdUQ4MDlbXFx1REM3MC1cXHVEQzc0XXxcXHVEODFBW1xcdURFNkVcXHVERTZGXFx1REVGNVxcdURGMzctXFx1REYzQlxcdURGNDRdfFxcdUQ4MkZcXHVEQzlGfFxcdUQ4MzZbXFx1REU4Ny1cXHVERThCXSkkLyk7XG5cbi8qKlxuICogU3RhbmRhbG9uZSByZWd1bGFyIGV4cHJlc3Npb25zIHVzZWQgYnkgdGhlIGVkaXRvciBsb2dpYyAoVGlueU1ERS50cykgdGhhdCBhcmVuJ3QgcGFydCBvZiB0aGVcbiAqIGJsb2NrIC8gaW5saW5lIGdyYW1tYXIgdGFibGVzIGFib3ZlLiBDZW50cmFsaXplZCBoZXJlIHNvIGV2ZXJ5IHBhdHRlcm4gdGhlIGVkaXRvciByZWxpZXMgb24gbGl2ZXNcbiAqIGluIG9uZSBwbGFjZS4gUGF0dGVybnMgZmxhZ2dlZCBgZ2AgYXJlIG9ubHkgZXZlciB1c2VkIHdpdGggU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKCksIHdoaWNoXG4gKiByZXNldHMgbGFzdEluZGV4LCBzbyBzaGFyaW5nIGEgc2luZ2xlIGluc3RhbmNlIGFjcm9zcyBjYWxsIHNpdGVzIGlzIHNhZmUuXG4gKi9cbmV4cG9ydCBjb25zdCBlZGl0b3JSZWdFeHA6IFJlY29yZDxzdHJpbmcsIFJlZ0V4cD4gPSB7XG4gIC8vIFBsYXRmb3JtIGRldGVjdGlvbiBhbmQgbGluZSBzcGxpdHRpbmcuXG4gIG1hY1BsYXRmb3JtOiAvTWFjfGlQb2R8aVBob25lfGlQYWQvLFxuICBsaW5lU3BsaXQ6IC8oPzpcXHJcXG58XFxyfFxcbikvLFxuXG4gIC8vIFJlcGxhY2VtZW50LXRlbXBsYXRlIHBsYWNlaG9sZGVyIHN1YnN0aXR1dGlvbi5cbiAgcmVwbGFjZW1lbnRQbGFjZWhvbGRlcjogLyhcXCR7MSwyfSkoWzAtOV0pL2csIC8vICROIChsaXRlcmFsKSBvciAkJE4gKGlubGluZSBjb250ZW50KVxuICBpbmxpbmVDb250ZW50UGxhY2Vob2xkZXI6IC9cXCRcXCQoWzAtOV0pLywgLy8gbG9jYXRlIHRoZSAkJE4gaW5saW5lLWNvbnRlbnQgcGxhY2Vob2xkZXJcbiAgaW5saW5lUmVwbGFjZW1lbnRQbGFjZWhvbGRlcjogL1xcJChbMS05XSkvZywgLy8gc2luZ2xlLSQgcGxhY2Vob2xkZXIgaW4gbWVyZ2VkIGlubGluZSBncmFtbWFyXG5cbiAgLy8gQmxhbmsgLyB3aGl0ZXNwYWNlIGhlbHBlcnMuXG4gIGJsYW5rQ29udGVudDogL15cXHMqJC8sXG4gIGxlYWRpbmdXaGl0ZXNwYWNlOiAvXlxccy8sXG4gIHRyYWlsaW5nV2hpdGVzcGFjZTogL1xccyQvLFxuICBsZWFkaW5nV2hpdGVzcGFjZVJ1bjogL15cXHMrLyxcbiAgc3Vycm91bmRpbmdXaGl0ZXNwYWNlOiAvXig/PGxlYWRpbmc+XFxzKikuKlxcUyg/PHRyYWlsaW5nPlxccyopJC8sXG5cbiAgLy8gTGlzdCAvIHRhc2sgbGlzdCBpdGVtcy5cbiAgdGFza0xpc3RJdGVtOiAvXihcXFspKFsgeFhdKShcXF0pKFxcc3wkKShbXFxzXFxTXSopJC8sXG4gIG9yZGVyZWRMaXN0TnVtYmVyOiAvXFxkezEsOX0vLFxuXG4gIC8vIE9wZW5pbmcgdGFnIG5hbWUgb2YgYW4gaW5saW5lIEhUTUwgZWxlbWVudC5cbiAgaW5saW5lVGFnTmFtZTogL148XFxzKihbYS16QS1aXVthLXpBLVowLTldKikvLFxuXG4gIC8vIEV2ZW50IHR5cGUgbWF0Y2hpbmcgKGFkZEV2ZW50TGlzdGVuZXIpLlxuICBjaGFuZ2VFdmVudDogL14oPzpjaGFuZ2V8aW5wdXQpJC9pLFxuICBzZWxlY3Rpb25FdmVudDogL14oPzpzZWxlY3Rpb258c2VsZWN0aW9uY2hhbmdlKSQvaSxcbiAgZHJvcEV2ZW50OiAvXig/OmRyb3ApJC9pLFxuXG4gIC8vIElubGluZSBlbXBoYXNpcyAvIHN0cmlrZXRocm91Z2ggZGVsaW1pdGVycyBhbmQgdGhlIGV4dGVuZGVkLWF1dG9saW5rIGJvdW5kYXJ5LlxuICBhdXRvbGlua1ByZWNlZGluZ0NoYXI6IC9bXFxzKl9+KF0vLFxuICBlbXBoYXNpc0RlbGltaXRlcjogLyheXFwqKyl8KF5fKykvLFxuICBzdHJpa2V0aHJvdWdoRGVsaW1pdGVyOiAvXn5+LyxcblxuICAvLyBHRk0gZXh0ZW5kZWQgKG5vbi1kZWxpbWl0ZWQpIGF1dG9saW5rcy5cbiAgYXV0b2xpbmtTY2hlbWU6IC9eKD86aHR0cHM/fGZ0cCk6XFwvXFwvL2ksXG4gIGF1dG9saW5rV3d3OiAvXnd3d1xcLi9pLFxuICBhdXRvbGlua0RvbWFpbjogL15bYS16QS1aMC05Xy1dKyg/OlxcLlthLXpBLVowLTlfLV0rKSsvLFxuICBhdXRvbGlua1BhdGg6IC9eW15cXHM8XSovLFxuICBhdXRvbGlua1Byb3RvY29sOiAvXig/Om1haWx0b3x4bXBwKTovaSxcbiAgYXV0b2xpbmtYbXBwOiAvXnhtcHA6L2ksXG4gIGF1dG9saW5rWG1wcFJlc291cmNlOiAvXlxcL1thLXpBLVowLTlALlxcLV9dKy8sXG4gIGF1dG9saW5rRW1haWw6IC9eW2EtekEtWjAtOS5cXC1fK10rQFthLXpBLVowLTlfLV0rKD86XFwuW2EtekEtWjAtOV8tXSspKy8sXG4gIGVtYWlsVHJhaWxpbmdDaGFyOiAvWy1fXSQvLFxuICBlbWFpbFRsZDogL1xcLlthLXpBLVowLTldKyQvLFxuXG4gIC8vIExpbmsgLyBpbWFnZSBkZXN0aW5hdGlvbiBwYXJzZXIgKGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgc2Nhbm5pbmcpLlxuICBsaW5rQ2xvc2luZ0JyYWNrZXQ6IC9eXFxdLyxcbiAgb3BlbmluZ0FuZ2xlOiAvXjwvLFxuICBjbG9zaW5nQW5nbGU6IC9ePi8sXG4gIHRpdGxlUXVvdGU6IC9eW1wiJ10vLFxuICBvcGVuaW5nUGFyZW46IC9eXFwoLyxcbiAgY2xvc2luZ1BhcmVuOiAvXlxcKS8sXG4gIGVuZHNXaXRoT3BlbkFuZ2xlOiAvPCQvLFxuICBjb250YWluc09wZW5BbmdsZTogLzwvLFxuICBhbnlDaGFyOiAvXi4vLFxufTtcblxuLyoqXG4gKiBUaGlzIGlzIENvbW1vbk1hcmsncyBibG9jayBncmFtbWFyLCBidXQgd2UncmUgaWdub3JpbmcgbmVzdGVkIGJsb2NrcyBoZXJlLlxuICovXG5leHBvcnQgY29uc3QgbGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHtcbiAgVE1IMTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgxXCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDFcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDI6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jI1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDJcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMlwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1IMzogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjI1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDNcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IM1wiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1INDogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjIyNcXHMpKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg0XCI+JDE8L3NwYW4+JCQyPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDRcIj4kMzwvc3Bhbj4nXG4gIH0sXG4gIFRNSDU6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30jIyMjI1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDVcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INVwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1INjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjIyMjI1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDZcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INlwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1CbG9ja3F1b3RlOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9PlsgXT8pKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUJsb2NrcXVvdGVcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIFRNQ29kZUZlbmNlQmFja3RpY2tPcGVuOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KD88c2VxPmBgYGAqKVxccyopKFteYF0qPykoXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlRmVuY2VCYWNrdGlja1wiPiQxPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1JbmZvU3RyaW5nXCI+JDM8L3NwYW4+JDQnXG4gIH0sXG4gIFRNQ29kZUZlbmNlVGlsZGVPcGVuOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KD88c2VxPn5+fn4qKVxccyopKC4qPykoXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlRmVuY2VUaWxkZVwiPiQxPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1JbmZvU3RyaW5nXCI+JDM8L3NwYW4+JDQnXG4gIH0sXG4gIFRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSg/PHNlcT5gYGBgKikpKFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZUZlbmNlQmFja3RpY2tcIj4kMTwvc3Bhbj4kMydcbiAgfSxcbiAgVE1Db2RlRmVuY2VUaWxkZUNsb3NlOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KD88c2VxPn5+fn4qKSkoXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlRmVuY2VUaWxkZVwiPiQxPC9zcGFuPiQzJ1xuICB9LFxuICBUTUJsYW5rTGluZTogeyBcbiAgICByZWdleHA6IC9eKFsgXFx0XSopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnJDAnXG4gIH0sXG4gIFRNU2V0ZXh0SDFNYXJrZXI6IHsgXG4gICAgcmVnZXhwOiAvXiB7MCwzfT0rXFxzKiQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTVNldGV4dEgxTWFya2VyXCI+JDA8L3NwYW4+J1xuICB9LFxuICBUTVNldGV4dEgyTWFya2VyOiB7IFxuICAgIHJlZ2V4cDogL14gezAsM30tK1xccyokLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1TZXRleHRIMU1hcmtlclwiPiQwPC9zcGFuPidcbiAgfSxcbiAgVE1IUjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfShcXCpbIFxcdF0qXFwqWyBcXHRdKlxcKlsgXFx0Kl0qKXwoLVsgXFx0XSotWyBcXHRdKi1bIFxcdC1dKil8KF9bIFxcdF0qX1sgXFx0XSpfWyBcXHRfXSopKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUhSXCI+JDA8L3NwYW4+J1xuICB9LFxuICBUTVVMOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9WysqLV0gezEsNH0pKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTVVMXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICBUTU9MOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9XFxkezEsOX1bLildIHsxLDR9KSguKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1PTFwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgLy8gVE9ETzogVGhpcyBpcyBjdXJyZW50bHkgcHJldmVudGluZyBzdWJsaXN0cyAoYW5kIGFueSBjb250ZW50IHdpdGhpbiBsaXN0IGl0ZW1zLCByZWFsbHkpIGZyb20gd29ya2luZ1xuICBUTUluZGVudGVkQ29kZTogeyBcbiAgICByZWdleHA6IC9eKCB7NH18XFx0KSguKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1JbmRlbnRlZENvZGVcIj4kMTwvc3Bhbj4kMidcbiAgfSxcbiAgVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvbjoge1xuICAgIC8vIFRPRE86IExpbmsgZGVzdGluYXRpb24gY2FuJ3QgaW5jbHVkZSB1bmJhbGFuY2VkIHBhcmFudGhlc2VzLCBidXQgd2UganVzdCBpZ25vcmUgdGhhdCBoZXJlIFxuICAgIHJlZ2V4cDogL14oIHswLDN9XFxbXFxzKikoW15cXHNcXF1dKD86W15cXF1dfFxcXFxcXF0pKj8pKFxccypcXF06XFxzKikoKD86W15cXHM8Pl0rKXwoPzo8KD86W148PlxcXFxdfFxcXFwuKSo+KSk/KFxccyopKCg/OlxcKCg/OlteKClcXFxcXXxcXFxcLikqXFwpKXwoPzpcIig/OlteXCJcXFxcXXxcXFxcLikqXCIpfCg/OicoPzpbXidcXFxcXXxcXFxcLikqJykpPyhcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUxpbmtMYWJlbCBUTUxpbmtMYWJlbF9EZWZpbml0aW9uXCI+JDI8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIj4kMzwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTGlua0Rlc3RpbmF0aW9uXCI+JDQ8L3NwYW4+JDU8c3BhbiBjbGFzcz1cIlRNTGlua1RpdGxlXCI+JDY8L3NwYW4+JDcnLFxuICAgIGxhYmVsUGxhY2Vob2xkZXI6IDIsIC8vIHRoaXMgZGVmaW5lcyB3aGljaCBwbGFjZWhvbGRlciBpbiB0aGUgYWJvdmUgcmVnZXggaXMgdGhlIGxpbmsgXCJsYWJlbFwiXG4gIH0sXG59O1xuXG4vKipcbiAqIEhUTUwgYmxvY2tzIGhhdmUgbXVsdGlwbGUgZGlmZmVyZW50IGNsYXNzZXMgb2Ygb3BlbmVyIGFuZCBjbG9zZXIuIFRoaXMgYXJyYXkgZGVmaW5lcyBhbGwgdGhlIGNhc2VzXG4gKi9cbmV4cG9ydCBjb25zdCBodG1sQmxvY2tHcmFtbWFyOiBIVE1MQmxvY2tSdWxlW10gPSBbXG4gIHsgc3RhcnQ6IC9eIHswLDN9PCg/OnNjcmlwdHxwcmV8c3R5bGUpKD86XFxzfD58JCkvaSwgZW5kOiAvKD86PFxcL3NjcmlwdD58PFxcL3ByZT58PFxcL3N0eWxlPikvaSwgcGFyYUludGVycnVwdDogdHJ1ZSB9LFxuICB7IHN0YXJ0OiAvXiB7MCwzfTwhLS0vLCBlbmQ6IC8tLT4vLCBwYXJhSW50ZXJydXB0OiB0cnVlIH0sXG4gIHsgc3RhcnQ6IC9eIHswLDN9PFxcPy8sIGVuZDogL1xcPz4vLCBwYXJhSW50ZXJydXB0OiB0cnVlIH0sXG4gIHsgc3RhcnQ6IC9eIHswLDN9PCFbQS1aXS8sIGVuZDogLz4vLCBwYXJhSW50ZXJydXB0IDogdHJ1ZX0sXG4gIHsgc3RhcnQ6IC9eIHswLDN9PCFcXFtDREFUQVxcWy8sIGVuZDogL1xcXVxcXT4vLCBwYXJhSW50ZXJydXB0IDogdHJ1ZX0sXG4gIHsgc3RhcnQ6IC9eIHswLDN9KD86PHw8XFwvKSg/Oktub3duVGFnKSg/Olxcc3w+fFxcLz58JCkvaSwgZW5kOiBmYWxzZSwgcGFyYUludGVycnVwdDogdHJ1ZX0sXG4gIHsgc3RhcnQ6IC9eIHswLDN9KD86SFRNTE9wZW5UYWd8SFRNTENsb3NlVGFnKVxccyokLywgZW5kOiBmYWxzZSwgcGFyYUludGVycnVwdDogZmFsc2V9LFxuXTtcblxuLyoqXG4gKiBTdHJ1Y3R1cmUgb2YgdGhlIG9iamVjdDpcbiAqIFRvcCBsZXZlbCBlbnRyaWVzIGFyZSBydWxlcywgZWFjaCBjb25zaXN0aW5nIG9mIGEgcmVndWxhciBleHByZXNzaW9ucyAoaW4gc3RyaW5nIGZvcm1hdCkgYXMgd2VsbCBhcyBhIHJlcGxhY2VtZW50LlxuICogSW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIHJlcGxhY2VtZW50cyBmcm9tIHRoZSBvYmplY3QgJ3JlcGxhY2VtZW50cycgd2lsbCBiZSBwcm9jZXNzZWQgYmVmb3JlIGNvbXBpbGluZyBpbnRvIHRoZSBwcm9wZXJ0eSByZWdleHAuXG4gKi9cbmV4cG9ydCBjb25zdCBpbmxpbmVHcmFtbWFyOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7XG4gIGVzY2FwZSA6IHtcbiAgICByZWdleHA6IC9eXFxcXChBU0NJSVB1bmN0dWF0aW9uKS8sXG4gICAgcmVwbGFjZW1lbnQgOiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNRXNjYXBlXCI+XFxcXDwvc3Bhbj4kMSdcbiAgfSxcbiAgY29kZSA6IHtcbiAgICByZWdleHA6IC9eKGArKSgoPzpbXmBdKXwoPzpbXmBdLio/W15gXSkpKFxcMSkvLFxuICAgIHJlcGxhY2VtZW50IDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVcIj4kMTwvc3Bhbj48Y29kZSBjbGFzcz1cIlRNQ29kZVwiPiQyPC9jb2RlPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVcIj4kMzwvc3Bhbj4nIFxuICB9LFxuICBhdXRvbGluayA6IHtcbiAgICByZWdleHA6IC9ePCgoPzpTY2hlbWU6W15cXHM8Pl0qKXwoPzpFbWFpbCkpPi8sXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1BdXRvbGlua1wiPiZsdDs8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUF1dG9saW5rXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQXV0b2xpbmtcIj4mZ3Q7PC9zcGFuPidcbiAgfSxcbiAgaHRtbCA6IHtcbiAgICByZWdleHA6IC9eKCg/OkhUTUxPcGVuVGFnKXwoPzpIVE1MQ2xvc2VUYWcpfCg/OkhUTUxDb21tZW50KXwoPzpIVE1MUEkpfCg/OkhUTUxEZWNsYXJhdGlvbil8KD86SFRNTENEQVRBKSkvLFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTUhUTUxcIj4kMTwvc3Bhbj4nLFxuICB9LFxuICBsaW5rT3BlbiA6IHtcbiAgICByZWdleHA6IC9eXFxbLyxcbiAgICByZXBsYWNlbWVudDogJydcbiAgfSxcbiAgaW1hZ2VPcGVuIDoge1xuICAgIHJlZ2V4cDogL14hXFxbLyxcbiAgICByZXBsYWNlbWVudCA6ICcnXG4gIH0sXG4gIGxpbmtMYWJlbCA6IHtcbiAgICByZWdleHA6IC9eKFxcW1xccyopKFteXFxdXSo/KShcXHMqXFxdKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICcnLFxuICAgIGxhYmVsUGxhY2Vob2xkZXI6IDJcbiAgfSxcbiAgZGVmYXVsdCA6IHtcbiAgICByZWdleHA6IC9eKC58KD86Tm90VHJpZ2dlckNoYXIrKSkvLFxuICAgIHJlcGxhY2VtZW50OiAnJDEnXG4gIH1cbn07XG5cbi8vIFByb2Nlc3MgcmVwbGFjZW1lbnRzIGluIHJlZ2V4cHNcbmNvbnN0IHJlcGxhY2VtZW50UmVnZXhwID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhyZXBsYWNlbWVudHMpLmpvaW4oJ3wnKSk7XG5cbi8vIElubGluZVxuY29uc3QgaW5saW5lUnVsZXMgPSBbLi4uT2JqZWN0LmtleXMoaW5saW5lR3JhbW1hcildO1xuZm9yIChsZXQgcnVsZSBvZiBpbmxpbmVSdWxlcykge1xuICBsZXQgcmUgPSBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5zb3VyY2U7XG4gIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2UuIFRoaXMgbWVhbnMgaXQgYWxzbyB3b3JrcyBvdmVyIG11bHRpcGxlIGxldmVscyAocmVwbGFjZW1lbnRzIGNvbnRhaW5pbmcgcmVwbGFjZW1lbnRzKVxuICB3aGlsZSAocmUubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgcmUgPSByZS5yZXBsYWNlKHJlcGxhY2VtZW50UmVnZXhwLCAoc3RyaW5nKSA9PiB7IHJldHVybiByZXBsYWNlbWVudHNbc3RyaW5nXS5zb3VyY2U7IH0pO1xuICB9XG4gIGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwID0gbmV3IFJlZ0V4cChyZSwgaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZmxhZ3MpO1xufVxuXG4vLyBIVE1MIEJsb2NrIChvbmx5IG9wZW5pbmcgcnVsZSBpcyBwcm9jZXNzZWQgY3VycmVudGx5KVxuZm9yIChsZXQgcnVsZSBvZiBodG1sQmxvY2tHcmFtbWFyKSB7XG4gIGxldCByZSA9IHJ1bGUuc3RhcnQuc291cmNlO1xuICAvLyBSZXBsYWNlIHdoaWxlIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZXBsYWNlLiBUaGlzIG1lYW5zIGl0IGFsc28gd29ya3Mgb3ZlciBtdWx0aXBsZSBsZXZlbHMgKHJlcGxhY2VtZW50cyBjb250YWluaW5nIHJlcGxhY2VtZW50cylcbiAgd2hpbGUgKHJlLm1hdGNoKHJlcGxhY2VtZW50UmVnZXhwKSkge1xuICAgIHJlID0gcmUucmVwbGFjZShyZXBsYWNlbWVudFJlZ2V4cCwgKHN0cmluZykgPT4geyByZXR1cm4gcmVwbGFjZW1lbnRzW3N0cmluZ10uc291cmNlOyB9KTtcbiAgfVxuICBydWxlLnN0YXJ0ID0gbmV3IFJlZ0V4cChyZSwgcnVsZS5zdGFydC5mbGFncyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1lcmdlZCBpbmxpbmUgZ3JhbW1hciBieSBjb21iaW5pbmcgdGhlIGRlZmF1bHQgaW5saW5lIGdyYW1tYXIgd2l0aCBjdXN0b20gcnVsZXMuXG4gKiBDdXN0b20gcnVsZXMgYXJlIHByb2Nlc3NlZCBhbmQgdGhlaXIgcmVnZXhwIHBhdHRlcm5zIGFyZSBleHBhbmRlZCB3aXRoIHJlcGxhY2VtZW50cy5cbiAqIEBwYXJhbSBjdXN0b21SdWxlcyAtIE9iamVjdCBjb250YWluaW5nIGN1c3RvbSBpbmxpbmUgZ3JhbW1hciBydWxlc1xuICogQHJldHVybnMgTWVyZ2VkIGlubGluZSBncmFtbWFyIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcihjdXN0b21SdWxlczogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+ID0ge30pOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4ge1xuICBjb25zdCBtZXJnZWQgPSB7IC4uLmlubGluZUdyYW1tYXIgfTtcbiAgXG4gIC8vIFByb2Nlc3MgY3VzdG9tIHJ1bGVzXG4gIGZvciAoY29uc3QgW3J1bGVOYW1lLCBydWxlXSBvZiBPYmplY3QuZW50cmllcyhjdXN0b21SdWxlcykpIHtcbiAgICAvLyBDb3B5IHRoZSBydWxlIHRvIGF2b2lkIG1vZGlmeWluZyB0aGUgb3JpZ2luYWxcbiAgICBjb25zdCBwcm9jZXNzZWRSdWxlID0geyAuLi5ydWxlIH07XG4gICAgXG4gICAgLy8gUHJvY2VzcyByZXBsYWNlbWVudHMgaW4gdGhlIHJlZ2V4cFxuICAgIGxldCByZWdleHBTb3VyY2UgPSBydWxlLnJlZ2V4cC5zb3VyY2U7XG4gICAgY29uc3QgcmVwbGFjZW1lbnRSZWdleHAgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykuam9pbignfCcpKTtcbiAgICBcbiAgICAvLyBSZXBsYWNlIHdoaWxlIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZXBsYWNlXG4gICAgd2hpbGUgKHJlZ2V4cFNvdXJjZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICAgIHJlZ2V4cFNvdXJjZSA9IHJlZ2V4cFNvdXJjZS5yZXBsYWNlKHJlcGxhY2VtZW50UmVnZXhwLCAobWF0Y2gpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50c1ttYXRjaF0uc291cmNlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIHByb2Nlc3NlZFJ1bGUucmVnZXhwID0gbmV3IFJlZ0V4cChyZWdleHBTb3VyY2UsIHJ1bGUucmVnZXhwLmZsYWdzKTtcbiAgICBtZXJnZWRbcnVsZU5hbWVdID0gcHJvY2Vzc2VkUnVsZTtcbiAgfVxuICBcbiAgcmV0dXJuIG1lcmdlZDtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIEhUTUwgc3BlY2lhbCBjaGFyYWN0ZXJzICg8LCA+LCBhbmQgJikgaW4gdGhlIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHJhdyBzdHJpbmcgdG8gYmUgZXNjYXBlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHN0cmluZywgcmVhZHkgdG8gYmUgdXNlZCBpbiBIVE1MXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodG1sZXNjYXBlKHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIChzdHJpbmcgPyBzdHJpbmcgOiAnJylcbiAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlKC88L2csICcmbHQ7JylcbiAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xufVxuXG4vKipcbiAqIENvbnRhaW5zIHRoZSBjb21tYW5kcyB0aGF0IGNhbiBiZSBzZW50IHRvIHRoZSBlZGl0b3IuIENvbnRhaW5zIG9iamVjdHMgd2l0aCBhIG5hbWUgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kLlxuICogRWFjaCBvZiB0aGUgb2JqZWN0cyBjb250YWlucyB0aGUgZm9sbG93aW5nIGtleXM6XG4gKiBcbiAqICAgLSB0eXBlOiBDYW4gYmUgZWl0aGVyIGlubGluZSAoZm9yIGlubGluZSBmb3JtYXR0aW5nKSBvciBsaW5lIChmb3IgYmxvY2sgLyBsaW5lIGZvcm1hdHRpbmcpLlxuICogICAtIGNsYXNzTmFtZTogVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgY29tbWFuZCBpcyBhY3RpdmUgYXQgYSBnaXZlbiBwb3NpdGlvbi4gXG4gKiAgICAgRm9yIGxpbmUgZm9ybWF0dGluZywgdGhpcyBsb29rcyBhdCB0aGUgY2xhc3Mgb2YgdGhlIGxpbmUgZWxlbWVudC4gRm9yIGlubGluZSBlbGVtZW50cywgdHJpZXMgdG8gZmluZCBhbiBlbmNsb3NpbmcgZWxlbWVudCB3aXRoIHRoYXQgY2xhc3MuXG4gKiAgIC0gc2V0IC8gdW5zZXQ6IENvbnRhaW4gaW5zdHJ1Y3Rpb25zIGhvdyB0byBzZXQgYW5kIHVuc2V0IHRoZSBjb21tYW5kLiBGb3IgbGluZSB0eXBlIGNvbW1hbmRzLCBib3RoIGNvbnNpc3Qgb2YgYSBwYXR0ZXJuIGFuZCByZXBsYWNlbWVudCB0aGF0IFxuICogICAgIHdpbGwgYmUgYXBwbGllZCB0byBlYWNoIGxpbmUgKHVzaW5nIFN0cmluZy5yZXBsYWNlKS4gRm9yIGlubGluZSB0eXBlIGNvbW1hbmRzLCB0aGUgc2V0IG9iamVjdCBjb250YWlucyBhIHByZSBhbmQgcG9zdCBzdHJpbmcgd2hpY2ggd2lsbFxuICogICAgIGJlIGluc2VydGVkIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHNlbGVjdGlvbi4gVGhlIHVuc2V0IG9iamVjdCBjb250YWlucyBhIHByZVBhdHRlcm4gYW5kIGEgcG9zdFBhdHRlcm4uIEJvdGggc2hvdWxkIGJlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYW5kIFxuICogICAgIHRoZXkgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSBwb3J0aW9uIG9mIHRoZSBsaW5lIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHNlbGVjdGlvbiAodXNpbmcgU3RyaW5nLnJlcGxhY2UsIHdpdGggYW4gZW1wdHkgcmVwbGFjZW1lbnQgc3RyaW5nKS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBDb21tYW5kPiA9IHtcbiAgLy8gUmVwbGFjZW1lbnRzIGZvciB1bnNldCBmb3IgaW5saW5lIGNvbW1hbmRzIGFyZSAnJyBieSBkZWZhdWx0XG4gIGJvbGQ6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1TdHJvbmcnLCBcbiAgICBzZXQ6IHtwcmU6ICcqKicsIHBvc3Q6ICcqKid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC8oPzpcXCpcXCp8X18pJC8sIHBvc3RQYXR0ZXJuOiAvXig/OlxcKlxcKnxfXykvfVxuICB9LCBcbiAgaXRhbGljOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNRW0nLCBcbiAgICBzZXQ6IHtwcmU6ICcqJywgcG9zdDogJyonfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvKD86XFwqfF8pJC8sIHBvc3RQYXR0ZXJuOiAvXig/OlxcKnxfKS99XG4gIH0sXG4gIGNvZGU6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1Db2RlJywgXG4gICAgc2V0OiB7cHJlOiAnYCcsIHBvc3Q6ICdgJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogL2ArJC8sIHBvc3RQYXR0ZXJuOiAvXmArL30gLy8gRklYTUUgdGhpcyBkb2Vzbid0IGVuc3VyZSBiYWxhbmNlZCBiYWNrdGlja3MgcmlnaHQgbm93XG4gIH0sIFxuICBzdHJpa2V0aHJvdWdoOiB7XG4gICAgdHlwZTogJ2lubGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNU3RyaWtldGhyb3VnaCcsIFxuICAgIHNldDoge3ByZTogJ35+JywgcG9zdDogJ35+J30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjovfn4kLywgcG9zdFBhdHRlcm46IC9efn4vIH1cbiAgfSxcbiAgaDE6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDEnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoMjoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMicsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDM6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDMnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDQ6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDQnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyMgJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30jIyMjI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgaDY6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNSDYnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJyMjIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyMjI1xccyspKC4qPykoKD86XFxzKyMrXFxzKik/KSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSxcbiAgdWw6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNVUwnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJy0gJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM31bKyotXSB7MSw0fSkoLiopJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBvbDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1PTCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnJCMuICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9XFxkezEsOX1bLildIHsxLDR9KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sIFxuICBibG9ja3F1b3RlOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUJsb2NrcXVvdGUnLCBcbiAgICBzZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30oPzooPzojK3xbMC05XXsxLDl9WykuXXxbPlxcLSorXSlcXHMrKT8pKC4qKSQvLCByZXBsYWNlbWVudDogJz4gJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM30+WyBdPykoLiopJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxufTsiLCJpbXBvcnQge1xuICBpbmxpbmVHcmFtbWFyLFxuICBsaW5lR3JhbW1hcixcbiAgcHVuY3R1YXRpb25MZWFkaW5nLFxuICBwdW5jdHVhdGlvblRyYWlsaW5nLFxuICBlZGl0b3JSZWdFeHAsXG4gIGh0bWxlc2NhcGUsXG4gIGh0bWxCbG9ja0dyYW1tYXIsXG4gIGNvbW1hbmRzLFxuICBIVE1MQmxvY2tSdWxlLFxuICBDb21tYW5kLFxuICBMaW5lQ29tbWFuZCxcbiAgR3JhbW1hclJ1bGUsXG4gIGNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIsXG59IGZyb20gXCIuL2dyYW1tYXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBFZGl0b3JQcm9wcyB7XG4gIGVsZW1lbnQ/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgZWRpdG9yPzogc3RyaW5nIHwgSFRNTEVsZW1lbnQ7XG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG4gIHRleHRhcmVhPzogc3RyaW5nIHwgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgY3VzdG9tSW5saW5lR3JhbW1hcj86IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPjtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9zaXRpb24ge1xuICByb3c6IG51bWJlcjtcbiAgY29sOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGlzdG9yeVN0YXRlIHtcbiAgY29udGVudDogc3RyaW5nO1xuICBzZWxlY3Rpb246IFBvc2l0aW9uIHwgbnVsbDtcbiAgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlRXZlbnQge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIGxpbmVzRGlydHk6IGJvb2xlYW5bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3Rpb25FdmVudCB7XG4gIGZvY3VzOiBQb3NpdGlvbjtcbiAgYW5jaG9yOiBQb3NpdGlvbjtcbiAgY29tbWFuZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcEV2ZW50IHtcbiAgZGF0YVRyYW5zZmVyOiBEYXRhVHJhbnNmZXI7XG59XG5cbnR5cGUgRXZlbnRUeXBlID0gJ2NoYW5nZScgfCAnc2VsZWN0aW9uJyB8ICdkcm9wJztcbnR5cGUgRXZlbnRIYW5kbGVyPFQ+ID0gKGV2ZW50OiBUKSA9PiB2b2lkO1xuXG5leHBvcnQgY2xhc3MgRWRpdG9yIHtcbiAgcHVibGljIGU6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyB0ZXh0YXJlYTogSFRNTFRleHRBcmVhRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lRWxlbWVudHM6IE5vZGVMaXN0T2Y8Q2hpbGROb2RlPiB8IEhUTUxDb2xsZWN0aW9uIHwgQ2hpbGROb2RlW10gPSBbXTtcbiAgcHVibGljIGxpbmVUeXBlczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVDYXB0dXJlczogUmVnRXhwRXhlY0FycmF5W10gPSBbXTtcbiAgcHVibGljIGxpbmVSZXBsYWNlbWVudHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5rTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZURpcnR5OiBib29sZWFuW10gPSBbXTtcbiAgcHVibGljIGxhc3RDb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGN1c3RvbUlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHt9O1xuICBwcml2YXRlIG1lcmdlZElubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IGlubGluZUdyYW1tYXI7XG4gIHByaXZhdGUgaGFzRm9jdXM6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIGxhc3RTZWxlY3Rpb246IHsgZm9jdXM6IFBvc2l0aW9uIHwgbnVsbDsgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgfSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHBsYWNlaG9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGxpc3RlbmVyczoge1xuICAgIGNoYW5nZTogRXZlbnRIYW5kbGVyPENoYW5nZUV2ZW50PltdO1xuICAgIHNlbGVjdGlvbjogRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50PltdO1xuICAgIGRyb3A6IEV2ZW50SGFuZGxlcjxEcm9wRXZlbnQ+W107XG4gIH0gPSB7XG4gICAgY2hhbmdlOiBbXSxcbiAgICBzZWxlY3Rpb246IFtdLFxuICAgIGRyb3A6IFtdLFxuICB9O1xuXG4gIHByaXZhdGUgdW5kb1N0YWNrOiBIaXN0b3J5U3RhdGVbXSA9IFtdO1xuICBwcml2YXRlIHJlZG9TdGFjazogSGlzdG9yeVN0YXRlW10gPSBbXTtcbiAgcHJpdmF0ZSBpc1Jlc3RvcmluZ0hpc3Rvcnk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBtYXhIaXN0b3J5OiBudW1iZXIgPSAxMDA7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEVkaXRvclByb3BzID0ge30pIHtcbiAgICB0aGlzLmUgPSBudWxsO1xuICAgIHRoaXMudGV4dGFyZWEgPSBudWxsO1xuICAgIHRoaXMubGluZXMgPSBbXTtcbiAgICB0aGlzLmxpbmVFbGVtZW50cyA9IFtdIGFzIENoaWxkTm9kZVtdO1xuICAgIHRoaXMubGluZVR5cGVzID0gW107XG4gICAgdGhpcy5saW5lQ2FwdHVyZXMgPSBbXTtcbiAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHMgPSBbXTtcbiAgICB0aGlzLmxpbmtMYWJlbHMgPSBbXTtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IFtdO1xuICAgIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5oYXNGb2N1cyA9IHRydWU7XG4gICAgdGhpcy5sYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICB0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIgPSBwcm9wcy5jdXN0b21JbmxpbmVHcmFtbWFyIHx8IHt9O1xuICAgIHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hciA9IGNyZWF0ZU1lcmdlZElubGluZUdyYW1tYXIodGhpcy5jdXN0b21JbmxpbmVHcmFtbWFyKTtcblxuICAgIHRoaXMubGlzdGVuZXJzID0ge1xuICAgICAgY2hhbmdlOiBbXSxcbiAgICAgIHNlbGVjdGlvbjogW10sXG4gICAgICBkcm9wOiBbXSxcbiAgICB9O1xuXG4gICAgbGV0IGVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBwcm9wcy5lbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocHJvcHMuZWxlbWVudCkge1xuICAgICAgZWxlbWVudCA9IHByb3BzLmVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy50ZXh0YXJlYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy50ZXh0YXJlYSkgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICB9IGVsc2UgaWYgKHByb3BzLnRleHRhcmVhKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gcHJvcHMudGV4dGFyZWE7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHtcbiAgICAgIGlmICghZWxlbWVudCkgZWxlbWVudCA9IHRoaXMudGV4dGFyZWE7XG4gICAgfVxuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LnRhZ05hbWUgPT09IFwiVEVYVEFSRUFcIikge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IGVsZW1lbnQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICAgIGVsZW1lbnQgPSB0aGlzLnRleHRhcmVhLnBhcmVudE5vZGUgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH1cblxuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwcm9wcy5wbGFjZWhvbGRlciAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHByb3BzLnBsYWNlaG9sZGVyXG4gICAgICA6IHRoaXMudGV4dGFyZWE/LnBsYWNlaG9sZGVyIHx8IHVuZGVmaW5lZDtcblxuICAgIHRoaXMudW5kb1N0YWNrID0gW107XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICAgIHRoaXMubWF4SGlzdG9yeSA9IDEwMDtcblxuICAgIHRoaXMuY3JlYXRlRWRpdG9yRWxlbWVudChlbGVtZW50LCBwcm9wcyk7XG4gICAgdGhpcy5zZXRDb250ZW50KFxuICAgICAgdHlwZW9mIHByb3BzLmNvbnRlbnQgPT09IFwic3RyaW5nXCJcbiAgICAgICAgPyBwcm9wcy5jb250ZW50XG4gICAgICAgIDogdGhpcy50ZXh0YXJlYVxuICAgICAgICA/IHRoaXMudGV4dGFyZWEudmFsdWVcbiAgICAgICAgOiBcIiMgSGVsbG8gVGlueU1ERSFcXG5FZGl0ICoqaGVyZSoqXCJcbiAgICApO1xuICAgIFxuICAgIHRoaXMuZSEuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHRoaXMuaGFuZGxlVW5kb1JlZG9LZXkoZSkpO1xuICB9XG5cbiAgZ2V0IGNhblVuZG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudW5kb1N0YWNrLmxlbmd0aCA+PSAyO1xuICB9XG5cbiAgZ2V0IGNhblJlZG8oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVkb1N0YWNrLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcml2YXRlIHB1c2hIaXN0b3J5KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgcmV0dXJuO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIHRoaXMucmVkb1N0YWNrID0gW107XG4gIH1cblxuICBwcml2YXRlIHB1c2hDdXJyZW50U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy51bmRvU3RhY2sucHVzaCh7XG4gICAgICBjb250ZW50OiB0aGlzLmdldENvbnRlbnQoKSxcbiAgICAgIHNlbGVjdGlvbjogdGhpcy5nZXRTZWxlY3Rpb24oKSxcbiAgICAgIGFuY2hvcjogdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSksXG4gICAgfSk7XG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmxlbmd0aCA+IHRoaXMubWF4SGlzdG9yeSkgdGhpcy51bmRvU3RhY2suc2hpZnQoKTtcbiAgfVxuXG4gIHB1YmxpYyB1bmRvKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnVuZG9TdGFjay5sZW5ndGggPCAyKSByZXR1cm47XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSB0cnVlO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnVuZG9TdGFjay5wb3AoKSE7XG4gICAgdGhpcy5yZWRvU3RhY2sucHVzaChjdXJyZW50KTtcbiAgICBjb25zdCBwcmV2ID0gdGhpcy51bmRvU3RhY2tbdGhpcy51bmRvU3RhY2subGVuZ3RoIC0gMV07XG4gICAgdGhpcy5zZXRDb250ZW50KHByZXYuY29udGVudCk7XG4gICAgaWYgKHByZXYuc2VsZWN0aW9uKSB0aGlzLnNldFNlbGVjdGlvbihwcmV2LnNlbGVjdGlvbiwgcHJldi5hbmNob3IpO1xuICAgIHRoaXMudW5kb1N0YWNrLnBvcCgpO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgcmVkbygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVkb1N0YWNrLmxlbmd0aCkgcmV0dXJuO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gdHJ1ZTtcbiAgICB0aGlzLnB1c2hDdXJyZW50U3RhdGUoKTtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5yZWRvU3RhY2sucG9wKCkhO1xuICAgIHRoaXMuc2V0Q29udGVudChuZXh0LmNvbnRlbnQpO1xuICAgIGlmIChuZXh0LnNlbGVjdGlvbikgdGhpcy5zZXRTZWxlY3Rpb24obmV4dC5zZWxlY3Rpb24sIG5leHQuYW5jaG9yKTtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVVbmRvUmVkb0tleShlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNNYWMgPSBlZGl0b3JSZWdFeHAubWFjUGxhdGZvcm0udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pO1xuICAgIGNvbnN0IGN0cmwgPSBpc01hYyA/IGUubWV0YUtleSA6IGUuY3RybEtleTtcbiAgICBpZiAoY3RybCAmJiAhZS5hbHRLZXkpIHtcbiAgICAgIGlmIChlLmtleSA9PT0gXCJ6XCIgfHwgZS5rZXkgPT09IFwiWlwiKSB7XG4gICAgICAgIGlmIChlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51bmRvKCk7XG4gICAgICAgIH1cbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIGlmIChlLmtleSA9PT0gXCJ5XCIgfHwgZS5rZXkgPT09IFwiWVwiKSB7XG4gICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFZGl0b3JFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwcm9wczogRWRpdG9yUHJvcHMpOiB2b2lkIHtcbiAgICBpZiAocHJvcHMgJiYgcHJvcHMuZWRpdG9yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMuZWRpdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcm9wcy5lZGl0b3IpIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lID0gcHJvcHMuZWRpdG9yIGFzIEhUTUxEaXZFbGVtZW50O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIH1cblxuICAgIHRoaXMuZS5jbGFzc0xpc3QuYWRkKFwiVGlueU1ERVwiKTtcbiAgICB0aGlzLmUuY29udGVudEVkaXRhYmxlID0gXCJ0cnVlXCI7XG4gICAgdGhpcy5lLnN0eWxlLndoaXRlU3BhY2UgPSBcInByZS13cmFwXCI7XG4gICAgKHRoaXMuZS5zdHlsZSBhcyBhbnkpLndlYmtpdFVzZXJNb2RpZnkgPSBcInJlYWQtd3JpdGUtcGxhaW50ZXh0LW9ubHlcIjtcblxuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICB0aGlzLmUuc2V0QXR0cmlidXRlKFwiZGF0YS1wbGFjZWhvbGRlclwiLCB0aGlzLnBsYWNlaG9sZGVyKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZWRpdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50ZXh0YXJlYSAmJlxuICAgICAgICB0aGlzLnRleHRhcmVhLnBhcmVudE5vZGUgPT09IGVsZW1lbnQgJiZcbiAgICAgICAgdGhpcy50ZXh0YXJlYS5uZXh0U2libGluZ1xuICAgICAgKSB7XG4gICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKHRoaXMuZSwgdGhpcy50ZXh0YXJlYS5uZXh0U2libGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVJbnB1dEV2ZW50KGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZWlucHV0XCIsIChlKSA9PiB0aGlzLmhhbmRsZUJlZm9yZUlucHV0RXZlbnQoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiY29tcG9zaXRpb25lbmRcIiwgKGUpID0+IHRoaXMuaGFuZGxlSW5wdXRFdmVudChlKSk7XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNlbGVjdGlvbmNoYW5nZVwiLCAoZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuaGFzRm9jdXMpIHsgdGhpcy5oYW5kbGVTZWxlY3Rpb25DaGFuZ2VFdmVudChlKTsgfVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsICgpID0+IHRoaXMuaGFzRm9jdXMgPSBmYWxzZSApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgKCkgPT4gdGhpcy5oYXNGb2N1cyA9IHRydWUgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcInBhc3RlXCIsIChlKSA9PiB0aGlzLmhhbmRsZVBhc3RlKGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImRyb3BcIiwgKGUpID0+IHRoaXMuaGFuZGxlRHJvcChlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoZSkgPT4gdGhpcy5oYW5kbGVDbGljayhlKSk7XG4gICAgdGhpcy5saW5lRWxlbWVudHMgPSB0aGlzLmUuY2hpbGROb2RlcztcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHdoaWxlICh0aGlzLmUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgIHRoaXMuZSEucmVtb3ZlQ2hpbGQodGhpcy5lIS5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgdGhpcy5saW5lcyA9IGNvbnRlbnQuc3BsaXQoZWRpdG9yUmVnRXhwLmxpbmVTcGxpdCk7XG4gICAgdGhpcy5saW5lRGlydHkgPSBbXTtcbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGxldCBsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0aGlzLmUhLmFwcGVuZENoaWxkKGxlKTtcbiAgICAgIHRoaXMubGluZURpcnR5LnB1c2godHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMubGluZVR5cGVzID0gbmV3IEFycmF5KHRoaXMubGluZXMubGVuZ3RoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnVwZGF0ZVBsYWNlaG9sZGVyKCk7XG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICB9XG5cbiAgcHVibGljIGdldENvbnRlbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5saW5lcy5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQbGFjZWhvbGRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIgfHwgIXRoaXMuZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmdldENvbnRlbnQoKSA9PT0gXCJcIikge1xuICAgICAgdGhpcy5lLmNsYXNzTGlzdC5hZGQoXCJUaW55TURFX2VtcHR5XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmUuY2xhc3NMaXN0LnJlbW92ZShcIlRpbnlNREVfZW1wdHlcIik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVGb3JtYXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTGluZVR5cGVzKCk7XG4gICAgdGhpcy51cGRhdGVMaW5rTGFiZWxzKCk7XG4gICAgdGhpcy5hcHBseUxpbmVUeXBlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5rTGFiZWxzKCk6IHZvaWQge1xuICAgIHRoaXMubGlua0xhYmVscyA9IFtdO1xuICAgIGZvciAobGV0IGwgPSAwOyBsIDwgdGhpcy5saW5lcy5sZW5ndGg7IGwrKykge1xuICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2xdID09PSBcIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIikge1xuICAgICAgICB0aGlzLmxpbmtMYWJlbHMucHVzaChcbiAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsXVtcbiAgICAgICAgICAgIGxpbmVHcmFtbWFyLlRNTGlua1JlZmVyZW5jZURlZmluaXRpb24ubGFiZWxQbGFjZWhvbGRlciFcbiAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlKHJlcGxhY2VtZW50OiBzdHJpbmcsIGNhcHR1cmU6IFJlZ0V4cEV4ZWNBcnJheSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VtZW50LnJlcGxhY2UoZWRpdG9yUmVnRXhwLnJlcGxhY2VtZW50UGxhY2Vob2xkZXIsIChzdHIsIHAxLCBwMikgPT4ge1xuICAgICAgaWYgKHAxID09PSBcIiRcIikgcmV0dXJuIGh0bWxlc2NhcGUoY2FwdHVyZVtwYXJzZUludChwMildKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIlRNSW5saW5lRm9ybWF0dGVkXCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMoXG4gICAgICAgICAgY2FwdHVyZVtwYXJzZUludChwMildXG4gICAgICAgICl9PC9zcGFuPmA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5TGluZVR5cGVzKCk6IHZvaWQge1xuICAgIGxldCBsaW5lTnVtID0gMDtcbiAgICB3aGlsZSAobGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoKSB7XG4gICAgICAvLyBBIFwiYmxvY2tcIiB3aG9zZSB0ZXh0IGZsb3dzIGFjcm9zcyBzZXZlcmFsIHNvdXJjZSBsaW5lcyAoYSBwYXJhZ3JhcGgsIGEgbXVsdGktbGluZVxuICAgICAgLy8gYmxvY2txdW90ZSwgb3IgYSBsaXN0IGl0ZW0gd2l0aCB3cmFwcGVkL2xhenktY29udGludWF0aW9uIGxpbmVzKSBpcyByZW5kZXJlZCBhcyBvbmVcbiAgICAgIC8vIGlubGluZS1wYXJzaW5nIHVuaXQgc28gdGhhdCBpbmxpbmUgc3R5bGVzIChib2xkLCBpdGFsaWMsIC4uLikgY2FuIHNwYW4gdGhlIHNvZnQgbGluZVxuICAgICAgLy8gYnJlYWtzIGJldHdlZW4gaXRzIGxpbmVzLlxuICAgICAgaWYgKHRoaXMuaXNJbmxpbmVHcm91cExlYWRlcihsaW5lTnVtKSkge1xuICAgICAgICBjb25zdCBsZWFkZXJUeXBlID0gdGhpcy5saW5lVHlwZXNbbGluZU51bV07XG4gICAgICAgIGxldCBlbmQgPSBsaW5lTnVtO1xuICAgICAgICB3aGlsZSAoXG4gICAgICAgICAgZW5kICsgMSA8IHRoaXMubGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgdGhpcy5pc0lubGluZUNvbnRpbnVhdGlvbihlbmQgKyAxLCBsZWFkZXJUeXBlKVxuICAgICAgICApIHtcbiAgICAgICAgICBlbmQrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFwcGx5SW5saW5lR3JvdXAobGluZU51bSwgZW5kKTtcbiAgICAgICAgbGluZU51bSA9IGVuZCArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFwcGx5TGluZShsaW5lTnVtKTtcbiAgICAgICAgbGluZU51bSsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBBIGxpbmUgdGhhdCBjYW4gYmVnaW4gYSBtdWx0aS1saW5lIGlubGluZSBncm91cCAoYSBwYXJhZ3JhcGgtYmVhcmluZyBibG9jaykuICovXG4gIHByaXZhdGUgaXNJbmxpbmVHcm91cExlYWRlcihsaW5lTnVtOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB0ID0gdGhpcy5saW5lVHlwZXNbbGluZU51bV07XG4gICAgaWYgKHQgPT09IFwiVE1QYXJhXCIgfHwgdCA9PT0gXCJUTVVMXCIgfHwgdCA9PT0gXCJUTU9MXCIpIHJldHVybiB0cnVlO1xuICAgIC8vIEEgYmxvY2txdW90ZSBsaW5lIHdob3NlIGNvbnRlbnQgaXMgYmxhbmsgaXMgYSBwYXJhZ3JhcGggYnJlYWsgaW5zaWRlIHRoZSBxdW90ZSwgc28gaXRcbiAgICAvLyBkb2Vzbid0IHN0YXJ0IChvciBqb2luKSBhIGdyb3VwLlxuICAgIGlmICh0ID09PSBcIlRNQmxvY2txdW90ZVwiKSByZXR1cm4gIXRoaXMuaXNCbGFua0Jsb2NrcXVvdGVDb250ZW50KGxpbmVOdW0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIGBsaW5lTnVtYCBjb250aW51ZXMgdGhlIGlubGluZSBncm91cCB3aG9zZSBsZWFkZXIgaGFzIHR5cGUgYGxlYWRlclR5cGVgLiAqL1xuICBwcml2YXRlIGlzSW5saW5lQ29udGludWF0aW9uKGxpbmVOdW06IG51bWJlciwgbGVhZGVyVHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdCA9IHRoaXMubGluZVR5cGVzW2xpbmVOdW1dO1xuICAgIC8vIEEgcGxhaW4gcGFyYWdyYXBoIGxpbmUgaXMgYSBsYXp5IGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJlY2VkaW5nIGJsb2NrIChwYXJhZ3JhcGgsIGxpc3QgaXRlbSxcbiAgICAvLyBvciBibG9ja3F1b3RlKS4gQ29uc2VjdXRpdmUgbGlzdCBtYXJrZXJzIChUTVVML1RNT0wpLCBieSBjb250cmFzdCwgZWFjaCBzdGFydCBhIG5ldyBpdGVtXG4gICAgLy8gYW5kIHRoZXJlZm9yZSBkbyBOT1QgY29udGludWUgdGhlIGdyb3VwLlxuICAgIGlmICh0ID09PSBcIlRNUGFyYVwiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodCA9PT0gXCJUTUJsb2NrcXVvdGVcIiAmJiBsZWFkZXJUeXBlID09PSBcIlRNQmxvY2txdW90ZVwiKVxuICAgICAgcmV0dXJuICF0aGlzLmlzQmxhbmtCbG9ja3F1b3RlQ29udGVudChsaW5lTnVtKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogVHJ1ZSB3aGVuIGEgYmxvY2txdW90ZSBsaW5lIGNhcnJpZXMgbm8gKG5vbi13aGl0ZXNwYWNlKSBjb250ZW50LCBlLmcuIGA+YCBvciBgPiBgLiAqL1xuICBwcml2YXRlIGlzQmxhbmtCbG9ja3F1b3RlQ29udGVudChsaW5lTnVtOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBjYXAgPSB0aGlzLmxpbmVDYXB0dXJlc1tsaW5lTnVtXTtcbiAgICBjb25zdCBjb250ZW50ID0gY2FwICYmIGNhcFsyXSAhPT0gdW5kZWZpbmVkID8gY2FwWzJdIDogXCJcIjtcbiAgICByZXR1cm4gZWRpdG9yUmVnRXhwLmJsYW5rQ29udGVudC50ZXN0KGNvbnRlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUxpbmUobGluZU51bTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZWwgPSB0aGlzLmxpbmVFbGVtZW50c1tsaW5lTnVtXSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAodGhpcy5saW5lRGlydHlbbGluZU51bV0pIHtcbiAgICAgIGxldCBjb250ZW50SFRNTCA9IHRoaXMucmVwbGFjZShcbiAgICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2xpbmVOdW1dLFxuICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsaW5lTnVtXVxuICAgICAgKTtcbiAgICAgIGVsLmNsYXNzTmFtZSA9IHRoaXMubGluZVR5cGVzW2xpbmVOdW1dO1xuICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgICBlbC5pbm5lckhUTUwgPSBjb250ZW50SFRNTCA9PT0gXCJcIiA/IFwiPGJyIC8+XCIgOiBjb250ZW50SFRNTDtcbiAgICAgIC8vIFRoaXMgbGluZSBpcyBubyBsb25nZXIgcmVuZGVyZWQgYXMgcGFydCBvZiBhIG11bHRpLWxpbmUgaW5saW5lIGdyb3VwLlxuICAgICAgZGVsZXRlIGVsLmRhdGFzZXQubWxTaWc7XG4gICAgfVxuICAgIGVsLmRhdGFzZXQubGluZU51bSA9IGxpbmVOdW0udG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgZ3JvdXAgb2YgbGluZXMgW3N0YXJ0Li5lbmRdIHRoYXQgdG9nZXRoZXIgZm9ybSBvbmUgaW5saW5lLXBhcnNpbmcgdW5pdC4gVGhlIGlubGluZVxuICAgKiBjb250ZW50IG9mIGVhY2ggbGluZSAodGhlIGAkJE5gIHBvcnRpb24gb2YgaXRzIHJlcGxhY2VtZW50IOKAlCB0aGUgd2hvbGUgbGluZSBmb3IgYSBwYXJhZ3JhcGgsXG4gICAqIHRoZSB0ZXh0IGFmdGVyIHRoZSBtYXJrZXIgZm9yIGEgbGlzdCBpdGVtIG9yIGJsb2NrcXVvdGUpIGlzIGpvaW5lZCB3aXRoIG5ld2xpbmVzIGFuZCBwYXJzZWQgYXNcbiAgICogYSBzaW5nbGUgdW5pdCwgc28gaW5saW5lIHN0eWxlcyBjYW4gc3BhbiB0aGUgc29mdCBsaW5lIGJyZWFrcy4gVGhlIHJlc3VsdGluZyBIVE1MIGlzIHNwbGl0IGJhY2tcbiAgICogaW50byBvbmUgZnJhZ21lbnQgcGVyIGxpbmU7IGFueSBlbGVtZW50IHN0aWxsIG9wZW4gYXQgYSBsaW5lIGJyZWFrIGlzIGNsb3NlZCBhbmQgcmUtb3BlbmVkIHNvXG4gICAqIGVhY2ggbGluZSBrZWVwcyBpdHMgb3duIHdlbGwtZm9ybWVkIGJsb2NrIGVsZW1lbnQuIFBlci1saW5lIG1hcmtlcnMgKGxpc3QgYnVsbGV0cywgYmxvY2txdW90ZVxuICAgKiBgPmApIGFyZSBwcmVzZXJ2ZWQgZXhhY3RseS4gQSBzaW5nbGUtbGluZSBncm91cCAoc3RhcnQgPT09IGVuZCkgcmVuZGVycyBpZGVudGljYWxseSB0byBiZWZvcmUuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5SW5saW5lR3JvdXAoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBTaWduYXR1cmUgb2YgZXZlcnkgaW5wdXQgdGhhdCBhZmZlY3RzIHRoaXMgZ3JvdXAncyByZW5kZXJpbmcgKGxpbmUgdHlwZXMsIHJlcGxhY2VtZW50cyBhbmRcbiAgICAvLyBjYXB0dXJlcyDigJQgaGVuY2UgdGhlIG1hcmtlciBwcmVmaXhlcyBhbmQgdGhlIGlubGluZSBjb250ZW50KS4gU3RvcmVkIHBlciBsaW5lIGVsZW1lbnQgc28gYVxuICAgIC8vIGdyb3VwIGlzIHJlLXJlbmRlcmVkIHdoZW5ldmVyIGl0cyBjb250ZW50LCBhIHNpYmxpbmcgbGluZSwgb3IgaXRzIGJvdW5kYXJpZXMgY2hhbmdlIChlLmcuIG9uXG4gICAgLy8gYSBzcGxpdC9tZXJnZSkgZXZlbiBpZiB0aGUgaW5kaXZpZHVhbCBsaW5lIHdhc24ndCBzZXBhcmF0ZWx5IG1hcmtlZCBkaXJ0eS5cbiAgICBjb25zdCBjb250ZW50czogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgc2lnU291cmNlID0gYCR7ZW5kIC0gc3RhcnR9YDtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMuaW5saW5lQ29udGVudEluZGV4KHRoaXMubGluZVJlcGxhY2VtZW50c1tpXSk7XG4gICAgICBjb250ZW50cy5wdXNoKHRoaXMubGluZUNhcHR1cmVzW2ldW2lkeF0gIT09IHVuZGVmaW5lZCA/IHRoaXMubGluZUNhcHR1cmVzW2ldW2lkeF0gOiBcIlwiKTtcbiAgICAgIHNpZ1NvdXJjZSArPSBgXFx4MWYke3RoaXMubGluZVR5cGVzW2ldfVxceDFmJHt0aGlzLmxpbmVSZXBsYWNlbWVudHNbaV19XFx4MWYke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1tpXVxuICAgICAgKX1gO1xuICAgIH1cbiAgICBjb25zdCBzaWcgPSBgJHt0aGlzLmhhc2hTdHJpbmcoc2lnU291cmNlKX1gO1xuXG4gICAgbGV0IG5lZWRzUmVuZGVyID0gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubGluZURpcnR5W2ldIHx8XG4gICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tpXSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldC5tbFNpZyAhPT0gc2lnXG4gICAgICApIHtcbiAgICAgICAgbmVlZHNSZW5kZXIgPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW5kZXIpIHtcbiAgICAgIGNvbnN0IGZyYWdtZW50cyA9IHRoaXMuc3BsaXRJbmxpbmVIVE1MQnlMaW5lKFxuICAgICAgICB0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMoY29udGVudHMuam9pbihcIlxcblwiKSlcbiAgICAgICk7XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmxpbmVFbGVtZW50c1tpXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgZnJhZyA9IGZyYWdtZW50c1tpIC0gc3RhcnRdIHx8IFwiXCI7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRIVE1MID0gdGhpcy5yZXBsYWNlV2l0aElubGluZShcbiAgICAgICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbaV0sXG4gICAgICAgICAgdGhpcy5saW5lQ2FwdHVyZXNbaV0sXG4gICAgICAgICAgZnJhZ1xuICAgICAgICApO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSB0aGlzLmxpbmVUeXBlc1tpXTtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFwic3R5bGVcIik7XG4gICAgICAgIGVsLmlubmVySFRNTCA9IGNvbnRlbnRIVE1MID09PSBcIlwiID8gXCI8YnIgLz5cIiA6IGNvbnRlbnRIVE1MO1xuICAgICAgICBlbC5kYXRhc2V0Lm1sU2lnID0gc2lnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2ldIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0LmxpbmVOdW0gPSBpLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEluZGV4IG9mIHRoZSBpbmxpbmUtY29udGVudCBwbGFjZWhvbGRlciAoYCQkTmApIGluIGEgbGluZSByZXBsYWNlbWVudCwgb3IgMCBpZiBub25lLiAqL1xuICBwcml2YXRlIGlubGluZUNvbnRlbnRJbmRleChyZXBsYWNlbWVudDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBtID0gZWRpdG9yUmVnRXhwLmlubGluZUNvbnRlbnRQbGFjZWhvbGRlci5leGVjKHJlcGxhY2VtZW50KTtcbiAgICByZXR1cm4gbSA/IHBhcnNlSW50KG1bMV0pIDogMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaWtlIHJlcGxhY2UoKSwgYnV0IHVzZXMgYSBwcmUtY29tcHV0ZWQgaW5saW5lIGZyYWdtZW50IGZvciB0aGUgYCQkTmAgKGlubGluZSBjb250ZW50KVxuICAgKiBwbGFjZWhvbGRlciBpbnN0ZWFkIG9mIGlubGluZS1wYXJzaW5nIHRoZSBjYXB0dXJlIGl0c2VsZi4gVXNlZCBmb3IgbXVsdGktbGluZSBncm91cHMgd2hlcmUgdGhlXG4gICAqIGlubGluZSBjb250ZW50IHdhcyBwYXJzZWQgam9pbnRseSBhY3Jvc3MgYWxsIGxpbmVzLlxuICAgKi9cbiAgcHJpdmF0ZSByZXBsYWNlV2l0aElubGluZShcbiAgICByZXBsYWNlbWVudDogc3RyaW5nLFxuICAgIGNhcHR1cmU6IFJlZ0V4cEV4ZWNBcnJheSxcbiAgICBpbmxpbmVGcmFnbWVudDogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VtZW50LnJlcGxhY2UoZWRpdG9yUmVnRXhwLnJlcGxhY2VtZW50UGxhY2Vob2xkZXIsIChzdHIsIHAxLCBwMikgPT4ge1xuICAgICAgaWYgKHAxID09PSBcIiRcIikgcmV0dXJuIGh0bWxlc2NhcGUoY2FwdHVyZVtwYXJzZUludChwMildKTtcbiAgICAgIGVsc2UgcmV0dXJuIGA8c3BhbiBjbGFzcz1cIlRNSW5saW5lRm9ybWF0dGVkXCI+JHtpbmxpbmVGcmFnbWVudH08L3NwYW4+YDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdHMgaW5saW5lIEhUTUwgcHJvZHVjZWQgZm9yIGEgam9pbmVkIG11bHRpLWxpbmUgcGFyYWdyYXBoIGJhY2sgaW50byBvbmUgZnJhZ21lbnQgcGVyXG4gICAqIHNvdXJjZSBsaW5lIChmcmFnbWVudHMgYXJlIHNlcGFyYXRlZCBieSB0aGUgYFxcbmAgbWFya2VycyBlbWl0dGVkIGJ5IHByb2Nlc3NJbmxpbmVTdHlsZXMpLlxuICAgKiBJbmxpbmUgZWxlbWVudHMgdGhhdCBhcmUgc3RpbGwgb3BlbiBhdCBhIGxpbmUgYnJlYWsgYXJlIGNsb3NlZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFnbWVudCBhbmRcbiAgICogcmUtb3BlbmVkIGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBvbmUsIHNvIHRoYXQgZXZlcnkgZnJhZ21lbnQgaXMgaW5kZXBlbmRlbnRseSB3ZWxsLWZvcm1lZFxuICAgKiB3aGlsZSB0aGUgZm9ybWF0dGluZyB2aXN1YWxseSBjb250aW51ZXMgYWNyb3NzIHRoZSBsaW5lcy5cbiAgICovXG4gIHByaXZhdGUgc3BsaXRJbmxpbmVIVE1MQnlMaW5lKGh0bWw6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBmcmFnbWVudHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3Qgb3BlblRhZ3M6IHN0cmluZ1tdID0gW107IC8vIGZ1bGwgb3BlbmluZy10YWcgc3RyaW5ncyBvZiBjdXJyZW50bHkgb3BlbiBlbGVtZW50c1xuICAgIGxldCBjdXJyZW50ID0gXCJcIjtcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBodG1sLmxlbmd0aCkge1xuICAgICAgY29uc3QgY2ggPSBodG1sW2ldO1xuICAgICAgaWYgKGNoID09PSBcIlxcblwiKSB7XG4gICAgICAgIC8vIENsb3NlIGN1cnJlbnRseSBvcGVuIHRhZ3MgKGluIHJldmVyc2UpIHRvIGZpbmlzaCB0aGlzIGxpbmUncyBmcmFnbWVudCAuLi5cbiAgICAgICAgZm9yIChsZXQgdCA9IG9wZW5UYWdzLmxlbmd0aCAtIDE7IHQgPj0gMDsgdC0tKSB7XG4gICAgICAgICAgY3VycmVudCArPSBgPC8ke3RoaXMuaW5saW5lVGFnTmFtZShvcGVuVGFnc1t0XSl9PmA7XG4gICAgICAgIH1cbiAgICAgICAgZnJhZ21lbnRzLnB1c2goY3VycmVudCk7XG4gICAgICAgIC8vIC4uLiBhbmQgcmUtb3BlbiB0aGVtIChpbiBvcmRlcikgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGxpbmUncyBmcmFnbWVudC5cbiAgICAgICAgY3VycmVudCA9IG9wZW5UYWdzLmpvaW4oXCJcIik7XG4gICAgICAgIGkrKztcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IFwiPFwiKSB7XG4gICAgICAgIGNvbnN0IGNsb3NlID0gaHRtbC5pbmRleE9mKFwiPlwiLCBpKTtcbiAgICAgICAgaWYgKGNsb3NlIDwgMCkge1xuICAgICAgICAgIC8vIERlZmVuc2l2ZTogbWFsZm9ybWVkIG91dHB1dCwgZW1pdCB0aGUgcmVtYWluZGVyIHZlcmJhdGltLlxuICAgICAgICAgIGN1cnJlbnQgKz0gaHRtbC5zdWJzdHIoaSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFnID0gaHRtbC5zdWJzdHJpbmcoaSwgY2xvc2UgKyAxKTtcbiAgICAgICAgY3VycmVudCArPSB0YWc7XG4gICAgICAgIGlmICh0YWdbMV0gPT09IFwiL1wiKSB7XG4gICAgICAgICAgb3BlblRhZ3MucG9wKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnW3RhZy5sZW5ndGggLSAyXSAhPT0gXCIvXCIpIHtcbiAgICAgICAgICAvLyBPcGVuaW5nIHRhZyB0aGF0IGlzbid0IHNlbGYtY2xvc2luZy5cbiAgICAgICAgICBvcGVuVGFncy5wdXNoKHRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgaSA9IGNsb3NlICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQgKz0gY2g7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gICAgZnJhZ21lbnRzLnB1c2goY3VycmVudCk7XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbiAgfVxuXG4gIHByaXZhdGUgaW5saW5lVGFnTmFtZShvcGVuVGFnOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG0gPSBlZGl0b3JSZWdFeHAuaW5saW5lVGFnTmFtZS5leGVjKG9wZW5UYWcpO1xuICAgIHJldHVybiBtID8gbVsxXSA6IFwic3BhblwiO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNoU3RyaW5nKHM6IHN0cmluZyk6IG51bWJlciB7XG4gICAgbGV0IGggPSA1MzgxO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuICAgICAgaCA9ICgoKGggPDwgNSkgKyBoKSBeIHMuY2hhckNvZGVBdChpKSkgPj4+IDA7XG4gICAgfVxuICAgIHJldHVybiBoO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lVHlwZXMoKTogdm9pZCB7XG4gICAgbGV0IGNvZGVCbG9ja1R5cGU6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IGNvZGVCbG9ja1NlcUxlbmd0aCA9IDA7XG4gICAgbGV0IGh0bWxCbG9jazogSFRNTEJsb2NrUnVsZSB8IGZhbHNlID0gZmFsc2U7XG5cbiAgICBmb3IgKGxldCBsaW5lTnVtID0gMDsgbGluZU51bSA8IHRoaXMubGluZXMubGVuZ3RoOyBsaW5lTnVtKyspIHtcbiAgICAgIGxldCBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICBsZXQgbGluZUNhcHR1cmU6IFJlZ0V4cEV4ZWNBcnJheSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICBsZXQgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcblxuICAgICAgLy8gQ2hlY2sgb25nb2luZyBjb2RlIGJsb2Nrc1xuICAgICAgaWYgKGNvZGVCbG9ja1R5cGUgPT09IFwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW5cIikge1xuICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUgJiYgY2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aCA+PSBjb2RlQmxvY2tTZXFMZW5ndGgpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlLnJlcGxhY2VtZW50O1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICBjb2RlQmxvY2tUeXBlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNRmVuY2VkQ29kZUJhY2t0aWNrXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1GZW5jZWRDb2RlXCI+JDA8YnIgLz48L3NwYW4+JztcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29kZUJsb2NrVHlwZSA9PT0gXCJUTUNvZGVGZW5jZVRpbGRlT3BlblwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VUaWxkZUNsb3NlLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSAmJiBjYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoID49IGNvZGVCbG9ja1NlcUxlbmd0aCkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUNvZGVGZW5jZVRpbGRlQ2xvc2VcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZVRpbGRlQ2xvc2UucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgIGNvZGVCbG9ja1R5cGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1GZW5jZWRDb2RlVGlsZGVcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUZlbmNlZENvZGVcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBIVE1MIGJsb2NrIHR5cGVzXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1QYXJhXCIgJiYgaHRtbEJsb2NrID09PSBmYWxzZSkge1xuICAgICAgICBmb3IgKGxldCBodG1sQmxvY2tUeXBlIG9mIGh0bWxCbG9ja0dyYW1tYXIpIHtcbiAgICAgICAgICBpZiAodGhpcy5saW5lc1tsaW5lTnVtXS5tYXRjaChodG1sQmxvY2tUeXBlLnN0YXJ0KSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBodG1sQmxvY2tUeXBlLnBhcmFJbnRlcnJ1cHQgfHxcbiAgICAgICAgICAgICAgbGluZU51bSA9PT0gMCB8fFxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVBhcmFcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTVVMXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1PTFwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNQmxvY2txdW90ZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBodG1sQmxvY2sgPSBodG1sQmxvY2tUeXBlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGh0bWxCbG9jayAhPT0gZmFsc2UpIHtcbiAgICAgICAgbGluZVR5cGUgPSBcIlRNSFRNTEJsb2NrXCI7XG4gICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNSFRNTENvbnRlbnRcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG5cbiAgICAgICAgaWYgKGh0bWxCbG9jay5lbmQpIHtcbiAgICAgICAgICBpZiAodGhpcy5saW5lc1tsaW5lTnVtXS5tYXRjaChodG1sQmxvY2suZW5kKSkge1xuICAgICAgICAgICAgaHRtbEJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGxpbmVOdW0gPT09IHRoaXMubGluZXMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgICAgdGhpcy5saW5lc1tsaW5lTnVtICsgMV0ubWF0Y2gobGluZUdyYW1tYXIuVE1CbGFua0xpbmUucmVnZXhwKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaHRtbEJsb2NrID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGFsbCByZWdleHBzIGlmIHdlIGhhdmVuJ3QgYXBwbGllZCBvbmUgb2YgdGhlIGNvZGUgYmxvY2sgdHlwZXNcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVBhcmFcIikge1xuICAgICAgICBmb3IgKGxldCB0eXBlIGluIGxpbmVHcmFtbWFyKSB7XG4gICAgICAgICAgaWYgKGxpbmVHcmFtbWFyW3R5cGVdLnJlZ2V4cCkge1xuICAgICAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hclt0eXBlXS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgICAgIGxpbmVUeXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXJbdHlwZV0ucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgIGxpbmVDYXB0dXJlID0gY2FwdHVyZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlJ3ZlIG9wZW5lZCBhIGNvZGUgYmxvY2ssIHJlbWVtYmVyIHRoYXRcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlblwiIHx8IGxpbmVUeXBlID09PSBcIlRNQ29kZUZlbmNlVGlsZGVPcGVuXCIpIHtcbiAgICAgICAgY29kZUJsb2NrVHlwZSA9IGxpbmVUeXBlO1xuICAgICAgICBjb2RlQmxvY2tTZXFMZW5ndGggPSBsaW5lQ2FwdHVyZS5ncm91cHMhW1wic2VxXCJdLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgLy8gTGluayByZWZlcmVuY2UgZGVmaW5pdGlvbiBhbmQgaW5kZW50ZWQgY29kZSBjYW4ndCBpbnRlcnJ1cHQgYSBwYXJhZ3JhcGhcbiAgICAgIGlmIChcbiAgICAgICAgKGxpbmVUeXBlID09PSBcIlRNSW5kZW50ZWRDb2RlXCIgfHwgbGluZVR5cGUgPT09IFwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiKSAmJlxuICAgICAgICBsaW5lTnVtID4gMCAmJlxuICAgICAgICAodGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNUGFyYVwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNVUxcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTU9MXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1CbG9ja3F1b3RlXCIpXG4gICAgICApIHtcbiAgICAgICAgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IFwiJCQwXCI7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldGV4dCBIMiBtYXJrZXJzIHRoYXQgY2FuIGFsc28gYmUgaW50ZXJwcmV0ZWQgYXMgYW4gZW1wdHkgbGlzdCBpdGVtIHNob3VsZCBiZSByZWdhcmRlZCBhcyBzdWNoXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1TZXRleHRIMk1hcmtlclwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1VTC5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2xpbmVOdW1dKTtcbiAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1VTFwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNVUwucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNldGV4dCBoZWFkaW5ncyBhcmUgb25seSB2YWxpZCBpZiBwcmVjZWRlZCBieSBhIHBhcmFncmFwaFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDFNYXJrZXJcIiB8fCBsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgyTWFya2VyXCIpIHtcbiAgICAgICAgaWYgKGxpbmVOdW0gPT09IDAgfHwgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdICE9PSBcIlRNUGFyYVwiKSB7XG4gICAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUhSLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICAgIGlmIChjYXB0dXJlKSB7XG4gICAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1IUlwiO1xuICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1IUi5yZXBsYWNlbWVudDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGluZVR5cGUgPSBcIlRNUGFyYVwiO1xuICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGhlYWRpbmdMaW5lID0gbGluZU51bSAtIDE7XG4gICAgICAgICAgY29uc3QgaGVhZGluZ0xpbmVUeXBlID0gbGluZVR5cGUgPT09IFwiVE1TZXRleHRIMU1hcmtlclwiID8gXCJUTVNldGV4dEgxXCIgOiBcIlRNU2V0ZXh0SDJcIjtcbiAgICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAodGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdICE9PSBoZWFkaW5nTGluZVR5cGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbaGVhZGluZ0xpbmVdID0gaGVhZGluZ0xpbmVUeXBlO1xuICAgICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtoZWFkaW5nTGluZV0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5lUmVwbGFjZW1lbnRzW2hlYWRpbmdMaW5lXSA9IFwiJCQwXCI7XG4gICAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1toZWFkaW5nTGluZV0gPSBbdGhpcy5saW5lc1toZWFkaW5nTGluZV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIGhlYWRpbmdMaW5lLS07XG4gICAgICAgICAgfSB3aGlsZSAoaGVhZGluZ0xpbmUgPj0gMCAmJiB0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gPT09IFwiVE1QYXJhXCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEdGTSB0YXNrIGxpc3QgaXRlbTogYSBsaXN0IGl0ZW0gd2hvc2UgY29udGVudCBiZWdpbnMgd2l0aCBhIGNoZWNrYm94IG1hcmtlciBgWyBdYCwgYFt4XWBcbiAgICAgIC8vIG9yIGBbWF1gIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UgKG9yIHRoZSBlbmQgb2YgdGhlIGxpbmUpLiBUaGUgYnJhY2tldHMgYW5kIHNlcGFyYXRvciBzdGF5XG4gICAgICAvLyBhcyBvcmRpbmFyeSBUTU1hcmsgdGV4dDsgb25seSB0aGUgaW5uZXIgY2hhcmFjdGVyIGlzIHJlbmRlcmVkIGFzIGEgY2hlY2tib3ggKHZpYSBDU1MpLCBzb1xuICAgICAgLy8gdGhlIGxpbmUncyB0ZXh0IGNvbnRlbnQgc3RpbGwgZXF1YWxzIGl0cyBzb3VyY2UgYW5kIHRoZSBjdXJzb3IgbmF2aWdhdGVzIGl0IG5vcm1hbGx5LlxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNVUxcIiB8fCBsaW5lVHlwZSA9PT0gXCJUTU9MXCIpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IGxpbmVDYXB0dXJlWzJdICE9PSB1bmRlZmluZWQgPyBsaW5lQ2FwdHVyZVsyXSA6IFwiXCI7XG4gICAgICAgIGNvbnN0IHRhc2sgPSBlZGl0b3JSZWdFeHAudGFza0xpc3RJdGVtLmV4ZWMoY29udGVudCk7XG4gICAgICAgIGlmICh0YXNrKSB7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZCA9IHRhc2tbMl0gIT09IFwiIFwiOyAvLyBbeF0gLyBbWF0gYXJlIGNoZWNrZWQsIFsgXSBpcyBub3RcbiAgICAgICAgICBjb25zdCBidWxsZXRDbGFzcyA9IGxpbmVUeXBlID09PSBcIlRNVUxcIiA/IFwiVE1NYXJrX1RNVUxcIiA6IFwiVE1NYXJrX1RNT0xcIjtcbiAgICAgICAgICBjb25zdCBib3hDbGFzcyA9IGNoZWNrZWRcbiAgICAgICAgICAgID8gXCJUTUNoZWNrYm94IFRNQ2hlY2tib3hfY2hlY2tlZFwiXG4gICAgICAgICAgICA6IFwiVE1DaGVja2JveCBUTUNoZWNrYm94X3VuY2hlY2tlZFwiO1xuICAgICAgICAgIC8vIFN5bnRoZXRpYyBjYXB0dXJlOiBbZnVsbCwgYnVsbGV0LCBcIltcIiwgaW5uZXIsIFwiXVwiLCBzZXBhcmF0b3IsIGlubGluZSBjb250ZW50XS4gVGhlXG4gICAgICAgICAgLy8gaW5saW5lIGNvbnRlbnQgc3RheXMgdGhlIGxhc3QgYCQkTmAgZ3JvdXAgc28gaW5saW5lQ29udGVudEluZGV4KCkvYXBwbHlJbmxpbmVHcm91cCgpXG4gICAgICAgICAgLy8gKGFuZCB0aHVzIG11bHRpLWxpbmUgY29udGludWF0aW9uKSBiZWhhdmUgZXhhY3RseSBhcyBmb3IgYSBwbGFpbiBsaXN0IGl0ZW0uXG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBbXG4gICAgICAgICAgICBsaW5lQ2FwdHVyZVswXSxcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlWzFdLFxuICAgICAgICAgICAgdGFza1sxXSxcbiAgICAgICAgICAgIHRhc2tbMl0sXG4gICAgICAgICAgICB0YXNrWzNdLFxuICAgICAgICAgICAgdGFza1s0XSxcbiAgICAgICAgICAgIHRhc2tbNV0sXG4gICAgICAgICAgXSBhcyB1bmtub3duIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPVxuICAgICAgICAgICAgYDxzcGFuIGNsYXNzPVwiVE1NYXJrICR7YnVsbGV0Q2xhc3N9XCI+JDE8L3NwYW4+YCArXG4gICAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNVGFza1wiPiQyPC9zcGFuPmAgK1xuICAgICAgICAgICAgYDxzcGFuIGNsYXNzPVwiJHtib3hDbGFzc31cIj4kMzwvc3Bhbj5gICtcbiAgICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1UYXNrXCI+JDQ8L3NwYW4+YCArXG4gICAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNVGFza1wiPiQ1PC9zcGFuPmAgK1xuICAgICAgICAgICAgYCQkNmA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubGluZVR5cGVzW2xpbmVOdW1dICE9PSBsaW5lVHlwZSkge1xuICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXSA9IGxpbmVUeXBlO1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lTnVtXSA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbbGluZU51bV0gPSBsaW5lUmVwbGFjZW1lbnQ7XG4gICAgICB0aGlzLmxpbmVDYXB0dXJlc1tsaW5lTnVtXSA9IGxpbmVDYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb24oZ2V0QW5jaG9yOiBib29sZWFuID0gZmFsc2UpOiBQb3NpdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBsZXQgc3RhcnROb2RlID0gZ2V0QW5jaG9yID8gc2VsZWN0aW9uIS5hbmNob3JOb2RlIDogc2VsZWN0aW9uIS5mb2N1c05vZGU7XG4gICAgaWYgKCFzdGFydE5vZGUpIHJldHVybiBudWxsO1xuICAgIGxldCBvZmZzZXQgPSBnZXRBbmNob3IgPyBzZWxlY3Rpb24hLmFuY2hvck9mZnNldCA6IHNlbGVjdGlvbiEuZm9jdXNPZmZzZXQ7XG4gICAgaWYgKHN0YXJ0Tm9kZSA9PT0gdGhpcy5lKSB7XG4gICAgICBpZiAob2Zmc2V0IDwgdGhpcy5saW5lcy5sZW5ndGgpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcm93OiBvZmZzZXQsXG4gICAgICAgICAgY29sOiAwLFxuICAgICAgICB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm93OiBvZmZzZXQgLSAxLFxuICAgICAgICBjb2w6IHRoaXMubGluZXNbb2Zmc2V0IC0gMV0ubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgY29sID0gdGhpcy5jb21wdXRlQ29sdW1uKHN0YXJ0Tm9kZSwgb2Zmc2V0KTtcbiAgICBpZiAoY29sID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBub2RlID0gc3RhcnROb2RlO1xuICAgIHdoaWxlIChub2RlLnBhcmVudEVsZW1lbnQgIT09IHRoaXMuZSkge1xuICAgICAgbm9kZSA9IG5vZGUucGFyZW50RWxlbWVudCE7XG4gICAgfVxuXG4gICAgbGV0IHJvdyA9IDA7XG4gICAgLy8gSWYgdGhlIG5vZGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgc2libGluZywgaXQgbXVzdCBiZSB0aGUgZmlyc3QgbGluZVxuICAgIGlmIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgY29uc3QgY3VycmVudExpbmVOdW1EYXRhID0gKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQ/LmxpbmVOdW07XG4gICAgICBjb25zdCBwcmV2aW91c0xpbmVOdW1EYXRhID0gKG5vZGUucHJldmlvdXNTaWJsaW5nIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0Py5saW5lTnVtO1xuXG4gICAgICBpZiAoY3VycmVudExpbmVOdW1EYXRhICYmIHByZXZpb3VzTGluZU51bURhdGEpIHtcbiAgICAgICAgY29uc3QgY3VycmVudExpbmVOdW0gPSBwYXJzZUludChjdXJyZW50TGluZU51bURhdGEpO1xuICAgICAgICBjb25zdCBwcmV2aW91c0xpbmVOdW0gPSBwYXJzZUludChwcmV2aW91c0xpbmVOdW1EYXRhKTtcbiAgICAgICAgaWYgKGN1cnJlbnRMaW5lTnVtID09PSBwcmV2aW91c0xpbmVOdW0gKyAxKSB7XG4gICAgICAgICAgcm93ID0gY3VycmVudExpbmVOdW07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgbGluZSBpcyBOT1QgdGhlIHByZXZpb3VzIGxpbmUgKyAxLCB0aGVuIGVpdGhlciBcbiAgICAgICAgICAvLyB0aGUgY3VycmVudCBsaW5lIGdvdCBzcGxpdCBpbiB0d28gb3IgbWVyZ2VkIHdpdGggdGhlIHByZXZpb3VzIGxpbmVcbiAgICAgICAgICAvLyBFaXRoZXIgd2F5LCB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSByb3cgbnVtYmVyXG4gICAgICAgICAgd2hpbGUgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICAgICAgICByb3crKztcbiAgICAgICAgICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHsgcm93OiByb3csIGNvbDogY29sIH07XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0aW9uKGZvY3VzOiBQb3NpdGlvbiwgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsKTogdm9pZCB7XG4gICAgaWYgKCFmb2N1cykgcmV0dXJuO1xuXG4gICAgbGV0IHsgbm9kZTogZm9jdXNOb2RlLCBvZmZzZXQ6IGZvY3VzT2Zmc2V0IH0gPSB0aGlzLmNvbXB1dGVOb2RlQW5kT2Zmc2V0KFxuICAgICAgZm9jdXMucm93LFxuICAgICAgZm9jdXMuY29sLFxuICAgICAgYW5jaG9yID8gYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPiBmb2N1cy5jb2wgOiBmYWxzZVxuICAgICk7XG4gICAgbGV0IGFuY2hvck5vZGUgPSBudWxsLFxuICAgICAgYW5jaG9yT2Zmc2V0ID0gbnVsbDtcbiAgICBpZiAoYW5jaG9yICYmIChhbmNob3Iucm93ICE9PSBmb2N1cy5yb3cgfHwgYW5jaG9yLmNvbCAhPT0gZm9jdXMuY29sKSkge1xuICAgICAgbGV0IHsgbm9kZSwgb2Zmc2V0IH0gPSB0aGlzLmNvbXB1dGVOb2RlQW5kT2Zmc2V0KFxuICAgICAgICBhbmNob3Iucm93LFxuICAgICAgICBhbmNob3IuY29sLFxuICAgICAgICBmb2N1cy5yb3cgPT09IGFuY2hvci5yb3cgJiYgZm9jdXMuY29sID4gYW5jaG9yLmNvbFxuICAgICAgKTtcbiAgICAgIGFuY2hvck5vZGUgPSBub2RlO1xuICAgICAgYW5jaG9yT2Zmc2V0ID0gb2Zmc2V0O1xuICAgIH1cblxuICAgIGxldCB3aW5kb3dTZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgd2luZG93U2VsZWN0aW9uIS5zZXRCYXNlQW5kRXh0ZW50KFxuICAgICAgZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQsXG4gICAgICBhbmNob3JOb2RlIHx8IGZvY3VzTm9kZSxcbiAgICAgIGFuY2hvck5vZGUgPyBhbmNob3JPZmZzZXQhIDogZm9jdXNPZmZzZXRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlc3RvcmVMYXN0U2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmxhc3RTZWxlY3Rpb24gJiYgdGhpcy5sYXN0U2VsZWN0aW9uLmZvY3VzKSB7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvbih0aGlzLmxhc3RTZWxlY3Rpb24uZm9jdXMsIHRoaXMubGFzdFNlbGVjdGlvbi5hbmNob3IpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBwYXN0ZSh0ZXh0OiBzdHJpbmcsIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCwgZm9jdXM6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgbGV0IGJlZ2lubmluZzogUG9zaXRpb24sIGVuZDogUG9zaXRpb247XG4gICAgaWYgKCFmb2N1cykge1xuICAgICAgZm9jdXMgPSB7XG4gICAgICAgIHJvdzogdGhpcy5saW5lcy5sZW5ndGggLSAxLFxuICAgICAgICBjb2w6IHRoaXMubGluZXNbdGhpcy5saW5lcy5sZW5ndGggLSAxXS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIWFuY2hvcikge1xuICAgICAgYW5jaG9yID0gZm9jdXM7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGFuY2hvci5yb3cgPCBmb2N1cy5yb3cgfHxcbiAgICAgIChhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA8PSBmb2N1cy5jb2wpXG4gICAgKSB7XG4gICAgICBiZWdpbm5pbmcgPSBhbmNob3I7XG4gICAgICBlbmQgPSBmb2N1cztcbiAgICB9IGVsc2Uge1xuICAgICAgYmVnaW5uaW5nID0gZm9jdXM7XG4gICAgICBlbmQgPSBhbmNob3I7XG4gICAgfVxuICAgIGxldCBpbnNlcnRlZExpbmVzID0gdGV4dC5zcGxpdChlZGl0b3JSZWdFeHAubGluZVNwbGl0KTtcbiAgICBsZXQgbGluZUJlZm9yZSA9IHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10uc3Vic3RyKDAsIGJlZ2lubmluZy5jb2wpO1xuICAgIGxldCBsaW5lRW5kID0gdGhpcy5saW5lc1tlbmQucm93XS5zdWJzdHIoZW5kLmNvbCk7XG4gICAgaW5zZXJ0ZWRMaW5lc1swXSA9IGxpbmVCZWZvcmUuY29uY2F0KGluc2VydGVkTGluZXNbMF0pO1xuICAgIGxldCBlbmRDb2xQb3MgPSBpbnNlcnRlZExpbmVzW2luc2VydGVkTGluZXMubGVuZ3RoIC0gMV0ubGVuZ3RoO1xuICAgIGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXSA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5jb25jYXQobGluZUVuZCk7XG4gICAgdGhpcy5zcGxpY2VMaW5lcyhiZWdpbm5pbmcucm93LCAxICsgZW5kLnJvdyAtIGJlZ2lubmluZy5yb3csIGluc2VydGVkTGluZXMpO1xuICAgIGZvY3VzLnJvdyA9IGJlZ2lubmluZy5yb3cgKyBpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDE7XG4gICAgZm9jdXMuY29sID0gZW5kQ29sUG9zO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cmFwU2VsZWN0aW9uKHByZTogc3RyaW5nLCBwb3N0OiBzdHJpbmcsIGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMgfHwgIWFuY2hvciB8fCBmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHJldHVybjtcbiAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0YXJ0Q29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2w7XG4gICAgY29uc3QgZW5kQ29sID0gZm9jdXMuY29sIDwgYW5jaG9yLmNvbCA/IGFuY2hvci5jb2wgOiBmb2N1cy5jb2w7XG4gICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgc3RhcnRDb2wpLmNvbmNhdChwcmUpO1xuICAgIGNvbnN0IG1pZCA9IGVuZENvbCA9PT0gc3RhcnRDb2wgPyBcIlwiIDogdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihzdGFydENvbCwgZW5kQ29sIC0gc3RhcnRDb2wpO1xuICAgIGNvbnN0IHJpZ2h0ID0gcG9zdC5jb25jYXQodGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihlbmRDb2wpKTtcbiAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICBhbmNob3IuY29sID0gbGVmdC5sZW5ndGg7XG4gICAgZm9jdXMuY29sID0gYW5jaG9yLmNvbCArIG1pZC5sZW5ndGg7XG5cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cywgYW5jaG9yKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRFdmVudExpc3RlbmVyPFQgZXh0ZW5kcyBFdmVudFR5cGU+KFxuICAgIHR5cGU6IFQsXG4gICAgbGlzdGVuZXI6IFQgZXh0ZW5kcyAnY2hhbmdlJyA/IEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnc2VsZWN0aW9uJyA/IEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD4gOlxuICAgICAgICAgICAgIFQgZXh0ZW5kcyAnZHJvcCcgPyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50PiA6IG5ldmVyXG4gICk6IHZvaWQge1xuICAgIGlmICh0eXBlLm1hdGNoKGVkaXRvclJlZ0V4cC5jaGFuZ2VFdmVudCkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNoYW5nZS5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxDaGFuZ2VFdmVudD4pO1xuICAgIH1cbiAgICBpZiAodHlwZS5tYXRjaChlZGl0b3JSZWdFeHAuc2VsZWN0aW9uRXZlbnQpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24ucHVzaChsaXN0ZW5lciBhcyBFdmVudEhhbmRsZXI8U2VsZWN0aW9uRXZlbnQ+KTtcbiAgICB9XG4gICAgaWYgKHR5cGUubWF0Y2goZWRpdG9yUmVnRXhwLmRyb3BFdmVudCkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmRyb3AucHVzaChsaXN0ZW5lciBhcyBFdmVudEhhbmRsZXI8RHJvcEV2ZW50Pik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlUGxhY2Vob2xkZXIoKTtcbiAgICBpZiAoIXRoaXMudGV4dGFyZWEgJiYgIXRoaXMubGlzdGVuZXJzLmNoYW5nZS5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCk7XG4gICAgaWYgKHRoaXMudGV4dGFyZWEpIHRoaXMudGV4dGFyZWEudmFsdWUgPSBjb250ZW50O1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmNoYW5nZSkge1xuICAgICAgbGlzdGVuZXIoe1xuICAgICAgICBjb250ZW50OiBjb250ZW50LFxuICAgICAgICBsaW5lc0RpcnR5OiBbLi4udGhpcy5saW5lRGlydHldLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGJlZm9yZWlucHV0IGhhbmRsZXIsIGV4Y2x1c2l2ZWx5IHRvIGhhbmRsZSBpbnNlcnRQYXJhZ3JhcGgsXG4gICAqIGluc2VydExpbmVCcmVhaywgZGVsZXRlQ29udGVudEJhY2t3YXJkLCBhbmQgZGVsZXRlQ29udGVudEZvcndhcmQgZXZlbnRzLlxuICAgKiBUaGVzZSB1c2VkIHRvIGJlIGhhbmRsZWQgaW4gdGhlIGlucHV0IGV2ZW50LCBidXQgdGhhdCBjYXVzZWQgaXNzdWVzIHdpdGhcbiAgICogRmlyZWZveCB3aGVyZSB0aGUgaW5wdXQgZXZlbnQgd291bGQgYmUgc29tZXRpbWVzIG5vdCBiZSBmaXJlZCBmb3IgdGhlc2VcbiAgICogaW5wdXQgdHlwZXMuIGRlbGV0ZUNvbnRlbnRCYWNrd2FyZC9Gb3J3YXJkIGFyZSBhbHNvIGhhbmRsZWQgaGVyZSB0byBmaXggYVxuICAgKiBGaXJlZm94LXNwZWNpZmljIGJ1ZyAoIzE1MSkgd2hlcmUgYmFja3NwYWNpbmcgb24gYW4gZW1wdHkgbGluZSB3b3VsZCBub3RcbiAgICogcmVtb3ZlIGl0LCBiZWNhdXNlIEZpcmVmb3ggb25seSByZW1vdmVzIHRoZSA8YnI+IGluc2lkZSB0aGUgZW1wdHkgPGRpdj5cbiAgICogcmF0aGVyIHRoYW4gbWVyZ2luZyB0aGUgZGl2cywgYW5kIGZpeE5vZGVIaWVyYXJjaHkoKSB3b3VsZCB0aGVuIHJlLWFkZCB0aGVcbiAgICogPGJyPiwgcmVzdWx0aW5nIGluIGEgbm8tb3AuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgaW5wdXQgZXZlbnRcbiAgICogQHJldHVybnMgbm90aGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVCZWZvcmVJbnB1dEV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGJlZm9yZUlucHV0RXZlbnQgPSBldmVudCBhcyBJbnB1dEV2ZW50O1xuXG4gICAgLy8gSGFuZGxlIGNyb3NzLWxpbmUgZGVsZXRlIG9wZXJhdGlvbnMgKGJhY2tzcGFjZSBhdCBjb2wgMCwgZGVsZXRlIGF0IGVuZCBvZiBsaW5lKVxuICAgIGlmIChcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiIHx8XG4gICAgICBiZWZvcmVJbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJkZWxldGVDb250ZW50Rm9yd2FyZFwiXG4gICAgKSB7XG4gICAgICBjb25zdCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBjb25zdCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGlmICghZm9jdXMgfHwgIWFuY2hvcikgcmV0dXJuO1xuXG4gICAgICBjb25zdCBpc0JhY2tzcGFjZSA9IGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiO1xuXG4gICAgICAvLyBPbmx5IGludGVyY2VwdCBjb2xsYXBzZWQgc2VsZWN0aW9ucyBhdCBsaW5lIGJvdW5kYXJpZXNcbiAgICAgIGlmIChmb2N1cy5yb3cgPT09IGFuY2hvci5yb3cgJiYgZm9jdXMuY29sID09PSBhbmNob3IuY29sKSB7XG4gICAgICAgIGlmIChpc0JhY2tzcGFjZSAmJiBmb2N1cy5jb2wgPT09IDAgJiYgZm9jdXMucm93ID4gMCkge1xuICAgICAgICAgIC8vIEJhY2tzcGFjZSBhdCBzdGFydCBvZiBsaW5lOiBtZXJnZSBjdXJyZW50IGxpbmUgaW50byBlbmQgb2YgcHJldmlvdXNcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICAgICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgICAgICAgY29uc3QgcHJldkxpbmVMZW4gPSB0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdLmxlbmd0aDtcbiAgICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdID0gdGhpcy5saW5lc1tmb2N1cy5yb3cgLSAxXSArIHRoaXMubGluZXNbZm9jdXMucm93XTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3cgLSAxXSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zcGxpY2VMaW5lcyhmb2N1cy5yb3csIDEpO1xuICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHsgcm93OiBmb2N1cy5yb3cgLSAxLCBjb2w6IHByZXZMaW5lTGVuIH0pO1xuICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzQmFja3NwYWNlICYmIGZvY3VzLmNvbCA9PT0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLmxlbmd0aCAmJiBmb2N1cy5yb3cgPCB0aGlzLmxpbmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAvLyBEZWxldGUgYXQgZW5kIG9mIGxpbmU6IG1lcmdlIG5leHQgbGluZSBpbnRvIGN1cnJlbnRcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICAgICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgICAgICAgY29uc3QgY3VycmVudExpbmVMZW4gPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10ubGVuZ3RoO1xuICAgICAgICAgIHRoaXMubGluZXNbZm9jdXMucm93XSA9IHRoaXMubGluZXNbZm9jdXMucm93XSArIHRoaXMubGluZXNbZm9jdXMucm93ICsgMV07XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMucm93XSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zcGxpY2VMaW5lcyhmb2N1cy5yb3cgKyAxLCAxKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvbih7IHJvdzogZm9jdXMucm93LCBjb2w6IGN1cnJlbnRMaW5lTGVuIH0pO1xuICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gRm9yIHdpdGhpbi1saW5lIGRlbGV0ZXMgb3Igbm9uLWNvbGxhcHNlZCBzZWxlY3Rpb25zLCBsZXQgdGhlIGJyb3dzZXIgaGFuZGxlIGl0XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgYmVmb3JlSW5wdXRFdmVudC5pbnB1dFR5cGUgIT09IFwiaW5zZXJ0UGFyYWdyYXBoXCIgJiZcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlICE9PSBcImluc2VydExpbmVCcmVha1wiXG4gICAgKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuXG4gICAgY29uc3QgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuXG4gICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yKSByZXR1cm47XG4gICAgXG4gICAgLy8gSWYgZm9jdXMgYW5kIGFuY2hvciBhcmUgaW4gZGlmZmVyZW50IGxpbmVzLCBzaW1wbHkgcmVtb3ZlIGV2ZXJ5dGhpbmcgXG4gICAgLy8gYWZ0ZXIgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIGFuZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uXG4gICAgLy8gYW5kIHJlbW92ZSBhbnkgbGluZXMgaW4gYmV0d2VlblxuICAgIGlmIChmb2N1cy5yb3cgIT09IGFuY2hvci5yb3cpIHtcbiAgICAgIGNvbnN0IGJlZ2lubmluZyA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBmb2N1cyA6IGFuY2hvcjtcbiAgICAgIGNvbnN0IGVuZCA9IGZvY3VzLnJvdyA8IGFuY2hvci5yb3cgPyBhbmNob3IgOiBmb2N1cztcbiAgICAgIHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10gPSB0aGlzLmxpbmVzW2JlZ2lubmluZy5yb3ddLnN1YnN0cmluZygwLCBiZWdpbm5pbmcuY29sKTtcbiAgICAgIHRoaXMubGluZXNbZW5kLnJvd10gPSB0aGlzLmxpbmVzW2VuZC5yb3ddLnN1YnN0cmluZyhlbmQuY29sKTtcbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoYmVnaW5uaW5nLnJvdyArIDEsIGVuZC5yb3cgLSBiZWdpbm5pbmcucm93IC0gMSk7XG4gICAgICBmb2N1cy5yb3cgPSBiZWdpbm5pbmcucm93ICsgMTtcbiAgICAgIGZvY3VzLmNvbCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb250aW51YWJsZVR5cGU6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgICBzd2l0Y2ggKHRoaXMubGluZVR5cGVzW2ZvY3VzLnJvd10pIHtcbiAgICAgICAgY2FzZSBcIlRNVUxcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNVUxcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNT0xcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNT0xcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlRNSW5kZW50ZWRDb2RlXCI6XG4gICAgICAgICAgY29udGludWFibGVUeXBlID0gXCJUTUluZGVudGVkQ29kZVwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuIFxuICAgICAgY29uc3QgbGluZUJlZm9yZUJyZWFrID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cmluZygwLCBmb2N1cy5jb2wgPD0gYW5jaG9yLmNvbCA/IGZvY3VzLmNvbCA6IGFuY2hvci5jb2wpO1xuICAgICAgY29uc3QgbGluZUFmdGVyQnJlYWsgPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyaW5nKGZvY3VzLmNvbCA8PSBhbmNob3IuY29sID8gYW5jaG9yLmNvbCA6IGZvY3VzLmNvbCk7XG4gICAgICB0aGlzLnNwbGljZUxpbmVzKGZvY3VzLnJvdywgMSwgW2xpbmVCZWZvcmVCcmVhaywgbGluZUFmdGVyQnJlYWtdKTtcblxuICAgICAgZm9jdXMucm93ICs9IDE7XG4gICAgICBmb2N1cy5jb2wgPSAwO1xuXG4gICAgICBpZiAoY29udGludWFibGVUeXBlKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXJbY29udGludWFibGVUeXBlXS5yZWdleHAuZXhlYyh0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdKTtcbiAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICBpZiAoY2FwdHVyZVsyXSkge1xuICAgICAgICAgICAgaWYgKGNvbnRpbnVhYmxlVHlwZSA9PT0gXCJUTU9MXCIpIHtcbiAgICAgICAgICAgICAgY2FwdHVyZVsxXSA9IGNhcHR1cmVbMV0ucmVwbGFjZShlZGl0b3JSZWdFeHAub3JkZXJlZExpc3ROdW1iZXIsIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHBhcnNlSW50KHJlc3VsdCkgKyAxKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGluZXNbZm9jdXMucm93XSA9IGAke2NhcHR1cmVbMV19JHt0aGlzLmxpbmVzW2ZvY3VzLnJvd119YDtcbiAgICAgICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvd10gPSB0cnVlO1xuICAgICAgICAgICAgZm9jdXMuY29sID0gY2FwdHVyZVsxXS5sZW5ndGg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGluZXNbZm9jdXMucm93IC0gMV0gPSBcIlwiO1xuICAgICAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMucm93IC0gMV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyk7XG5cbiAgICAvLyBTY3JvbGwgdGhlIGVsZW1lbnQgY29udGFpbmluZyB0aGUgc2VsZWN0aW9uIGludG8gdmlld1xuICAgIGlmIChmb2N1cyAmJiBmb2N1cy5yb3cgPCB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICh0aGlzLmxpbmVFbGVtZW50c1tmb2N1cy5yb3ddIGFzIEhUTUxFbGVtZW50KS5zY3JvbGxJbnRvVmlldyh7XG4gICAgICAgIGJsb2NrOiAnbmVhcmVzdCcsXG4gICAgICAgIGlubGluZTogJ25lYXJlc3QnXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSW5wdXRFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gZXZlbnQgYXMgSW5wdXRFdmVudDtcbiAgICBpZiAoaW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiaW5zZXJ0Q29tcG9zaXRpb25UZXh0XCIpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG5cbiAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuXG4gICAgaWYgKChpbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRQYXJhZ3JhcGhcIiB8fCBpbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRMaW5lQnJlYWtcIikgJiYgZm9jdXMpIHtcbiAgICAgIC8vIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBzaW5jZSB0aGVzZSBhcmUgaGFuZGxlZCBieSB0aGUgYmVmb3JlaW5wdXQgaGFuZGxlclxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMuZSEuZmlyc3RDaGlsZCkge1xuICAgICAgICB0aGlzLmUhLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPVwiVE1CbGFua0xpbmVcIj48YnI+PC9kaXY+JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZml4Tm9kZUhpZXJhcmNoeSgpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nKCk7XG4gICAgfVxuICAgIGlmIChmb2N1cykge1xuICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuICAgIH1cblxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTZWxlY3Rpb25DaGFuZ2VFdmVudChfZTogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmZpcmVTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBsZXQgdGV4dCA9IChldmVudCBhcyBhbnkpLmNsaXBib2FyZERhdGEuZ2V0RGF0YShcInRleHQvcGxhaW5cIik7XG4gICAgdGhpcy5wYXN0ZSh0ZXh0KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmZpcmVEcm9wKGV2ZW50LmRhdGFUcmFuc2ZlciEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgYSB0YXNrIGxpc3QgY2hlY2tib3ggd2hlbiBpdHMgcmVuZGVyZWQgYm94IGlzIGNsaWNrZWQuIE9ubHkgdGhlIHNpbmdsZSBpbm5lciBjaGFyYWN0ZXJcbiAgICogb2YgdGhlIG1hcmtlciAoYFsgXWAgLT4gYFt4XWAgYW5kIGJhY2spIGlzIGNoYW5nZWQ7IHRoZSBlZGl0IGlzIGxlbmd0aC1wcmVzZXJ2aW5nLCByZWNvcmRlZCBpblxuICAgKiB0aGUgdW5kbyBoaXN0b3J5LCBhbmQgZmlyZXMgYSBgY2hhbmdlYCBldmVudCwgbWlycm9yaW5nIHNldENvbW1hbmRTdGF0ZSdzIGxpbmUtZWRpdCBmbG93LlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgY29uc3QgYm94ID0gdGFyZ2V0ICYmIHRhcmdldC5jbG9zZXN0ID8gKHRhcmdldC5jbG9zZXN0KFwiLlRNQ2hlY2tib3hcIikgYXMgSFRNTEVsZW1lbnQgfCBudWxsKSA6IG51bGw7XG4gICAgaWYgKCFib3gpIHJldHVybjsgLy8gTm90IGEgY2hlY2tib3ggY2xpY2sg4oCUIGxldCB0aGUgZGVmYXVsdCBjYXJldCBwbGFjZW1lbnQgaGFwcGVuLlxuXG4gICAgLy8gV2FsayB1cCB0byB0aGUgbGluZSBlbGVtZW50IChhIGRpcmVjdCBjaGlsZCBvZiB0aGUgZWRpdG9yKSB0byBmaW5kIGl0cyBzb3VyY2Ugcm93LlxuICAgIGxldCBsaW5lRWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGJveDtcbiAgICB3aGlsZSAobGluZUVsICYmIGxpbmVFbC5wYXJlbnROb2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGxpbmVFbCA9IGxpbmVFbC5wYXJlbnROb2RlIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICB9XG4gICAgaWYgKCFsaW5lRWwgfHwgbGluZUVsLmRhdGFzZXQubGluZU51bSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgY29uc3Qgcm93ID0gcGFyc2VJbnQobGluZUVsLmRhdGFzZXQubGluZU51bSwgMTApO1xuICAgIGlmIChpc05hTihyb3cpIHx8IHJvdyA8IDAgfHwgcm93ID49IHRoaXMubGluZXMubGVuZ3RoKSByZXR1cm47XG5cbiAgICBjb25zdCBjb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4oYm94LCAwKTtcbiAgICBpZiAoY29sID09PSBudWxsKSByZXR1cm47XG4gICAgY29uc3QgY2ggPSB0aGlzLmxpbmVzW3Jvd10uY2hhckF0KGNvbCk7XG4gICAgaWYgKGNoICE9PSBcIiBcIiAmJiBjaCAhPT0gXCJ4XCIgJiYgY2ggIT09IFwiWFwiKSByZXR1cm47IC8vIERlZmVuc2l2ZTogbm90IGFjdHVhbGx5IGEgY2hlY2tib3ggY2hhci5cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gY2ggPT09IFwiIFwiID8gXCJ4XCIgOiBcIiBcIjtcbiAgICB0aGlzLmxpbmVzW3Jvd10gPSB0aGlzLmxpbmVzW3Jvd10uc3Vic3RyKDAsIGNvbCkgKyByZXBsYWNlbWVudCArIHRoaXMubGluZXNbcm93XS5zdWJzdHIoY29sICsgMSk7XG4gICAgdGhpcy5saW5lRGlydHlbcm93XSA9IHRydWU7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgcHJvY2Vzc0lubGluZVN0eWxlcyhvcmlnaW5hbFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICBsZXQgc3RhY2s6IEFycmF5PHtkZWxpbWl0ZXI6IHN0cmluZywgZGVsaW1TdHJpbmc6IHN0cmluZywgY291bnQ6IG51bWJlciwgb3V0cHV0OiBzdHJpbmd9PiA9IFtdO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZztcblxuICAgIG91dGVyOiB3aGlsZSAoc3RyaW5nKSB7XG4gICAgICAvLyBTb2Z0IGxpbmUgYnJlYWs6IHdoZW4gYSBwYXJhZ3JhcGggdGhhdCBzcGFucyBzZXZlcmFsIHNvdXJjZSBsaW5lcyBpcyBwYXJzZWQgYXMgb25lXG4gICAgICAvLyBqb2luZWQgc3RyaW5nLCB0aGUgbGluZXMgYXJlIHNlcGFyYXRlZCBieSBcXG4uIFByZXNlcnZlIGl0IGFzIGEgbmV3bGluZSBtYXJrZXIgaW4gdGhlXG4gICAgICAvLyBvdXRwdXQ7IHNwbGl0SW5saW5lSFRNTEJ5TGluZSgpIGxhdGVyIHNwbGl0cyB0aGUgcmVzdWx0IGJhY2sgaW50byBwZXItbGluZSBmcmFnbWVudHMuXG4gICAgICAvLyBObyBpbmxpbmUgcnVsZSBzdGFydHMgb24gYSBuZXdsaW5lIChOb3RUcmlnZ2VyQ2hhciBhbmQgYC5gIGJvdGggZXhjbHVkZSBpdCksIHNvIGhhbmRsaW5nXG4gICAgICAvLyBpdCBoZXJlIGtlZXBzIHRoZSB0b2tlbml6ZXIgZnJvbSBzdGFsbGluZy5cbiAgICAgIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gMTApIHtcbiAgICAgICAgcHJvY2Vzc2VkICs9IFwiXFxuXCI7XG4gICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoMSk7XG4gICAgICAgIG9mZnNldCArPSAxO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyBzaW1wbGUgcnVsZXMgKG5vbi1kZWxpbWl0ZXIpXG4gICAgICBmb3IgKGxldCBydWxlIG9mIFtcImVzY2FwZVwiLCBcImNvZGVcIiwgXCJhdXRvbGlua1wiLCBcImh0bWxcIl0pIHtcbiAgICAgICAgaWYgKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXSkge1xuICAgICAgICAgIGxldCBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgICBwcm9jZXNzZWQgKz0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlcGxhY2VtZW50LnJlcGxhY2UoZWRpdG9yUmVnRXhwLmlubGluZVJlcGxhY2VtZW50UGxhY2Vob2xkZXIsIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQcm9jZXNzIGN1c3RvbSBpbmxpbmUgZ3JhbW1hciBydWxlc1xuICAgICAgZm9yIChsZXQgcnVsZSBpbiB0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIpIHtcbiAgICAgICAgaWYgKHJ1bGUgIT09IFwiZXNjYXBlXCIgJiYgcnVsZSAhPT0gXCJjb2RlXCIgJiYgcnVsZSAhPT0gXCJhdXRvbGlua1wiICYmIHJ1bGUgIT09IFwiaHRtbFwiICYmIHJ1bGUgIT09IFwibGlua09wZW5cIiAmJiBydWxlICE9PSBcImltYWdlT3BlblwiICYmIHJ1bGUgIT09IFwibGlua0xhYmVsXCIgJiYgcnVsZSAhPT0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcHJvY2Vzc2VkICs9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZXBsYWNlbWVudC5yZXBsYWNlKGVkaXRvclJlZ0V4cC5pbmxpbmVSZXBsYWNlbWVudFBsYWNlaG9sZGVyLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIEdGTSBleHRlbmRlZCAobm9uLWRlbGltaXRlZCkgYXV0b2xpbmtzOiBiYXJlIFVSTHMgKHd3dy7igKYsIGh0dHAocyk6Ly/igKYsIGZ0cDovL+KApiksXG4gICAgICAvLyBlbWFpbCBhZGRyZXNzZXMsIGFuZCBtYWlsdG86L3htcHA6IGxpbmtzLiBUaGVzZSBhcmUgb25seSByZWNvZ25pemVkIGF0IHRoZSBzdGFydCBvZiB0aGVcbiAgICAgIC8vIHN0cmluZyBvciBpbW1lZGlhdGVseSBhZnRlciB3aGl0ZXNwYWNlIG9yIG9uZSBvZiB0aGUgZGVsaW1pdGVycyBgKmAsIGBfYCwgYH5gLCBgKGAuXG4gICAgICBjb25zdCBwcmVjZWRpbmdDaGFyID0gb2Zmc2V0ID4gMCA/IG9yaWdpbmFsU3RyaW5nW29mZnNldCAtIDFdIDogXCJcIjtcbiAgICAgIGlmIChwcmVjZWRpbmdDaGFyID09PSBcIlwiIHx8IGVkaXRvclJlZ0V4cC5hdXRvbGlua1ByZWNlZGluZ0NoYXIudGVzdChwcmVjZWRpbmdDaGFyKSkge1xuICAgICAgICBsZXQgYXV0b2xpbmsgPSB0aGlzLnBhcnNlQXV0b2xpbmtFeHRlbnNpb24oc3RyaW5nKTtcbiAgICAgICAgaWYgKGF1dG9saW5rKSB7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gYCR7cHJvY2Vzc2VkfSR7YXV0b2xpbmsub3V0cHV0fWA7XG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihhdXRvbGluay5jaGFyQ291bnQpO1xuICAgICAgICAgIG9mZnNldCArPSBhdXRvbGluay5jaGFyQ291bnQ7XG4gICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGxpbmtzIC8gaW1hZ2VzXG4gICAgICBsZXQgcG90ZW50aWFsTGluayA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKTtcbiAgICAgIGxldCBwb3RlbnRpYWxJbWFnZSA9IHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCk7XG4gICAgICBpZiAocG90ZW50aWFsSW1hZ2UgfHwgcG90ZW50aWFsTGluaykge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wYXJzZUxpbmtPckltYWdlKHN0cmluZywgISFwb3RlbnRpYWxJbWFnZSk7XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtwcm9jZXNzZWR9JHtyZXN1bHQub3V0cHV0fWA7XG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihyZXN1bHQuY2hhckNvdW50KTtcbiAgICAgICAgICBvZmZzZXQgKz0gcmVzdWx0LmNoYXJDb3VudDtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgZW0gLyBzdHJvbmcgZGVsaW1pdGVyc1xuICAgICAgbGV0IGNhcCA9IGVkaXRvclJlZ0V4cC5lbXBoYXNpc0RlbGltaXRlci5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGxldCBkZWxpbUNvdW50ID0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGVsaW1TdHJpbmcgPSBjYXBbMF07XG4gICAgICAgIGNvbnN0IGN1cnJlbnREZWxpbWl0ZXIgPSBjYXBbMF1bMF07XG5cbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcblxuICAgICAgICBjb25zdCBwcmVjZWRpbmcgPSBvZmZzZXQgPiAwID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKDAsIG9mZnNldCkgOiBcIiBcIjtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nID0gb2Zmc2V0ICsgY2FwWzBdLmxlbmd0aCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IHN0cmluZyA6IFwiIFwiO1xuXG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaChwdW5jdHVhdGlvbkxlYWRpbmcpO1xuICAgICAgICBjb25zdCBwdW5jdHVhdGlvblByZWNlZGVzID0gcHJlY2VkaW5nLm1hdGNoKHB1bmN0dWF0aW9uVHJhaWxpbmcpO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlRm9sbG93cyA9IGZvbGxvd2luZy5tYXRjaChlZGl0b3JSZWdFeHAubGVhZGluZ1doaXRlc3BhY2UpO1xuICAgICAgICBjb25zdCB3aGl0ZXNwYWNlUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2goZWRpdG9yUmVnRXhwLnRyYWlsaW5nV2hpdGVzcGFjZSk7XG5cbiAgICAgICAgbGV0IGNhbk9wZW4gPSAhd2hpdGVzcGFjZUZvbGxvd3MgJiYgKCFwdW5jdHVhdGlvbkZvbGxvd3MgfHwgISF3aGl0ZXNwYWNlUHJlY2VkZXMgfHwgISFwdW5jdHVhdGlvblByZWNlZGVzKTtcbiAgICAgICAgbGV0IGNhbkNsb3NlID0gIXdoaXRlc3BhY2VQcmVjZWRlcyAmJiAoIXB1bmN0dWF0aW9uUHJlY2VkZXMgfHwgISF3aGl0ZXNwYWNlRm9sbG93cyB8fCAhIXB1bmN0dWF0aW9uRm9sbG93cyk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnREZWxpbWl0ZXIgPT09IFwiX1wiICYmIGNhbk9wZW4gJiYgY2FuQ2xvc2UpIHtcbiAgICAgICAgICBjYW5PcGVuID0gISFwdW5jdHVhdGlvblByZWNlZGVzO1xuICAgICAgICAgIGNhbkNsb3NlID0gISFwdW5jdHVhdGlvbkZvbGxvd3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FuQ2xvc2UpIHtcbiAgICAgICAgICBsZXQgc3RhY2tQb2ludGVyID0gc3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoZGVsaW1Db3VudCAmJiBzdGFja1BvaW50ZXIgPj0gMCkge1xuICAgICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uZGVsaW1pdGVyID09PSBjdXJyZW50RGVsaW1pdGVyKSB7XG4gICAgICAgICAgICAgIHdoaWxlIChzdGFja1BvaW50ZXIgPCBzdGFjay5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7ZW50cnkuZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGVudHJ5LmNvdW50KX0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGRlbGltQ291bnQgPj0gMiAmJiBzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50ID49IDIpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj48c3Ryb25nIGNsYXNzPVwiVE1TdHJvbmdcIj4ke3Byb2Nlc3NlZH08L3N0cm9uZz48c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn0ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgZGVsaW1Db3VudCAtPSAyO1xuICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgLT0gMjtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPjxlbSBjbGFzcz1cIlRNRW1cIj4ke3Byb2Nlc3NlZH08L2VtPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfTwvc3Bhbj5gO1xuICAgICAgICAgICAgICAgIGRlbGltQ291bnQgLT0gMTtcbiAgICAgICAgICAgICAgICBzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50IC09IDE7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxldCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhY2tQb2ludGVyLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlbGltQ291bnQgJiYgY2FuT3Blbikge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgZGVsaW1pdGVyOiBjdXJyZW50RGVsaW1pdGVyLFxuICAgICAgICAgICAgZGVsaW1TdHJpbmc6IGRlbGltU3RyaW5nLFxuICAgICAgICAgICAgY291bnQ6IGRlbGltQ291bnQsXG4gICAgICAgICAgICBvdXRwdXQ6IHByb2Nlc3NlZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBcIlwiO1xuICAgICAgICAgIGRlbGltQ291bnQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlbGltQ291bnQpIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtwcm9jZXNzZWR9JHtkZWxpbVN0cmluZy5zdWJzdHIoMCwgZGVsaW1Db3VudCl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHN0cmlrZXRocm91Z2ggZGVsaW1pdGVyXG4gICAgICBjYXAgPSBlZGl0b3JSZWdFeHAuc3RyaWtldGhyb3VnaERlbGltaXRlci5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIGxldCBjb25zdW1lZCA9IGZhbHNlO1xuICAgICAgICBsZXQgc3RhY2tQb2ludGVyID0gc3RhY2subGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKCFjb25zdW1lZCAmJiBzdGFja1BvaW50ZXIgPj0gMCkge1xuICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmRlbGltaXRlciA9PT0gXCJ+XCIpIHtcbiAgICAgICAgICAgIHdoaWxlIChzdGFja1BvaW50ZXIgPCBzdGFjay5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPn5+PC9zcGFuPjxkZWwgY2xhc3M9XCJUTVN0cmlrZXRocm91Z2hcIj4ke3Byb2Nlc3NlZH08L2RlbD48c3BhbiBjbGFzcz1cIlRNTWFya1wiPn5+PC9zcGFuPmA7XG4gICAgICAgICAgICBsZXQgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgIGNvbnN1bWVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhY2tQb2ludGVyLS07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb25zdW1lZCkge1xuICAgICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgZGVsaW1pdGVyOiBcIn5cIixcbiAgICAgICAgICAgIGRlbGltU3RyaW5nOiBcIn5+XCIsXG4gICAgICAgICAgICBjb3VudDogMixcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzc2VkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3NlZCA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgJ2RlZmF1bHQnIHJ1bGVcbiAgICAgIGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5kZWZhdWx0LnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICBpZiAoY2FwKSB7XG4gICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBwcm9jZXNzZWQgKz0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmRlZmF1bHQucmVwbGFjZW1lbnQucmVwbGFjZShlZGl0b3JSZWdFeHAuaW5saW5lUmVwbGFjZW1lbnRQbGFjZWhvbGRlciwgKHN0ciwgcDEpID0+IGh0bWxlc2NhcGUoY2FwW3AxXSkpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cbiAgICAgIHRocm93IFwiSW5maW5pdGUgbG9vcCFcIjtcbiAgICB9XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ29sdW1uKHN0YXJ0Tm9kZTogTm9kZSwgb2Zmc2V0OiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcbiAgICBsZXQgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICBsZXQgY29sOiBudW1iZXI7XG4gICAgd2hpbGUgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgIH1cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoc3RhcnROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSB8fCBvZmZzZXQgPT09IDApIHtcbiAgICAgIGNvbCA9IG9mZnNldDtcbiAgICAgIG5vZGUgPSBzdGFydE5vZGU7XG4gICAgfSBlbHNlIGlmIChvZmZzZXQgPiAwKSB7XG4gICAgICBub2RlID0gc3RhcnROb2RlLmNoaWxkTm9kZXNbb2Zmc2V0IC0gMV07XG4gICAgICBjb2wgPSBub2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbCA9IDA7XG4gICAgICBub2RlID0gc3RhcnROb2RlO1xuICAgIH1cbiAgICB3aGlsZSAobm9kZS5wYXJlbnROb2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmIChub2RlLnByZXZpb3VzU2libGluZykge1xuICAgICAgICBub2RlID0gbm9kZS5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIGNvbCArPSBub2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlIGFzIHVua25vd24gYXMgQ2hpbGROb2RlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlTm9kZUFuZE9mZnNldChyb3c6IG51bWJlciwgY29sOiBudW1iZXIsIGJpbmRSaWdodDogYm9vbGVhbiA9IGZhbHNlKToge25vZGU6IE5vZGUsIG9mZnNldDogbnVtYmVyfSB7XG4gICAgaWYgKHJvdyA+PSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJvdyA9IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICBjb2wgPSB0aGlzLmxpbmVzW3Jvd10ubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAoY29sID4gdGhpcy5saW5lc1tyb3ddLmxlbmd0aCkge1xuICAgICAgY29sID0gdGhpcy5saW5lc1tyb3ddLmxlbmd0aDtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMubGluZUVsZW1lbnRzW3Jvd10gYXMgSFRNTEVsZW1lbnQ7XG4gICAgbGV0IG5vZGUgPSBwYXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG5cbiAgICBsZXQgY2hpbGRyZW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgIGxldCBydiA9IHtcbiAgICAgIG5vZGU6IHBhcmVudE5vZGUuZmlyc3RDaGlsZCA/IHBhcmVudE5vZGUuZmlyc3RDaGlsZCA6IHBhcmVudE5vZGUsXG4gICAgICBvZmZzZXQ6IDAsXG4gICAgfTtcblxuICAgIHdoaWxlIChub2RlICE9PSBwYXJlbnROb2RlKSB7XG4gICAgICBpZiAoIWNoaWxkcmVuQ29tcGxldGUgJiYgbm9kZSEubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7XG4gICAgICAgIGlmIChub2RlIS5ub2RlVmFsdWUhLmxlbmd0aCA+PSBjb2wpIHtcbiAgICAgICAgICBpZiAoYmluZFJpZ2h0ICYmIG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoID09PSBjb2wpIHtcbiAgICAgICAgICAgIHJ2ID0geyBub2RlOiBub2RlISwgb2Zmc2V0OiBjb2wgfTtcbiAgICAgICAgICAgIGNvbCA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IG5vZGU6IG5vZGUhLCBvZmZzZXQ6IGNvbCB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2wgLT0gbm9kZSEubm9kZVZhbHVlIS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghY2hpbGRyZW5Db21wbGV0ZSAmJiBub2RlIS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUgPSBub2RlIS5maXJzdENoaWxkO1xuICAgICAgfSBlbHNlIGlmIChub2RlIS5uZXh0U2libGluZykge1xuICAgICAgICBjaGlsZHJlbkNvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIG5vZGUgPSBub2RlIS5uZXh0U2libGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoaWxkcmVuQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICBub2RlID0gbm9kZSEucGFyZW50Tm9kZSBhcyB1bmtub3duIGFzIENoaWxkTm9kZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcnY7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgIHRoaXMudXBkYXRlTGluZUNvbnRlbnRzKCk7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRGlydHlGbGFnKCk6IHZvaWQge1xuICAgIHRoaXMubGluZURpcnR5ID0gbmV3IEFycmF5KHRoaXMubGluZXMubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGluZURpcnR5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzLmxpbmVEaXJ0eVtpXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZUNvbnRlbnRzKCk6IHZvaWQge1xuICAgIGxldCBsaW5lRGVsdGEgPSB0aGlzLmUhLmNoaWxkRWxlbWVudENvdW50IC0gdGhpcy5saW5lcy5sZW5ndGg7XG4gICAgaWYgKGxpbmVEZWx0YSkge1xuICAgICAgbGV0IGZpcnN0Q2hhbmdlZExpbmUgPSAwO1xuICAgICAgd2hpbGUgKFxuICAgICAgICBmaXJzdENoYW5nZWRMaW5lIDw9IHRoaXMubGluZXMubGVuZ3RoICYmXG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUgPD0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmVdICYmXG4gICAgICAgIHRoaXMubGluZXNbZmlyc3RDaGFuZ2VkTGluZV0gPT09ICh0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkudGV4dENvbnRlbnQgJiZcbiAgICAgICAgdGhpcy5saW5lVHlwZXNbZmlyc3RDaGFuZ2VkTGluZV0gPT09ICh0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lXG4gICAgICApIHtcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSsrO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGFzdENoYW5nZWRMaW5lID0gLTE7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIC1sYXN0Q2hhbmdlZExpbmUgPCB0aGlzLmxpbmVzLmxlbmd0aCAmJlxuICAgICAgICAtbGFzdENoYW5nZWRMaW5lIDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICYmXG4gICAgICAgIHRoaXMubGluZXNbdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdID09PVxuICAgICAgICAgICh0aGlzLmxpbmVFbGVtZW50c1t0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCAmJlxuICAgICAgICB0aGlzLmxpbmVUeXBlc1t0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gPT09XG4gICAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW3RoaXMubGluZUVsZW1lbnRzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLmNsYXNzTmFtZVxuICAgICAgKSB7XG4gICAgICAgIGxhc3RDaGFuZ2VkTGluZS0tO1xuICAgICAgfVxuXG4gICAgICBsZXQgbGluZXNUb0RlbGV0ZSA9IHRoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lICsgMSAtIGZpcnN0Q2hhbmdlZExpbmU7XG4gICAgICBpZiAobGluZXNUb0RlbGV0ZSA8IC1saW5lRGVsdGEpIGxpbmVzVG9EZWxldGUgPSAtbGluZURlbHRhO1xuICAgICAgaWYgKGxpbmVzVG9EZWxldGUgPCAwKSBsaW5lc1RvRGVsZXRlID0gMDtcblxuICAgICAgbGV0IGxpbmVzVG9BZGQgPSBbXTtcbiAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGluZXNUb0RlbGV0ZSArIGxpbmVEZWx0YTsgbCsrKSB7XG4gICAgICAgIGxpbmVzVG9BZGQucHVzaCgodGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZSArIGxdIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCB8fCBcIlwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoZmlyc3RDaGFuZ2VkTGluZSwgbGluZXNUb0RlbGV0ZSwgbGluZXNUb0FkZCwgZmFsc2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBsaW5lID0gMDsgbGluZSA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aDsgbGluZSsrKSB7XG4gICAgICAgIGxldCBlID0gdGhpcy5saW5lRWxlbWVudHNbbGluZV0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGxldCBjdCA9IGUudGV4dENvbnRlbnQgfHwgXCJcIjtcbiAgICAgICAgaWYgKHRoaXMubGluZXNbbGluZV0gIT09IGN0IHx8IHRoaXMubGluZVR5cGVzW2xpbmVdICE9PSBlLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSBjdDtcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lXSA9IGUuY2xhc3NOYW1lO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3BsaWNlTGluZXMoXG4gICAgc3RhcnRMaW5lOiBudW1iZXIsXG4gICAgbGluZXNUb0RlbGV0ZTogbnVtYmVyID0gMCxcbiAgICBsaW5lc1RvSW5zZXJ0OiBzdHJpbmdbXSA9IFtdLFxuICAgIGFkanVzdExpbmVFbGVtZW50czogYm9vbGVhbiA9IHRydWVcbiAgKTogdm9pZCB7XG4gICAgaWYgKGFkanVzdExpbmVFbGVtZW50cykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc1RvRGVsZXRlOyBpKyspIHtcbiAgICAgICAgdGhpcy5lIS5yZW1vdmVDaGlsZCh0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGluc2VydGVkQmxhbmsgPSBbXTtcbiAgICBsZXQgaW5zZXJ0ZWREaXJ0eSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc1RvSW5zZXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRlZEJsYW5rLnB1c2goXCJcIik7XG4gICAgICBpbnNlcnRlZERpcnR5LnB1c2godHJ1ZSk7XG4gICAgICBpZiAoYWRqdXN0TGluZUVsZW1lbnRzKSB7XG4gICAgICAgIGlmICh0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSlcbiAgICAgICAgICB0aGlzLmUhLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCB0aGlzLmUhLmNoaWxkTm9kZXNbc3RhcnRMaW5lXSk7XG4gICAgICAgIGVsc2UgdGhpcy5lIS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxpbmVzLnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmxpbmVzVG9JbnNlcnQpO1xuICAgIHRoaXMubGluZVR5cGVzLnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmluc2VydGVkQmxhbmspO1xuICAgIHRoaXMubGluZURpcnR5LnNwbGljZShzdGFydExpbmUsIGxpbmVzVG9EZWxldGUsIC4uLmluc2VydGVkRGlydHkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXhOb2RlSGllcmFyY2h5KCk6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbmFsQ2hpbGRyZW4gPSBBcnJheS5mcm9tKHRoaXMuZSEuY2hpbGROb2Rlcyk7XG5cbiAgICBjb25zdCByZXBsYWNlQ2hpbGQgPSAoY2hpbGQ6IE5vZGUsIC4uLm5ld0NoaWxkcmVuOiBOb2RlW10pID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNoaWxkLnBhcmVudEVsZW1lbnQhO1xuICAgICAgY29uc3QgbmV4dFNpYmxpbmcgPSBjaGlsZC5uZXh0U2libGluZztcbiAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChjaGlsZCk7XG4gICAgICBuZXdDaGlsZHJlbi5mb3JFYWNoKChuZXdDaGlsZCkgPT5cbiAgICAgICAgbmV4dFNpYmxpbmcgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5ld0NoaWxkLCBuZXh0U2libGluZykgOiBwYXJlbnQuYXBwZW5kQ2hpbGQobmV3Q2hpbGQpXG4gICAgICApO1xuICAgIH07XG5cbiAgICBvcmlnaW5hbENoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoY2hpbGQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFIHx8IChjaGlsZCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSAhPT0gXCJESVZcIikge1xuICAgICAgICBjb25zdCBkaXZXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgcmVwbGFjZUNoaWxkKGNoaWxkLCBkaXZXcmFwcGVyKTtcbiAgICAgICAgZGl2V3JhcHBlci5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkLmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNoaWxkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBncmFuZENoaWxkcmVuID0gQXJyYXkuZnJvbShjaGlsZC5jaGlsZE5vZGVzKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGdyYW5kQ2hpbGRyZW4uc29tZShcbiAgICAgICAgICAgIChncmFuZENoaWxkKSA9PlxuICAgICAgICAgICAgICBncmFuZENoaWxkLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiAoZ3JhbmRDaGlsZCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZSA9PT0gXCJESVZcIlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2VDaGlsZChjaGlsZCwgLi4uZ3JhbmRDaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byBwYXJzZSBhIEdGTSBleHRlbmRlZCAobm9uLWRlbGltaXRlZCkgYXV0b2xpbmsgYXQgdGhlIHN0YXJ0IG9mIGBzdHJpbmdgOiBhIGJhcmUgVVJMXG4gICAqIChgd3d3LuKApmAsIGBodHRwOi8v4oCmYCwgYGh0dHBzOi8v4oCmYCwgYGZ0cDovL+KApmApLCBhbiBlbWFpbCBhZGRyZXNzLCBvciBhIGBtYWlsdG86YC9geG1wcDpgIGxpbmsuXG4gICAqIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBwcmVjZWRpbmctY2hhcmFjdGVyIGJvdW5kYXJ5IGNoZWNrLiBPbiBzdWNjZXNzLCByZXR1cm5zIHRoZVxuICAgKiByZW5kZXJlZCBIVE1MICh0aGUgbWF0Y2hlZCB0ZXh0IHdyYXBwZWQgaW4gYSBgVE1BdXRvbGlua2Agc3BhbiwgZXhhY3RseSBsaWtlIHRoZSBjb250ZW50IG9mIGFuXG4gICAqIGFuZ2xlLWJyYWNrZXRlZCBhdXRvbGluaykgYW5kIHRoZSBudW1iZXIgb2Ygc291cmNlIGNoYXJhY3RlcnMgY29uc3VtZWQ7IG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgcHVibGljIHBhcnNlQXV0b2xpbmtFeHRlbnNpb24oc3RyaW5nOiBzdHJpbmcpOiB7b3V0cHV0OiBzdHJpbmcsIGNoYXJDb3VudDogbnVtYmVyfSB8IGZhbHNlIHtcbiAgICBjb25zdCBtYXRjaCA9IHRoaXMubWF0Y2hFeHRlbmRlZEF1dG9saW5rKHN0cmluZyk7XG4gICAgaWYgKCFtYXRjaCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB7XG4gICAgICBvdXRwdXQ6IGA8c3BhbiBjbGFzcz1cIlRNQXV0b2xpbmtcIj4ke2h0bWxlc2NhcGUobWF0Y2gpfTwvc3Bhbj5gLFxuICAgICAgY2hhckNvdW50OiBtYXRjaC5sZW5ndGgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBsb25nZXN0IGV4dGVuZGVkLWF1dG9saW5rIHN1YnN0cmluZyBhdCB0aGUgc3RhcnQgb2YgYHN0cmluZ2AsIG9yIGBmYWxzZWAuICovXG4gIHByaXZhdGUgbWF0Y2hFeHRlbmRlZEF1dG9saW5rKHN0cmluZzogc3RyaW5nKTogc3RyaW5nIHwgZmFsc2Uge1xuICAgIC8vIC0tLSBCYXJlIFVSTCAvIHd3dyBhdXRvbGluayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIHd3dy4gaXMgdHJlYXRlZCBhcyBwYXJ0IG9mIHRoZSBkb21haW47IGFuIGV4cGxpY2l0IHNjaGVtZSBpcyBzdHJpcHBlZCBiZWZvcmUgdGhlIGRvbWFpbi5cbiAgICBjb25zdCBzY2hlbWVDYXAgPSBlZGl0b3JSZWdFeHAuYXV0b2xpbmtTY2hlbWUuZXhlYyhzdHJpbmcpO1xuICAgIGNvbnN0IGlzV3d3ID0gZWRpdG9yUmVnRXhwLmF1dG9saW5rV3d3LnRlc3Qoc3RyaW5nKTtcbiAgICBpZiAoc2NoZW1lQ2FwIHx8IGlzV3d3KSB7XG4gICAgICBjb25zdCBwcmVmaXhMZW4gPSBzY2hlbWVDYXAgPyBzY2hlbWVDYXBbMF0ubGVuZ3RoIDogMDtcbiAgICAgIGNvbnN0IGFmdGVyUHJlZml4ID0gc3RyaW5nLnN1YnN0cihwcmVmaXhMZW4pO1xuICAgICAgLy8gQSB2YWxpZCBkb21haW4gaXMgZG90LXNlcGFyYXRlZCBzZWdtZW50cyBvZiBhbHBoYW51bWVyaWNzLCBgX2AgYW5kIGAtYCwgd2l0aCBhdCBsZWFzdCBvbmVcbiAgICAgIC8vIGRvdCBhbmQgbm8gdW5kZXJzY29yZSBpbiB0aGUgbGFzdCB0d28gc2VnbWVudHMuXG4gICAgICBjb25zdCBkb21haW5DYXAgPSBlZGl0b3JSZWdFeHAuYXV0b2xpbmtEb21haW4uZXhlYyhhZnRlclByZWZpeCk7XG4gICAgICBpZiAoZG9tYWluQ2FwICYmIHRoaXMuaXNWYWxpZEF1dG9saW5rRG9tYWluKGRvbWFpbkNhcFswXSkpIHtcbiAgICAgICAgLy8gQWZ0ZXIgdGhlIGRvbWFpbiwgYW55IHJ1biBvZiBub24tc3BhY2UsIG5vbi1gPGAgY2hhcmFjdGVycyBmb3JtcyB0aGUgcGF0aC9xdWVyeS9mcmFnbWVudC5cbiAgICAgICAgY29uc3QgcGF0aENhcCA9IGVkaXRvclJlZ0V4cC5hdXRvbGlua1BhdGguZXhlYyhhZnRlclByZWZpeC5zdWJzdHIoZG9tYWluQ2FwWzBdLmxlbmd0aCkpO1xuICAgICAgICBjb25zdCBsaW5rID0gc3RyaW5nLnN1YnN0cigwLCBwcmVmaXhMZW4gKyBkb21haW5DYXBbMF0ubGVuZ3RoICsgKHBhdGhDYXAgPyBwYXRoQ2FwWzBdLmxlbmd0aCA6IDApKTtcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IHRoaXMudHJpbUF1dG9saW5rVHJhaWxpbmcobGluayk7XG4gICAgICAgIC8vIEd1YXJkIGFnYWluc3QgdHJhaWxpbmcgcHVuY3R1YXRpb24gdHJpbW1pbmcgaGF2aW5nIGVhdGVuIGludG8gdGhlIGRvbWFpbi5cbiAgICAgICAgaWYgKHRyaW1tZWQubGVuZ3RoID49IHByZWZpeExlbiArIGRvbWFpbkNhcFswXS5sZW5ndGgpIHJldHVybiB0cmltbWVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIC0tLSBtYWlsdG86IC8geG1wcDogYXV0b2xpbmsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHByb3RvQ2FwID0gZWRpdG9yUmVnRXhwLmF1dG9saW5rUHJvdG9jb2wuZXhlYyhzdHJpbmcpO1xuICAgIGlmIChwcm90b0NhcCkge1xuICAgICAgY29uc3QgZW1haWxDYXAgPSB0aGlzLm1hdGNoQXV0b2xpbmtFbWFpbChzdHJpbmcuc3Vic3RyKHByb3RvQ2FwWzBdLmxlbmd0aCkpO1xuICAgICAgaWYgKGVtYWlsQ2FwKSB7XG4gICAgICAgIC8vIHhtcHAgYWRkcmVzc2VzIG1heSBjYXJyeSBhIGAvcmVzb3VyY2VgIHN1ZmZpeC5cbiAgICAgICAgbGV0IGV4dHJhID0gXCJcIjtcbiAgICAgICAgaWYgKGVkaXRvclJlZ0V4cC5hdXRvbGlua1htcHAudGVzdChzdHJpbmcpKSB7XG4gICAgICAgICAgY29uc3QgcmVzQ2FwID0gZWRpdG9yUmVnRXhwLmF1dG9saW5rWG1wcFJlc291cmNlLmV4ZWMoXG4gICAgICAgICAgICBzdHJpbmcuc3Vic3RyKHByb3RvQ2FwWzBdLmxlbmd0aCArIGVtYWlsQ2FwLmxlbmd0aClcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChyZXNDYXApIGV4dHJhID0gcmVzQ2FwWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm90b0NhcFswXSArIGVtYWlsQ2FwICsgZXh0cmE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gLS0tIEJhcmUgZW1haWwgYXV0b2xpbmsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgZW1haWwgPSB0aGlzLm1hdGNoQXV0b2xpbmtFbWFpbChzdHJpbmcpO1xuICAgIGlmIChlbWFpbCkgcmV0dXJuIGVtYWlsO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIEdGTSBkb21haW4gdmFsaWRpdHk6IGF0IGxlYXN0IG9uZSBkb3QgYW5kIG5vIHVuZGVyc2NvcmUgaW4gdGhlIGxhc3QgdHdvIHNlZ21lbnRzLiAqL1xuICBwcml2YXRlIGlzVmFsaWRBdXRvbGlua0RvbWFpbihkb21haW46IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gZG9tYWluLnNwbGl0KFwiLlwiKTtcbiAgICBpZiAoc2VnbWVudHMubGVuZ3RoIDwgMikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhc2VnbWVudHMuc2xpY2UoLTIpLnNvbWUoKHNlZykgPT4gc2VnLmluZGV4T2YoXCJfXCIpID49IDApO1xuICB9XG5cbiAgLyoqIE1hdGNoZXMgYSBiYXJlIGVtYWlsIGFkZHJlc3MgYXQgdGhlIHN0YXJ0IG9mIGBzdHJpbmdgIHBlciB0aGUgR0ZNIGV4dGVuc2lvbiwgb3IgYGZhbHNlYC4gKi9cbiAgcHJpdmF0ZSBtYXRjaEF1dG9saW5rRW1haWwoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgfCBmYWxzZSB7XG4gICAgLy8gTG9jYWwgcGFydDogYWxwaGFudW1lcmljcyBwbHVzIGAuYCwgYC1gLCBgX2AsIGArYC4gRG9tYWluOiBkb3Qtc2VwYXJhdGVkIGxhYmVscyBvZlxuICAgIC8vIGFscGhhbnVtZXJpY3MsIGAtYCBhbmQgYF9gLCB3aXRoIGF0IGxlYXN0IG9uZSBkb3QgYW5kIG5vIGAtYC9gX2AgYXMgdGhlIGZpbmFsIGNoYXJhY3Rlci5cbiAgICBjb25zdCBjYXAgPSBlZGl0b3JSZWdFeHAuYXV0b2xpbmtFbWFpbC5leGVjKHN0cmluZyk7XG4gICAgaWYgKCFjYXApIHJldHVybiBmYWxzZTtcbiAgICBsZXQgZW1haWwgPSBjYXBbMF07XG4gICAgd2hpbGUgKGVtYWlsLmxlbmd0aCAmJiBlZGl0b3JSZWdFeHAuZW1haWxUcmFpbGluZ0NoYXIudGVzdChlbWFpbCkpIGVtYWlsID0gZW1haWwuc3Vic3RyKDAsIGVtYWlsLmxlbmd0aCAtIDEpO1xuICAgIC8vIE11c3Qgc3RpbGwgZW5kIGluIGEgY29tcGxldGUgVExEIChpLmUuIHJldGFpbiBhIGRvdCBhZnRlciB0aGUgdHJpbW1pbmcpLlxuICAgIGlmICghZWRpdG9yUmVnRXhwLmVtYWlsVGxkLnRlc3QoZW1haWwpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGVtYWlsO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmlwcyB0cmFpbGluZyBjaGFyYWN0ZXJzIHRoYXQgR0ZNIGV4Y2x1ZGVzIGZyb20gYW4gYXV0b2xpbms6IHRoZSBwdW5jdHVhdGlvbiBgPyEuLDoqX35gLCBhbmRcbiAgICogYW55IHVuYmFsYW5jZWQgdHJhaWxpbmcgYClgIChtb3JlIGNsb3NpbmcgdGhhbiBvcGVuaW5nIHBhcmVudGhlc2VzIGluIHRoZSBsaW5rKS5cbiAgICovXG4gIHByaXZhdGUgdHJpbUF1dG9saW5rVHJhaWxpbmcobGluazogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgZW5kID0gbGluay5sZW5ndGg7XG4gICAgbGV0IGNoYW5nZWQgPSB0cnVlO1xuICAgIHdoaWxlIChjaGFuZ2VkICYmIGVuZCA+IDApIHtcbiAgICAgIGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGMgPSBsaW5rW2VuZCAtIDFdO1xuICAgICAgaWYgKFwiPyEuLDoqX35cIi5pbmRleE9mKGMpID49IDApIHtcbiAgICAgICAgZW5kLS07XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChjID09PSBcIilcIikge1xuICAgICAgICBsZXQgb3BlbiA9IDA7XG4gICAgICAgIGxldCBjbG9zZSA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgICBpZiAobGlua1tpXSA9PT0gXCIoXCIpIG9wZW4rKztcbiAgICAgICAgICBlbHNlIGlmIChsaW5rW2ldID09PSBcIilcIikgY2xvc2UrKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2xvc2UgPiBvcGVuKSB7XG4gICAgICAgICAgZW5kLS07XG4gICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxpbmsuc3Vic3RyKDAsIGVuZCk7XG4gIH1cblxuICBwdWJsaWMgcGFyc2VMaW5rT3JJbWFnZShvcmlnaW5hbFN0cmluZzogc3RyaW5nLCBpc0ltYWdlOiBib29sZWFuKToge291dHB1dDogc3RyaW5nLCBjaGFyQ291bnQ6IG51bWJlcn0gfCBmYWxzZSB7XG4gICAgLy8gU2tpcCB0aGUgb3BlbmluZyBicmFja2V0XG4gICAgbGV0IHRleHRPZmZzZXQgPSBpc0ltYWdlID8gMiA6IDE7XG4gICAgbGV0IG9wZW5lciA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cigwLCB0ZXh0T2Zmc2V0KTtcbiAgICBsZXQgdHlwZSA9IGlzSW1hZ2UgPyBcIlRNSW1hZ2VcIiA6IFwiVE1MaW5rXCI7XG4gICAgbGV0IGN1cnJlbnRPZmZzZXQgPSB0ZXh0T2Zmc2V0O1xuXG4gICAgbGV0IGJyYWNrZXRMZXZlbCA9IDE7XG4gICAgbGV0IGxpbmtUZXh0OiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBsaW5rUmVmOiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlO1xuICAgIGxldCBsaW5rTGFiZWw6IHN0cmluZ1tdID0gW107XG4gICAgbGV0IGxpbmtEZXRhaWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgdGV4dE91dGVyOiB3aGlsZSAoXG4gICAgICBjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoICYmXG4gICAgICBsaW5rVGV4dCA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG5cbiAgICAgIC8vIENhcHR1cmUgYW55IGVzY2FwZXMgYW5kIGNvZGUgYmxvY2tzIGF0IGN1cnJlbnQgcG9zaXRpb25cbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBpbWFnZVxuICAgICAgaWYgKHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuaW1hZ2VPcGVuLnJlZ2V4cCkpIHtcbiAgICAgICAgYnJhY2tldExldmVsKys7XG4gICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gMjtcbiAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbGlua1xuICAgICAgaWYgKHN0cmluZy5tYXRjaCh0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua09wZW4ucmVnZXhwKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwrKztcbiAgICAgICAgaWYgKCFpc0ltYWdlKSB7XG4gICAgICAgICAgaWYgKHRoaXMucGFyc2VMaW5rT3JJbWFnZShzdHJpbmcsIGZhbHNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IDE7XG4gICAgICAgIGNvbnRpbnVlIHRleHRPdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGNsb3NpbmcgYnJhY2tldFxuICAgICAgaWYgKHN0cmluZy5tYXRjaChlZGl0b3JSZWdFeHAubGlua0Nsb3NpbmdCcmFja2V0KSkge1xuICAgICAgICBicmFja2V0TGV2ZWwtLTtcbiAgICAgICAgaWYgKGJyYWNrZXRMZXZlbCA9PT0gMCkge1xuICAgICAgICAgIGxpbmtUZXh0ID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKHRleHRPZmZzZXQsIGN1cnJlbnRPZmZzZXQgLSB0ZXh0T2Zmc2V0KTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIE5vdGhpbmcgbWF0Y2hlcywgcHJvY2VlZCB0byBuZXh0IGNoYXJcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICB9XG5cbiAgICAvLyBEaWQgd2UgZmluZCBhIGxpbmsgdGV4dD9cbiAgICBpZiAobGlua1RleHQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBDaGVjayB3aGF0IHR5cGUgb2YgbGluayB0aGlzIGlzXG4gICAgbGV0IG5leHRDaGFyID0gY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCA/IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0LCAxKSA6IFwiXCI7XG5cbiAgICAvLyBSRUZFUkVOQ0UgTElOS1NcbiAgICBpZiAobmV4dENoYXIgPT09IFwiW1wiKSB7XG4gICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBsaW5rTGFiZWwucHVzaChjYXBbMV0sIGNhcFsyXSwgY2FwWzNdKTtcbiAgICAgICAgaWYgKGNhcFt0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLmxhYmVsUGxhY2Vob2xkZXIhXSkge1xuICAgICAgICAgIGxpbmtSZWYgPSBjYXBbdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5sYWJlbFBsYWNlaG9sZGVyIV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dENoYXIgIT09IFwiKFwiKSB7XG4gICAgICAvLyBTaG9ydGN1dCByZWYgbGlua1xuICAgICAgbGlua1JlZiA9IGxpbmtUZXh0LnRyaW0oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSU5MSU5FIExJTktTXG4gICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICBsZXQgcGFyZW50aGVzaXNMZXZlbCA9IDE7XG5cbiAgICAgIGlubGluZU91dGVyOiB3aGlsZSAoY3VycmVudE9mZnNldCA8IG9yaWdpbmFsU3RyaW5nLmxlbmd0aCAmJiBwYXJlbnRoZXNpc0xldmVsID4gMCkge1xuICAgICAgICBsZXQgc3RyaW5nID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQpO1xuXG4gICAgICAgIC8vIFByb2Nlc3Mgd2hpdGVzcGFjZVxuICAgICAgICBsZXQgY2FwID0gZWRpdG9yUmVnRXhwLmxlYWRpbmdXaGl0ZXNwYWNlUnVuLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1swXS5tYXRjaChlZGl0b3JSZWdFeHAuY29udGFpbnNPcGVuQW5nbGUpKSB7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s2XSA9IGxpbmtEZXRhaWxzWzZdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBiYWNrc2xhc2ggZXNjYXBlc1xuICAgICAgICBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZXNjYXBlLnJlZ2V4cC5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG9wZW5pbmcgYW5nbGUgYnJhY2tldFxuICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoIDwgMiAmJiBzdHJpbmcubWF0Y2goZWRpdG9yUmVnRXhwLm9wZW5pbmdBbmdsZSkpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSAwKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzWzBdID0gbGlua0RldGFpbHNbMF0uY29uY2F0KFwiPFwiKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGNsb3NpbmcgYW5nbGUgYnJhY2tldFxuICAgICAgICBpZiAoKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDIpICYmIHN0cmluZy5tYXRjaChlZGl0b3JSZWdFeHAuY2xvc2luZ0FuZ2xlKSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDEpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIj5cIik7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBub24tcGFyZW50aGVzaXMgZGVsaW1pdGVyIGZvciB0aXRsZVxuICAgICAgICBjYXAgPSBlZGl0b3JSZWdFeHAudGl0bGVRdW90ZS5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXAgJiYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMCB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDEgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA0KSkge1xuICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA0KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FwICYmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUgfHwgbGlua0RldGFpbHMubGVuZ3RoID09PSA2KSAmJiBsaW5rRGV0YWlsc1s0XSA9PT0gY2FwWzBdKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBvcGVuaW5nIHBhcmVudGhlc2lzXG4gICAgICAgIGlmIChzdHJpbmcubWF0Y2goZWRpdG9yUmVnRXhwLm9wZW5pbmdQYXJlbikpIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChcIihcIik7XG4gICAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goZWRpdG9yUmVnRXhwLmVuZHNXaXRoT3BlbkFuZ2xlKSkgcGFyZW50aGVzaXNMZXZlbCsrO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIihcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHNbNF0gPT09IFwiKFwiKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KFwiKFwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgY2xvc2luZyBwYXJlbnRoZXNpc1xuICAgICAgICBpZiAoc3RyaW5nLm1hdGNoKGVkaXRvclJlZ0V4cC5jbG9zaW5nUGFyZW4pKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgMikgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGlmICghbGlua0RldGFpbHNbMF0ubWF0Y2goZWRpdG9yUmVnRXhwLmVuZHNXaXRoT3BlbkFuZ2xlKSkgcGFyZW50aGVzaXNMZXZlbC0tO1xuICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KFwiKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1s0XSA9PT0gXCIoXCIpIHtcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIilcIik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiKVwiKTtcbiAgICAgICAgICAgICAgZWxzZSBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChcIilcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudGhlc2lzTGV2ZWwtLTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA9PT0gMCkge1xuICAgICAgICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDcpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQW55IG9sZCBjaGFyYWN0ZXJcbiAgICAgICAgY2FwID0gZWRpdG9yUmVnRXhwLmFueUNoYXIuZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1s1XSA9IGxpbmtEZXRhaWxzWzVdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IFwiSW5maW5pdGUgbG9vcFwiO1xuICAgICAgfVxuICAgICAgaWYgKHBhcmVudGhlc2lzTGV2ZWwgPiAwKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGxpbmtSZWYgIT09IGZhbHNlKSB7XG4gICAgICAvLyBSZWZlcmVuY2UgbGluazsgY2hlY2sgdGhhdCBsaW5rUmVmIGlzIHZhbGlkXG4gICAgICBsZXQgdmFsaWQgPSBmYWxzZTtcbiAgICAgIGZvciAobGV0IGxhYmVsIG9mIHRoaXMubGlua0xhYmVscykge1xuICAgICAgICBpZiAobGFiZWwgPT09IGxpbmtSZWYpIHtcbiAgICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGxldCBsYWJlbENsYXNzID0gdmFsaWQgPyBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX1ZhbGlkXCIgOiBcIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0ludmFsaWRcIjtcbiAgICAgIGxldCBvdXRwdXQgPSBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke29wZW5lcn08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9ICR7XG4gICAgICAgIGxpbmtMYWJlbC5sZW5ndGggPCAzIHx8ICFsaW5rTGFiZWxbMV0gPyBsYWJlbENsYXNzIDogXCJcIlxuICAgICAgfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKGxpbmtUZXh0KX08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj5dPC9zcGFuPmA7XG5cbiAgICAgIGlmIChsaW5rTGFiZWwubGVuZ3RoID49IDMpIHtcbiAgICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtMYWJlbFswXX08L3NwYW4+YCxcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCIke2xhYmVsQ2xhc3N9XCI+JHtsaW5rTGFiZWxbMV19PC9zcGFuPmAsXG4gICAgICAgICAgYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtsaW5rTGFiZWxbMl19PC9zcGFuPmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgICBjaGFyQ291bnQ6IGN1cnJlbnRPZmZzZXQsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobGlua0RldGFpbHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSW5saW5lIGxpbmtcbiAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCA3KSB7XG4gICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICB9XG5cbiAgICAgIC8vIEV2ZXJ5IGxpdGVyYWwgbWFyayBmcmFnbWVudCBpcyBIVE1MLWVzY2FwZWQ6IGxpbmtEZXRhaWxzWzBdL1syXSBob2xkIHRoZSBhbmdsZSBicmFja2V0cyBvZlxuICAgICAgLy8gYW4gYDwuLi4+YCBkZXN0aW5hdGlvbiwgc28gbGVhdmluZyB0aGVtIHJhdyB3b3VsZCBpbmplY3QgYSBzdHJheSBgPGAvYD5gIGludG8gdGhlIG91dHB1dCDigJRcbiAgICAgIC8vIHdoaWNoIHNwbGl0SW5saW5lSFRNTEJ5TGluZSB0aGVuIG1pc3Rha2VzIGZvciBhbiBIVE1MIHRhZy5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG91dHB1dDogYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtvcGVuZXJ9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVwiPiR7dGhpcy5wcm9jZXNzSW5saW5lU3R5bGVzKFxuICAgICAgICAgIGxpbmtUZXh0XG4gICAgICAgICl9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+XSgke1xuICAgICAgICAgIGh0bWxlc2NhcGUobGlua0RldGFpbHNbMF0pXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9RGVzdGluYXRpb25cIj4ke1xuICAgICAgICAgIGh0bWxlc2NhcGUobGlua0RldGFpbHNbMV0pXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2h0bWxlc2NhcGUobGlua0RldGFpbHNbMl0pfSR7XG4gICAgICAgICAgaHRtbGVzY2FwZShsaW5rRGV0YWlsc1szXSlcbiAgICAgICAgfSR7aHRtbGVzY2FwZShsaW5rRGV0YWlsc1s0XSl9PC9zcGFuPjxzcGFuIGNsYXNzPVwiJHt0eXBlfVRpdGxlXCI+JHtcbiAgICAgICAgICBodG1sZXNjYXBlKGxpbmtEZXRhaWxzWzVdKVxuICAgICAgICB9PC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya18ke3R5cGV9XCI+JHtodG1sZXNjYXBlKGxpbmtEZXRhaWxzWzZdKX0pPC9zcGFuPmAsXG4gICAgICAgIGNoYXJDb3VudDogY3VycmVudE9mZnNldCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlQ29tbW9uQW5jZXN0b3Iobm9kZTE6IE5vZGUgfCBudWxsLCBub2RlMjogTm9kZSB8IG51bGwpOiBOb2RlIHwgbnVsbCB7XG4gICAgaWYgKCFub2RlMSB8fCAhbm9kZTIpIHJldHVybiBudWxsO1xuICAgIGlmIChub2RlMSA9PT0gbm9kZTIpIHJldHVybiBub2RlMTtcbiAgICBjb25zdCBhbmNlc3RyeSA9IChub2RlOiBOb2RlKSA9PiB7XG4gICAgICBsZXQgYW5jZXN0cnkgPSBbXTtcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGFuY2VzdHJ5LnVuc2hpZnQobm9kZSk7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFuY2VzdHJ5O1xuICAgIH07XG5cbiAgICBjb25zdCBhbmNlc3RyeTEgPSBhbmNlc3RyeShub2RlMSk7XG4gICAgY29uc3QgYW5jZXN0cnkyID0gYW5jZXN0cnkobm9kZTIpO1xuXG4gICAgaWYgKGFuY2VzdHJ5MVswXSAhPT0gYW5jZXN0cnkyWzBdKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBhbmNlc3RyeTFbaV0gPT09IGFuY2VzdHJ5MltpXTsgaSsrKTtcbiAgICByZXR1cm4gYW5jZXN0cnkxW2kgLSAxXTtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCwgY2xhc3NOYW1lOiBzdHJpbmcpOiBOb2RlIHwgbnVsbCB7XG4gICAgbGV0IG5vZGUgPSBudWxsO1xuICAgIGlmICghZm9jdXMpIHJldHVybiBudWxsO1xuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gc2VsLmZvY3VzTm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvY3VzLnJvdyAhPT0gYW5jaG9yLnJvdykgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICBpZiAoIXNlbCkgcmV0dXJuIG51bGw7XG4gICAgICBub2RlID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIH1cbiAgICBpZiAoIW5vZGUpIHJldHVybiBudWxsO1xuICAgIHdoaWxlIChub2RlICE9PSB0aGlzLmUpIHtcbiAgICAgIGlmICgobm9kZSBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0ICYmIChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkgcmV0dXJuIG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tbWFuZFN0YXRlKGZvY3VzOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbD4ge1xuICAgIGxldCBjb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiA9IHt9O1xuICAgIGlmICghZm9jdXMpIGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb3IgKGxldCBjbWQgaW4gY29tbWFuZHMpIHtcbiAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgICB9XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuXG4gICAgbGV0IHN0YXJ0OiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fCAoYW5jaG9yLnJvdyA9PT0gZm9jdXMucm93ICYmIGFuY2hvci5jb2wgPCBmb2N1cy5jb2wpKSB7XG4gICAgICBzdGFydCA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGFydCA9IGZvY3VzO1xuICAgICAgZW5kID0gYW5jaG9yO1xuICAgIH1cbiAgICBpZiAoZW5kLnJvdyA+IHN0YXJ0LnJvdyAmJiBlbmQuY29sID09PSAwKSB7XG4gICAgICBlbmQucm93LS07XG4gICAgICBlbmQuY29sID0gdGhpcy5saW5lc1tlbmQucm93XS5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgY21kIGluIGNvbW1hbmRzKSB7XG4gICAgICBpZiAoY29tbWFuZHNbY21kXS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMgfHwgZm9jdXMucm93ICE9PSBhbmNob3IhLnJvdyB8fCAhdGhpcy5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPVxuICAgICAgICAgICAgISF0aGlzLmNvbXB1dGVFbmNsb3NpbmdNYXJrdXBOb2RlKGZvY3VzLCBhbmNob3IsIGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lKSB8fFxuICAgICAgICAgICAgKGZvY3VzLmNvbCA9PT0gYW5jaG9yIS5jb2wgJiZcbiAgICAgICAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKDAsIGZvY3VzLmNvbCkubWF0Y2goY29tbWFuZHNbY21kXS51bnNldC5wcmVQYXR0ZXJuKSAmJlxuICAgICAgICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoZm9jdXMuY29sKS5tYXRjaChjb21tYW5kc1tjbWRdLnVuc2V0LnBvc3RQYXR0ZXJuKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjb21tYW5kc1tjbWRdLnR5cGUgPT09IFwibGluZVwiKSB7XG4gICAgICAgIGlmICghZm9jdXMpIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHN0YXRlOiBib29sZWFuIHwgbnVsbCA9IHRoaXMubGluZVR5cGVzW3N0YXJ0LnJvd10gPT09IGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lO1xuICAgICAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgICAgICBpZiAoKHRoaXMubGluZVR5cGVzW2xpbmVdID09PSBjb21tYW5kc1tjbWRdLmNsYXNzTmFtZSkgIT09IHN0YXRlKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRTdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBpZiAoY29tbWFuZHNbY29tbWFuZF0udHlwZSA9PT0gXCJpbmxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFhbmNob3IpIHJldHVybjtcbiAgICAgIGlmIChhbmNob3Iucm93ICE9PSBmb2N1cyEucm93KSByZXR1cm47XG4gICAgICBpZiAoIXRoaXMuaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpKSByZXR1cm47XG4gICAgICBsZXQgbWFya3VwTm9kZSA9IHRoaXMuY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXMhLCBhbmNob3IsIGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSk7XG4gICAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG5cbiAgICAgIGlmIChtYXJrdXBOb2RlKSB7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzIS5yb3ddID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4obWFya3VwTm9kZSwgMCkhO1xuICAgICAgICBjb25zdCBsZW4gPSBtYXJrdXBOb2RlLnRleHRDb250ZW50IS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cigwLCBzdGFydENvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgbWlkID0gdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoc3RhcnRDb2wsIGxlbik7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoc3RhcnRDb2wgKyBsZW4pXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4sIFwiXCIpO1xuICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddID0gbGVmdC5jb25jYXQobWlkLCByaWdodCk7XG4gICAgICAgIGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgKyBsZW47XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyEsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgZm9jdXMhLmNvbCA9PT0gYW5jaG9yLmNvbCAmJlxuICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMhLnJvd10uc3Vic3RyKDAsIGZvY3VzIS5jb2wpLm1hdGNoKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4pICYmXG4gICAgICAgICEhdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoZm9jdXMhLmNvbCkubWF0Y2goY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMhLnJvd10gPSB0cnVlO1xuICAgICAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoMCwgZm9jdXMhLmNvbClcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wcmVQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihmb2N1cyEuY29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBvc3RQYXR0ZXJuLCBcIlwiKTtcbiAgICAgICAgdGhpcy5saW5lc1tmb2N1cyEucm93XSA9IGxlZnQuY29uY2F0KHJpZ2h0KTtcbiAgICAgICAgZm9jdXMhLmNvbCA9IGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzISwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgeyBzdGFydENvbCwgZW5kQ29sIH0gPVxuICAgICAgICAgIGZvY3VzIS5jb2wgPCBhbmNob3IuY29sXG4gICAgICAgICAgICA/IHsgc3RhcnRDb2w6IGZvY3VzIS5jb2wsIGVuZENvbDogYW5jaG9yLmNvbCB9XG4gICAgICAgICAgICA6IHsgc3RhcnRDb2w6IGFuY2hvci5jb2wsIGVuZENvbDogZm9jdXMhLmNvbCB9O1xuXG4gICAgICAgIGxldCBtYXRjaCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKHN0YXJ0Q29sLCBlbmRDb2wgLSBzdGFydENvbClcbiAgICAgICAgICAubWF0Y2goZWRpdG9yUmVnRXhwLnN1cnJvdW5kaW5nV2hpdGVzcGFjZSk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgIHN0YXJ0Q29sICs9IG1hdGNoLmdyb3VwcyEubGVhZGluZy5sZW5ndGg7XG4gICAgICAgICAgZW5kQ29sIC09IG1hdGNoLmdyb3VwcyEudHJhaWxpbmcubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9jdXMhLmNvbCA9IHN0YXJ0Q29sO1xuICAgICAgICBhbmNob3IuY29sID0gZW5kQ29sO1xuXG4gICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbihjb21tYW5kc1tjb21tYW5kXS5zZXQucHJlLCBjb21tYW5kc1tjb21tYW5kXS5zZXQucG9zdCwgZm9jdXMsIGFuY2hvcik7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29tbWFuZHNbY29tbWFuZF0udHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICAgIGxldCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSBmb2N1cztcbiAgICAgIGlmICghZm9jdXMpIHJldHVybjtcbiAgICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICAgIGxldCBzdGFydCA9IGFuY2hvciEucm93ID4gZm9jdXMhLnJvdyA/IGZvY3VzISA6IGFuY2hvciE7XG4gICAgICBsZXQgZW5kID0gYW5jaG9yIS5yb3cgPiBmb2N1cyEucm93ID8gYW5jaG9yISA6IGZvY3VzITtcbiAgICAgIGlmIChlbmQucm93ID4gc3RhcnQucm93ICYmIGVuZC5jb2wgPT09IDApIHtcbiAgICAgICAgZW5kLnJvdy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBsaW5lID0gc3RhcnQucm93OyBsaW5lIDw9IGVuZC5yb3c7IGxpbmUrKykge1xuICAgICAgICBpZiAoc3RhdGUgJiYgdGhpcy5saW5lVHlwZXNbbGluZV0gIT09IGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSB0aGlzLmxpbmVzW2xpbmVdLnJlcGxhY2UoXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS5zZXQucGF0dGVybixcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5yZXBsYWNlbWVudC5yZXBsYWNlKFwiJCNcIiwgKGxpbmUgLSBzdGFydC5yb3cgKyAxKS50b1N0cmluZygpKVxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3RhdGUgJiYgdGhpcy5saW5lVHlwZXNbbGluZV0gPT09IGNvbW1hbmRzW2NvbW1hbmRdLmNsYXNzTmFtZSkge1xuICAgICAgICAgIHRoaXMubGluZXNbbGluZV0gPSB0aGlzLmxpbmVzW2xpbmVdLnJlcGxhY2UoXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS51bnNldC5wYXR0ZXJuLFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0udW5zZXQucmVwbGFjZW1lbnRcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvbihcbiAgICAgICAgeyByb3c6IGVuZC5yb3csIGNvbDogdGhpcy5saW5lc1tlbmQucm93XS5sZW5ndGggfSxcbiAgICAgICAgeyByb3c6IHN0YXJ0LnJvdywgY29sOiAwIH1cbiAgICAgICk7XG4gICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbGlzdC1pdGVtIG1hcmtlciBwcmVmaXggKGUuZy4gYC0gYCwgYCogYCwgYDEuIGApIG9mIGBsaW5lYCwgb3IgbnVsbCBpZiB0aGUgbGluZVxuICAgKiBpc24ndCBhIGJ1bGxldGVkIG9yIG9yZGVyZWQgbGlzdCBpdGVtLlxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0SXRlbU1hcmtlcihsaW5lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCB1bCA9IGxpbmVHcmFtbWFyLlRNVUwucmVnZXhwLmV4ZWMobGluZSk7XG4gICAgaWYgKHVsKSByZXR1cm4gdWxbMV07XG4gICAgY29uc3Qgb2wgPSBsaW5lR3JhbW1hci5UTU9MLnJlZ2V4cC5leGVjKGxpbmUpO1xuICAgIGlmIChvbCkgcmV0dXJuIG9sWzFdO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqIFRydWUgd2hlbiBsaW5lIGByb3dgIGlzIGEgbGlzdCBpdGVtIHdob3NlIGNvbnRlbnQgYmVnaW5zIHdpdGggYSB0YXNrLWxpc3QgY2hlY2tib3guICovXG4gIHB1YmxpYyBpc1Rhc2tMaXN0SXRlbShyb3c6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmIChyb3cgPCAwIHx8IHJvdyA+PSB0aGlzLmxpbmVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmxpbmVUeXBlc1tyb3ddO1xuICAgIGlmICh0eXBlICE9PSBcIlRNVUxcIiAmJiB0eXBlICE9PSBcIlRNT0xcIikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IG1hcmtlciA9IHRoaXMubGlzdEl0ZW1NYXJrZXIodGhpcy5saW5lc1tyb3ddKTtcbiAgICBpZiAobWFya2VyID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGVkaXRvclJlZ0V4cC50YXNrTGlzdEl0ZW0udGVzdCh0aGlzLmxpbmVzW3Jvd10uc3Vic3RyKG1hcmtlci5sZW5ndGgpKTtcbiAgfVxuXG4gIC8qKiBBZGRzIGFuIHVuY2hlY2tlZCBgWyBdYCBjaGVja2JveCB0byBhIGxpbmUsIG1ha2luZyBpdCBhIGJ1bGxldGVkIGxpc3QgaXRlbSBpZiBpdCB3YXNuJ3Qgb25lLiAqL1xuICBwcml2YXRlIGFkZFRhc2tDaGVja2JveChsaW5lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hcmtlciA9IHRoaXMubGlzdEl0ZW1NYXJrZXIobGluZSk7XG4gICAgaWYgKG1hcmtlciAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGVudCA9IGxpbmUuc3Vic3RyKG1hcmtlci5sZW5ndGgpO1xuICAgICAgaWYgKGVkaXRvclJlZ0V4cC50YXNrTGlzdEl0ZW0udGVzdChjb250ZW50KSkgcmV0dXJuIGxpbmU7IC8vIGFscmVhZHkgYSB0YXNrIGl0ZW1cbiAgICAgIHJldHVybiBgJHttYXJrZXJ9WyBdICR7Y29udGVudH1gO1xuICAgIH1cbiAgICAvLyBOb3QgYSBsaXN0IGl0ZW0geWV0OiBzdHJpcCBhbnkgZXhpc3RpbmcgYmxvY2sgbWFya2VyIGFuZCBtYWtlIGl0IGEgYnVsbGV0ZWQgdGFzayBpdGVtLFxuICAgIC8vIG1pcnJvcmluZyBob3cgdGhlIGB1bGAgY29tbWFuZCBub3JtYWxpemVzIGEgbGluZS5cbiAgICByZXR1cm4gbGluZS5yZXBsYWNlKChjb21tYW5kcy51bCBhcyBMaW5lQ29tbWFuZCkuc2V0LnBhdHRlcm4sIFwiLSBbIF0gJDJcIik7XG4gIH1cblxuICAvKiogUmVtb3ZlcyBhIHRhc2stbGlzdCBjaGVja2JveCBmcm9tIGEgbGluZSwgbGVhdmluZyB0aGUgc3Vycm91bmRpbmcgbGlzdCBpdGVtIGludGFjdC4gKi9cbiAgcHJpdmF0ZSByZW1vdmVUYXNrQ2hlY2tib3gobGluZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYXJrZXIgPSB0aGlzLmxpc3RJdGVtTWFya2VyKGxpbmUpO1xuICAgIGlmIChtYXJrZXIgPT09IG51bGwpIHJldHVybiBsaW5lO1xuICAgIGNvbnN0IHRhc2sgPSBlZGl0b3JSZWdFeHAudGFza0xpc3RJdGVtLmV4ZWMobGluZS5zdWJzdHIobWFya2VyLmxlbmd0aCkpO1xuICAgIGlmICghdGFzaykgcmV0dXJuIGxpbmU7XG4gICAgcmV0dXJuIGAke21hcmtlcn0ke3Rhc2tbNV19YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIEdGTSB0YXNrLWxpc3QgY2hlY2tib3hlcyBvbiB0aGUgc2VsZWN0ZWQgbGluZShzKS4gSWYgZXZlcnkgc2VsZWN0ZWQgbGluZSBpcyBhbHJlYWR5IGFcbiAgICogdGFzayBpdGVtLCB0aGVpciBjaGVja2JveGVzIGFyZSByZW1vdmVkIChsZWF2aW5nIHBsYWluIGxpc3QgaXRlbXMpOyBvdGhlcndpc2UgZWFjaCBsaW5lIGdldHMgYW5cbiAgICogdW5jaGVja2VkIGBbIF1gIGNoZWNrYm94IChiZWNvbWluZyBhIGJ1bGxldGVkIGxpc3QgaXRlbSBpZiBpdCB3YXNuJ3QgYSBsaXN0IGl0ZW0geWV0KS4gTWlycm9yc1xuICAgKiBzZXRDb21tYW5kU3RhdGUncyBsaW5lLWVkaXQgZmxvdzogcHVzaGVzIHVuZG8gaGlzdG9yeSwgcmVmb3JtYXRzLCBhbmQgZmlyZXMgYSBgY2hhbmdlYCBldmVudC5cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVUYXNrTGlzdCgpOiB2b2lkIHtcbiAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSBmb2N1cztcbiAgICBpZiAoIWZvY3VzKSByZXR1cm47XG5cbiAgICBsZXQgc3RhcnQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBmb2N1cyEgOiBhbmNob3IhO1xuICAgIGxldCBlbmQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBhbmNob3IhIDogZm9jdXMhO1xuICAgIGlmIChlbmQucm93ID4gc3RhcnQucm93ICYmIGVuZC5jb2wgPT09IDApIHtcbiAgICAgIGVuZC5yb3ctLTtcbiAgICB9XG5cbiAgICBsZXQgYWxsVGFza3MgPSB0cnVlO1xuICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUYXNrTGlzdEl0ZW0obGluZSkpIHtcbiAgICAgICAgYWxsVGFza3MgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcblxuICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gYWxsVGFza3NcbiAgICAgICAgPyB0aGlzLnJlbW92ZVRhc2tDaGVja2JveCh0aGlzLmxpbmVzW2xpbmVdKVxuICAgICAgICA6IHRoaXMuYWRkVGFza0NoZWNrYm94KHRoaXMubGluZXNbbGluZV0pO1xuICAgICAgaWYgKHVwZGF0ZWQgIT09IHRoaXMubGluZXNbbGluZV0pIHtcbiAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHVwZGF0ZWQ7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLnNldFNlbGVjdGlvbihcbiAgICAgIHsgcm93OiBlbmQucm93LCBjb2w6IHRoaXMubGluZXNbZW5kLnJvd10ubGVuZ3RoIH0sXG4gICAgICB7IHJvdzogc3RhcnQucm93LCBjb2w6IDAgfVxuICAgICk7XG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwdWJsaWMgaXNJbmxpbmVGb3JtYXR0aW5nQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgaWYgKCFzZWwgfHwgIXNlbC5mb2N1c05vZGUgfHwgIXNlbC5hbmNob3JOb2RlKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoXG4gICAgICBzZWwuaXNDb2xsYXBzZWQgJiZcbiAgICAgIHNlbC5mb2N1c05vZGUubm9kZVR5cGUgPT09IDMgJiZcbiAgICAgIHNlbC5mb2N1c09mZnNldCA9PT0gc2VsLmZvY3VzTm9kZS5ub2RlVmFsdWUhLmxlbmd0aFxuICAgICkge1xuICAgICAgbGV0IG5vZGU7XG4gICAgICBmb3IgKG5vZGUgPSBzZWwuZm9jdXNOb2RlOyBub2RlICYmIG5vZGUubmV4dFNpYmxpbmcgPT09IG51bGw7IG5vZGUgPSBub2RlLnBhcmVudE5vZGUhKTtcbiAgICAgIGlmIChcbiAgICAgICAgbm9kZSAmJlxuICAgICAgICBub2RlLm5leHRTaWJsaW5nICYmXG4gICAgICAgIChub2RlLm5leHRTaWJsaW5nIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxldCBhbmNlc3RvciA9IHRoaXMuY29tcHV0ZUNvbW1vbkFuY2VzdG9yKHNlbC5mb2N1c05vZGUsIHNlbC5hbmNob3JOb2RlKTtcbiAgICBpZiAoIWFuY2VzdG9yKSByZXR1cm4gZmFsc2U7XG5cbiAgICB3aGlsZSAoYW5jZXN0b3IgJiYgYW5jZXN0b3IgIT09IHRoaXMuZSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdCAmJlxuICAgICAgICAoKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoXCJUTUlubGluZUZvcm1hdHRlZFwiKSB8fFxuICAgICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiVE1CbGFua0xpbmVcIikpXG4gICAgICApXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlITtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQ29tbWFuZFN0YXRlKGNvbW1hbmQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sYXN0Q29tbWFuZFN0YXRlKSB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSB0aGlzLmdldENvbW1hbmRTdGF0ZSgpO1xuICAgIHRoaXMuc2V0Q29tbWFuZFN0YXRlKGNvbW1hbmQsICF0aGlzLmxhc3RDb21tYW5kU3RhdGVbY29tbWFuZF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmaXJlRHJvcChkYXRhVHJhbnNmZXI6IERhdGFUcmFuc2Zlcik6IHZvaWQge1xuICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLmRyb3ApIHtcbiAgICAgIGxpc3RlbmVyKHsgZGF0YVRyYW5zZmVyIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmlyZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuXG4gICAgLy8gU2F2ZSB0aGUgY3VycmVudCBzZWxlY3Rpb24gZm9yIHJlc3RvcmF0aW9uIGxhdGVyXG4gICAgdGhpcy5sYXN0U2VsZWN0aW9uID0ge1xuICAgICAgZm9jdXM6IGZvY3VzLFxuICAgICAgYW5jaG9yOiBhbmNob3JcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbiAmJiB0aGlzLmxpc3RlbmVycy5zZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICBsZXQgY29tbWFuZFN0YXRlID0gdGhpcy5nZXRDb21tYW5kU3RhdGUoZm9jdXMsIGFuY2hvcik7XG4gICAgICBpZiAodGhpcy5sYXN0Q29tbWFuZFN0YXRlKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5sYXN0Q29tbWFuZFN0YXRlLCBjb21tYW5kU3RhdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gT2JqZWN0LmFzc2lnbih7fSwgY29tbWFuZFN0YXRlKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGxpc3RlbmVyIG9mIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbikge1xuICAgICAgICBsaXN0ZW5lcih7XG4gICAgICAgICAgZm9jdXM6IGZvY3VzISxcbiAgICAgICAgICBhbmNob3I6IGFuY2hvciEsXG4gICAgICAgICAgY29tbWFuZFN0YXRlOiB0aGlzLmxhc3RDb21tYW5kU3RhdGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFZGl0b3I7XG4iXSwibmFtZXMiOlsiZ2xvYmFsIiwidGhpcyIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJzaGFyZWRTdG9yZU1vZHVsZSIsInJlcXVpcmUkJDQiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsInJlcXVpcmUkJDciLCJtYWtlQnVpbHRJbiIsIm1ha2VCdWlsdEluTW9kdWxlIiwib3duS2V5cyIsInJlcXVpcmUkJDgiLCJyZXF1aXJlJCQ5IiwicmVxdWlyZSQkMTAiLCJyZXF1aXJlJCQxMSIsInJlcXVpcmUkJDEyIiwicmVxdWlyZSQkMTMiLCJzdmciLCJibG9ja3F1b3RlIiwiYm9sZCIsImNsZWFyX2Zvcm1hdHRpbmciLCJjb2RlIiwiaDEiLCJoMiIsImhyIiwiaW1hZ2UiLCJpdGFsaWMiLCJsaW5rIiwib2wiLCJyZWRvIiwic3RyaWtldGhyb3VnaCIsInRhc2tsaXN0IiwidWwiLCJ1bmRvIiwiaXNNYWNMaWtlIiwidGVzdCIsIm5hdmlnYXRvciIsInBsYXRmb3JtIiwiRGVmYXVsdENvbW1hbmRzIiwibmFtZSIsImFjdGlvbiIsImlubmVySFRNTCIsInRpdGxlIiwiaG90a2V5IiwiZWRpdG9yIiwidG9nZ2xlVGFza0xpc3QiLCJlbmFibGVkIiwiZm9jdXMiLCJpc1Rhc2tMaXN0SXRlbSIsInJvdyIsImluc2VydExpbmsiLCJpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkIiwid3JhcFNlbGVjdGlvbiIsImluc2VydEltYWdlIiwicGFzdGUiLCJjYW5VbmRvIiwiY2FuUmVkbyIsIkNvbW1hbmRCYXIiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiZSIsImNvbW1hbmRzIiwiYnV0dG9ucyIsInN0YXRlIiwiaG90a2V5cyIsImVsZW1lbnQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiYm9keSIsImNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImhhbmRsZUtleWRvd24iLCJzZXRFZGl0b3IiLCJwYXJlbnRFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImNvbW1hbmQiLCJlbCIsImFwcGVuZENoaWxkIiwiY29tbWFuZE5hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJrZXlzIiwic3BsaXQiLCJtb2RpZmllcnMiLCJtb2RpZmllcmV4cGxhbmF0aW9uIiwiaSIsImxlbmd0aCIsInB1c2giLCJsYXN0S2V5IiwibWF0Y2giLCJjb25jYXQiLCJ0b1VwcGVyQ2FzZSIsImtleSIsInRvTG93ZXJDYXNlIiwiam9pbiIsImhhbmRsZUNsaWNrIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImVkaXRvckhhZEZvY3VzIiwiY29udGFpbnMiLCJhY3RpdmVFbGVtZW50IiwicmVzdG9yZUxhc3RTZWxlY3Rpb24iLCJzZXRDb21tYW5kU3RhdGUiLCJoYW5kbGVTZWxlY3Rpb24iLCJjb21tYW5kU3RhdGUiLCJ1bmRlZmluZWQiLCJhbmNob3IiLCJvdXRlciIsIm1vZGlmaWVyIiwicmVxdWlyZSQkMTQiLCJyZXF1aXJlJCQxNSIsInJlcXVpcmUkJDE2IiwicmVxdWlyZSQkMTciLCJyZXF1aXJlJCQxOCIsInJlcXVpcmUkJDE5IiwicmVxdWlyZSQkMjAiLCJyZXF1aXJlJCQyMSIsInJlcGxhY2VtZW50cyIsIkFTQ0lJUHVuY3R1YXRpb24iLCJOb3RUcmlnZ2VyQ2hhciIsIlNjaGVtZSIsIkVtYWlsIiwiSFRNTE9wZW5UYWciLCJIVE1MQ2xvc2VUYWciLCJIVE1MVGFnTmFtZSIsIkhUTUxDb21tZW50IiwiSFRNTFBJIiwiSFRNTERlY2xhcmF0aW9uIiwiSFRNTENEQVRBIiwiSFRNTEF0dHJpYnV0ZSIsIkhUTUxBdHRWYWx1ZSIsIktub3duVGFnIiwicHVuY3R1YXRpb25MZWFkaW5nIiwiUmVnRXhwIiwicHVuY3R1YXRpb25UcmFpbGluZyIsImVkaXRvclJlZ0V4cCIsIm1hY1BsYXRmb3JtIiwibGluZVNwbGl0IiwicmVwbGFjZW1lbnRQbGFjZWhvbGRlciIsImlubGluZUNvbnRlbnRQbGFjZWhvbGRlciIsImlubGluZVJlcGxhY2VtZW50UGxhY2Vob2xkZXIiLCJibGFua0NvbnRlbnQiLCJsZWFkaW5nV2hpdGVzcGFjZSIsInRyYWlsaW5nV2hpdGVzcGFjZSIsImxlYWRpbmdXaGl0ZXNwYWNlUnVuIiwic3Vycm91bmRpbmdXaGl0ZXNwYWNlIiwiX3dyYXBSZWdFeHAiLCJsZWFkaW5nIiwidHJhaWxpbmciLCJ0YXNrTGlzdEl0ZW0iLCJvcmRlcmVkTGlzdE51bWJlciIsImlubGluZVRhZ05hbWUiLCJjaGFuZ2VFdmVudCIsInNlbGVjdGlvbkV2ZW50IiwiZHJvcEV2ZW50IiwiYXV0b2xpbmtQcmVjZWRpbmdDaGFyIiwiZW1waGFzaXNEZWxpbWl0ZXIiLCJzdHJpa2V0aHJvdWdoRGVsaW1pdGVyIiwiYXV0b2xpbmtTY2hlbWUiLCJhdXRvbGlua1d3dyIsImF1dG9saW5rRG9tYWluIiwiYXV0b2xpbmtQYXRoIiwiYXV0b2xpbmtQcm90b2NvbCIsImF1dG9saW5rWG1wcCIsImF1dG9saW5rWG1wcFJlc291cmNlIiwiYXV0b2xpbmtFbWFpbCIsImVtYWlsVHJhaWxpbmdDaGFyIiwiZW1haWxUbGQiLCJsaW5rQ2xvc2luZ0JyYWNrZXQiLCJvcGVuaW5nQW5nbGUiLCJjbG9zaW5nQW5nbGUiLCJ0aXRsZVF1b3RlIiwib3BlbmluZ1BhcmVuIiwiY2xvc2luZ1BhcmVuIiwiZW5kc1dpdGhPcGVuQW5nbGUiLCJjb250YWluc09wZW5BbmdsZSIsImFueUNoYXIiLCJsaW5lR3JhbW1hciIsIlRNSDEiLCJyZWdleHAiLCJyZXBsYWNlbWVudCIsIlRNSDIiLCJUTUgzIiwiVE1INCIsIlRNSDUiLCJUTUg2IiwiVE1CbG9ja3F1b3RlIiwiVE1Db2RlRmVuY2VCYWNrdGlja09wZW4iLCJzZXEiLCJUTUNvZGVGZW5jZVRpbGRlT3BlbiIsIlRNQ29kZUZlbmNlQmFja3RpY2tDbG9zZSIsIlRNQ29kZUZlbmNlVGlsZGVDbG9zZSIsIlRNQmxhbmtMaW5lIiwiVE1TZXRleHRIMU1hcmtlciIsIlRNU2V0ZXh0SDJNYXJrZXIiLCJUTUhSIiwiVE1VTCIsIlRNT0wiLCJUTUluZGVudGVkQ29kZSIsIlRNTGlua1JlZmVyZW5jZURlZmluaXRpb24iLCJsYWJlbFBsYWNlaG9sZGVyIiwiaHRtbEJsb2NrR3JhbW1hciIsInN0YXJ0IiwiZW5kIiwicGFyYUludGVycnVwdCIsImlubGluZUdyYW1tYXIiLCJlc2NhcGUiLCJhdXRvbGluayIsImh0bWwiLCJsaW5rT3BlbiIsImltYWdlT3BlbiIsImxpbmtMYWJlbCIsImRlZmF1bHQiLCJyZXBsYWNlbWVudFJlZ2V4cCIsImlubGluZVJ1bGVzIiwicnVsZSIsInJlIiwic291cmNlIiwicmVwbGFjZSIsInN0cmluZyIsImZsYWdzIiwiY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hciIsImN1c3RvbVJ1bGVzIiwiYXJndW1lbnRzIiwibWVyZ2VkIiwiX29iamVjdFNwcmVhZCIsInJ1bGVOYW1lIiwiZW50cmllcyIsInByb2Nlc3NlZFJ1bGUiLCJyZWdleHBTb3VyY2UiLCJodG1sZXNjYXBlIiwidHlwZSIsInNldCIsInByZSIsInBvc3QiLCJ1bnNldCIsInByZVBhdHRlcm4iLCJwb3N0UGF0dGVybiIsInBhdHRlcm4iLCJoMyIsImg0IiwiaDUiLCJoNiIsIkVkaXRvciIsInRleHRhcmVhIiwibGluZXMiLCJsaW5lRWxlbWVudHMiLCJsaW5lVHlwZXMiLCJsaW5lQ2FwdHVyZXMiLCJsaW5lUmVwbGFjZW1lbnRzIiwibGlua0xhYmVscyIsImxpbmVEaXJ0eSIsImxhc3RDb21tYW5kU3RhdGUiLCJjdXN0b21JbmxpbmVHcmFtbWFyIiwibWVyZ2VkSW5saW5lR3JhbW1hciIsImhhc0ZvY3VzIiwibGFzdFNlbGVjdGlvbiIsImxpc3RlbmVycyIsImNoYW5nZSIsInNlbGVjdGlvbiIsImRyb3AiLCJ1bmRvU3RhY2siLCJyZWRvU3RhY2siLCJpc1Jlc3RvcmluZ0hpc3RvcnkiLCJtYXhIaXN0b3J5IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0YWdOYW1lIiwicGFyZW50Tm9kZSIsInN0eWxlIiwiZGlzcGxheSIsInBsYWNlaG9sZGVyIiwiX2EiLCJjcmVhdGVFZGl0b3JFbGVtZW50Iiwic2V0Q29udGVudCIsImNvbnRlbnQiLCJ2YWx1ZSIsImhhbmRsZVVuZG9SZWRvS2V5IiwicHVzaEhpc3RvcnkiLCJwdXNoQ3VycmVudFN0YXRlIiwiZ2V0Q29udGVudCIsImdldFNlbGVjdGlvbiIsInNoaWZ0IiwiY3VycmVudCIsInBvcCIsInByZXYiLCJzZXRTZWxlY3Rpb24iLCJuZXh0IiwiaXNNYWMiLCJjdHJsIiwibWV0YUtleSIsImN0cmxLZXkiLCJhbHRLZXkiLCJzaGlmdEtleSIsImNsYXNzTGlzdCIsImFkZCIsImNvbnRlbnRFZGl0YWJsZSIsIndoaXRlU3BhY2UiLCJ3ZWJraXRVc2VyTW9kaWZ5Iiwic2V0QXR0cmlidXRlIiwibmV4dFNpYmxpbmciLCJpbnNlcnRCZWZvcmUiLCJoYW5kbGVJbnB1dEV2ZW50IiwiaGFuZGxlQmVmb3JlSW5wdXRFdmVudCIsImhhbmRsZVNlbGVjdGlvbkNoYW5nZUV2ZW50IiwiaGFuZGxlUGFzdGUiLCJoYW5kbGVEcm9wIiwiY2hpbGROb2RlcyIsImZpcnN0Q2hpbGQiLCJyZW1vdmVDaGlsZCIsImxpbmVOdW0iLCJsZSIsIkFycmF5IiwidXBkYXRlRm9ybWF0dGluZyIsInVwZGF0ZVBsYWNlaG9sZGVyIiwiZmlyZUNoYW5nZSIsInJlbW92ZSIsInVwZGF0ZUxpbmVUeXBlcyIsInVwZGF0ZUxpbmtMYWJlbHMiLCJhcHBseUxpbmVUeXBlcyIsImwiLCJjYXB0dXJlIiwic3RyIiwicDEiLCJwMiIsInBhcnNlSW50IiwicHJvY2Vzc0lubGluZVN0eWxlcyIsImlzSW5saW5lR3JvdXBMZWFkZXIiLCJsZWFkZXJUeXBlIiwiaXNJbmxpbmVDb250aW51YXRpb24iLCJhcHBseUlubGluZUdyb3VwIiwiYXBwbHlMaW5lIiwidCIsImlzQmxhbmtCbG9ja3F1b3RlQ29udGVudCIsImNhcCIsImNvbnRlbnRIVE1MIiwicmVtb3ZlQXR0cmlidXRlIiwiZGF0YXNldCIsIm1sU2lnIiwidG9TdHJpbmciLCJjb250ZW50cyIsInNpZ1NvdXJjZSIsImlkeCIsImlubGluZUNvbnRlbnRJbmRleCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzaWciLCJoYXNoU3RyaW5nIiwibmVlZHNSZW5kZXIiLCJmcmFnbWVudHMiLCJzcGxpdElubGluZUhUTUxCeUxpbmUiLCJmcmFnIiwicmVwbGFjZVdpdGhJbmxpbmUiLCJtIiwiZXhlYyIsImlubGluZUZyYWdtZW50Iiwib3BlblRhZ3MiLCJjaCIsImNsb3NlIiwiaW5kZXhPZiIsInN1YnN0ciIsInRhZyIsInN1YnN0cmluZyIsIm9wZW5UYWciLCJzIiwiaCIsImNoYXJDb2RlQXQiLCJjb2RlQmxvY2tUeXBlIiwiY29kZUJsb2NrU2VxTGVuZ3RoIiwiaHRtbEJsb2NrIiwibGluZVR5cGUiLCJsaW5lQ2FwdHVyZSIsImxpbmVSZXBsYWNlbWVudCIsImdyb3VwcyIsImh0bWxCbG9ja1R5cGUiLCJoZWFkaW5nTGluZSIsImhlYWRpbmdMaW5lVHlwZSIsInRhc2siLCJjaGVja2VkIiwiYnVsbGV0Q2xhc3MiLCJib3hDbGFzcyIsImdldEFuY2hvciIsIndpbmRvdyIsInN0YXJ0Tm9kZSIsImFuY2hvck5vZGUiLCJmb2N1c05vZGUiLCJvZmZzZXQiLCJhbmNob3JPZmZzZXQiLCJmb2N1c09mZnNldCIsImNvbCIsImNvbXB1dGVDb2x1bW4iLCJub2RlIiwicHJldmlvdXNTaWJsaW5nIiwiY3VycmVudExpbmVOdW1EYXRhIiwicHJldmlvdXNMaW5lTnVtRGF0YSIsIl9iIiwiY3VycmVudExpbmVOdW0iLCJwcmV2aW91c0xpbmVOdW0iLCJjb21wdXRlTm9kZUFuZE9mZnNldCIsIndpbmRvd1NlbGVjdGlvbiIsInNldEJhc2VBbmRFeHRlbnQiLCJ0ZXh0IiwiYmVnaW5uaW5nIiwiaW5zZXJ0ZWRMaW5lcyIsImxpbmVCZWZvcmUiLCJsaW5lRW5kIiwiZW5kQ29sUG9zIiwic3BsaWNlTGluZXMiLCJzdGFydENvbCIsImVuZENvbCIsImxlZnQiLCJtaWQiLCJyaWdodCIsImxpc3RlbmVyIiwibGluZXNEaXJ0eSIsImJlZm9yZUlucHV0RXZlbnQiLCJpbnB1dFR5cGUiLCJpc0JhY2tzcGFjZSIsImNsZWFyRGlydHlGbGFnIiwicHJldkxpbmVMZW4iLCJjdXJyZW50TGluZUxlbiIsImNvbnRpbnVhYmxlVHlwZSIsImxpbmVCZWZvcmVCcmVhayIsImxpbmVBZnRlckJyZWFrIiwicmVzdWx0Iiwic2Nyb2xsSW50b1ZpZXciLCJibG9jayIsImlubGluZSIsImlucHV0RXZlbnQiLCJmaXhOb2RlSGllcmFyY2h5IiwidXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZyIsIl9lIiwiZmlyZVNlbGVjdGlvbiIsImNsaXBib2FyZERhdGEiLCJnZXREYXRhIiwiZmlyZURyb3AiLCJkYXRhVHJhbnNmZXIiLCJ0YXJnZXQiLCJib3giLCJjbG9zZXN0IiwibGluZUVsIiwiaXNOYU4iLCJjaGFyQXQiLCJvcmlnaW5hbFN0cmluZyIsInByb2Nlc3NlZCIsInN0YWNrIiwicHJlY2VkaW5nQ2hhciIsInBhcnNlQXV0b2xpbmtFeHRlbnNpb24iLCJvdXRwdXQiLCJjaGFyQ291bnQiLCJwb3RlbnRpYWxMaW5rIiwicG90ZW50aWFsSW1hZ2UiLCJwYXJzZUxpbmtPckltYWdlIiwiZGVsaW1Db3VudCIsImRlbGltU3RyaW5nIiwiY3VycmVudERlbGltaXRlciIsInByZWNlZGluZyIsImZvbGxvd2luZyIsInB1bmN0dWF0aW9uRm9sbG93cyIsInB1bmN0dWF0aW9uUHJlY2VkZXMiLCJ3aGl0ZXNwYWNlRm9sbG93cyIsIndoaXRlc3BhY2VQcmVjZWRlcyIsImNhbk9wZW4iLCJjYW5DbG9zZSIsInN0YWNrUG9pbnRlciIsImRlbGltaXRlciIsImVudHJ5IiwiY291bnQiLCJjb25zdW1lZCIsIm5vZGVUeXBlIiwiTm9kZSIsIlRFWFRfTk9ERSIsInRleHRDb250ZW50IiwiYmluZFJpZ2h0IiwiY2hpbGRyZW5Db21wbGV0ZSIsInJ2Iiwibm9kZVZhbHVlIiwidXBkYXRlTGluZUNvbnRlbnRzIiwibGluZURlbHRhIiwiY2hpbGRFbGVtZW50Q291bnQiLCJmaXJzdENoYW5nZWRMaW5lIiwibGFzdENoYW5nZWRMaW5lIiwibGluZXNUb0RlbGV0ZSIsImxpbmVzVG9BZGQiLCJsaW5lIiwiY3QiLCJzdGFydExpbmUiLCJsaW5lc1RvSW5zZXJ0IiwiYWRqdXN0TGluZUVsZW1lbnRzIiwiaW5zZXJ0ZWRCbGFuayIsImluc2VydGVkRGlydHkiLCJzcGxpY2UiLCJvcmlnaW5hbENoaWxkcmVuIiwiZnJvbSIsInJlcGxhY2VDaGlsZCIsImNoaWxkIiwicGFyZW50IiwiX2xlbiIsIm5ld0NoaWxkcmVuIiwiX2tleSIsImZvckVhY2giLCJuZXdDaGlsZCIsIkVMRU1FTlRfTk9ERSIsImRpdldyYXBwZXIiLCJncmFuZENoaWxkcmVuIiwic29tZSIsImdyYW5kQ2hpbGQiLCJtYXRjaEV4dGVuZGVkQXV0b2xpbmsiLCJzY2hlbWVDYXAiLCJpc1d3dyIsInByZWZpeExlbiIsImFmdGVyUHJlZml4IiwiZG9tYWluQ2FwIiwiaXNWYWxpZEF1dG9saW5rRG9tYWluIiwicGF0aENhcCIsInRyaW1tZWQiLCJ0cmltQXV0b2xpbmtUcmFpbGluZyIsInByb3RvQ2FwIiwiZW1haWxDYXAiLCJtYXRjaEF1dG9saW5rRW1haWwiLCJleHRyYSIsInJlc0NhcCIsImVtYWlsIiwiZG9tYWluIiwic2VnbWVudHMiLCJzbGljZSIsInNlZyIsImNoYW5nZWQiLCJjIiwib3BlbiIsImlzSW1hZ2UiLCJ0ZXh0T2Zmc2V0Iiwib3BlbmVyIiwiY3VycmVudE9mZnNldCIsImJyYWNrZXRMZXZlbCIsImxpbmtUZXh0IiwibGlua1JlZiIsImxpbmtEZXRhaWxzIiwidGV4dE91dGVyIiwibmV4dENoYXIiLCJ0cmltIiwicGFyZW50aGVzaXNMZXZlbCIsImlubGluZU91dGVyIiwidmFsaWQiLCJsYWJlbCIsImxhYmVsQ2xhc3MiLCJjb21wdXRlQ29tbW9uQW5jZXN0b3IiLCJub2RlMSIsIm5vZGUyIiwiYW5jZXN0cnkiLCJ1bnNoaWZ0IiwiYW5jZXN0cnkxIiwiYW5jZXN0cnkyIiwiY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUiLCJzZWwiLCJnZXRDb21tYW5kU3RhdGUiLCJjbWQiLCJtYXJrdXBOb2RlIiwibGVuIiwibGlzdEl0ZW1NYXJrZXIiLCJtYXJrZXIiLCJhZGRUYXNrQ2hlY2tib3giLCJyZW1vdmVUYXNrQ2hlY2tib3giLCJhbGxUYXNrcyIsInVwZGF0ZWQiLCJpc0NvbGxhcHNlZCIsImFuY2VzdG9yIiwidG9nZ2xlQ29tbWFuZFN0YXRlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0NBQ0EsQ0FBQSxJQUFJLEtBQUssR0FBRyxVQUFVLEVBQUUsRUFBRTtJQUN4QixPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO0VBQ3JDLENBQUM7O0NBRUQ7Q0FDQSxDQUFBLFlBQWM7Q0FDZDtJQUNFLEtBQUssQ0FBQyxPQUFPLFVBQVUsSUFBSSxRQUFRLElBQUksVUFBVSxDQUFDO0lBQ2xELEtBQUssQ0FBQyxPQUFPLE1BQU0sSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDO0NBQzVDO0lBQ0UsS0FBSyxDQUFDLE9BQU8sSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUM7SUFDdEMsS0FBSyxDQUFDLE9BQU9BLGNBQU0sSUFBSSxRQUFRLElBQUlBLGNBQU0sQ0FBQztJQUMxQyxLQUFLLENBQUMsT0FBT0MsWUFBSSxJQUFJLFFBQVEsSUFBSUEsWUFBSSxDQUFDO0NBQ3hDO0NBQ0EsR0FBRSxDQUFDLFlBQVksRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFBLENBQUUsR0FBRyxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTs7Ozs7Ozs7Ozs7O0NDZC9ELENBQUEsS0FBYyxHQUFHLFVBQVUsSUFBSSxFQUFFO0NBQ2pDLEdBQUUsSUFBSTtDQUNOLEtBQUksT0FBTyxDQUFD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LElBQUksQ0FBQzBPLFlBQVksQ0FBQyxLQUFLLENBQUM7Q0FDcEMsSUFBQSxJQUFJOUssTUFBTSxHQUFHLElBQUksQ0FBQzhLLFlBQVksQ0FBQyxJQUFJLENBQUM7Q0FFcEM7S0FDQSxJQUFJLENBQUN4QixhQUFhLEdBQUc7Q0FDbkJsTixNQUFBQSxLQUFLLEVBQUVBLEtBQUs7Q0FDWjRELE1BQUFBLE1BQU0sRUFBRUE7TUFDVDtDQUVELElBQUEsSUFBSSxJQUFJLENBQUN1SixTQUFTLENBQUNFLFNBQVMsSUFBSSxJQUFJLENBQUNGLFNBQVMsQ0FBQ0UsU0FBUyxDQUFDN0ssTUFBTSxFQUFFO09BQy9ELElBQUlrQixZQUFZLEdBQUcsSUFBSSxDQUFDa2MsZUFBZSxDQUFDNWYsS0FBSyxFQUFFNEQsTUFBTSxDQUFDO09BQ3RELElBQUksSUFBSSxDQUFDa0osZ0JBQWdCLEVBQUU7U0FDekI3SyxNQUFNLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUM0SyxnQkFBZ0IsRUFBRXBKLFlBQVksQ0FBQztDQUNwRCxNQUFBLENBQUMsTUFBTTtTQUNMLElBQUksQ0FBQ29KLGdCQUFnQixHQUFHN0ssTUFBTSxDQUFDQyxNQUFNLENBQUMsRUFBRSxFQUFFd0IsWUFBWSxDQUFDO0NBQ3pELE1BQUE7T0FDQSxLQUFLLElBQUlvVCxRQUFRLElBQUksSUFBSSxDQUFDM0osU0FBUyxDQUFDRSxTQUFTLEVBQUU7Q0FDN0N5SixRQUFBQSxRQUFRLENBQUM7Q0FDUDlXLFVBQUFBLEtBQUssRUFBRUEsS0FBTTtDQUNiNEQsVUFBQUEsTUFBTSxFQUFFQSxNQUFPO1dBQ2ZGLFlBQVksRUFBRSxJQUFJLENBQUNvSjtDQUNwQixTQUFBLENBQUM7Q0FDSixNQUFBO0NBQ0YsSUFBQTtDQUNGLEVBQUE7Q0FDRDs7Ozs7Ozs7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNV19{"version":3,"file":"index.js","sources":["node_modules/core-js/internals/global-this.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/object-property-is-enumerable.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/classof-raw.js","node_modules/core-js/internals/indexed-object.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-indexed-object.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/environment-user-agent.js","node_modules/core-js/internals/environment-v8-version.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/object-get-own-property-descriptor.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/define-built-in.js","node_modules/core-js/internals/math-trunc.js","node_modules/core-js/internals/to-integer-or-infinity.js","node_modules/core-js/internals/to-absolute-index.js","node_modules/core-js/internals/to-length.js","node_modules/core-js/internals/length-of-array-like.js","node_modules/core-js/internals/array-includes.js","node_modules/core-js/internals/object-keys-internal.js","node_modules/core-js/internals/enum-bug-keys.js","node_modules/core-js/internals/object-get-own-property-names.js","node_modules/core-js/internals/object-get-own-property-symbols.js","node_modules/core-js/internals/own-keys.js","node_modules/core-js/internals/copy-constructor-properties.js","node_modules/core-js/internals/is-forced.js","node_modules/core-js/internals/export.js","node_modules/core-js/internals/to-string-tag-support.js","node_modules/core-js/internals/classof.js","node_modules/core-js/internals/to-string.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/internals/regexp-sticky-helpers.js","node_modules/core-js/internals/object-keys.js","node_modules/core-js/internals/object-define-properties.js","node_modules/core-js/internals/html.js","node_modules/core-js/internals/object-create.js","node_modules/core-js/internals/regexp-unsupported-dot-all.js","node_modules/core-js/internals/regexp-unsupported-ncg.js","node_modules/core-js/internals/regexp-exec.js","node_modules/core-js/modules/es.regexp.exec.js","node_modules/core-js/internals/dom-iterables.js","node_modules/core-js/internals/dom-token-list-prototype.js","node_modules/core-js/internals/add-to-unscopables.js","node_modules/core-js/internals/iterators.js","node_modules/core-js/internals/correct-prototype-getter.js","node_modules/core-js/internals/object-get-prototype-of.js","node_modules/core-js/internals/iterators-core.js","node_modules/core-js/internals/set-to-string-tag.js","node_modules/core-js/internals/iterator-create-constructor.js","node_modules/core-js/internals/function-uncurry-this-accessor.js","node_modules/core-js/internals/is-possible-prototype.js","node_modules/core-js/internals/a-possible-prototype.js","node_modules/core-js/internals/object-set-prototype-of.js","node_modules/core-js/internals/iterator-define.js","node_modules/core-js/internals/create-iter-result-object.js","node_modules/core-js/modules/es.array.iterator.js","node_modules/core-js/modules/web.dom-collections.iterator.js","src/svg/svg.ts","src/TinyMDECommandBar.ts","node_modules/core-js/internals/function-apply.js","node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","node_modules/core-js/internals/string-multibyte.js","node_modules/core-js/internals/advance-string-index.js","node_modules/core-js/internals/get-substitution.js","node_modules/core-js/internals/regexp-exec-abstract.js","node_modules/core-js/modules/es.string.replace.js","node_modules/core-js/internals/whitespaces.js","node_modules/core-js/internals/string-trim.js","node_modules/core-js/internals/string-trim-forced.js","node_modules/core-js/modules/es.string.trim.js","node_modules/core-js/internals/inherit-if-required.js","node_modules/core-js/internals/is-regexp.js","node_modules/core-js/internals/regexp-get-flags.js","node_modules/core-js/internals/proxy-accessor.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/set-species.js","node_modules/core-js/modules/es.regexp.constructor.js","node_modules/core-js/modules/es.regexp.flags.js","src/grammar.ts","src/TinyMDE.ts"],"sourcesContent":["'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n !Symbol.sham &&\n typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.42.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.42.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n if (!options) options = {};\n var simple = options.enumerable;\n var name = options.name !== undefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (options.global) {\n if (simple) O[key] = value;\n else defineGlobalProperty(key, value);\n } else {\n try {\n if (!options.unsafe) delete O[key];\n else if (O[key]) simple = true;\n } catch (error) { /* empty */ }\n if (simple) O[key] = value;\n else definePropertyModule.f(O, key, {\n value: value,\n enumerable: false,\n configurable: !options.nonConfigurable,\n writable: !options.nonWritable\n });\n } return O;\n};\n","'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n","'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n var len = toIntegerOrInfinity(argument);\n return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n if (length === 0) return !IS_INCLUDES && -1;\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el !== el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value !== value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value === POLYFILL ? true\n : value === NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = globalThis;\n } else if (STATIC) {\n target = globalThis[TARGET] || defineGlobalProperty(TARGET, {});\n } else {\n target = globalThis[TARGET] && globalThis[TARGET].prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n defineBuiltIn(target, key, sourceProperty, options);\n }\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nvar UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') !== null;\n});\n\n// UC Browser bug\n// https://github.com/zloirock/core-js/issues/1008\nvar MISSED_STICKY = UNSUPPORTED_Y || fails(function () {\n return !$RegExp('a', 'y').sticky;\n});\n\nvar BROKEN_CARET = UNSUPPORTED_Y || fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') !== null;\n});\n\nmodule.exports = {\n BROKEN_CARET: BROKEN_CARET,\n MISSED_STICKY: MISSED_STICKY,\n UNSUPPORTED_Y: UNSUPPORTED_Y\n};\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n // eslint-disable-next-line no-useless-assignment -- avoid memory leak\n activeXDocument = null;\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.test('\\n') && re.flags === 's');\n});\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?<a>b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$<a>c') !== 'bc';\n});\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n call(nativeExec, re1, 'a');\n call(nativeExec, re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = call(patchedExec, raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = call(regexpFlags, re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = replace(flags, 'y', '');\n if (indexOf(flags, 'g') === -1) {\n flags += 'g';\n }\n\n strCopy = stringSlice(str, re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = stringSlice(match.input, charsAdded);\n match[0] = stringSlice(match[0], charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/\n call(nativeReplace, match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","'use strict';\n// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] === undefined) {\n defineProperty(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (target, TAG, STATIC) {\n if (target && !STATIC) target = target.prototype;\n if (target && !hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n } catch (error) { /* empty */ }\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nmodule.exports = function (argument) {\n return isObject(argument) || argument === null;\n};\n","'use strict';\nvar isPossiblePrototype = require('../internals/is-possible-prototype');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n if (isPossiblePrototype(argument)) return argument;\n throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar isObject = require('../internals/is-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n requireObjectCoercible(O);\n aPossiblePrototype(proto);\n if (!isObject(O)) return O;\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];\n\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n }\n\n return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n return { value: value, done: done };\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = null;\n return createIterResultObject(undefined, true);\n }\n switch (state.kind) {\n case 'keys': return createIterResultObject(index, false);\n case 'values': return createIterResultObject(target[index], false);\n } return createIterResultObject([index, target[index]], false);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n setToStringTag(CollectionPrototype, COLLECTION_NAME, true);\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n handlePrototype(globalThis[COLLECTION_NAME] && globalThis[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n","const svg: Record<string, string> = {\n blockquote: `<svg height=\"18\" width=\"18\"><rect width=\"5\" height=\"5\" x=\"3\" y=\"4\" ry=\"1\"/><rect ry=\"1\" y=\"4\" x=\"10\" height=\"5\" width=\"5\"/><path d=\"M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z\"/></svg>`,\n bold: `<svg height=\"18\" width=\"18\"><path d=\"M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z\"/></svg>`,\n clear_formatting: `<svg height=\"18\" width=\"18\"><path d=\"M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"16\" height=\"2\" width=\"2\"/><rect width=\"2\" height=\"2\" x=\"13\" y=\"14\" rx=\".8\" ry=\".8\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"10\" height=\"2\" width=\"2\"/></svg>`,\n code: `<svg height=\"18\" width=\"18\"><path d=\"M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z\"/></svg>`,\n h1: `<svg height=\"18\" width=\"18\"><path d=\"M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z\"/></svg>`,\n h2: `<svg height=\"18\" width=\"18\"><path d=\"M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z\"/></svg>`,\n hr: `<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\"/></svg>`,\n image: `<svg height=\"18\" width=\"18\"><path d=\"M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z\"/><circle r=\"1.5\" cy=\"6.5\" cx=\"5.5\"/></svg>`,\n italic: `<svg height=\"18\" width=\"18\"><path d=\"M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z\"/></svg>`,\n link: `<svg height=\"18\" width=\"18\"><path d=\"M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z\"/><path d=\"M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z\"/></svg>`,\n ol: `<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>`,\n redo: `<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>`,\n strikethrough: `<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>`,\n tasklist: `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg\n height=\"18\"\n width=\"18\"\n version=\"1.1\"\n id=\"svg4\"\n sodipodi:docname=\"tasklist.svg\"\n inkscape:version=\"1.4 (e7c3feb1, 2024-10-09)\"\n xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:svg=\"http://www.w3.org/2000/svg\">\n <defs\n id=\"defs4\" />\n <sodipodi:namedview\n id=\"namedview4\"\n pagecolor=\"#ffffff\"\n bordercolor=\"#000000\"\n borderopacity=\"0.25\"\n inkscape:showpageshadow=\"2\"\n inkscape:pageopacity=\"0.0\"\n inkscape:pagecheckerboard=\"0\"\n inkscape:deskcolor=\"#d1d1d1\"\n showgrid=\"true\"\n inkscape:zoom=\"24.934044\"\n inkscape:cx=\"9.3847591\"\n inkscape:cy=\"7.8206326\"\n inkscape:window-width=\"1200\"\n inkscape:window-height=\"1027\"\n inkscape:window-x=\"661\"\n inkscape:window-y=\"44\"\n inkscape:window-maximized=\"0\"\n inkscape:current-layer=\"svg4\">\n <inkscape:grid\n id=\"grid4\"\n units=\"px\"\n originx=\"0\"\n originy=\"0\"\n spacingx=\"1\"\n spacingy=\"1\"\n empcolor=\"#0099e5\"\n empopacity=\"0.30196078\"\n color=\"#0099e5\"\n opacity=\"0.14901961\"\n empspacing=\"5\"\n enabled=\"true\"\n visible=\"true\" />\n </sodipodi:namedview>\n <rect\n x=\"1.25\"\n y=\"25.75\"\n width=\"6\"\n height=\"6\"\n rx=\"1\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n id=\"rect1\" />\n <path\n d=\"m 2.75,28.75 1.3,1.5 2.7,-3.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n id=\"path1\" />\n <rect\n x=\"1.25\"\n y=\"33.75\"\n width=\"6\"\n height=\"6\"\n rx=\"1\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n id=\"rect2\" />\n <rect\n ry=\"1\"\n y=\"27.25\"\n x=\"9.25\"\n height=\"2\"\n width=\"8\"\n id=\"rect3\" />\n <rect\n ry=\"1\"\n y=\"35.25\"\n x=\"9.25\"\n height=\"2\"\n width=\"8\"\n id=\"rect4\" />\n <path\n style=\"stroke-linecap:round\"\n d=\"M 2.3339844,1 C 1.6039663,1 1,1.6039663 1,2.3339844 V 5.6660156 C 1,6.3960337 1.6039663,7 2.3339844,7 H 5.6660156 C 6.3960337,7 7,6.3960337 7,5.6660156 V 2.3339844 C 7,1.6039663 6.3960337,1 5.6660156,1 Z m 0,1 H 5.6660156 C 5.8593309,2 6,2.1406691 6,2.3339844 V 5.6660156 C 6,5.8593309 5.8593309,6 5.6660156,6 H 2.3339844 C 2.1406691,6 2,5.8593309 2,5.6660156 V 2.3339844 C 2,2.1406691 2.1406691,2 2.3339844,2 Z\"\n id=\"rect5\" />\n <path\n style=\"stroke-linecap:round\"\n d=\"M 2.3339844,11 C 1.6039663,11 1,11.603966 1,12.333984 v 3.332032 C 1,16.396034 1.6039663,17 2.3339844,17 H 5.6660156 C 6.3960337,17 7,16.396034 7,15.666016 V 12.333984 C 7,11.603966 6.3960337,11 5.6660156,11 Z m 0,1 H 5.6660156 C 5.8593309,12 6,12.140669 6,12.333984 v 3.332032 C 6,15.859331 5.8593309,16 5.6660156,16 H 2.3339844 C 2.1406691,16 2,15.859331 2,15.666016 V 12.333984 C 2,12.140669 2.1406691,12 2.3339844,12 Z\"\n id=\"rect5-7\" />\n <rect\n y=\"3\"\n x=\"9\"\n height=\"2\"\n width=\"9\"\n ry=\"1\"\n id=\"rect2-3\"\n style=\"stroke-width:1\" />\n <rect\n y=\"13\"\n x=\"9\"\n height=\"2\"\n width=\"9\"\n ry=\"1\"\n id=\"rect2-3-7\"\n style=\"stroke-width:1\" />\n <path\n style=\"stroke-linecap:round;stroke-linejoin:round\"\n d=\"M 4.8417969,2.5253906 A 0.5,0.5 0 0 0 4.5527344,2.7773438 L 3.8632813,4.15625 3.3535156,3.6464844 a 0.5,0.5 0 0 0 -0.7070312,0 0.5,0.5 0 0 0 0,0.7070312 l 1,1 A 0.50005,0.50005 0 0 0 4.4472656,5.2226562 l 1,-1.9999999 A 0.5,0.5 0 0 0 5.2226562,2.5527344 0.5,0.5 0 0 0 4.8417969,2.5253906 Z\"\n id=\"path6\" />\n</svg>\n`,\n ul: `<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>`,\n undo: `<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n`\n};\n\nexport default svg;","import svg from \"./svg/svg\";\nimport { Editor, Position, SelectionEvent } from \"./TinyMDE\";\n\nconst isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(\n typeof navigator !== \"undefined\" ? navigator.platform : \"\"\n);\n\nexport interface CommandAction {\n (editor: Editor): void;\n}\n\nexport interface CommandEnabled {\n (editor: Editor, focus?: Position, anchor?: Position): boolean | null;\n}\n\nexport interface CommandDefinition {\n name: string;\n action?: string | CommandAction;\n innerHTML?: string;\n title?: string;\n hotkey?: string;\n enabled?: CommandEnabled;\n}\n\nexport interface CommandBarProps {\n element?: string | HTMLElement;\n editor?: Editor;\n commands?: (string | CommandDefinition)[];\n}\n\ninterface Hotkey {\n modifiers: string[];\n command: string;\n key?: string;\n code?: string;\n}\n\nconst DefaultCommands: Record<string, CommandDefinition> = {\n bold: {\n name: \"bold\",\n action: \"bold\",\n innerHTML: svg.bold,\n title: \"Bold\",\n hotkey: \"Mod-B\",\n },\n italic: {\n name: \"italic\",\n action: \"italic\",\n innerHTML: svg.italic,\n title: \"Italic\",\n hotkey: \"Mod-I\",\n },\n strikethrough: {\n name: \"strikethrough\",\n action: \"strikethrough\",\n innerHTML: svg.strikethrough,\n title: \"Strikethrough\",\n hotkey: \"Mod2-Shift-5\",\n },\n code: {\n name: \"code\",\n action: \"code\",\n innerHTML: svg.code,\n title: \"Format as code\",\n },\n h1: {\n name: \"h1\",\n action: \"h1\",\n innerHTML: svg.h1,\n title: \"Level 1 heading\",\n hotkey: \"Mod-Shift-1\",\n },\n h2: {\n name: \"h2\",\n action: \"h2\",\n innerHTML: svg.h2,\n title: \"Level 2 heading\",\n hotkey: \"Mod-Shift-2\",\n },\n ul: {\n name: \"ul\",\n action: \"ul\",\n innerHTML: svg.ul,\n title: \"Bulleted list\",\n },\n ol: {\n name: \"ol\",\n action: \"ol\",\n innerHTML: svg.ol,\n title: \"Numbered list\",\n },\n blockquote: {\n name: \"blockquote\",\n action: \"blockquote\",\n innerHTML: svg.blockquote,\n title: \"Quote\",\n hotkey: \"Mod2-Shift-Q\",\n },\n tasklist: {\n name: \"tasklist\",\n action: (editor: Editor) => editor.toggleTaskList(),\n enabled: (editor: Editor, focus?: Position) =>\n focus ? editor.isTaskListItem(focus.row) : null,\n innerHTML: svg.tasklist,\n title: \"Task list\",\n hotkey: \"Mod2-Shift-T\",\n },\n insertLink: {\n name: \"insertLink\",\n action: (editor: Editor) => {\n if (editor.isInlineFormattingAllowed()) editor.wrapSelection(\"[\", \"]()\");\n },\n enabled: (editor: Editor) =>\n editor.isInlineFormattingAllowed() ? false : null,\n innerHTML: svg.link,\n title: \"Insert link\",\n hotkey: \"Mod-K\",\n },\n insertImage: {\n name: \"insertImage\",\n action: (editor: Editor) => {\n if (editor.isInlineFormattingAllowed()) editor.wrapSelection(\"![\", \"]()\");\n },\n enabled: (editor: Editor) =>\n editor.isInlineFormattingAllowed() ? false : null,\n innerHTML: svg.image,\n title: \"Insert image\",\n hotkey: \"Mod2-Shift-I\",\n },\n hr: {\n name: \"hr\",\n action: (editor: Editor) => editor.paste(\"\\n***\\n\"),\n enabled: () => false,\n innerHTML: svg.hr,\n title: \"Insert horizontal line\",\n hotkey: \"Mod2-Shift-L\",\n },\n undo: {\n name: \"undo\",\n action: (editor: Editor) => editor.undo(),\n enabled: (editor: Editor) => (editor.canUndo ? false : null),\n innerHTML: svg.undo,\n title: \"Undo\",\n },\n redo: {\n name: \"redo\",\n action: (editor: Editor) => editor.redo(),\n enabled: (editor: Editor) => (editor.canRedo ? false : null),\n innerHTML: svg.redo,\n title: \"Redo\",\n },\n};\n\nexport class CommandBar {\n public e: HTMLDivElement | null = null;\n public editor: Editor | null = null;\n public commands: Record<string, CommandDefinition> = {};\n public buttons: Record<string, HTMLDivElement> = {};\n public state: Record<string, boolean | null> = {};\n private hotkeys: Hotkey[] = [];\n\n constructor(props: CommandBarProps) {\n this.e = null;\n this.editor = null;\n this.commands = {};\n this.buttons = {};\n this.state = {};\n this.hotkeys = [];\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n \n if (!element) {\n element = document.body;\n }\n\n this.createCommandBarElement(\n element,\n props.commands || [\n \"bold\",\n \"italic\",\n \"strikethrough\",\n \"|\",\n \"code\",\n \"|\",\n \"h1\",\n \"h2\",\n \"|\",\n \"ul\",\n \"ol\",\n \"tasklist\",\n \"|\",\n \"blockquote\",\n \"hr\",\n \"|\",\n \"undo\",\n \"redo\",\n \"|\",\n \"insertLink\",\n \"insertImage\",\n ]\n );\n document.addEventListener(\"keydown\", (e) => this.handleKeydown(e));\n if (props.editor) this.setEditor(props.editor);\n }\n\n private createCommandBarElement(parentElement: HTMLElement, commands: (string | CommandDefinition)[]): void {\n this.e = document.createElement(\"div\");\n this.e.className = \"TMCommandBar\";\n\n for (let command of commands) {\n if (command === \"|\") {\n let el = document.createElement(\"div\");\n el.className = \"TMCommandDivider\";\n this.e.appendChild(el);\n } else {\n let commandName: string;\n if (typeof command === \"string\") {\n if (DefaultCommands[command]) {\n commandName = command;\n this.commands[commandName] = DefaultCommands[commandName];\n } else {\n continue;\n }\n } else if (typeof command === \"object\" && command.name) {\n commandName = command.name;\n this.commands[commandName] = {} as CommandDefinition;\n if (DefaultCommands[commandName]) {\n Object.assign(this.commands[commandName], DefaultCommands[commandName]);\n }\n Object.assign(this.commands[commandName], command);\n } else {\n continue;\n }\n\n let title = this.commands[commandName].title || commandName;\n\n if (this.commands[commandName].hotkey) {\n const keys = this.commands[commandName].hotkey!.split(\"-\");\n let modifiers: string[] = [];\n let modifierexplanation: string[] = [];\n \n for (let i = 0; i < keys.length - 1; i++) {\n switch (keys[i]) {\n case \"Ctrl\":\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n break;\n case \"Cmd\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n break;\n case \"Alt\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"Alt\");\n break;\n case \"Option\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"⌥\");\n break;\n case \"Win\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⊞ Win\");\n break;\n case \"Shift\":\n modifiers.push(\"shiftKey\");\n modifierexplanation.push(\"⇧\");\n break;\n case \"Mod\":\n if (isMacLike) {\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n } else {\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n }\n break;\n case \"Mod2\":\n modifiers.push(\"altKey\");\n if (isMacLike) modifierexplanation.push(\"⌥\");\n else modifierexplanation.push(\"Alt\");\n break;\n }\n }\n \n modifierexplanation.push(keys[keys.length - 1]);\n let hotkey: Hotkey = {\n modifiers: modifiers,\n command: commandName,\n };\n \n const lastKey = keys[keys.length - 1];\n if (lastKey.match(/^[0-9]$/)) {\n hotkey.code = `Digit${lastKey}`;\n } else if (lastKey.match(/^[a-zA-Z]$/)) {\n hotkey.code = `Key${lastKey.toUpperCase()}`;\n } else {\n hotkey.key = lastKey.toLowerCase();\n }\n this.hotkeys.push(hotkey);\n title = title.concat(` (${modifierexplanation.join(\"+\")})`);\n }\n\n this.buttons[commandName] = document.createElement(\"div\");\n this.buttons[commandName].className = \"TMCommandButton TMCommandButton_Disabled\";\n this.buttons[commandName].title = title;\n this.buttons[commandName].innerHTML = this.commands[commandName].innerHTML || \"?\";\n\n this.buttons[commandName].addEventListener(\"mousedown\", (e) =>\n this.handleClick(commandName, e)\n );\n this.e.appendChild(this.buttons[commandName]);\n }\n }\n parentElement.appendChild(this.e);\n }\n\n private handleClick(commandName: string, event: Event): void {\n if (!this.editor) return;\n event.preventDefault();\n\n // Focus the editor if it's not already focused\n if (this.editor.e) {\n const editorHadFocus = this.editor.e.contains(document.activeElement);\n this.editor.e.focus();\n // Only restore the last selection if the editor was not focused before\n if (!editorHadFocus) {\n this.editor.restoreLastSelection();\n }\n }\n\n if (typeof this.commands[commandName].action === \"string\") {\n if (this.state[commandName] === false)\n (this.editor as any).setCommandState(commandName, true);\n else (this.editor as any).setCommandState(commandName, false);\n } else if (typeof this.commands[commandName].action === \"function\") {\n (this.commands[commandName].action as CommandAction)(this.editor);\n }\n }\n\n public setEditor(editor: Editor): void {\n this.editor = editor;\n editor.addEventListener(\"selection\", (e) => this.handleSelection(e));\n }\n\n private handleSelection(event: SelectionEvent): void {\n if (event.commandState) {\n for (let command in this.commands) {\n if (event.commandState[command] === undefined) {\n if (this.commands[command].enabled) {\n this.state[command] = this.commands[command].enabled!(\n this.editor!,\n event.focus,\n event.anchor\n );\n } else {\n this.state[command] = event.focus ? false : null;\n }\n } else {\n this.state[command] = event.commandState[command];\n }\n\n if (this.state[command] === true) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Active\";\n } else if (this.state[command] === false) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Inactive\";\n } else {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Disabled\";\n }\n }\n }\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n // Only handle keyboard shortcuts if this editor is currently focused\n if (!this.editor || !this.editor.e) return;\n if (!this.editor.e.contains(document.activeElement)) return;\n\n outer: for (let hotkey of this.hotkeys) {\n if (\n (hotkey.key && event.key.toLowerCase() === hotkey.key) ||\n (hotkey.code && event.code === hotkey.code)\n ) {\n for (let modifier of hotkey.modifiers) {\n if (!(event as any)[modifier]) continue outer;\n }\n this.handleClick(hotkey.command, event);\n return;\n }\n }\n }\n}\n\nexport default CommandBar;","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-function-prototype-bind, es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar call = require('../internals/function-call');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegExp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) !== 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () {\n execCalled = true;\n return null;\n };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) };\n }\n return { done: true, value: call(nativeMethod, str, regexp, arg2) };\n }\n return { done: false };\n });\n\n defineBuiltIn(String.prototype, KEY, methods[0]);\n defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n// eslint-disable-next-line redos/no-vulnerable -- safe\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar $TypeError = TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (isCallable(exec)) {\n var result = call(exec, R, S);\n if (result !== null) anObject(result);\n return result;\n }\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n throw new $TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = isObject(searchValue) ? getMethod(searchValue, REPLACE) : undefined;\n return replacer\n ? call(replacer, searchValue, O, replaceValue)\n : call(nativeReplace, toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue == 'string' &&\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n stringIndexOf(replaceValue, '$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n var fullUnicode;\n if (global) {\n fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n\n var results = [];\n var result;\n while (true) {\n result = regExpExec(rx, S);\n if (result === null) break;\n\n push(results, result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n var captures = [];\n var replacement;\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = concat([matched], captures, position, S);\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n replacement = toString(apply(replaceValue, undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n\n return accumulatedResult + stringSlice(S, nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","'use strict';\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar ltrim = RegExp('^[' + whitespaces + ']+');\nvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '$1');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (R) {\n var flags = R.flags;\n return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R)\n ? call(regExpFlags, R) : flags;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (Target, Source, key) {\n key in Target || defineProperty(Target, key, {\n configurable: true,\n get: function () { return Source[key]; },\n set: function (it) { Source[key] = it; }\n });\n};\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineBuiltInAccessor(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar proxyAccessor = require('../internals/proxy-accessor');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = globalThis.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar SyntaxError = globalThis.SyntaxError;\nvar exec = uncurryThis(RegExpPrototype.exec);\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n// TODO: Use only proper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar MISSED_STICKY = stickyHelpers.MISSED_STICKY;\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar BASE_FORCED = DESCRIPTORS &&\n (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n // eslint-disable-next-line sonarjs/inconsistent-function-call -- required for testing\n return NativeRegExp(re1) !== re1 || NativeRegExp(re2) === re2 || String(NativeRegExp(re1, 'i')) !== '/a/i';\n }));\n\nvar handleDotAll = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var brackets = false;\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n result += chr + charAt(string, ++index);\n continue;\n }\n if (!brackets && chr === '.') {\n result += '[\\\\s\\\\S]';\n } else {\n if (chr === '[') {\n brackets = true;\n } else if (chr === ']') {\n brackets = false;\n } result += chr;\n }\n } return result;\n};\n\nvar handleNCG = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var named = [];\n var names = create(null);\n var brackets = false;\n var ncg = false;\n var groupid = 0;\n var groupname = '';\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n chr += charAt(string, ++index);\n } else if (chr === ']') {\n brackets = false;\n } else if (!brackets) switch (true) {\n case chr === '[':\n brackets = true;\n break;\n case chr === '(':\n result += chr;\n // ignore non-capturing groups\n if (stringSlice(string, index + 1, index + 3) === '?:') {\n continue;\n }\n if (exec(IS_NCG, stringSlice(string, index + 1))) {\n index += 2;\n ncg = true;\n }\n groupid++;\n continue;\n case chr === '>' && ncg:\n if (groupname === '' || hasOwn(names, groupname)) {\n throw new SyntaxError('Invalid capture group name');\n }\n names[groupname] = true;\n named[named.length] = [groupname, groupid];\n ncg = false;\n groupname = '';\n continue;\n }\n if (ncg) groupname += chr;\n else result += chr;\n } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_FORCED)) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var groups = [];\n var rawPattern = pattern;\n var rawFlags, dotAll, sticky, handled, result, state;\n\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n return pattern;\n }\n\n if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {\n pattern = pattern.source;\n if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);\n }\n\n pattern = pattern === undefined ? '' : toString(pattern);\n flags = flags === undefined ? '' : toString(flags);\n rawPattern = pattern;\n\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n dotAll = !!flags && stringIndexOf(flags, 's') > -1;\n if (dotAll) flags = replace(flags, /s/g, '');\n }\n\n rawFlags = flags;\n\n if (MISSED_STICKY && 'sticky' in re1) {\n sticky = !!flags && stringIndexOf(flags, 'y') > -1;\n if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');\n }\n\n if (UNSUPPORTED_NCG) {\n handled = handleNCG(pattern);\n pattern = handled[0];\n groups = handled[1];\n }\n\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n if (dotAll || sticky || groups.length) {\n state = enforceInternalState(result);\n if (dotAll) {\n state.dotAll = true;\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n }\n if (sticky) state.sticky = true;\n if (groups.length) state.groups = groups;\n }\n\n if (pattern !== rawPattern) try {\n // fails in old engines, but we have no alternatives for unsupported regex syntax\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n } catch (error) { /* empty */ }\n\n return result;\n };\n\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]);\n }\n\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n defineBuiltIn(globalThis, 'RegExp', RegExpWrapper, { constructor: true });\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","export interface GrammarRule {\n regexp: RegExp;\n replacement: string;\n labelPlaceholder?: number;\n}\n\nexport interface HTMLBlockRule {\n start: RegExp;\n end: RegExp | false;\n paraInterrupt: boolean;\n}\n\nexport interface InlineCommand {\n type: 'inline';\n className: string;\n set: {\n pre: string;\n post: string;\n };\n unset: {\n prePattern: RegExp;\n postPattern: RegExp;\n };\n}\n\nexport interface LineCommand {\n type: 'line';\n className: string;\n set: {\n pattern: RegExp;\n replacement: string;\n };\n unset: {\n pattern: RegExp;\n replacement: string;\n };\n}\n\nexport type Command = InlineCommand | LineCommand;\n\nconst replacements: Record<string, RegExp> = {\n ASCIIPunctuation: /[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~\\\\]/,\n // Newlines are excluded so that, when a paragraph spanning multiple source lines is parsed as\n // one joined string, a soft line break (\\n) terminates the current text run and can be handled\n // explicitly as a line break rather than being swallowed into a default token.\n NotTriggerChar: /[^`_*[\\]()<>!~\\n]/,\n Scheme: /[A-Za-z][A-Za-z0-9+.-]{1,31}/,\n 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])?)*/, // From CommonMark spec\n HTMLOpenTag: /<HTMLTagName(?:HTMLAttribute)*\\s*\\/?>/,\n HTMLCloseTag: /<\\/HTMLTagName\\s*>/,\n HTMLTagName: /[A-Za-z][A-Za-z0-9-]*/, \n HTMLComment: /<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,\n HTMLPI: /<\\?(?:|.|(?:[^?]|\\?[^>])*)\\?>/,\n HTMLDeclaration: /<![A-Z]+\\s[^>]*>/,\n HTMLCDATA: /<!\\[CDATA\\[.*?\\]\\]>/,\n HTMLAttribute: /\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,\n HTMLAttValue: /\\s*=\\s*(?:(?:'[^']*')|(?:\"[^\"]*\")|(?:[^\\s\"'=<>`]+))/,\n KnownTag: /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|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/\n};\n\n// From CommonMark.js. \nexport const punctuationLeading = new RegExp(/^(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])/);\n\nexport const punctuationTrailing = new RegExp(/(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])$/);\n\n/**\n * Standalone regular expressions used by the editor logic (TinyMDE.ts) that aren't part of the\n * block / inline grammar tables above. Centralized here so every pattern the editor relies on lives\n * in one place. Patterns flagged `g` are only ever used with String.prototype.replace(), which\n * resets lastIndex, so sharing a single instance across call sites is safe.\n */\nexport const editorRegExp: Record<string, RegExp> = {\n // Platform detection and line splitting.\n macPlatform: /Mac|iPod|iPhone|iPad/,\n lineSplit: /(?:\\r\\n|\\r|\\n)/,\n\n // Replacement-template placeholder substitution.\n replacementPlaceholder: /(\\${1,2})([0-9])/g, // $N (literal) or $$N (inline content)\n inlineContentPlaceholder: /\\$\\$([0-9])/, // locate the $$N inline-content placeholder\n inlineReplacementPlaceholder: /\\$([1-9])/g, // single-$ placeholder in merged inline grammar\n\n // Blank / whitespace helpers.\n blankContent: /^\\s*$/,\n leadingWhitespace: /^\\s/,\n trailingWhitespace: /\\s$/,\n leadingWhitespaceRun: /^\\s+/,\n surroundingWhitespace: /^(?<leading>\\s*).*\\S(?<trailing>\\s*)$/,\n\n // List / task list items.\n taskListItem: /^(\\[)([ xX])(\\])(\\s|$)([\\s\\S]*)$/,\n orderedListNumber: /\\d{1,9}/,\n\n // Opening tag name of an inline HTML element.\n inlineTagName: /^<\\s*([a-zA-Z][a-zA-Z0-9]*)/,\n\n // Event type matching (addEventListener).\n changeEvent: /^(?:change|input)$/i,\n selectionEvent: /^(?:selection|selectionchange)$/i,\n dropEvent: /^(?:drop)$/i,\n\n // Inline emphasis / strikethrough delimiters and the extended-autolink boundary.\n autolinkPrecedingChar: /[\\s*_~(]/,\n emphasisDelimiter: /(^\\*+)|(^_+)/,\n strikethroughDelimiter: /^~~/,\n\n // GFM extended (non-delimited) autolinks.\n autolinkScheme: /^(?:https?|ftp):\\/\\//i,\n autolinkWww: /^www\\./i,\n autolinkDomain: /^[a-zA-Z0-9_-]+(?:\\.[a-zA-Z0-9_-]+)+/,\n autolinkPath: /^[^\\s<]*/,\n autolinkProtocol: /^(?:mailto|xmpp):/i,\n autolinkXmpp: /^xmpp:/i,\n autolinkXmppResource: /^\\/[a-zA-Z0-9@.\\-_]+/,\n autolinkEmail: /^[a-zA-Z0-9.\\-_+]+@[a-zA-Z0-9_-]+(?:\\.[a-zA-Z0-9_-]+)+/,\n emailTrailingChar: /[-_]$/,\n emailTld: /\\.[a-zA-Z0-9]+$/,\n\n // Link / image destination parser (character-by-character scanning).\n linkClosingBracket: /^\\]/,\n openingAngle: /^</,\n closingAngle: /^>/,\n titleQuote: /^[\"']/,\n openingParen: /^\\(/,\n closingParen: /^\\)/,\n endsWithOpenAngle: /<$/,\n containsOpenAngle: /</,\n anyChar: /^./,\n};\n\n/**\n * This is CommonMark's block grammar, but we're ignoring nested blocks here.\n */\nexport const lineGrammar: Record<string, GrammarRule> = {\n TMH1: { \n regexp: /^( {0,3}#\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH1\">$1</span>$$2<span class=\"TMMark TMMark_TMH1\">$3</span>'\n },\n TMH2: { \n regexp: /^( {0,3}##\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH2\">$1</span>$$2<span class=\"TMMark TMMark_TMH2\">$3</span>'\n },\n TMH3: { \n regexp: /^( {0,3}###\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH3\">$1</span>$$2<span class=\"TMMark TMMark_TMH3\">$3</span>'\n },\n TMH4: { \n regexp: /^( {0,3}####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH4\">$1</span>$$2<span class=\"TMMark TMMark_TMH4\">$3</span>'\n },\n TMH5: { \n regexp: /^( {0,3}#####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH5\">$1</span>$$2<span class=\"TMMark TMMark_TMH5\">$3</span>'\n },\n TMH6: { \n regexp: /^( {0,3}######\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH6\">$1</span>$$2<span class=\"TMMark TMMark_TMH6\">$3</span>'\n },\n TMBlockquote: { \n regexp: /^( {0,3}>[ ]?)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMBlockquote\">$1</span>$$2'\n },\n TMCodeFenceBacktickOpen: { \n regexp: /^( {0,3}(?<seq>````*)\\s*)([^`]*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceTildeOpen: { \n regexp: /^( {0,3}(?<seq>~~~~*)\\s*)(.*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceBacktickClose: { \n regexp: /^( {0,3}(?<seq>````*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span>$3'\n },\n TMCodeFenceTildeClose: { \n regexp: /^( {0,3}(?<seq>~~~~*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span>$3'\n },\n TMBlankLine: { \n regexp: /^([ \\t]*)$/, \n replacement: '$0'\n },\n TMSetextH1Marker: { \n regexp: /^ {0,3}=+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMSetextH2Marker: { \n regexp: /^ {0,3}-+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMHR: { \n regexp: /^( {0,3}(\\*[ \\t]*\\*[ \\t]*\\*[ \\t*]*)|(-[ \\t]*-[ \\t]*-[ \\t-]*)|(_[ \\t]*_[ \\t]*_[ \\t_]*))$/, \n replacement: '<span class=\"TMMark TMMark_TMHR\">$0</span>'\n },\n TMUL: { \n regexp: /^( {0,3}[+*-] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMUL\">$1</span>$$2'\n },\n TMOL: { \n regexp: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMOL\">$1</span>$$2'\n },\n // TODO: This is currently preventing sublists (and any content within list items, really) from working\n TMIndentedCode: { \n regexp: /^( {4}|\\t)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMIndentedCode\">$1</span>$2'\n },\n TMLinkReferenceDefinition: {\n // TODO: Link destination can't include unbalanced parantheses, but we just ignore that here \n regexp: /^( {0,3}\\[\\s*)([^\\s\\]](?:[^\\]]|\\\\\\])*?)(\\s*\\]:\\s*)((?:[^\\s<>]+)|(?:<(?:[^<>\\\\]|\\\\.)*>))?(\\s*)((?:\\((?:[^()\\\\]|\\\\.)*\\))|(?:\"(?:[^\"\\\\]|\\\\.)*\")|(?:'(?:[^'\\\\]|\\\\.)*'))?(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$1</span><span class=\"TMLinkLabel TMLinkLabel_Definition\">$2</span><span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$3</span><span class=\"TMLinkDestination\">$4</span>$5<span class=\"TMLinkTitle\">$6</span>$7',\n labelPlaceholder: 2, // this defines which placeholder in the above regex is the link \"label\"\n },\n};\n\n/**\n * HTML blocks have multiple different classes of opener and closer. This array defines all the cases\n */\nexport const htmlBlockGrammar: HTMLBlockRule[] = [\n { start: /^ {0,3}<(?:script|pre|style)(?:\\s|>|$)/i, end: /(?:<\\/script>|<\\/pre>|<\\/style>)/i, paraInterrupt: true },\n { start: /^ {0,3}<!--/, end: /-->/, paraInterrupt: true },\n { start: /^ {0,3}<\\?/, end: /\\?>/, paraInterrupt: true },\n { start: /^ {0,3}<![A-Z]/, end: />/, paraInterrupt : true},\n { start: /^ {0,3}<!\\[CDATA\\[/, end: /\\]\\]>/, paraInterrupt : true},\n { start: /^ {0,3}(?:<|<\\/)(?:KnownTag)(?:\\s|>|\\/>|$)/i, end: false, paraInterrupt: true},\n { start: /^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\\s*$/, end: false, paraInterrupt: false},\n];\n\n/**\n * Structure of the object:\n * Top level entries are rules, each consisting of a regular expressions (in string format) as well as a replacement.\n * In the regular expressions, replacements from the object 'replacements' will be processed before compiling into the property regexp.\n */\nexport const inlineGrammar: Record<string, GrammarRule> = {\n escape : {\n regexp: /^\\\\(ASCIIPunctuation)/,\n replacement : '<span class=\"TMMark TMMark_TMEscape\">\\\\</span>$1'\n },\n code : {\n regexp: /^(`+)((?:[^`])|(?:[^`].*?[^`]))(\\1)/,\n replacement : '<span class=\"TMMark TMMark_TMCode\">$1</span><code class=\"TMCode\">$2</code><span class=\"TMMark TMMark_TMCode\">$3</span>' \n },\n autolink : {\n regexp: /^<((?:Scheme:[^\\s<>]*)|(?:Email))>/,\n replacement: '<span class=\"TMMark TMMark_TMAutolink\"><</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">></span>'\n },\n html : {\n regexp: /^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,\n replacement: '<span class=\"TMHTML\">$1</span>',\n },\n linkOpen : {\n regexp: /^\\[/,\n replacement: ''\n },\n imageOpen : {\n regexp: /^!\\[/,\n replacement : ''\n },\n linkLabel : {\n regexp: /^(\\[\\s*)([^\\]]*?)(\\s*\\])/,\n replacement: '',\n labelPlaceholder: 2\n },\n default : {\n regexp: /^(.|(?:NotTriggerChar+))/,\n replacement: '$1'\n }\n};\n\n// Process replacements in regexps\nconst replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n\n// Inline\nconst inlineRules = [...Object.keys(inlineGrammar)];\nfor (let rule of inlineRules) {\n let re = inlineGrammar[rule].regexp.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n inlineGrammar[rule].regexp = new RegExp(re, inlineGrammar[rule].regexp.flags);\n}\n\n// HTML Block (only opening rule is processed currently)\nfor (let rule of htmlBlockGrammar) {\n let re = rule.start.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n rule.start = new RegExp(re, rule.start.flags);\n}\n\n/**\n * Creates a merged inline grammar by combining the default inline grammar with custom rules.\n * Custom rules are processed and their regexp patterns are expanded with replacements.\n * @param customRules - Object containing custom inline grammar rules\n * @returns Merged inline grammar object\n */\nexport function createMergedInlineGrammar(customRules: Record<string, GrammarRule> = {}): Record<string, GrammarRule> {\n const merged = { ...inlineGrammar };\n \n // Process custom rules\n for (const [ruleName, rule] of Object.entries(customRules)) {\n // Copy the rule to avoid modifying the original\n const processedRule = { ...rule };\n \n // Process replacements in the regexp\n let regexpSource = rule.regexp.source;\n const replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n \n // Replace while there is something to replace\n while (regexpSource.match(replacementRegexp)) {\n regexpSource = regexpSource.replace(replacementRegexp, (match) => {\n return replacements[match].source;\n });\n }\n \n processedRule.regexp = new RegExp(regexpSource, rule.regexp.flags);\n merged[ruleName] = processedRule;\n }\n \n return merged;\n}\n\n/**\n * Escapes HTML special characters (<, >, and &) in the string.\n * @param {string} string The raw string to be escaped\n * @returns {string} The string, ready to be used in HTML\n */\nexport function htmlescape(string: string): string {\n return (string ? string : '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\n/**\n * Contains the commands that can be sent to the editor. Contains objects with a name representing the name of the command.\n * Each of the objects contains the following keys:\n * \n * - type: Can be either inline (for inline formatting) or line (for block / line formatting).\n * - className: Used to determine whether the command is active at a given position. \n * For line formatting, this looks at the class of the line element. For inline elements, tries to find an enclosing element with that class.\n * - set / unset: Contain instructions how to set and unset the command. For line type commands, both consist of a pattern and replacement that \n * will be applied to each line (using String.replace). For inline type commands, the set object contains a pre and post string which will\n * be inserted before and after the selection. The unset object contains a prePattern and a postPattern. Both should be regular expressions and \n * they will be applied to the portion of the line before and after the selection (using String.replace, with an empty replacement string).\n */\nexport const commands: Record<string, Command> = {\n // Replacements for unset for inline commands are '' by default\n bold: {\n type: 'inline', \n className: 'TMStrong', \n set: {pre: '**', post: '**'}, \n unset: {prePattern: /(?:\\*\\*|__)$/, postPattern: /^(?:\\*\\*|__)/}\n }, \n italic: {\n type: 'inline', \n className: 'TMEm', \n set: {pre: '*', post: '*'}, \n unset: {prePattern: /(?:\\*|_)$/, postPattern: /^(?:\\*|_)/}\n },\n code: {\n type: 'inline', \n className: 'TMCode', \n set: {pre: '`', post: '`'}, \n unset: {prePattern: /`+$/, postPattern: /^`+/} // FIXME this doesn't ensure balanced backticks right now\n }, \n strikethrough: {\n type: 'inline', \n className: 'TMStrikethrough', \n set: {pre: '~~', post: '~~'}, \n unset: {prePattern:/~~$/, postPattern: /^~~/ }\n },\n h1: {\n type: 'line', \n className: 'TMH1', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '# $2'}, \n unset: {pattern: /^( {0,3}#\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h2: {\n type: 'line', \n className: 'TMH2', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '## $2'}, \n unset: {pattern: /^( {0,3}##\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h3: {\n type: 'line', \n className: 'TMH3', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '### $2'}, \n unset: {pattern: /^( {0,3}###\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h4: {\n type: 'line', \n className: 'TMH4', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '#### $2'}, \n unset: {pattern: /^( {0,3}####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h5: {\n type: 'line', \n className: 'TMH5', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '##### $2'}, \n unset: {pattern: /^( {0,3}#####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h6: {\n type: 'line', \n className: 'TMH6', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '###### $2'}, \n unset: {pattern: /^( {0,3}######\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n ul: {\n type: 'line', \n className: 'TMUL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '- $2'}, \n unset: {pattern: /^( {0,3}[+*-] {1,4})(.*)$/, replacement: '$2'}\n },\n ol: {\n type: 'line', \n className: 'TMOL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '$#. $2'}, \n unset: {pattern: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, replacement: '$2'}\n }, \n blockquote: {\n type: 'line', \n className: 'TMBlockquote', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '> $2'}, \n unset: {pattern: /^( {0,3}>[ ]?)(.*)$/, replacement: '$2'}\n },\n};","import {\n inlineGrammar,\n lineGrammar,\n punctuationLeading,\n punctuationTrailing,\n editorRegExp,\n htmlescape,\n htmlBlockGrammar,\n commands,\n HTMLBlockRule,\n Command,\n LineCommand,\n GrammarRule,\n createMergedInlineGrammar,\n} from \"./grammar\";\n\nexport interface EditorProps {\n element?: string | HTMLElement;\n editor?: string | HTMLElement;\n content?: string;\n textarea?: string | HTMLTextAreaElement;\n customInlineGrammar?: Record<string, GrammarRule>;\n placeholder?: string;\n}\n\nexport interface Position {\n row: number;\n col: number;\n}\n\nexport interface HistoryState {\n content: string;\n selection: Position | null;\n anchor: Position | null;\n}\n\nexport interface ChangeEvent {\n content: string;\n linesDirty: boolean[];\n}\n\nexport interface SelectionEvent {\n focus: Position;\n anchor: Position;\n commandState: Record<string, boolean | null>;\n}\n\nexport interface DropEvent {\n dataTransfer: DataTransfer;\n}\n\ntype EventType = 'change' | 'selection' | 'drop';\ntype EventHandler<T> = (event: T) => void;\n\nexport class Editor {\n public e: HTMLDivElement | null = null;\n public textarea: HTMLTextAreaElement | null = null;\n public lines: string[] = [];\n public lineElements: NodeListOf<ChildNode> | HTMLCollection | ChildNode[] = [];\n public lineTypes: string[] = [];\n public lineCaptures: RegExpExecArray[] = [];\n public lineReplacements: string[] = [];\n public linkLabels: string[] = [];\n public lineDirty: boolean[] = [];\n public lastCommandState: Record<string, boolean | null> | null = null;\n private customInlineGrammar: Record<string, GrammarRule> = {};\n private mergedInlineGrammar: Record<string, GrammarRule> = inlineGrammar;\n private hasFocus: boolean = true;\n private lastSelection: { focus: Position | null; anchor: Position | null } | null = null;\n private placeholder: string | undefined;\n\n public listeners: {\n change: EventHandler<ChangeEvent>[];\n selection: EventHandler<SelectionEvent>[];\n drop: EventHandler<DropEvent>[];\n } = {\n change: [],\n selection: [],\n drop: [],\n };\n\n private undoStack: HistoryState[] = [];\n private redoStack: HistoryState[] = [];\n private isRestoringHistory: boolean = false;\n private maxHistory: number = 100;\n\n constructor(props: EditorProps = {}) {\n this.e = null;\n this.textarea = null;\n this.lines = [];\n this.lineElements = [] as ChildNode[];\n this.lineTypes = [];\n this.lineCaptures = [];\n this.lineReplacements = [];\n this.linkLabels = [];\n this.lineDirty = [];\n this.lastCommandState = null;\n this.hasFocus = true;\n this.lastSelection = null;\n this.customInlineGrammar = props.customInlineGrammar || {};\n this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);\n\n this.listeners = {\n change: [],\n selection: [],\n drop: [],\n };\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n\n if (typeof props.textarea === 'string') {\n this.textarea = document.getElementById(props.textarea) as HTMLTextAreaElement;\n } else if (props.textarea) {\n this.textarea = props.textarea;\n }\n\n if (this.textarea) {\n if (!element) element = this.textarea;\n }\n\n if (!element) {\n element = document.getElementsByTagName(\"body\")[0];\n }\n if (element && element.tagName === \"TEXTAREA\") {\n this.textarea = element as HTMLTextAreaElement;\n element = this.textarea.parentNode as HTMLElement;\n }\n\n if (this.textarea) {\n this.textarea.style.display = \"none\";\n }\n\n this.placeholder = props.placeholder !== undefined\n ? props.placeholder\n : this.textarea?.placeholder || undefined;\n\n this.undoStack = [];\n this.redoStack = [];\n this.isRestoringHistory = false;\n this.maxHistory = 100;\n\n this.createEditorElement(element, props);\n this.setContent(\n typeof props.content === \"string\"\n ? props.content\n : this.textarea\n ? this.textarea.value\n : \"# Hello TinyMDE!\\nEdit **here**\"\n );\n \n this.e!.addEventListener(\"keydown\", (e) => this.handleUndoRedoKey(e));\n }\n\n get canUndo(): boolean {\n return this.undoStack.length >= 2;\n }\n\n get canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n private pushHistory(): void {\n if (this.isRestoringHistory) return;\n this.pushCurrentState();\n this.redoStack = [];\n }\n\n private pushCurrentState(): void {\n this.undoStack.push({\n content: this.getContent(),\n selection: this.getSelection(),\n anchor: this.getSelection(true),\n });\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n public undo(): void {\n if (this.undoStack.length < 2) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const current = this.undoStack.pop()!;\n this.redoStack.push(current);\n const prev = this.undoStack[this.undoStack.length - 1];\n this.setContent(prev.content);\n if (prev.selection) this.setSelection(prev.selection, prev.anchor);\n this.undoStack.pop();\n this.isRestoringHistory = false;\n }\n\n public redo(): void {\n if (!this.redoStack.length) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const next = this.redoStack.pop()!;\n this.setContent(next.content);\n if (next.selection) this.setSelection(next.selection, next.anchor);\n this.isRestoringHistory = false;\n }\n\n private handleUndoRedoKey(e: KeyboardEvent): void {\n const isMac = editorRegExp.macPlatform.test(navigator.platform);\n const ctrl = isMac ? e.metaKey : e.ctrlKey;\n if (ctrl && !e.altKey) {\n if (e.key === \"z\" || e.key === \"Z\") {\n if (e.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n e.preventDefault();\n } else if (e.key === \"y\" || e.key === \"Y\") {\n this.redo();\n e.preventDefault();\n }\n }\n }\n\n private createEditorElement(element: HTMLElement, props: EditorProps): void {\n if (props && props.editor !== undefined) {\n if (typeof props.editor === 'string') {\n this.e = document.getElementById(props.editor) as HTMLDivElement;\n } else {\n this.e = props.editor as HTMLDivElement;\n }\n } else {\n this.e = document.createElement(\"div\");\n }\n\n this.e.classList.add(\"TinyMDE\");\n this.e.contentEditable = \"true\";\n this.e.style.whiteSpace = \"pre-wrap\";\n (this.e.style as any).webkitUserModify = \"read-write-plaintext-only\";\n\n if (this.placeholder) {\n this.e.setAttribute(\"data-placeholder\", this.placeholder);\n }\n\n if (props.editor === undefined) {\n if (\n this.textarea &&\n this.textarea.parentNode === element &&\n this.textarea.nextSibling\n ) {\n element.insertBefore(this.e, this.textarea.nextSibling);\n } else {\n element.appendChild(this.e);\n }\n }\n\n this.e.addEventListener(\"input\", (e) => this.handleInputEvent(e));\n this.e.addEventListener(\"beforeinput\", (e) => this.handleBeforeInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) => {\n if (this.hasFocus) { this.handleSelectionChangeEvent(e); }\n }\n );\n this.e.addEventListener(\"blur\", () => this.hasFocus = false );\n this.e.addEventListener(\"focus\", () => this.hasFocus = true );\n this.e.addEventListener(\"paste\", (e) => this.handlePaste(e));\n this.e.addEventListener(\"drop\", (e) => this.handleDrop(e));\n this.e.addEventListener(\"click\", (e) => this.handleClick(e));\n this.lineElements = this.e.childNodes;\n }\n\n public setContent(content: string): void {\n while (this.e!.firstChild) {\n this.e!.removeChild(this.e!.firstChild);\n }\n this.lines = content.split(editorRegExp.lineSplit);\n this.lineDirty = [];\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let le = document.createElement(\"div\");\n this.e!.appendChild(le);\n this.lineDirty.push(true);\n }\n this.lineTypes = new Array(this.lines.length);\n this.updateFormatting();\n this.updatePlaceholder();\n this.fireChange();\n if (!this.isRestoringHistory) this.pushHistory();\n }\n\n public getContent(): string {\n return this.lines.join(\"\\n\");\n }\n\n private updatePlaceholder(): void {\n if (!this.placeholder || !this.e) return;\n if (this.getContent() === \"\") {\n this.e.classList.add(\"TinyMDE_empty\");\n } else {\n this.e.classList.remove(\"TinyMDE_empty\");\n }\n }\n\n private updateFormatting(): void {\n this.updateLineTypes();\n this.updateLinkLabels();\n this.applyLineTypes();\n }\n\n private updateLinkLabels(): void {\n this.linkLabels = [];\n for (let l = 0; l < this.lines.length; l++) {\n if (this.lineTypes[l] === \"TMLinkReferenceDefinition\") {\n this.linkLabels.push(\n this.lineCaptures[l][\n lineGrammar.TMLinkReferenceDefinition.labelPlaceholder!\n ]\n );\n }\n }\n }\n\n private replace(replacement: string, capture: RegExpExecArray): string {\n return replacement.replace(editorRegExp.replacementPlaceholder, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else\n return `<span class=\"TMInlineFormatted\">${this.processInlineStyles(\n capture[parseInt(p2)]\n )}</span>`;\n });\n }\n\n private applyLineTypes(): void {\n let lineNum = 0;\n while (lineNum < this.lines.length) {\n // A \"block\" whose text flows across several source lines (a paragraph, a multi-line\n // blockquote, or a list item with wrapped/lazy-continuation lines) is rendered as one\n // inline-parsing unit so that inline styles (bold, italic, ...) can span the soft line\n // breaks between its lines.\n if (this.isInlineGroupLeader(lineNum)) {\n const leaderType = this.lineTypes[lineNum];\n let end = lineNum;\n while (\n end + 1 < this.lines.length &&\n this.isInlineContinuation(end + 1, leaderType)\n ) {\n end++;\n }\n this.applyInlineGroup(lineNum, end);\n lineNum = end + 1;\n } else {\n this.applyLine(lineNum);\n lineNum++;\n }\n }\n }\n\n /** A line that can begin a multi-line inline group (a paragraph-bearing block). */\n private isInlineGroupLeader(lineNum: number): boolean {\n const t = this.lineTypes[lineNum];\n if (t === \"TMPara\" || t === \"TMUL\" || t === \"TMOL\") return true;\n // A blockquote line whose content is blank is a paragraph break inside the quote, so it\n // doesn't start (or join) a group.\n if (t === \"TMBlockquote\") return !this.isBlankBlockquoteContent(lineNum);\n return false;\n }\n\n /** Whether `lineNum` continues the inline group whose leader has type `leaderType`. */\n private isInlineContinuation(lineNum: number, leaderType: string): boolean {\n const t = this.lineTypes[lineNum];\n // A plain paragraph line is a lazy continuation of the preceding block (paragraph, list item,\n // or blockquote). Consecutive list markers (TMUL/TMOL), by contrast, each start a new item\n // and therefore do NOT continue the group.\n if (t === \"TMPara\") return true;\n if (t === \"TMBlockquote\" && leaderType === \"TMBlockquote\")\n return !this.isBlankBlockquoteContent(lineNum);\n return false;\n }\n\n /** True when a blockquote line carries no (non-whitespace) content, e.g. `>` or `> `. */\n private isBlankBlockquoteContent(lineNum: number): boolean {\n const cap = this.lineCaptures[lineNum];\n const content = cap && cap[2] !== undefined ? cap[2] : \"\";\n return editorRegExp.blankContent.test(content);\n }\n\n private applyLine(lineNum: number): void {\n const el = this.lineElements[lineNum] as HTMLElement;\n if (this.lineDirty[lineNum]) {\n let contentHTML = this.replace(\n this.lineReplacements[lineNum],\n this.lineCaptures[lineNum]\n );\n el.className = this.lineTypes[lineNum];\n el.removeAttribute(\"style\");\n el.innerHTML = contentHTML === \"\" ? \"<br />\" : contentHTML;\n // This line is no longer rendered as part of a multi-line inline group.\n delete el.dataset.mlSig;\n }\n el.dataset.lineNum = lineNum.toString();\n }\n\n /**\n * Renders a group of lines [start..end] that together form one inline-parsing unit. The inline\n * content of each line (the `$$N` portion of its replacement — the whole line for a paragraph,\n * the text after the marker for a list item or blockquote) is joined with newlines and parsed as\n * a single unit, so inline styles can span the soft line breaks. The resulting HTML is split back\n * into one fragment per line; any element still open at a line break is closed and re-opened so\n * each line keeps its own well-formed block element. Per-line markers (list bullets, blockquote\n * `>`) are preserved exactly. A single-line group (start === end) renders identically to before.\n */\n private applyInlineGroup(start: number, end: number): void {\n // Signature of every input that affects this group's rendering (line types, replacements and\n // captures — hence the marker prefixes and the inline content). Stored per line element so a\n // group is re-rendered whenever its content, a sibling line, or its boundaries change (e.g. on\n // a split/merge) even if the individual line wasn't separately marked dirty.\n const contents: string[] = [];\n let sigSource = `${end - start}`;\n for (let i = start; i <= end; i++) {\n const idx = this.inlineContentIndex(this.lineReplacements[i]);\n contents.push(this.lineCaptures[i][idx] !== undefined ? this.lineCaptures[i][idx] : \"\");\n sigSource += `\\x1f${this.lineTypes[i]}\\x1f${this.lineReplacements[i]}\\x1f${JSON.stringify(\n this.lineCaptures[i]\n )}`;\n }\n const sig = `${this.hashString(sigSource)}`;\n\n let needsRender = false;\n for (let i = start; i <= end; i++) {\n if (\n this.lineDirty[i] ||\n (this.lineElements[i] as HTMLElement).dataset.mlSig !== sig\n ) {\n needsRender = true;\n break;\n }\n }\n\n if (needsRender) {\n const fragments = this.splitInlineHTMLByLine(\n this.processInlineStyles(contents.join(\"\\n\"))\n );\n for (let i = start; i <= end; i++) {\n const el = this.lineElements[i] as HTMLElement;\n const frag = fragments[i - start] || \"\";\n const contentHTML = this.replaceWithInline(\n this.lineReplacements[i],\n this.lineCaptures[i],\n frag\n );\n el.className = this.lineTypes[i];\n el.removeAttribute(\"style\");\n el.innerHTML = contentHTML === \"\" ? \"<br />\" : contentHTML;\n el.dataset.mlSig = sig;\n }\n }\n\n for (let i = start; i <= end; i++) {\n (this.lineElements[i] as HTMLElement).dataset.lineNum = i.toString();\n }\n }\n\n /** Index of the inline-content placeholder (`$$N`) in a line replacement, or 0 if none. */\n private inlineContentIndex(replacement: string): number {\n const m = editorRegExp.inlineContentPlaceholder.exec(replacement);\n return m ? parseInt(m[1]) : 0;\n }\n\n /**\n * Like replace(), but uses a pre-computed inline fragment for the `$$N` (inline content)\n * placeholder instead of inline-parsing the capture itself. Used for multi-line groups where the\n * inline content was parsed jointly across all lines.\n */\n private replaceWithInline(\n replacement: string,\n capture: RegExpExecArray,\n inlineFragment: string\n ): string {\n return replacement.replace(editorRegExp.replacementPlaceholder, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else return `<span class=\"TMInlineFormatted\">${inlineFragment}</span>`;\n });\n }\n\n /**\n * Splits inline HTML produced for a joined multi-line paragraph back into one fragment per\n * source line (fragments are separated by the `\\n` markers emitted by processInlineStyles).\n * Inline elements that are still open at a line break are closed at the end of the fragment and\n * re-opened at the start of the next one, so that every fragment is independently well-formed\n * while the formatting visually continues across the lines.\n */\n private splitInlineHTMLByLine(html: string): string[] {\n const fragments: string[] = [];\n const openTags: string[] = []; // full opening-tag strings of currently open elements\n let current = \"\";\n let i = 0;\n while (i < html.length) {\n const ch = html[i];\n if (ch === \"\\n\") {\n // Close currently open tags (in reverse) to finish this line's fragment ...\n for (let t = openTags.length - 1; t >= 0; t--) {\n current += `</${this.inlineTagName(openTags[t])}>`;\n }\n fragments.push(current);\n // ... and re-open them (in order) at the start of the next line's fragment.\n current = openTags.join(\"\");\n i++;\n } else if (ch === \"<\") {\n const close = html.indexOf(\">\", i);\n if (close < 0) {\n // Defensive: malformed output, emit the remainder verbatim.\n current += html.substr(i);\n break;\n }\n const tag = html.substring(i, close + 1);\n current += tag;\n if (tag[1] === \"/\") {\n openTags.pop();\n } else if (tag[tag.length - 2] !== \"/\") {\n // Opening tag that isn't self-closing.\n openTags.push(tag);\n }\n i = close + 1;\n } else {\n current += ch;\n i++;\n }\n }\n fragments.push(current);\n return fragments;\n }\n\n private inlineTagName(openTag: string): string {\n const m = editorRegExp.inlineTagName.exec(openTag);\n return m ? m[1] : \"span\";\n }\n\n private hashString(s: string): number {\n let h = 5381;\n for (let i = 0; i < s.length; i++) {\n h = (((h << 5) + h) ^ s.charCodeAt(i)) >>> 0;\n }\n return h;\n }\n\n private updateLineTypes(): void {\n let codeBlockType: string | false = false;\n let codeBlockSeqLength = 0;\n let htmlBlock: HTMLBlockRule | false = false;\n\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let lineType = \"TMPara\";\n let lineCapture: RegExpExecArray = [this.lines[lineNum]] as RegExpExecArray;\n let lineReplacement = \"$$0\";\n\n // Check ongoing code blocks\n if (codeBlockType === \"TMCodeFenceBacktickOpen\") {\n let capture = lineGrammar.TMCodeFenceBacktickClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceBacktickClose\";\n lineReplacement = lineGrammar.TMCodeFenceBacktickClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeBacktick\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n } else if (codeBlockType === \"TMCodeFenceTildeOpen\") {\n let capture = lineGrammar.TMCodeFenceTildeClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceTildeClose\";\n lineReplacement = lineGrammar.TMCodeFenceTildeClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeTilde\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n }\n\n // Check HTML block types\n if (lineType === \"TMPara\" && htmlBlock === false) {\n for (let htmlBlockType of htmlBlockGrammar) {\n if (this.lines[lineNum].match(htmlBlockType.start)) {\n if (\n htmlBlockType.paraInterrupt ||\n lineNum === 0 ||\n !(\n this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\"\n )\n ) {\n htmlBlock = htmlBlockType;\n break;\n }\n }\n }\n }\n\n if (htmlBlock !== false) {\n lineType = \"TMHTMLBlock\";\n lineReplacement = '<span class=\"TMHTMLContent\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n\n if (htmlBlock.end) {\n if (this.lines[lineNum].match(htmlBlock.end)) {\n htmlBlock = false;\n }\n } else {\n if (\n lineNum === this.lines.length - 1 ||\n this.lines[lineNum + 1].match(lineGrammar.TMBlankLine.regexp)\n ) {\n htmlBlock = false;\n }\n }\n }\n\n // Check all regexps if we haven't applied one of the code block types\n if (lineType === \"TMPara\") {\n for (let type in lineGrammar) {\n if (lineGrammar[type].regexp) {\n let capture = lineGrammar[type].regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = type;\n lineReplacement = lineGrammar[type].replacement;\n lineCapture = capture;\n break;\n }\n }\n }\n }\n\n // If we've opened a code block, remember that\n if (lineType === \"TMCodeFenceBacktickOpen\" || lineType === \"TMCodeFenceTildeOpen\") {\n codeBlockType = lineType;\n codeBlockSeqLength = lineCapture.groups![\"seq\"].length;\n }\n\n // Link reference definition and indented code can't interrupt a paragraph\n if (\n (lineType === \"TMIndentedCode\" || lineType === \"TMLinkReferenceDefinition\") &&\n lineNum > 0 &&\n (this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\")\n ) {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n\n // Setext H2 markers that can also be interpreted as an empty list item should be regarded as such\n if (lineType === \"TMSetextH2Marker\") {\n let capture = lineGrammar.TMUL.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMUL\";\n lineReplacement = lineGrammar.TMUL.replacement;\n lineCapture = capture;\n }\n }\n\n // Setext headings are only valid if preceded by a paragraph\n if (lineType === \"TMSetextH1Marker\" || lineType === \"TMSetextH2Marker\") {\n if (lineNum === 0 || this.lineTypes[lineNum - 1] !== \"TMPara\") {\n let capture = lineGrammar.TMHR.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMHR\";\n lineCapture = capture;\n lineReplacement = lineGrammar.TMHR.replacement;\n } else {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n } else {\n let headingLine = lineNum - 1;\n const headingLineType = lineType === \"TMSetextH1Marker\" ? \"TMSetextH1\" : \"TMSetextH2\";\n do {\n if (this.lineTypes[headingLine] !== headingLineType) {\n this.lineTypes[headingLine] = headingLineType;\n this.lineDirty[headingLine] = true;\n }\n this.lineReplacements[headingLine] = \"$$0\";\n this.lineCaptures[headingLine] = [this.lines[headingLine]] as RegExpExecArray;\n headingLine--;\n } while (headingLine >= 0 && this.lineTypes[headingLine] === \"TMPara\");\n }\n }\n\n // GFM task list item: a list item whose content begins with a checkbox marker `[ ]`, `[x]`\n // or `[X]` followed by whitespace (or the end of the line). The brackets and separator stay\n // as ordinary TMMark text; only the inner character is rendered as a checkbox (via CSS), so\n // the line's text content still equals its source and the cursor navigates it normally.\n if (lineType === \"TMUL\" || lineType === \"TMOL\") {\n const content = lineCapture[2] !== undefined ? lineCapture[2] : \"\";\n const task = editorRegExp.taskListItem.exec(content);\n if (task) {\n const checked = task[2] !== \" \"; // [x] / [X] are checked, [ ] is not\n const bulletClass = lineType === \"TMUL\" ? \"TMMark_TMUL\" : \"TMMark_TMOL\";\n const boxClass = checked\n ? \"TMCheckbox TMCheckbox_checked\"\n : \"TMCheckbox TMCheckbox_unchecked\";\n // Synthetic capture: [full, bullet, \"[\", inner, \"]\", separator, inline content]. The\n // inline content stays the last `$$N` group so inlineContentIndex()/applyInlineGroup()\n // (and thus multi-line continuation) behave exactly as for a plain list item.\n lineCapture = [\n lineCapture[0],\n lineCapture[1],\n task[1],\n task[2],\n task[3],\n task[4],\n task[5],\n ] as unknown as RegExpExecArray;\n lineReplacement =\n `<span class=\"TMMark ${bulletClass}\">$1</span>` +\n `<span class=\"TMMark TMMark_TMTask\">$2</span>` +\n `<span class=\"${boxClass}\">$3</span>` +\n `<span class=\"TMMark TMMark_TMTask\">$4</span>` +\n `<span class=\"TMMark TMMark_TMTask\">$5</span>` +\n `$$6`;\n }\n }\n\n if (this.lineTypes[lineNum] !== lineType) {\n this.lineTypes[lineNum] = lineType;\n this.lineDirty[lineNum] = true;\n }\n this.lineReplacements[lineNum] = lineReplacement;\n this.lineCaptures[lineNum] = lineCapture;\n }\n }\n\n public getSelection(getAnchor: boolean = false): Position | null {\n const selection = window.getSelection();\n let startNode = getAnchor ? selection!.anchorNode : selection!.focusNode;\n if (!startNode) return null;\n let offset = getAnchor ? selection!.anchorOffset : selection!.focusOffset;\n if (startNode === this.e) {\n if (offset < this.lines.length)\n return {\n row: offset,\n col: 0,\n };\n return {\n row: offset - 1,\n col: this.lines[offset - 1].length,\n };\n }\n\n let col = this.computeColumn(startNode, offset);\n if (col === null) return null;\n\n let node = startNode;\n while (node.parentElement !== this.e) {\n node = node.parentElement!;\n }\n\n let row = 0;\n // If the node doesn't have a previous sibling, it must be the first line\n if (node.previousSibling) {\n const currentLineNumData = (node as HTMLElement).dataset?.lineNum;\n const previousLineNumData = (node.previousSibling as HTMLElement).dataset?.lineNum;\n\n if (currentLineNumData && previousLineNumData) {\n const currentLineNum = parseInt(currentLineNumData);\n const previousLineNum = parseInt(previousLineNumData);\n if (currentLineNum === previousLineNum + 1) {\n row = currentLineNum;\n } else {\n // If the current line is NOT the previous line + 1, then either \n // the current line got split in two or merged with the previous line\n // Either way, we need to recalculate the row number\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n }\n }\n \n return { row: row, col: col };\n }\n\n public setSelection(focus: Position, anchor: Position | null = null): void {\n if (!focus) return;\n\n let { node: focusNode, offset: focusOffset } = this.computeNodeAndOffset(\n focus.row,\n focus.col,\n anchor ? anchor.row === focus.row && anchor.col > focus.col : false\n );\n let anchorNode = null,\n anchorOffset = null;\n if (anchor && (anchor.row !== focus.row || anchor.col !== focus.col)) {\n let { node, offset } = this.computeNodeAndOffset(\n anchor.row,\n anchor.col,\n focus.row === anchor.row && focus.col > anchor.col\n );\n anchorNode = node;\n anchorOffset = offset;\n }\n\n let windowSelection = window.getSelection();\n windowSelection!.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorNode || focusNode,\n anchorNode ? anchorOffset! : focusOffset\n );\n }\n\n public restoreLastSelection(): boolean {\n if (this.lastSelection && this.lastSelection.focus) {\n this.setSelection(this.lastSelection.focus, this.lastSelection.anchor);\n return true;\n }\n return false;\n }\n\n public paste(text: string, anchor: Position | null = null, focus: Position | null = null): void {\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) focus = this.getSelection(false);\n let beginning: Position, end: Position;\n if (!focus) {\n focus = {\n row: this.lines.length - 1,\n col: this.lines[this.lines.length - 1].length,\n };\n }\n if (!anchor) {\n anchor = focus;\n }\n if (\n anchor.row < focus.row ||\n (anchor.row === focus.row && anchor.col <= focus.col)\n ) {\n beginning = anchor;\n end = focus;\n } else {\n beginning = focus;\n end = anchor;\n }\n let insertedLines = text.split(editorRegExp.lineSplit);\n let lineBefore = this.lines[beginning.row].substr(0, beginning.col);\n let lineEnd = this.lines[end.row].substr(end.col);\n insertedLines[0] = lineBefore.concat(insertedLines[0]);\n let endColPos = insertedLines[insertedLines.length - 1].length;\n insertedLines[insertedLines.length - 1] = insertedLines[insertedLines.length - 1].concat(lineEnd);\n this.spliceLines(beginning.row, 1 + end.row - beginning.row, insertedLines);\n focus.row = beginning.row + insertedLines.length - 1;\n focus.col = endColPos;\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\n }\n\n public wrapSelection(pre: string, post: string, focus: Position | null = null, anchor: Position | null = null): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus || !anchor || focus.row !== anchor.row) return;\n this.lineDirty[focus.row] = true;\n\n const startCol = focus.col < anchor.col ? focus.col : anchor.col;\n const endCol = focus.col < anchor.col ? anchor.col : focus.col;\n const left = this.lines[focus.row].substr(0, startCol).concat(pre);\n const mid = endCol === startCol ? \"\" : this.lines[focus.row].substr(startCol, endCol - startCol);\n const right = post.concat(this.lines[focus.row].substr(endCol));\n this.lines[focus.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus.col = anchor.col + mid.length;\n\n this.updateFormatting();\n this.setSelection(focus, anchor);\n }\n\n public addEventListener<T extends EventType>(\n type: T,\n listener: T extends 'change' ? EventHandler<ChangeEvent> :\n T extends 'selection' ? EventHandler<SelectionEvent> :\n T extends 'drop' ? EventHandler<DropEvent> : never\n ): void {\n if (type.match(editorRegExp.changeEvent)) {\n this.listeners.change.push(listener as EventHandler<ChangeEvent>);\n }\n if (type.match(editorRegExp.selectionEvent)) {\n this.listeners.selection.push(listener as EventHandler<SelectionEvent>);\n }\n if (type.match(editorRegExp.dropEvent)) {\n this.listeners.drop.push(listener as EventHandler<DropEvent>);\n }\n }\n\n private fireChange(): void {\n this.updatePlaceholder();\n if (!this.textarea && !this.listeners.change.length) return;\n const content = this.getContent();\n if (this.textarea) this.textarea.value = content;\n for (let listener of this.listeners.change) {\n listener({\n content: content,\n linesDirty: [...this.lineDirty],\n });\n }\n }\n\n /**\n * beforeinput handler, exclusively to handle insertParagraph,\n * insertLineBreak, deleteContentBackward, and deleteContentForward events.\n * These used to be handled in the input event, but that caused issues with\n * Firefox where the input event would be sometimes not be fired for these\n * input types. deleteContentBackward/Forward are also handled here to fix a\n * Firefox-specific bug (#151) where backspacing on an empty line would not\n * remove it, because Firefox only removes the <br> inside the empty <div>\n * rather than merging the divs, and fixNodeHierarchy() would then re-add the\n * <br>, resulting in a no-op.\n * @param event The input event\n * @returns nothing\n */\n private handleBeforeInputEvent(event: Event): void {\n const beforeInputEvent = event as InputEvent;\n\n // Handle cross-line delete operations (backspace at col 0, delete at end of line)\n if (\n beforeInputEvent.inputType === \"deleteContentBackward\" ||\n beforeInputEvent.inputType === \"deleteContentForward\"\n ) {\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n if (!focus || !anchor) return;\n\n const isBackspace = beforeInputEvent.inputType === \"deleteContentBackward\";\n\n // Only intercept collapsed selections at line boundaries\n if (focus.row === anchor.row && focus.col === anchor.col) {\n if (isBackspace && focus.col === 0 && focus.row > 0) {\n // Backspace at start of line: merge current line into end of previous\n event.preventDefault();\n if (!this.isRestoringHistory) this.pushHistory();\n this.clearDirtyFlag();\n const prevLineLen = this.lines[focus.row - 1].length;\n this.lines[focus.row - 1] = this.lines[focus.row - 1] + this.lines[focus.row];\n this.lineDirty[focus.row - 1] = true;\n this.spliceLines(focus.row, 1);\n this.updateFormatting();\n this.setSelection({ row: focus.row - 1, col: prevLineLen });\n this.fireChange();\n return;\n }\n if (!isBackspace && focus.col === this.lines[focus.row].length && focus.row < this.lines.length - 1) {\n // Delete at end of line: merge next line into current\n event.preventDefault();\n if (!this.isRestoringHistory) this.pushHistory();\n this.clearDirtyFlag();\n const currentLineLen = this.lines[focus.row].length;\n this.lines[focus.row] = this.lines[focus.row] + this.lines[focus.row + 1];\n this.lineDirty[focus.row] = true;\n this.spliceLines(focus.row + 1, 1);\n this.updateFormatting();\n this.setSelection({ row: focus.row, col: currentLineLen });\n this.fireChange();\n return;\n }\n }\n // For within-line deletes or non-collapsed selections, let the browser handle it\n return;\n }\n\n if (\n beforeInputEvent.inputType !== \"insertParagraph\" &&\n beforeInputEvent.inputType !== \"insertLineBreak\"\n ) return;\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n this.clearDirtyFlag();\n\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n\n if (!focus || !anchor) return;\n \n // If focus and anchor are in different lines, simply remove everything \n // after the beginning of the selection and before the end of the selection\n // and remove any lines in between\n if (focus.row !== anchor.row) {\n const beginning = focus.row < anchor.row ? focus : anchor;\n const end = focus.row < anchor.row ? anchor : focus;\n this.lines[beginning.row] = this.lines[beginning.row].substring(0, beginning.col);\n this.lines[end.row] = this.lines[end.row].substring(end.col);\n this.spliceLines(beginning.row + 1, end.row - beginning.row - 1);\n focus.row = beginning.row + 1;\n focus.col = 0;\n } else {\n let continuableType: string | false = false;\n switch (this.lineTypes[focus.row]) {\n case \"TMUL\":\n continuableType = \"TMUL\";\n break;\n case \"TMOL\":\n continuableType = \"TMOL\";\n break;\n case \"TMIndentedCode\":\n continuableType = \"TMIndentedCode\";\n break;\n }\n \n const lineBeforeBreak = this.lines[focus.row].substring(0, focus.col <= anchor.col ? focus.col : anchor.col);\n const lineAfterBreak = this.lines[focus.row].substring(focus.col <= anchor.col ? anchor.col : focus.col);\n this.spliceLines(focus.row, 1, [lineBeforeBreak, lineAfterBreak]);\n\n focus.row += 1;\n focus.col = 0;\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[focus.row - 1]);\n if (capture) {\n if (capture[2]) {\n if (continuableType === \"TMOL\") {\n capture[1] = capture[1].replace(editorRegExp.orderedListNumber, (result) => {\n return (parseInt(result) + 1).toString();\n });\n }\n this.lines[focus.row] = `${capture[1]}${this.lines[focus.row]}`;\n this.lineDirty[focus.row] = true;\n focus.col = capture[1].length;\n } else {\n this.lines[focus.row - 1] = \"\";\n this.lineDirty[focus.row - 1] = true;\n }\n }\n }\n }\n this.updateFormatting();\n this.setSelection(focus);\n\n // Scroll the element containing the selection into view\n if (focus && focus.row < this.lineElements.length) {\n (this.lineElements[focus.row] as HTMLElement).scrollIntoView({\n block: 'nearest',\n inline: 'nearest'\n });\n }\n\n this.fireChange();\n }\n\n private handleInputEvent(event: Event): void {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === \"insertCompositionText\") return;\n if (!this.isRestoringHistory) this.pushHistory();\n\n let focus = this.getSelection();\n\n if ((inputEvent.inputType === \"insertParagraph\" || inputEvent.inputType === \"insertLineBreak\") && focus) {\n // This should never happen since these are handled by the beforeinput handler\n return;\n } else {\n if (!this.e!.firstChild) {\n this.e!.innerHTML = '<div class=\"TMBlankLine\"><br></div>';\n } else {\n this.fixNodeHierarchy();\n }\n this.updateLineContentsAndFormatting();\n }\n if (focus) {\n this.setSelection(focus);\n }\n\n this.fireChange();\n }\n\n private handleSelectionChangeEvent(_e: Event): void {\n this.fireSelection();\n }\n\n private handlePaste(event: ClipboardEvent): void {\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n\n let text = (event as any).clipboardData.getData(\"text/plain\");\n this.paste(text);\n }\n\n private handleDrop(event: DragEvent): void {\n event.preventDefault();\n this.fireDrop(event.dataTransfer!);\n }\n\n /**\n * Toggles a task list checkbox when its rendered box is clicked. Only the single inner character\n * of the marker (`[ ]` -> `[x]` and back) is changed; the edit is length-preserving, recorded in\n * the undo history, and fires a `change` event, mirroring setCommandState's line-edit flow.\n */\n private handleClick(event: MouseEvent): void {\n const target = event.target as HTMLElement | null;\n const box = target && target.closest ? (target.closest(\".TMCheckbox\") as HTMLElement | null) : null;\n if (!box) return; // Not a checkbox click — let the default caret placement happen.\n\n // Walk up to the line element (a direct child of the editor) to find its source row.\n let lineEl: HTMLElement | null = box;\n while (lineEl && lineEl.parentNode !== this.e) {\n lineEl = lineEl.parentNode as HTMLElement | null;\n }\n if (!lineEl || lineEl.dataset.lineNum === undefined) return;\n const row = parseInt(lineEl.dataset.lineNum, 10);\n if (isNaN(row) || row < 0 || row >= this.lines.length) return;\n\n const col = this.computeColumn(box, 0);\n if (col === null) return;\n const ch = this.lines[row].charAt(col);\n if (ch !== \" \" && ch !== \"x\" && ch !== \"X\") return; // Defensive: not actually a checkbox char.\n\n event.preventDefault();\n\n if (!this.isRestoringHistory) this.pushHistory();\n this.clearDirtyFlag();\n const replacement = ch === \" \" ? \"x\" : \" \";\n this.lines[row] = this.lines[row].substr(0, col) + replacement + this.lines[row].substr(col + 1);\n this.lineDirty[row] = true;\n this.updateFormatting();\n this.fireChange();\n }\n\n public processInlineStyles(originalString: string): string {\n let processed = \"\";\n let stack: Array<{delimiter: string, delimString: string, count: number, output: string}> = [];\n let offset = 0;\n let string = originalString;\n\n outer: while (string) {\n // Soft line break: when a paragraph that spans several source lines is parsed as one\n // joined string, the lines are separated by \\n. Preserve it as a newline marker in the\n // output; splitInlineHTMLByLine() later splits the result back into per-line fragments.\n // No inline rule starts on a newline (NotTriggerChar and `.` both exclude it), so handling\n // it here keeps the tokenizer from stalling.\n if (string.charCodeAt(0) === 10) {\n processed += \"\\n\";\n string = string.substr(1);\n offset += 1;\n continue outer;\n }\n\n // Process simple rules (non-delimiter)\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n if (this.mergedInlineGrammar[rule]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(editorRegExp.inlineReplacementPlaceholder, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n \n // Process custom inline grammar rules\n for (let rule in this.customInlineGrammar) {\n if (rule !== \"escape\" && rule !== \"code\" && rule !== \"autolink\" && rule !== \"html\" && rule !== \"linkOpen\" && rule !== \"imageOpen\" && rule !== \"linkLabel\" && rule !== \"default\") {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(editorRegExp.inlineReplacementPlaceholder, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n\n // Check for GFM extended (non-delimited) autolinks: bare URLs (www.…, http(s)://…, ftp://…),\n // email addresses, and mailto:/xmpp: links. These are only recognized at the start of the\n // string or immediately after whitespace or one of the delimiters `*`, `_`, `~`, `(`.\n const precedingChar = offset > 0 ? originalString[offset - 1] : \"\";\n if (precedingChar === \"\" || editorRegExp.autolinkPrecedingChar.test(precedingChar)) {\n let autolink = this.parseAutolinkExtension(string);\n if (autolink) {\n processed = `${processed}${autolink.output}`;\n string = string.substr(autolink.charCount);\n offset += autolink.charCount;\n continue outer;\n }\n }\n\n // Check for links / images\n let potentialLink = string.match(this.mergedInlineGrammar.linkOpen.regexp);\n let potentialImage = string.match(this.mergedInlineGrammar.imageOpen.regexp);\n if (potentialImage || potentialLink) {\n let result = this.parseLinkOrImage(string, !!potentialImage);\n if (result) {\n processed = `${processed}${result.output}`;\n string = string.substr(result.charCount);\n offset += result.charCount;\n continue outer;\n }\n }\n\n // Check for em / strong delimiters\n let cap = editorRegExp.emphasisDelimiter.exec(string);\n if (cap) {\n let delimCount = cap[0].length;\n const delimString = cap[0];\n const currentDelimiter = cap[0][0];\n\n string = string.substr(cap[0].length);\n\n const preceding = offset > 0 ? originalString.substr(0, offset) : \" \";\n const following = offset + cap[0].length < originalString.length ? string : \" \";\n\n const punctuationFollows = following.match(punctuationLeading);\n const punctuationPrecedes = preceding.match(punctuationTrailing);\n const whitespaceFollows = following.match(editorRegExp.leadingWhitespace);\n const whitespacePrecedes = preceding.match(editorRegExp.trailingWhitespace);\n\n let canOpen = !whitespaceFollows && (!punctuationFollows || !!whitespacePrecedes || !!punctuationPrecedes);\n let canClose = !whitespacePrecedes && (!punctuationPrecedes || !!whitespaceFollows || !!punctuationFollows);\n\n if (currentDelimiter === \"_\" && canOpen && canClose) {\n canOpen = !!punctuationPrecedes;\n canClose = !!punctuationFollows;\n }\n\n if (canClose) {\n let stackPointer = stack.length - 1;\n while (delimCount && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === currentDelimiter) {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n if (delimCount >= 2 && stack[stackPointer].count >= 2) {\n processed = `<span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span><strong class=\"TMStrong\">${processed}</strong><span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span>`;\n delimCount -= 2;\n stack[stackPointer].count -= 2;\n } else {\n processed = `<span class=\"TMMark\">${currentDelimiter}</span><em class=\"TMEm\">${processed}</em><span class=\"TMMark\">${currentDelimiter}</span>`;\n delimCount -= 1;\n stack[stackPointer].count -= 1;\n }\n\n if (stack[stackPointer].count === 0) {\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n stackPointer--;\n }\n } else {\n stackPointer--;\n }\n }\n }\n\n if (delimCount && canOpen) {\n stack.push({\n delimiter: currentDelimiter,\n delimString: delimString,\n count: delimCount,\n output: processed,\n });\n processed = \"\";\n delimCount = 0;\n }\n\n if (delimCount) {\n processed = `${processed}${delimString.substr(0, delimCount)}`;\n }\n\n offset += cap[0].length;\n continue outer;\n }\n\n // Check for strikethrough delimiter\n cap = editorRegExp.strikethroughDelimiter.exec(string);\n if (cap) {\n let consumed = false;\n let stackPointer = stack.length - 1;\n while (!consumed && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === \"~\") {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n processed = `<span class=\"TMMark\">~~</span><del class=\"TMStrikethrough\">${processed}</del><span class=\"TMMark\">~~</span>`;\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n consumed = true;\n } else {\n stackPointer--;\n }\n }\n\n if (!consumed) {\n stack.push({\n delimiter: \"~\",\n delimString: \"~~\",\n count: 2,\n output: processed,\n });\n processed = \"\";\n }\n\n offset += cap[0].length;\n string = string.substr(cap[0].length);\n continue outer;\n }\n\n // Process 'default' rule\n cap = this.mergedInlineGrammar.default.regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar.default.replacement.replace(editorRegExp.inlineReplacementPlaceholder, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n throw \"Infinite loop!\";\n }\n\n while (stack.length) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n return processed;\n }\n\n private computeColumn(startNode: Node, offset: number): number | null {\n let node = startNode;\n let col: number;\n while (node && node.parentNode !== this.e) {\n node = node.parentNode!;\n }\n if (node === null) return null;\n\n if (startNode.nodeType === Node.TEXT_NODE || offset === 0) {\n col = offset;\n node = startNode;\n } else if (offset > 0) {\n node = startNode.childNodes[offset - 1];\n col = node.textContent!.length;\n } else {\n col = 0;\n node = startNode;\n }\n while (node.parentNode !== this.e) {\n if (node.previousSibling) {\n node = node.previousSibling;\n col += node.textContent!.length;\n } else {\n node = node.parentNode as unknown as ChildNode;\n }\n }\n return col;\n }\n\n private computeNodeAndOffset(row: number, col: number, bindRight: boolean = false): {node: Node, offset: number} {\n if (row >= this.lineElements.length) {\n row = this.lineElements.length - 1;\n col = this.lines[row].length;\n }\n if (col > this.lines[row].length) {\n col = this.lines[row].length;\n }\n const parentNode = this.lineElements[row] as HTMLElement;\n let node = parentNode.firstChild;\n\n let childrenComplete = false;\n let rv = {\n node: parentNode.firstChild ? parentNode.firstChild : parentNode,\n offset: 0,\n };\n\n while (node !== parentNode) {\n if (!childrenComplete && node!.nodeType === Node.TEXT_NODE) {\n if (node!.nodeValue!.length >= col) {\n if (bindRight && node!.nodeValue!.length === col) {\n rv = { node: node!, offset: col };\n col = 0;\n } else {\n return { node: node!, offset: col };\n }\n } else {\n col -= node!.nodeValue!.length;\n }\n }\n if (!childrenComplete && node!.firstChild) {\n node = node!.firstChild;\n } else if (node!.nextSibling) {\n childrenComplete = false;\n node = node!.nextSibling;\n } else {\n childrenComplete = true;\n node = node!.parentNode as unknown as ChildNode;\n }\n }\n\n return rv;\n }\n\n private updateLineContentsAndFormatting(): void {\n this.clearDirtyFlag();\n this.updateLineContents();\n this.updateFormatting();\n }\n\n private clearDirtyFlag(): void {\n this.lineDirty = new Array(this.lines.length);\n for (let i = 0; i < this.lineDirty.length; i++) {\n this.lineDirty[i] = false;\n }\n }\n\n private updateLineContents(): void {\n let lineDelta = this.e!.childElementCount - this.lines.length;\n if (lineDelta) {\n let firstChangedLine = 0;\n while (\n firstChangedLine <= this.lines.length &&\n firstChangedLine <= this.lineElements.length &&\n this.lineElements[firstChangedLine] &&\n this.lines[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).textContent &&\n this.lineTypes[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).className\n ) {\n firstChangedLine++;\n }\n\n let lastChangedLine = -1;\n while (\n -lastChangedLine < this.lines.length &&\n -lastChangedLine < this.lineElements.length &&\n this.lines[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).textContent &&\n this.lineTypes[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).className\n ) {\n lastChangedLine--;\n }\n\n let linesToDelete = this.lines.length + lastChangedLine + 1 - firstChangedLine;\n if (linesToDelete < -lineDelta) linesToDelete = -lineDelta;\n if (linesToDelete < 0) linesToDelete = 0;\n\n let linesToAdd = [];\n for (let l = 0; l < linesToDelete + lineDelta; l++) {\n linesToAdd.push((this.lineElements[firstChangedLine + l] as HTMLElement).textContent || \"\");\n }\n this.spliceLines(firstChangedLine, linesToDelete, linesToAdd, false);\n } else {\n for (let line = 0; line < this.lineElements.length; line++) {\n let e = this.lineElements[line] as HTMLElement;\n let ct = e.textContent || \"\";\n if (this.lines[line] !== ct || this.lineTypes[line] !== e.className) {\n this.lines[line] = ct;\n this.lineTypes[line] = e.className;\n this.lineDirty[line] = true;\n }\n }\n }\n }\n\n private spliceLines(\n startLine: number,\n linesToDelete: number = 0,\n linesToInsert: string[] = [],\n adjustLineElements: boolean = true\n ): void {\n if (adjustLineElements) {\n for (let i = 0; i < linesToDelete; i++) {\n this.e!.removeChild(this.e!.childNodes[startLine]);\n }\n }\n\n let insertedBlank = [];\n let insertedDirty = [];\n\n for (let i = 0; i < linesToInsert.length; i++) {\n insertedBlank.push(\"\");\n insertedDirty.push(true);\n if (adjustLineElements) {\n if (this.e!.childNodes[startLine])\n this.e!.insertBefore(document.createElement(\"div\"), this.e!.childNodes[startLine]);\n else this.e!.appendChild(document.createElement(\"div\"));\n }\n }\n\n this.lines.splice(startLine, linesToDelete, ...linesToInsert);\n this.lineTypes.splice(startLine, linesToDelete, ...insertedBlank);\n this.lineDirty.splice(startLine, linesToDelete, ...insertedDirty);\n }\n\n private fixNodeHierarchy(): void {\n const originalChildren = Array.from(this.e!.childNodes);\n\n const replaceChild = (child: Node, ...newChildren: Node[]) => {\n const parent = child.parentElement!;\n const nextSibling = child.nextSibling;\n parent.removeChild(child);\n newChildren.forEach((newChild) =>\n nextSibling ? parent.insertBefore(newChild, nextSibling) : parent.appendChild(newChild)\n );\n };\n\n originalChildren.forEach((child) => {\n if (child.nodeType !== Node.ELEMENT_NODE || (child as HTMLElement).tagName !== \"DIV\") {\n const divWrapper = document.createElement(\"div\");\n replaceChild(child, divWrapper);\n divWrapper.appendChild(child);\n } else if (child.childNodes.length === 0) {\n child.appendChild(document.createElement(\"br\"));\n } else {\n const grandChildren = Array.from(child.childNodes);\n if (\n grandChildren.some(\n (grandChild) =>\n grandChild.nodeType === Node.ELEMENT_NODE && (grandChild as HTMLElement).tagName === \"DIV\"\n )\n ) {\n return replaceChild(child, ...grandChildren);\n }\n }\n });\n }\n\n /**\n * Attempts to parse a GFM extended (non-delimited) autolink at the start of `string`: a bare URL\n * (`www.…`, `http://…`, `https://…`, `ftp://…`), an email address, or a `mailto:`/`xmpp:` link.\n * The caller is responsible for the preceding-character boundary check. On success, returns the\n * rendered HTML (the matched text wrapped in a `TMAutolink` span, exactly like the content of an\n * angle-bracketed autolink) and the number of source characters consumed; otherwise `false`.\n */\n public parseAutolinkExtension(string: string): {output: string, charCount: number} | false {\n const match = this.matchExtendedAutolink(string);\n if (!match) return false;\n return {\n output: `<span class=\"TMAutolink\">${htmlescape(match)}</span>`,\n charCount: match.length,\n };\n }\n\n /** Returns the longest extended-autolink substring at the start of `string`, or `false`. */\n private matchExtendedAutolink(string: string): string | false {\n // --- Bare URL / www autolink -----------------------------------------------------------------\n // www. is treated as part of the domain; an explicit scheme is stripped before the domain.\n const schemeCap = editorRegExp.autolinkScheme.exec(string);\n const isWww = editorRegExp.autolinkWww.test(string);\n if (schemeCap || isWww) {\n const prefixLen = schemeCap ? schemeCap[0].length : 0;\n const afterPrefix = string.substr(prefixLen);\n // A valid domain is dot-separated segments of alphanumerics, `_` and `-`, with at least one\n // dot and no underscore in the last two segments.\n const domainCap = editorRegExp.autolinkDomain.exec(afterPrefix);\n if (domainCap && this.isValidAutolinkDomain(domainCap[0])) {\n // After the domain, any run of non-space, non-`<` characters forms the path/query/fragment.\n const pathCap = editorRegExp.autolinkPath.exec(afterPrefix.substr(domainCap[0].length));\n const link = string.substr(0, prefixLen + domainCap[0].length + (pathCap ? pathCap[0].length : 0));\n const trimmed = this.trimAutolinkTrailing(link);\n // Guard against trailing punctuation trimming having eaten into the domain.\n if (trimmed.length >= prefixLen + domainCap[0].length) return trimmed;\n }\n }\n\n // --- mailto: / xmpp: autolink ----------------------------------------------------------------\n const protoCap = editorRegExp.autolinkProtocol.exec(string);\n if (protoCap) {\n const emailCap = this.matchAutolinkEmail(string.substr(protoCap[0].length));\n if (emailCap) {\n // xmpp addresses may carry a `/resource` suffix.\n let extra = \"\";\n if (editorRegExp.autolinkXmpp.test(string)) {\n const resCap = editorRegExp.autolinkXmppResource.exec(\n string.substr(protoCap[0].length + emailCap.length)\n );\n if (resCap) extra = resCap[0];\n }\n return protoCap[0] + emailCap + extra;\n }\n }\n\n // --- Bare email autolink ---------------------------------------------------------------------\n const email = this.matchAutolinkEmail(string);\n if (email) return email;\n\n return false;\n }\n\n /** GFM domain validity: at least one dot and no underscore in the last two segments. */\n private isValidAutolinkDomain(domain: string): boolean {\n const segments = domain.split(\".\");\n if (segments.length < 2) return false;\n return !segments.slice(-2).some((seg) => seg.indexOf(\"_\") >= 0);\n }\n\n /** Matches a bare email address at the start of `string` per the GFM extension, or `false`. */\n private matchAutolinkEmail(string: string): string | false {\n // Local part: alphanumerics plus `.`, `-`, `_`, `+`. Domain: dot-separated labels of\n // alphanumerics, `-` and `_`, with at least one dot and no `-`/`_` as the final character.\n const cap = editorRegExp.autolinkEmail.exec(string);\n if (!cap) return false;\n let email = cap[0];\n while (email.length && editorRegExp.emailTrailingChar.test(email)) email = email.substr(0, email.length - 1);\n // Must still end in a complete TLD (i.e. retain a dot after the trimming).\n if (!editorRegExp.emailTld.test(email)) return false;\n return email;\n }\n\n /**\n * Strips trailing characters that GFM excludes from an autolink: the punctuation `?!.,:*_~`, and\n * any unbalanced trailing `)` (more closing than opening parentheses in the link).\n */\n private trimAutolinkTrailing(link: string): string {\n let end = link.length;\n let changed = true;\n while (changed && end > 0) {\n changed = false;\n const c = link[end - 1];\n if (\"?!.,:*_~\".indexOf(c) >= 0) {\n end--;\n changed = true;\n } else if (c === \")\") {\n let open = 0;\n let close = 0;\n for (let i = 0; i < end; i++) {\n if (link[i] === \"(\") open++;\n else if (link[i] === \")\") close++;\n }\n if (close > open) {\n end--;\n changed = true;\n }\n }\n }\n return link.substr(0, end);\n }\n\n public parseLinkOrImage(originalString: string, isImage: boolean): {output: string, charCount: number} | false {\n // Skip the opening bracket\n let textOffset = isImage ? 2 : 1;\n let opener = originalString.substr(0, textOffset);\n let type = isImage ? \"TMImage\" : \"TMLink\";\n let currentOffset = textOffset;\n\n let bracketLevel = 1;\n let linkText: string | false = false;\n let linkRef: string | false = false;\n let linkLabel: string[] = [];\n let linkDetails: string[] = [];\n\n textOuter: while (\n currentOffset < originalString.length &&\n linkText === false\n ) {\n let string = originalString.substr(currentOffset);\n\n // Capture any escapes and code blocks at current position\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n continue textOuter;\n }\n }\n\n // Check for image\n if (string.match(this.mergedInlineGrammar.imageOpen.regexp)) {\n bracketLevel++;\n currentOffset += 2;\n continue textOuter;\n }\n\n // Check for link\n if (string.match(this.mergedInlineGrammar.linkOpen.regexp)) {\n bracketLevel++;\n if (!isImage) {\n if (this.parseLinkOrImage(string, false)) {\n return false;\n }\n }\n currentOffset += 1;\n continue textOuter;\n }\n\n // Check for closing bracket\n if (string.match(editorRegExp.linkClosingBracket)) {\n bracketLevel--;\n if (bracketLevel === 0) {\n linkText = originalString.substr(textOffset, currentOffset - textOffset);\n currentOffset++;\n continue textOuter;\n }\n }\n\n // Nothing matches, proceed to next char\n currentOffset++;\n }\n\n // Did we find a link text?\n if (linkText === false) return false;\n\n // Check what type of link this is\n let nextChar = currentOffset < originalString.length ? originalString.substr(currentOffset, 1) : \"\";\n\n // REFERENCE LINKS\n if (nextChar === \"[\") {\n let string = originalString.substr(currentOffset);\n let cap = this.mergedInlineGrammar.linkLabel.regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n linkLabel.push(cap[1], cap[2], cap[3]);\n if (cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!]) {\n linkRef = cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!];\n } else {\n linkRef = linkText.trim();\n }\n } else {\n return false;\n }\n } else if (nextChar !== \"(\") {\n // Shortcut ref link\n linkRef = linkText.trim();\n } else {\n // INLINE LINKS\n currentOffset++;\n let parenthesisLevel = 1;\n\n inlineOuter: while (currentOffset < originalString.length && parenthesisLevel > 0) {\n let string = originalString.substr(currentOffset);\n\n // Process whitespace\n let cap = editorRegExp.leadingWhitespaceRun.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(cap[0]);\n break;\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n if (linkDetails[0].match(editorRegExp.containsOpenAngle)) {\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n } else {\n if (parenthesisLevel !== 1) return false;\n linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n }\n break;\n case 3:\n linkDetails.push(cap[0]);\n break;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n case 7:\n linkDetails[6] = linkDetails[6].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process backslash escapes\n cap = this.mergedInlineGrammar.escape.regexp.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process opening angle bracket\n if (linkDetails.length < 2 && string.match(editorRegExp.openingAngle)) {\n if (linkDetails.length === 0) linkDetails.push(\"\");\n linkDetails[0] = linkDetails[0].concat(\"<\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing angle bracket\n if ((linkDetails.length === 1 || linkDetails.length === 2) && string.match(editorRegExp.closingAngle)) {\n if (linkDetails.length === 1) linkDetails.push(\"\");\n linkDetails.push(\">\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process non-parenthesis delimiter for title\n cap = editorRegExp.titleQuote.exec(string);\n if (cap && (linkDetails.length === 0 || linkDetails.length === 1 || linkDetails.length === 4)) {\n while (linkDetails.length < 4) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n if (cap && (linkDetails.length === 5 || linkDetails.length === 6) && linkDetails[4] === cap[0]) {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process opening parenthesis\n if (string.match(editorRegExp.openingParen)) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(\"\");\n case 2:\n linkDetails[1] = linkDetails[1].concat(\"(\");\n if (!linkDetails[0].match(editorRegExp.endsWithOpenAngle)) parenthesisLevel++;\n break;\n case 3:\n linkDetails.push(\"\");\n case 4:\n linkDetails.push(\"(\");\n break;\n case 5:\n linkDetails.push(\"\");\n case 6:\n if (linkDetails[4] === \"(\") return false;\n linkDetails[5] = linkDetails[5].concat(\"(\");\n break;\n default:\n return false;\n }\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing parenthesis\n if (string.match(editorRegExp.closingParen)) {\n if (linkDetails.length <= 2) {\n while (linkDetails.length < 2) linkDetails.push(\"\");\n if (!linkDetails[0].match(editorRegExp.endsWithOpenAngle)) parenthesisLevel--;\n if (parenthesisLevel > 0) {\n linkDetails[1] = linkDetails[1].concat(\")\");\n }\n } else if (linkDetails.length === 5 || linkDetails.length === 6) {\n if (linkDetails[4] === \"(\") {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(\")\");\n } else {\n if (linkDetails.length === 5) linkDetails.push(\")\");\n else linkDetails[5] = linkDetails[5].concat(\")\");\n }\n } else {\n parenthesisLevel--;\n }\n\n if (parenthesisLevel === 0) {\n while (linkDetails.length < 7) linkDetails.push(\"\");\n }\n\n currentOffset++;\n continue inlineOuter;\n }\n\n // Any old character\n cap = editorRegExp.anyChar.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n throw \"Infinite loop\";\n }\n if (parenthesisLevel > 0) return false;\n }\n\n if (linkRef !== false) {\n // Reference link; check that linkRef is valid\n let valid = false;\n for (let label of this.linkLabels) {\n if (label === linkRef) {\n valid = true;\n break;\n }\n }\n let labelClass = valid ? \"TMLinkLabel TMLinkLabel_Valid\" : \"TMLinkLabel TMLinkLabel_Invalid\";\n let output = `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type} ${\n linkLabel.length < 3 || !linkLabel[1] ? labelClass : \"\"\n }\">${this.processInlineStyles(linkText)}</span><span class=\"TMMark TMMark_${type}\">]</span>`;\n\n if (linkLabel.length >= 3) {\n output = output.concat(\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[0]}</span>`,\n `<span class=\"${labelClass}\">${linkLabel[1]}</span>`,\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[2]}</span>`\n );\n }\n return {\n output: output,\n charCount: currentOffset,\n };\n } else if (linkDetails.length > 0) {\n // Inline link\n while (linkDetails.length < 7) {\n linkDetails.push(\"\");\n }\n\n // Every literal mark fragment is HTML-escaped: linkDetails[0]/[2] hold the angle brackets of\n // an `<...>` destination, so leaving them raw would inject a stray `<`/`>` into the output —\n // which splitInlineHTMLByLine then mistakes for an HTML tag.\n return {\n output: `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type}\">${this.processInlineStyles(\n linkText\n )}</span><span class=\"TMMark TMMark_${type}\">](${\n htmlescape(linkDetails[0])\n }</span><span class=\"${type}Destination\">${\n htmlescape(linkDetails[1])\n }</span><span class=\"TMMark TMMark_${type}\">${htmlescape(linkDetails[2])}${\n htmlescape(linkDetails[3])\n }${htmlescape(linkDetails[4])}</span><span class=\"${type}Title\">${\n htmlescape(linkDetails[5])\n }</span><span class=\"TMMark TMMark_${type}\">${htmlescape(linkDetails[6])})</span>`,\n charCount: currentOffset,\n };\n }\n\n return false;\n }\n\n private computeCommonAncestor(node1: Node | null, node2: Node | null): Node | null {\n if (!node1 || !node2) return null;\n if (node1 === node2) return node1;\n const ancestry = (node: Node) => {\n let ancestry = [];\n while (node) {\n ancestry.unshift(node);\n node = node.parentNode!;\n }\n return ancestry;\n };\n\n const ancestry1 = ancestry(node1);\n const ancestry2 = ancestry(node2);\n\n if (ancestry1[0] !== ancestry2[0]) return null;\n let i;\n for (i = 0; ancestry1[i] === ancestry2[i]; i++);\n return ancestry1[i - 1];\n }\n\n private computeEnclosingMarkupNode(focus: Position, anchor: Position | null, className: string): Node | null {\n let node = null;\n if (!focus) return null;\n if (!anchor) {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode) return null;\n node = sel.focusNode;\n } else {\n if (focus.row !== anchor.row) return null;\n const sel = window.getSelection();\n if (!sel) return null;\n node = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n }\n if (!node) return null;\n while (node !== this.e) {\n if ((node as HTMLElement).classList && (node as HTMLElement).classList.contains(className)) return node;\n node = node.parentNode!;\n }\n return null;\n }\n\n public getCommandState(focus: Position | null = null, anchor: Position | null = null): Record<string, boolean | null> {\n let commandState: Record<string, boolean | null> = {};\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) {\n for (let cmd in commands) {\n commandState[cmd] = null;\n }\n return commandState;\n }\n if (!anchor) anchor = focus;\n\n let start: Position, end: Position;\n if (anchor.row < focus.row || (anchor.row === focus.row && anchor.col < focus.col)) {\n start = anchor;\n end = focus;\n } else {\n start = focus;\n end = anchor;\n }\n if (end.row > start.row && end.col === 0) {\n end.row--;\n end.col = this.lines[end.row].length;\n }\n\n for (let cmd in commands) {\n if (commands[cmd].type === \"inline\") {\n if (!focus || focus.row !== anchor!.row || !this.isInlineFormattingAllowed()) {\n commandState[cmd] = null;\n } else {\n commandState[cmd] =\n !!this.computeEnclosingMarkupNode(focus, anchor, commands[cmd].className) ||\n (focus.col === anchor!.col &&\n !!this.lines[focus.row].substr(0, focus.col).match(commands[cmd].unset.prePattern) &&\n !!this.lines[focus.row].substr(focus.col).match(commands[cmd].unset.postPattern));\n }\n }\n if (commands[cmd].type === \"line\") {\n if (!focus) {\n commandState[cmd] = null;\n } else {\n let state: boolean | null = this.lineTypes[start.row] === commands[cmd].className;\n for (let line = start.row; line <= end.row; line++) {\n if ((this.lineTypes[line] === commands[cmd].className) !== state) {\n state = null;\n break;\n }\n }\n commandState[cmd] = state;\n }\n }\n }\n return commandState;\n }\n\n public setCommandState(command: string, state: boolean): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (commands[command].type === \"inline\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!anchor) return;\n if (anchor.row !== focus!.row) return;\n if (!this.isInlineFormattingAllowed()) return;\n let markupNode = this.computeEnclosingMarkupNode(focus!, anchor, commands[command].className);\n this.clearDirtyFlag();\n\n if (markupNode) {\n this.lineDirty[focus!.row] = true;\n const startCol = this.computeColumn(markupNode, 0)!;\n const len = markupNode.textContent!.length;\n const left = this.lines[focus!.row]\n .substr(0, startCol)\n .replace(commands[command].unset.prePattern, \"\");\n const mid = this.lines[focus!.row].substr(startCol, len);\n const right = this.lines[focus!.row]\n .substr(startCol + len)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus!.col = anchor.col + len;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else if (\n focus!.col === anchor.col &&\n !!this.lines[focus!.row].substr(0, focus!.col).match(commands[command].unset.prePattern) &&\n !!this.lines[focus!.row].substr(focus!.col).match(commands[command].unset.postPattern)\n ) {\n this.lineDirty[focus!.row] = true;\n const left = this.lines[focus!.row]\n .substr(0, focus!.col)\n .replace(commands[command].unset.prePattern, \"\");\n const right = this.lines[focus!.row]\n .substr(focus!.col)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(right);\n focus!.col = anchor.col = left.length;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else {\n let { startCol, endCol } =\n focus!.col < anchor.col\n ? { startCol: focus!.col, endCol: anchor.col }\n : { startCol: anchor.col, endCol: focus!.col };\n\n let match = this.lines[focus!.row]\n .substr(startCol, endCol - startCol)\n .match(editorRegExp.surroundingWhitespace);\n if (match) {\n startCol += match.groups!.leading.length;\n endCol -= match.groups!.trailing.length;\n }\n\n focus!.col = startCol;\n anchor.col = endCol;\n\n this.wrapSelection(commands[command].set.pre, commands[command].set.post, focus, anchor);\n this.fireChange();\n }\n } else if (commands[command].type === \"line\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n this.clearDirtyFlag();\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n for (let line = start.row; line <= end.row; line++) {\n if (state && this.lineTypes[line] !== commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].set.pattern,\n commands[command].set.replacement.replace(\"$#\", (line - start.row + 1).toString())\n );\n this.lineDirty[line] = true;\n }\n if (!state && this.lineTypes[line] === commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].unset.pattern,\n commands[command].unset.replacement\n );\n this.lineDirty[line] = true;\n }\n }\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n }\n\n /**\n * Returns the list-item marker prefix (e.g. `- `, `* `, `1. `) of `line`, or null if the line\n * isn't a bulleted or ordered list item.\n */\n private listItemMarker(line: string): string | null {\n const ul = lineGrammar.TMUL.regexp.exec(line);\n if (ul) return ul[1];\n const ol = lineGrammar.TMOL.regexp.exec(line);\n if (ol) return ol[1];\n return null;\n }\n\n /** True when line `row` is a list item whose content begins with a task-list checkbox. */\n public isTaskListItem(row: number): boolean {\n if (row < 0 || row >= this.lines.length) return false;\n const type = this.lineTypes[row];\n if (type !== \"TMUL\" && type !== \"TMOL\") return false;\n const marker = this.listItemMarker(this.lines[row]);\n if (marker === null) return false;\n return editorRegExp.taskListItem.test(this.lines[row].substr(marker.length));\n }\n\n /** Adds an unchecked `[ ]` checkbox to a line, making it a bulleted list item if it wasn't one. */\n private addTaskCheckbox(line: string): string {\n const marker = this.listItemMarker(line);\n if (marker !== null) {\n const content = line.substr(marker.length);\n if (editorRegExp.taskListItem.test(content)) return line; // already a task item\n return `${marker}[ ] ${content}`;\n }\n // Not a list item yet: strip any existing block marker and make it a bulleted task item,\n // mirroring how the `ul` command normalizes a line.\n return line.replace((commands.ul as LineCommand).set.pattern, \"- [ ] $2\");\n }\n\n /** Removes a task-list checkbox from a line, leaving the surrounding list item intact. */\n private removeTaskCheckbox(line: string): string {\n const marker = this.listItemMarker(line);\n if (marker === null) return line;\n const task = editorRegExp.taskListItem.exec(line.substr(marker.length));\n if (!task) return line;\n return `${marker}${task[5]}`;\n }\n\n /**\n * Toggles GFM task-list checkboxes on the selected line(s). If every selected line is already a\n * task item, their checkboxes are removed (leaving plain list items); otherwise each line gets an\n * unchecked `[ ]` checkbox (becoming a bulleted list item if it wasn't a list item yet). Mirrors\n * setCommandState's line-edit flow: pushes undo history, reformats, and fires a `change` event.\n */\n public toggleTaskList(): void {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n let allTasks = true;\n for (let line = start.row; line <= end.row; line++) {\n if (!this.isTaskListItem(line)) {\n allTasks = false;\n break;\n }\n }\n\n if (!this.isRestoringHistory) this.pushHistory();\n this.clearDirtyFlag();\n\n for (let line = start.row; line <= end.row; line++) {\n const updated = allTasks\n ? this.removeTaskCheckbox(this.lines[line])\n : this.addTaskCheckbox(this.lines[line]);\n if (updated !== this.lines[line]) {\n this.lines[line] = updated;\n this.lineDirty[line] = true;\n }\n }\n\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n\n public isInlineFormattingAllowed(): boolean {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode || !sel.anchorNode) return false;\n\n if (\n sel.isCollapsed &&\n sel.focusNode.nodeType === 3 &&\n sel.focusOffset === sel.focusNode.nodeValue!.length\n ) {\n let node;\n for (node = sel.focusNode; node && node.nextSibling === null; node = node.parentNode!);\n if (\n node &&\n node.nextSibling &&\n (node.nextSibling as HTMLElement).classList &&\n (node.nextSibling as HTMLElement).classList.contains(\"TMInlineFormatted\")\n )\n return true;\n }\n\n let ancestor = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n if (!ancestor) return false;\n\n while (ancestor && ancestor !== this.e) {\n if (\n (ancestor as HTMLElement).classList &&\n ((ancestor as HTMLElement).classList.contains(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).classList.contains(\"TMBlankLine\"))\n )\n return true;\n ancestor = ancestor.parentNode!;\n }\n\n return false;\n }\n\n public toggleCommandState(command: string): void {\n if (!this.lastCommandState) this.lastCommandState = this.getCommandState();\n this.setCommandState(command, !this.lastCommandState[command]);\n }\n\n private fireDrop(dataTransfer: DataTransfer): void {\n for (let listener of this.listeners.drop) {\n listener({ dataTransfer });\n }\n }\n\n private fireSelection(): void {\n let focus = this.getSelection(false);\n let anchor = this.getSelection(true);\n\n // Save the current selection for restoration later\n this.lastSelection = {\n focus: focus,\n anchor: anchor\n };\n\n if (this.listeners.selection && this.listeners.selection.length) {\n let commandState = this.getCommandState(focus, anchor);\n if (this.lastCommandState) {\n Object.assign(this.lastCommandState, commandState);\n } else {\n this.lastCommandState = Object.assign({}, commandState);\n }\n for (let listener of this.listeners.selection) {\n listener({\n focus: focus!,\n anchor: anchor!,\n commandState: this.lastCommandState,\n });\n }\n }\n }\n}\n\nexport default Editor;\n"],"names":["global","this","require$$0","require$$1","require$$2","require$$3","sharedStoreModule","require$$4","require$$5","require$$6","require$$7","makeBuiltIn","makeBuiltInModule","ownKeys","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","svg","blockquote","bold","clear_formatting","code","h1","h2","hr","image","italic","link","ol","redo","strikethrough","tasklist","ul","undo","isMacLike","test","navigator","platform","DefaultCommands","name","action","innerHTML","title","hotkey","editor","toggleTaskList","enabled","focus","isTaskListItem","row","insertLink","isInlineFormattingAllowed","wrapSelection","insertImage","paste","canUndo","canRedo","CommandBar","constructor","props","e","commands","buttons","state","hotkeys","element","document","getElementById","body","createCommandBarElement","addEventListener","handleKeydown","setEditor","parentElement","createElement","className","command","el","appendChild","commandName","Object","assign","keys","split","modifiers","modifierexplanation","i","length","push","lastKey","match","concat","toUpperCase","key","toLowerCase","join","handleClick","event","preventDefault","editorHadFocus","contains","activeElement","restoreLastSelection","setCommandState","handleSelection","commandState","undefined","anchor","outer","modifier","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","replacements","ASCIIPunctuation","NotTriggerChar","Scheme","Email","HTMLOpenTag","HTMLCloseTag","HTMLTagName","HTMLComment","HTMLPI","HTMLDeclaration","HTMLCDATA","HTMLAttribute","HTMLAttValue","KnownTag","punctuationLeading","RegExp","punctuationTrailing","editorRegExp","macPlatform","lineSplit","replacementPlaceholder","inlineContentPlaceholder","inlineReplacementPlaceholder","blankContent","leadingWhitespace","trailingWhitespace","leadingWhitespaceRun","surroundingWhitespace","_wrapRegExp","leading","trailing","taskListItem","orderedListNumber","inlineTagName","changeEvent","selectionEvent","dropEvent","autolinkPrecedingChar","emphasisDelimiter","strikethroughDelimiter","autolinkScheme","autolinkWww","autolinkDomain","autolinkPath","autolinkProtocol","autolinkXmpp","autolinkXmppResource","autolinkEmail","emailTrailingChar","emailTld","linkClosingBracket","openingAngle","closingAngle","titleQuote","openingParen","closingParen","endsWithOpenAngle","containsOpenAngle","anyChar","lineGrammar","TMH1","regexp","replacement","TMH2","TMH3","TMH4","TMH5","TMH6","TMBlockquote","TMCodeFenceBacktickOpen","seq","TMCodeFenceTildeOpen","TMCodeFenceBacktickClose","TMCodeFenceTildeClose","TMBlankLine","TMSetextH1Marker","TMSetextH2Marker","TMHR","TMUL","TMOL","TMIndentedCode","TMLinkReferenceDefinition","labelPlaceholder","htmlBlockGrammar","start","end","paraInterrupt","inlineGrammar","escape","autolink","html","linkOpen","imageOpen","linkLabel","default","replacementRegexp","inlineRules","rule","re","source","replace","string","flags","createMergedInlineGrammar","customRules","arguments","merged","_objectSpread","ruleName","entries","processedRule","regexpSource","htmlescape","type","set","pre","post","unset","prePattern","postPattern","pattern","h3","h4","h5","h6","Editor","textarea","lines","lineElements","lineTypes","lineCaptures","lineReplacements","linkLabels","lineDirty","lastCommandState","customInlineGrammar","mergedInlineGrammar","hasFocus","lastSelection","listeners","change","selection","drop","undoStack","redoStack","isRestoringHistory","maxHistory","getElementsByTagName","tagName","parentNode","style","display","placeholder","_a","createEditorElement","setContent","content","value","handleUndoRedoKey","pushHistory","pushCurrentState","getContent","getSelection","shift","current","pop","prev","setSelection","next","isMac","ctrl","metaKey","ctrlKey","altKey","shiftKey","classList","add","contentEditable","whiteSpace","webkitUserModify","setAttribute","nextSibling","insertBefore","handleInputEvent","handleBeforeInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","updatePlaceholder","fireChange","remove","updateLineTypes","updateLinkLabels","applyLineTypes","l","capture","str","p1","p2","parseInt","processInlineStyles","isInlineGroupLeader","leaderType","isInlineContinuation","applyInlineGroup","applyLine","t","isBlankBlockquoteContent","cap","contentHTML","removeAttribute","dataset","mlSig","toString","contents","sigSource","idx","inlineContentIndex","JSON","stringify","sig","hashString","needsRender","fragments","splitInlineHTMLByLine","frag","replaceWithInline","m","exec","inlineFragment","openTags","ch","close","indexOf","substr","tag","substring","openTag","s","h","charCodeAt","codeBlockType","codeBlockSeqLength","htmlBlock","lineType","lineCapture","lineReplacement","groups","htmlBlockType","headingLine","headingLineType","task","checked","bulletClass","boxClass","getAnchor","window","startNode","anchorNode","focusNode","offset","anchorOffset","focusOffset","col","computeColumn","node","previousSibling","currentLineNumData","previousLineNumData","_b","currentLineNum","previousLineNum","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","beforeInputEvent","inputType","isBackspace","clearDirtyFlag","prevLineLen","currentLineLen","continuableType","lineBeforeBreak","lineAfterBreak","result","scrollIntoView","block","inline","inputEvent","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","target","box","closest","lineEl","isNaN","charAt","originalString","processed","stack","precedingChar","parseAutolinkExtension","output","charCount","potentialLink","potentialImage","parseLinkOrImage","delimCount","delimString","currentDelimiter","preceding","following","punctuationFollows","punctuationPrecedes","whitespaceFollows","whitespacePrecedes","canOpen","canClose","stackPointer","delimiter","entry","count","consumed","nodeType","Node","TEXT_NODE","textContent","bindRight","childrenComplete","rv","nodeValue","updateLineContents","lineDelta","childElementCount","firstChangedLine","lastChangedLine","linesToDelete","linesToAdd","line","ct","startLine","linesToInsert","adjustLineElements","insertedBlank","insertedDirty","splice","originalChildren","from","replaceChild","child","parent","_len","newChildren","_key","forEach","newChild","ELEMENT_NODE","divWrapper","grandChildren","some","grandChild","matchExtendedAutolink","schemeCap","isWww","prefixLen","afterPrefix","domainCap","isValidAutolinkDomain","pathCap","trimmed","trimAutolinkTrailing","protoCap","emailCap","matchAutolinkEmail","extra","resCap","email","domain","segments","slice","seg","changed","c","open","isImage","textOffset","opener","currentOffset","bracketLevel","linkText","linkRef","linkDetails","textOuter","nextChar","trim","parenthesisLevel","inlineOuter","valid","label","labelClass","computeCommonAncestor","node1","node2","ancestry","unshift","ancestry1","ancestry2","computeEnclosingMarkupNode","sel","getCommandState","cmd","markupNode","len","listItemMarker","marker","addTaskCheckbox","removeTaskCheckbox","allTasks","updated","isCollapsed","ancestor","toggleCommandState"],"mappings":"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","x_google_ignoreList":[0,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,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115]}
|
|
6312
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwtdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vudmlyb25tZW50LXVzZXItYWdlbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdjgtdmVyc2lvbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY2FsbGFibGUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXByaW1pdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXRoLXRydW5jLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXguanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9tLXRva2VuLWxpc3QtcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkZC10by11bnNjb3BhYmxlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsInNyYy9zdmcvc3ZnLnRzIiwic3JjL1RpbnlNREVDb21tYW5kQmFyLnRzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93aGl0ZXNwYWNlcy5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIm5vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIiwibm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanMiLCJub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyIsInNyYy9ncmFtbWFyLnRzIiwic3JjL1RpbnlNREUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAmJiBpdC5NYXRoID09PSBNYXRoICYmIGl0O1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbm1vZHVsZS5leHBvcnRzID1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgY2hlY2sodHlwZW9mIHRoaXMgPT0gJ29iamVjdCcgJiYgdGhpcykgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgMSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSlbMV0gIT09IDc7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWZ1bmN0aW9uLXByb3RvdHlwZS1iaW5kIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoY2FsbCkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGNhbGwsIGFyZ3VtZW50cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIE5hc2hvcm4gfiBKREs4IGJ1Z1xudmFyIE5BU0hPUk5fQlVHID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yICYmICEkcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh7IDE6IDIgfSwgMSk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eWlzZW51bWVyYWJsZVxuZXhwb3J0cy5mID0gTkFTSE9STl9CVUcgPyBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShWKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXMsIFYpO1xuICByZXR1cm4gISFkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZW51bWVyYWJsZTtcbn0gOiAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG5cbi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gdGhyb3dzIGFuIGVycm9yIGluIHJoaW5vLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvcmhpbm8vaXNzdWVzLzM0NlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuICEkT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCk7XG59KSA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY2xhc3NvZihpdCkgPT09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCIndXNlIHN0cmljdCc7XG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc051bGxPclVuZGVmaW5lZChpdCkpIHRocm93IG5ldyAkVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1Jc0hUTUxEREEtaW50ZXJuYWwtc2xvdFxudmFyIGRvY3VtZW50QWxsID0gdHlwZW9mIGRvY3VtZW50ID09ICdvYmplY3QnICYmIGRvY3VtZW50LmFsbDtcblxuLy8gYElzQ2FsbGFibGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NhbGxhYmxlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby10eXBlb2YtdW5kZWZpbmVkIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBkb2N1bWVudEFsbCA9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudEFsbCAhPT0gdW5kZWZpbmVkID8gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJyB8fCBhcmd1bWVudCA9PT0gZG9jdW1lbnRBbGw7XG59IDogZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcblxudmFyIGFGdW5jdGlvbiA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gaXNDYWxsYWJsZShhcmd1bWVudCkgPyBhcmd1bWVudCA6IHVuZGVmaW5lZDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSwgbWV0aG9kKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IGFGdW5jdGlvbihnbG9iYWxUaGlzW25hbWVzcGFjZV0pIDogZ2xvYmFsVGhpc1tuYW1lc3BhY2VdICYmIGdsb2JhbFRoaXNbbmFtZXNwYWNlXVttZXRob2RdO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB1bmN1cnJ5VGhpcyh7fS5pc1Byb3RvdHlwZU9mKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWxUaGlzLm5hdmlnYXRvcjtcbnZhciB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudDtcblxubW9kdWxlLmV4cG9ydHMgPSB1c2VyQWdlbnQgPyBTdHJpbmcodXNlckFnZW50KSA6ICcnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW52aXJvbm1lbnQtdXNlci1hZ2VudCcpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbFRoaXMucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsVGhpcy5EZW5vO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zIHx8IERlbm8gJiYgRGVuby52ZXJzaW9uO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjg7XG52YXIgbWF0Y2gsIHZlcnNpb247XG5cbmlmICh2OCkge1xuICBtYXRjaCA9IHY4LnNwbGl0KCcuJyk7XG4gIC8vIGluIG9sZCBDaHJvbWUsIHZlcnNpb25zIG9mIFY4IGlzbid0IFY4ID0gQ2hyb21lIC8gMTBcbiAgLy8gYnV0IHRoZWlyIGNvcnJlY3QgdmVyc2lvbnMgYXJlIG5vdCBpbnRlcmVzdGluZyBmb3IgdXNcbiAgdmVyc2lvbiA9IG1hdGNoWzBdID4gMCAmJiBtYXRjaFswXSA8IDQgPyAxIDogKyhtYXRjaFswXSArIG1hdGNoWzFdKTtcbn1cblxuLy8gQnJvd3NlckZTIE5vZGVKUyBgcHJvY2Vzc2AgcG9seWZpbGwgaW5jb3JyZWN0bHkgc2V0IGAudjhgIHRvIGAwLjBgXG4vLyBzbyBjaGVjayBgdXNlckFnZW50YCBldmVuIGlmIGAudjhgIGV4aXN0cywgYnV0IDBcbmlmICghdmVyc2lvbiAmJiB1c2VyQWdlbnQpIHtcbiAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkKykvKTtcbiAgaWYgKCFtYXRjaCB8fCBtYXRjaFsxXSA+PSA3NCkge1xuICAgIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9DaHJvbWVcXC8oXFxkKykvKTtcbiAgICBpZiAobWF0Y2gpIHZlcnNpb24gPSArbWF0Y2hbMV07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2ZXJzaW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnZpcm9ubWVudC12OC12ZXJzaW9uJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbnZhciAkU3RyaW5nID0gZ2xvYmFsVGhpcy5TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG5tb2R1bGUuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgc3ltYm9sID0gU3ltYm9sKCdzeW1ib2wgZGV0ZWN0aW9uJyk7XG4gIC8vIENocm9tZSAzOCBTeW1ib2wgaGFzIGluY29ycmVjdCB0b1N0cmluZyBjb252ZXJzaW9uXG4gIC8vIGBnZXQtb3duLXByb3BlcnR5LXN5bWJvbHNgIHBvbHlmaWxsIHN5bWJvbHMgY29udmVydGVkIHRvIG9iamVjdCBhcmUgbm90IFN5bWJvbCBpbnN0YW5jZXNcbiAgLy8gbmI6IERvIG5vdCBjYWxsIGBTdHJpbmdgIGRpcmVjdGx5IHRvIGF2b2lkIHRoaXMgYmVpbmcgb3B0aW1pemVkIG91dCB0byBgc3ltYm9sKycnYCB3aGljaCB3aWxsLFxuICAvLyBvZiBjb3Vyc2UsIGZhaWwuXG4gIHJldHVybiAhJFN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLXN5bWJvbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiZcbiAgIVN5bWJvbC5zaGFtICYmXG4gIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbm1vZHVsZS5leHBvcnRzID0gVVNFX1NZTUJPTF9BU19VSUQgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyICRTeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKTtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoJFN5bWJvbCkgJiYgaXNQcm90b3R5cGVPZigkU3ltYm9sLnByb3RvdHlwZSwgJE9iamVjdChpdCkpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IElzQ2FsbGFibGUoYXJndW1lbnQpIGlzIHRydWVgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkJyk7XG5cbi8vIGBHZXRNZXRob2RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRtZXRob2Rcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFYsIFApIHtcbiAgdmFyIGZ1bmMgPSBWW1BdO1xuICByZXR1cm4gaXNOdWxsT3JVbmRlZmluZWQoZnVuYykgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBPcmRpbmFyeVRvUHJpbWl0aXZlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb3JkaW5hcnl0b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChwcmVmID09PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAoaXNDYWxsYWJsZShmbiA9IGlucHV0LnZhbHVlT2YpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICBpZiAocHJlZiAhPT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgbmV3ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHRyeSB7XG4gICAgZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxUaGlzW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG5cbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsVGhpc1tTSEFSRURdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFNIQVJFRCwge30pO1xuXG4oc3RvcmUudmVyc2lvbnMgfHwgKHN0b3JlLnZlcnNpb25zID0gW10pKS5wdXNoKHtcbiAgdmVyc2lvbjogJzMuNDIuMCcsXG4gIG1vZGU6IElTX1BVUkUgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJyxcbiAgbGljZW5zZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuNDIuMC9MSUNFTlNFJyxcbiAgc291cmNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMnXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlIHx8IHt9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSB1bmN1cnJ5VGhpcyh7fS5oYXNPd25Qcm9wZXJ0eSk7XG5cbi8vIGBIYXNPd25Qcm9wZXJ0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWhhc293bnByb3BlcnR5XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWhhc293biAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5KHRvT2JqZWN0KGl0KSwga2V5KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIFVTRV9TWU1CT0xfQVNfVUlEID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkJyk7XG5cbnZhciBTeW1ib2wgPSBnbG9iYWxUaGlzLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBvcmRpbmFyeVRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbFRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsLXRoaXMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIGRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPT0gNztcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTID8gJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0luZGV4ZWRPYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhc093bihPLCBQKSkgcmV0dXJuIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcighY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mLCBPLCBQKSwgT1tQXSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxuLy8gVjggfiBDaHJvbWUgMzYtXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMzM0XG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPT0gNDI7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogVHlwZShhcmd1bWVudCkgaXMgT2JqZWN0YFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzT2JqZWN0KGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciBFTlVNRVJBQkxFID0gJ2VudW1lcmFibGUnO1xudmFyIENPTkZJR1VSQUJMRSA9ICdjb25maWd1cmFibGUnO1xudmFyIFdSSVRBQkxFID0gJ3dyaXRhYmxlJztcblxuLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0eVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKHR5cGVvZiBPID09PSAnZnVuY3Rpb24nICYmIFAgPT09ICdwcm90b3R5cGUnICYmICd2YWx1ZScgaW4gQXR0cmlidXRlcyAmJiBXUklUQUJMRSBpbiBBdHRyaWJ1dGVzICYmICFBdHRyaWJ1dGVzW1dSSVRBQkxFXSkge1xuICAgIHZhciBjdXJyZW50ID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50W1dSSVRBQkxFXSkge1xuICAgICAgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICBBdHRyaWJ1dGVzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IENPTkZJR1VSQUJMRSBpbiBBdHRyaWJ1dGVzID8gQXR0cmlidXRlc1tDT05GSUdVUkFCTEVdIDogY3VycmVudFtDT05GSUdVUkFCTEVdLFxuICAgICAgICBlbnVtZXJhYmxlOiBFTlVNRVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0VOVU1FUkFCTEVdIDogY3VycmVudFtFTlVNRVJBQkxFXSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cbiAgfSByZXR1cm4gJGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xufSA6ICRkZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1Byb3BlcnR5S2V5KFApO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gREVTQ1JJUFRPUlMgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwga2V5LCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIHN0b3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xuXG52YXIgZnVuY3Rpb25Ub1N0cmluZyA9IHVuY3VycnlUaGlzKEZ1bmN0aW9uLnRvU3RyaW5nKTtcblxuLy8gdGhpcyBoZWxwZXIgYnJva2VuIGluIGBjb3JlLWpzQDMuNC4xLTMuNC40YCwgc28gd2UgY2FuJ3QgdXNlIGBzaGFyZWRgIGhlbHBlclxuaWYgKCFpc0NhbGxhYmxlKHN0b3JlLmluc3BlY3RTb3VyY2UpKSB7XG4gIHN0b3JlLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb25Ub1N0cmluZyhpdCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmUuaW5zcGVjdFNvdXJjZTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbFRoaXMuV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0NhbGxhYmxlKFdlYWtNYXApICYmIC9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcoV2Vha01hcCkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG5cbnZhciBrZXlzID0gc2hhcmVkKCdrZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4ga2V5c1trZXldIHx8IChrZXlzW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMnKTtcblxudmFyIE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEID0gJ09iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWxUaGlzLlR5cGVFcnJvcjtcbnZhciBXZWFrTWFwID0gZ2xvYmFsVGhpcy5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQnKTtcbiAgICB9IHJldHVybiBzdGF0ZTtcbiAgfTtcbn07XG5cbmlmIChOQVRJVkVfV0VBS19NQVAgfHwgc2hhcmVkLnN0YXRlKSB7XG4gIHZhciBzdG9yZSA9IHNoYXJlZC5zdGF0ZSB8fCAoc2hhcmVkLnN0YXRlID0gbmV3IFdlYWtNYXAoKSk7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc3RvcmUuZ2V0ID0gc3RvcmUuZ2V0O1xuICBzdG9yZS5oYXMgPSBzdG9yZS5oYXM7XG4gIHN0b3JlLnNldCA9IHN0b3JlLnNldDtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1zZWxmLWFzc2lnbiAtLSBwcm90b3R5cGUgbWV0aG9kcyBwcm90ZWN0aW9uICovXG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoc3RvcmUuaGFzKGl0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgc3RvcmUuc2V0KGl0LCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gc3RvcmUuZ2V0KGl0KSB8fCB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmhhcyhpdCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgU1RBVEUgPSBzaGFyZWRLZXkoJ3N0YXRlJyk7XG4gIGhpZGRlbktleXNbU1RBVEVdID0gdHJ1ZTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChoYXNPd24oaXQsIFNUQVRFKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuQ09ORklHVVJBQkxFO1xudmFyIGluc3BlY3RTb3VyY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXQ7XG52YXIgJFN0cmluZyA9IFN0cmluZztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKHN0cmluZ1NsaWNlKCRTdHJpbmcobmFtZSksIDAsIDcpID09PSAnU3ltYm9sKCcpIHtcbiAgICBuYW1lID0gJ1snICsgcmVwbGFjZSgkU3RyaW5nKG5hbWUpLCAvXlN5bWJvbFxcKChbXildKilcXCkuKiQvLCAnJDEnKSArICddJztcbiAgfVxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdldHRlcikgbmFtZSA9ICdnZXQgJyArIG5hbWU7XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuc2V0dGVyKSBuYW1lID0gJ3NldCAnICsgbmFtZTtcbiAgaWYgKCFoYXNPd24odmFsdWUsICduYW1lJykgfHwgKENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FICYmIHZhbHVlLm5hbWUgIT09IG5hbWUpKSB7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ25hbWUnLCB7IHZhbHVlOiBuYW1lLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgZWxzZSB2YWx1ZS5uYW1lID0gbmFtZTtcbiAgfVxuICBpZiAoQ09ORklHVVJBQkxFX0xFTkdUSCAmJiBvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnYXJpdHknKSAmJiB2YWx1ZS5sZW5ndGggIT09IG9wdGlvbnMuYXJpdHkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ2xlbmd0aCcsIHsgdmFsdWU6IG9wdGlvbnMuYXJpdHkgfSk7XG4gIH1cbiAgdHJ5IHtcbiAgICBpZiAob3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2NvbnN0cnVjdG9yJykgJiYgb3B0aW9ucy5jb25zdHJ1Y3Rvcikge1xuICAgICAgaWYgKERFU0NSSVBUT1JTKSBkZWZpbmVQcm9wZXJ0eSh2YWx1ZSwgJ3Byb3RvdHlwZScsIHsgd3JpdGFibGU6IGZhbHNlIH0pO1xuICAgIC8vIGluIFY4IH4gQ2hyb21lIDUzLCBwcm90b3R5cGVzIG9mIHNvbWUgbWV0aG9kcywgbGlrZSBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AsIGFyZSBub24td3JpdGFibGVcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnByb3RvdHlwZSkgdmFsdWUucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHZhbHVlKTtcbiAgaWYgKCFoYXNPd24oc3RhdGUsICdzb3VyY2UnKSkge1xuICAgIHN0YXRlLnNvdXJjZSA9IGpvaW4oVEVNUExBVEUsIHR5cGVvZiBuYW1lID09ICdzdHJpbmcnID8gbmFtZSA6ICcnKTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRlbmQtbmF0aXZlIC0tIHJlcXVpcmVkXG5GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBtYWtlQnVpbHRJbihmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUodGhpcykgJiYgZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zb3VyY2UgfHwgaW5zcGVjdFNvdXJjZSh0aGlzKTtcbn0sICd0b1N0cmluZycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgbWFrZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIEhlbHBlciBmb3IgYSBwb3B1bGFyIHJlcGVhdGluZyBjYXNlIG9mIHRoZSBzcGVjOlxuLy8gTGV0IGludGVnZXIgYmUgPyBUb0ludGVnZXIoaW5kZXgpLlxuLy8gSWYgaW50ZWdlciA8IDAsIGxldCByZXN1bHQgYmUgbWF4KChsZW5ndGggKyBpbnRlZ2VyKSwgMCk7IGVsc2UgbGV0IHJlc3VsdCBiZSBtaW4oaW50ZWdlciwgbGVuZ3RoKS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgdmFyIGludGVnZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgcmV0dXJuIGludGVnZXIgPCAwID8gbWF4KGludGVnZXIgKyBsZW5ndGgsIDApIDogbWluKGludGVnZXIsIGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbGVuID0gdG9JbnRlZ2VyT3JJbmZpbml0eShhcmd1bWVudCk7XG4gIHJldHVybiBsZW4gPiAwID8gbWluKGxlbiwgMHgxRkZGRkZGRkZGRkZGRikgOiAwOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT09IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGludGVybmFsT2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcblxudmFyIGhpZGRlbktleXMgPSBlbnVtQnVnS2V5cy5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5bmFtZXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ1JlZmxlY3QnLCAnb3duS2V5cycpIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICByZXR1cm4gZ2V0T3duUHJvcGVydHlTeW1ib2xzID8gY29uY2F0KGtleXMsIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL293bi1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc291cmNlLCBleGNlcHRpb25zKSB7XG4gIHZhciBrZXlzID0gb3duS2V5cyhzb3VyY2UpO1xuICB2YXIgZGVmaW5lUHJvcGVydHkgPSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mO1xuICB2YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGlmICghaGFzT3duKHRhcmdldCwga2V5KSAmJiAhKGV4Y2VwdGlvbnMgJiYgaGFzT3duKGV4Y2VwdGlvbnMsIGtleSkpKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7XG4gICAgfVxuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09PSBQT0xZRklMTCA/IHRydWVcbiAgICA6IHZhbHVlID09PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5Jyk7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMnKTtcbnZhciBpc0ZvcmNlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1mb3JjZWQnKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXM7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsVGhpc1tUQVJHRVRdIHx8IGRlZmluZUdsb2JhbFByb3BlcnR5KFRBUkdFVCwge30pO1xuICB9IGVsc2Uge1xuICAgIHRhcmdldCA9IGdsb2JhbFRoaXNbVEFSR0VUXSAmJiBnbG9iYWxUaGlzW1RBUkdFVF0ucHJvdG90eXBlO1xuICB9XG4gIGlmICh0YXJnZXQpIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIHNvdXJjZVByb3BlcnR5ID0gc291cmNlW2tleV07XG4gICAgaWYgKG9wdGlvbnMuZG9udENhbGxHZXRTZXQpIHtcbiAgICAgIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xuICAgICAgdGFyZ2V0UHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG4gICAgfSBlbHNlIHRhcmdldFByb3BlcnR5ID0gdGFyZ2V0W2tleV07XG4gICAgRk9SQ0VEID0gaXNGb3JjZWQoR0xPQkFMID8ga2V5IDogVEFSR0VUICsgKFNUQVRJQyA/ICcuJyA6ICcjJykgKyBrZXksIG9wdGlvbnMuZm9yY2VkKTtcbiAgICAvLyBjb250YWluZWQgaW4gdGFyZ2V0XG4gICAgaWYgKCFGT1JDRUQgJiYgdGFyZ2V0UHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBzb3VyY2VQcm9wZXJ0eSA9PSB0eXBlb2YgdGFyZ2V0UHJvcGVydHkpIGNvbnRpbnVlO1xuICAgICAgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhzb3VyY2VQcm9wZXJ0eSwgdGFyZ2V0UHJvcGVydHkpO1xuICAgIH1cbiAgICAvLyBhZGQgYSBmbGFnIHRvIG5vdCBjb21wbGV0ZWx5IGZ1bGwgcG9seWZpbGxzXG4gICAgaWYgKG9wdGlvbnMuc2hhbSB8fCAodGFyZ2V0UHJvcGVydHkgJiYgdGFyZ2V0UHJvcGVydHkuc2hhbSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShzb3VyY2VQcm9wZXJ0eSwgJ3NoYW0nLCB0cnVlKTtcbiAgICB9XG4gICAgZGVmaW5lQnVpbHRJbih0YXJnZXQsIGtleSwgc291cmNlUHJvcGVydHksIG9wdGlvbnMpO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgVE9fU1RSSU5HX1RBR19TVVBQT1JUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjbGFzc29mUmF3ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09PSAnT2JqZWN0JyAmJiBpc0NhbGxhYmxlKE8uY2FsbGVlKSA/ICdBcmd1bWVudHMnIDogcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxudmFyICRTdHJpbmcgPSBTdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChjbGFzc29mKGFyZ3VtZW50KSA9PT0gJ1N5bWJvbCcpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJ2EnLCAneScpO1xuICByZS5sYXN0SW5kZXggPSAyO1xuICByZXR1cm4gcmUuZXhlYygnYWJjZCcpICE9PSBudWxsO1xufSk7XG5cbi8vIFVDIEJyb3dzZXIgYnVnXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTAwOFxudmFyIE1JU1NFRF9TVElDS1kgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEkUmVnRXhwKCdhJywgJ3knKS5zdGlja3k7XG59KTtcblxudmFyIEJST0tFTl9DQVJFVCA9IFVOU1VQUE9SVEVEX1kgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM2ODdcbiAgdmFyIHJlID0gJFJlZ0V4cCgnXnInLCAnZ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ3N0cicpICE9PSBudWxsO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCUk9LRU5fQ0FSRVQ6IEJST0tFTl9DQVJFVCxcbiAgTUlTU0VEX1NUSUNLWTogTUlTU0VEX1NUSUNLWSxcbiAgVU5TVVBQT1JURURfWTogVU5TVVBQT1JURURfWVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWtleXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnRpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0aWVzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IERFU0NSSVBUT1JTICYmICFWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcHMgPSB0b0luZGV4ZWRPYmplY3QoUHJvcGVydGllcyk7XG4gIHZhciBrZXlzID0gb2JqZWN0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIGRlZmluZVByb3BlcnR5TW9kdWxlLmYoTywga2V5ID0ga2V5c1tpbmRleCsrXSwgcHJvcHNba2V5XSk7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWFzc2lnbm1lbnQgLS0gYXZvaWQgbWVtb3J5IGxlYWtcbiAgYWN0aXZlWERvY3VtZW50ID0gbnVsbDtcbiAgcmV0dXJuIHRlbXA7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgdmFyIEpTID0gJ2phdmEnICsgU0NSSVBUICsgJzonO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICBodG1sLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy80NzVcbiAgaWZyYW1lLnNyYyA9IFN0cmluZyhKUyk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCdkb2N1bWVudC5GPU9iamVjdCcpKTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgcmV0dXJuIGlmcmFtZURvY3VtZW50LkY7XG59O1xuXG4vLyBDaGVjayBmb3IgZG9jdW1lbnQuZG9tYWluIGFuZCBhY3RpdmUgeCBzdXBwb3J0XG4vLyBObyBuZWVkIHRvIHVzZSBhY3RpdmUgeCBhcHByb2FjaCB3aGVuIGRvY3VtZW50LmRvbWFpbiBpcyBub3Qgc2V0XG4vLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2lzc3Vlcy8xNTBcbi8vIHZhcmlhdGlvbiBvZiBodHRwczovL2dpdGh1Yi5jb20va2l0Y2FtYnJpZGdlL2VzNS1zaGltL2NvbW1pdC80ZjczOGFjMDY2MzQ2XG4vLyBhdm9pZCBJRSBHQyBidWdcbnZhciBhY3RpdmVYRG9jdW1lbnQ7XG52YXIgTnVsbFByb3RvT2JqZWN0ID0gZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIGFjdGl2ZVhEb2N1bWVudCA9IG5ldyBBY3RpdmVYT2JqZWN0KCdodG1sZmlsZScpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBpZ25vcmUgKi8gfVxuICBOdWxsUHJvdG9PYmplY3QgPSB0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCdcbiAgICA/IGRvY3VtZW50LmRvbWFpbiAmJiBhY3RpdmVYRG9jdW1lbnRcbiAgICAgID8gTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpIC8vIG9sZCBJRVxuICAgICAgOiBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUoKVxuICAgIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChhY3RpdmVYRG9jdW1lbnQpOyAvLyBXU0hcbiAgdmFyIGxlbmd0aCA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSBkZWxldGUgTnVsbFByb3RvT2JqZWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbbGVuZ3RoXV07XG4gIHJldHVybiBOdWxsUHJvdG9PYmplY3QoKTtcbn07XG5cbmhpZGRlbktleXNbSUVfUFJPVE9dID0gdHJ1ZTtcblxuLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuY3JlYXRlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdzJykgLT4gLy4vcyBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbFRoaXMuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnLicsICdzJyk7XG4gIHJldHVybiAhKHJlLmRvdEFsbCAmJiByZS50ZXN0KCdcXG4nKSAmJiByZS5mbGFncyA9PT0gJ3MnKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJyg/PGE+YiknLCAnZycpIC0+IC8oPzxhPmIpL2cgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWxUaGlzLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKS5nZXQ7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCcpO1xudmFyIFVOU1VQUE9SVEVEX05DRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnJyk7XG5cbnZhciBuYXRpdmVSZXBsYWNlID0gc2hhcmVkKCduYXRpdmUtc3RyaW5nLXJlcGxhY2UnLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgaW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS87XG4gIHZhciByZTIgPSAvYiovZztcbiAgY2FsbChuYXRpdmVFeGVjLCByZTEsICdhJyk7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUyLCAnYScpO1xuICByZXR1cm4gcmUxLmxhc3RJbmRleCAhPT0gMCB8fCByZTIubGFzdEluZGV4ICE9PSAwO1xufSkoKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLkJST0tFTl9DQVJFVDtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQgfHwgVU5TVVBQT1JURURfWSB8fCBVTlNVUFBPUlRFRF9ET1RfQUxMIHx8IFVOU1VQUE9SVEVEX05DRztcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHJpbmcpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUocmUpO1xuICAgIHZhciBzdHIgPSB0b1N0cmluZyhzdHJpbmcpO1xuICAgIHZhciByYXcgPSBzdGF0ZS5yYXc7XG4gICAgdmFyIHJlc3VsdCwgcmVDb3B5LCBsYXN0SW5kZXgsIG1hdGNoLCBpLCBvYmplY3QsIGdyb3VwO1xuXG4gICAgaWYgKHJhdykge1xuICAgICAgcmF3Lmxhc3RJbmRleCA9IHJlLmxhc3RJbmRleDtcbiAgICAgIHJlc3VsdCA9IGNhbGwocGF0Y2hlZEV4ZWMsIHJhdywgc3RyKTtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJhdy5sYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHZhciBncm91cHMgPSBzdGF0ZS5ncm91cHM7XG4gICAgdmFyIHN0aWNreSA9IFVOU1VQUE9SVEVEX1kgJiYgcmUuc3RpY2t5O1xuICAgIHZhciBmbGFncyA9IGNhbGwocmVnZXhwRmxhZ3MsIHJlKTtcbiAgICB2YXIgc291cmNlID0gcmUuc291cmNlO1xuICAgIHZhciBjaGFyc0FkZGVkID0gMDtcbiAgICB2YXIgc3RyQ29weSA9IHN0cjtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGZsYWdzID0gcmVwbGFjZShmbGFncywgJ3knLCAnJyk7XG4gICAgICBpZiAoaW5kZXhPZihmbGFncywgJ2cnKSA9PT0gLTEpIHtcbiAgICAgICAgZmxhZ3MgKz0gJ2cnO1xuICAgICAgfVxuXG4gICAgICBzdHJDb3B5ID0gc3RyaW5nU2xpY2Uoc3RyLCByZS5sYXN0SW5kZXgpO1xuICAgICAgLy8gU3VwcG9ydCBhbmNob3JlZCBzdGlja3kgYmVoYXZpb3IuXG4gICAgICBpZiAocmUubGFzdEluZGV4ID4gMCAmJiAoIXJlLm11bHRpbGluZSB8fCByZS5tdWx0aWxpbmUgJiYgY2hhckF0KHN0ciwgcmUubGFzdEluZGV4IC0gMSkgIT09ICdcXG4nKSkge1xuICAgICAgICBzb3VyY2UgPSAnKD86ICcgKyBzb3VyY2UgKyAnKSc7XG4gICAgICAgIHN0ckNvcHkgPSAnICcgKyBzdHJDb3B5O1xuICAgICAgICBjaGFyc0FkZGVkKys7XG4gICAgICB9XG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgc3RyIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeKD86JyArIHNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgIH1cblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHNvdXJjZSArICckKD8hXFxcXHMpJywgZmxhZ3MpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG5cbiAgICBtYXRjaCA9IGNhbGwobmF0aXZlRXhlYywgc3RpY2t5ID8gcmVDb3B5IDogcmUsIHN0ckNvcHkpO1xuXG4gICAgaWYgKHN0aWNreSkge1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIG1hdGNoLmlucHV0ID0gc3RyaW5nU2xpY2UobWF0Y2guaW5wdXQsIGNoYXJzQWRkZWQpO1xuICAgICAgICBtYXRjaFswXSA9IHN0cmluZ1NsaWNlKG1hdGNoWzBdLCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2guaW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICAgIHJlLmxhc3RJbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICB9IGVsc2UgcmUubGFzdEluZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmUubGFzdEluZGV4ID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24ndCB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZXhlY2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUuZXhlY1xuJCh7IHRhcmdldDogJ1JlZ0V4cCcsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IC8uLy5leGVjICE9PSBleGVjIH0sIHtcbiAgZXhlYzogZXhlY1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBpdGVyYWJsZSBET00gY29sbGVjdGlvbnNcbi8vIGZsYWcgLSBgaXRlcmFibGVgIGludGVyZmFjZSAtICdlbnRyaWVzJywgJ2tleXMnLCAndmFsdWVzJywgJ2ZvckVhY2gnIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0ge1xuICBDU1NSdWxlTGlzdDogMCxcbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogMCxcbiAgQ1NTVmFsdWVMaXN0OiAwLFxuICBDbGllbnRSZWN0TGlzdDogMCxcbiAgRE9NUmVjdExpc3Q6IDAsXG4gIERPTVN0cmluZ0xpc3Q6IDAsXG4gIERPTVRva2VuTGlzdDogMSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IDAsXG4gIEZpbGVMaXN0OiAwLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogMCxcbiAgSFRNTENvbGxlY3Rpb246IDAsXG4gIEhUTUxGb3JtRWxlbWVudDogMCxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IDAsXG4gIE1lZGlhTGlzdDogMCxcbiAgTWltZVR5cGVBcnJheTogMCxcbiAgTmFtZWROb2RlTWFwOiAwLFxuICBOb2RlTGlzdDogMSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogMCxcbiAgUGx1Z2luOiAwLFxuICBQbHVnaW5BcnJheTogMCxcbiAgU1ZHTGVuZ3RoTGlzdDogMCxcbiAgU1ZHTnVtYmVyTGlzdDogMCxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IDAsXG4gIFNWR1BvaW50TGlzdDogMCxcbiAgU1ZHU3RyaW5nTGlzdDogMCxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogMCxcbiAgU291cmNlQnVmZmVyTGlzdDogMCxcbiAgU3R5bGVTaGVldExpc3Q6IDAsXG4gIFRleHRUcmFja0N1ZUxpc3Q6IDAsXG4gIFRleHRUcmFja0xpc3Q6IDAsXG4gIFRvdWNoTGlzdDogMFxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGluIG9sZCBXZWJLaXQgdmVyc2lvbnMsIGBlbGVtZW50LmNsYXNzTGlzdGAgaXMgbm90IGFuIGluc3RhbmNlIG9mIGdsb2JhbCBgRE9NVG9rZW5MaXN0YFxudmFyIGRvY3VtZW50Q3JlYXRlRWxlbWVudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudCcpO1xuXG52YXIgY2xhc3NMaXN0ID0gZG9jdW1lbnRDcmVhdGVFbGVtZW50KCdzcGFuJykuY2xhc3NMaXN0O1xudmFyIERPTVRva2VuTGlzdFByb3RvdHlwZSA9IGNsYXNzTGlzdCAmJiBjbGFzc0xpc3QuY29uc3RydWN0b3IgJiYgY2xhc3NMaXN0LmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01Ub2tlbkxpc3RQcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgPyB1bmRlZmluZWQgOiBET01Ub2tlbkxpc3RQcm90b3R5cGU7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIFVOU0NPUEFCTEVTID0gd2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmlmIChBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU10gPT09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICBGLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IG51bGw7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBzaGFyZWRLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkLWtleScpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXInKTtcblxudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gJE9iamVjdC5wcm90b3R5cGU7XG5cbi8vIGBPYmplY3QuZ2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0cHJvdG90eXBlb2Zcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gZmFsc2U7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1vYmplY3RcbnZhciBJdGVyYXRvclByb3RvdHlwZSwgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlLCBhcnJheUl0ZXJhdG9yO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gIWlzT2JqZWN0KEl0ZXJhdG9yUHJvdG90eXBlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciB0ZXN0ID0ge307XG4gIC8vIEZGNDQtIGxlZ2FjeSBpdGVyYXRvcnMgY2FzZVxuICByZXR1cm4gSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwodGVzdCkgIT09IHRlc3Q7XG59KTtcblxuaWYgKE5FV19JVEVSQVRPUl9QUk9UT1RZUEUpIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5lbHNlIGlmIChJU19QVVJFKSBJdGVyYXRvclByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG5cbi8vIGAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0laXRlcmF0b3Jwcm90b3R5cGUlLUBAaXRlcmF0b3JcbmlmICghaXNDYWxsYWJsZShJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gIGRlZmluZUJ1aWx0SW4oSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSXRlcmF0b3JQcm90b3R5cGU6IEl0ZXJhdG9yUHJvdG90eXBlLFxuICBCVUdHWV9TQUZBUklfSVRFUkFUT1JTOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIFRBRywgU1RBVElDKSB7XG4gIGlmICh0YXJnZXQgJiYgIVNUQVRJQykgdGFyZ2V0ID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgaWYgKHRhcmdldCAmJiAhaGFzT3duKHRhcmdldCwgVE9fU1RSSU5HX1RBRykpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIFRPX1NUUklOR19UQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogVEFHIH0pO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJykuSXRlcmF0b3JQcm90b3R5cGU7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwga2V5LCBtZXRob2QpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gICAgcmV0dXJuIHVuY3VycnlUaGlzKGFDYWxsYWJsZShPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwga2V5KVttZXRob2RdKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiBpc09iamVjdChhcmd1bWVudCkgfHwgYXJndW1lbnQgPT09IG51bGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzUG9zc2libGVQcm90b3R5cGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc1Bvc3NpYmxlUHJvdG90eXBlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyBuZXcgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvcicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIHJlcXVpcmVPYmplY3RDb2VyY2libGUoTyk7XG4gICAgYVBvc3NpYmxlUHJvdG90eXBlKHByb3RvKTtcbiAgICBpZiAoIWlzT2JqZWN0KE8pKSByZXR1cm4gTztcbiAgICBpZiAoQ09SUkVDVF9TRVRURVIpIHNldHRlcihPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIEZ1bmN0aW9uTmFtZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEl0ZXJhdG9yc0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUnKTtcblxudmFyIFBST1BFUl9GVU5DVElPTl9OQU1FID0gRnVuY3Rpb25OYW1lLlBST1BFUjtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5DT05GSUdVUkFCTEU7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSBJdGVyYXRvcnNDb3JlLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgPSBJdGVyYXRvcnNDb3JlLkJVR0dZX1NBRkFSSV9JVEVSQVRPUlM7XG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcbnZhciBFTlRSSUVTID0gJ2VudHJpZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEl0ZXJhYmxlLCBOQU1FLCBJdGVyYXRvckNvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yKEl0ZXJhdG9yQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gIHZhciBnZXRJdGVyYXRpb25NZXRob2QgPSBmdW5jdGlvbiAoS0lORCkge1xuICAgIGlmIChLSU5EID09PSBERUZBVUxUICYmIGRlZmF1bHRJdGVyYXRvcikgcmV0dXJuIGRlZmF1bHRJdGVyYXRvcjtcbiAgICBpZiAoIUJVR0dZX1NBRkFSSV9JVEVSQVRPUlMgJiYgS0lORCAmJiBLSU5EIGluIEl0ZXJhYmxlUHJvdG90eXBlKSByZXR1cm4gSXRlcmFibGVQcm90b3R5cGVbS0lORF07XG5cbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBJdGVyYXRvckNvbnN0cnVjdG9yKHRoaXMpOyB9O1xuICB9O1xuXG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgSU5DT1JSRUNUX1ZBTFVFU19OQU1FID0gZmFsc2U7XG4gIHZhciBJdGVyYWJsZVByb3RvdHlwZSA9IEl0ZXJhYmxlLnByb3RvdHlwZTtcbiAgdmFyIG5hdGl2ZUl0ZXJhdG9yID0gSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdXG4gICAgfHwgSXRlcmFibGVQcm90b3R5cGVbJ0BAaXRlcmF0b3InXVxuICAgIHx8IERFRkFVTFQgJiYgSXRlcmFibGVQcm90b3R5cGVbREVGQVVMVF07XG4gIHZhciBkZWZhdWx0SXRlcmF0b3IgPSAhQlVHR1lfU0FGQVJJX0lURVJBVE9SUyAmJiBuYXRpdmVJdGVyYXRvciB8fCBnZXRJdGVyYXRpb25NZXRob2QoREVGQVVMVCk7XG4gIHZhciBhbnlOYXRpdmVJdGVyYXRvciA9IE5BTUUgPT09ICdBcnJheScgPyBJdGVyYWJsZVByb3RvdHlwZS5lbnRyaWVzIHx8IG5hdGl2ZUl0ZXJhdG9yIDogbmF0aXZlSXRlcmF0b3I7XG4gIHZhciBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIG1ldGhvZHMsIEtFWTtcblxuICAvLyBmaXggbmF0aXZlXG4gIGlmIChhbnlOYXRpdmVJdGVyYXRvcikge1xuICAgIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGFueU5hdGl2ZUl0ZXJhdG9yLmNhbGwobmV3IEl0ZXJhYmxlKCkpKTtcbiAgICBpZiAoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICBpZiAoIUlTX1BVUkUgJiYgZ2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlKSAhPT0gSXRlcmF0b3JQcm90b3R5cGUpIHtcbiAgICAgICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgc2V0UHJvdG90eXBlT2YoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBJdGVyYXRvclByb3RvdHlwZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzQ2FsbGFibGUoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgICAgICAgICBkZWZpbmVCdWlsdEluKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHRydWUsIHRydWUpO1xuICAgICAgaWYgKElTX1BVUkUpIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gICAgfVxuICB9XG5cbiAgLy8gZml4IEFycmF5LnByb3RvdHlwZS57IHZhbHVlcywgQEBpdGVyYXRvciB9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgREVGQVVMVCA9PT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUnKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgQVJSQVlfSVRFUkFUT1IgPSAnQXJyYXkgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfSVRFUkFUT1IpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZW50cmllc1xuLy8gYEFycmF5LnByb3RvdHlwZS5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmtleXNcbi8vIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnZhbHVlc1xuLy8gYEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQGl0ZXJhdG9yXG4vLyBgQ3JlYXRlQXJyYXlJdGVyYXRvcmAgaW50ZXJuYWwgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZWFycmF5aXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lSXRlcmF0b3IoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBBUlJBWV9JVEVSQVRPUixcbiAgICB0YXJnZXQ6IHRvSW5kZXhlZE9iamVjdChpdGVyYXRlZCksIC8vIHRhcmdldFxuICAgIGluZGV4OiAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICAgIGtpbmQ6IGtpbmQgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICB9KTtcbi8vIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVhcnJheWl0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gIHZhciB0YXJnZXQgPSBzdGF0ZS50YXJnZXQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSBudWxsO1xuICAgIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbiAgc3dpdGNoIChzdGF0ZS5raW5kKSB7XG4gICAgY2FzZSAna2V5cyc6IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gICAgY2FzZSAndmFsdWVzJzogcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodGFyZ2V0W2luZGV4XSwgZmFsc2UpO1xuICB9IHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgRE9NVG9rZW5MaXN0UHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS10b2tlbi1saXN0LXByb3RvdHlwZScpO1xudmFyIEFycmF5SXRlcmF0b3JNZXRob2RzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9yTWV0aG9kcy52YWx1ZXM7XG5cbnZhciBoYW5kbGVQcm90b3R5cGUgPSBmdW5jdGlvbiAoQ29sbGVjdGlvblByb3RvdHlwZSwgQ09MTEVDVElPTl9OQU1FKSB7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlKSB7XG4gICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdICE9PSBBcnJheVZhbHVlcykgdHJ5IHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSA9IEFycmF5VmFsdWVzO1xuICAgIH1cbiAgICBzZXRUb1N0cmluZ1RhZyhDb2xsZWN0aW9uUHJvdG90eXBlLCBDT0xMRUNUSU9OX05BTUUsIHRydWUpO1xuICAgIGlmIChET01JdGVyYWJsZXNbQ09MTEVDVElPTl9OQU1FXSkgZm9yICh2YXIgTUVUSE9EX05BTUUgaW4gQXJyYXlJdGVyYXRvck1ldGhvZHMpIHtcbiAgICAgIC8vIHNvbWUgQ2hyb21lIHZlcnNpb25zIGhhdmUgbm9uLWNvbmZpZ3VyYWJsZSBtZXRob2RzIG9uIERPTVRva2VuTGlzdFxuICAgICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdICE9PSBBcnJheUl0ZXJhdG9yTWV0aG9kc1tNRVRIT0RfTkFNRV0pIHRyeSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBNRVRIT0RfTkFNRSwgQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIENvbGxlY3Rpb25Qcm90b3R5cGVbTUVUSE9EX05BTUVdID0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuZm9yICh2YXIgQ09MTEVDVElPTl9OQU1FIGluIERPTUl0ZXJhYmxlcykge1xuICBoYW5kbGVQcm90b3R5cGUoZ2xvYmFsVGhpc1tDT0xMRUNUSU9OX05BTUVdICYmIGdsb2JhbFRoaXNbQ09MTEVDVElPTl9OQU1FXS5wcm90b3R5cGUsIENPTExFQ1RJT05fTkFNRSk7XG59XG5cbmhhbmRsZVByb3RvdHlwZShET01Ub2tlbkxpc3RQcm90b3R5cGUsICdET01Ub2tlbkxpc3QnKTtcbiIsImNvbnN0IHN2ZzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgYmxvY2txdW90ZTogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHJlY3Qgd2lkdGg9XCI1XCIgaGVpZ2h0PVwiNVwiIHg9XCIzXCIgeT1cIjRcIiByeT1cIjFcIi8+PHJlY3Qgcnk9XCIxXCIgeT1cIjRcIiB4PVwiMTBcIiBoZWlnaHQ9XCI1XCIgd2lkdGg9XCI1XCIvPjxwYXRoIGQ9XCJNOCA2Ljk5OXYzYzAgMS0xIDMtMSAzcy0uMzMxIDEtMS4zMzEgMWgtMWMtMSAwLS42NjktMS0uNjY5LTFzMS0yIDEtM3YtM3ptNyAwdjNjMCAxLTEgMy0xIDNzLS4zMzEgMS0xLjMzMSAxaC0xYy0xIDAtLjY2OS0xLS42NjktMXMxLTIgMS0zdi0zelwiLz48L3N2Zz5gLFxuICBib2xkOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTQgMmExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoNmM0IDAgNS0yIDUtNCAwLTEuMzIyLS40MzQtMi42MzYtMS44ODUtMy4zODFDMTMuNzcyIDcuODg1IDE0IDYuOTQ1IDE0IDZjMC0yLTEtNC01LTR6bTEgMmg0YzEuNjY4IDAgMi4zMi4zOTMgMi42LjY3Mi4yOC4yNzkuNC42NjIuNCAxLjMyOHMtLjEyIDEuMDU3LS40IDEuMzM4Yy0uMjc1LjI3NC0xLjAxNC42NDYtMi42LjY2Mkg1em01IDZjMS42NjYuMDA1IDIuMzE4LjM4OCAyLjU5Ni42NjYuMjc3LjI3OC40MDQuNjY3LjQwNCAxLjMzNHMtLjEyNyAxLjA2LS40MDQgMS4zMzhjLS4yNzguMjc4LS45My42Ni0yLjU5Ni42NjJsLTQuOTkyLjAwNEw1IDEwelwiLz48L3N2Zz5gLFxuICBjbGVhcl9mb3JtYXR0aW5nOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTExLjAzIDFhMSAxIDAgMDAtLjc0LjNsLTkgOWExIDEgMCAwMDAgMS40bDQgNEExIDEgMCAwMDYgMTZoMmExIDEgMCAwMC43LS4zbDgtOGExIDEgMCAwMDAtMS40bC01LTVhMSAxIDAgMDAtLjY3LS4zek04LjcgNS43bDMuNTggMy42TDcuNiAxNEg2LjRsLTMtMyA1LjMtNS4zelwiLz48cmVjdCByeT1cIi44XCIgcng9XCIuOFwiIHk9XCIxNFwiIHg9XCIxNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjJcIi8+PHJlY3Qgd2lkdGg9XCIyXCIgaGVpZ2h0PVwiMlwiIHg9XCIxM1wiIHk9XCIxNFwiIHJ4PVwiLjhcIiByeT1cIi44XCIvPjxyZWN0IHJ5PVwiLjhcIiByeD1cIi44XCIgeT1cIjE0XCIgeD1cIjEwXCIgaGVpZ2h0PVwiMlwiIHdpZHRoPVwiMlwiLz48L3N2Zz5gLFxuICBjb2RlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTEzLjUgMi45OTRhLjUuNSAwIDAwLS41LjUuNS41IDAgMDAwIC4wMzRWNC41M2E1Ljk5MyA1Ljk5MyAwIDAwLTcuNDUxLS40NDVBNiA2IDAgMTAxMi40NSAxMy45YTUuOTkgNS45OSAwIDAwMS4zNDYtMS4zMzQuNS41IDAgMDAuMDk2LS4xMDEuNS41IDAgMDAtLjEyLS42OTguNS41IDAgMDAtLjY5Ny4xMmwtLjAwNC0uMDA1YTUgNSAwIDAxLTEuMTk3IDEuMiA1IDUgMCAxMTEuMjE1LTYuOTY1LjUuNSAwIDAwLjY5Ny4xMi41LjUgMCAwMC4yMTEtLjQ0VjQuNzQ1SDE0VjMuNDkzYS41LjUgMCAwMC0uNS0uNXpcIi8+PC9zdmc+YCxcbiAgaDE6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNMyAyczAtMSAxLTFoMWMxIDAgMSAxIDEgMXY2aDZWMnMwLTEgMS0xaDFjMSAwIDEgMSAxIDF2MTRzMCAxLTEgMWgtMWMtMSAwLTEtMS0xLTF2LTZINnY2czAgMS0xIDFINGMtMSAwLTEtMS0xLTF6XCIvPjwvc3ZnPmAsXG4gIGgyOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTQgMnMwLTEgMS0xIDEgMSAxIDF2NmMxLTEgMi0xIDQtMSAzIDAgNCAyIDQgNHY1czAgMS0xIDEtMS0xLTEtMXYtNWMwLTEuMDk0LTEtMi0yLTItMiAwLTMgMC00IDJ2NXMwIDEtMSAxLTEtMS0xLTF6XCIvPjwvc3ZnPmAsXG4gIGhyOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cmVjdCByeT1cIjFcIiB5PVwiOFwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjE4XCIvPjwvc3ZnPmAsXG4gIGltYWdlOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTEgMnYxNGgxNlYySDF6bTIgMmgxMnY3bC0zLTMtNCA0LTItMi0zIDNWNHpcIi8+PGNpcmNsZSByPVwiMS41XCIgY3k9XCI2LjVcIiBjeD1cIjUuNVwiLz48L3N2Zz5gLFxuICBpdGFsaWM6IGA8c3ZnIGhlaWdodD1cIjE4XCIgd2lkdGg9XCIxOFwiPjxwYXRoIGQ9XCJNOSAyYTEgMSAwIDAwMCAyTDcgMTRhMSAxIDAgMTAwIDJoMmExIDEgMCAwMDAtMmwyLTEwYTEgMSAwIDEwMC0yelwiLz48L3N2Zz5gLFxuICBsaW5rOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTTkuMDcgNS4xOGEzLjkgMy45IDAgMDAtMS41Mi40M0M2LjMxIDYuMjIgNS4zIDcuMjkgNC4zIDguMjljLTEgMS0yLjA3IDIuMDItMi42OCAzLjI2LS4zMS42Mi0uNSAxLjMzLS40MSAyLjA3LjA5Ljc1LjQ4IDEuNDcgMS4xIDIuMDkuNjEuNjEgMS4zMyAxIDIuMDggMS4xLjc0LjA5IDEuNDUtLjEgMi4wNy0uNDIgMS4yNC0uNjEgMi4yNi0xLjY4IDMuMjYtMi42OC40Ni0uNDcuOTQtLjk0IDEuMzktMS40NGwtLjQzLjI2Yy0uNjguMzQtMS40OS41Ni0yLjM2LjQ2LS4yLS4wMy0uNC0uMDgtLjYtLjE0LS43OS43Ni0xLjU1IDEuNDUtMi4xNiAxLjc2LS4zOC4xOS0uNjcuMjQtLjkyLjIxLS4yNi0uMDMtLjU0LS4xNC0uOTItLjUzLS4zOS0uMzgtLjUtLjY2LS41My0uOTEtLjAzLS4yNi4wMi0uNTUuMjEtLjkzLjM5LS43NiAxLjMyLTEuNzQgMi4zMi0yLjc0IDEtMSAxLjk4LTEuOTMgMi43NC0yLjMyLjM4LS4xOS42Ny0uMjQuOTMtLjIxLjI1LjAzLjUzLjE0LjkxLjUzLjM5LjM4LjUuNjYuNTMuOTJ2LjA2bDEuMTItMS4wNi40NC0uNDdjLS4xOC0uMy0uNC0uNi0uNjctLjg3LS42Mi0uNjEtMS4zNC0xLTIuMDktMS4xYTMuMDggMy4wOCAwIDAwLS41NS0uMDF6XCIvPjxwYXRoIGQ9XCJNMTMuMDcuODZhMy45IDMuOSAwIDAwLTEuNTIuNDNjLTEuMjQuNjItMi4yNiAxLjY5LTMuMjYgMi42OS0uNDYuNDctLjk0Ljk0LTEuMzkgMS40My4xNS0uMDguMjgtLjE4LjQzLS4yNWE0LjQgNC40IDAgMDEyLjM2LS40NmMuMi4wMi40LjA3LjYuMTQuNzktLjc3IDEuNTUtMS40NiAyLjE2LTEuNzYuMzgtLjE5LjY3LS4yNS45My0uMjEuMjUuMDMuNTMuMTQuOTEuNTIuMzkuMzguNS42Ni41My45Mi4wMy4yNi0uMDIuNTUtLjIxLjkzLS4zOS43Ni0xLjMyIDEuNzQtMi4zMiAyLjc0LTEgMS0xLjk4IDEuOTMtMi43NCAyLjMxLS4zOC4yLS42Ny4yNS0uOTMuMjItLjI1LS4wNC0uNTMtLjE1LS45MS0uNTMtLjM5LS4zOC0uNS0uNjYtLjUzLS45MlY5Yy0uMzYuMzMtLjczLjY3LTEuMTIgMS4wNmwtLjQzLjQ2Yy4xNy4zLjQuNi42Ni44Ny42Mi42MiAxLjM0IDEgMi4wOCAxLjEuNzUuMSAxLjQ2LS4xIDIuMDgtLjQxIDEuMjQtLjYyIDIuMjYtMS42OSAzLjI2LTIuNjlzMi4wNy0yLjAyIDIuNjgtMy4yNmMuMzEtLjYyLjUtMS4zMi40MS0yLjA3YTMuNjMgMy42MyAwIDAwLTEuMS0yLjA4Yy0uNjEtLjYyLTEuMzMtMS0yLjA3LTEuMWEzLjA4IDMuMDggMCAwMC0uNTYtLjAyelwiLz48L3N2Zz5gLFxuICBvbDogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PHBhdGggZD1cIk0xLjUgN2EuNS41IDAgMTAwIDFoMWEuNS41IDAgMDEuNS41YzAgLjE2NC0uMDguMzEtLjE0LjM1NWwtMS42NTUgMS4yNUEuNDkyLjQ5MiAwIDAwMSAxMC41YS41LjUgMCAwMC41LjVoMmEuNS41IDAgMDAwLTFIM2wuMzk4LS4yOTlBMS41IDEuNSAwIDAwMi41IDd6XCIvPjxwYXRoIGQ9XCJNMS41IDEyYy0uNjY3IDAtLjY2NyAxIDAgMWgxLjI1Yy4zMzMgMCAuMzMzLjUgMCAuNUgyLjVjLS42NjcgMC0uNjY3IDEgMCAxaC4yNWMuMzMzIDAgLjMzMy41IDAgLjVIMS41Yy0uNjY3IDAtLjY2NyAxIDAgMWgxYy4zOTggMCAuNzgtLjEzMSAxLjA2LS4zNjUuMjgyLS4yMzUuNDQtLjU1NC40NC0uODg1YTEuMTIxIDEuMTIxIDAgMDAtLjMwMy0uNzVjLjE5MS0uMjA0LjMtLjQ3LjMwMy0uNzUgMC0uMzMyLS4xNTgtLjY1MS0uNDQtLjg4NS0uMy0uMjQxLS42NzUtLjM3LTEuMDYtLjM2NXpcIi8+PHJlY3QgeT1cIjEzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48cmVjdCByeT1cIjFcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMlwiIHg9XCI2XCIgeT1cIjhcIi8+PHJlY3QgeT1cIjNcIiB4PVwiNlwiIGhlaWdodD1cIjJcIiB3aWR0aD1cIjEyXCIgcnk9XCIxXCIvPjxwYXRoIGQ9XCJNMS41IDJhLjUuNSAwIDEwMCAxSDJ2MmgtLjVhLjUuNSAwIDEwMCAxaDJhLjUuNSAwIDEwMC0xSDNWMi41YzAtLjI3Ny0uMjIzLS41LS41LS41elwiLz48L3N2Zz5gLFxuICByZWRvOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTSA3LjI2OTUzMDgsMi43MDUwNzgxIEMgOC4xMTI4NzU1LDIuNzA4MTU4MSA4Ljk1Mjk4OTUsMi44NzEyMTU2IDkuNzMwNDY5LDMuMTM0NzY1NiAxMS40MDg4NzQsMy43MDM3MTIxIDEyLjkwMTQyLDQuNjg0NzEwNCAxNCw1LjYzNjcxODggViA0IGggMiBWIDkgSCAxMSBWIDcgaCAxLjUwOTc2NSBDIDExLjU5MDc1LDYuMjQ4NTE3MyAxMC4zNDAyMDgsNS40NTM4MDggOS4wODc4OTA0LDUuMDI5Mjk2OSA3LjQzMDkzOTgsNC40Njc2MjMxIDUuOTQ1MzQ1OCw0LjQ2ODcxNyA0LjcwNzAzMDgsNS43MDcwMzEyIGMgLTEuMjI1MDE0LDEuMjI1MDE0MiAtMS40MDk3NjksMi43MjA2OTUzIC0wLjc3OTI5Nyw0LjI5Njg3NDggMC42MzA0NzIsMS41NzYxOCAyLjE2NzQ3NSwzLjE1ODAwNiA0LjQ0MzM1OTgsNC4wNjgzNiBsIC0wLjc0MjE4NzgsMS44NTU0NjggYyAtMi43MjQxMTUsLTEuMDg5NjQ2IC00LjY4NzExMiwtMy4wMDc4MiAtNS41NTY2NCwtNS4xODE2NCAtMC44Njk1MjgsLTIuMTczODIwNiAtMC41NTQyODMsLTQuNjc4MTM5MyAxLjIyMDcwMywtNi40NTMxMjUyIDAuOTIzODU3LC0wLjkyMzg1NjggMi4wMTUzODgsLTEuMzg4ODI4IDMuMTM0NzY1LC0xLjUzNTE1NjMgMC4yNzk4NDUsLTAuMDM2NTgyIDAuNTYwNjgyLC0wLjA1Mzc2MSAwLjg0MTc5NywtMC4wNTI3MzQgelwiIC8+PC9zdmc+YCxcbiAgc3RyaWtldGhyb3VnaDogYDxzdmcgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCI+PHBhdGggZD1cIk0xMCAyQzYgMiA0IDQgNCA2YzAgLjMzOC4wOC42NzIuMTkzIDFoMi4zNEM2LjExMyA2LjYyOSA2IDYuMjk1IDYgNmMwLS4zMzQuMTE3LS43MjUuNjkxLTEuMTU0QzcuMjY1IDQuNDE2IDguMzMxIDQgMTAgNGgzYTEgMSAwIDAwMC0yem0xLjQ3NyA5Yy40MTMuMzY4LjUyMy43MDYuNTIzIDEgMCAuMzM0LS4xMjcuNzEyLS43MDEgMS4xNDMtLjU3NS40My0xLjYzMi44NS0zLjI5OS44NTdsLTEuMDA2LjAwN1YxNEg1YTEgMSAwIDAwMCAyaDNjNCAwIDYtMiA2LTQgMC0uMzM4LS4wODEtLjY3Mi0uMTk1LTF6XCIvPjxyZWN0IHJ5PVwiMVwiIHk9XCI4XCIgeD1cIjFcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxNlwiLz48L3N2Zz5gLFxuICB0YXNrbGlzdDogYDxzdmdcbiAgIGhlaWdodD1cIjE4XCJcbiAgIHdpZHRoPVwiMThcIlxuPlxuICAgPHBhdGhcbiAgICAgIGQ9XCJNIDIuMzMzOTg0NCwxIEMgMS42MDM5NjYzLDEgMSwxLjYwMzk2NjMgMSwyLjMzMzk4NDQgViA1LjY2NjAxNTYgQyAxLDYuMzk2MDMzNyAxLjYwMzk2NjMsNyAyLjMzMzk4NDQsNyBIIDUuNjY2MDE1NiBDIDYuMzk2MDMzNyw3IDcsNi4zOTYwMzM3IDcsNS42NjYwMTU2IFYgMi4zMzM5ODQ0IEMgNywxLjYwMzk2NjMgNi4zOTYwMzM3LDEgNS42NjYwMTU2LDEgWiBtIDAsMSBIIDUuNjY2MDE1NiBDIDUuODU5MzMwOSwyIDYsMi4xNDA2NjkxIDYsMi4zMzM5ODQ0IFYgNS42NjYwMTU2IEMgNiw1Ljg1OTMzMDkgNS44NTkzMzA5LDYgNS42NjYwMTU2LDYgSCAyLjMzMzk4NDQgQyAyLjE0MDY2OTEsNiAyLDUuODU5MzMwOSAyLDUuNjY2MDE1NiBWIDIuMzMzOTg0NCBDIDIsMi4xNDA2NjkxIDIuMTQwNjY5MSwyIDIuMzMzOTg0NCwyIFpcIlxuICAgLz5cbiAgIDxwYXRoXG4gICAgICBkPVwiTSAyLjMzMzk4NDQsMTEgQyAxLjYwMzk2NjMsMTEgMSwxMS42MDM5NjYgMSwxMi4zMzM5ODQgdiAzLjMzMjAzMiBDIDEsMTYuMzk2MDM0IDEuNjAzOTY2MywxNyAyLjMzMzk4NDQsMTcgSCA1LjY2NjAxNTYgQyA2LjM5NjAzMzcsMTcgNywxNi4zOTYwMzQgNywxNS42NjYwMTYgViAxMi4zMzM5ODQgQyA3LDExLjYwMzk2NiA2LjM5NjAzMzcsMTEgNS42NjYwMTU2LDExIFogbSAwLDEgSCA1LjY2NjAxNTYgQyA1Ljg1OTMzMDksMTIgNiwxMi4xNDA2NjkgNiwxMi4zMzM5ODQgdiAzLjMzMjAzMiBDIDYsMTUuODU5MzMxIDUuODU5MzMwOSwxNiA1LjY2NjAxNTYsMTYgSCAyLjMzMzk4NDQgQyAyLjE0MDY2OTEsMTYgMiwxNS44NTkzMzEgMiwxNS42NjYwMTYgViAxMi4zMzM5ODQgQyAyLDEyLjE0MDY2OSAyLjE0MDY2OTEsMTIgMi4zMzM5ODQ0LDEyIFpcIlxuICAgLz5cbiAgIDxwYXRoXG4gICAgICBkPVwibSAxMCwzIGggNyBjIDAuNTU0LDAgMSwwLjQ0NiAxLDEgMCwwLjU1NCAtMC40NDYsMSAtMSwxIEggMTAgQyA5LjQ0Niw1IDksNC41NTQgOSw0IDksMy40NDYgOS40NDYsMyAxMCwzIFpcIiAvPlxuICAgPHBhdGhcbiAgICAgIGQ9XCJtIDEwLDEzIGggNyBjIDAuNTU0LDAgMSwwLjQ0NiAxLDEgMCwwLjU1NCAtMC40NDYsMSAtMSwxIEggMTAgQyA5LjQ0NiwxNSA5LDE0LjU1NCA5LDE0IDksMTMuNDQ2IDkuNDQ2LDEzIDEwLDEzIFpcIiAvPlxuICAgPHBhdGhcbiAgICAgIGQ9XCJNIDQuODQxNzk2OSwyLjUyNTM5MDYgQSAwLjUsMC41IDAgMCAwIDQuNTUyNzM0NCwyLjc3NzM0MzggTCAzLjg2MzI4MTMsNC4xNTYyNSAzLjM1MzUxNTYsMy42NDY0ODQ0IGEgMC41LDAuNSAwIDAgMCAtMC43MDcwMzEyLDAgMC41LDAuNSAwIDAgMCAwLDAuNzA3MDMxMiBsIDEsMSBBIDAuNTAwMDUsMC41MDAwNSAwIDAgMCA0LjQ0NzI2NTYsNS4yMjI2NTYyIGwgMSwtMS45OTk5OTk5IEEgMC41LDAuNSAwIDAgMCA1LjIyMjY1NjIsMi41NTI3MzQ0IDAuNSwwLjUgMCAwIDAgNC44NDE3OTY5LDIuNTI1MzkwNiBaXCJcbiAgIC8+XG48L3N2Zz5gLFxuICB1bDogYDxzdmcgaGVpZ2h0PVwiMThcIiB3aWR0aD1cIjE4XCI+PGNpcmNsZSBjeD1cIjJcIiBjeT1cIjlcIiByPVwiMlwiLz48Y2lyY2xlIGN5PVwiNFwiIGN4PVwiMlwiIHI9XCIyXCIvPjxyZWN0IHk9XCIzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48Y2lyY2xlIGN4PVwiMlwiIGN5PVwiMTRcIiByPVwiMlwiLz48cmVjdCByeT1cIjFcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMlwiIHg9XCI2XCIgeT1cIjhcIi8+PHJlY3QgeT1cIjEzXCIgeD1cIjZcIiBoZWlnaHQ9XCIyXCIgd2lkdGg9XCIxMlwiIHJ5PVwiMVwiLz48L3N2Zz5gLFxuICB1bmRvOiBgPHN2ZyBoZWlnaHQ9XCIxOFwiIHdpZHRoPVwiMThcIj48cGF0aCBkPVwiTSAxMC43MzA0NjkgMi43MDUwNzgxIEMgOS44ODcxMjQzIDIuNzA4MTU5NCA5LjA0NzAxMDMgMi44NzEyMTU2IDguMjY5NTMxMiAzLjEzNDc2NTYgQyA2LjU5MTEyNTYgMy43MDM3MTIxIDUuMDk4NTc5NyA0LjY4NDcxMDQgNCA1LjYzNjcxODggTCA0IDQgTCAyIDQgTCAyIDkgTCA3IDkgTCA3IDcgTCA1LjQ5MDIzNDQgNyBDIDYuNDA5MjQ5OSA2LjI0ODUxNzMgNy42NTk3OTE0IDUuNDUzODA4IDguOTEyMTA5NCA1LjAyOTI5NjkgQyAxMC41NjkwNiA0LjQ2NzYyMzEgMTIuMDU0NjU0IDQuNDY4NzE3IDEzLjI5Mjk2OSA1LjcwNzAzMTIgQyAxNC41MTc5ODMgNi45MzIwNDU0IDE0LjcwMjczOCA4LjQyNzcyNjUgMTQuMDcyMjY2IDEwLjAwMzkwNiBDIDEzLjQ0MTc5NCAxMS41ODAwODYgMTEuOTA0NzkxIDEzLjE2MTkxMiA5LjYyODkwNjIgMTQuMDcyMjY2IEwgMTAuMzcxMDk0IDE1LjkyNzczNCBDIDEzLjA5NTIwOSAxNC44MzgwODggMTUuMDU4MjA2IDEyLjkxOTkxNCAxNS45Mjc3MzQgMTAuNzQ2MDk0IEMgMTYuNzk3MjYyIDguNTcyMjczNCAxNi40ODIwMTcgNi4wNjc5NTQ3IDE0LjcwNzAzMSA0LjI5Mjk2ODggQyAxMy43ODMxNzQgMy4zNjkxMTIgMTIuNjkxNjQzIDIuOTA0MTQwOCAxMS41NzIyNjYgMi43NTc4MTI1IEMgMTEuMjkyNDIxIDIuNzIxMjMwNCAxMS4wMTE1ODQgMi43MDQwNTEgMTAuNzMwNDY5IDIuNzA1MDc4MSB6IFwiIC8+PC9zdmc+XG5gXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzdmc7IiwiaW1wb3J0IHN2ZyBmcm9tIFwiLi9zdmcvc3ZnXCI7XG5pbXBvcnQgeyBFZGl0b3IsIFBvc2l0aW9uLCBTZWxlY3Rpb25FdmVudCB9IGZyb20gXCIuL1RpbnlNREVcIjtcblxuY29uc3QgaXNNYWNMaWtlID0gLyhNYWN8aVBob25lfGlQb2R8aVBhZCkvaS50ZXN0KFxuICB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiID8gbmF2aWdhdG9yLnBsYXRmb3JtIDogXCJcIlxuKTtcblxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kQWN0aW9uIHtcbiAgKGVkaXRvcjogRWRpdG9yKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kRW5hYmxlZCB7XG4gIChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbiwgYW5jaG9yPzogUG9zaXRpb24pOiBib29sZWFuIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kRGVmaW5pdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgYWN0aW9uPzogc3RyaW5nIHwgQ29tbWFuZEFjdGlvbjtcbiAgaW5uZXJIVE1MPzogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgaG90a2V5Pzogc3RyaW5nO1xuICBlbmFibGVkPzogQ29tbWFuZEVuYWJsZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZEJhclByb3BzIHtcbiAgZWxlbWVudD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBlZGl0b3I/OiBFZGl0b3I7XG4gIGNvbW1hbmRzPzogKHN0cmluZyB8IENvbW1hbmREZWZpbml0aW9uKVtdO1xufVxuXG5pbnRlcmZhY2UgSG90a2V5IHtcbiAgbW9kaWZpZXJzOiBzdHJpbmdbXTtcbiAgY29tbWFuZDogc3RyaW5nO1xuICBrZXk/OiBzdHJpbmc7XG4gIGNvZGU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IERlZmF1bHRDb21tYW5kczogUmVjb3JkPHN0cmluZywgQ29tbWFuZERlZmluaXRpb24+ID0ge1xuICBib2xkOiB7XG4gICAgbmFtZTogXCJib2xkXCIsXG4gICAgYWN0aW9uOiBcImJvbGRcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5ib2xkLFxuICAgIHRpdGxlOiBcIkJvbGRcIixcbiAgICBob3RrZXk6IFwiTW9kLUJcIixcbiAgfSxcbiAgaXRhbGljOiB7XG4gICAgbmFtZTogXCJpdGFsaWNcIixcbiAgICBhY3Rpb246IFwiaXRhbGljXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuaXRhbGljLFxuICAgIHRpdGxlOiBcIkl0YWxpY1wiLFxuICAgIGhvdGtleTogXCJNb2QtSVwiLFxuICB9LFxuICBzdHJpa2V0aHJvdWdoOiB7XG4gICAgbmFtZTogXCJzdHJpa2V0aHJvdWdoXCIsXG4gICAgYWN0aW9uOiBcInN0cmlrZXRocm91Z2hcIixcbiAgICBpbm5lckhUTUw6IHN2Zy5zdHJpa2V0aHJvdWdoLFxuICAgIHRpdGxlOiBcIlN0cmlrZXRocm91Z2hcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC01XCIsXG4gIH0sXG4gIGNvZGU6IHtcbiAgICBuYW1lOiBcImNvZGVcIixcbiAgICBhY3Rpb246IFwiY29kZVwiLFxuICAgIGlubmVySFRNTDogc3ZnLmNvZGUsXG4gICAgdGl0bGU6IFwiRm9ybWF0IGFzIGNvZGVcIixcbiAgfSxcbiAgaDE6IHtcbiAgICBuYW1lOiBcImgxXCIsXG4gICAgYWN0aW9uOiBcImgxXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuaDEsXG4gICAgdGl0bGU6IFwiTGV2ZWwgMSBoZWFkaW5nXCIsXG4gICAgaG90a2V5OiBcIk1vZC1TaGlmdC0xXCIsXG4gIH0sXG4gIGgyOiB7XG4gICAgbmFtZTogXCJoMlwiLFxuICAgIGFjdGlvbjogXCJoMlwiLFxuICAgIGlubmVySFRNTDogc3ZnLmgyLFxuICAgIHRpdGxlOiBcIkxldmVsIDIgaGVhZGluZ1wiLFxuICAgIGhvdGtleTogXCJNb2QtU2hpZnQtMlwiLFxuICB9LFxuICB1bDoge1xuICAgIG5hbWU6IFwidWxcIixcbiAgICBhY3Rpb246IFwidWxcIixcbiAgICBpbm5lckhUTUw6IHN2Zy51bCxcbiAgICB0aXRsZTogXCJCdWxsZXRlZCBsaXN0XCIsXG4gIH0sXG4gIG9sOiB7XG4gICAgbmFtZTogXCJvbFwiLFxuICAgIGFjdGlvbjogXCJvbFwiLFxuICAgIGlubmVySFRNTDogc3ZnLm9sLFxuICAgIHRpdGxlOiBcIk51bWJlcmVkIGxpc3RcIixcbiAgfSxcbiAgYmxvY2txdW90ZToge1xuICAgIG5hbWU6IFwiYmxvY2txdW90ZVwiLFxuICAgIGFjdGlvbjogXCJibG9ja3F1b3RlXCIsXG4gICAgaW5uZXJIVE1MOiBzdmcuYmxvY2txdW90ZSxcbiAgICB0aXRsZTogXCJRdW90ZVwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LVFcIixcbiAgfSxcbiAgdGFza2xpc3Q6IHtcbiAgICBuYW1lOiBcInRhc2tsaXN0XCIsXG4gICAgYWN0aW9uOiAoZWRpdG9yOiBFZGl0b3IpID0+IGVkaXRvci50b2dnbGVUYXNrTGlzdCgpLFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvciwgZm9jdXM/OiBQb3NpdGlvbikgPT5cbiAgICAgIGZvY3VzID8gZWRpdG9yLmlzVGFza0xpc3RJdGVtKGZvY3VzLnJvdykgOiBudWxsLFxuICAgIGlubmVySFRNTDogc3ZnLnRhc2tsaXN0LFxuICAgIHRpdGxlOiBcIlRhc2sgbGlzdFwiLFxuICAgIGhvdGtleTogXCJNb2QyLVNoaWZ0LVRcIixcbiAgfSxcbiAgaW5zZXJ0TGluazoge1xuICAgIG5hbWU6IFwiaW5zZXJ0TGlua1wiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgZWRpdG9yLndyYXBTZWxlY3Rpb24oXCJbXCIsIFwiXSgpXCIpO1xuICAgIH0sXG4gICAgZW5hYmxlZDogKGVkaXRvcjogRWRpdG9yKSA9PlxuICAgICAgZWRpdG9yLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSA/IGZhbHNlIDogbnVsbCxcbiAgICBpbm5lckhUTUw6IHN2Zy5saW5rLFxuICAgIHRpdGxlOiBcIkluc2VydCBsaW5rXCIsXG4gICAgaG90a2V5OiBcIk1vZC1LXCIsXG4gIH0sXG4gIGluc2VydEltYWdlOiB7XG4gICAgbmFtZTogXCJpbnNlcnRJbWFnZVwiLFxuICAgIGFjdGlvbjogKGVkaXRvcjogRWRpdG9yKSA9PiB7XG4gICAgICBpZiAoZWRpdG9yLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkgZWRpdG9yLndyYXBTZWxlY3Rpb24oXCIhW1wiLCBcIl0oKVwiKTtcbiAgICB9LFxuICAgIGVuYWJsZWQ6IChlZGl0b3I6IEVkaXRvcikgPT5cbiAgICAgIGVkaXRvci5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkgPyBmYWxzZSA6IG51bGwsXG4gICAgaW5uZXJIVE1MOiBzdmcuaW1hZ2UsXG4gICAgdGl0bGU6IFwiSW5zZXJ0IGltYWdlXCIsXG4gICAgaG90a2V5OiBcIk1vZDItU2hpZnQtSVwiLFxuICB9LFxuICBocjoge1xuICAgIG5hbWU6IFwiaHJcIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4gZWRpdG9yLnBhc3RlKFwiXFxuKioqXFxuXCIpLFxuICAgIGVuYWJsZWQ6ICgpID0+IGZhbHNlLFxuICAgIGlubmVySFRNTDogc3ZnLmhyLFxuICAgIHRpdGxlOiBcIkluc2VydCBob3Jpem9udGFsIGxpbmVcIixcbiAgICBob3RrZXk6IFwiTW9kMi1TaGlmdC1MXCIsXG4gIH0sXG4gIHVuZG86IHtcbiAgICBuYW1lOiBcInVuZG9cIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4gZWRpdG9yLnVuZG8oKSxcbiAgICBlbmFibGVkOiAoZWRpdG9yOiBFZGl0b3IpID0+IChlZGl0b3IuY2FuVW5kbyA/IGZhbHNlIDogbnVsbCksXG4gICAgaW5uZXJIVE1MOiBzdmcudW5kbyxcbiAgICB0aXRsZTogXCJVbmRvXCIsXG4gIH0sXG4gIHJlZG86IHtcbiAgICBuYW1lOiBcInJlZG9cIixcbiAgICBhY3Rpb246IChlZGl0b3I6IEVkaXRvcikgPT4gZWRpdG9yLnJlZG8oKSxcbiAgICBlbmFibGVkOiAoZWRpdG9yOiBFZGl0b3IpID0+IChlZGl0b3IuY2FuUmVkbyA/IGZhbHNlIDogbnVsbCksXG4gICAgaW5uZXJIVE1MOiBzdmcucmVkbyxcbiAgICB0aXRsZTogXCJSZWRvXCIsXG4gIH0sXG59O1xuXG5leHBvcnQgY2xhc3MgQ29tbWFuZEJhciB7XG4gIHB1YmxpYyBlOiBIVE1MRGl2RWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgZWRpdG9yOiBFZGl0b3IgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIGNvbW1hbmRzOiBSZWNvcmQ8c3RyaW5nLCBDb21tYW5kRGVmaW5pdGlvbj4gPSB7fTtcbiAgcHVibGljIGJ1dHRvbnM6IFJlY29yZDxzdHJpbmcsIEhUTUxEaXZFbGVtZW50PiA9IHt9O1xuICBwdWJsaWMgc3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiA9IHt9O1xuICBwcml2YXRlIGhvdGtleXM6IEhvdGtleVtdID0gW107XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IENvbW1hbmRCYXJQcm9wcykge1xuICAgIHRoaXMuZSA9IG51bGw7XG4gICAgdGhpcy5lZGl0b3IgPSBudWxsO1xuICAgIHRoaXMuY29tbWFuZHMgPSB7fTtcbiAgICB0aGlzLmJ1dHRvbnMgPSB7fTtcbiAgICB0aGlzLnN0YXRlID0ge307XG4gICAgdGhpcy5ob3RrZXlzID0gW107XG5cbiAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHByb3BzLmVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5lbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gcHJvcHMuZWxlbWVudDtcbiAgICB9XG4gICAgXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuYm9keTtcbiAgICB9XG5cbiAgICB0aGlzLmNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50KFxuICAgICAgZWxlbWVudCxcbiAgICAgIHByb3BzLmNvbW1hbmRzIHx8IFtcbiAgICAgICAgXCJib2xkXCIsXG4gICAgICAgIFwiaXRhbGljXCIsXG4gICAgICAgIFwic3RyaWtldGhyb3VnaFwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJjb2RlXCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImgxXCIsXG4gICAgICAgIFwiaDJcIixcbiAgICAgICAgXCJ8XCIsXG4gICAgICAgIFwidWxcIixcbiAgICAgICAgXCJvbFwiLFxuICAgICAgICBcInRhc2tsaXN0XCIsXG4gICAgICAgIFwifFwiLFxuICAgICAgICBcImJsb2NrcXVvdGVcIixcbiAgICAgICAgXCJoclwiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJ1bmRvXCIsXG4gICAgICAgIFwicmVkb1wiLFxuICAgICAgICBcInxcIixcbiAgICAgICAgXCJpbnNlcnRMaW5rXCIsXG4gICAgICAgIFwiaW5zZXJ0SW1hZ2VcIixcbiAgICAgIF1cbiAgICApO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZSkpO1xuICAgIGlmIChwcm9wcy5lZGl0b3IpIHRoaXMuc2V0RWRpdG9yKHByb3BzLmVkaXRvcik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbW1hbmRCYXJFbGVtZW50KHBhcmVudEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb21tYW5kczogKHN0cmluZyB8IENvbW1hbmREZWZpbml0aW9uKVtdKTogdm9pZCB7XG4gICAgdGhpcy5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0aGlzLmUuY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCYXJcIjtcblxuICAgIGZvciAobGV0IGNvbW1hbmQgb2YgY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kID09PSBcInxcIikge1xuICAgICAgICBsZXQgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICBlbC5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZERpdmlkZXJcIjtcbiAgICAgICAgdGhpcy5lLmFwcGVuZENoaWxkKGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb21tYW5kTmFtZTogc3RyaW5nO1xuICAgICAgICBpZiAodHlwZW9mIGNvbW1hbmQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBpZiAoRGVmYXVsdENvbW1hbmRzW2NvbW1hbmRdKSB7XG4gICAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQ7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IERlZmF1bHRDb21tYW5kc1tjb21tYW5kTmFtZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gXCJvYmplY3RcIiAmJiBjb21tYW5kLm5hbWUpIHtcbiAgICAgICAgICBjb21tYW5kTmFtZSA9IGNvbW1hbmQubmFtZTtcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSA9IHt9IGFzIENvbW1hbmREZWZpbml0aW9uO1xuICAgICAgICAgIGlmIChEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLCBEZWZhdWx0Q29tbWFuZHNbY29tbWFuZE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXSwgY29tbWFuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS50aXRsZSB8fCBjb21tYW5kTmFtZTtcblxuICAgICAgICBpZiAodGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaG90a2V5KSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmhvdGtleSEuc3BsaXQoXCItXCIpO1xuICAgICAgICAgIGxldCBtb2RpZmllcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgbGV0IG1vZGlmaWVyZXhwbGFuYXRpb246IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgc3dpdGNoIChrZXlzW2ldKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJDdHJsXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJjdHJsS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIkN0cmxcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJDbWRcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcIm1ldGFLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiQWx0XCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwiQWx0XCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiT3B0aW9uXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJhbHRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oylXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiV2luXCI6XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChcIuKKniBXaW5cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJTaGlmdFwiOlxuICAgICAgICAgICAgICAgIG1vZGlmaWVycy5wdXNoKFwic2hpZnRLZXlcIik7XG4gICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oenXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiTW9kXCI6XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFjTGlrZSkge1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzLnB1c2goXCJtZXRhS2V5XCIpO1xuICAgICAgICAgICAgICAgICAgbW9kaWZpZXJleHBsYW5hdGlvbi5wdXNoKFwi4oyYXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImN0cmxLZXlcIik7XG4gICAgICAgICAgICAgICAgICBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJDdHJsXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIk1vZDJcIjpcbiAgICAgICAgICAgICAgICBtb2RpZmllcnMucHVzaChcImFsdEtleVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWNMaWtlKSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCLijKVcIik7XG4gICAgICAgICAgICAgICAgZWxzZSBtb2RpZmllcmV4cGxhbmF0aW9uLnB1c2goXCJBbHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIG1vZGlmaWVyZXhwbGFuYXRpb24ucHVzaChrZXlzW2tleXMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgIGxldCBob3RrZXk6IEhvdGtleSA9IHtcbiAgICAgICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLFxuICAgICAgICAgICAgY29tbWFuZDogY29tbWFuZE5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBsYXN0S2V5ID0ga2V5c1trZXlzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0S2V5Lm1hdGNoKC9eWzAtOV0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYERpZ2l0JHtsYXN0S2V5fWA7XG4gICAgICAgICAgfSBlbHNlIGlmIChsYXN0S2V5Lm1hdGNoKC9eW2EtekEtWl0kLykpIHtcbiAgICAgICAgICAgIGhvdGtleS5jb2RlID0gYEtleSR7bGFzdEtleS50b1VwcGVyQ2FzZSgpfWA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhvdGtleS5rZXkgPSBsYXN0S2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaG90a2V5cy5wdXNoKGhvdGtleSk7XG4gICAgICAgICAgdGl0bGUgPSB0aXRsZS5jb25jYXQoYCAoJHttb2RpZmllcmV4cGxhbmF0aW9uLmpvaW4oXCIrXCIpfSlgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9EaXNhYmxlZFwiO1xuICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZE5hbWVdLnRpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0uaW5uZXJIVE1MID0gdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uaW5uZXJIVE1MIHx8IFwiP1wiO1xuXG4gICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kTmFtZV0uYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCAoZSkgPT5cbiAgICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGNvbW1hbmROYW1lLCBlKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmUuYXBwZW5kQ2hpbGQodGhpcy5idXR0b25zW2NvbW1hbmROYW1lXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ2xpY2soY29tbWFuZE5hbWU6IHN0cmluZywgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRvcikgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBGb2N1cyB0aGUgZWRpdG9yIGlmIGl0J3Mgbm90IGFscmVhZHkgZm9jdXNlZFxuICAgIGlmICh0aGlzLmVkaXRvci5lKSB7XG4gICAgICBjb25zdCBlZGl0b3JIYWRGb2N1cyA9IHRoaXMuZWRpdG9yLmUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgICB0aGlzLmVkaXRvci5lLmZvY3VzKCk7XG4gICAgICAvLyBPbmx5IHJlc3RvcmUgdGhlIGxhc3Qgc2VsZWN0aW9uIGlmIHRoZSBlZGl0b3Igd2FzIG5vdCBmb2N1c2VkIGJlZm9yZVxuICAgICAgaWYgKCFlZGl0b3JIYWRGb2N1cykge1xuICAgICAgICB0aGlzLmVkaXRvci5yZXN0b3JlTGFzdFNlbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdGhpcy5jb21tYW5kc1tjb21tYW5kTmFtZV0uYWN0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAodGhpcy5zdGF0ZVtjb21tYW5kTmFtZV0gPT09IGZhbHNlKVxuICAgICAgICAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIHRydWUpO1xuICAgICAgZWxzZSAodGhpcy5lZGl0b3IgYXMgYW55KS5zZXRDb21tYW5kU3RhdGUoY29tbWFuZE5hbWUsIGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbW1hbmRzW2NvbW1hbmROYW1lXS5hY3Rpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgKHRoaXMuY29tbWFuZHNbY29tbWFuZE5hbWVdLmFjdGlvbiBhcyBDb21tYW5kQWN0aW9uKSh0aGlzLmVkaXRvcik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEVkaXRvcihlZGl0b3I6IEVkaXRvcik6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yID0gZWRpdG9yO1xuICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uXCIsIChlKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihlKSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbihldmVudDogU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuY29tbWFuZFN0YXRlKSB7XG4gICAgICBmb3IgKGxldCBjb21tYW5kIGluIHRoaXMuY29tbWFuZHMpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNvbW1hbmRTdGF0ZVtjb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IHRoaXMuY29tbWFuZHNbY29tbWFuZF0uZW5hYmxlZCEoXG4gICAgICAgICAgICAgIHRoaXMuZWRpdG9yISxcbiAgICAgICAgICAgICAgZXZlbnQuZm9jdXMsXG4gICAgICAgICAgICAgIGV2ZW50LmFuY2hvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb21tYW5kXSA9IGV2ZW50LmZvY3VzID8gZmFsc2UgOiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXRlW2NvbW1hbmRdID0gZXZlbnQuY29tbWFuZFN0YXRlW2NvbW1hbmRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmJ1dHRvbnNbY29tbWFuZF0uY2xhc3NOYW1lID0gXCJUTUNvbW1hbmRCdXR0b24gVE1Db21tYW5kQnV0dG9uX0FjdGl2ZVwiO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGVbY29tbWFuZF0gPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5idXR0b25zW2NvbW1hbmRdLmNsYXNzTmFtZSA9IFwiVE1Db21tYW5kQnV0dG9uIFRNQ29tbWFuZEJ1dHRvbl9JbmFjdGl2ZVwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuYnV0dG9uc1tjb21tYW5kXS5jbGFzc05hbWUgPSBcIlRNQ29tbWFuZEJ1dHRvbiBUTUNvbW1hbmRCdXR0b25fRGlzYWJsZWRcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8vIE9ubHkgaGFuZGxlIGtleWJvYXJkIHNob3J0Y3V0cyBpZiB0aGlzIGVkaXRvciBpcyBjdXJyZW50bHkgZm9jdXNlZFxuICAgIGlmICghdGhpcy5lZGl0b3IgfHwgIXRoaXMuZWRpdG9yLmUpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZWRpdG9yLmUuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHJldHVybjtcblxuICAgIG91dGVyOiBmb3IgKGxldCBob3RrZXkgb2YgdGhpcy5ob3RrZXlzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChob3RrZXkua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSBob3RrZXkua2V5KSB8fFxuICAgICAgICAoaG90a2V5LmNvZGUgJiYgZXZlbnQuY29kZSA9PT0gaG90a2V5LmNvZGUpXG4gICAgICApIHtcbiAgICAgICAgZm9yIChsZXQgbW9kaWZpZXIgb2YgaG90a2V5Lm1vZGlmaWVycykge1xuICAgICAgICAgIGlmICghKGV2ZW50IGFzIGFueSlbbW9kaWZpZXJdKSBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGhvdGtleS5jb21tYW5kLCBldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZEJhcjsiLCIndXNlIHN0cmljdCc7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGFwcGx5ID0gRnVuY3Rpb25Qcm90b3R5cGUuYXBwbHk7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCwgZXMvbm8tcmVmbGVjdCAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ID09ICdvYmplY3QnICYmIFJlZmxlY3QuYXBwbHkgfHwgKE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGFwcGx5KSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNhbGwuYXBwbHkoYXBwbHksIGFyZ3VtZW50cyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBGT1JDRUQsIFNIQU0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIEZPUkNFRFxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICB2YXIgJGV4ZWMgPSByZWdleHAuZXhlYztcbiAgICAgIGlmICgkZXhlYyA9PT0gcmVnZXhwRXhlYyB8fCAkZXhlYyA9PT0gUmVnRXhwUHJvdG90eXBlLmV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IGNhbGwobmF0aXZlUmVnRXhwTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogY2FsbChuYXRpdmVNZXRob2QsIHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW4oU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgU1lNQk9MLCBtZXRob2RzWzFdKTtcbiAgfVxuXG4gIGlmIChTSEFNKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwUHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG5cbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGNoYXJDb2RlQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQ29kZUF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChDT05WRVJUX1RPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBwb3MpIHtcbiAgICB2YXIgUyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICB2YXIgcG9zaXRpb24gPSB0b0ludGVnZXJPckluZmluaXR5KHBvcyk7XG4gICAgdmFyIHNpemUgPSBTLmxlbmd0aDtcbiAgICB2YXIgZmlyc3QsIHNlY29uZDtcbiAgICBpZiAocG9zaXRpb24gPCAwIHx8IHBvc2l0aW9uID49IHNpemUpIHJldHVybiBDT05WRVJUX1RPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGZpcnN0ID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbik7XG4gICAgcmV0dXJuIGZpcnN0IDwgMHhEODAwIHx8IGZpcnN0ID4gMHhEQkZGIHx8IHBvc2l0aW9uICsgMSA9PT0gc2l6ZVxuICAgICAgfHwgKHNlY29uZCA9IGNoYXJDb2RlQXQoUywgcG9zaXRpb24gKyAxKSkgPCAweERDMDAgfHwgc2Vjb25kID4gMHhERkZGXG4gICAgICAgID8gQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IGNoYXJBdChTLCBwb3NpdGlvbilcbiAgICAgICAgICA6IGZpcnN0XG4gICAgICAgIDogQ09OVkVSVF9UT19TVFJJTkdcbiAgICAgICAgICA/IHN0cmluZ1NsaWNlKFMsIHBvc2l0aW9uLCBwb3NpdGlvbiArIDIpXG4gICAgICAgICAgOiAoZmlyc3QgLSAweEQ4MDAgPDwgMTApICsgKHNlY29uZCAtIDB4REMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmNvZGVwb2ludGF0XG4gIGNvZGVBdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuYXRgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG4gIGNoYXJBdDogY3JlYXRlTWV0aG9kKHRydWUpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xuXG4vLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGNoYXJBdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZG9zL25vLXZ1bG5lcmFibGUgLS0gc2FmZVxudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCYnYF18XFxkezEsMn18PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9KS9nO1xuXG4vLyBgR2V0U3Vic3RpdHV0aW9uYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gIH1cbiAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICB2YXIgY2FwdHVyZTtcbiAgICBzd2l0Y2ggKGNoYXJBdChjaCwgMCkpIHtcbiAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHJpbmdTbGljZShzdHIsIDAsIHBvc2l0aW9uKTtcbiAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHJpbmdTbGljZShzdHIsIHRhaWxQb3MpO1xuICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW3N0cmluZ1NsaWNlKGNoLCAxLCAtMSldO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoYXJBdChjaCwgMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaGFyQXQoY2gsIDEpO1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmIChpc0NhbGxhYmxlKGV4ZWMpKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNhbGwoZXhlYywgUiwgUyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYW5PYmplY3QocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpID09PSAnUmVnRXhwJykgcmV0dXJuIGNhbGwocmVnZXhwRXhlYywgUiwgUyk7XG4gIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbicpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gSUUgPD0gMTEgcmVwbGFjZXMgJDAgd2l0aCB0aGUgd2hvbGUgbWF0Y2gsIGFzIGlmIGl0IHdhcyAkJlxuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjAyNDY2Ni9nZXR0aW5nLWllLXRvLXJlcGxhY2UtYS1yZWdleC13aXRoLXRoZS1saXRlcmFsLXN0cmluZy0wXG52YXIgUkVQTEFDRV9LRUVQU18kMCA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvcHJlZmVyLWVzY2FwZS1yZXBsYWNlbWVudC1kb2xsYXItY2hhciAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gJ2EnLnJlcGxhY2UoLy4vLCAnJDAnKSA9PT0gJyQwJztcbn0pKCk7XG5cbi8vIFNhZmFyaSA8PSAxMy4wLjMoPykgc3Vic3RpdHV0ZXMgbnRoIGNhcHR1cmUgd2hlcmUgbj5tIHdpdGggYW4gZW1wdHkgc3RyaW5nXG52YXIgUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPSAoZnVuY3Rpb24gKCkge1xuICBpZiAoLy4vW1JFUExBQ0VdKSB7XG4gICAgcmV0dXJuIC8uL1tSRVBMQUNFXSgnYScsICckMCcpID09PSAnJztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KSgpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tdXNlbGVzcy1kb2xsYXItcmVwbGFjZW1lbnRzIC0tIGZhbHNlIHBvc2l0aXZlXG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygncmVwbGFjZScsIGZ1bmN0aW9uIChfLCBuYXRpdmVSZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIFVOU0FGRV9TVUJTVElUVVRFID0gUkVHRVhQX1JFUExBQ0VfU1VCU1RJVFVURVNfVU5ERUZJTkVEX0NBUFRVUkUgPyAnJCcgOiAnJDAnO1xuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciByZXBsYWNlciA9IGlzT2JqZWN0KHNlYXJjaFZhbHVlKSA/IGdldE1ldGhvZChzZWFyY2hWYWx1ZSwgUkVQTEFDRSkgOiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gcmVwbGFjZXJcbiAgICAgICAgPyBjYWxsKHJlcGxhY2VyLCBzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6IGNhbGwobmF0aXZlUmVwbGFjZSwgdG9TdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChzdHJpbmcsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PSAnc3RyaW5nJyAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgVU5TQUZFX1NVQlNUSVRVVEUpID09PSAtMSAmJlxuICAgICAgICBzdHJpbmdJbmRleE9mKHJlcGxhY2VWYWx1ZSwgJyQ8JykgPT09IC0xXG4gICAgICApIHtcbiAgICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVSZXBsYWNlLCByeCwgUywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSBpc0NhbGxhYmxlKHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSB0b1N0cmluZyhyZXBsYWNlVmFsdWUpO1xuXG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHB1c2gocmVzdWx0cywgcmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuXG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50O1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIHB1c2goY2FwdHVyZXMsIG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IGNvbmNhdChbbWF0Y2hlZF0sIGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcHVzaChyZXBsYWNlckFyZ3MsIG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gdG9TdHJpbmcoYXBwbHkocmVwbGFjZVZhbHVlLCB1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gc3RyaW5nU2xpY2UoUywgbmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSwgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIHx8ICFSRVBMQUNFX0tFRVBTXyQwIHx8IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXlsnICsgd2hpdGVzcGFjZXMgKyAnXSsnKTtcbnZhciBydHJpbSA9IFJlZ0V4cCgnKF58W14nICsgd2hpdGVzcGFjZXMgKyAnXSlbJyArIHdoaXRlc3BhY2VzICsgJ10rJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgbHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBydHJpbSwgJyQxJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBub24gPSAnXFx1MjAwQlxcdTAwODVcXHUxODBFJztcblxuLy8gY2hlY2sgdGhhdCBhIG1ldGhvZCB3b3JrcyB3aXRoIHRoZSBjb3JyZWN0IGxpc3Rcbi8vIG9mIHdoaXRlc3BhY2VzIGFuZCBoYXMgYSBjb3JyZWN0IG5hbWVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdKClcbiAgICAgIHx8IG5vbltNRVRIT0RfTkFNRV0oKSAhPT0gbm9uXG4gICAgICB8fCAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdLm5hbWUgIT09IE1FVEhPRF9OQU1FKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIGZvcmNlZFN0cmluZ1RyaW1NZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZm9yY2VkJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBmb3JjZWRTdHJpbmdUcmltTWV0aG9kKCd0cmltJykgfSwge1xuICB0cmltOiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT09ICdSZWdFeHAnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIpIHtcbiAgdmFyIGZsYWdzID0gUi5mbGFncztcbiAgcmV0dXJuIGZsYWdzID09PSB1bmRlZmluZWQgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgJiYgIWhhc093bihSLCAnZmxhZ3MnKSAmJiBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgUilcbiAgICA/IGNhbGwocmVnRXhwRmxhZ3MsIFIpIDogZmxhZ3M7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUYXJnZXQsIFNvdXJjZSwga2V5KSB7XG4gIGtleSBpbiBUYXJnZXQgfHwgZGVmaW5lUHJvcGVydHkoVGFyZ2V0LCBrZXksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTb3VyY2Vba2V5XTsgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBTb3VyY2Vba2V5XSA9IGl0OyB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpIHtcbiAgaWYgKGRlc2NyaXB0b3IuZ2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLmdldCwgbmFtZSwgeyBnZXR0ZXI6IHRydWUgfSk7XG4gIGlmIChkZXNjcmlwdG9yLnNldCkgbWFrZUJ1aWx0SW4oZGVzY3JpcHRvci5zZXQsIG5hbWUsIHsgc2V0dGVyOiB0cnVlIH0pO1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkuZih0YXJnZXQsIG5hbWUsIGRlc2NyaXB0b3IpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvciwgU1BFQ0lFUywge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gICAgfSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBnbG9iYWxUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbC10aGlzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCcpO1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MnKTtcbnZhciBzdGlja3lIZWxwZXJzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycycpO1xudmFyIHByb3h5QWNjZXNzb3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3InKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpLmVuZm9yY2U7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZycpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG52YXIgTmF0aXZlUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gTmF0aXZlUmVnRXhwLnByb3RvdHlwZTtcbnZhciBTeW50YXhFcnJvciA9IGdsb2JhbFRoaXMuU3ludGF4RXJyb3I7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKFJlZ0V4cFByb3RvdHlwZS5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBUT0RPOiBVc2Ugb25seSBwcm9wZXIgUmVnRXhwSWRlbnRpZmllck5hbWVcbnZhciBJU19OQ0cgPSAvXlxcPzxbXlxcc1xcZCEjJSYqKzw9PkBeXVteXFxzISMlJiorPD0+QF5dKj4vO1xudmFyIHJlMSA9IC9hL2c7XG52YXIgcmUyID0gL2EvZztcblxuLy8gXCJuZXdcIiBzaG91bGQgY3JlYXRlIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdcbnZhciBDT1JSRUNUX05FVyA9IG5ldyBOYXRpdmVSZWdFeHAocmUxKSAhPT0gcmUxO1xuXG52YXIgTUlTU0VEX1NUSUNLWSA9IHN0aWNreUhlbHBlcnMuTUlTU0VEX1NUSUNLWTtcbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZO1xuXG52YXIgQkFTRV9GT1JDRUQgPSBERVNDUklQVE9SUyAmJlxuICAoIUNPUlJFQ1RfTkVXIHx8IE1JU1NFRF9TVElDS1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0cgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJlMltNQVRDSF0gPSBmYWxzZTtcbiAgICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2luY29uc2lzdGVudC1mdW5jdGlvbi1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgcmV0dXJuIE5hdGl2ZVJlZ0V4cChyZTEpICE9PSByZTEgfHwgTmF0aXZlUmVnRXhwKHJlMikgPT09IHJlMiB8fCBTdHJpbmcoTmF0aXZlUmVnRXhwKHJlMSwgJ2knKSkgIT09ICcvYS9pJztcbiAgfSkpO1xuXG52YXIgaGFuZGxlRG90QWxsID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgYnJhY2tldHMgPSBmYWxzZTtcbiAgdmFyIGNocjtcbiAgZm9yICg7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgICBpZiAoY2hyID09PSAnXFxcXCcpIHtcbiAgICAgIHJlc3VsdCArPSBjaHIgKyBjaGFyQXQoc3RyaW5nLCArK2luZGV4KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWJyYWNrZXRzICYmIGNociA9PT0gJy4nKSB7XG4gICAgICByZXN1bHQgKz0gJ1tcXFxcc1xcXFxTXSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaHIgPT09ICdbJykge1xuICAgICAgICBicmFja2V0cyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGNociA9PT0gJ10nKSB7XG4gICAgICAgIGJyYWNrZXRzID0gZmFsc2U7XG4gICAgICB9IHJlc3VsdCArPSBjaHI7XG4gICAgfVxuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgaGFuZGxlTkNHID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgbmFtZWQgPSBbXTtcbiAgdmFyIG5hbWVzID0gY3JlYXRlKG51bGwpO1xuICB2YXIgYnJhY2tldHMgPSBmYWxzZTtcbiAgdmFyIG5jZyA9IGZhbHNlO1xuICB2YXIgZ3JvdXBpZCA9IDA7XG4gIHZhciBncm91cG5hbWUgPSAnJztcbiAgdmFyIGNocjtcbiAgZm9yICg7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNociA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgICBpZiAoY2hyID09PSAnXFxcXCcpIHtcbiAgICAgIGNociArPSBjaGFyQXQoc3RyaW5nLCArK2luZGV4KTtcbiAgICB9IGVsc2UgaWYgKGNociA9PT0gJ10nKSB7XG4gICAgICBicmFja2V0cyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIWJyYWNrZXRzKSBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgY2hyID09PSAnWyc6XG4gICAgICAgIGJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNociA9PT0gJygnOlxuICAgICAgICByZXN1bHQgKz0gY2hyO1xuICAgICAgICAvLyBpZ25vcmUgbm9uLWNhcHR1cmluZyBncm91cHNcbiAgICAgICAgaWYgKHN0cmluZ1NsaWNlKHN0cmluZywgaW5kZXggKyAxLCBpbmRleCArIDMpID09PSAnPzonKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4ZWMoSVNfTkNHLCBzdHJpbmdTbGljZShzdHJpbmcsIGluZGV4ICsgMSkpKSB7XG4gICAgICAgICAgaW5kZXggKz0gMjtcbiAgICAgICAgICBuY2cgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGdyb3VwaWQrKztcbiAgICAgICAgY29udGludWU7XG4gICAgICBjYXNlIGNociA9PT0gJz4nICYmIG5jZzpcbiAgICAgICAgaWYgKGdyb3VwbmFtZSA9PT0gJycgfHwgaGFzT3duKG5hbWVzLCBncm91cG5hbWUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdJbnZhbGlkIGNhcHR1cmUgZ3JvdXAgbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzW2dyb3VwbmFtZV0gPSB0cnVlO1xuICAgICAgICBuYW1lZFtuYW1lZC5sZW5ndGhdID0gW2dyb3VwbmFtZSwgZ3JvdXBpZF07XG4gICAgICAgIG5jZyA9IGZhbHNlO1xuICAgICAgICBncm91cG5hbWUgPSAnJztcbiAgICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChuY2cpIGdyb3VwbmFtZSArPSBjaHI7XG4gICAgZWxzZSByZXN1bHQgKz0gY2hyO1xuICB9IHJldHVybiBbcmVzdWx0LCBuYW1lZF07XG59O1xuXG4vLyBgUmVnRXhwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAtY29uc3RydWN0b3JcbmlmIChpc0ZvcmNlZCgnUmVnRXhwJywgQkFTRV9GT1JDRUQpKSB7XG4gIHZhciBSZWdFeHBXcmFwcGVyID0gZnVuY3Rpb24gUmVnRXhwKHBhdHRlcm4sIGZsYWdzKSB7XG4gICAgdmFyIHRoaXNJc1JlZ0V4cCA9IGlzUHJvdG90eXBlT2YoUmVnRXhwUHJvdG90eXBlLCB0aGlzKTtcbiAgICB2YXIgcGF0dGVybklzUmVnRXhwID0gaXNSZWdFeHAocGF0dGVybik7XG4gICAgdmFyIGZsYWdzQXJlVW5kZWZpbmVkID0gZmxhZ3MgPT09IHVuZGVmaW5lZDtcbiAgICB2YXIgZ3JvdXBzID0gW107XG4gICAgdmFyIHJhd1BhdHRlcm4gPSBwYXR0ZXJuO1xuICAgIHZhciByYXdGbGFncywgZG90QWxsLCBzdGlja3ksIGhhbmRsZWQsIHJlc3VsdCwgc3RhdGU7XG5cbiAgICBpZiAoIXRoaXNJc1JlZ0V4cCAmJiBwYXR0ZXJuSXNSZWdFeHAgJiYgZmxhZ3NBcmVVbmRlZmluZWQgJiYgcGF0dGVybi5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgfVxuXG4gICAgaWYgKHBhdHRlcm5Jc1JlZ0V4cCB8fCBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgcGF0dGVybikpIHtcbiAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNvdXJjZTtcbiAgICAgIGlmIChmbGFnc0FyZVVuZGVmaW5lZCkgZmxhZ3MgPSBnZXRSZWdFeHBGbGFncyhyYXdQYXR0ZXJuKTtcbiAgICB9XG5cbiAgICBwYXR0ZXJuID0gcGF0dGVybiA9PT0gdW5kZWZpbmVkID8gJycgOiB0b1N0cmluZyhwYXR0ZXJuKTtcbiAgICBmbGFncyA9IGZsYWdzID09PSB1bmRlZmluZWQgPyAnJyA6IHRvU3RyaW5nKGZsYWdzKTtcbiAgICByYXdQYXR0ZXJuID0gcGF0dGVybjtcblxuICAgIGlmIChVTlNVUFBPUlRFRF9ET1RfQUxMICYmICdkb3RBbGwnIGluIHJlMSkge1xuICAgICAgZG90QWxsID0gISFmbGFncyAmJiBzdHJpbmdJbmRleE9mKGZsYWdzLCAncycpID4gLTE7XG4gICAgICBpZiAoZG90QWxsKSBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsIC9zL2csICcnKTtcbiAgICB9XG5cbiAgICByYXdGbGFncyA9IGZsYWdzO1xuXG4gICAgaWYgKE1JU1NFRF9TVElDS1kgJiYgJ3N0aWNreScgaW4gcmUxKSB7XG4gICAgICBzdGlja3kgPSAhIWZsYWdzICYmIHN0cmluZ0luZGV4T2YoZmxhZ3MsICd5JykgPiAtMTtcbiAgICAgIGlmIChzdGlja3kgJiYgVU5TVVBQT1JURURfWSkgZmxhZ3MgPSByZXBsYWNlKGZsYWdzLCAveS9nLCAnJyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU1VQUE9SVEVEX05DRykge1xuICAgICAgaGFuZGxlZCA9IGhhbmRsZU5DRyhwYXR0ZXJuKTtcbiAgICAgIHBhdHRlcm4gPSBoYW5kbGVkWzBdO1xuICAgICAgZ3JvdXBzID0gaGFuZGxlZFsxXTtcbiAgICB9XG5cbiAgICByZXN1bHQgPSBpbmhlcml0SWZSZXF1aXJlZChOYXRpdmVSZWdFeHAocGF0dGVybiwgZmxhZ3MpLCB0aGlzSXNSZWdFeHAgPyB0aGlzIDogUmVnRXhwUHJvdG90eXBlLCBSZWdFeHBXcmFwcGVyKTtcblxuICAgIGlmIChkb3RBbGwgfHwgc3RpY2t5IHx8IGdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUocmVzdWx0KTtcbiAgICAgIGlmIChkb3RBbGwpIHtcbiAgICAgICAgc3RhdGUuZG90QWxsID0gdHJ1ZTtcbiAgICAgICAgc3RhdGUucmF3ID0gUmVnRXhwV3JhcHBlcihoYW5kbGVEb3RBbGwocGF0dGVybiksIHJhd0ZsYWdzKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGlja3kpIHN0YXRlLnN0aWNreSA9IHRydWU7XG4gICAgICBpZiAoZ3JvdXBzLmxlbmd0aCkgc3RhdGUuZ3JvdXBzID0gZ3JvdXBzO1xuICAgIH1cblxuICAgIGlmIChwYXR0ZXJuICE9PSByYXdQYXR0ZXJuKSB0cnkge1xuICAgICAgLy8gZmFpbHMgaW4gb2xkIGVuZ2luZXMsIGJ1dCB3ZSBoYXZlIG5vIGFsdGVybmF0aXZlcyBmb3IgdW5zdXBwb3J0ZWQgcmVnZXggc3ludGF4XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0LCAnc291cmNlJywgcmF3UGF0dGVybiA9PT0gJycgPyAnKD86KScgOiByYXdQYXR0ZXJuKTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGZvciAodmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKE5hdGl2ZVJlZ0V4cCksIGluZGV4ID0gMDsga2V5cy5sZW5ndGggPiBpbmRleDspIHtcbiAgICBwcm94eUFjY2Vzc29yKFJlZ0V4cFdyYXBwZXIsIE5hdGl2ZVJlZ0V4cCwga2V5c1tpbmRleCsrXSk7XG4gIH1cblxuICBSZWdFeHBQcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZWdFeHBXcmFwcGVyO1xuICBSZWdFeHBXcmFwcGVyLnByb3RvdHlwZSA9IFJlZ0V4cFByb3RvdHlwZTtcbiAgZGVmaW5lQnVpbHRJbihnbG9iYWxUaGlzLCAnUmVnRXhwJywgUmVnRXhwV3JhcHBlciwgeyBjb25zdHJ1Y3RvcjogdHJ1ZSB9KTtcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLUBAc3BlY2llc1xuc2V0U3BlY2llcygnUmVnRXhwJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsVGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwtdGhpcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvcicpO1xudmFyIHJlZ0V4cEZsYWdzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnLicsICdkJykgLT4gLy4vZCBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgUmVnRXhwID0gZ2xvYmFsVGhpcy5SZWdFeHA7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyIEZPUkNFRCA9IERFU0NSSVBUT1JTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIElORElDRVNfU1VQUE9SVCA9IHRydWU7XG4gIHRyeSB7XG4gICAgUmVnRXhwKCcuJywgJ2QnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBJTkRJQ0VTX1NVUFBPUlQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBPID0ge307XG4gIC8vIG1vZGVybiBWOCBidWdcbiAgdmFyIGNhbGxzID0gJyc7XG4gIHZhciBleHBlY3RlZCA9IElORElDRVNfU1VQUE9SVCA/ICdkZ2ltc3knIDogJ2dpbXN5JztcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGtleSwgY2hyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxzICs9IGNocjtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gfSk7XG4gIH07XG5cbiAgdmFyIHBhaXJzID0ge1xuICAgIGRvdEFsbDogJ3MnLFxuICAgIGdsb2JhbDogJ2cnLFxuICAgIGlnbm9yZUNhc2U6ICdpJyxcbiAgICBtdWx0aWxpbmU6ICdtJyxcbiAgICBzdGlja3k6ICd5J1xuICB9O1xuXG4gIGlmIChJTkRJQ0VTX1NVUFBPUlQpIHBhaXJzLmhhc0luZGljZXMgPSAnZCc7XG5cbiAgZm9yICh2YXIga2V5IGluIHBhaXJzKSBhZGRHZXR0ZXIoa2V5LCBwYWlyc1trZXldKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG4gIHZhciByZXN1bHQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFJlZ0V4cFByb3RvdHlwZSwgJ2ZsYWdzJykuZ2V0LmNhbGwoTyk7XG5cbiAgcmV0dXJuIHJlc3VsdCAhPT0gZXhwZWN0ZWQgfHwgY2FsbHMgIT09IGV4cGVjdGVkO1xufSk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3NcbmlmIChGT1JDRUQpIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlZ0V4cEZsYWdzXG59KTtcbiIsImV4cG9ydCBpbnRlcmZhY2UgR3JhbW1hclJ1bGUge1xuICByZWdleHA6IFJlZ0V4cDtcbiAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgbGFiZWxQbGFjZWhvbGRlcj86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIVE1MQmxvY2tSdWxlIHtcbiAgc3RhcnQ6IFJlZ0V4cDtcbiAgZW5kOiBSZWdFeHAgfCBmYWxzZTtcbiAgcGFyYUludGVycnVwdDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbmxpbmVDb21tYW5kIHtcbiAgdHlwZTogJ2lubGluZSc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXQ6IHtcbiAgICBwcmU6IHN0cmluZztcbiAgICBwb3N0OiBzdHJpbmc7XG4gIH07XG4gIHVuc2V0OiB7XG4gICAgcHJlUGF0dGVybjogUmVnRXhwO1xuICAgIHBvc3RQYXR0ZXJuOiBSZWdFeHA7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGluZUNvbW1hbmQge1xuICB0eXBlOiAnbGluZSc7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXQ6IHtcbiAgICBwYXR0ZXJuOiBSZWdFeHA7XG4gICAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgfTtcbiAgdW5zZXQ6IHtcbiAgICBwYXR0ZXJuOiBSZWdFeHA7XG4gICAgcmVwbGFjZW1lbnQ6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ29tbWFuZCA9IElubGluZUNvbW1hbmQgfCBMaW5lQ29tbWFuZDtcblxuY29uc3QgcmVwbGFjZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBSZWdFeHA+ID0ge1xuICBBU0NJSVB1bmN0dWF0aW9uOiAvWyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXl9ge3x9flxcXFxdLyxcbiAgLy8gTmV3bGluZXMgYXJlIGV4Y2x1ZGVkIHNvIHRoYXQsIHdoZW4gYSBwYXJhZ3JhcGggc3Bhbm5pbmcgbXVsdGlwbGUgc291cmNlIGxpbmVzIGlzIHBhcnNlZCBhc1xuICAvLyBvbmUgam9pbmVkIHN0cmluZywgYSBzb2Z0IGxpbmUgYnJlYWsgKFxcbikgdGVybWluYXRlcyB0aGUgY3VycmVudCB0ZXh0IHJ1biBhbmQgY2FuIGJlIGhhbmRsZWRcbiAgLy8gZXhwbGljaXRseSBhcyBhIGxpbmUgYnJlYWsgcmF0aGVyIHRoYW4gYmVpbmcgc3dhbGxvd2VkIGludG8gYSBkZWZhdWx0IHRva2VuLlxuICBOb3RUcmlnZ2VyQ2hhcjogL1teYF8qW1xcXSgpPD4hflxcbl0vLFxuICBTY2hlbWU6IC9bQS1aYS16XVtBLVphLXowLTkrLi1dezEsMzF9LyxcbiAgRW1haWw6IC9bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKi8sIC8vIEZyb20gQ29tbW9uTWFyayBzcGVjXG4gIEhUTUxPcGVuVGFnOiAvPEhUTUxUYWdOYW1lKD86SFRNTEF0dHJpYnV0ZSkqXFxzKlxcLz8+LyxcbiAgSFRNTENsb3NlVGFnOiAvPFxcL0hUTUxUYWdOYW1lXFxzKj4vLFxuICBIVE1MVGFnTmFtZTogL1tBLVphLXpdW0EtWmEtejAtOS1dKi8sIFxuICBIVE1MQ29tbWVudDogLzwhLS0oPzpbXj4tXXwoPzpbXj4tXSg/OlteLV18LVteLV0pKlteLV0pKS0tPi8sXG4gIEhUTUxQSTogLzxcXD8oPzp8LnwoPzpbXj9dfFxcP1tePl0pKilcXD8+LyxcbiAgSFRNTERlY2xhcmF0aW9uOiAvPCFbQS1aXStcXHNbXj5dKj4vLFxuICBIVE1MQ0RBVEE6IC88IVxcW0NEQVRBXFxbLio/XFxdXFxdPi8sXG4gIEhUTUxBdHRyaWJ1dGU6IC9cXHMrW0EtWmEtel86XVtBLVphLXowLTlfLjotXSooPzpIVE1MQXR0VmFsdWUpPy8sXG4gIEhUTUxBdHRWYWx1ZTogL1xccyo9XFxzKig/Oig/OidbXiddKicpfCg/OlwiW15cIl0qXCIpfCg/OlteXFxzXCInPTw+YF0rKSkvLFxuICBLbm93blRhZzogL2FkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoMXxoMnxoM3xoNHxoNXxoNnxoZWFkfGhlYWRlcnxocnxodG1sfGlmcmFtZXxsZWdlbmR8bGl8bGlua3xtYWlufG1lbnV8bWVudWl0ZW18bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwvXG59O1xuXG4vLyBGcm9tIENvbW1vbk1hcmsuanMuIFxuZXhwb3J0IGNvbnN0IHB1bmN0dWF0aW9uTGVhZGluZyA9IG5ldyBSZWdFeHAoL14oPzpbIVwiIyQlJicoKSorLFxcLS4vOjs8PT4/QFtcXF1cXFxcXl9ge3x9flxceEExXFx4QTdcXHhBQlxceEI2XFx4QjdcXHhCQlxceEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTBBRjBcXHUwREY0XFx1MEU0RlxcdTBFNUFcXHUwRTVCXFx1MEYwNC1cXHUwRjEyXFx1MEYxNFxcdTBGM0EtXFx1MEYzRFxcdTBGODVcXHUwRkQwLVxcdTBGRDRcXHUwRkQ5XFx1MEZEQVxcdTEwNEEtXFx1MTA0RlxcdTEwRkJcXHUxMzYwLVxcdTEzNjhcXHUxNDAwXFx1MTY2RFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAyN1xcdTIwMzAtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNDJcXHUzMDAxLVxcdTMwMDNcXHUzMDA4LVxcdTMwMTFcXHUzMDE0LVxcdTMwMUZcXHUzMDMwXFx1MzAzRFxcdTMwQTBcXHUzMEZCXFx1QTRGRVxcdUE0RkZcXHVBNjBELVxcdUE2MEZcXHVBNjczXFx1QTY3RVxcdUE2RjItXFx1QTZGN1xcdUE4NzQtXFx1QTg3N1xcdUE4Q0VcXHVBOENGXFx1QThGOC1cXHVBOEZBXFx1QThGQ1xcdUE5MkVcXHVBOTJGXFx1QTk1RlxcdUE5QzEtXFx1QTlDRFxcdUE5REVcXHVBOURGXFx1QUE1Qy1cXHVBQTVGXFx1QUFERVxcdUFBREZcXHVBQUYwXFx1QUFGMVxcdUFCRUJcXHVGRDNFXFx1RkQzRlxcdUZFMTAtXFx1RkUxOVxcdUZFMzAtXFx1RkU1MlxcdUZFNTQtXFx1RkU2MVxcdUZFNjNcXHVGRTY4XFx1RkU2QVxcdUZFNkJcXHVGRjAxLVxcdUZGMDNcXHVGRjA1LVxcdUZGMEFcXHVGRjBDLVxcdUZGMEZcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjIwXFx1RkYzQi1cXHVGRjNEXFx1RkYzRlxcdUZGNUJcXHVGRjVEXFx1RkY1Ri1cXHVGRjY1XXxcXHVEODAwW1xcdUREMDAtXFx1REQwMlxcdURGOUZcXHVERkQwXXxcXHVEODAxXFx1REQ2RnxcXHVEODAyW1xcdURDNTdcXHVERDFGXFx1REQzRlxcdURFNTAtXFx1REU1OFxcdURFN0ZcXHVERUYwLVxcdURFRjZcXHVERjM5LVxcdURGM0ZcXHVERjk5LVxcdURGOUNdfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOVxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REYzQy1cXHVERjNFXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODJGXFx1REM5RnxcXHVEODM2W1xcdURFODctXFx1REU4Ql0pLyk7XG5cbmV4cG9ydCBjb25zdCBwdW5jdHVhdGlvblRyYWlsaW5nID0gbmV3IFJlZ0V4cCgvKD86WyFcIiMkJSYnKCkqKyxcXC0uLzo7PD0+P0BbXFxdXFxcXF5fYHt8fX5cXHhBMVxceEE3XFx4QUJcXHhCNlxceEI3XFx4QkJcXHhCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwQUYwXFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkRcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMjdcXHUyMDMwLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTQyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzlcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURGM0MtXFx1REYzRV18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgyRlxcdURDOUZ8XFx1RDgzNltcXHVERTg3LVxcdURFOEJdKSQvKTtcblxuLyoqXG4gKiBTdGFuZGFsb25lIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdXNlZCBieSB0aGUgZWRpdG9yIGxvZ2ljIChUaW55TURFLnRzKSB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoZVxuICogYmxvY2sgLyBpbmxpbmUgZ3JhbW1hciB0YWJsZXMgYWJvdmUuIENlbnRyYWxpemVkIGhlcmUgc28gZXZlcnkgcGF0dGVybiB0aGUgZWRpdG9yIHJlbGllcyBvbiBsaXZlc1xuICogaW4gb25lIHBsYWNlLiBQYXR0ZXJucyBmbGFnZ2VkIGBnYCBhcmUgb25seSBldmVyIHVzZWQgd2l0aCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UoKSwgd2hpY2hcbiAqIHJlc2V0cyBsYXN0SW5kZXgsIHNvIHNoYXJpbmcgYSBzaW5nbGUgaW5zdGFuY2UgYWNyb3NzIGNhbGwgc2l0ZXMgaXMgc2FmZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVkaXRvclJlZ0V4cDogUmVjb3JkPHN0cmluZywgUmVnRXhwPiA9IHtcbiAgLy8gUGxhdGZvcm0gZGV0ZWN0aW9uIGFuZCBsaW5lIHNwbGl0dGluZy5cbiAgbWFjUGxhdGZvcm06IC9NYWN8aVBvZHxpUGhvbmV8aVBhZC8sXG4gIGxpbmVTcGxpdDogLyg/OlxcclxcbnxcXHJ8XFxuKS8sXG5cbiAgLy8gUmVwbGFjZW1lbnQtdGVtcGxhdGUgcGxhY2Vob2xkZXIgc3Vic3RpdHV0aW9uLlxuICByZXBsYWNlbWVudFBsYWNlaG9sZGVyOiAvKFxcJHsxLDJ9KShbMC05XSkvZywgLy8gJE4gKGxpdGVyYWwpIG9yICQkTiAoaW5saW5lIGNvbnRlbnQpXG4gIGlubGluZUNvbnRlbnRQbGFjZWhvbGRlcjogL1xcJFxcJChbMC05XSkvLCAvLyBsb2NhdGUgdGhlICQkTiBpbmxpbmUtY29udGVudCBwbGFjZWhvbGRlclxuICBpbmxpbmVSZXBsYWNlbWVudFBsYWNlaG9sZGVyOiAvXFwkKFsxLTldKS9nLCAvLyBzaW5nbGUtJCBwbGFjZWhvbGRlciBpbiBtZXJnZWQgaW5saW5lIGdyYW1tYXJcblxuICAvLyBCbGFuayAvIHdoaXRlc3BhY2UgaGVscGVycy5cbiAgYmxhbmtDb250ZW50OiAvXlxccyokLyxcbiAgbGVhZGluZ1doaXRlc3BhY2U6IC9eXFxzLyxcbiAgdHJhaWxpbmdXaGl0ZXNwYWNlOiAvXFxzJC8sXG4gIGxlYWRpbmdXaGl0ZXNwYWNlUnVuOiAvXlxccysvLFxuICBzdXJyb3VuZGluZ1doaXRlc3BhY2U6IC9eKD88bGVhZGluZz5cXHMqKS4qXFxTKD88dHJhaWxpbmc+XFxzKikkLyxcblxuICAvLyBMaXN0IC8gdGFzayBsaXN0IGl0ZW1zLlxuICB0YXNrTGlzdEl0ZW06IC9eKFxcWykoWyB4WF0pKFxcXSkoXFxzfCQpKFtcXHNcXFNdKikkLyxcbiAgb3JkZXJlZExpc3ROdW1iZXI6IC9cXGR7MSw5fS8sXG5cbiAgLy8gT3BlbmluZyB0YWcgbmFtZSBvZiBhbiBpbmxpbmUgSFRNTCBlbGVtZW50LlxuICBpbmxpbmVUYWdOYW1lOiAvXjxcXHMqKFthLXpBLVpdW2EtekEtWjAtOV0qKS8sXG5cbiAgLy8gRXZlbnQgdHlwZSBtYXRjaGluZyAoYWRkRXZlbnRMaXN0ZW5lcikuXG4gIGNoYW5nZUV2ZW50OiAvXig/OmNoYW5nZXxpbnB1dCkkL2ksXG4gIHNlbGVjdGlvbkV2ZW50OiAvXig/OnNlbGVjdGlvbnxzZWxlY3Rpb25jaGFuZ2UpJC9pLFxuICBkcm9wRXZlbnQ6IC9eKD86ZHJvcCkkL2ksXG5cbiAgLy8gSW5saW5lIGVtcGhhc2lzIC8gc3RyaWtldGhyb3VnaCBkZWxpbWl0ZXJzIGFuZCB0aGUgZXh0ZW5kZWQtYXV0b2xpbmsgYm91bmRhcnkuXG4gIGF1dG9saW5rUHJlY2VkaW5nQ2hhcjogL1tcXHMqX34oXS8sXG4gIGVtcGhhc2lzRGVsaW1pdGVyOiAvKF5cXCorKXwoXl8rKS8sXG4gIHN0cmlrZXRocm91Z2hEZWxpbWl0ZXI6IC9efn4vLFxuXG4gIC8vIEdGTSBleHRlbmRlZCAobm9uLWRlbGltaXRlZCkgYXV0b2xpbmtzLlxuICBhdXRvbGlua1NjaGVtZTogL14oPzpodHRwcz98ZnRwKTpcXC9cXC8vaSxcbiAgYXV0b2xpbmtXd3c6IC9ed3d3XFwuL2ksXG4gIGF1dG9saW5rRG9tYWluOiAvXlthLXpBLVowLTlfLV0rKD86XFwuW2EtekEtWjAtOV8tXSspKy8sXG4gIGF1dG9saW5rUGF0aDogL15bXlxcczxdKi8sXG4gIGF1dG9saW5rUHJvdG9jb2w6IC9eKD86bWFpbHRvfHhtcHApOi9pLFxuICBhdXRvbGlua1htcHA6IC9eeG1wcDovaSxcbiAgYXV0b2xpbmtYbXBwUmVzb3VyY2U6IC9eXFwvW2EtekEtWjAtOUAuXFwtX10rLyxcbiAgYXV0b2xpbmtFbWFpbDogL15bYS16QS1aMC05LlxcLV8rXStAW2EtekEtWjAtOV8tXSsoPzpcXC5bYS16QS1aMC05Xy1dKykrLyxcbiAgZW1haWxUcmFpbGluZ0NoYXI6IC9bLV9dJC8sXG4gIGVtYWlsVGxkOiAvXFwuW2EtekEtWjAtOV0rJC8sXG5cbiAgLy8gTGluayAvIGltYWdlIGRlc3RpbmF0aW9uIHBhcnNlciAoY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciBzY2FubmluZykuXG4gIGxpbmtDbG9zaW5nQnJhY2tldDogL15cXF0vLFxuICBvcGVuaW5nQW5nbGU6IC9ePC8sXG4gIGNsb3NpbmdBbmdsZTogL14+LyxcbiAgdGl0bGVRdW90ZTogL15bXCInXS8sXG4gIG9wZW5pbmdQYXJlbjogL15cXCgvLFxuICBjbG9zaW5nUGFyZW46IC9eXFwpLyxcbiAgZW5kc1dpdGhPcGVuQW5nbGU6IC88JC8sXG4gIGNvbnRhaW5zT3BlbkFuZ2xlOiAvPC8sXG4gIGFueUNoYXI6IC9eLi8sXG59O1xuXG4vKipcbiAqIFRoaXMgaXMgQ29tbW9uTWFyaydzIGJsb2NrIGdyYW1tYXIsIGJ1dCB3ZSdyZSBpZ25vcmluZyBuZXN0ZWQgYmxvY2tzIGhlcmUuXG4gKi9cbmV4cG9ydCBjb25zdCBsaW5lR3JhbW1hcjogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+ID0ge1xuICBUTUgxOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9I1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDFcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMVwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1IMjogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IMlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgyXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUgzOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1IM1wiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUgzXCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg0OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjI1xccykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSDRcIj4kMTwvc3Bhbj4kJDI8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INFwiPiQzPC9zcGFuPidcbiAgfSxcbiAgVE1INTogeyBcbiAgICByZWdleHA6IC9eKCB7MCwzfSMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INVwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg1XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUg2OiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9IyMjIyMjXFxzKSguKj8pKCg/OlxccysjK1xccyopPykkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1INlwiPiQxPC9zcGFuPiQkMjxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUg2XCI+JDM8L3NwYW4+J1xuICB9LFxuICBUTUJsb2NrcXVvdGU6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30+WyBdPykoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQmxvY2txdW90ZVwiPiQxPC9zcGFuPiQkMidcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja09wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+YGBgYCopXFxzKikoW15gXSo/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZUJhY2t0aWNrXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VUaWxkZU9wZW46IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopXFxzKikoLio/KShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+PHNwYW4gY2xhc3M9XCJUTUluZm9TdHJpbmdcIj4kMzwvc3Bhbj4kNCdcbiAgfSxcbiAgVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KD88c2VxPmBgYGAqKSkoXFxzKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Db2RlRmVuY2VCYWNrdGlja1wiPiQxPC9zcGFuPiQzJ1xuICB9LFxuICBUTUNvZGVGZW5jZVRpbGRlQ2xvc2U6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM30oPzxzZXE+fn5+fiopKShcXHMqKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUNvZGVGZW5jZVRpbGRlXCI+JDE8L3NwYW4+JDMnXG4gIH0sXG4gIFRNQmxhbmtMaW5lOiB7IFxuICAgIHJlZ2V4cDogL14oWyBcXHRdKikkLywgXG4gICAgcmVwbGFjZW1lbnQ6ICckMCdcbiAgfSxcbiAgVE1TZXRleHRIMU1hcmtlcjogeyBcbiAgICByZWdleHA6IC9eIHswLDN9PStcXHMqJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNU2V0ZXh0SDFNYXJrZXJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNU2V0ZXh0SDJNYXJrZXI6IHsgXG4gICAgcmVnZXhwOiAvXiB7MCwzfS0rXFxzKiQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTVNldGV4dEgxTWFya2VyXCI+JDA8L3NwYW4+J1xuICB9LFxuICBUTUhSOiB7IFxuICAgIHJlZ2V4cDogL14oIHswLDN9KFxcKlsgXFx0XSpcXCpbIFxcdF0qXFwqWyBcXHQqXSopfCgtWyBcXHRdKi1bIFxcdF0qLVsgXFx0LV0qKXwoX1sgXFx0XSpfWyBcXHRdKl9bIFxcdF9dKikpJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNSFJcIj4kMDwvc3Bhbj4nXG4gIH0sXG4gIFRNVUw6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31bKyotXSB7MSw0fSkoLiopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNVUxcIj4kMTwvc3Bhbj4kJDInXG4gIH0sXG4gIFRNT0w6IHsgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTU9MXCI+JDE8L3NwYW4+JCQyJ1xuICB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIGN1cnJlbnRseSBwcmV2ZW50aW5nIHN1Ymxpc3RzIChhbmQgYW55IGNvbnRlbnQgd2l0aGluIGxpc3QgaXRlbXMsIHJlYWxseSkgZnJvbSB3b3JraW5nXG4gIFRNSW5kZW50ZWRDb2RlOiB7IFxuICAgIHJlZ2V4cDogL14oIHs0fXxcXHQpKC4qKSQvLCBcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUluZGVudGVkQ29kZVwiPiQxPC9zcGFuPiQyJ1xuICB9LFxuICBUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uOiB7XG4gICAgLy8gVE9ETzogTGluayBkZXN0aW5hdGlvbiBjYW4ndCBpbmNsdWRlIHVuYmFsYW5jZWQgcGFyYW50aGVzZXMsIGJ1dCB3ZSBqdXN0IGlnbm9yZSB0aGF0IGhlcmUgXG4gICAgcmVnZXhwOiAvXiggezAsM31cXFtcXHMqKShbXlxcc1xcXV0oPzpbXlxcXV18XFxcXFxcXSkqPykoXFxzKlxcXTpcXHMqKSgoPzpbXlxcczw+XSspfCg/OjwoPzpbXjw+XFxcXF18XFxcXC4pKj4pKT8oXFxzKikoKD86XFwoKD86W14oKVxcXFxdfFxcXFwuKSpcXCkpfCg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcIil8KD86Jyg/OlteJ1xcXFxdfFxcXFwuKSonKSk/KFxccyopJC8sIFxuICAgIHJlcGxhY2VtZW50OiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNTGlua1JlZmVyZW5jZURlZmluaXRpb25cIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTGlua0xhYmVsIFRNTGlua0xhYmVsX0RlZmluaXRpb25cIj4kMjwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiPiQzPC9zcGFuPjxzcGFuIGNsYXNzPVwiVE1MaW5rRGVzdGluYXRpb25cIj4kNDwvc3Bhbj4kNTxzcGFuIGNsYXNzPVwiVE1MaW5rVGl0bGVcIj4kNjwvc3Bhbj4kNycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMiwgLy8gdGhpcyBkZWZpbmVzIHdoaWNoIHBsYWNlaG9sZGVyIGluIHRoZSBhYm92ZSByZWdleCBpcyB0aGUgbGluayBcImxhYmVsXCJcbiAgfSxcbn07XG5cbi8qKlxuICogSFRNTCBibG9ja3MgaGF2ZSBtdWx0aXBsZSBkaWZmZXJlbnQgY2xhc3NlcyBvZiBvcGVuZXIgYW5kIGNsb3Nlci4gVGhpcyBhcnJheSBkZWZpbmVzIGFsbCB0aGUgY2FzZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGh0bWxCbG9ja0dyYW1tYXI6IEhUTUxCbG9ja1J1bGVbXSA9IFtcbiAgeyBzdGFydDogL14gezAsM308KD86c2NyaXB0fHByZXxzdHlsZSkoPzpcXHN8PnwkKS9pLCBlbmQ6IC8oPzo8XFwvc2NyaXB0Pnw8XFwvcHJlPnw8XFwvc3R5bGU+KS9pLCBwYXJhSW50ZXJydXB0OiB0cnVlIH0sXG4gIHsgc3RhcnQ6IC9eIHswLDN9PCEtLS8sIGVuZDogLy0tPi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308XFw/LywgZW5kOiAvXFw/Pi8sIHBhcmFJbnRlcnJ1cHQ6IHRydWUgfSxcbiAgeyBzdGFydDogL14gezAsM308IVtBLVpdLywgZW5kOiAvPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM308IVxcW0NEQVRBXFxbLywgZW5kOiAvXFxdXFxdPi8sIHBhcmFJbnRlcnJ1cHQgOiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzo8fDxcXC8pKD86S25vd25UYWcpKD86XFxzfD58XFwvPnwkKS9pLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiB0cnVlfSxcbiAgeyBzdGFydDogL14gezAsM30oPzpIVE1MT3BlblRhZ3xIVE1MQ2xvc2VUYWcpXFxzKiQvLCBlbmQ6IGZhbHNlLCBwYXJhSW50ZXJydXB0OiBmYWxzZX0sXG5dO1xuXG4vKipcbiAqIFN0cnVjdHVyZSBvZiB0aGUgb2JqZWN0OlxuICogVG9wIGxldmVsIGVudHJpZXMgYXJlIHJ1bGVzLCBlYWNoIGNvbnNpc3Rpbmcgb2YgYSByZWd1bGFyIGV4cHJlc3Npb25zIChpbiBzdHJpbmcgZm9ybWF0KSBhcyB3ZWxsIGFzIGEgcmVwbGFjZW1lbnQuXG4gKiBJbiB0aGUgcmVndWxhciBleHByZXNzaW9ucywgcmVwbGFjZW1lbnRzIGZyb20gdGhlIG9iamVjdCAncmVwbGFjZW1lbnRzJyB3aWxsIGJlIHByb2Nlc3NlZCBiZWZvcmUgY29tcGlsaW5nIGludG8gdGhlIHByb3BlcnR5IHJlZ2V4cC5cbiAqL1xuZXhwb3J0IGNvbnN0IGlubGluZUdyYW1tYXI6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiA9IHtcbiAgZXNjYXBlIDoge1xuICAgIHJlZ2V4cDogL15cXFxcKEFTQ0lJUHVuY3R1YXRpb24pLyxcbiAgICByZXBsYWNlbWVudCA6ICc8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1Fc2NhcGVcIj5cXFxcPC9zcGFuPiQxJ1xuICB9LFxuICBjb2RlIDoge1xuICAgIHJlZ2V4cDogL14oYCspKCg/OlteYF0pfCg/OlteYF0uKj9bXmBdKSkoXFwxKS8sXG4gICAgcmVwbGFjZW1lbnQgOiAnPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQxPC9zcGFuPjxjb2RlIGNsYXNzPVwiVE1Db2RlXCI+JDI8L2NvZGU+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrX1RNQ29kZVwiPiQzPC9zcGFuPicgXG4gIH0sXG4gIGF1dG9saW5rIDoge1xuICAgIHJlZ2V4cDogL148KCg/OlNjaGVtZTpbXlxcczw+XSopfCg/OkVtYWlsKSk+LyxcbiAgICByZXBsYWNlbWVudDogJzxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTUF1dG9saW5rXCI+Jmx0Ozwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNQXV0b2xpbmtcIj4kMTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1BdXRvbGlua1wiPiZndDs8L3NwYW4+J1xuICB9LFxuICBodG1sIDoge1xuICAgIHJlZ2V4cDogL14oKD86SFRNTE9wZW5UYWcpfCg/OkhUTUxDbG9zZVRhZyl8KD86SFRNTENvbW1lbnQpfCg/OkhUTUxQSSl8KD86SFRNTERlY2xhcmF0aW9uKXwoPzpIVE1MQ0RBVEEpKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICc8c3BhbiBjbGFzcz1cIlRNSFRNTFwiPiQxPC9zcGFuPicsXG4gIH0sXG4gIGxpbmtPcGVuIDoge1xuICAgIHJlZ2V4cDogL15cXFsvLFxuICAgIHJlcGxhY2VtZW50OiAnJ1xuICB9LFxuICBpbWFnZU9wZW4gOiB7XG4gICAgcmVnZXhwOiAvXiFcXFsvLFxuICAgIHJlcGxhY2VtZW50IDogJydcbiAgfSxcbiAgbGlua0xhYmVsIDoge1xuICAgIHJlZ2V4cDogL14oXFxbXFxzKikoW15cXF1dKj8pKFxccypcXF0pLyxcbiAgICByZXBsYWNlbWVudDogJycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogMlxuICB9LFxuICBkZWZhdWx0IDoge1xuICAgIHJlZ2V4cDogL14oLnwoPzpOb3RUcmlnZ2VyQ2hhcispKS8sXG4gICAgcmVwbGFjZW1lbnQ6ICckMSdcbiAgfVxufTtcblxuLy8gUHJvY2VzcyByZXBsYWNlbWVudHMgaW4gcmVnZXhwc1xuY29uc3QgcmVwbGFjZW1lbnRSZWdleHAgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHJlcGxhY2VtZW50cykuam9pbignfCcpKTtcblxuLy8gSW5saW5lXG5jb25zdCBpbmxpbmVSdWxlcyA9IFsuLi5PYmplY3Qua2V5cyhpbmxpbmVHcmFtbWFyKV07XG5mb3IgKGxldCBydWxlIG9mIGlubGluZVJ1bGVzKSB7XG4gIGxldCByZSA9IGlubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLnNvdXJjZTtcbiAgLy8gUmVwbGFjZSB3aGlsZSB0aGVyZSBpcyBzb21ldGhpbmcgdG8gcmVwbGFjZS4gVGhpcyBtZWFucyBpdCBhbHNvIHdvcmtzIG92ZXIgbXVsdGlwbGUgbGV2ZWxzIChyZXBsYWNlbWVudHMgY29udGFpbmluZyByZXBsYWNlbWVudHMpXG4gIHdoaWxlIChyZS5tYXRjaChyZXBsYWNlbWVudFJlZ2V4cCkpIHtcbiAgICByZSA9IHJlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChzdHJpbmcpID0+IHsgcmV0dXJuIHJlcGxhY2VtZW50c1tzdHJpbmddLnNvdXJjZTsgfSk7XG4gIH1cbiAgaW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBpbmxpbmVHcmFtbWFyW3J1bGVdLnJlZ2V4cC5mbGFncyk7XG59XG5cbi8vIEhUTUwgQmxvY2sgKG9ubHkgb3BlbmluZyBydWxlIGlzIHByb2Nlc3NlZCBjdXJyZW50bHkpXG5mb3IgKGxldCBydWxlIG9mIGh0bWxCbG9ja0dyYW1tYXIpIHtcbiAgbGV0IHJlID0gcnVsZS5zdGFydC5zb3VyY2U7XG4gIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2UuIFRoaXMgbWVhbnMgaXQgYWxzbyB3b3JrcyBvdmVyIG11bHRpcGxlIGxldmVscyAocmVwbGFjZW1lbnRzIGNvbnRhaW5pbmcgcmVwbGFjZW1lbnRzKVxuICB3aGlsZSAocmUubWF0Y2gocmVwbGFjZW1lbnRSZWdleHApKSB7XG4gICAgcmUgPSByZS5yZXBsYWNlKHJlcGxhY2VtZW50UmVnZXhwLCAoc3RyaW5nKSA9PiB7IHJldHVybiByZXBsYWNlbWVudHNbc3RyaW5nXS5zb3VyY2U7IH0pO1xuICB9XG4gIHJ1bGUuc3RhcnQgPSBuZXcgUmVnRXhwKHJlLCBydWxlLnN0YXJ0LmZsYWdzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWVyZ2VkIGlubGluZSBncmFtbWFyIGJ5IGNvbWJpbmluZyB0aGUgZGVmYXVsdCBpbmxpbmUgZ3JhbW1hciB3aXRoIGN1c3RvbSBydWxlcy5cbiAqIEN1c3RvbSBydWxlcyBhcmUgcHJvY2Vzc2VkIGFuZCB0aGVpciByZWdleHAgcGF0dGVybnMgYXJlIGV4cGFuZGVkIHdpdGggcmVwbGFjZW1lbnRzLlxuICogQHBhcmFtIGN1c3RvbVJ1bGVzIC0gT2JqZWN0IGNvbnRhaW5pbmcgY3VzdG9tIGlubGluZSBncmFtbWFyIHJ1bGVzXG4gKiBAcmV0dXJucyBNZXJnZWQgaW5saW5lIGdyYW1tYXIgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyKGN1c3RvbVJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCBHcmFtbWFyUnVsZT4gPSB7fSk6IFJlY29yZDxzdHJpbmcsIEdyYW1tYXJSdWxlPiB7XG4gIGNvbnN0IG1lcmdlZCA9IHsgLi4uaW5saW5lR3JhbW1hciB9O1xuICBcbiAgLy8gUHJvY2VzcyBjdXN0b20gcnVsZXNcbiAgZm9yIChjb25zdCBbcnVsZU5hbWUsIHJ1bGVdIG9mIE9iamVjdC5lbnRyaWVzKGN1c3RvbVJ1bGVzKSkge1xuICAgIC8vIENvcHkgdGhlIHJ1bGUgdG8gYXZvaWQgbW9kaWZ5aW5nIHRoZSBvcmlnaW5hbFxuICAgIGNvbnN0IHByb2Nlc3NlZFJ1bGUgPSB7IC4uLnJ1bGUgfTtcbiAgICBcbiAgICAvLyBQcm9jZXNzIHJlcGxhY2VtZW50cyBpbiB0aGUgcmVnZXhwXG4gICAgbGV0IHJlZ2V4cFNvdXJjZSA9IHJ1bGUucmVnZXhwLnNvdXJjZTtcbiAgICBjb25zdCByZXBsYWNlbWVudFJlZ2V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzKS5qb2luKCd8JykpO1xuICAgIFxuICAgIC8vIFJlcGxhY2Ugd2hpbGUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlcGxhY2VcbiAgICB3aGlsZSAocmVnZXhwU291cmNlLm1hdGNoKHJlcGxhY2VtZW50UmVnZXhwKSkge1xuICAgICAgcmVnZXhwU291cmNlID0gcmVnZXhwU291cmNlLnJlcGxhY2UocmVwbGFjZW1lbnRSZWdleHAsIChtYXRjaCkgPT4ge1xuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnRzW21hdGNoXS5zb3VyY2U7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcHJvY2Vzc2VkUnVsZS5yZWdleHAgPSBuZXcgUmVnRXhwKHJlZ2V4cFNvdXJjZSwgcnVsZS5yZWdleHAuZmxhZ3MpO1xuICAgIG1lcmdlZFtydWxlTmFtZV0gPSBwcm9jZXNzZWRSdWxlO1xuICB9XG4gIFxuICByZXR1cm4gbWVyZ2VkO1xufVxuXG4vKipcbiAqIEVzY2FwZXMgSFRNTCBzcGVjaWFsIGNoYXJhY3RlcnMgKDwsID4sIGFuZCAmKSBpbiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgcmF3IHN0cmluZyB0byBiZSBlc2NhcGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RyaW5nLCByZWFkeSB0byBiZSB1c2VkIGluIEhUTUxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0bWxlc2NhcGUoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKHN0cmluZyA/IHN0cmluZyA6ICcnKVxuICAgIC5yZXBsYWNlKC8mL2csICcmYW1wOycpXG4gICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgIC5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG59XG5cbi8qKlxuICogQ29udGFpbnMgdGhlIGNvbW1hbmRzIHRoYXQgY2FuIGJlIHNlbnQgdG8gdGhlIGVkaXRvci4gQ29udGFpbnMgb2JqZWN0cyB3aXRoIGEgbmFtZSByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuXG4gKiBFYWNoIG9mIHRoZSBvYmplY3RzIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcga2V5czpcbiAqIFxuICogICAtIHR5cGU6IENhbiBiZSBlaXRoZXIgaW5saW5lIChmb3IgaW5saW5lIGZvcm1hdHRpbmcpIG9yIGxpbmUgKGZvciBibG9jayAvIGxpbmUgZm9ybWF0dGluZykuXG4gKiAgIC0gY2xhc3NOYW1lOiBVc2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBjb21tYW5kIGlzIGFjdGl2ZSBhdCBhIGdpdmVuIHBvc2l0aW9uLiBcbiAqICAgICBGb3IgbGluZSBmb3JtYXR0aW5nLCB0aGlzIGxvb2tzIGF0IHRoZSBjbGFzcyBvZiB0aGUgbGluZSBlbGVtZW50LiBGb3IgaW5saW5lIGVsZW1lbnRzLCB0cmllcyB0byBmaW5kIGFuIGVuY2xvc2luZyBlbGVtZW50IHdpdGggdGhhdCBjbGFzcy5cbiAqICAgLSBzZXQgLyB1bnNldDogQ29udGFpbiBpbnN0cnVjdGlvbnMgaG93IHRvIHNldCBhbmQgdW5zZXQgdGhlIGNvbW1hbmQuIEZvciBsaW5lIHR5cGUgY29tbWFuZHMsIGJvdGggY29uc2lzdCBvZiBhIHBhdHRlcm4gYW5kIHJlcGxhY2VtZW50IHRoYXQgXG4gKiAgICAgd2lsbCBiZSBhcHBsaWVkIHRvIGVhY2ggbGluZSAodXNpbmcgU3RyaW5nLnJlcGxhY2UpLiBGb3IgaW5saW5lIHR5cGUgY29tbWFuZHMsIHRoZSBzZXQgb2JqZWN0IGNvbnRhaW5zIGEgcHJlIGFuZCBwb3N0IHN0cmluZyB3aGljaCB3aWxsXG4gKiAgICAgYmUgaW5zZXJ0ZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VsZWN0aW9uLiBUaGUgdW5zZXQgb2JqZWN0IGNvbnRhaW5zIGEgcHJlUGF0dGVybiBhbmQgYSBwb3N0UGF0dGVybi4gQm90aCBzaG91bGQgYmUgcmVndWxhciBleHByZXNzaW9ucyBhbmQgXG4gKiAgICAgdGhleSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIHBvcnRpb24gb2YgdGhlIGxpbmUgYmVmb3JlIGFuZCBhZnRlciB0aGUgc2VsZWN0aW9uICh1c2luZyBTdHJpbmcucmVwbGFjZSwgd2l0aCBhbiBlbXB0eSByZXBsYWNlbWVudCBzdHJpbmcpLlxuICovXG5leHBvcnQgY29uc3QgY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmQ+ID0ge1xuICAvLyBSZXBsYWNlbWVudHMgZm9yIHVuc2V0IGZvciBpbmxpbmUgY29tbWFuZHMgYXJlICcnIGJ5IGRlZmF1bHRcbiAgYm9sZDoge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTVN0cm9uZycsIFxuICAgIHNldDoge3ByZTogJyoqJywgcG9zdDogJyoqJ30sIFxuICAgIHVuc2V0OiB7cHJlUGF0dGVybjogLyg/OlxcKlxcKnxfXykkLywgcG9zdFBhdHRlcm46IC9eKD86XFwqXFwqfF9fKS99XG4gIH0sIFxuICBpdGFsaWM6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1FbScsIFxuICAgIHNldDoge3ByZTogJyonLCBwb3N0OiAnKid9LCBcbiAgICB1bnNldDoge3ByZVBhdHRlcm46IC8oPzpcXCp8XykkLywgcG9zdFBhdHRlcm46IC9eKD86XFwqfF8pL31cbiAgfSxcbiAgY29kZToge1xuICAgIHR5cGU6ICdpbmxpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUNvZGUnLCBcbiAgICBzZXQ6IHtwcmU6ICdgJywgcG9zdDogJ2AnfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOiAvYCskLywgcG9zdFBhdHRlcm46IC9eYCsvfSAvLyBGSVhNRSB0aGlzIGRvZXNuJ3QgZW5zdXJlIGJhbGFuY2VkIGJhY2t0aWNrcyByaWdodCBub3dcbiAgfSwgXG4gIHN0cmlrZXRocm91Z2g6IHtcbiAgICB0eXBlOiAnaW5saW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1TdHJpa2V0aHJvdWdoJywgXG4gICAgc2V0OiB7cHJlOiAnfn4nLCBwb3N0OiAnfn4nfSwgXG4gICAgdW5zZXQ6IHtwcmVQYXR0ZXJuOi9+fiQvLCBwb3N0UGF0dGVybjogL15+fi8gfVxuICB9LFxuICBoMToge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGgyOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUgyJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoMzoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1IMycsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyNcXHMrKSguKj8pKCg/OlxccysjK1xccyopPykkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIGg1OiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTUg1JywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICcjIyMjIyAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfSMjIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICBoNjoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1INicsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnIyMjIyMjICQyJ30sIFxuICAgIHVuc2V0OiB7cGF0dGVybjogL14oIHswLDN9IyMjIyMjXFxzKykoLio/KSgoPzpcXHMrIytcXHMqKT8pJC8sIHJlcGxhY2VtZW50OiAnJDInfVxuICB9LFxuICB1bDoge1xuICAgIHR5cGU6ICdsaW5lJywgXG4gICAgY2xhc3NOYW1lOiAnVE1VTCcsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnLSAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfVsrKi1dIHsxLDR9KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG4gIG9sOiB7XG4gICAgdHlwZTogJ2xpbmUnLCBcbiAgICBjbGFzc05hbWU6ICdUTU9MJywgXG4gICAgc2V0OiB7cGF0dGVybjogL14oIHswLDN9KD86KD86Iyt8WzAtOV17MSw5fVspLl18Wz5cXC0qK10pXFxzKyk/KSguKikkLywgcmVwbGFjZW1lbnQ6ICckIy4gJDInfSwgXG4gICAgdW5zZXQ6IHtwYXR0ZXJuOiAvXiggezAsM31cXGR7MSw5fVsuKV0gezEsNH0pKC4qKSQvLCByZXBsYWNlbWVudDogJyQyJ31cbiAgfSwgXG4gIGJsb2NrcXVvdGU6IHtcbiAgICB0eXBlOiAnbGluZScsIFxuICAgIGNsYXNzTmFtZTogJ1RNQmxvY2txdW90ZScsIFxuICAgIHNldDoge3BhdHRlcm46IC9eKCB7MCwzfSg/Oig/OiMrfFswLTldezEsOX1bKS5dfFs+XFwtKitdKVxccyspPykoLiopJC8sIHJlcGxhY2VtZW50OiAnPiAkMid9LCBcbiAgICB1bnNldDoge3BhdHRlcm46IC9eKCB7MCwzfT5bIF0/KSguKikkLywgcmVwbGFjZW1lbnQ6ICckMid9XG4gIH0sXG59OyIsImltcG9ydCB7XG4gIGlubGluZUdyYW1tYXIsXG4gIGxpbmVHcmFtbWFyLFxuICBwdW5jdHVhdGlvbkxlYWRpbmcsXG4gIHB1bmN0dWF0aW9uVHJhaWxpbmcsXG4gIGVkaXRvclJlZ0V4cCxcbiAgaHRtbGVzY2FwZSxcbiAgaHRtbEJsb2NrR3JhbW1hcixcbiAgY29tbWFuZHMsXG4gIEhUTUxCbG9ja1J1bGUsXG4gIENvbW1hbmQsXG4gIExpbmVDb21tYW5kLFxuICBHcmFtbWFyUnVsZSxcbiAgY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcixcbn0gZnJvbSBcIi4vZ3JhbW1hclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvclByb3BzIHtcbiAgZWxlbWVudD86IHN0cmluZyB8IEhUTUxFbGVtZW50O1xuICBlZGl0b3I/OiBzdHJpbmcgfCBIVE1MRWxlbWVudDtcbiAgY29udGVudD86IHN0cmluZztcbiAgdGV4dGFyZWE/OiBzdHJpbmcgfCBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICBjdXN0b21JbmxpbmVHcmFtbWFyPzogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+O1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQb3NpdGlvbiB7XG4gIHJvdzogbnVtYmVyO1xuICBjb2w6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIaXN0b3J5U3RhdGUge1xuICBjb250ZW50OiBzdHJpbmc7XG4gIHNlbGVjdGlvbjogUG9zaXRpb24gfCBudWxsO1xuICBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VFdmVudCB7XG4gIGNvbnRlbnQ6IHN0cmluZztcbiAgbGluZXNEaXJ0eTogYm9vbGVhbltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbkV2ZW50IHtcbiAgZm9jdXM6IFBvc2l0aW9uO1xuICBhbmNob3I6IFBvc2l0aW9uO1xuICBjb21tYW5kU3RhdGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcm9wRXZlbnQge1xuICBkYXRhVHJhbnNmZXI6IERhdGFUcmFuc2Zlcjtcbn1cblxudHlwZSBFdmVudFR5cGUgPSAnY2hhbmdlJyB8ICdzZWxlY3Rpb24nIHwgJ2Ryb3AnO1xudHlwZSBFdmVudEhhbmRsZXI8VD4gPSAoZXZlbnQ6IFQpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3Ige1xuICBwdWJsaWMgZTogSFRNTERpdkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHVibGljIHRleHRhcmVhOiBIVE1MVGV4dEFyZWFFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBsaW5lczogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmVFbGVtZW50czogTm9kZUxpc3RPZjxDaGlsZE5vZGU+IHwgSFRNTENvbGxlY3Rpb24gfCBDaGlsZE5vZGVbXSA9IFtdO1xuICBwdWJsaWMgbGluZVR5cGVzOiBzdHJpbmdbXSA9IFtdO1xuICBwdWJsaWMgbGluZUNhcHR1cmVzOiBSZWdFeHBFeGVjQXJyYXlbXSA9IFtdO1xuICBwdWJsaWMgbGluZVJlcGxhY2VtZW50czogc3RyaW5nW10gPSBbXTtcbiAgcHVibGljIGxpbmtMYWJlbHM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBsaW5lRGlydHk6IGJvb2xlYW5bXSA9IFtdO1xuICBwdWJsaWMgbGFzdENvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY3VzdG9tSW5saW5lR3JhbW1hcjogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+ID0ge307XG4gIHByaXZhdGUgbWVyZ2VkSW5saW5lR3JhbW1hcjogUmVjb3JkPHN0cmluZywgR3JhbW1hclJ1bGU+ID0gaW5saW5lR3JhbW1hcjtcbiAgcHJpdmF0ZSBoYXNGb2N1czogYm9vbGVhbiA9IHRydWU7XG4gIHByaXZhdGUgbGFzdFNlbGVjdGlvbjogeyBmb2N1czogUG9zaXRpb24gfCBudWxsOyBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCB9IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgbGlzdGVuZXJzOiB7XG4gICAgY2hhbmdlOiBFdmVudEhhbmRsZXI8Q2hhbmdlRXZlbnQ+W107XG4gICAgc2VsZWN0aW9uOiBFdmVudEhhbmRsZXI8U2VsZWN0aW9uRXZlbnQ+W107XG4gICAgZHJvcDogRXZlbnRIYW5kbGVyPERyb3BFdmVudD5bXTtcbiAgfSA9IHtcbiAgICBjaGFuZ2U6IFtdLFxuICAgIHNlbGVjdGlvbjogW10sXG4gICAgZHJvcDogW10sXG4gIH07XG5cbiAgcHJpdmF0ZSB1bmRvU3RhY2s6IEhpc3RvcnlTdGF0ZVtdID0gW107XG4gIHByaXZhdGUgcmVkb1N0YWNrOiBIaXN0b3J5U3RhdGVbXSA9IFtdO1xuICBwcml2YXRlIGlzUmVzdG9yaW5nSGlzdG9yeTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIG1heEhpc3Rvcnk6IG51bWJlciA9IDEwMDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRWRpdG9yUHJvcHMgPSB7fSkge1xuICAgIHRoaXMuZSA9IG51bGw7XG4gICAgdGhpcy50ZXh0YXJlYSA9IG51bGw7XG4gICAgdGhpcy5saW5lcyA9IFtdO1xuICAgIHRoaXMubGluZUVsZW1lbnRzID0gW10gYXMgQ2hpbGROb2RlW107XG4gICAgdGhpcy5saW5lVHlwZXMgPSBbXTtcbiAgICB0aGlzLmxpbmVDYXB0dXJlcyA9IFtdO1xuICAgIHRoaXMubGluZVJlcGxhY2VtZW50cyA9IFtdO1xuICAgIHRoaXMubGlua0xhYmVscyA9IFtdO1xuICAgIHRoaXMubGluZURpcnR5ID0gW107XG4gICAgdGhpcy5sYXN0Q29tbWFuZFN0YXRlID0gbnVsbDtcbiAgICB0aGlzLmhhc0ZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLmxhc3RTZWxlY3Rpb24gPSBudWxsO1xuICAgIHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hciA9IHByb3BzLmN1c3RvbUlubGluZUdyYW1tYXIgfHwge307XG4gICAgdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyID0gY3JlYXRlTWVyZ2VkSW5saW5lR3JhbW1hcih0aGlzLmN1c3RvbUlubGluZUdyYW1tYXIpO1xuXG4gICAgdGhpcy5saXN0ZW5lcnMgPSB7XG4gICAgICBjaGFuZ2U6IFtdLFxuICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgIGRyb3A6IFtdLFxuICAgIH07XG5cbiAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIHByb3BzLmVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJvcHMuZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5lbGVtZW50KSB7XG4gICAgICBlbGVtZW50ID0gcHJvcHMuZWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb3BzLnRleHRhcmVhID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy50ZXh0YXJlYSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLnRleHRhcmVhKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgIH0gZWxzZSBpZiAocHJvcHMudGV4dGFyZWEpIHtcbiAgICAgIHRoaXMudGV4dGFyZWEgPSBwcm9wcy50ZXh0YXJlYTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgaWYgKCFlbGVtZW50KSBlbGVtZW50ID0gdGhpcy50ZXh0YXJlYTtcbiAgICB9XG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF07XG4gICAgfVxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQudGFnTmFtZSA9PT0gXCJURVhUQVJFQVwiKSB7XG4gICAgICB0aGlzLnRleHRhcmVhID0gZWxlbWVudCBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuICAgICAgZWxlbWVudCA9IHRoaXMudGV4dGFyZWEucGFyZW50Tm9kZSBhcyBIVE1MRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0YXJlYSkge1xuICAgICAgdGhpcy50ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfVxuXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHByb3BzLnBsYWNlaG9sZGVyICE9PSB1bmRlZmluZWRcbiAgICAgID8gcHJvcHMucGxhY2Vob2xkZXJcbiAgICAgIDogdGhpcy50ZXh0YXJlYT8ucGxhY2Vob2xkZXIgfHwgdW5kZWZpbmVkO1xuXG4gICAgdGhpcy51bmRvU3RhY2sgPSBbXTtcbiAgICB0aGlzLnJlZG9TdGFjayA9IFtdO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gICAgdGhpcy5tYXhIaXN0b3J5ID0gMTAwO1xuXG4gICAgdGhpcy5jcmVhdGVFZGl0b3JFbGVtZW50KGVsZW1lbnQsIHByb3BzKTtcbiAgICB0aGlzLnNldENvbnRlbnQoXG4gICAgICB0eXBlb2YgcHJvcHMuY29udGVudCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IHByb3BzLmNvbnRlbnRcbiAgICAgICAgOiB0aGlzLnRleHRhcmVhXG4gICAgICAgID8gdGhpcy50ZXh0YXJlYS52YWx1ZVxuICAgICAgICA6IFwiIyBIZWxsbyBUaW55TURFIVxcbkVkaXQgKipoZXJlKipcIlxuICAgICk7XG4gICAgXG4gICAgdGhpcy5lIS5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4gdGhpcy5oYW5kbGVVbmRvUmVkb0tleShlKSk7XG4gIH1cblxuICBnZXQgY2FuVW5kbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy51bmRvU3RhY2subGVuZ3RoID49IDI7XG4gIH1cblxuICBnZXQgY2FuUmVkbygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZWRvU3RhY2subGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEhpc3RvcnkoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSByZXR1cm47XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgdGhpcy5yZWRvU3RhY2sgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcHVzaEN1cnJlbnRTdGF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuZG9TdGFjay5wdXNoKHtcbiAgICAgIGNvbnRlbnQ6IHRoaXMuZ2V0Q29udGVudCgpLFxuICAgICAgc2VsZWN0aW9uOiB0aGlzLmdldFNlbGVjdGlvbigpLFxuICAgICAgYW5jaG9yOiB0aGlzLmdldFNlbGVjdGlvbih0cnVlKSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy51bmRvU3RhY2subGVuZ3RoID4gdGhpcy5tYXhIaXN0b3J5KSB0aGlzLnVuZG9TdGFjay5zaGlmdCgpO1xuICB9XG5cbiAgcHVibGljIHVuZG8oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudW5kb1N0YWNrLmxlbmd0aCA8IDIpIHJldHVybjtcbiAgICB0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSA9IHRydWU7XG4gICAgdGhpcy5wdXNoQ3VycmVudFN0YXRlKCk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMudW5kb1N0YWNrLnBvcCgpITtcbiAgICB0aGlzLnJlZG9TdGFjay5wdXNoKGN1cnJlbnQpO1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLnVuZG9TdGFja1t0aGlzLnVuZG9TdGFjay5sZW5ndGggLSAxXTtcbiAgICB0aGlzLnNldENvbnRlbnQocHJldi5jb250ZW50KTtcbiAgICBpZiAocHJldi5zZWxlY3Rpb24pIHRoaXMuc2V0U2VsZWN0aW9uKHByZXYuc2VsZWN0aW9uLCBwcmV2LmFuY2hvcik7XG4gICAgdGhpcy51bmRvU3RhY2sucG9wKCk7XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyByZWRvKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZWRvU3RhY2subGVuZ3RoKSByZXR1cm47XG4gICAgdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkgPSB0cnVlO1xuICAgIHRoaXMucHVzaEN1cnJlbnRTdGF0ZSgpO1xuICAgIGNvbnN0IG5leHQgPSB0aGlzLnJlZG9TdGFjay5wb3AoKSE7XG4gICAgdGhpcy5zZXRDb250ZW50KG5leHQuY29udGVudCk7XG4gICAgaWYgKG5leHQuc2VsZWN0aW9uKSB0aGlzLnNldFNlbGVjdGlvbihuZXh0LnNlbGVjdGlvbiwgbmV4dC5hbmNob3IpO1xuICAgIHRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5ID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVuZG9SZWRvS2V5KGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpc01hYyA9IGVkaXRvclJlZ0V4cC5tYWNQbGF0Zm9ybS50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7XG4gICAgY29uc3QgY3RybCA9IGlzTWFjID8gZS5tZXRhS2V5IDogZS5jdHJsS2V5O1xuICAgIGlmIChjdHJsICYmICFlLmFsdEtleSkge1xuICAgICAgaWYgKGUua2V5ID09PSBcInpcIiB8fCBlLmtleSA9PT0gXCJaXCIpIHtcbiAgICAgICAgaWYgKGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICB0aGlzLnJlZG8oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVuZG8oKTtcbiAgICAgICAgfVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9IGVsc2UgaWYgKGUua2V5ID09PSBcInlcIiB8fCBlLmtleSA9PT0gXCJZXCIpIHtcbiAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUVkaXRvckVsZW1lbnQoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3BzOiBFZGl0b3JQcm9wcyk6IHZvaWQge1xuICAgIGlmIChwcm9wcyAmJiBwcm9wcy5lZGl0b3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcy5lZGl0b3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRoaXMuZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByb3BzLmVkaXRvcikgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmUgPSBwcm9wcy5lZGl0b3IgYXMgSFRNTERpdkVsZW1lbnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgfVxuXG4gICAgdGhpcy5lLmNsYXNzTGlzdC5hZGQoXCJUaW55TURFXCIpO1xuICAgIHRoaXMuZS5jb250ZW50RWRpdGFibGUgPSBcInRydWVcIjtcbiAgICB0aGlzLmUuc3R5bGUud2hpdGVTcGFjZSA9IFwicHJlLXdyYXBcIjtcbiAgICAodGhpcy5lLnN0eWxlIGFzIGFueSkud2Via2l0VXNlck1vZGlmeSA9IFwicmVhZC13cml0ZS1wbGFpbnRleHQtb25seVwiO1xuXG4gICAgaWYgKHRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMuZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLXBsYWNlaG9sZGVyXCIsIHRoaXMucGxhY2Vob2xkZXIpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5lZGl0b3IgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnRleHRhcmVhICYmXG4gICAgICAgIHRoaXMudGV4dGFyZWEucGFyZW50Tm9kZSA9PT0gZWxlbWVudCAmJlxuICAgICAgICB0aGlzLnRleHRhcmVhLm5leHRTaWJsaW5nXG4gICAgICApIHtcbiAgICAgICAgZWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5lLCB0aGlzLnRleHRhcmVhLm5leHRTaWJsaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIChlKSA9PiB0aGlzLmhhbmRsZUlucHV0RXZlbnQoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiYmVmb3JlaW5wdXRcIiwgKGUpID0+IHRoaXMuaGFuZGxlQmVmb3JlSW5wdXRFdmVudChlKSk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJjb21wb3NpdGlvbmVuZFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVJbnB1dEV2ZW50KGUpKTtcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICBpZiAodGhpcy5oYXNGb2N1cykgeyB0aGlzLmhhbmRsZVNlbGVjdGlvbkNoYW5nZUV2ZW50KGUpOyB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgKCkgPT4gdGhpcy5oYXNGb2N1cyA9IGZhbHNlICk7XG4gICAgdGhpcy5lLmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCAoKSA9PiB0aGlzLmhhc0ZvY3VzID0gdHJ1ZSApO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwicGFzdGVcIiwgKGUpID0+IHRoaXMuaGFuZGxlUGFzdGUoZSkpO1xuICAgIHRoaXMuZS5hZGRFdmVudExpc3RlbmVyKFwiZHJvcFwiLCAoZSkgPT4gdGhpcy5oYW5kbGVEcm9wKGUpKTtcbiAgICB0aGlzLmUuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIChlKSA9PiB0aGlzLmhhbmRsZUNsaWNrKGUpKTtcbiAgICB0aGlzLmxpbmVFbGVtZW50cyA9IHRoaXMuZS5jaGlsZE5vZGVzO1xuICB9XG5cbiAgcHVibGljIHNldENvbnRlbnQoY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgd2hpbGUgKHRoaXMuZSEuZmlyc3RDaGlsZCkge1xuICAgICAgdGhpcy5lIS5yZW1vdmVDaGlsZCh0aGlzLmUhLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICB0aGlzLmxpbmVzID0gY29udGVudC5zcGxpdChlZGl0b3JSZWdFeHAubGluZVNwbGl0KTtcbiAgICB0aGlzLmxpbmVEaXJ0eSA9IFtdO1xuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgbGV0IGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgIHRoaXMuZSEuYXBwZW5kQ2hpbGQobGUpO1xuICAgICAgdGhpcy5saW5lRGlydHkucHVzaCh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5saW5lVHlwZXMgPSBuZXcgQXJyYXkodGhpcy5saW5lcy5sZW5ndGgpO1xuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMudXBkYXRlUGxhY2Vob2xkZXIoKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmxpbmVzLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBsYWNlaG9sZGVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wbGFjZWhvbGRlciB8fCAhdGhpcy5lKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZ2V0Q29udGVudCgpID09PSBcIlwiKSB7XG4gICAgICB0aGlzLmUuY2xhc3NMaXN0LmFkZChcIlRpbnlNREVfZW1wdHlcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZS5jbGFzc0xpc3QucmVtb3ZlKFwiVGlueU1ERV9lbXB0eVwiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZvcm1hdHRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVMaW5lVHlwZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUxpbmtMYWJlbHMoKTtcbiAgICB0aGlzLmFwcGx5TGluZVR5cGVzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmtMYWJlbHMoKTogdm9pZCB7XG4gICAgdGhpcy5saW5rTGFiZWxzID0gW107XG4gICAgZm9yIChsZXQgbCA9IDA7IGwgPCB0aGlzLmxpbmVzLmxlbmd0aDsgbCsrKSB7XG4gICAgICBpZiAodGhpcy5saW5lVHlwZXNbbF0gPT09IFwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvblwiKSB7XG4gICAgICAgIHRoaXMubGlua0xhYmVscy5wdXNoKFxuICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xdW1xuICAgICAgICAgICAgbGluZUdyYW1tYXIuVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvbi5sYWJlbFBsYWNlaG9sZGVyIVxuICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2UocmVwbGFjZW1lbnQ6IHN0cmluZywgY2FwdHVyZTogUmVnRXhwRXhlY0FycmF5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnQucmVwbGFjZShlZGl0b3JSZWdFeHAucmVwbGFjZW1lbnRQbGFjZWhvbGRlciwgKHN0ciwgcDEsIHAyKSA9PiB7XG4gICAgICBpZiAocDEgPT09IFwiJFwiKSByZXR1cm4gaHRtbGVzY2FwZShjYXB0dXJlW3BhcnNlSW50KHAyKV0pO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiVE1JbmxpbmVGb3JtYXR0ZWRcIj4ke3RoaXMucHJvY2Vzc0lubGluZVN0eWxlcyhcbiAgICAgICAgICBjYXB0dXJlW3BhcnNlSW50KHAyKV1cbiAgICAgICAgKX08L3NwYW4+YDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlMaW5lVHlwZXMoKTogdm9pZCB7XG4gICAgbGV0IGxpbmVOdW0gPSAwO1xuICAgIHdoaWxlIChsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGgpIHtcbiAgICAgIC8vIEEgXCJibG9ja1wiIHdob3NlIHRleHQgZmxvd3MgYWNyb3NzIHNldmVyYWwgc291cmNlIGxpbmVzIChhIHBhcmFncmFwaCwgYSBtdWx0aS1saW5lXG4gICAgICAvLyBibG9ja3F1b3RlLCBvciBhIGxpc3QgaXRlbSB3aXRoIHdyYXBwZWQvbGF6eS1jb250aW51YXRpb24gbGluZXMpIGlzIHJlbmRlcmVkIGFzIG9uZVxuICAgICAgLy8gaW5saW5lLXBhcnNpbmcgdW5pdCBzbyB0aGF0IGlubGluZSBzdHlsZXMgKGJvbGQsIGl0YWxpYywgLi4uKSBjYW4gc3BhbiB0aGUgc29mdCBsaW5lXG4gICAgICAvLyBicmVha3MgYmV0d2VlbiBpdHMgbGluZXMuXG4gICAgICBpZiAodGhpcy5pc0lubGluZUdyb3VwTGVhZGVyKGxpbmVOdW0pKSB7XG4gICAgICAgIGNvbnN0IGxlYWRlclR5cGUgPSB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXTtcbiAgICAgICAgbGV0IGVuZCA9IGxpbmVOdW07XG4gICAgICAgIHdoaWxlIChcbiAgICAgICAgICBlbmQgKyAxIDwgdGhpcy5saW5lcy5sZW5ndGggJiZcbiAgICAgICAgICB0aGlzLmlzSW5saW5lQ29udGludWF0aW9uKGVuZCArIDEsIGxlYWRlclR5cGUpXG4gICAgICAgICkge1xuICAgICAgICAgIGVuZCsrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYXBwbHlJbmxpbmVHcm91cChsaW5lTnVtLCBlbmQpO1xuICAgICAgICBsaW5lTnVtID0gZW5kICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXBwbHlMaW5lKGxpbmVOdW0pO1xuICAgICAgICBsaW5lTnVtKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEEgbGluZSB0aGF0IGNhbiBiZWdpbiBhIG11bHRpLWxpbmUgaW5saW5lIGdyb3VwIChhIHBhcmFncmFwaC1iZWFyaW5nIGJsb2NrKS4gKi9cbiAgcHJpdmF0ZSBpc0lubGluZUdyb3VwTGVhZGVyKGxpbmVOdW06IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHQgPSB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtXTtcbiAgICBpZiAodCA9PT0gXCJUTVBhcmFcIiB8fCB0ID09PSBcIlRNVUxcIiB8fCB0ID09PSBcIlRNT0xcIikgcmV0dXJuIHRydWU7XG4gICAgLy8gQSBibG9ja3F1b3RlIGxpbmUgd2hvc2UgY29udGVudCBpcyBibGFuayBpcyBhIHBhcmFncmFwaCBicmVhayBpbnNpZGUgdGhlIHF1b3RlLCBzbyBpdFxuICAgIC8vIGRvZXNuJ3Qgc3RhcnQgKG9yIGpvaW4pIGEgZ3JvdXAuXG4gICAgaWYgKHQgPT09IFwiVE1CbG9ja3F1b3RlXCIpIHJldHVybiAhdGhpcy5pc0JsYW5rQmxvY2txdW90ZUNvbnRlbnQobGluZU51bSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYGxpbmVOdW1gIGNvbnRpbnVlcyB0aGUgaW5saW5lIGdyb3VwIHdob3NlIGxlYWRlciBoYXMgdHlwZSBgbGVhZGVyVHlwZWAuICovXG4gIHByaXZhdGUgaXNJbmxpbmVDb250aW51YXRpb24obGluZU51bTogbnVtYmVyLCBsZWFkZXJUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0ID0gdGhpcy5saW5lVHlwZXNbbGluZU51bV07XG4gICAgLy8gQSBwbGFpbiBwYXJhZ3JhcGggbGluZSBpcyBhIGxhenkgY29udGludWF0aW9uIG9mIHRoZSBwcmVjZWRpbmcgYmxvY2sgKHBhcmFncmFwaCwgbGlzdCBpdGVtLFxuICAgIC8vIG9yIGJsb2NrcXVvdGUpLiBDb25zZWN1dGl2ZSBsaXN0IG1hcmtlcnMgKFRNVUwvVE1PTCksIGJ5IGNvbnRyYXN0LCBlYWNoIHN0YXJ0IGEgbmV3IGl0ZW1cbiAgICAvLyBhbmQgdGhlcmVmb3JlIGRvIE5PVCBjb250aW51ZSB0aGUgZ3JvdXAuXG4gICAgaWYgKHQgPT09IFwiVE1QYXJhXCIpIHJldHVybiB0cnVlO1xuICAgIGlmICh0ID09PSBcIlRNQmxvY2txdW90ZVwiICYmIGxlYWRlclR5cGUgPT09IFwiVE1CbG9ja3F1b3RlXCIpXG4gICAgICByZXR1cm4gIXRoaXMuaXNCbGFua0Jsb2NrcXVvdGVDb250ZW50KGxpbmVOdW0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gYSBibG9ja3F1b3RlIGxpbmUgY2FycmllcyBubyAobm9uLXdoaXRlc3BhY2UpIGNvbnRlbnQsIGUuZy4gYD5gIG9yIGA+IGAuICovXG4gIHByaXZhdGUgaXNCbGFua0Jsb2NrcXVvdGVDb250ZW50KGxpbmVOdW06IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNhcCA9IHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBjYXAgJiYgY2FwWzJdICE9PSB1bmRlZmluZWQgPyBjYXBbMl0gOiBcIlwiO1xuICAgIHJldHVybiBlZGl0b3JSZWdFeHAuYmxhbmtDb250ZW50LnRlc3QoY29udGVudCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5TGluZShsaW5lTnVtOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMubGluZUVsZW1lbnRzW2xpbmVOdW1dIGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0aGlzLmxpbmVEaXJ0eVtsaW5lTnVtXSkge1xuICAgICAgbGV0IGNvbnRlbnRIVE1MID0gdGhpcy5yZXBsYWNlKFxuICAgICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbbGluZU51bV0sXG4gICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dXG4gICAgICApO1xuICAgICAgZWwuY2xhc3NOYW1lID0gdGhpcy5saW5lVHlwZXNbbGluZU51bV07XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgIGVsLmlubmVySFRNTCA9IGNvbnRlbnRIVE1MID09PSBcIlwiID8gXCI8YnIgLz5cIiA6IGNvbnRlbnRIVE1MO1xuICAgICAgLy8gVGhpcyBsaW5lIGlzIG5vIGxvbmdlciByZW5kZXJlZCBhcyBwYXJ0IG9mIGEgbXVsdGktbGluZSBpbmxpbmUgZ3JvdXAuXG4gICAgICBkZWxldGUgZWwuZGF0YXNldC5tbFNpZztcbiAgICB9XG4gICAgZWwuZGF0YXNldC5saW5lTnVtID0gbGluZU51bS50b1N0cmluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBncm91cCBvZiBsaW5lcyBbc3RhcnQuLmVuZF0gdGhhdCB0b2dldGhlciBmb3JtIG9uZSBpbmxpbmUtcGFyc2luZyB1bml0LiBUaGUgaW5saW5lXG4gICAqIGNvbnRlbnQgb2YgZWFjaCBsaW5lICh0aGUgYCQkTmAgcG9ydGlvbiBvZiBpdHMgcmVwbGFjZW1lbnQg4oCUIHRoZSB3aG9sZSBsaW5lIGZvciBhIHBhcmFncmFwaCxcbiAgICogdGhlIHRleHQgYWZ0ZXIgdGhlIG1hcmtlciBmb3IgYSBsaXN0IGl0ZW0gb3IgYmxvY2txdW90ZSkgaXMgam9pbmVkIHdpdGggbmV3bGluZXMgYW5kIHBhcnNlZCBhc1xuICAgKiBhIHNpbmdsZSB1bml0LCBzbyBpbmxpbmUgc3R5bGVzIGNhbiBzcGFuIHRoZSBzb2Z0IGxpbmUgYnJlYWtzLiBUaGUgcmVzdWx0aW5nIEhUTUwgaXMgc3BsaXQgYmFja1xuICAgKiBpbnRvIG9uZSBmcmFnbWVudCBwZXIgbGluZTsgYW55IGVsZW1lbnQgc3RpbGwgb3BlbiBhdCBhIGxpbmUgYnJlYWsgaXMgY2xvc2VkIGFuZCByZS1vcGVuZWQgc29cbiAgICogZWFjaCBsaW5lIGtlZXBzIGl0cyBvd24gd2VsbC1mb3JtZWQgYmxvY2sgZWxlbWVudC4gUGVyLWxpbmUgbWFya2VycyAobGlzdCBidWxsZXRzLCBibG9ja3F1b3RlXG4gICAqIGA+YCkgYXJlIHByZXNlcnZlZCBleGFjdGx5LiBBIHNpbmdsZS1saW5lIGdyb3VwIChzdGFydCA9PT0gZW5kKSByZW5kZXJzIGlkZW50aWNhbGx5IHRvIGJlZm9yZS5cbiAgICovXG4gIHByaXZhdGUgYXBwbHlJbmxpbmVHcm91cChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIFNpZ25hdHVyZSBvZiBldmVyeSBpbnB1dCB0aGF0IGFmZmVjdHMgdGhpcyBncm91cCdzIHJlbmRlcmluZyAobGluZSB0eXBlcywgcmVwbGFjZW1lbnRzIGFuZFxuICAgIC8vIGNhcHR1cmVzIOKAlCBoZW5jZSB0aGUgbWFya2VyIHByZWZpeGVzIGFuZCB0aGUgaW5saW5lIGNvbnRlbnQpLiBTdG9yZWQgcGVyIGxpbmUgZWxlbWVudCBzbyBhXG4gICAgLy8gZ3JvdXAgaXMgcmUtcmVuZGVyZWQgd2hlbmV2ZXIgaXRzIGNvbnRlbnQsIGEgc2libGluZyBsaW5lLCBvciBpdHMgYm91bmRhcmllcyBjaGFuZ2UgKGUuZy4gb25cbiAgICAvLyBhIHNwbGl0L21lcmdlKSBldmVuIGlmIHRoZSBpbmRpdmlkdWFsIGxpbmUgd2Fzbid0IHNlcGFyYXRlbHkgbWFya2VkIGRpcnR5LlxuICAgIGNvbnN0IGNvbnRlbnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBzaWdTb3VyY2UgPSBgJHtlbmQgLSBzdGFydH1gO1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgY29uc3QgaWR4ID0gdGhpcy5pbmxpbmVDb250ZW50SW5kZXgodGhpcy5saW5lUmVwbGFjZW1lbnRzW2ldKTtcbiAgICAgIGNvbnRlbnRzLnB1c2godGhpcy5saW5lQ2FwdHVyZXNbaV1baWR4XSAhPT0gdW5kZWZpbmVkID8gdGhpcy5saW5lQ2FwdHVyZXNbaV1baWR4XSA6IFwiXCIpO1xuICAgICAgc2lnU291cmNlICs9IGBcXHgxZiR7dGhpcy5saW5lVHlwZXNbaV19XFx4MWYke3RoaXMubGluZVJlcGxhY2VtZW50c1tpXX1cXHgxZiR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2ldXG4gICAgICApfWA7XG4gICAgfVxuICAgIGNvbnN0IHNpZyA9IGAke3RoaXMuaGFzaFN0cmluZyhzaWdTb3VyY2UpfWA7XG5cbiAgICBsZXQgbmVlZHNSZW5kZXIgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5saW5lRGlydHlbaV0gfHxcbiAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2ldIGFzIEhUTUxFbGVtZW50KS5kYXRhc2V0Lm1sU2lnICE9PSBzaWdcbiAgICAgICkge1xuICAgICAgICBuZWVkc1JlbmRlciA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWVkc1JlbmRlcikge1xuICAgICAgY29uc3QgZnJhZ21lbnRzID0gdGhpcy5zcGxpdElubGluZUhUTUxCeUxpbmUoXG4gICAgICAgIHRoaXMucHJvY2Vzc0lubGluZVN0eWxlcyhjb250ZW50cy5qb2luKFwiXFxuXCIpKVxuICAgICAgKTtcbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMubGluZUVsZW1lbnRzW2ldIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBmcmFnID0gZnJhZ21lbnRzW2kgLSBzdGFydF0gfHwgXCJcIjtcbiAgICAgICAgY29uc3QgY29udGVudEhUTUwgPSB0aGlzLnJlcGxhY2VXaXRoSW5saW5lKFxuICAgICAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1tpXSxcbiAgICAgICAgICB0aGlzLmxpbmVDYXB0dXJlc1tpXSxcbiAgICAgICAgICBmcmFnXG4gICAgICAgICk7XG4gICAgICAgIGVsLmNsYXNzTmFtZSA9IHRoaXMubGluZVR5cGVzW2ldO1xuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoXCJzdHlsZVwiKTtcbiAgICAgICAgZWwuaW5uZXJIVE1MID0gY29udGVudEhUTUwgPT09IFwiXCIgPyBcIjxiciAvPlwiIDogY29udGVudEhUTUw7XG4gICAgICAgIGVsLmRhdGFzZXQubWxTaWcgPSBzaWc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAodGhpcy5saW5lRWxlbWVudHNbaV0gYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQubGluZU51bSA9IGkudG9TdHJpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKiogSW5kZXggb2YgdGhlIGlubGluZS1jb250ZW50IHBsYWNlaG9sZGVyIChgJCROYCkgaW4gYSBsaW5lIHJlcGxhY2VtZW50LCBvciAwIGlmIG5vbmUuICovXG4gIHByaXZhdGUgaW5saW5lQ29udGVudEluZGV4KHJlcGxhY2VtZW50OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IG0gPSBlZGl0b3JSZWdFeHAuaW5saW5lQ29udGVudFBsYWNlaG9sZGVyLmV4ZWMocmVwbGFjZW1lbnQpO1xuICAgIHJldHVybiBtID8gcGFyc2VJbnQobVsxXSkgOiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIExpa2UgcmVwbGFjZSgpLCBidXQgdXNlcyBhIHByZS1jb21wdXRlZCBpbmxpbmUgZnJhZ21lbnQgZm9yIHRoZSBgJCROYCAoaW5saW5lIGNvbnRlbnQpXG4gICAqIHBsYWNlaG9sZGVyIGluc3RlYWQgb2YgaW5saW5lLXBhcnNpbmcgdGhlIGNhcHR1cmUgaXRzZWxmLiBVc2VkIGZvciBtdWx0aS1saW5lIGdyb3VwcyB3aGVyZSB0aGVcbiAgICogaW5saW5lIGNvbnRlbnQgd2FzIHBhcnNlZCBqb2ludGx5IGFjcm9zcyBhbGwgbGluZXMuXG4gICAqL1xuICBwcml2YXRlIHJlcGxhY2VXaXRoSW5saW5lKFxuICAgIHJlcGxhY2VtZW50OiBzdHJpbmcsXG4gICAgY2FwdHVyZTogUmVnRXhwRXhlY0FycmF5LFxuICAgIGlubGluZUZyYWdtZW50OiBzdHJpbmdcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVwbGFjZW1lbnQucmVwbGFjZShlZGl0b3JSZWdFeHAucmVwbGFjZW1lbnRQbGFjZWhvbGRlciwgKHN0ciwgcDEsIHAyKSA9PiB7XG4gICAgICBpZiAocDEgPT09IFwiJFwiKSByZXR1cm4gaHRtbGVzY2FwZShjYXB0dXJlW3BhcnNlSW50KHAyKV0pO1xuICAgICAgZWxzZSByZXR1cm4gYDxzcGFuIGNsYXNzPVwiVE1JbmxpbmVGb3JtYXR0ZWRcIj4ke2lubGluZUZyYWdtZW50fTwvc3Bhbj5gO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyBpbmxpbmUgSFRNTCBwcm9kdWNlZCBmb3IgYSBqb2luZWQgbXVsdGktbGluZSBwYXJhZ3JhcGggYmFjayBpbnRvIG9uZSBmcmFnbWVudCBwZXJcbiAgICogc291cmNlIGxpbmUgKGZyYWdtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IHRoZSBgXFxuYCBtYXJrZXJzIGVtaXR0ZWQgYnkgcHJvY2Vzc0lubGluZVN0eWxlcykuXG4gICAqIElubGluZSBlbGVtZW50cyB0aGF0IGFyZSBzdGlsbCBvcGVuIGF0IGEgbGluZSBicmVhayBhcmUgY2xvc2VkIGF0IHRoZSBlbmQgb2YgdGhlIGZyYWdtZW50IGFuZFxuICAgKiByZS1vcGVuZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IG9uZSwgc28gdGhhdCBldmVyeSBmcmFnbWVudCBpcyBpbmRlcGVuZGVudGx5IHdlbGwtZm9ybWVkXG4gICAqIHdoaWxlIHRoZSBmb3JtYXR0aW5nIHZpc3VhbGx5IGNvbnRpbnVlcyBhY3Jvc3MgdGhlIGxpbmVzLlxuICAgKi9cbiAgcHJpdmF0ZSBzcGxpdElubGluZUhUTUxCeUxpbmUoaHRtbDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGZyYWdtZW50czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBvcGVuVGFnczogc3RyaW5nW10gPSBbXTsgLy8gZnVsbCBvcGVuaW5nLXRhZyBzdHJpbmdzIG9mIGN1cnJlbnRseSBvcGVuIGVsZW1lbnRzXG4gICAgbGV0IGN1cnJlbnQgPSBcIlwiO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGh0bWwubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjaCA9IGh0bWxbaV07XG4gICAgICBpZiAoY2ggPT09IFwiXFxuXCIpIHtcbiAgICAgICAgLy8gQ2xvc2UgY3VycmVudGx5IG9wZW4gdGFncyAoaW4gcmV2ZXJzZSkgdG8gZmluaXNoIHRoaXMgbGluZSdzIGZyYWdtZW50IC4uLlxuICAgICAgICBmb3IgKGxldCB0ID0gb3BlblRhZ3MubGVuZ3RoIC0gMTsgdCA+PSAwOyB0LS0pIHtcbiAgICAgICAgICBjdXJyZW50ICs9IGA8LyR7dGhpcy5pbmxpbmVUYWdOYW1lKG9wZW5UYWdzW3RdKX0+YDtcbiAgICAgICAgfVxuICAgICAgICBmcmFnbWVudHMucHVzaChjdXJyZW50KTtcbiAgICAgICAgLy8gLi4uIGFuZCByZS1vcGVuIHRoZW0gKGluIG9yZGVyKSBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgbGluZSdzIGZyYWdtZW50LlxuICAgICAgICBjdXJyZW50ID0gb3BlblRhZ3Muam9pbihcIlwiKTtcbiAgICAgICAgaSsrO1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gXCI8XCIpIHtcbiAgICAgICAgY29uc3QgY2xvc2UgPSBodG1sLmluZGV4T2YoXCI+XCIsIGkpO1xuICAgICAgICBpZiAoY2xvc2UgPCAwKSB7XG4gICAgICAgICAgLy8gRGVmZW5zaXZlOiBtYWxmb3JtZWQgb3V0cHV0LCBlbWl0IHRoZSByZW1haW5kZXIgdmVyYmF0aW0uXG4gICAgICAgICAgY3VycmVudCArPSBodG1sLnN1YnN0cihpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YWcgPSBodG1sLnN1YnN0cmluZyhpLCBjbG9zZSArIDEpO1xuICAgICAgICBjdXJyZW50ICs9IHRhZztcbiAgICAgICAgaWYgKHRhZ1sxXSA9PT0gXCIvXCIpIHtcbiAgICAgICAgICBvcGVuVGFncy5wb3AoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0YWdbdGFnLmxlbmd0aCAtIDJdICE9PSBcIi9cIikge1xuICAgICAgICAgIC8vIE9wZW5pbmcgdGFnIHRoYXQgaXNuJ3Qgc2VsZi1jbG9zaW5nLlxuICAgICAgICAgIG9wZW5UYWdzLnB1c2godGFnKTtcbiAgICAgICAgfVxuICAgICAgICBpID0gY2xvc2UgKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudCArPSBjaDtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgICBmcmFnbWVudHMucHVzaChjdXJyZW50KTtcbiAgICByZXR1cm4gZnJhZ21lbnRzO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmxpbmVUYWdOYW1lKG9wZW5UYWc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbSA9IGVkaXRvclJlZ0V4cC5pbmxpbmVUYWdOYW1lLmV4ZWMob3BlblRhZyk7XG4gICAgcmV0dXJuIG0gPyBtWzFdIDogXCJzcGFuXCI7XG4gIH1cblxuICBwcml2YXRlIGhhc2hTdHJpbmcoczogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgaCA9IDUzODE7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBoID0gKCgoaCA8PCA1KSArIGgpIF4gcy5jaGFyQ29kZUF0KGkpKSA+Pj4gMDtcbiAgICB9XG4gICAgcmV0dXJuIGg7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUxpbmVUeXBlcygpOiB2b2lkIHtcbiAgICBsZXQgY29kZUJsb2NrVHlwZTogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICBsZXQgY29kZUJsb2NrU2VxTGVuZ3RoID0gMDtcbiAgICBsZXQgaHRtbEJsb2NrOiBIVE1MQmxvY2tSdWxlIHwgZmFsc2UgPSBmYWxzZTtcblxuICAgIGZvciAobGV0IGxpbmVOdW0gPSAwOyBsaW5lTnVtIDwgdGhpcy5saW5lcy5sZW5ndGg7IGxpbmVOdW0rKykge1xuICAgICAgbGV0IGxpbmVUeXBlID0gXCJUTVBhcmFcIjtcbiAgICAgIGxldCBsaW5lQ2FwdHVyZTogUmVnRXhwRXhlY0FycmF5ID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgIGxldCBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuXG4gICAgICAvLyBDaGVjayBvbmdvaW5nIGNvZGUgYmxvY2tzXG4gICAgICBpZiAoY29kZUJsb2NrVHlwZSA9PT0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlblwiKSB7XG4gICAgICAgIGxldCBjYXB0dXJlID0gbGluZUdyYW1tYXIuVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSAmJiBjYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoID49IGNvZGVCbG9ja1NlcUxlbmd0aCkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2VcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZUJhY2t0aWNrQ2xvc2UucmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgIGNvZGVCbG9ja1R5cGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1GZW5jZWRDb2RlQmFja3RpY2tcIjtcbiAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSAnPHNwYW4gY2xhc3M9XCJUTUZlbmNlZENvZGVcIj4kMDxiciAvPjwvc3Bhbj4nO1xuICAgICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjb2RlQmxvY2tUeXBlID09PSBcIlRNQ29kZUZlbmNlVGlsZGVPcGVuXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTUNvZGVGZW5jZVRpbGRlQ2xvc2UucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgIGlmIChjYXB0dXJlICYmIGNhcHR1cmUuZ3JvdXBzIVtcInNlcVwiXS5sZW5ndGggPj0gY29kZUJsb2NrU2VxTGVuZ3RoKSB7XG4gICAgICAgICAgbGluZVR5cGUgPSBcIlRNQ29kZUZlbmNlVGlsZGVDbG9zZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9IGxpbmVHcmFtbWFyLlRNQ29kZUZlbmNlVGlsZGVDbG9zZS5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgY29kZUJsb2NrVHlwZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUZlbmNlZENvZGVUaWxkZVwiO1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9ICc8c3BhbiBjbGFzcz1cIlRNRmVuY2VkQ29kZVwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgICAgbGluZUNhcHR1cmUgPSBbdGhpcy5saW5lc1tsaW5lTnVtXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIEhUTUwgYmxvY2sgdHlwZXNcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVBhcmFcIiAmJiBodG1sQmxvY2sgPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGh0bWxCbG9ja1R5cGUgb2YgaHRtbEJsb2NrR3JhbW1hcikge1xuICAgICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVOdW1dLm1hdGNoKGh0bWxCbG9ja1R5cGUuc3RhcnQpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGh0bWxCbG9ja1R5cGUucGFyYUludGVycnVwdCB8fFxuICAgICAgICAgICAgICBsaW5lTnVtID09PSAwIHx8XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNUGFyYVwiIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNVUxcIiB8fFxuICAgICAgICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTU9MXCIgfHxcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1CbG9ja3F1b3RlXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGh0bWxCbG9jayA9IGh0bWxCbG9ja1R5cGU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaHRtbEJsb2NrICE9PSBmYWxzZSkge1xuICAgICAgICBsaW5lVHlwZSA9IFwiVE1IVE1MQmxvY2tcIjtcbiAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gJzxzcGFuIGNsYXNzPVwiVE1IVE1MQ29udGVudFwiPiQwPGJyIC8+PC9zcGFuPic7XG4gICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcblxuICAgICAgICBpZiAoaHRtbEJsb2NrLmVuZCkge1xuICAgICAgICAgIGlmICh0aGlzLmxpbmVzW2xpbmVOdW1dLm1hdGNoKGh0bWxCbG9jay5lbmQpKSB7XG4gICAgICAgICAgICBodG1sQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbGluZU51bSA9PT0gdGhpcy5saW5lcy5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgICB0aGlzLmxpbmVzW2xpbmVOdW0gKyAxXS5tYXRjaChsaW5lR3JhbW1hci5UTUJsYW5rTGluZS5yZWdleHApXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBodG1sQmxvY2sgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgYWxsIHJlZ2V4cHMgaWYgd2UgaGF2ZW4ndCBhcHBsaWVkIG9uZSBvZiB0aGUgY29kZSBibG9jayB0eXBlc1xuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNUGFyYVwiKSB7XG4gICAgICAgIGZvciAobGV0IHR5cGUgaW4gbGluZUdyYW1tYXIpIHtcbiAgICAgICAgICBpZiAobGluZUdyYW1tYXJbdHlwZV0ucmVnZXhwKSB7XG4gICAgICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyW3R5cGVdLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICAgICAgbGluZVR5cGUgPSB0eXBlO1xuICAgICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hclt0eXBlXS5yZXBsYWNlbWVudDtcbiAgICAgICAgICAgICAgbGluZUNhcHR1cmUgPSBjYXB0dXJlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgd2UndmUgb3BlbmVkIGEgY29kZSBibG9jaywgcmVtZW1iZXIgdGhhdFxuICAgICAgaWYgKGxpbmVUeXBlID09PSBcIlRNQ29kZUZlbmNlQmFja3RpY2tPcGVuXCIgfHwgbGluZVR5cGUgPT09IFwiVE1Db2RlRmVuY2VUaWxkZU9wZW5cIikge1xuICAgICAgICBjb2RlQmxvY2tUeXBlID0gbGluZVR5cGU7XG4gICAgICAgIGNvZGVCbG9ja1NlcUxlbmd0aCA9IGxpbmVDYXB0dXJlLmdyb3VwcyFbXCJzZXFcIl0ubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICAvLyBMaW5rIHJlZmVyZW5jZSBkZWZpbml0aW9uIGFuZCBpbmRlbnRlZCBjb2RlIGNhbid0IGludGVycnVwdCBhIHBhcmFncmFwaFxuICAgICAgaWYgKFxuICAgICAgICAobGluZVR5cGUgPT09IFwiVE1JbmRlbnRlZENvZGVcIiB8fCBsaW5lVHlwZSA9PT0gXCJUTUxpbmtSZWZlcmVuY2VEZWZpbml0aW9uXCIpICYmXG4gICAgICAgIGxpbmVOdW0gPiAwICYmXG4gICAgICAgICh0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1QYXJhXCIgfHxcbiAgICAgICAgICB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gPT09IFwiVE1VTFwiIHx8XG4gICAgICAgICAgdGhpcy5saW5lVHlwZXNbbGluZU51bSAtIDFdID09PSBcIlRNT0xcIiB8fFxuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW0gLSAxXSA9PT0gXCJUTUJsb2NrcXVvdGVcIilcbiAgICAgICkge1xuICAgICAgICBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICAgIGxpbmVDYXB0dXJlID0gW3RoaXMubGluZXNbbGluZU51bV1dIGFzIFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gXCIkJDBcIjtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0ZXh0IEgyIG1hcmtlcnMgdGhhdCBjYW4gYWxzbyBiZSBpbnRlcnByZXRlZCBhcyBhbiBlbXB0eSBsaXN0IGl0ZW0gc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIHN1Y2hcbiAgICAgIGlmIChsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgyTWFya2VyXCIpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hci5UTVVMLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbbGluZU51bV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgIGxpbmVUeXBlID0gXCJUTVVMXCI7XG4gICAgICAgICAgbGluZVJlcGxhY2VtZW50ID0gbGluZUdyYW1tYXIuVE1VTC5yZXBsYWNlbWVudDtcbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2V0ZXh0IGhlYWRpbmdzIGFyZSBvbmx5IHZhbGlkIGlmIHByZWNlZGVkIGJ5IGEgcGFyYWdyYXBoXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1TZXRleHRIMU1hcmtlclwiIHx8IGxpbmVUeXBlID09PSBcIlRNU2V0ZXh0SDJNYXJrZXJcIikge1xuICAgICAgICBpZiAobGluZU51bSA9PT0gMCB8fCB0aGlzLmxpbmVUeXBlc1tsaW5lTnVtIC0gMV0gIT09IFwiVE1QYXJhXCIpIHtcbiAgICAgICAgICBsZXQgY2FwdHVyZSA9IGxpbmVHcmFtbWFyLlRNSFIucmVnZXhwLmV4ZWModGhpcy5saW5lc1tsaW5lTnVtXSk7XG4gICAgICAgICAgaWYgKGNhcHR1cmUpIHtcbiAgICAgICAgICAgIGxpbmVUeXBlID0gXCJUTUhSXCI7XG4gICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IGNhcHR1cmU7XG4gICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBsaW5lR3JhbW1hci5UTUhSLnJlcGxhY2VtZW50O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaW5lVHlwZSA9IFwiVE1QYXJhXCI7XG4gICAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFt0aGlzLmxpbmVzW2xpbmVOdW1dXSBhcyBSZWdFeHBFeGVjQXJyYXk7XG4gICAgICAgICAgICBsaW5lUmVwbGFjZW1lbnQgPSBcIiQkMFwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgaGVhZGluZ0xpbmUgPSBsaW5lTnVtIC0gMTtcbiAgICAgICAgICBjb25zdCBoZWFkaW5nTGluZVR5cGUgPSBsaW5lVHlwZSA9PT0gXCJUTVNldGV4dEgxTWFya2VyXCIgPyBcIlRNU2V0ZXh0SDFcIiA6IFwiVE1TZXRleHRIMlwiO1xuICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gIT09IGhlYWRpbmdMaW5lVHlwZSkge1xuICAgICAgICAgICAgICB0aGlzLmxpbmVUeXBlc1toZWFkaW5nTGluZV0gPSBoZWFkaW5nTGluZVR5cGU7XG4gICAgICAgICAgICAgIHRoaXMubGluZURpcnR5W2hlYWRpbmdMaW5lXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxpbmVSZXBsYWNlbWVudHNbaGVhZGluZ0xpbmVdID0gXCIkJDBcIjtcbiAgICAgICAgICAgIHRoaXMubGluZUNhcHR1cmVzW2hlYWRpbmdMaW5lXSA9IFt0aGlzLmxpbmVzW2hlYWRpbmdMaW5lXV0gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICAgICAgaGVhZGluZ0xpbmUtLTtcbiAgICAgICAgICB9IHdoaWxlIChoZWFkaW5nTGluZSA+PSAwICYmIHRoaXMubGluZVR5cGVzW2hlYWRpbmdMaW5lXSA9PT0gXCJUTVBhcmFcIik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gR0ZNIHRhc2sgbGlzdCBpdGVtOiBhIGxpc3QgaXRlbSB3aG9zZSBjb250ZW50IGJlZ2lucyB3aXRoIGEgY2hlY2tib3ggbWFya2VyIGBbIF1gLCBgW3hdYFxuICAgICAgLy8gb3IgYFtYXWAgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZSAob3IgdGhlIGVuZCBvZiB0aGUgbGluZSkuIFRoZSBicmFja2V0cyBhbmQgc2VwYXJhdG9yIHN0YXlcbiAgICAgIC8vIGFzIG9yZGluYXJ5IFRNTWFyayB0ZXh0OyBvbmx5IHRoZSBpbm5lciBjaGFyYWN0ZXIgaXMgcmVuZGVyZWQgYXMgYSBjaGVja2JveCAodmlhIENTUyksIHNvXG4gICAgICAvLyB0aGUgbGluZSdzIHRleHQgY29udGVudCBzdGlsbCBlcXVhbHMgaXRzIHNvdXJjZSBhbmQgdGhlIGN1cnNvciBuYXZpZ2F0ZXMgaXQgbm9ybWFsbHkuXG4gICAgICBpZiAobGluZVR5cGUgPT09IFwiVE1VTFwiIHx8IGxpbmVUeXBlID09PSBcIlRNT0xcIikge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gbGluZUNhcHR1cmVbMl0gIT09IHVuZGVmaW5lZCA/IGxpbmVDYXB0dXJlWzJdIDogXCJcIjtcbiAgICAgICAgY29uc3QgdGFzayA9IGVkaXRvclJlZ0V4cC50YXNrTGlzdEl0ZW0uZXhlYyhjb250ZW50KTtcbiAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICBjb25zdCBjaGVja2VkID0gdGFza1syXSAhPT0gXCIgXCI7IC8vIFt4XSAvIFtYXSBhcmUgY2hlY2tlZCwgWyBdIGlzIG5vdFxuICAgICAgICAgIGNvbnN0IGJ1bGxldENsYXNzID0gbGluZVR5cGUgPT09IFwiVE1VTFwiID8gXCJUTU1hcmtfVE1VTFwiIDogXCJUTU1hcmtfVE1PTFwiO1xuICAgICAgICAgIGNvbnN0IGJveENsYXNzID0gY2hlY2tlZFxuICAgICAgICAgICAgPyBcIlRNQ2hlY2tib3ggVE1DaGVja2JveF9jaGVja2VkXCJcbiAgICAgICAgICAgIDogXCJUTUNoZWNrYm94IFRNQ2hlY2tib3hfdW5jaGVja2VkXCI7XG4gICAgICAgICAgLy8gU3ludGhldGljIGNhcHR1cmU6IFtmdWxsLCBidWxsZXQsIFwiW1wiLCBpbm5lciwgXCJdXCIsIHNlcGFyYXRvciwgaW5saW5lIGNvbnRlbnRdLiBUaGVcbiAgICAgICAgICAvLyBpbmxpbmUgY29udGVudCBzdGF5cyB0aGUgbGFzdCBgJCROYCBncm91cCBzbyBpbmxpbmVDb250ZW50SW5kZXgoKS9hcHBseUlubGluZUdyb3VwKClcbiAgICAgICAgICAvLyAoYW5kIHRodXMgbXVsdGktbGluZSBjb250aW51YXRpb24pIGJlaGF2ZSBleGFjdGx5IGFzIGZvciBhIHBsYWluIGxpc3QgaXRlbS5cbiAgICAgICAgICBsaW5lQ2FwdHVyZSA9IFtcbiAgICAgICAgICAgIGxpbmVDYXB0dXJlWzBdLFxuICAgICAgICAgICAgbGluZUNhcHR1cmVbMV0sXG4gICAgICAgICAgICB0YXNrWzFdLFxuICAgICAgICAgICAgdGFza1syXSxcbiAgICAgICAgICAgIHRhc2tbM10sXG4gICAgICAgICAgICB0YXNrWzRdLFxuICAgICAgICAgICAgdGFza1s1XSxcbiAgICAgICAgICBdIGFzIHVua25vd24gYXMgUmVnRXhwRXhlY0FycmF5O1xuICAgICAgICAgIGxpbmVSZXBsYWNlbWVudCA9XG4gICAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgJHtidWxsZXRDbGFzc31cIj4kMTwvc3Bhbj5gICtcbiAgICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1UYXNrXCI+JDI8L3NwYW4+YCArXG4gICAgICAgICAgICBgPHNwYW4gY2xhc3M9XCIke2JveENsYXNzfVwiPiQzPC9zcGFuPmAgK1xuICAgICAgICAgICAgYDxzcGFuIGNsYXNzPVwiVE1NYXJrIFRNTWFya19UTVRhc2tcIj4kNDwvc3Bhbj5gICtcbiAgICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfVE1UYXNrXCI+JDU8L3NwYW4+YCArXG4gICAgICAgICAgICBgJCQ2YDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5saW5lVHlwZXNbbGluZU51bV0gIT09IGxpbmVUeXBlKSB7XG4gICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVOdW1dID0gbGluZVR5cGU7XG4gICAgICAgIHRoaXMubGluZURpcnR5W2xpbmVOdW1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGluZVJlcGxhY2VtZW50c1tsaW5lTnVtXSA9IGxpbmVSZXBsYWNlbWVudDtcbiAgICAgIHRoaXMubGluZUNhcHR1cmVzW2xpbmVOdW1dID0gbGluZUNhcHR1cmU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGlvbihnZXRBbmNob3I6IGJvb2xlYW4gPSBmYWxzZSk6IFBvc2l0aW9uIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIGxldCBzdGFydE5vZGUgPSBnZXRBbmNob3IgPyBzZWxlY3Rpb24hLmFuY2hvck5vZGUgOiBzZWxlY3Rpb24hLmZvY3VzTm9kZTtcbiAgICBpZiAoIXN0YXJ0Tm9kZSkgcmV0dXJuIG51bGw7XG4gICAgbGV0IG9mZnNldCA9IGdldEFuY2hvciA/IHNlbGVjdGlvbiEuYW5jaG9yT2Zmc2V0IDogc2VsZWN0aW9uIS5mb2N1c09mZnNldDtcbiAgICBpZiAoc3RhcnROb2RlID09PSB0aGlzLmUpIHtcbiAgICAgIGlmIChvZmZzZXQgPCB0aGlzLmxpbmVzLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByb3c6IG9mZnNldCxcbiAgICAgICAgICBjb2w6IDAsXG4gICAgICAgIH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICByb3c6IG9mZnNldCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1tvZmZzZXQgLSAxXS5sZW5ndGgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBjb2wgPSB0aGlzLmNvbXB1dGVDb2x1bW4oc3RhcnROb2RlLCBvZmZzZXQpO1xuICAgIGlmIChjb2wgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgbGV0IG5vZGUgPSBzdGFydE5vZGU7XG4gICAgd2hpbGUgKG5vZGUucGFyZW50RWxlbWVudCAhPT0gdGhpcy5lKSB7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnRFbGVtZW50ITtcbiAgICB9XG5cbiAgICBsZXQgcm93ID0gMDtcbiAgICAvLyBJZiB0aGUgbm9kZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBzaWJsaW5nLCBpdCBtdXN0IGJlIHRoZSBmaXJzdCBsaW5lXG4gICAgaWYgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICBjb25zdCBjdXJyZW50TGluZU51bURhdGEgPSAobm9kZSBhcyBIVE1MRWxlbWVudCkuZGF0YXNldD8ubGluZU51bTtcbiAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bURhdGEgPSAobm9kZS5wcmV2aW91c1NpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmRhdGFzZXQ/LmxpbmVOdW07XG5cbiAgICAgIGlmIChjdXJyZW50TGluZU51bURhdGEgJiYgcHJldmlvdXNMaW5lTnVtRGF0YSkge1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZU51bSA9IHBhcnNlSW50KGN1cnJlbnRMaW5lTnVtRGF0YSk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzTGluZU51bSA9IHBhcnNlSW50KHByZXZpb3VzTGluZU51bURhdGEpO1xuICAgICAgICBpZiAoY3VycmVudExpbmVOdW0gPT09IHByZXZpb3VzTGluZU51bSArIDEpIHtcbiAgICAgICAgICByb3cgPSBjdXJyZW50TGluZU51bTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBsaW5lIGlzIE5PVCB0aGUgcHJldmlvdXMgbGluZSArIDEsIHRoZW4gZWl0aGVyIFxuICAgICAgICAgIC8vIHRoZSBjdXJyZW50IGxpbmUgZ290IHNwbGl0IGluIHR3byBvciBtZXJnZWQgd2l0aCB0aGUgcHJldmlvdXMgbGluZVxuICAgICAgICAgIC8vIEVpdGhlciB3YXksIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIHJvdyBudW1iZXJcbiAgICAgICAgICB3aGlsZSAobm9kZS5wcmV2aW91c1NpYmxpbmcpIHtcbiAgICAgICAgICAgIHJvdysrO1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyByb3c6IHJvdywgY29sOiBjb2wgfTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3Rpb24oZm9jdXM6IFBvc2l0aW9uLCBhbmNob3I6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcbiAgICBpZiAoIWZvY3VzKSByZXR1cm47XG5cbiAgICBsZXQgeyBub2RlOiBmb2N1c05vZGUsIG9mZnNldDogZm9jdXNPZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICBmb2N1cy5yb3csXG4gICAgICBmb2N1cy5jb2wsXG4gICAgICBhbmNob3IgPyBhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA+IGZvY3VzLmNvbCA6IGZhbHNlXG4gICAgKTtcbiAgICBsZXQgYW5jaG9yTm9kZSA9IG51bGwsXG4gICAgICBhbmNob3JPZmZzZXQgPSBudWxsO1xuICAgIGlmIChhbmNob3IgJiYgKGFuY2hvci5yb3cgIT09IGZvY3VzLnJvdyB8fCBhbmNob3IuY29sICE9PSBmb2N1cy5jb2wpKSB7XG4gICAgICBsZXQgeyBub2RlLCBvZmZzZXQgfSA9IHRoaXMuY29tcHV0ZU5vZGVBbmRPZmZzZXQoXG4gICAgICAgIGFuY2hvci5yb3csXG4gICAgICAgIGFuY2hvci5jb2wsXG4gICAgICAgIGZvY3VzLnJvdyA9PT0gYW5jaG9yLnJvdyAmJiBmb2N1cy5jb2wgPiBhbmNob3IuY29sXG4gICAgICApO1xuICAgICAgYW5jaG9yTm9kZSA9IG5vZGU7XG4gICAgICBhbmNob3JPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuXG4gICAgbGV0IHdpbmRvd1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICB3aW5kb3dTZWxlY3Rpb24hLnNldEJhc2VBbmRFeHRlbnQoXG4gICAgICBmb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldCxcbiAgICAgIGFuY2hvck5vZGUgfHwgZm9jdXNOb2RlLFxuICAgICAgYW5jaG9yTm9kZSA/IGFuY2hvck9mZnNldCEgOiBmb2N1c09mZnNldFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVzdG9yZUxhc3RTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMubGFzdFNlbGVjdGlvbiAmJiB0aGlzLmxhc3RTZWxlY3Rpb24uZm9jdXMpIHtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHRoaXMubGFzdFNlbGVjdGlvbi5mb2N1cywgdGhpcy5sYXN0U2VsZWN0aW9uLmFuY2hvcik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHBhc3RlKHRleHQ6IHN0cmluZywgYW5jaG9yOiBQb3NpdGlvbiB8IG51bGwgPSBudWxsLCBmb2N1czogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghYW5jaG9yKSBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYmVnaW5uaW5nOiBQb3NpdGlvbiwgZW5kOiBQb3NpdGlvbjtcbiAgICBpZiAoIWZvY3VzKSB7XG4gICAgICBmb2N1cyA9IHtcbiAgICAgICAgcm93OiB0aGlzLmxpbmVzLmxlbmd0aCAtIDEsXG4gICAgICAgIGNvbDogdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aCAtIDFdLmxlbmd0aCxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghYW5jaG9yKSB7XG4gICAgICBhbmNob3IgPSBmb2N1cztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYW5jaG9yLnJvdyA8IGZvY3VzLnJvdyB8fFxuICAgICAgKGFuY2hvci5yb3cgPT09IGZvY3VzLnJvdyAmJiBhbmNob3IuY29sIDw9IGZvY3VzLmNvbClcbiAgICApIHtcbiAgICAgIGJlZ2lubmluZyA9IGFuY2hvcjtcbiAgICAgIGVuZCA9IGZvY3VzO1xuICAgIH0gZWxzZSB7XG4gICAgICBiZWdpbm5pbmcgPSBmb2N1cztcbiAgICAgIGVuZCA9IGFuY2hvcjtcbiAgICB9XG4gICAgbGV0IGluc2VydGVkTGluZXMgPSB0ZXh0LnNwbGl0KGVkaXRvclJlZ0V4cC5saW5lU3BsaXQpO1xuICAgIGxldCBsaW5lQmVmb3JlID0gdGhpcy5saW5lc1tiZWdpbm5pbmcucm93XS5zdWJzdHIoMCwgYmVnaW5uaW5nLmNvbCk7XG4gICAgbGV0IGxpbmVFbmQgPSB0aGlzLmxpbmVzW2VuZC5yb3ddLnN1YnN0cihlbmQuY29sKTtcbiAgICBpbnNlcnRlZExpbmVzWzBdID0gbGluZUJlZm9yZS5jb25jYXQoaW5zZXJ0ZWRMaW5lc1swXSk7XG4gICAgbGV0IGVuZENvbFBvcyA9IGluc2VydGVkTGluZXNbaW5zZXJ0ZWRMaW5lcy5sZW5ndGggLSAxXS5sZW5ndGg7XG4gICAgaW5zZXJ0ZWRMaW5lc1tpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDFdID0gaW5zZXJ0ZWRMaW5lc1tpbnNlcnRlZExpbmVzLmxlbmd0aCAtIDFdLmNvbmNhdChsaW5lRW5kKTtcbiAgICB0aGlzLnNwbGljZUxpbmVzKGJlZ2lubmluZy5yb3csIDEgKyBlbmQucm93IC0gYmVnaW5uaW5nLnJvdywgaW5zZXJ0ZWRMaW5lcyk7XG4gICAgZm9jdXMucm93ID0gYmVnaW5uaW5nLnJvdyArIGluc2VydGVkTGluZXMubGVuZ3RoIC0gMTtcbiAgICBmb2N1cy5jb2wgPSBlbmRDb2xQb3M7XG4gICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMpO1xuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIHdyYXBTZWxlY3Rpb24ocHJlOiBzdHJpbmcsIHBvc3Q6IHN0cmluZywgZm9jdXM6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwsIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICBpZiAoIWZvY3VzKSBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yIHx8IGZvY3VzLnJvdyAhPT0gYW5jaG9yLnJvdykgcmV0dXJuO1xuICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvd10gPSB0cnVlO1xuXG4gICAgY29uc3Qgc3RhcnRDb2wgPSBmb2N1cy5jb2wgPCBhbmNob3IuY29sID8gZm9jdXMuY29sIDogYW5jaG9yLmNvbDtcbiAgICBjb25zdCBlbmRDb2wgPSBmb2N1cy5jb2wgPCBhbmNob3IuY29sID8gYW5jaG9yLmNvbCA6IGZvY3VzLmNvbDtcbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cigwLCBzdGFydENvbCkuY29uY2F0KHByZSk7XG4gICAgY29uc3QgbWlkID0gZW5kQ29sID09PSBzdGFydENvbCA/IFwiXCIgOiB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKHN0YXJ0Q29sLCBlbmRDb2wgLSBzdGFydENvbCk7XG4gICAgY29uc3QgcmlnaHQgPSBwb3N0LmNvbmNhdCh0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyKGVuZENvbCkpO1xuICAgIHRoaXMubGluZXNbZm9jdXMucm93XSA9IGxlZnQuY29uY2F0KG1pZCwgcmlnaHQpO1xuICAgIGFuY2hvci5jb2wgPSBsZWZ0Lmxlbmd0aDtcbiAgICBmb2N1cy5jb2wgPSBhbmNob3IuY29sICsgbWlkLmxlbmd0aDtcblxuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzLCBhbmNob3IpO1xuICB9XG5cbiAgcHVibGljIGFkZEV2ZW50TGlzdGVuZXI8VCBleHRlbmRzIEV2ZW50VHlwZT4oXG4gICAgdHlwZTogVCxcbiAgICBsaXN0ZW5lcjogVCBleHRlbmRzICdjaGFuZ2UnID8gRXZlbnRIYW5kbGVyPENoYW5nZUV2ZW50PiA6XG4gICAgICAgICAgICAgVCBleHRlbmRzICdzZWxlY3Rpb24nID8gRXZlbnRIYW5kbGVyPFNlbGVjdGlvbkV2ZW50PiA6XG4gICAgICAgICAgICAgVCBleHRlbmRzICdkcm9wJyA/IEV2ZW50SGFuZGxlcjxEcm9wRXZlbnQ+IDogbmV2ZXJcbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGUubWF0Y2goZWRpdG9yUmVnRXhwLmNoYW5nZUV2ZW50KSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuY2hhbmdlLnB1c2gobGlzdGVuZXIgYXMgRXZlbnRIYW5kbGVyPENoYW5nZUV2ZW50Pik7XG4gICAgfVxuICAgIGlmICh0eXBlLm1hdGNoKGVkaXRvclJlZ0V4cC5zZWxlY3Rpb25FdmVudCkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbi5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxTZWxlY3Rpb25FdmVudD4pO1xuICAgIH1cbiAgICBpZiAodHlwZS5tYXRjaChlZGl0b3JSZWdFeHAuZHJvcEV2ZW50KSkge1xuICAgICAgdGhpcy5saXN0ZW5lcnMuZHJvcC5wdXNoKGxpc3RlbmVyIGFzIEV2ZW50SGFuZGxlcjxEcm9wRXZlbnQ+KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpcmVDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVQbGFjZWhvbGRlcigpO1xuICAgIGlmICghdGhpcy50ZXh0YXJlYSAmJiAhdGhpcy5saXN0ZW5lcnMuY2hhbmdlLmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKTtcbiAgICBpZiAodGhpcy50ZXh0YXJlYSkgdGhpcy50ZXh0YXJlYS52YWx1ZSA9IGNvbnRlbnQ7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuY2hhbmdlKSB7XG4gICAgICBsaXN0ZW5lcih7XG4gICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgIGxpbmVzRGlydHk6IFsuLi50aGlzLmxpbmVEaXJ0eV0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogYmVmb3JlaW5wdXQgaGFuZGxlciwgZXhjbHVzaXZlbHkgdG8gaGFuZGxlIGluc2VydFBhcmFncmFwaCxcbiAgICogaW5zZXJ0TGluZUJyZWFrLCBkZWxldGVDb250ZW50QmFja3dhcmQsIGFuZCBkZWxldGVDb250ZW50Rm9yd2FyZCBldmVudHMuXG4gICAqIFRoZXNlIHVzZWQgdG8gYmUgaGFuZGxlZCBpbiB0aGUgaW5wdXQgZXZlbnQsIGJ1dCB0aGF0IGNhdXNlZCBpc3N1ZXMgd2l0aFxuICAgKiBGaXJlZm94IHdoZXJlIHRoZSBpbnB1dCBldmVudCB3b3VsZCBiZSBzb21ldGltZXMgbm90IGJlIGZpcmVkIGZvciB0aGVzZVxuICAgKiBpbnB1dCB0eXBlcy4gZGVsZXRlQ29udGVudEJhY2t3YXJkL0ZvcndhcmQgYXJlIGFsc28gaGFuZGxlZCBoZXJlIHRvIGZpeCBhXG4gICAqIEZpcmVmb3gtc3BlY2lmaWMgYnVnICgjMTUxKSB3aGVyZSBiYWNrc3BhY2luZyBvbiBhbiBlbXB0eSBsaW5lIHdvdWxkIG5vdFxuICAgKiByZW1vdmUgaXQsIGJlY2F1c2UgRmlyZWZveCBvbmx5IHJlbW92ZXMgdGhlIDxicj4gaW5zaWRlIHRoZSBlbXB0eSA8ZGl2PlxuICAgKiByYXRoZXIgdGhhbiBtZXJnaW5nIHRoZSBkaXZzLCBhbmQgZml4Tm9kZUhpZXJhcmNoeSgpIHdvdWxkIHRoZW4gcmUtYWRkIHRoZVxuICAgKiA8YnI+LCByZXN1bHRpbmcgaW4gYSBuby1vcC5cbiAgICogQHBhcmFtIGV2ZW50IFRoZSBpbnB1dCBldmVudFxuICAgKiBAcmV0dXJucyBub3RoaW5nXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUJlZm9yZUlucHV0RXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYmVmb3JlSW5wdXRFdmVudCA9IGV2ZW50IGFzIElucHV0RXZlbnQ7XG5cbiAgICAvLyBIYW5kbGUgY3Jvc3MtbGluZSBkZWxldGUgb3BlcmF0aW9ucyAoYmFja3NwYWNlIGF0IGNvbCAwLCBkZWxldGUgYXQgZW5kIG9mIGxpbmUpXG4gICAgaWYgKFxuICAgICAgYmVmb3JlSW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIgfHxcbiAgICAgIGJlZm9yZUlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImRlbGV0ZUNvbnRlbnRGb3J3YXJkXCJcbiAgICApIHtcbiAgICAgIGNvbnN0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgaWYgKCFmb2N1cyB8fCAhYW5jaG9yKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGlzQmFja3NwYWNlID0gYmVmb3JlSW5wdXRFdmVudC5pbnB1dFR5cGUgPT09IFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCI7XG5cbiAgICAgIC8vIE9ubHkgaW50ZXJjZXB0IGNvbGxhcHNlZCBzZWxlY3Rpb25zIGF0IGxpbmUgYm91bmRhcmllc1xuICAgICAgaWYgKGZvY3VzLnJvdyA9PT0gYW5jaG9yLnJvdyAmJiBmb2N1cy5jb2wgPT09IGFuY2hvci5jb2wpIHtcbiAgICAgICAgaWYgKGlzQmFja3NwYWNlICYmIGZvY3VzLmNvbCA9PT0gMCAmJiBmb2N1cy5yb3cgPiAwKSB7XG4gICAgICAgICAgLy8gQmFja3NwYWNlIGF0IHN0YXJ0IG9mIGxpbmU6IG1lcmdlIGN1cnJlbnQgbGluZSBpbnRvIGVuZCBvZiBwcmV2aW91c1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgICAgICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICAgICAgICBjb25zdCBwcmV2TGluZUxlbiA9IHRoaXMubGluZXNbZm9jdXMucm93IC0gMV0ubGVuZ3RoO1xuICAgICAgICAgIHRoaXMubGluZXNbZm9jdXMucm93IC0gMV0gPSB0aGlzLmxpbmVzW2ZvY3VzLnJvdyAtIDFdICsgdGhpcy5saW5lc1tmb2N1cy5yb3ddO1xuICAgICAgICAgIHRoaXMubGluZURpcnR5W2ZvY3VzLnJvdyAtIDFdID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNwbGljZUxpbmVzKGZvY3VzLnJvdywgMSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oeyByb3c6IGZvY3VzLnJvdyAtIDEsIGNvbDogcHJldkxpbmVMZW4gfSk7XG4gICAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNCYWNrc3BhY2UgJiYgZm9jdXMuY29sID09PSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10ubGVuZ3RoICYmIGZvY3VzLnJvdyA8IHRoaXMubGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIC8vIERlbGV0ZSBhdCBlbmQgb2YgbGluZTogbWVyZ2UgbmV4dCBsaW5lIGludG8gY3VycmVudFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgICAgICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50TGluZUxlbiA9IHRoaXMubGluZXNbZm9jdXMucm93XS5sZW5ndGg7XG4gICAgICAgICAgdGhpcy5saW5lc1tmb2N1cy5yb3ddID0gdGhpcy5saW5lc1tmb2N1cy5yb3ddICsgdGhpcy5saW5lc1tmb2N1cy5yb3cgKyAxXTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3ddID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNwbGljZUxpbmVzKGZvY3VzLnJvdyArIDEsIDEpO1xuICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHsgcm93OiBmb2N1cy5yb3csIGNvbDogY3VycmVudExpbmVMZW4gfSk7XG4gICAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBGb3Igd2l0aGluLWxpbmUgZGVsZXRlcyBvciBub24tY29sbGFwc2VkIHNlbGVjdGlvbnMsIGxldCB0aGUgYnJvd3NlciBoYW5kbGUgaXRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBiZWZvcmVJbnB1dEV2ZW50LmlucHV0VHlwZSAhPT0gXCJpbnNlcnRQYXJhZ3JhcGhcIiAmJlxuICAgICAgYmVmb3JlSW5wdXRFdmVudC5pbnB1dFR5cGUgIT09IFwiaW5zZXJ0TGluZUJyZWFrXCJcbiAgICApIHJldHVybjtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG5cbiAgICBjb25zdCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG5cbiAgICBpZiAoIWZvY3VzIHx8ICFhbmNob3IpIHJldHVybjtcbiAgICBcbiAgICAvLyBJZiBmb2N1cyBhbmQgYW5jaG9yIGFyZSBpbiBkaWZmZXJlbnQgbGluZXMsIHNpbXBseSByZW1vdmUgZXZlcnl0aGluZyBcbiAgICAvLyBhZnRlciB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb25cbiAgICAvLyBhbmQgcmVtb3ZlIGFueSBsaW5lcyBpbiBiZXR3ZWVuXG4gICAgaWYgKGZvY3VzLnJvdyAhPT0gYW5jaG9yLnJvdykge1xuICAgICAgY29uc3QgYmVnaW5uaW5nID0gZm9jdXMucm93IDwgYW5jaG9yLnJvdyA/IGZvY3VzIDogYW5jaG9yO1xuICAgICAgY29uc3QgZW5kID0gZm9jdXMucm93IDwgYW5jaG9yLnJvdyA/IGFuY2hvciA6IGZvY3VzO1xuICAgICAgdGhpcy5saW5lc1tiZWdpbm5pbmcucm93XSA9IHRoaXMubGluZXNbYmVnaW5uaW5nLnJvd10uc3Vic3RyaW5nKDAsIGJlZ2lubmluZy5jb2wpO1xuICAgICAgdGhpcy5saW5lc1tlbmQucm93XSA9IHRoaXMubGluZXNbZW5kLnJvd10uc3Vic3RyaW5nKGVuZC5jb2wpO1xuICAgICAgdGhpcy5zcGxpY2VMaW5lcyhiZWdpbm5pbmcucm93ICsgMSwgZW5kLnJvdyAtIGJlZ2lubmluZy5yb3cgLSAxKTtcbiAgICAgIGZvY3VzLnJvdyA9IGJlZ2lubmluZy5yb3cgKyAxO1xuICAgICAgZm9jdXMuY29sID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNvbnRpbnVhYmxlVHlwZTogc3RyaW5nIHwgZmFsc2UgPSBmYWxzZTtcbiAgICAgIHN3aXRjaCAodGhpcy5saW5lVHlwZXNbZm9jdXMucm93XSkge1xuICAgICAgICBjYXNlIFwiVE1VTFwiOlxuICAgICAgICAgIGNvbnRpbnVhYmxlVHlwZSA9IFwiVE1VTFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVE1PTFwiOlxuICAgICAgICAgIGNvbnRpbnVhYmxlVHlwZSA9IFwiVE1PTFwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVE1JbmRlbnRlZENvZGVcIjpcbiAgICAgICAgICBjb250aW51YWJsZVR5cGUgPSBcIlRNSW5kZW50ZWRDb2RlXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gXG4gICAgICBjb25zdCBsaW5lQmVmb3JlQnJlYWsgPSB0aGlzLmxpbmVzW2ZvY3VzLnJvd10uc3Vic3RyaW5nKDAsIGZvY3VzLmNvbCA8PSBhbmNob3IuY29sID8gZm9jdXMuY29sIDogYW5jaG9yLmNvbCk7XG4gICAgICBjb25zdCBsaW5lQWZ0ZXJCcmVhayA9IHRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHJpbmcoZm9jdXMuY29sIDw9IGFuY2hvci5jb2wgPyBhbmNob3IuY29sIDogZm9jdXMuY29sKTtcbiAgICAgIHRoaXMuc3BsaWNlTGluZXMoZm9jdXMucm93LCAxLCBbbGluZUJlZm9yZUJyZWFrLCBsaW5lQWZ0ZXJCcmVha10pO1xuXG4gICAgICBmb2N1cy5yb3cgKz0gMTtcbiAgICAgIGZvY3VzLmNvbCA9IDA7XG5cbiAgICAgIGlmIChjb250aW51YWJsZVR5cGUpIHtcbiAgICAgICAgbGV0IGNhcHR1cmUgPSBsaW5lR3JhbW1hcltjb250aW51YWJsZVR5cGVdLnJlZ2V4cC5leGVjKHRoaXMubGluZXNbZm9jdXMucm93IC0gMV0pO1xuICAgICAgICBpZiAoY2FwdHVyZSkge1xuICAgICAgICAgIGlmIChjYXB0dXJlWzJdKSB7XG4gICAgICAgICAgICBpZiAoY29udGludWFibGVUeXBlID09PSBcIlRNT0xcIikge1xuICAgICAgICAgICAgICBjYXB0dXJlWzFdID0gY2FwdHVyZVsxXS5yZXBsYWNlKGVkaXRvclJlZ0V4cC5vcmRlcmVkTGlzdE51bWJlciwgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAocGFyc2VJbnQocmVzdWx0KSArIDEpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5lc1tmb2N1cy5yb3ddID0gYCR7Y2FwdHVyZVsxXX0ke3RoaXMubGluZXNbZm9jdXMucm93XX1gO1xuICAgICAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMucm93XSA9IHRydWU7XG4gICAgICAgICAgICBmb2N1cy5jb2wgPSBjYXB0dXJlWzFdLmxlbmd0aDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5saW5lc1tmb2N1cy5yb3cgLSAxXSA9IFwiXCI7XG4gICAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cy5yb3cgLSAxXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzKTtcblxuICAgIC8vIFNjcm9sbCB0aGUgZWxlbWVudCBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24gaW50byB2aWV3XG4gICAgaWYgKGZvY3VzICYmIGZvY3VzLnJvdyA8IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgKHRoaXMubGluZUVsZW1lbnRzW2ZvY3VzLnJvd10gYXMgSFRNTEVsZW1lbnQpLnNjcm9sbEludG9WaWV3KHtcbiAgICAgICAgYmxvY2s6ICduZWFyZXN0JyxcbiAgICAgICAgaW5saW5lOiAnbmVhcmVzdCdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJbnB1dEV2ZW50KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0RXZlbnQgPSBldmVudCBhcyBJbnB1dEV2ZW50O1xuICAgIGlmIChpbnB1dEV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRDb21wb3NpdGlvblRleHRcIikgcmV0dXJuO1xuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcblxuICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICBpZiAoKGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydFBhcmFncmFwaFwiIHx8IGlucHV0RXZlbnQuaW5wdXRUeXBlID09PSBcImluc2VydExpbmVCcmVha1wiKSAmJiBmb2N1cykge1xuICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIHNpbmNlIHRoZXNlIGFyZSBoYW5kbGVkIGJ5IHRoZSBiZWZvcmVpbnB1dCBoYW5kbGVyXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy5lIS5maXJzdENoaWxkKSB7XG4gICAgICAgIHRoaXMuZSEuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJUTUJsYW5rTGluZVwiPjxicj48L2Rpdj4nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maXhOb2RlSGllcmFyY2h5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUxpbmVDb250ZW50c0FuZEZvcm1hdHRpbmcoKTtcbiAgICB9XG4gICAgaWYgKGZvY3VzKSB7XG4gICAgICB0aGlzLnNldFNlbGVjdGlvbihmb2N1cyk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNlbGVjdGlvbkNoYW5nZUV2ZW50KF9lOiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZmlyZVNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGxldCB0ZXh0ID0gKGV2ZW50IGFzIGFueSkuY2xpcGJvYXJkRGF0YS5nZXREYXRhKFwidGV4dC9wbGFpblwiKTtcbiAgICB0aGlzLnBhc3RlKHRleHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZmlyZURyb3AoZXZlbnQuZGF0YVRyYW5zZmVyISk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBhIHRhc2sgbGlzdCBjaGVja2JveCB3aGVuIGl0cyByZW5kZXJlZCBib3ggaXMgY2xpY2tlZC4gT25seSB0aGUgc2luZ2xlIGlubmVyIGNoYXJhY3RlclxuICAgKiBvZiB0aGUgbWFya2VyIChgWyBdYCAtPiBgW3hdYCBhbmQgYmFjaykgaXMgY2hhbmdlZDsgdGhlIGVkaXQgaXMgbGVuZ3RoLXByZXNlcnZpbmcsIHJlY29yZGVkIGluXG4gICAqIHRoZSB1bmRvIGhpc3RvcnksIGFuZCBmaXJlcyBhIGBjaGFuZ2VgIGV2ZW50LCBtaXJyb3Jpbmcgc2V0Q29tbWFuZFN0YXRlJ3MgbGluZS1lZGl0IGZsb3cuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBjb25zdCBib3ggPSB0YXJnZXQgJiYgdGFyZ2V0LmNsb3Nlc3QgPyAodGFyZ2V0LmNsb3Nlc3QoXCIuVE1DaGVja2JveFwiKSBhcyBIVE1MRWxlbWVudCB8IG51bGwpIDogbnVsbDtcbiAgICBpZiAoIWJveCkgcmV0dXJuOyAvLyBOb3QgYSBjaGVja2JveCBjbGljayDigJQgbGV0IHRoZSBkZWZhdWx0IGNhcmV0IHBsYWNlbWVudCBoYXBwZW4uXG5cbiAgICAvLyBXYWxrIHVwIHRvIHRoZSBsaW5lIGVsZW1lbnQgKGEgZGlyZWN0IGNoaWxkIG9mIHRoZSBlZGl0b3IpIHRvIGZpbmQgaXRzIHNvdXJjZSByb3cuXG4gICAgbGV0IGxpbmVFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gYm94O1xuICAgIHdoaWxlIChsaW5lRWwgJiYgbGluZUVsLnBhcmVudE5vZGUgIT09IHRoaXMuZSkge1xuICAgICAgbGluZUVsID0gbGluZUVsLnBhcmVudE5vZGUgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIH1cbiAgICBpZiAoIWxpbmVFbCB8fCBsaW5lRWwuZGF0YXNldC5saW5lTnVtID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICBjb25zdCByb3cgPSBwYXJzZUludChsaW5lRWwuZGF0YXNldC5saW5lTnVtLCAxMCk7XG4gICAgaWYgKGlzTmFOKHJvdykgfHwgcm93IDwgMCB8fCByb3cgPj0gdGhpcy5saW5lcy5sZW5ndGgpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbCA9IHRoaXMuY29tcHV0ZUNvbHVtbihib3gsIDApO1xuICAgIGlmIChjb2wgPT09IG51bGwpIHJldHVybjtcbiAgICBjb25zdCBjaCA9IHRoaXMubGluZXNbcm93XS5jaGFyQXQoY29sKTtcbiAgICBpZiAoY2ggIT09IFwiIFwiICYmIGNoICE9PSBcInhcIiAmJiBjaCAhPT0gXCJYXCIpIHJldHVybjsgLy8gRGVmZW5zaXZlOiBub3QgYWN0dWFsbHkgYSBjaGVja2JveCBjaGFyLlxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGlmICghdGhpcy5pc1Jlc3RvcmluZ0hpc3RvcnkpIHRoaXMucHVzaEhpc3RvcnkoKTtcbiAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgY29uc3QgcmVwbGFjZW1lbnQgPSBjaCA9PT0gXCIgXCIgPyBcInhcIiA6IFwiIFwiO1xuICAgIHRoaXMubGluZXNbcm93XSA9IHRoaXMubGluZXNbcm93XS5zdWJzdHIoMCwgY29sKSArIHJlcGxhY2VtZW50ICsgdGhpcy5saW5lc1tyb3ddLnN1YnN0cihjb2wgKyAxKTtcbiAgICB0aGlzLmxpbmVEaXJ0eVtyb3ddID0gdHJ1ZTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzSW5saW5lU3R5bGVzKG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBwcm9jZXNzZWQgPSBcIlwiO1xuICAgIGxldCBzdGFjazogQXJyYXk8e2RlbGltaXRlcjogc3RyaW5nLCBkZWxpbVN0cmluZzogc3RyaW5nLCBjb3VudDogbnVtYmVyLCBvdXRwdXQ6IHN0cmluZ30+ID0gW107XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgbGV0IHN0cmluZyA9IG9yaWdpbmFsU3RyaW5nO1xuXG4gICAgb3V0ZXI6IHdoaWxlIChzdHJpbmcpIHtcbiAgICAgIC8vIFNvZnQgbGluZSBicmVhazogd2hlbiBhIHBhcmFncmFwaCB0aGF0IHNwYW5zIHNldmVyYWwgc291cmNlIGxpbmVzIGlzIHBhcnNlZCBhcyBvbmVcbiAgICAgIC8vIGpvaW5lZCBzdHJpbmcsIHRoZSBsaW5lcyBhcmUgc2VwYXJhdGVkIGJ5IFxcbi4gUHJlc2VydmUgaXQgYXMgYSBuZXdsaW5lIG1hcmtlciBpbiB0aGVcbiAgICAgIC8vIG91dHB1dDsgc3BsaXRJbmxpbmVIVE1MQnlMaW5lKCkgbGF0ZXIgc3BsaXRzIHRoZSByZXN1bHQgYmFjayBpbnRvIHBlci1saW5lIGZyYWdtZW50cy5cbiAgICAgIC8vIE5vIGlubGluZSBydWxlIHN0YXJ0cyBvbiBhIG5ld2xpbmUgKE5vdFRyaWdnZXJDaGFyIGFuZCBgLmAgYm90aCBleGNsdWRlIGl0KSwgc28gaGFuZGxpbmdcbiAgICAgIC8vIGl0IGhlcmUga2VlcHMgdGhlIHRva2VuaXplciBmcm9tIHN0YWxsaW5nLlxuICAgICAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSAxMCkge1xuICAgICAgICBwcm9jZXNzZWQgKz0gXCJcXG5cIjtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cigxKTtcbiAgICAgICAgb2Zmc2V0ICs9IDE7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzIHNpbXBsZSBydWxlcyAobm9uLWRlbGltaXRlcilcbiAgICAgIGZvciAobGV0IHJ1bGUgb2YgW1wiZXNjYXBlXCIsIFwiY29kZVwiLCBcImF1dG9saW5rXCIsIFwiaHRtbFwiXSkge1xuICAgICAgICBpZiAodGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdKSB7XG4gICAgICAgICAgbGV0IGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hcltydWxlXS5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHIoY2FwWzBdLmxlbmd0aCk7XG4gICAgICAgICAgICBvZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVwbGFjZW1lbnQucmVwbGFjZShlZGl0b3JSZWdFeHAuaW5saW5lUmVwbGFjZW1lbnRQbGFjZWhvbGRlciwgKHN0ciwgcDEpID0+IGh0bWxlc2NhcGUoY2FwW3AxXSkpO1xuICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFByb2Nlc3MgY3VzdG9tIGlubGluZSBncmFtbWFyIHJ1bGVzXG4gICAgICBmb3IgKGxldCBydWxlIGluIHRoaXMuY3VzdG9tSW5saW5lR3JhbW1hcikge1xuICAgICAgICBpZiAocnVsZSAhPT0gXCJlc2NhcGVcIiAmJiBydWxlICE9PSBcImNvZGVcIiAmJiBydWxlICE9PSBcImF1dG9saW5rXCIgJiYgcnVsZSAhPT0gXCJodG1sXCIgJiYgcnVsZSAhPT0gXCJsaW5rT3BlblwiICYmIHJ1bGUgIT09IFwiaW1hZ2VPcGVuXCIgJiYgcnVsZSAhPT0gXCJsaW5rTGFiZWxcIiAmJiBydWxlICE9PSBcImRlZmF1bHRcIikge1xuICAgICAgICAgIGxldCBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgICBwcm9jZXNzZWQgKz0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyW3J1bGVdLnJlcGxhY2VtZW50LnJlcGxhY2UoZWRpdG9yUmVnRXhwLmlubGluZVJlcGxhY2VtZW50UGxhY2Vob2xkZXIsIChzdHIsIHAxKSA9PiBodG1sZXNjYXBlKGNhcFtwMV0pKTtcbiAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgR0ZNIGV4dGVuZGVkIChub24tZGVsaW1pdGVkKSBhdXRvbGlua3M6IGJhcmUgVVJMcyAod3d3LuKApiwgaHR0cChzKTovL+KApiwgZnRwOi8v4oCmKSxcbiAgICAgIC8vIGVtYWlsIGFkZHJlc3NlcywgYW5kIG1haWx0bzoveG1wcDogbGlua3MuIFRoZXNlIGFyZSBvbmx5IHJlY29nbml6ZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZVxuICAgICAgLy8gc3RyaW5nIG9yIGltbWVkaWF0ZWx5IGFmdGVyIHdoaXRlc3BhY2Ugb3Igb25lIG9mIHRoZSBkZWxpbWl0ZXJzIGAqYCwgYF9gLCBgfmAsIGAoYC5cbiAgICAgIGNvbnN0IHByZWNlZGluZ0NoYXIgPSBvZmZzZXQgPiAwID8gb3JpZ2luYWxTdHJpbmdbb2Zmc2V0IC0gMV0gOiBcIlwiO1xuICAgICAgaWYgKHByZWNlZGluZ0NoYXIgPT09IFwiXCIgfHwgZWRpdG9yUmVnRXhwLmF1dG9saW5rUHJlY2VkaW5nQ2hhci50ZXN0KHByZWNlZGluZ0NoYXIpKSB7XG4gICAgICAgIGxldCBhdXRvbGluayA9IHRoaXMucGFyc2VBdXRvbGlua0V4dGVuc2lvbihzdHJpbmcpO1xuICAgICAgICBpZiAoYXV0b2xpbmspIHtcbiAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtwcm9jZXNzZWR9JHthdXRvbGluay5vdXRwdXR9YDtcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGF1dG9saW5rLmNoYXJDb3VudCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IGF1dG9saW5rLmNoYXJDb3VudDtcbiAgICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgbGlua3MgLyBpbWFnZXNcbiAgICAgIGxldCBwb3RlbnRpYWxMaW5rID0gc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rT3Blbi5yZWdleHApO1xuICAgICAgbGV0IHBvdGVudGlhbEltYWdlID0gc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5pbWFnZU9wZW4ucmVnZXhwKTtcbiAgICAgIGlmIChwb3RlbnRpYWxJbWFnZSB8fCBwb3RlbnRpYWxMaW5rKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnBhcnNlTGlua09ySW1hZ2Uoc3RyaW5nLCAhIXBvdGVudGlhbEltYWdlKTtcbiAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke3Jlc3VsdC5vdXRwdXR9YDtcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKHJlc3VsdC5jaGFyQ291bnQpO1xuICAgICAgICAgIG9mZnNldCArPSByZXN1bHQuY2hhckNvdW50O1xuICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBlbSAvIHN0cm9uZyBkZWxpbWl0ZXJzXG4gICAgICBsZXQgY2FwID0gZWRpdG9yUmVnRXhwLmVtcGhhc2lzRGVsaW1pdGVyLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGRlbGltQ291bnQgPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCBkZWxpbVN0cmluZyA9IGNhcFswXTtcbiAgICAgICAgY29uc3QgY3VycmVudERlbGltaXRlciA9IGNhcFswXVswXTtcblxuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuXG4gICAgICAgIGNvbnN0IHByZWNlZGluZyA9IG9mZnNldCA+IDAgPyBvcmlnaW5hbFN0cmluZy5zdWJzdHIoMCwgb2Zmc2V0KSA6IFwiIFwiO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmcgPSBvZmZzZXQgKyBjYXBbMF0ubGVuZ3RoIDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoID8gc3RyaW5nIDogXCIgXCI7XG5cbiAgICAgICAgY29uc3QgcHVuY3R1YXRpb25Gb2xsb3dzID0gZm9sbG93aW5nLm1hdGNoKHB1bmN0dWF0aW9uTGVhZGluZyk7XG4gICAgICAgIGNvbnN0IHB1bmN0dWF0aW9uUHJlY2VkZXMgPSBwcmVjZWRpbmcubWF0Y2gocHVuY3R1YXRpb25UcmFpbGluZyk7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VGb2xsb3dzID0gZm9sbG93aW5nLm1hdGNoKGVkaXRvclJlZ0V4cC5sZWFkaW5nV2hpdGVzcGFjZSk7XG4gICAgICAgIGNvbnN0IHdoaXRlc3BhY2VQcmVjZWRlcyA9IHByZWNlZGluZy5tYXRjaChlZGl0b3JSZWdFeHAudHJhaWxpbmdXaGl0ZXNwYWNlKTtcblxuICAgICAgICBsZXQgY2FuT3BlbiA9ICF3aGl0ZXNwYWNlRm9sbG93cyAmJiAoIXB1bmN0dWF0aW9uRm9sbG93cyB8fCAhIXdoaXRlc3BhY2VQcmVjZWRlcyB8fCAhIXB1bmN0dWF0aW9uUHJlY2VkZXMpO1xuICAgICAgICBsZXQgY2FuQ2xvc2UgPSAhd2hpdGVzcGFjZVByZWNlZGVzICYmICghcHVuY3R1YXRpb25QcmVjZWRlcyB8fCAhIXdoaXRlc3BhY2VGb2xsb3dzIHx8ICEhcHVuY3R1YXRpb25Gb2xsb3dzKTtcblxuICAgICAgICBpZiAoY3VycmVudERlbGltaXRlciA9PT0gXCJfXCIgJiYgY2FuT3BlbiAmJiBjYW5DbG9zZSkge1xuICAgICAgICAgIGNhbk9wZW4gPSAhIXB1bmN0dWF0aW9uUHJlY2VkZXM7XG4gICAgICAgICAgY2FuQ2xvc2UgPSAhIXB1bmN0dWF0aW9uRm9sbG93cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYW5DbG9zZSkge1xuICAgICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChkZWxpbUNvdW50ICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgICBpZiAoc3RhY2tbc3RhY2tQb2ludGVyXS5kZWxpbWl0ZXIgPT09IGN1cnJlbnREZWxpbWl0ZXIpIHtcbiAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQgPSBgJHtlbnRyeS5vdXRwdXR9JHtlbnRyeS5kZWxpbVN0cmluZy5zdWJzdHIoMCwgZW50cnkuY291bnQpfSR7cHJvY2Vzc2VkfWA7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZGVsaW1Db3VudCA+PSAyICYmIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgPj0gMikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn0ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPjxzdHJvbmcgY2xhc3M9XCJUTVN0cm9uZ1wiPiR7cHJvY2Vzc2VkfTwvc3Ryb25nPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+JHtjdXJyZW50RGVsaW1pdGVyfSR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+YDtcbiAgICAgICAgICAgICAgICBkZWxpbUNvdW50IC09IDI7XG4gICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tQb2ludGVyXS5jb3VudCAtPSAyO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFya1wiPiR7Y3VycmVudERlbGltaXRlcn08L3NwYW4+PGVtIGNsYXNzPVwiVE1FbVwiPiR7cHJvY2Vzc2VkfTwvZW0+PHNwYW4gY2xhc3M9XCJUTU1hcmtcIj4ke2N1cnJlbnREZWxpbWl0ZXJ9PC9zcGFuPmA7XG4gICAgICAgICAgICAgICAgZGVsaW1Db3VudCAtPSAxO1xuICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrUG9pbnRlcl0uY291bnQgLT0gMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdGFja1tzdGFja1BvaW50ZXJdLmNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgICAgIHN0YWNrUG9pbnRlci0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCAmJiBjYW5PcGVuKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IGN1cnJlbnREZWxpbWl0ZXIsXG4gICAgICAgICAgICBkZWxpbVN0cmluZzogZGVsaW1TdHJpbmcsXG4gICAgICAgICAgICBjb3VudDogZGVsaW1Db3VudCxcbiAgICAgICAgICAgIG91dHB1dDogcHJvY2Vzc2VkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByb2Nlc3NlZCA9IFwiXCI7XG4gICAgICAgICAgZGVsaW1Db3VudCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVsaW1Db3VudCkge1xuICAgICAgICAgIHByb2Nlc3NlZCA9IGAke3Byb2Nlc3NlZH0ke2RlbGltU3RyaW5nLnN1YnN0cigwLCBkZWxpbUNvdW50KX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3Igc3RyaWtldGhyb3VnaCBkZWxpbWl0ZXJcbiAgICAgIGNhcCA9IGVkaXRvclJlZ0V4cC5zdHJpa2V0aHJvdWdoRGVsaW1pdGVyLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgbGV0IGNvbnN1bWVkID0gZmFsc2U7XG4gICAgICAgIGxldCBzdGFja1BvaW50ZXIgPSBzdGFjay5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIWNvbnN1bWVkICYmIHN0YWNrUG9pbnRlciA+PSAwKSB7XG4gICAgICAgICAgaWYgKHN0YWNrW3N0YWNrUG9pbnRlcl0uZGVsaW1pdGVyID09PSBcIn5cIikge1xuICAgICAgICAgICAgd2hpbGUgKHN0YWNrUG9pbnRlciA8IHN0YWNrLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBzdGFjay5wb3AoKSE7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke2VudHJ5LmRlbGltU3RyaW5nLnN1YnN0cigwLCBlbnRyeS5jb3VudCl9JHtwcm9jZXNzZWR9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvY2Vzc2VkID0gYDxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+PGRlbCBjbGFzcz1cIlRNU3RyaWtldGhyb3VnaFwiPiR7cHJvY2Vzc2VkfTwvZGVsPjxzcGFuIGNsYXNzPVwiVE1NYXJrXCI+fn48L3NwYW4+YDtcbiAgICAgICAgICAgIGxldCBlbnRyeSA9IHN0YWNrLnBvcCgpITtcbiAgICAgICAgICAgIHByb2Nlc3NlZCA9IGAke2VudHJ5Lm91dHB1dH0ke3Byb2Nlc3NlZH1gO1xuICAgICAgICAgICAgY29uc3VtZWQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFja1BvaW50ZXItLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNvbnN1bWVkKSB7XG4gICAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgICBkZWxpbWl0ZXI6IFwiflwiLFxuICAgICAgICAgICAgZGVsaW1TdHJpbmc6IFwifn5cIixcbiAgICAgICAgICAgIGNvdW50OiAyLFxuICAgICAgICAgICAgb3V0cHV0OiBwcm9jZXNzZWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJvY2Vzc2VkID0gXCJcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCArPSBjYXBbMF0ubGVuZ3RoO1xuICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyKGNhcFswXS5sZW5ndGgpO1xuICAgICAgICBjb250aW51ZSBvdXRlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyAnZGVmYXVsdCcgcnVsZVxuICAgICAgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmRlZmF1bHQucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgIGlmIChjYXApIHtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cihjYXBbMF0ubGVuZ3RoKTtcbiAgICAgICAgb2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIHByb2Nlc3NlZCArPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXIuZGVmYXVsdC5yZXBsYWNlbWVudC5yZXBsYWNlKGVkaXRvclJlZ0V4cC5pbmxpbmVSZXBsYWNlbWVudFBsYWNlaG9sZGVyLCAoc3RyLCBwMSkgPT4gaHRtbGVzY2FwZShjYXBbcDFdKSk7XG4gICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgfVxuICAgICAgdGhyb3cgXCJJbmZpbml0ZSBsb29wIVwiO1xuICAgIH1cblxuICAgIHdoaWxlIChzdGFjay5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gc3RhY2sucG9wKCkhO1xuICAgICAgcHJvY2Vzc2VkID0gYCR7ZW50cnkub3V0cHV0fSR7ZW50cnkuZGVsaW1TdHJpbmcuc3Vic3RyKDAsIGVudHJ5LmNvdW50KX0ke3Byb2Nlc3NlZH1gO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWQ7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVDb2x1bW4oc3RhcnROb2RlOiBOb2RlLCBvZmZzZXQ6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICAgIGxldCBub2RlID0gc3RhcnROb2RlO1xuICAgIGxldCBjb2w6IG51bWJlcjtcbiAgICB3aGlsZSAobm9kZSAmJiBub2RlLnBhcmVudE5vZGUgIT09IHRoaXMuZSkge1xuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XG4gICAgfVxuICAgIGlmIChub2RlID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIGlmIChzdGFydE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFIHx8IG9mZnNldCA9PT0gMCkge1xuICAgICAgY29sID0gb2Zmc2V0O1xuICAgICAgbm9kZSA9IHN0YXJ0Tm9kZTtcbiAgICB9IGVsc2UgaWYgKG9mZnNldCA+IDApIHtcbiAgICAgIG5vZGUgPSBzdGFydE5vZGUuY2hpbGROb2Rlc1tvZmZzZXQgLSAxXTtcbiAgICAgIGNvbCA9IG5vZGUudGV4dENvbnRlbnQhLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29sID0gMDtcbiAgICAgIG5vZGUgPSBzdGFydE5vZGU7XG4gICAgfVxuICAgIHdoaWxlIChub2RlLnBhcmVudE5vZGUgIT09IHRoaXMuZSkge1xuICAgICAgaWYgKG5vZGUucHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgICAgICAgY29sICs9IG5vZGUudGV4dENvbnRlbnQhLmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUgYXMgdW5rbm93biBhcyBDaGlsZE5vZGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2w7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVOb2RlQW5kT2Zmc2V0KHJvdzogbnVtYmVyLCBjb2w6IG51bWJlciwgYmluZFJpZ2h0OiBib29sZWFuID0gZmFsc2UpOiB7bm9kZTogTm9kZSwgb2Zmc2V0OiBudW1iZXJ9IHtcbiAgICBpZiAocm93ID49IHRoaXMubGluZUVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcm93ID0gdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgIGNvbCA9IHRoaXMubGluZXNbcm93XS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChjb2wgPiB0aGlzLmxpbmVzW3Jvd10ubGVuZ3RoKSB7XG4gICAgICBjb2wgPSB0aGlzLmxpbmVzW3Jvd10ubGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5saW5lRWxlbWVudHNbcm93XSBhcyBIVE1MRWxlbWVudDtcbiAgICBsZXQgbm9kZSA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDtcblxuICAgIGxldCBjaGlsZHJlbkNvbXBsZXRlID0gZmFsc2U7XG4gICAgbGV0IHJ2ID0ge1xuICAgICAgbm9kZTogcGFyZW50Tm9kZS5maXJzdENoaWxkID8gcGFyZW50Tm9kZS5maXJzdENoaWxkIDogcGFyZW50Tm9kZSxcbiAgICAgIG9mZnNldDogMCxcbiAgICB9O1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IHBhcmVudE5vZGUpIHtcbiAgICAgIGlmICghY2hpbGRyZW5Db21wbGV0ZSAmJiBub2RlIS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgaWYgKG5vZGUhLm5vZGVWYWx1ZSEubGVuZ3RoID49IGNvbCkge1xuICAgICAgICAgIGlmIChiaW5kUmlnaHQgJiYgbm9kZSEubm9kZVZhbHVlIS5sZW5ndGggPT09IGNvbCkge1xuICAgICAgICAgICAgcnYgPSB7IG5vZGU6IG5vZGUhLCBvZmZzZXQ6IGNvbCB9O1xuICAgICAgICAgICAgY29sID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHsgbm9kZTogbm9kZSEsIG9mZnNldDogY29sIH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbCAtPSBub2RlIS5ub2RlVmFsdWUhLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFjaGlsZHJlbkNvbXBsZXRlICYmIG5vZGUhLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUhLmZpcnN0Q2hpbGQ7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUhLm5leHRTaWJsaW5nKSB7XG4gICAgICAgIGNoaWxkcmVuQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgbm9kZSA9IG5vZGUhLm5leHRTaWJsaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGRyZW5Db21wbGV0ZSA9IHRydWU7XG4gICAgICAgIG5vZGUgPSBub2RlIS5wYXJlbnROb2RlIGFzIHVua25vd24gYXMgQ2hpbGROb2RlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBydjtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlTGluZUNvbnRlbnRzQW5kRm9ybWF0dGluZygpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyRGlydHlGbGFnKCk7XG4gICAgdGhpcy51cGRhdGVMaW5lQ29udGVudHMoKTtcbiAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJEaXJ0eUZsYWcoKTogdm9pZCB7XG4gICAgdGhpcy5saW5lRGlydHkgPSBuZXcgQXJyYXkodGhpcy5saW5lcy5sZW5ndGgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5saW5lRGlydHkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMubGluZURpcnR5W2ldID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVMaW5lQ29udGVudHMoKTogdm9pZCB7XG4gICAgbGV0IGxpbmVEZWx0YSA9IHRoaXMuZSEuY2hpbGRFbGVtZW50Q291bnQgLSB0aGlzLmxpbmVzLmxlbmd0aDtcbiAgICBpZiAobGluZURlbHRhKSB7XG4gICAgICBsZXQgZmlyc3RDaGFuZ2VkTGluZSA9IDA7XG4gICAgICB3aGlsZSAoXG4gICAgICAgIGZpcnN0Q2hhbmdlZExpbmUgPD0gdGhpcy5saW5lcy5sZW5ndGggJiZcbiAgICAgICAgZmlyc3RDaGFuZ2VkTGluZSA8PSB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgdGhpcy5saW5lRWxlbWVudHNbZmlyc3RDaGFuZ2VkTGluZV0gJiZcbiAgICAgICAgdGhpcy5saW5lc1tmaXJzdENoYW5nZWRMaW5lXSA9PT0gKHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS50ZXh0Q29udGVudCAmJlxuICAgICAgICB0aGlzLmxpbmVUeXBlc1tmaXJzdENoYW5nZWRMaW5lXSA9PT0gKHRoaXMubGluZUVsZW1lbnRzW2ZpcnN0Q2hhbmdlZExpbmVdIGFzIEhUTUxFbGVtZW50KS5jbGFzc05hbWVcbiAgICAgICkge1xuICAgICAgICBmaXJzdENoYW5nZWRMaW5lKys7XG4gICAgICB9XG5cbiAgICAgIGxldCBsYXN0Q2hhbmdlZExpbmUgPSAtMTtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgLWxhc3RDaGFuZ2VkTGluZSA8IHRoaXMubGluZXMubGVuZ3RoICYmXG4gICAgICAgIC1sYXN0Q2hhbmdlZExpbmUgPCB0aGlzLmxpbmVFbGVtZW50cy5sZW5ndGggJiZcbiAgICAgICAgdGhpcy5saW5lc1t0aGlzLmxpbmVzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gPT09XG4gICAgICAgICAgKHRoaXMubGluZUVsZW1lbnRzW3RoaXMubGluZUVsZW1lbnRzLmxlbmd0aCArIGxhc3RDaGFuZ2VkTGluZV0gYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50ICYmXG4gICAgICAgIHRoaXMubGluZVR5cGVzW3RoaXMubGluZXMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSA9PT1cbiAgICAgICAgICAodGhpcy5saW5lRWxlbWVudHNbdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoICsgbGFzdENoYW5nZWRMaW5lXSBhcyBIVE1MRWxlbWVudCkuY2xhc3NOYW1lXG4gICAgICApIHtcbiAgICAgICAgbGFzdENoYW5nZWRMaW5lLS07XG4gICAgICB9XG5cbiAgICAgIGxldCBsaW5lc1RvRGVsZXRlID0gdGhpcy5saW5lcy5sZW5ndGggKyBsYXN0Q2hhbmdlZExpbmUgKyAxIC0gZmlyc3RDaGFuZ2VkTGluZTtcbiAgICAgIGlmIChsaW5lc1RvRGVsZXRlIDwgLWxpbmVEZWx0YSkgbGluZXNUb0RlbGV0ZSA9IC1saW5lRGVsdGE7XG4gICAgICBpZiAobGluZXNUb0RlbGV0ZSA8IDApIGxpbmVzVG9EZWxldGUgPSAwO1xuXG4gICAgICBsZXQgbGluZXNUb0FkZCA9IFtdO1xuICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBsaW5lc1RvRGVsZXRlICsgbGluZURlbHRhOyBsKyspIHtcbiAgICAgICAgbGluZXNUb0FkZC5wdXNoKCh0aGlzLmxpbmVFbGVtZW50c1tmaXJzdENoYW5nZWRMaW5lICsgbF0gYXMgSFRNTEVsZW1lbnQpLnRleHRDb250ZW50IHx8IFwiXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcGxpY2VMaW5lcyhmaXJzdENoYW5nZWRMaW5lLCBsaW5lc1RvRGVsZXRlLCBsaW5lc1RvQWRkLCBmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGxpbmUgPSAwOyBsaW5lIDwgdGhpcy5saW5lRWxlbWVudHMubGVuZ3RoOyBsaW5lKyspIHtcbiAgICAgICAgbGV0IGUgPSB0aGlzLmxpbmVFbGVtZW50c1tsaW5lXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgbGV0IGN0ID0gZS50ZXh0Q29udGVudCB8fCBcIlwiO1xuICAgICAgICBpZiAodGhpcy5saW5lc1tsaW5lXSAhPT0gY3QgfHwgdGhpcy5saW5lVHlwZXNbbGluZV0gIT09IGUuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IGN0O1xuICAgICAgICAgIHRoaXMubGluZVR5cGVzW2xpbmVdID0gZS5jbGFzc05hbWU7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzcGxpY2VMaW5lcyhcbiAgICBzdGFydExpbmU6IG51bWJlcixcbiAgICBsaW5lc1RvRGVsZXRlOiBudW1iZXIgPSAwLFxuICAgIGxpbmVzVG9JbnNlcnQ6IHN0cmluZ1tdID0gW10sXG4gICAgYWRqdXN0TGluZUVsZW1lbnRzOiBib29sZWFuID0gdHJ1ZVxuICApOiB2b2lkIHtcbiAgICBpZiAoYWRqdXN0TGluZUVsZW1lbnRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzVG9EZWxldGU7IGkrKykge1xuICAgICAgICB0aGlzLmUhLnJlbW92ZUNoaWxkKHRoaXMuZSEuY2hpbGROb2Rlc1tzdGFydExpbmVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgaW5zZXJ0ZWRCbGFuayA9IFtdO1xuICAgIGxldCBpbnNlcnRlZERpcnR5ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzVG9JbnNlcnQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGluc2VydGVkQmxhbmsucHVzaChcIlwiKTtcbiAgICAgIGluc2VydGVkRGlydHkucHVzaCh0cnVlKTtcbiAgICAgIGlmIChhZGp1c3RMaW5lRWxlbWVudHMpIHtcbiAgICAgICAgaWYgKHRoaXMuZSEuY2hpbGROb2Rlc1tzdGFydExpbmVdKVxuICAgICAgICAgIHRoaXMuZSEuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHRoaXMuZSEuY2hpbGROb2Rlc1tzdGFydExpbmVdKTtcbiAgICAgICAgZWxzZSB0aGlzLmUhLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGluZXMuc3BsaWNlKHN0YXJ0TGluZSwgbGluZXNUb0RlbGV0ZSwgLi4ubGluZXNUb0luc2VydCk7XG4gICAgdGhpcy5saW5lVHlwZXMuc3BsaWNlKHN0YXJ0TGluZSwgbGluZXNUb0RlbGV0ZSwgLi4uaW5zZXJ0ZWRCbGFuayk7XG4gICAgdGhpcy5saW5lRGlydHkuc3BsaWNlKHN0YXJ0TGluZSwgbGluZXNUb0RlbGV0ZSwgLi4uaW5zZXJ0ZWREaXJ0eSk7XG4gIH1cblxuICBwcml2YXRlIGZpeE5vZGVIaWVyYXJjaHkoKTogdm9pZCB7XG4gICAgY29uc3Qgb3JpZ2luYWxDaGlsZHJlbiA9IEFycmF5LmZyb20odGhpcy5lIS5jaGlsZE5vZGVzKTtcblxuICAgIGNvbnN0IHJlcGxhY2VDaGlsZCA9IChjaGlsZDogTm9kZSwgLi4ubmV3Q2hpbGRyZW46IE5vZGVbXSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gY2hpbGQucGFyZW50RWxlbWVudCE7XG4gICAgICBjb25zdCBuZXh0U2libGluZyA9IGNoaWxkLm5leHRTaWJsaW5nO1xuICAgICAgcGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICAgIG5ld0NoaWxkcmVuLmZvckVhY2goKG5ld0NoaWxkKSA9PlxuICAgICAgICBuZXh0U2libGluZyA/IHBhcmVudC5pbnNlcnRCZWZvcmUobmV3Q2hpbGQsIG5leHRTaWJsaW5nKSA6IHBhcmVudC5hcHBlbmRDaGlsZChuZXdDaGlsZClcbiAgICAgICk7XG4gICAgfTtcblxuICAgIG9yaWdpbmFsQ2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUgfHwgKGNoaWxkIGFzIEhUTUxFbGVtZW50KS50YWdOYW1lICE9PSBcIkRJVlwiKSB7XG4gICAgICAgIGNvbnN0IGRpdldyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICByZXBsYWNlQ2hpbGQoY2hpbGQsIGRpdldyYXBwZXIpO1xuICAgICAgICBkaXZXcmFwcGVyLmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2hpbGQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJyXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGdyYW5kQ2hpbGRyZW4gPSBBcnJheS5mcm9tKGNoaWxkLmNoaWxkTm9kZXMpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZ3JhbmRDaGlsZHJlbi5zb21lKFxuICAgICAgICAgICAgKGdyYW5kQ2hpbGQpID0+XG4gICAgICAgICAgICAgIGdyYW5kQ2hpbGQubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIChncmFuZENoaWxkIGFzIEhUTUxFbGVtZW50KS50YWdOYW1lID09PSBcIkRJVlwiXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZUNoaWxkKGNoaWxkLCAuLi5ncmFuZENoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIHBhcnNlIGEgR0ZNIGV4dGVuZGVkIChub24tZGVsaW1pdGVkKSBhdXRvbGluayBhdCB0aGUgc3RhcnQgb2YgYHN0cmluZ2A6IGEgYmFyZSBVUkxcbiAgICogKGB3d3cu4oCmYCwgYGh0dHA6Ly/igKZgLCBgaHR0cHM6Ly/igKZgLCBgZnRwOi8v4oCmYCksIGFuIGVtYWlsIGFkZHJlc3MsIG9yIGEgYG1haWx0bzpgL2B4bXBwOmAgbGluay5cbiAgICogVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHByZWNlZGluZy1jaGFyYWN0ZXIgYm91bmRhcnkgY2hlY2suIE9uIHN1Y2Nlc3MsIHJldHVybnMgdGhlXG4gICAqIHJlbmRlcmVkIEhUTUwgKHRoZSBtYXRjaGVkIHRleHQgd3JhcHBlZCBpbiBhIGBUTUF1dG9saW5rYCBzcGFuLCBleGFjdGx5IGxpa2UgdGhlIGNvbnRlbnQgb2YgYW5cbiAgICogYW5nbGUtYnJhY2tldGVkIGF1dG9saW5rKSBhbmQgdGhlIG51bWJlciBvZiBzb3VyY2UgY2hhcmFjdGVycyBjb25zdW1lZDsgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gICAqL1xuICBwdWJsaWMgcGFyc2VBdXRvbGlua0V4dGVuc2lvbihzdHJpbmc6IHN0cmluZyk6IHtvdXRwdXQ6IHN0cmluZywgY2hhckNvdW50OiBudW1iZXJ9IHwgZmFsc2Uge1xuICAgIGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaEV4dGVuZGVkQXV0b2xpbmsoc3RyaW5nKTtcbiAgICBpZiAoIW1hdGNoKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIG91dHB1dDogYDxzcGFuIGNsYXNzPVwiVE1BdXRvbGlua1wiPiR7aHRtbGVzY2FwZShtYXRjaCl9PC9zcGFuPmAsXG4gICAgICBjaGFyQ291bnQ6IG1hdGNoLmxlbmd0aCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGxvbmdlc3QgZXh0ZW5kZWQtYXV0b2xpbmsgc3Vic3RyaW5nIGF0IHRoZSBzdGFydCBvZiBgc3RyaW5nYCwgb3IgYGZhbHNlYC4gKi9cbiAgcHJpdmF0ZSBtYXRjaEV4dGVuZGVkQXV0b2xpbmsoc3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcgfCBmYWxzZSB7XG4gICAgLy8gLS0tIEJhcmUgVVJMIC8gd3d3IGF1dG9saW5rIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gd3d3LiBpcyB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIGRvbWFpbjsgYW4gZXhwbGljaXQgc2NoZW1lIGlzIHN0cmlwcGVkIGJlZm9yZSB0aGUgZG9tYWluLlxuICAgIGNvbnN0IHNjaGVtZUNhcCA9IGVkaXRvclJlZ0V4cC5hdXRvbGlua1NjaGVtZS5leGVjKHN0cmluZyk7XG4gICAgY29uc3QgaXNXd3cgPSBlZGl0b3JSZWdFeHAuYXV0b2xpbmtXd3cudGVzdChzdHJpbmcpO1xuICAgIGlmIChzY2hlbWVDYXAgfHwgaXNXd3cpIHtcbiAgICAgIGNvbnN0IHByZWZpeExlbiA9IHNjaGVtZUNhcCA/IHNjaGVtZUNhcFswXS5sZW5ndGggOiAwO1xuICAgICAgY29uc3QgYWZ0ZXJQcmVmaXggPSBzdHJpbmcuc3Vic3RyKHByZWZpeExlbik7XG4gICAgICAvLyBBIHZhbGlkIGRvbWFpbiBpcyBkb3Qtc2VwYXJhdGVkIHNlZ21lbnRzIG9mIGFscGhhbnVtZXJpY3MsIGBfYCBhbmQgYC1gLCB3aXRoIGF0IGxlYXN0IG9uZVxuICAgICAgLy8gZG90IGFuZCBubyB1bmRlcnNjb3JlIGluIHRoZSBsYXN0IHR3byBzZWdtZW50cy5cbiAgICAgIGNvbnN0IGRvbWFpbkNhcCA9IGVkaXRvclJlZ0V4cC5hdXRvbGlua0RvbWFpbi5leGVjKGFmdGVyUHJlZml4KTtcbiAgICAgIGlmIChkb21haW5DYXAgJiYgdGhpcy5pc1ZhbGlkQXV0b2xpbmtEb21haW4oZG9tYWluQ2FwWzBdKSkge1xuICAgICAgICAvLyBBZnRlciB0aGUgZG9tYWluLCBhbnkgcnVuIG9mIG5vbi1zcGFjZSwgbm9uLWA8YCBjaGFyYWN0ZXJzIGZvcm1zIHRoZSBwYXRoL3F1ZXJ5L2ZyYWdtZW50LlxuICAgICAgICBjb25zdCBwYXRoQ2FwID0gZWRpdG9yUmVnRXhwLmF1dG9saW5rUGF0aC5leGVjKGFmdGVyUHJlZml4LnN1YnN0cihkb21haW5DYXBbMF0ubGVuZ3RoKSk7XG4gICAgICAgIGNvbnN0IGxpbmsgPSBzdHJpbmcuc3Vic3RyKDAsIHByZWZpeExlbiArIGRvbWFpbkNhcFswXS5sZW5ndGggKyAocGF0aENhcCA/IHBhdGhDYXBbMF0ubGVuZ3RoIDogMCkpO1xuICAgICAgICBjb25zdCB0cmltbWVkID0gdGhpcy50cmltQXV0b2xpbmtUcmFpbGluZyhsaW5rKTtcbiAgICAgICAgLy8gR3VhcmQgYWdhaW5zdCB0cmFpbGluZyBwdW5jdHVhdGlvbiB0cmltbWluZyBoYXZpbmcgZWF0ZW4gaW50byB0aGUgZG9tYWluLlxuICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGggPj0gcHJlZml4TGVuICsgZG9tYWluQ2FwWzBdLmxlbmd0aCkgcmV0dXJuIHRyaW1tZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gLS0tIG1haWx0bzogLyB4bXBwOiBhdXRvbGluayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgcHJvdG9DYXAgPSBlZGl0b3JSZWdFeHAuYXV0b2xpbmtQcm90b2NvbC5leGVjKHN0cmluZyk7XG4gICAgaWYgKHByb3RvQ2FwKSB7XG4gICAgICBjb25zdCBlbWFpbENhcCA9IHRoaXMubWF0Y2hBdXRvbGlua0VtYWlsKHN0cmluZy5zdWJzdHIocHJvdG9DYXBbMF0ubGVuZ3RoKSk7XG4gICAgICBpZiAoZW1haWxDYXApIHtcbiAgICAgICAgLy8geG1wcCBhZGRyZXNzZXMgbWF5IGNhcnJ5IGEgYC9yZXNvdXJjZWAgc3VmZml4LlxuICAgICAgICBsZXQgZXh0cmEgPSBcIlwiO1xuICAgICAgICBpZiAoZWRpdG9yUmVnRXhwLmF1dG9saW5rWG1wcC50ZXN0KHN0cmluZykpIHtcbiAgICAgICAgICBjb25zdCByZXNDYXAgPSBlZGl0b3JSZWdFeHAuYXV0b2xpbmtYbXBwUmVzb3VyY2UuZXhlYyhcbiAgICAgICAgICAgIHN0cmluZy5zdWJzdHIocHJvdG9DYXBbMF0ubGVuZ3RoICsgZW1haWxDYXAubGVuZ3RoKVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHJlc0NhcCkgZXh0cmEgPSByZXNDYXBbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3RvQ2FwWzBdICsgZW1haWxDYXAgKyBleHRyYTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAtLS0gQmFyZSBlbWFpbCBhdXRvbGluayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBlbWFpbCA9IHRoaXMubWF0Y2hBdXRvbGlua0VtYWlsKHN0cmluZyk7XG4gICAgaWYgKGVtYWlsKSByZXR1cm4gZW1haWw7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogR0ZNIGRvbWFpbiB2YWxpZGl0eTogYXQgbGVhc3Qgb25lIGRvdCBhbmQgbm8gdW5kZXJzY29yZSBpbiB0aGUgbGFzdCB0d28gc2VnbWVudHMuICovXG4gIHByaXZhdGUgaXNWYWxpZEF1dG9saW5rRG9tYWluKGRvbWFpbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBkb21haW4uc3BsaXQoXCIuXCIpO1xuICAgIGlmIChzZWdtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICFzZWdtZW50cy5zbGljZSgtMikuc29tZSgoc2VnKSA9PiBzZWcuaW5kZXhPZihcIl9cIikgPj0gMCk7XG4gIH1cblxuICAvKiogTWF0Y2hlcyBhIGJhcmUgZW1haWwgYWRkcmVzcyBhdCB0aGUgc3RhcnQgb2YgYHN0cmluZ2AgcGVyIHRoZSBHRk0gZXh0ZW5zaW9uLCBvciBgZmFsc2VgLiAqL1xuICBwcml2YXRlIG1hdGNoQXV0b2xpbmtFbWFpbChzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB8IGZhbHNlIHtcbiAgICAvLyBMb2NhbCBwYXJ0OiBhbHBoYW51bWVyaWNzIHBsdXMgYC5gLCBgLWAsIGBfYCwgYCtgLiBEb21haW46IGRvdC1zZXBhcmF0ZWQgbGFiZWxzIG9mXG4gICAgLy8gYWxwaGFudW1lcmljcywgYC1gIGFuZCBgX2AsIHdpdGggYXQgbGVhc3Qgb25lIGRvdCBhbmQgbm8gYC1gL2BfYCBhcyB0aGUgZmluYWwgY2hhcmFjdGVyLlxuICAgIGNvbnN0IGNhcCA9IGVkaXRvclJlZ0V4cC5hdXRvbGlua0VtYWlsLmV4ZWMoc3RyaW5nKTtcbiAgICBpZiAoIWNhcCkgcmV0dXJuIGZhbHNlO1xuICAgIGxldCBlbWFpbCA9IGNhcFswXTtcbiAgICB3aGlsZSAoZW1haWwubGVuZ3RoICYmIGVkaXRvclJlZ0V4cC5lbWFpbFRyYWlsaW5nQ2hhci50ZXN0KGVtYWlsKSkgZW1haWwgPSBlbWFpbC5zdWJzdHIoMCwgZW1haWwubGVuZ3RoIC0gMSk7XG4gICAgLy8gTXVzdCBzdGlsbCBlbmQgaW4gYSBjb21wbGV0ZSBUTEQgKGkuZS4gcmV0YWluIGEgZG90IGFmdGVyIHRoZSB0cmltbWluZykuXG4gICAgaWYgKCFlZGl0b3JSZWdFeHAuZW1haWxUbGQudGVzdChlbWFpbCkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZW1haWw7XG4gIH1cblxuICAvKipcbiAgICogU3RyaXBzIHRyYWlsaW5nIGNoYXJhY3RlcnMgdGhhdCBHRk0gZXhjbHVkZXMgZnJvbSBhbiBhdXRvbGluazogdGhlIHB1bmN0dWF0aW9uIGA/IS4sOipffmAsIGFuZFxuICAgKiBhbnkgdW5iYWxhbmNlZCB0cmFpbGluZyBgKWAgKG1vcmUgY2xvc2luZyB0aGFuIG9wZW5pbmcgcGFyZW50aGVzZXMgaW4gdGhlIGxpbmspLlxuICAgKi9cbiAgcHJpdmF0ZSB0cmltQXV0b2xpbmtUcmFpbGluZyhsaW5rOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBlbmQgPSBsaW5rLmxlbmd0aDtcbiAgICBsZXQgY2hhbmdlZCA9IHRydWU7XG4gICAgd2hpbGUgKGNoYW5nZWQgJiYgZW5kID4gMCkge1xuICAgICAgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgYyA9IGxpbmtbZW5kIC0gMV07XG4gICAgICBpZiAoXCI/IS4sOipfflwiLmluZGV4T2YoYykgPj0gMCkge1xuICAgICAgICBlbmQtLTtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGMgPT09IFwiKVwiKSB7XG4gICAgICAgIGxldCBvcGVuID0gMDtcbiAgICAgICAgbGV0IGNsb3NlID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbmQ7IGkrKykge1xuICAgICAgICAgIGlmIChsaW5rW2ldID09PSBcIihcIikgb3BlbisrO1xuICAgICAgICAgIGVsc2UgaWYgKGxpbmtbaV0gPT09IFwiKVwiKSBjbG9zZSsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjbG9zZSA+IG9wZW4pIHtcbiAgICAgICAgICBlbmQtLTtcbiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbGluay5zdWJzdHIoMCwgZW5kKTtcbiAgfVxuXG4gIHB1YmxpYyBwYXJzZUxpbmtPckltYWdlKG9yaWdpbmFsU3RyaW5nOiBzdHJpbmcsIGlzSW1hZ2U6IGJvb2xlYW4pOiB7b3V0cHV0OiBzdHJpbmcsIGNoYXJDb3VudDogbnVtYmVyfSB8IGZhbHNlIHtcbiAgICAvLyBTa2lwIHRoZSBvcGVuaW5nIGJyYWNrZXRcbiAgICBsZXQgdGV4dE9mZnNldCA9IGlzSW1hZ2UgPyAyIDogMTtcbiAgICBsZXQgb3BlbmVyID0gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKDAsIHRleHRPZmZzZXQpO1xuICAgIGxldCB0eXBlID0gaXNJbWFnZSA/IFwiVE1JbWFnZVwiIDogXCJUTUxpbmtcIjtcbiAgICBsZXQgY3VycmVudE9mZnNldCA9IHRleHRPZmZzZXQ7XG5cbiAgICBsZXQgYnJhY2tldExldmVsID0gMTtcbiAgICBsZXQgbGlua1RleHQ6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IGxpbmtSZWY6IHN0cmluZyB8IGZhbHNlID0gZmFsc2U7XG4gICAgbGV0IGxpbmtMYWJlbDogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgbGlua0RldGFpbHM6IHN0cmluZ1tdID0gW107XG5cbiAgICB0ZXh0T3V0ZXI6IHdoaWxlIChcbiAgICAgIGN1cnJlbnRPZmZzZXQgPCBvcmlnaW5hbFN0cmluZy5sZW5ndGggJiZcbiAgICAgIGxpbmtUZXh0ID09PSBmYWxzZVxuICAgICkge1xuICAgICAgbGV0IHN0cmluZyA9IG9yaWdpbmFsU3RyaW5nLnN1YnN0cihjdXJyZW50T2Zmc2V0KTtcblxuICAgICAgLy8gQ2FwdHVyZSBhbnkgZXNjYXBlcyBhbmQgY29kZSBibG9ja3MgYXQgY3VycmVudCBwb3NpdGlvblxuICAgICAgZm9yIChsZXQgcnVsZSBvZiBbXCJlc2NhcGVcIiwgXCJjb2RlXCIsIFwiYXV0b2xpbmtcIiwgXCJodG1sXCJdKSB7XG4gICAgICAgIGxldCBjYXAgPSB0aGlzLm1lcmdlZElubGluZUdyYW1tYXJbcnVsZV0ucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGltYWdlXG4gICAgICBpZiAoc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5pbWFnZU9wZW4ucmVnZXhwKSkge1xuICAgICAgICBicmFja2V0TGV2ZWwrKztcbiAgICAgICAgY3VycmVudE9mZnNldCArPSAyO1xuICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGZvciBsaW5rXG4gICAgICBpZiAoc3RyaW5nLm1hdGNoKHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rT3Blbi5yZWdleHApKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbCsrO1xuICAgICAgICBpZiAoIWlzSW1hZ2UpIHtcbiAgICAgICAgICBpZiAodGhpcy5wYXJzZUxpbmtPckltYWdlKHN0cmluZywgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gMTtcbiAgICAgICAgY29udGludWUgdGV4dE91dGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBmb3IgY2xvc2luZyBicmFja2V0XG4gICAgICBpZiAoc3RyaW5nLm1hdGNoKGVkaXRvclJlZ0V4cC5saW5rQ2xvc2luZ0JyYWNrZXQpKSB7XG4gICAgICAgIGJyYWNrZXRMZXZlbC0tO1xuICAgICAgICBpZiAoYnJhY2tldExldmVsID09PSAwKSB7XG4gICAgICAgICAgbGlua1RleHQgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIodGV4dE9mZnNldCwgY3VycmVudE9mZnNldCAtIHRleHRPZmZzZXQpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSB0ZXh0T3V0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm90aGluZyBtYXRjaGVzLCBwcm9jZWVkIHRvIG5leHQgY2hhclxuICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgIH1cblxuICAgIC8vIERpZCB3ZSBmaW5kIGEgbGluayB0ZXh0P1xuICAgIGlmIChsaW5rVGV4dCA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIHdoYXQgdHlwZSBvZiBsaW5rIHRoaXMgaXNcbiAgICBsZXQgbmV4dENoYXIgPSBjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoID8gb3JpZ2luYWxTdHJpbmcuc3Vic3RyKGN1cnJlbnRPZmZzZXQsIDEpIDogXCJcIjtcblxuICAgIC8vIFJFRkVSRU5DRSBMSU5LU1xuICAgIGlmIChuZXh0Q2hhciA9PT0gXCJbXCIpIHtcbiAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG4gICAgICBsZXQgY2FwID0gdGhpcy5tZXJnZWRJbmxpbmVHcmFtbWFyLmxpbmtMYWJlbC5yZWdleHAuZXhlYyhzdHJpbmcpO1xuICAgICAgaWYgKGNhcCkge1xuICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgIGxpbmtMYWJlbC5wdXNoKGNhcFsxXSwgY2FwWzJdLCBjYXBbM10pO1xuICAgICAgICBpZiAoY2FwW3RoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5saW5rTGFiZWwubGFiZWxQbGFjZWhvbGRlciFdKSB7XG4gICAgICAgICAgbGlua1JlZiA9IGNhcFt0aGlzLm1lcmdlZElubGluZUdyYW1tYXIubGlua0xhYmVsLmxhYmVsUGxhY2Vob2xkZXIhXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsaW5rUmVmID0gbGlua1RleHQudHJpbSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0Q2hhciAhPT0gXCIoXCIpIHtcbiAgICAgIC8vIFNob3J0Y3V0IHJlZiBsaW5rXG4gICAgICBsaW5rUmVmID0gbGlua1RleHQudHJpbSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJTkxJTkUgTElOS1NcbiAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgIGxldCBwYXJlbnRoZXNpc0xldmVsID0gMTtcblxuICAgICAgaW5saW5lT3V0ZXI6IHdoaWxlIChjdXJyZW50T2Zmc2V0IDwgb3JpZ2luYWxTdHJpbmcubGVuZ3RoICYmIHBhcmVudGhlc2lzTGV2ZWwgPiAwKSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSBvcmlnaW5hbFN0cmluZy5zdWJzdHIoY3VycmVudE9mZnNldCk7XG5cbiAgICAgICAgLy8gUHJvY2VzcyB3aGl0ZXNwYWNlXG4gICAgICAgIGxldCBjYXAgPSBlZGl0b3JSZWdFeHAubGVhZGluZ1doaXRlc3BhY2VSdW4uZXhlYyhzdHJpbmcpO1xuICAgICAgICBpZiAoY2FwKSB7XG4gICAgICAgICAgc3dpdGNoIChsaW5rRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzBdLm1hdGNoKGVkaXRvclJlZ0V4cC5jb250YWluc09wZW5BbmdsZSkpIHtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzZdID0gbGlua0RldGFpbHNbNl0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIGJhY2tzbGFzaCBlc2NhcGVzXG4gICAgICAgIGNhcCA9IHRoaXMubWVyZ2VkSW5saW5lR3JhbW1hci5lc2NhcGUucmVnZXhwLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoY2FwWzBdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGN1cnJlbnRPZmZzZXQgKz0gY2FwWzBdLmxlbmd0aDtcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgb3BlbmluZyBhbmdsZSBicmFja2V0XG4gICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPCAyICYmIHN0cmluZy5tYXRjaChlZGl0b3JSZWdFeHAub3BlbmluZ0FuZ2xlKSkge1xuICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDApIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHNbMF0gPSBsaW5rRGV0YWlsc1swXS5jb25jYXQoXCI8XCIpO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgY2xvc2luZyBhbmdsZSBicmFja2V0XG4gICAgICAgIGlmICgobGlua0RldGFpbHMubGVuZ3RoID09PSAxIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMikgJiYgc3RyaW5nLm1hdGNoKGVkaXRvclJlZ0V4cC5jbG9zaW5nQW5nbGUpKSB7XG4gICAgICAgICAgaWYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSkgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiPlwiKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG5vbi1wYXJlbnRoZXNpcyBkZWxpbWl0ZXIgZm9yIHRpdGxlXG4gICAgICAgIGNhcCA9IGVkaXRvclJlZ0V4cC50aXRsZVF1b3RlLmV4ZWMoc3RyaW5nKTtcbiAgICAgICAgaWYgKGNhcCAmJiAobGlua0RldGFpbHMubGVuZ3RoID09PSAwIHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gMSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDQpKSB7XG4gICAgICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDQpIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgbGlua0RldGFpbHMucHVzaChjYXBbMF0pO1xuICAgICAgICAgIGN1cnJlbnRPZmZzZXQrKztcbiAgICAgICAgICBjb250aW51ZSBpbmxpbmVPdXRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYXAgJiYgKGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNSB8fCBsaW5rRGV0YWlscy5sZW5ndGggPT09IDYpICYmIGxpbmtEZXRhaWxzWzRdID09PSBjYXBbMF0pIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goY2FwWzBdKTtcbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIG9wZW5pbmcgcGFyZW50aGVzaXNcbiAgICAgICAgaWYgKHN0cmluZy5tYXRjaChlZGl0b3JSZWdFeHAub3BlbmluZ1BhcmVuKSkge1xuICAgICAgICAgIHN3aXRjaCAobGlua0RldGFpbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzFdID0gbGlua0RldGFpbHNbMV0uY29uY2F0KFwiKFwiKTtcbiAgICAgICAgICAgICAgaWYgKCFsaW5rRGV0YWlsc1swXS5tYXRjaChlZGl0b3JSZWdFeHAuZW5kc1dpdGhPcGVuQW5nbGUpKSBwYXJlbnRoZXNpc0xldmVsKys7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiKFwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlsc1s0XSA9PT0gXCIoXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbNV0gPSBsaW5rRGV0YWlsc1s1XS5jb25jYXQoXCIoXCIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY3VycmVudE9mZnNldCsrO1xuICAgICAgICAgIGNvbnRpbnVlIGlubGluZU91dGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJvY2VzcyBjbG9zaW5nIHBhcmVudGhlc2lzXG4gICAgICAgIGlmIChzdHJpbmcubWF0Y2goZWRpdG9yUmVnRXhwLmNsb3NpbmdQYXJlbikpIHtcbiAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoIDw9IDIpIHtcbiAgICAgICAgICAgIHdoaWxlIChsaW5rRGV0YWlscy5sZW5ndGggPCAyKSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgaWYgKCFsaW5rRGV0YWlsc1swXS5tYXRjaChlZGl0b3JSZWdFeHAuZW5kc1dpdGhPcGVuQW5nbGUpKSBwYXJlbnRoZXNpc0xldmVsLS07XG4gICAgICAgICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA+IDApIHtcbiAgICAgICAgICAgICAgbGlua0RldGFpbHNbMV0gPSBsaW5rRGV0YWlsc1sxXS5jb25jYXQoXCIpXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1IHx8IGxpbmtEZXRhaWxzLmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgaWYgKGxpbmtEZXRhaWxzWzRdID09PSBcIihcIikge1xuICAgICAgICAgICAgICBpZiAobGlua0RldGFpbHMubGVuZ3RoID09PSA1KSBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiKVwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPT09IDUpIGxpbmtEZXRhaWxzLnB1c2goXCIpXCIpO1xuICAgICAgICAgICAgICBlbHNlIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KFwiKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50aGVzaXNMZXZlbC0tO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwYXJlbnRoZXNpc0xldmVsID09PSAwKSB7XG4gICAgICAgICAgICB3aGlsZSAobGlua0RldGFpbHMubGVuZ3RoIDwgNykgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0Kys7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbnkgb2xkIGNoYXJhY3RlclxuICAgICAgICBjYXAgPSBlZGl0b3JSZWdFeHAuYW55Q2hhci5leGVjKHN0cmluZyk7XG4gICAgICAgIGlmIChjYXApIHtcbiAgICAgICAgICBzd2l0Y2ggKGxpbmtEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKFwiXCIpO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlscy5wdXNoKGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBsaW5rRGV0YWlsc1sxXSA9IGxpbmtEZXRhaWxzWzFdLmNvbmNhdChjYXBbMF0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzLnB1c2goXCJcIik7XG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGxpbmtEZXRhaWxzWzVdID0gbGlua0RldGFpbHNbNV0uY29uY2F0KGNhcFswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjdXJyZW50T2Zmc2V0ICs9IGNhcFswXS5sZW5ndGg7XG4gICAgICAgICAgY29udGludWUgaW5saW5lT3V0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgXCJJbmZpbml0ZSBsb29wXCI7XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50aGVzaXNMZXZlbCA+IDApIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobGlua1JlZiAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIFJlZmVyZW5jZSBsaW5rOyBjaGVjayB0aGF0IGxpbmtSZWYgaXMgdmFsaWRcbiAgICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuICAgICAgZm9yIChsZXQgbGFiZWwgb2YgdGhpcy5saW5rTGFiZWxzKSB7XG4gICAgICAgIGlmIChsYWJlbCA9PT0gbGlua1JlZikge1xuICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IGxhYmVsQ2xhc3MgPSB2YWxpZCA/IFwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfVmFsaWRcIiA6IFwiVE1MaW5rTGFiZWwgVE1MaW5rTGFiZWxfSW52YWxpZFwiO1xuICAgICAgbGV0IG91dHB1dCA9IGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7b3BlbmVyfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX0gJHtcbiAgICAgICAgbGlua0xhYmVsLmxlbmd0aCA8IDMgfHwgIWxpbmtMYWJlbFsxXSA/IGxhYmVsQ2xhc3MgOiBcIlwiXG4gICAgICB9XCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMobGlua1RleHQpfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPl08L3NwYW4+YDtcblxuICAgICAgaWYgKGxpbmtMYWJlbC5sZW5ndGggPj0gMykge1xuICAgICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7bGlua0xhYmVsWzBdfTwvc3Bhbj5gLFxuICAgICAgICAgIGA8c3BhbiBjbGFzcz1cIiR7bGFiZWxDbGFzc31cIj4ke2xpbmtMYWJlbFsxXX08L3NwYW4+YCxcbiAgICAgICAgICBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2xpbmtMYWJlbFsyXX08L3NwYW4+YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICAgIGNoYXJDb3VudDogY3VycmVudE9mZnNldCxcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChsaW5rRGV0YWlscy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBJbmxpbmUgbGlua1xuICAgICAgd2hpbGUgKGxpbmtEZXRhaWxzLmxlbmd0aCA8IDcpIHtcbiAgICAgICAgbGlua0RldGFpbHMucHVzaChcIlwiKTtcbiAgICAgIH1cblxuICAgICAgLy8gRXZlcnkgbGl0ZXJhbCBtYXJrIGZyYWdtZW50IGlzIEhUTUwtZXNjYXBlZDogbGlua0RldGFpbHNbMF0vWzJdIGhvbGQgdGhlIGFuZ2xlIGJyYWNrZXRzIG9mXG4gICAgICAvLyBhbiBgPC4uLj5gIGRlc3RpbmF0aW9uLCBzbyBsZWF2aW5nIHRoZW0gcmF3IHdvdWxkIGluamVjdCBhIHN0cmF5IGA8YC9gPmAgaW50byB0aGUgb3V0cHV0IOKAlFxuICAgICAgLy8gd2hpY2ggc3BsaXRJbmxpbmVIVE1MQnlMaW5lIHRoZW4gbWlzdGFrZXMgZm9yIGFuIEhUTUwgdGFnLlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb3V0cHV0OiBgPHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke29wZW5lcn08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9XCI+JHt0aGlzLnByb2Nlc3NJbmxpbmVTdHlsZXMoXG4gICAgICAgICAgbGlua1RleHRcbiAgICAgICAgKX08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj5dKCR7XG4gICAgICAgICAgaHRtbGVzY2FwZShsaW5rRGV0YWlsc1swXSlcbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIiR7dHlwZX1EZXN0aW5hdGlvblwiPiR7XG4gICAgICAgICAgaHRtbGVzY2FwZShsaW5rRGV0YWlsc1sxXSlcbiAgICAgICAgfTwvc3Bhbj48c3BhbiBjbGFzcz1cIlRNTWFyayBUTU1hcmtfJHt0eXBlfVwiPiR7aHRtbGVzY2FwZShsaW5rRGV0YWlsc1syXSl9JHtcbiAgICAgICAgICBodG1sZXNjYXBlKGxpbmtEZXRhaWxzWzNdKVxuICAgICAgICB9JHtodG1sZXNjYXBlKGxpbmtEZXRhaWxzWzRdKX08L3NwYW4+PHNwYW4gY2xhc3M9XCIke3R5cGV9VGl0bGVcIj4ke1xuICAgICAgICAgIGh0bWxlc2NhcGUobGlua0RldGFpbHNbNV0pXG4gICAgICAgIH08L3NwYW4+PHNwYW4gY2xhc3M9XCJUTU1hcmsgVE1NYXJrXyR7dHlwZX1cIj4ke2h0bWxlc2NhcGUobGlua0RldGFpbHNbNl0pfSk8L3NwYW4+YCxcbiAgICAgICAgY2hhckNvdW50OiBjdXJyZW50T2Zmc2V0LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVDb21tb25BbmNlc3Rvcihub2RlMTogTm9kZSB8IG51bGwsIG5vZGUyOiBOb2RlIHwgbnVsbCk6IE5vZGUgfCBudWxsIHtcbiAgICBpZiAoIW5vZGUxIHx8ICFub2RlMikgcmV0dXJuIG51bGw7XG4gICAgaWYgKG5vZGUxID09PSBub2RlMikgcmV0dXJuIG5vZGUxO1xuICAgIGNvbnN0IGFuY2VzdHJ5ID0gKG5vZGU6IE5vZGUpID0+IHtcbiAgICAgIGxldCBhbmNlc3RyeSA9IFtdO1xuICAgICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgYW5jZXN0cnkudW5zaGlmdChub2RlKTtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XG4gICAgICB9XG4gICAgICByZXR1cm4gYW5jZXN0cnk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFuY2VzdHJ5MSA9IGFuY2VzdHJ5KG5vZGUxKTtcbiAgICBjb25zdCBhbmNlc3RyeTIgPSBhbmNlc3RyeShub2RlMik7XG5cbiAgICBpZiAoYW5jZXN0cnkxWzBdICE9PSBhbmNlc3RyeTJbMF0pIHJldHVybiBudWxsO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGFuY2VzdHJ5MVtpXSA9PT0gYW5jZXN0cnkyW2ldOyBpKyspO1xuICAgIHJldHVybiBhbmNlc3RyeTFbaSAtIDFdO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1czogUG9zaXRpb24sIGFuY2hvcjogUG9zaXRpb24gfCBudWxsLCBjbGFzc05hbWU6IHN0cmluZyk6IE5vZGUgfCBudWxsIHtcbiAgICBsZXQgbm9kZSA9IG51bGw7XG4gICAgaWYgKCFmb2N1cykgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFhbmNob3IpIHtcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsIHx8ICFzZWwuZm9jdXNOb2RlKSByZXR1cm4gbnVsbDtcbiAgICAgIG5vZGUgPSBzZWwuZm9jdXNOb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZm9jdXMucm93ICE9PSBhbmNob3Iucm93KSByZXR1cm4gbnVsbDtcbiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIGlmICghc2VsKSByZXR1cm4gbnVsbDtcbiAgICAgIG5vZGUgPSB0aGlzLmNvbXB1dGVDb21tb25BbmNlc3RvcihzZWwuZm9jdXNOb2RlLCBzZWwuYW5jaG9yTm9kZSk7XG4gICAgfVxuICAgIGlmICghbm9kZSkgcmV0dXJuIG51bGw7XG4gICAgd2hpbGUgKG5vZGUgIT09IHRoaXMuZSkge1xuICAgICAgaWYgKChub2RlIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QgJiYgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpKSByZXR1cm4gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGUhO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21tYW5kU3RhdGUoZm9jdXM6IFBvc2l0aW9uIHwgbnVsbCA9IG51bGwsIGFuY2hvcjogUG9zaXRpb24gfCBudWxsID0gbnVsbCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsPiB7XG4gICAgbGV0IGNvbW1hbmRTdGF0ZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGw+ID0ge307XG4gICAgaWYgKCFmb2N1cykgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgIGlmICghZm9jdXMpIHtcbiAgICAgIGZvciAobGV0IGNtZCBpbiBjb21tYW5kcykge1xuICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29tbWFuZFN0YXRlO1xuICAgIH1cbiAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG5cbiAgICBsZXQgc3RhcnQ6IFBvc2l0aW9uLCBlbmQ6IFBvc2l0aW9uO1xuICAgIGlmIChhbmNob3Iucm93IDwgZm9jdXMucm93IHx8IChhbmNob3Iucm93ID09PSBmb2N1cy5yb3cgJiYgYW5jaG9yLmNvbCA8IGZvY3VzLmNvbCkpIHtcbiAgICAgIHN0YXJ0ID0gYW5jaG9yO1xuICAgICAgZW5kID0gZm9jdXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0ID0gZm9jdXM7XG4gICAgICBlbmQgPSBhbmNob3I7XG4gICAgfVxuICAgIGlmIChlbmQucm93ID4gc3RhcnQucm93ICYmIGVuZC5jb2wgPT09IDApIHtcbiAgICAgIGVuZC5yb3ctLTtcbiAgICAgIGVuZC5jb2wgPSB0aGlzLmxpbmVzW2VuZC5yb3ddLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBjbWQgaW4gY29tbWFuZHMpIHtcbiAgICAgIGlmIChjb21tYW5kc1tjbWRdLnR5cGUgPT09IFwiaW5saW5lXCIpIHtcbiAgICAgICAgaWYgKCFmb2N1cyB8fCBmb2N1cy5yb3cgIT09IGFuY2hvciEucm93IHx8ICF0aGlzLmlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQoKSkge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21tYW5kU3RhdGVbY21kXSA9XG4gICAgICAgICAgICAhIXRoaXMuY29tcHV0ZUVuY2xvc2luZ01hcmt1cE5vZGUoZm9jdXMsIGFuY2hvciwgY29tbWFuZHNbY21kXS5jbGFzc05hbWUpIHx8XG4gICAgICAgICAgICAoZm9jdXMuY29sID09PSBhbmNob3IhLmNvbCAmJlxuICAgICAgICAgICAgICAhIXRoaXMubGluZXNbZm9jdXMucm93XS5zdWJzdHIoMCwgZm9jdXMuY29sKS5tYXRjaChjb21tYW5kc1tjbWRdLnVuc2V0LnByZVBhdHRlcm4pICYmXG4gICAgICAgICAgICAgICEhdGhpcy5saW5lc1tmb2N1cy5yb3ddLnN1YnN0cihmb2N1cy5jb2wpLm1hdGNoKGNvbW1hbmRzW2NtZF0udW5zZXQucG9zdFBhdHRlcm4pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNvbW1hbmRzW2NtZF0udHlwZSA9PT0gXCJsaW5lXCIpIHtcbiAgICAgICAgaWYgKCFmb2N1cykge1xuICAgICAgICAgIGNvbW1hbmRTdGF0ZVtjbWRdID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgc3RhdGU6IGJvb2xlYW4gfCBudWxsID0gdGhpcy5saW5lVHlwZXNbc3RhcnQucm93XSA9PT0gY29tbWFuZHNbY21kXS5jbGFzc05hbWU7XG4gICAgICAgICAgZm9yIChsZXQgbGluZSA9IHN0YXJ0LnJvdzsgbGluZSA8PSBlbmQucm93OyBsaW5lKyspIHtcbiAgICAgICAgICAgIGlmICgodGhpcy5saW5lVHlwZXNbbGluZV0gPT09IGNvbW1hbmRzW2NtZF0uY2xhc3NOYW1lKSAhPT0gc3RhdGUpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29tbWFuZFN0YXRlW2NtZF0gPSBzdGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29tbWFuZFN0YXRlO1xuICB9XG5cbiAgcHVibGljIHNldENvbW1hbmRTdGF0ZShjb21tYW5kOiBzdHJpbmcsIHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVzdG9yaW5nSGlzdG9yeSkgdGhpcy5wdXNoSGlzdG9yeSgpO1xuICAgIGlmIChjb21tYW5kc1tjb21tYW5kXS50eXBlID09PSBcImlubGluZVwiKSB7XG4gICAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgICBpZiAoIWFuY2hvcikgYW5jaG9yID0gZm9jdXM7XG4gICAgICBpZiAoIWFuY2hvcikgcmV0dXJuO1xuICAgICAgaWYgKGFuY2hvci5yb3cgIT09IGZvY3VzIS5yb3cpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5pc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCkpIHJldHVybjtcbiAgICAgIGxldCBtYXJrdXBOb2RlID0gdGhpcy5jb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZShmb2N1cyEsIGFuY2hvciwgY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKTtcbiAgICAgIHRoaXMuY2xlYXJEaXJ0eUZsYWcoKTtcblxuICAgICAgaWYgKG1hcmt1cE5vZGUpIHtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbZm9jdXMhLnJvd10gPSB0cnVlO1xuICAgICAgICBjb25zdCBzdGFydENvbCA9IHRoaXMuY29tcHV0ZUNvbHVtbihtYXJrdXBOb2RlLCAwKSE7XG4gICAgICAgIGNvbnN0IGxlbiA9IG1hcmt1cE5vZGUudGV4dENvbnRlbnQhLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKDAsIHN0YXJ0Q29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4sIFwiXCIpO1xuICAgICAgICBjb25zdCBtaWQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cihzdGFydENvbCwgbGVuKTtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cihzdGFydENvbCArIGxlbilcbiAgICAgICAgICAucmVwbGFjZShjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybiwgXCJcIik7XG4gICAgICAgIHRoaXMubGluZXNbZm9jdXMhLnJvd10gPSBsZWZ0LmNvbmNhdChtaWQsIHJpZ2h0KTtcbiAgICAgICAgYW5jaG9yLmNvbCA9IGxlZnQubGVuZ3RoO1xuICAgICAgICBmb2N1cyEuY29sID0gYW5jaG9yLmNvbCArIGxlbjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXR0aW5nKCk7XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKGZvY3VzISwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBmb2N1cyEuY29sID09PSBhbmNob3IuY29sICYmXG4gICAgICAgICEhdGhpcy5saW5lc1tmb2N1cyEucm93XS5zdWJzdHIoMCwgZm9jdXMhLmNvbCkubWF0Y2goY29tbWFuZHNbY29tbWFuZF0udW5zZXQucHJlUGF0dGVybikgJiZcbiAgICAgICAgISF0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddLnN1YnN0cihmb2N1cyEuY29sKS5tYXRjaChjb21tYW5kc1tjb21tYW5kXS51bnNldC5wb3N0UGF0dGVybilcbiAgICAgICkge1xuICAgICAgICB0aGlzLmxpbmVEaXJ0eVtmb2N1cyEucm93XSA9IHRydWU7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddXG4gICAgICAgICAgLnN1YnN0cigwLCBmb2N1cyEuY29sKVxuICAgICAgICAgIC5yZXBsYWNlKGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnByZVBhdHRlcm4sIFwiXCIpO1xuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMubGluZXNbZm9jdXMhLnJvd11cbiAgICAgICAgICAuc3Vic3RyKGZvY3VzIS5jb2wpXG4gICAgICAgICAgLnJlcGxhY2UoY29tbWFuZHNbY29tbWFuZF0udW5zZXQucG9zdFBhdHRlcm4sIFwiXCIpO1xuICAgICAgICB0aGlzLmxpbmVzW2ZvY3VzIS5yb3ddID0gbGVmdC5jb25jYXQocmlnaHQpO1xuICAgICAgICBmb2N1cyEuY29sID0gYW5jaG9yLmNvbCA9IGxlZnQubGVuZ3RoO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oZm9jdXMhLCBhbmNob3IpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCB7IHN0YXJ0Q29sLCBlbmRDb2wgfSA9XG4gICAgICAgICAgZm9jdXMhLmNvbCA8IGFuY2hvci5jb2xcbiAgICAgICAgICAgID8geyBzdGFydENvbDogZm9jdXMhLmNvbCwgZW5kQ29sOiBhbmNob3IuY29sIH1cbiAgICAgICAgICAgIDogeyBzdGFydENvbDogYW5jaG9yLmNvbCwgZW5kQ29sOiBmb2N1cyEuY29sIH07XG5cbiAgICAgICAgbGV0IG1hdGNoID0gdGhpcy5saW5lc1tmb2N1cyEucm93XVxuICAgICAgICAgIC5zdWJzdHIoc3RhcnRDb2wsIGVuZENvbCAtIHN0YXJ0Q29sKVxuICAgICAgICAgIC5tYXRjaChlZGl0b3JSZWdFeHAuc3Vycm91bmRpbmdXaGl0ZXNwYWNlKTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgc3RhcnRDb2wgKz0gbWF0Y2guZ3JvdXBzIS5sZWFkaW5nLmxlbmd0aDtcbiAgICAgICAgICBlbmRDb2wgLT0gbWF0Y2guZ3JvdXBzIS50cmFpbGluZy5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICBmb2N1cyEuY29sID0gc3RhcnRDb2w7XG4gICAgICAgIGFuY2hvci5jb2wgPSBlbmRDb2w7XG5cbiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wcmUsIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wb3N0LCBmb2N1cywgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb21tYW5kc1tjb21tYW5kXS50eXBlID09PSBcImxpbmVcIikge1xuICAgICAgbGV0IGFuY2hvciA9IHRoaXMuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgbGV0IGZvY3VzID0gdGhpcy5nZXRTZWxlY3Rpb24oZmFsc2UpO1xuICAgICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgICAgaWYgKCFmb2N1cykgcmV0dXJuO1xuICAgICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuICAgICAgbGV0IHN0YXJ0ID0gYW5jaG9yIS5yb3cgPiBmb2N1cyEucm93ID8gZm9jdXMhIDogYW5jaG9yITtcbiAgICAgIGxldCBlbmQgPSBhbmNob3IhLnJvdyA+IGZvY3VzIS5yb3cgPyBhbmNob3IhIDogZm9jdXMhO1xuICAgICAgaWYgKGVuZC5yb3cgPiBzdGFydC5yb3cgJiYgZW5kLmNvbCA9PT0gMCkge1xuICAgICAgICBlbmQucm93LS07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGxpbmUgPSBzdGFydC5yb3c7IGxpbmUgPD0gZW5kLnJvdzsgbGluZSsrKSB7XG4gICAgICAgIGlmIChzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSAhPT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnNldC5wYXR0ZXJuLFxuICAgICAgICAgICAgY29tbWFuZHNbY29tbWFuZF0uc2V0LnJlcGxhY2VtZW50LnJlcGxhY2UoXCIkI1wiLCAobGluZSAtIHN0YXJ0LnJvdyArIDEpLnRvU3RyaW5nKCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmxpbmVEaXJ0eVtsaW5lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0ZSAmJiB0aGlzLmxpbmVUeXBlc1tsaW5lXSA9PT0gY29tbWFuZHNbY29tbWFuZF0uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgdGhpcy5saW5lc1tsaW5lXSA9IHRoaXMubGluZXNbbGluZV0ucmVwbGFjZShcbiAgICAgICAgICAgIGNvbW1hbmRzW2NvbW1hbmRdLnVuc2V0LnBhdHRlcm4sXG4gICAgICAgICAgICBjb21tYW5kc1tjb21tYW5kXS51bnNldC5yZXBsYWNlbWVudFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZUZvcm1hdHRpbmcoKTtcbiAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKFxuICAgICAgICB7IHJvdzogZW5kLnJvdywgY29sOiB0aGlzLmxpbmVzW2VuZC5yb3ddLmxlbmd0aCB9LFxuICAgICAgICB7IHJvdzogc3RhcnQucm93LCBjb2w6IDAgfVxuICAgICAgKTtcbiAgICAgIHRoaXMuZmlyZUNoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsaXN0LWl0ZW0gbWFya2VyIHByZWZpeCAoZS5nLiBgLSBgLCBgKiBgLCBgMS4gYCkgb2YgYGxpbmVgLCBvciBudWxsIGlmIHRoZSBsaW5lXG4gICAqIGlzbid0IGEgYnVsbGV0ZWQgb3Igb3JkZXJlZCBsaXN0IGl0ZW0uXG4gICAqL1xuICBwcml2YXRlIGxpc3RJdGVtTWFya2VyKGxpbmU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHVsID0gbGluZUdyYW1tYXIuVE1VTC5yZWdleHAuZXhlYyhsaW5lKTtcbiAgICBpZiAodWwpIHJldHVybiB1bFsxXTtcbiAgICBjb25zdCBvbCA9IGxpbmVHcmFtbWFyLlRNT0wucmVnZXhwLmV4ZWMobGluZSk7XG4gICAgaWYgKG9sKSByZXR1cm4gb2xbMV07XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogVHJ1ZSB3aGVuIGxpbmUgYHJvd2AgaXMgYSBsaXN0IGl0ZW0gd2hvc2UgY29udGVudCBiZWdpbnMgd2l0aCBhIHRhc2stbGlzdCBjaGVja2JveC4gKi9cbiAgcHVibGljIGlzVGFza0xpc3RJdGVtKHJvdzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKHJvdyA8IDAgfHwgcm93ID49IHRoaXMubGluZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgdHlwZSA9IHRoaXMubGluZVR5cGVzW3Jvd107XG4gICAgaWYgKHR5cGUgIT09IFwiVE1VTFwiICYmIHR5cGUgIT09IFwiVE1PTFwiKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgbWFya2VyID0gdGhpcy5saXN0SXRlbU1hcmtlcih0aGlzLmxpbmVzW3Jvd10pO1xuICAgIGlmIChtYXJrZXIgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZWRpdG9yUmVnRXhwLnRhc2tMaXN0SXRlbS50ZXN0KHRoaXMubGluZXNbcm93XS5zdWJzdHIobWFya2VyLmxlbmd0aCkpO1xuICB9XG5cbiAgLyoqIEFkZHMgYW4gdW5jaGVja2VkIGBbIF1gIGNoZWNrYm94IHRvIGEgbGluZSwgbWFraW5nIGl0IGEgYnVsbGV0ZWQgbGlzdCBpdGVtIGlmIGl0IHdhc24ndCBvbmUuICovXG4gIHByaXZhdGUgYWRkVGFza0NoZWNrYm94KGxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWFya2VyID0gdGhpcy5saXN0SXRlbU1hcmtlcihsaW5lKTtcbiAgICBpZiAobWFya2VyICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gbGluZS5zdWJzdHIobWFya2VyLmxlbmd0aCk7XG4gICAgICBpZiAoZWRpdG9yUmVnRXhwLnRhc2tMaXN0SXRlbS50ZXN0KGNvbnRlbnQpKSByZXR1cm4gbGluZTsgLy8gYWxyZWFkeSBhIHRhc2sgaXRlbVxuICAgICAgcmV0dXJuIGAke21hcmtlcn1bIF0gJHtjb250ZW50fWA7XG4gICAgfVxuICAgIC8vIE5vdCBhIGxpc3QgaXRlbSB5ZXQ6IHN0cmlwIGFueSBleGlzdGluZyBibG9jayBtYXJrZXIgYW5kIG1ha2UgaXQgYSBidWxsZXRlZCB0YXNrIGl0ZW0sXG4gICAgLy8gbWlycm9yaW5nIGhvdyB0aGUgYHVsYCBjb21tYW5kIG5vcm1hbGl6ZXMgYSBsaW5lLlxuICAgIHJldHVybiBsaW5lLnJlcGxhY2UoKGNvbW1hbmRzLnVsIGFzIExpbmVDb21tYW5kKS5zZXQucGF0dGVybiwgXCItIFsgXSAkMlwiKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmVzIGEgdGFzay1saXN0IGNoZWNrYm94IGZyb20gYSBsaW5lLCBsZWF2aW5nIHRoZSBzdXJyb3VuZGluZyBsaXN0IGl0ZW0gaW50YWN0LiAqL1xuICBwcml2YXRlIHJlbW92ZVRhc2tDaGVja2JveChsaW5lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hcmtlciA9IHRoaXMubGlzdEl0ZW1NYXJrZXIobGluZSk7XG4gICAgaWYgKG1hcmtlciA9PT0gbnVsbCkgcmV0dXJuIGxpbmU7XG4gICAgY29uc3QgdGFzayA9IGVkaXRvclJlZ0V4cC50YXNrTGlzdEl0ZW0uZXhlYyhsaW5lLnN1YnN0cihtYXJrZXIubGVuZ3RoKSk7XG4gICAgaWYgKCF0YXNrKSByZXR1cm4gbGluZTtcbiAgICByZXR1cm4gYCR7bWFya2VyfSR7dGFza1s1XX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgR0ZNIHRhc2stbGlzdCBjaGVja2JveGVzIG9uIHRoZSBzZWxlY3RlZCBsaW5lKHMpLiBJZiBldmVyeSBzZWxlY3RlZCBsaW5lIGlzIGFscmVhZHkgYVxuICAgKiB0YXNrIGl0ZW0sIHRoZWlyIGNoZWNrYm94ZXMgYXJlIHJlbW92ZWQgKGxlYXZpbmcgcGxhaW4gbGlzdCBpdGVtcyk7IG90aGVyd2lzZSBlYWNoIGxpbmUgZ2V0cyBhblxuICAgKiB1bmNoZWNrZWQgYFsgXWAgY2hlY2tib3ggKGJlY29taW5nIGEgYnVsbGV0ZWQgbGlzdCBpdGVtIGlmIGl0IHdhc24ndCBhIGxpc3QgaXRlbSB5ZXQpLiBNaXJyb3JzXG4gICAqIHNldENvbW1hbmRTdGF0ZSdzIGxpbmUtZWRpdCBmbG93OiBwdXNoZXMgdW5kbyBoaXN0b3J5LCByZWZvcm1hdHMsIGFuZCBmaXJlcyBhIGBjaGFuZ2VgIGV2ZW50LlxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVRhc2tMaXN0KCk6IHZvaWQge1xuICAgIGxldCBhbmNob3IgPSB0aGlzLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICBsZXQgZm9jdXMgPSB0aGlzLmdldFNlbGVjdGlvbihmYWxzZSk7XG4gICAgaWYgKCFhbmNob3IpIGFuY2hvciA9IGZvY3VzO1xuICAgIGlmICghZm9jdXMpIHJldHVybjtcblxuICAgIGxldCBzdGFydCA9IGFuY2hvciEucm93ID4gZm9jdXMhLnJvdyA/IGZvY3VzISA6IGFuY2hvciE7XG4gICAgbGV0IGVuZCA9IGFuY2hvciEucm93ID4gZm9jdXMhLnJvdyA/IGFuY2hvciEgOiBmb2N1cyE7XG4gICAgaWYgKGVuZC5yb3cgPiBzdGFydC5yb3cgJiYgZW5kLmNvbCA9PT0gMCkge1xuICAgICAgZW5kLnJvdy0tO1xuICAgIH1cblxuICAgIGxldCBhbGxUYXNrcyA9IHRydWU7XG4gICAgZm9yIChsZXQgbGluZSA9IHN0YXJ0LnJvdzsgbGluZSA8PSBlbmQucm93OyBsaW5lKyspIHtcbiAgICAgIGlmICghdGhpcy5pc1Rhc2tMaXN0SXRlbShsaW5lKSkge1xuICAgICAgICBhbGxUYXNrcyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNSZXN0b3JpbmdIaXN0b3J5KSB0aGlzLnB1c2hIaXN0b3J5KCk7XG4gICAgdGhpcy5jbGVhckRpcnR5RmxhZygpO1xuXG4gICAgZm9yIChsZXQgbGluZSA9IHN0YXJ0LnJvdzsgbGluZSA8PSBlbmQucm93OyBsaW5lKyspIHtcbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhbGxUYXNrc1xuICAgICAgICA/IHRoaXMucmVtb3ZlVGFza0NoZWNrYm94KHRoaXMubGluZXNbbGluZV0pXG4gICAgICAgIDogdGhpcy5hZGRUYXNrQ2hlY2tib3godGhpcy5saW5lc1tsaW5lXSk7XG4gICAgICBpZiAodXBkYXRlZCAhPT0gdGhpcy5saW5lc1tsaW5lXSkge1xuICAgICAgICB0aGlzLmxpbmVzW2xpbmVdID0gdXBkYXRlZDtcbiAgICAgICAgdGhpcy5saW5lRGlydHlbbGluZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlRm9ybWF0dGluZygpO1xuICAgIHRoaXMuc2V0U2VsZWN0aW9uKFxuICAgICAgeyByb3c6IGVuZC5yb3csIGNvbDogdGhpcy5saW5lc1tlbmQucm93XS5sZW5ndGggfSxcbiAgICAgIHsgcm93OiBzdGFydC5yb3csIGNvbDogMCB9XG4gICAgKTtcbiAgICB0aGlzLmZpcmVDaGFuZ2UoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0lubGluZUZvcm1hdHRpbmdBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCAhc2VsLmZvY3VzTm9kZSB8fCAhc2VsLmFuY2hvck5vZGUpIHJldHVybiBmYWxzZTtcblxuICAgIGlmIChcbiAgICAgIHNlbC5pc0NvbGxhcHNlZCAmJlxuICAgICAgc2VsLmZvY3VzTm9kZS5ub2RlVHlwZSA9PT0gMyAmJlxuICAgICAgc2VsLmZvY3VzT2Zmc2V0ID09PSBzZWwuZm9jdXNOb2RlLm5vZGVWYWx1ZSEubGVuZ3RoXG4gICAgKSB7XG4gICAgICBsZXQgbm9kZTtcbiAgICAgIGZvciAobm9kZSA9IHNlbC5mb2N1c05vZGU7IG5vZGUgJiYgbm9kZS5uZXh0U2libGluZyA9PT0gbnVsbDsgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSEpO1xuICAgICAgaWYgKFxuICAgICAgICBub2RlICYmXG4gICAgICAgIG5vZGUubmV4dFNpYmxpbmcgJiZcbiAgICAgICAgKG5vZGUubmV4dFNpYmxpbmcgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdCAmJlxuICAgICAgICAobm9kZS5uZXh0U2libGluZyBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKFwiVE1JbmxpbmVGb3JtYXR0ZWRcIilcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGFuY2VzdG9yID0gdGhpcy5jb21wdXRlQ29tbW9uQW5jZXN0b3Ioc2VsLmZvY3VzTm9kZSwgc2VsLmFuY2hvck5vZGUpO1xuICAgIGlmICghYW5jZXN0b3IpIHJldHVybiBmYWxzZTtcblxuICAgIHdoaWxlIChhbmNlc3RvciAmJiBhbmNlc3RvciAhPT0gdGhpcy5lKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhbmNlc3RvciBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0ICYmXG4gICAgICAgICgoYW5jZXN0b3IgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucyhcIlRNSW5saW5lRm9ybWF0dGVkXCIpIHx8XG4gICAgICAgICAgKGFuY2VzdG9yIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoXCJUTUJsYW5rTGluZVwiKSlcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUhO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVDb21tYW5kU3RhdGUoY29tbWFuZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHRoaXMubGFzdENvbW1hbmRTdGF0ZSA9IHRoaXMuZ2V0Q29tbWFuZFN0YXRlKCk7XG4gICAgdGhpcy5zZXRDb21tYW5kU3RhdGUoY29tbWFuZCwgIXRoaXMubGFzdENvbW1hbmRTdGF0ZVtjb21tYW5kXSk7XG4gIH1cblxuICBwcml2YXRlIGZpcmVEcm9wKGRhdGFUcmFuc2ZlcjogRGF0YVRyYW5zZmVyKTogdm9pZCB7XG4gICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuZHJvcCkge1xuICAgICAgbGlzdGVuZXIoeyBkYXRhVHJhbnNmZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaXJlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCBmb2N1cyA9IHRoaXMuZ2V0U2VsZWN0aW9uKGZhbHNlKTtcbiAgICBsZXQgYW5jaG9yID0gdGhpcy5nZXRTZWxlY3Rpb24odHJ1ZSk7XG5cbiAgICAvLyBTYXZlIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBmb3IgcmVzdG9yYXRpb24gbGF0ZXJcbiAgICB0aGlzLmxhc3RTZWxlY3Rpb24gPSB7XG4gICAgICBmb2N1czogZm9jdXMsXG4gICAgICBhbmNob3I6IGFuY2hvclxuICAgIH07XG5cbiAgICBpZiAodGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uICYmIHRoaXMubGlzdGVuZXJzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgIGxldCBjb21tYW5kU3RhdGUgPSB0aGlzLmdldENvbW1hbmRTdGF0ZShmb2N1cywgYW5jaG9yKTtcbiAgICAgIGlmICh0aGlzLmxhc3RDb21tYW5kU3RhdGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmxhc3RDb21tYW5kU3RhdGUsIGNvbW1hbmRTdGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhc3RDb21tYW5kU3RhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBjb21tYW5kU3RhdGUpO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMuc2VsZWN0aW9uKSB7XG4gICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICBmb2N1czogZm9jdXMhLFxuICAgICAgICAgIGFuY2hvcjogYW5jaG9yISxcbiAgICAgICAgICBjb21tYW5kU3RhdGU6IHRoaXMubGFzdENvbW1hbmRTdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVkaXRvcjtcbiJdLCJuYW1lcyI6WyJnbG9iYWwiLCJ0aGlzIiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJyZXF1aXJlJCQyIiwicmVxdWlyZSQkMyIsInNoYXJlZFN0b3JlTW9kdWxlIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsIm1ha2VCdWlsdEluIiwibWFrZUJ1aWx0SW5Nb2R1bGUiLCJvd25LZXlzIiwicmVxdWlyZSQkOCIsInJlcXVpcmUkJDkiLCJyZXF1aXJlJCQxMCIsInJlcXVpcmUkJDExIiwicmVxdWlyZSQkMTIiLCJyZXF1aXJlJCQxMyIsInN2ZyIsImJsb2NrcXVvdGUiLCJib2xkIiwiY2xlYXJfZm9ybWF0dGluZyIsImNvZGUiLCJoMSIsImgyIiwiaHIiLCJpbWFnZSIsIml0YWxpYyIsImxpbmsiLCJvbCIsInJlZG8iLCJzdHJpa2V0aHJvdWdoIiwidGFza2xpc3QiLCJ1bCIsInVuZG8iLCJpc01hY0xpa2UiLCJ0ZXN0IiwibmF2aWdhdG9yIiwicGxhdGZvcm0iLCJEZWZhdWx0Q29tbWFuZHMiLCJuYW1lIiwiYWN0aW9uIiwiaW5uZXJIVE1MIiwidGl0bGUiLCJob3RrZXkiLCJlZGl0b3IiLCJ0b2dnbGVUYXNrTGlzdCIsImVuYWJsZWQiLCJmb2N1cyIsImlzVGFza0xpc3RJdGVtIiwicm93IiwiaW5zZXJ0TGluayIsImlzSW5saW5lRm9ybWF0dGluZ0FsbG93ZWQiLCJ3cmFwU2VsZWN0aW9uIiwiaW5zZXJ0SW1hZ2UiLCJwYXN0ZSIsImNhblVuZG8iLCJjYW5SZWRvIiwiQ29tbWFuZEJhciIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJlIiwiY29tbWFuZHMiLCJidXR0b25zIiwic3RhdGUiLCJob3RrZXlzIiwiZWxlbWVudCIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJib2R5IiwiY3JlYXRlQ29tbWFuZEJhckVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiaGFuZGxlS2V5ZG93biIsInNldEVkaXRvciIsInBhcmVudEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiY29tbWFuZCIsImVsIiwiYXBwZW5kQ2hpbGQiLCJjb21tYW5kTmFtZSIsIk9iamVjdCIsImFzc2lnbiIsImtleXMiLCJzcGxpdCIsIm1vZGlmaWVycyIsIm1vZGlmaWVyZXhwbGFuYXRpb24iLCJpIiwibGVuZ3RoIiwicHVzaCIsImxhc3RLZXkiLCJtYXRjaCIsImNvbmNhdCIsInRvVXBwZXJDYXNlIiwia2V5IiwidG9Mb3dlckNhc2UiLCJqb2luIiwiaGFuZGxlQ2xpY2siLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwiZWRpdG9ySGFkRm9jdXMiLCJjb250YWlucyIsImFjdGl2ZUVsZW1lbnQiLCJyZXN0b3JlTGFzdFNlbGVjdGlvbiIsInNldENvbW1hbmRTdGF0ZSIsImhhbmRsZVNlbGVjdGlvbiIsImNvbW1hbmRTdGF0ZSIsInVuZGVmaW5lZCIsImFuY2hvciIsIm91dGVyIiwibW9kaWZpZXIiLCJyZXF1aXJlJCQxNCIsInJlcXVpcmUkJDE1IiwicmVxdWlyZSQkMTYiLCJyZXF1aXJlJCQxNyIsInJlcXVpcmUkJDE4IiwicmVxdWlyZSQkMTkiLCJyZXF1aXJlJCQyMCIsInJlcXVpcmUkJDIxIiwicmVwbGFjZW1lbnRzIiwiQVNDSUlQdW5jdHVhdGlvbiIsIk5vdFRyaWdnZXJDaGFyIiwiU2NoZW1lIiwiRW1haWwiLCJIVE1MT3BlblRhZyIsIkhUTUxDbG9zZVRhZyIsIkhUTUxUYWdOYW1lIiwiSFRNTENvbW1lbnQiLCJIVE1MUEkiLCJIVE1MRGVjbGFyYXRpb24iLCJIVE1MQ0RBVEEiLCJIVE1MQXR0cmlidXRlIiwiSFRNTEF0dFZhbHVlIiwiS25vd25UYWciLCJwdW5jdHVhdGlvbkxlYWRpbmciLCJSZWdFeHAiLCJwdW5jdHVhdGlvblRyYWlsaW5nIiwiZWRpdG9yUmVnRXhwIiwibWFjUGxhdGZvcm0iLCJsaW5lU3BsaXQiLCJyZXBsYWNlbWVudFBsYWNlaG9sZGVyIiwiaW5saW5lQ29udGVudFBsYWNlaG9sZGVyIiwiaW5saW5lUmVwbGFjZW1lbnRQbGFjZWhvbGRlciIsImJsYW5rQ29udGVudCIsImxlYWRpbmdXaGl0ZXNwYWNlIiwidHJhaWxpbmdXaGl0ZXNwYWNlIiwibGVhZGluZ1doaXRlc3BhY2VSdW4iLCJzdXJyb3VuZGluZ1doaXRlc3BhY2UiLCJfd3JhcFJlZ0V4cCIsImxlYWRpbmciLCJ0cmFpbGluZyIsInRhc2tMaXN0SXRlbSIsIm9yZGVyZWRMaXN0TnVtYmVyIiwiaW5saW5lVGFnTmFtZSIsImNoYW5nZUV2ZW50Iiwic2VsZWN0aW9uRXZlbnQiLCJkcm9wRXZlbnQiLCJhdXRvbGlua1ByZWNlZGluZ0NoYXIiLCJlbXBoYXNpc0RlbGltaXRlciIsInN0cmlrZXRocm91Z2hEZWxpbWl0ZXIiLCJhdXRvbGlua1NjaGVtZSIsImF1dG9saW5rV3d3IiwiYXV0b2xpbmtEb21haW4iLCJhdXRvbGlua1BhdGgiLCJhdXRvbGlua1Byb3RvY29sIiwiYXV0b2xpbmtYbXBwIiwiYXV0b2xpbmtYbXBwUmVzb3VyY2UiLCJhdXRvbGlua0VtYWlsIiwiZW1haWxUcmFpbGluZ0NoYXIiLCJlbWFpbFRsZCIsImxpbmtDbG9zaW5nQnJhY2tldCIsIm9wZW5pbmdBbmdsZSIsImNsb3NpbmdBbmdsZSIsInRpdGxlUXVvdGUiLCJvcGVuaW5nUGFyZW4iLCJjbG9zaW5nUGFyZW4iLCJlbmRzV2l0aE9wZW5BbmdsZSIsImNvbnRhaW5zT3BlbkFuZ2xlIiwiYW55Q2hhciIsImxpbmVHcmFtbWFyIiwiVE1IMSIsInJlZ2V4cCIsInJlcGxhY2VtZW50IiwiVE1IMiIsIlRNSDMiLCJUTUg0IiwiVE1INSIsIlRNSDYiLCJUTUJsb2NrcXVvdGUiLCJUTUNvZGVGZW5jZUJhY2t0aWNrT3BlbiIsInNlcSIsIlRNQ29kZUZlbmNlVGlsZGVPcGVuIiwiVE1Db2RlRmVuY2VCYWNrdGlja0Nsb3NlIiwiVE1Db2RlRmVuY2VUaWxkZUNsb3NlIiwiVE1CbGFua0xpbmUiLCJUTVNldGV4dEgxTWFya2VyIiwiVE1TZXRleHRIMk1hcmtlciIsIlRNSFIiLCJUTVVMIiwiVE1PTCIsIlRNSW5kZW50ZWRDb2RlIiwiVE1MaW5rUmVmZXJlbmNlRGVmaW5pdGlvbiIsImxhYmVsUGxhY2Vob2xkZXIiLCJodG1sQmxvY2tHcmFtbWFyIiwic3RhcnQiLCJlbmQiLCJwYXJhSW50ZXJydXB0IiwiaW5saW5lR3JhbW1hciIsImVzY2FwZSIsImF1dG9saW5rIiwiaHRtbCIsImxpbmtPcGVuIiwiaW1hZ2VPcGVuIiwibGlua0xhYmVsIiwiZGVmYXVsdCIsInJlcGxhY2VtZW50UmVnZXhwIiwiaW5saW5lUnVsZXMiLCJydWxlIiwicmUiLCJzb3VyY2UiLCJyZXBsYWNlIiwic3RyaW5nIiwiZmxhZ3MiLCJjcmVhdGVNZXJnZWRJbmxpbmVHcmFtbWFyIiwiY3VzdG9tUnVsZXMiLCJhcmd1bWVudHMiLCJtZXJnZWQiLCJfb2JqZWN0U3ByZWFkIiwicnVsZU5hbWUiLCJlbnRyaWVzIiwicHJvY2Vzc2VkUnVsZSIsInJlZ2V4cFNvdXJjZSIsImh0bWxlc2NhcGUiLCJ0eXBlIiwic2V0IiwicHJlIiwicG9zdCIsInVuc2V0IiwicHJlUGF0dGVybiIsInBvc3RQYXR0ZXJuIiwicGF0dGVybiIsImgzIiwiaDQiLCJoNSIsImg2IiwiRWRpdG9yIiwidGV4dGFyZWEiLCJsaW5lcyIsImxpbmVFbGVtZW50cyIsImxpbmVUeXBlcyIsImxpbmVDYXB0dXJlcyIsImxpbmVSZXBsYWNlbWVudHMiLCJsaW5rTGFiZWxzIiwibGluZURpcnR5IiwibGFzdENvbW1hbmRTdGF0ZSIsImN1c3RvbUlubGluZUdyYW1tYXIiLCJtZXJnZWRJbmxpbmVHcmFtbWFyIiwiaGFzRm9jdXMiLCJsYXN0U2VsZWN0aW9uIiwibGlzdGVuZXJzIiwiY2hhbmdlIiwic2VsZWN0aW9uIiwiZHJvcCIsInVuZG9TdGFjayIsInJlZG9TdGFjayIsImlzUmVzdG9yaW5nSGlzdG9yeSIsIm1heEhpc3RvcnkiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInRhZ05hbWUiLCJwYXJlbnROb2RlIiwic3R5bGUiLCJkaXNwbGF5IiwicGxhY2Vob2xkZXIiLCJfYSIsImNyZWF0ZUVkaXRvckVsZW1lbnQiLCJzZXRDb250ZW50IiwiY29udGVudCIsInZhbHVlIiwiaGFuZGxlVW5kb1JlZG9LZXkiLCJwdXNoSGlzdG9yeSIsInB1c2hDdXJyZW50U3RhdGUiLCJnZXRDb250ZW50IiwiZ2V0U2VsZWN0aW9uIiwic2hpZnQiLCJjdXJyZW50IiwicG9wIiwicHJldiIsInNldFNlbGVjdGlvbiIsIm5leHQiLCJpc01hYyIsImN0cmwiLCJtZXRhS2V5IiwiY3RybEtleSIsImFsdEtleSIsInNoaWZ0S2V5IiwiY2xhc3NMaXN0IiwiYWRkIiwiY29udGVudEVkaXRhYmxlIiwid2hpdGVTcGFjZSIsIndlYmtpdFVzZXJNb2RpZnkiLCJzZXRBdHRyaWJ1dGUiLCJuZXh0U2libGluZyIsImluc2VydEJlZm9yZSIsImhhbmRsZUlucHV0RXZlbnQiLCJoYW5kbGVCZWZvcmVJbnB1dEV2ZW50IiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlRXZlbnQiLCJoYW5kbGVQYXN0ZSIsImhhbmRsZURyb3AiLCJjaGlsZE5vZGVzIiwiZmlyc3RDaGlsZCIsInJlbW92ZUNoaWxkIiwibGluZU51bSIsImxlIiwiQXJyYXkiLCJ1cGRhdGVGb3JtYXR0aW5nIiwidXBkYXRlUGxhY2Vob2xkZXIiLCJmaXJlQ2hhbmdlIiwicmVtb3ZlIiwidXBkYXRlTGluZVR5cGVzIiwidXBkYXRlTGlua0xhYmVscyIsImFwcGx5TGluZVR5cGVzIiwibCIsImNhcHR1cmUiLCJzdHIiLCJwMSIsInAyIiwicGFyc2VJbnQiLCJwcm9jZXNzSW5saW5lU3R5bGVzIiwiaXNJbmxpbmVHcm91cExlYWRlciIsImxlYWRlclR5cGUiLCJpc0lubGluZUNvbnRpbnVhdGlvbiIsImFwcGx5SW5saW5lR3JvdXAiLCJhcHBseUxpbmUiLCJ0IiwiaXNCbGFua0Jsb2NrcXVvdGVDb250ZW50IiwiY2FwIiwiY29udGVudEhUTUwiLCJyZW1vdmVBdHRyaWJ1dGUiLCJkYXRhc2V0IiwibWxTaWciLCJ0b1N0cmluZyIsImNvbnRlbnRzIiwic2lnU291cmNlIiwiaWR4IiwiaW5saW5lQ29udGVudEluZGV4IiwiSlNPTiIsInN0cmluZ2lmeSIsInNpZyIsImhhc2hTdHJpbmciLCJuZWVkc1JlbmRlciIsImZyYWdtZW50cyIsInNwbGl0SW5saW5lSFRNTEJ5TGluZSIsImZyYWciLCJyZXBsYWNlV2l0aElubGluZSIsIm0iLCJleGVjIiwiaW5saW5lRnJhZ21lbnQiLCJvcGVuVGFncyIsImNoIiwiY2xvc2UiLCJpbmRleE9mIiwic3Vic3RyIiwidGFnIiwic3Vic3RyaW5nIiwib3BlblRhZyIsInMiLCJoIiwiY2hhckNvZGVBdCIsImNvZGVCbG9ja1R5cGUiLCJjb2RlQmxvY2tTZXFMZW5ndGgiLCJodG1sQmxvY2siLCJsaW5lVHlwZSIsImxpbmVDYXB0dXJlIiwibGluZVJlcGxhY2VtZW50IiwiZ3JvdXBzIiwiaHRtbEJsb2NrVHlwZSIsImhlYWRpbmdMaW5lIiwiaGVhZGluZ0xpbmVUeXBlIiwidGFzayIsImNoZWNrZWQiLCJidWxsZXRDbGFzcyIsImJveENsYXNzIiwiZ2V0QW5jaG9yIiwid2luZG93Iiwic3RhcnROb2RlIiwiYW5jaG9yTm9kZSIsImZvY3VzTm9kZSIsIm9mZnNldCIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiY29sIiwiY29tcHV0ZUNvbHVtbiIsIm5vZGUiLCJwcmV2aW91c1NpYmxpbmciLCJjdXJyZW50TGluZU51bURhdGEiLCJwcmV2aW91c0xpbmVOdW1EYXRhIiwiX2IiLCJjdXJyZW50TGluZU51bSIsInByZXZpb3VzTGluZU51bSIsImNvbXB1dGVOb2RlQW5kT2Zmc2V0Iiwid2luZG93U2VsZWN0aW9uIiwic2V0QmFzZUFuZEV4dGVudCIsInRleHQiLCJiZWdpbm5pbmciLCJpbnNlcnRlZExpbmVzIiwibGluZUJlZm9yZSIsImxpbmVFbmQiLCJlbmRDb2xQb3MiLCJzcGxpY2VMaW5lcyIsInN0YXJ0Q29sIiwiZW5kQ29sIiwibGVmdCIsIm1pZCIsInJpZ2h0IiwibGlzdGVuZXIiLCJsaW5lc0RpcnR5IiwiYmVmb3JlSW5wdXRFdmVudCIsImlucHV0VHlwZSIsImlzQmFja3NwYWNlIiwiY2xlYXJEaXJ0eUZsYWciLCJwcmV2TGluZUxlbiIsImN1cnJlbnRMaW5lTGVuIiwiY29udGludWFibGVUeXBlIiwibGluZUJlZm9yZUJyZWFrIiwibGluZUFmdGVyQnJlYWsiLCJyZXN1bHQiLCJzY3JvbGxJbnRvVmlldyIsImJsb2NrIiwiaW5saW5lIiwiaW5wdXRFdmVudCIsImZpeE5vZGVIaWVyYXJjaHkiLCJ1cGRhdGVMaW5lQ29udGVudHNBbmRGb3JtYXR0aW5nIiwiX2UiLCJmaXJlU2VsZWN0aW9uIiwiY2xpcGJvYXJkRGF0YSIsImdldERhdGEiLCJmaXJlRHJvcCIsImRhdGFUcmFuc2ZlciIsInRhcmdldCIsImJveCIsImNsb3Nlc3QiLCJsaW5lRWwiLCJpc05hTiIsImNoYXJBdCIsIm9yaWdpbmFsU3RyaW5nIiwicHJvY2Vzc2VkIiwic3RhY2siLCJwcmVjZWRpbmdDaGFyIiwicGFyc2VBdXRvbGlua0V4dGVuc2lvbiIsIm91dHB1dCIsImNoYXJDb3VudCIsInBvdGVudGlhbExpbmsiLCJwb3RlbnRpYWxJbWFnZSIsInBhcnNlTGlua09ySW1hZ2UiLCJkZWxpbUNvdW50IiwiZGVsaW1TdHJpbmciLCJjdXJyZW50RGVsaW1pdGVyIiwicHJlY2VkaW5nIiwiZm9sbG93aW5nIiwicHVuY3R1YXRpb25Gb2xsb3dzIiwicHVuY3R1YXRpb25QcmVjZWRlcyIsIndoaXRlc3BhY2VGb2xsb3dzIiwid2hpdGVzcGFjZVByZWNlZGVzIiwiY2FuT3BlbiIsImNhbkNsb3NlIiwic3RhY2tQb2ludGVyIiwiZGVsaW1pdGVyIiwiZW50cnkiLCJjb3VudCIsImNvbnN1bWVkIiwibm9kZVR5cGUiLCJOb2RlIiwiVEVYVF9OT0RFIiwidGV4dENvbnRlbnQiLCJiaW5kUmlnaHQiLCJjaGlsZHJlbkNvbXBsZXRlIiwicnYiLCJub2RlVmFsdWUiLCJ1cGRhdGVMaW5lQ29udGVudHMiLCJsaW5lRGVsdGEiLCJjaGlsZEVsZW1lbnRDb3VudCIsImZpcnN0Q2hhbmdlZExpbmUiLCJsYXN0Q2hhbmdlZExpbmUiLCJsaW5lc1RvRGVsZXRlIiwibGluZXNUb0FkZCIsImxpbmUiLCJjdCIsInN0YXJ0TGluZSIsImxpbmVzVG9JbnNlcnQiLCJhZGp1c3RMaW5lRWxlbWVudHMiLCJpbnNlcnRlZEJsYW5rIiwiaW5zZXJ0ZWREaXJ0eSIsInNwbGljZSIsIm9yaWdpbmFsQ2hpbGRyZW4iLCJmcm9tIiwicmVwbGFjZUNoaWxkIiwiY2hpbGQiLCJwYXJlbnQiLCJfbGVuIiwibmV3Q2hpbGRyZW4iLCJfa2V5IiwiZm9yRWFjaCIsIm5ld0NoaWxkIiwiRUxFTUVOVF9OT0RFIiwiZGl2V3JhcHBlciIsImdyYW5kQ2hpbGRyZW4iLCJzb21lIiwiZ3JhbmRDaGlsZCIsIm1hdGNoRXh0ZW5kZWRBdXRvbGluayIsInNjaGVtZUNhcCIsImlzV3d3IiwicHJlZml4TGVuIiwiYWZ0ZXJQcmVmaXgiLCJkb21haW5DYXAiLCJpc1ZhbGlkQXV0b2xpbmtEb21haW4iLCJwYXRoQ2FwIiwidHJpbW1lZCIsInRyaW1BdXRvbGlua1RyYWlsaW5nIiwicHJvdG9DYXAiLCJlbWFpbENhcCIsIm1hdGNoQXV0b2xpbmtFbWFpbCIsImV4dHJhIiwicmVzQ2FwIiwiZW1haWwiLCJkb21haW4iLCJzZWdtZW50cyIsInNsaWNlIiwic2VnIiwiY2hhbmdlZCIsImMiLCJvcGVuIiwiaXNJbWFnZSIsInRleHRPZmZzZXQiLCJvcGVuZXIiLCJjdXJyZW50T2Zmc2V0IiwiYnJhY2tldExldmVsIiwibGlua1RleHQiLCJsaW5rUmVmIiwibGlua0RldGFpbHMiLCJ0ZXh0T3V0ZXIiLCJuZXh0Q2hhciIsInRyaW0iLCJwYXJlbnRoZXNpc0xldmVsIiwiaW5saW5lT3V0ZXIiLCJ2YWxpZCIsImxhYmVsIiwibGFiZWxDbGFzcyIsImNvbXB1dGVDb21tb25BbmNlc3RvciIsIm5vZGUxIiwibm9kZTIiLCJhbmNlc3RyeSIsInVuc2hpZnQiLCJhbmNlc3RyeTEiLCJhbmNlc3RyeTIiLCJjb21wdXRlRW5jbG9zaW5nTWFya3VwTm9kZSIsInNlbCIsImdldENvbW1hbmRTdGF0ZSIsImNtZCIsIm1hcmt1cE5vZGUiLCJsZW4iLCJsaXN0SXRlbU1hcmtlciIsIm1hcmtlciIsImFkZFRhc2tDaGVja2JveCIsInJlbW92ZVRhc2tDaGVja2JveCIsImFsbFRhc2tzIiwidXBkYXRlZCIsImlzQ29sbGFwc2VkIiwiYW5jZXN0b3IiLCJ0b2dnbGVDb21tYW5kU3RhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FDQSxDQUFBLElBQUksS0FBSyxHQUFHLFVBQVUsRUFBRSxFQUFFO0lBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7RUFDckMsQ0FBQzs7Q0FFRDtDQUNBLENBQUEsWUFBYztDQUNkO0lBQ0UsS0FBSyxDQUFDLE9BQU8sVUFBVSxJQUFJLFFBQVEsSUFBSSxVQUFVLENBQUM7SUFDbEQsS0FBSyxDQUFDLE9BQU8sTUFBTSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUM7Q0FDNUM7SUFDRSxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJ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RTtDQUM3Q3lKLFFBQUFBLFFBQVEsQ0FBQztDQUNQOVcsVUFBQUEsS0FBSyxFQUFFQSxLQUFNO0NBQ2I0RCxVQUFBQSxNQUFNLEVBQUVBLE1BQU87V0FDZkYsWUFBWSxFQUFFLElBQUksQ0FBQ29KO0NBQ3BCLFNBQUEsQ0FBQztDQUNKLE1BQUE7Q0FDRixJQUFBO0NBQ0YsRUFBQTtDQUNEOzs7Ozs7Ozs7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1XX0={"version":3,"file":"index.js","sources":["node_modules/core-js/internals/global-this.js","node_modules/core-js/internals/fails.js","node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/function-bind-native.js","node_modules/core-js/internals/function-call.js","node_modules/core-js/internals/object-property-is-enumerable.js","node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/function-uncurry-this.js","node_modules/core-js/internals/classof-raw.js","node_modules/core-js/internals/indexed-object.js","node_modules/core-js/internals/is-null-or-undefined.js","node_modules/core-js/internals/require-object-coercible.js","node_modules/core-js/internals/to-indexed-object.js","node_modules/core-js/internals/is-callable.js","node_modules/core-js/internals/is-object.js","node_modules/core-js/internals/get-built-in.js","node_modules/core-js/internals/object-is-prototype-of.js","node_modules/core-js/internals/environment-user-agent.js","node_modules/core-js/internals/environment-v8-version.js","node_modules/core-js/internals/symbol-constructor-detection.js","node_modules/core-js/internals/use-symbol-as-uid.js","node_modules/core-js/internals/is-symbol.js","node_modules/core-js/internals/try-to-string.js","node_modules/core-js/internals/a-callable.js","node_modules/core-js/internals/get-method.js","node_modules/core-js/internals/ordinary-to-primitive.js","node_modules/core-js/internals/is-pure.js","node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/shared-store.js","node_modules/core-js/internals/shared.js","node_modules/core-js/internals/to-object.js","node_modules/core-js/internals/has-own-property.js","node_modules/core-js/internals/uid.js","node_modules/core-js/internals/well-known-symbol.js","node_modules/core-js/internals/to-primitive.js","node_modules/core-js/internals/to-property-key.js","node_modules/core-js/internals/document-create-element.js","node_modules/core-js/internals/ie8-dom-define.js","node_modules/core-js/internals/object-get-own-property-descriptor.js","node_modules/core-js/internals/v8-prototype-define-bug.js","node_modules/core-js/internals/an-object.js","node_modules/core-js/internals/object-define-property.js","node_modules/core-js/internals/create-non-enumerable-property.js","node_modules/core-js/internals/function-name.js","node_modules/core-js/internals/inspect-source.js","node_modules/core-js/internals/weak-map-basic-detection.js","node_modules/core-js/internals/shared-key.js","node_modules/core-js/internals/hidden-keys.js","node_modules/core-js/internals/internal-state.js","node_modules/core-js/internals/make-built-in.js","node_modules/core-js/internals/define-built-in.js","node_modules/core-js/internals/math-trunc.js","node_modules/core-js/internals/to-integer-or-infinity.js","node_modules/core-js/internals/to-absolute-index.js","node_modules/core-js/internals/to-length.js","node_modules/core-js/internals/length-of-array-like.js","node_modules/core-js/internals/array-includes.js","node_modules/core-js/internals/object-keys-internal.js","node_modules/core-js/internals/enum-bug-keys.js","node_modules/core-js/internals/object-get-own-property-names.js","node_modules/core-js/internals/object-get-own-property-symbols.js","node_modules/core-js/internals/own-keys.js","node_modules/core-js/internals/copy-constructor-properties.js","node_modules/core-js/internals/is-forced.js","node_modules/core-js/internals/export.js","node_modules/core-js/internals/to-string-tag-support.js","node_modules/core-js/internals/classof.js","node_modules/core-js/internals/to-string.js","node_modules/core-js/internals/regexp-flags.js","node_modules/core-js/internals/regexp-sticky-helpers.js","node_modules/core-js/internals/object-keys.js","node_modules/core-js/internals/object-define-properties.js","node_modules/core-js/internals/html.js","node_modules/core-js/internals/object-create.js","node_modules/core-js/internals/regexp-unsupported-dot-all.js","node_modules/core-js/internals/regexp-unsupported-ncg.js","node_modules/core-js/internals/regexp-exec.js","node_modules/core-js/modules/es.regexp.exec.js","node_modules/core-js/internals/dom-iterables.js","node_modules/core-js/internals/dom-token-list-prototype.js","node_modules/core-js/internals/add-to-unscopables.js","node_modules/core-js/internals/iterators.js","node_modules/core-js/internals/correct-prototype-getter.js","node_modules/core-js/internals/object-get-prototype-of.js","node_modules/core-js/internals/iterators-core.js","node_modules/core-js/internals/set-to-string-tag.js","node_modules/core-js/internals/iterator-create-constructor.js","node_modules/core-js/internals/function-uncurry-this-accessor.js","node_modules/core-js/internals/is-possible-prototype.js","node_modules/core-js/internals/a-possible-prototype.js","node_modules/core-js/internals/object-set-prototype-of.js","node_modules/core-js/internals/iterator-define.js","node_modules/core-js/internals/create-iter-result-object.js","node_modules/core-js/modules/es.array.iterator.js","node_modules/core-js/modules/web.dom-collections.iterator.js","src/svg/svg.ts","src/TinyMDECommandBar.ts","node_modules/core-js/internals/function-apply.js","node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","node_modules/core-js/internals/string-multibyte.js","node_modules/core-js/internals/advance-string-index.js","node_modules/core-js/internals/get-substitution.js","node_modules/core-js/internals/regexp-exec-abstract.js","node_modules/core-js/modules/es.string.replace.js","node_modules/core-js/internals/whitespaces.js","node_modules/core-js/internals/string-trim.js","node_modules/core-js/internals/string-trim-forced.js","node_modules/core-js/modules/es.string.trim.js","node_modules/core-js/internals/inherit-if-required.js","node_modules/core-js/internals/is-regexp.js","node_modules/core-js/internals/regexp-get-flags.js","node_modules/core-js/internals/proxy-accessor.js","node_modules/core-js/internals/define-built-in-accessor.js","node_modules/core-js/internals/set-species.js","node_modules/core-js/modules/es.regexp.constructor.js","node_modules/core-js/modules/es.regexp.flags.js","src/grammar.ts","src/TinyMDE.ts"],"sourcesContent":["'use strict';\nvar check = function (it) {\n return it && it.Math === Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n check(typeof this == 'object' && this) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","'use strict';\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] !== 7;\n});\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","'use strict';\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar call = FunctionPrototype.call;\n// eslint-disable-next-line es/no-function-prototype-bind -- safe\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\n return function () {\n return call.apply(fn, arguments);\n };\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) === 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","'use strict';\n// we can't use just `it == null` since of `document.all` special case\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\nmodule.exports = function (it) {\n return it === null || it === undefined;\n};\n","'use strict';\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\nvar $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (isNullOrUndefined(it)) throw new $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","'use strict';\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\nvar documentAll = typeof document == 'object' && document.all;\n\n// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\nmodule.exports = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {\n return typeof argument == 'function' || argument === documentAll;\n} : function (argument) {\n return typeof argument == 'function';\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(globalThis[namespace]) : globalThis[namespace] && globalThis[namespace][method];\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\nvar navigator = globalThis.navigator;\nvar userAgent = navigator && navigator.userAgent;\n\nmodule.exports = userAgent ? String(userAgent) : '';\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar userAgent = require('../internals/environment-user-agent');\n\nvar process = globalThis.process;\nvar Deno = globalThis.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/environment-v8-version');\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\nvar $String = globalThis.String;\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol('symbol detection');\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n // nb: Do not call `String` directly to avoid this being optimized out to `symbol+''` which will,\n // of course, fail.\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\n/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\n\nmodule.exports = NATIVE_SYMBOL &&\n !Symbol.sham &&\n typeof Symbol.iterator == 'symbol';\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","'use strict';\nvar $String = String;\n\nmodule.exports = function (argument) {\n try {\n return $String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar $TypeError = TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw new $TypeError(tryToString(argument) + ' is not a function');\n};\n","'use strict';\nvar aCallable = require('../internals/a-callable');\nvar isNullOrUndefined = require('../internals/is-null-or-undefined');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return isNullOrUndefined(func) ? undefined : aCallable(func);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw new $TypeError(\"Can't convert object to primitive value\");\n};\n","'use strict';\nmodule.exports = false;\n","'use strict';\nvar globalThis = require('../internals/global-this');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(globalThis, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n globalThis[key] = value;\n } return value;\n};\n","'use strict';\nvar IS_PURE = require('../internals/is-pure');\nvar globalThis = require('../internals/global-this');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = module.exports = globalThis[SHARED] || defineGlobalProperty(SHARED, {});\n\n(store.versions || (store.versions = [])).push({\n version: '3.42.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2025 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.42.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar store = require('../internals/shared-store');\n\nmodule.exports = function (key, value) {\n return store[key] || (store[key] = value || {});\n};\n","'use strict';\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/symbol-constructor-detection');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Symbol = globalThis.Symbol;\nvar WellKnownSymbolsStore = shared('wks');\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name)) {\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\n ? Symbol[name]\n : createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw new $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\n\nvar document = globalThis.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a !== 7;\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype !== 42;\n});\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw new $TypeError($String(argument) + ' is not an object');\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar $TypeError = TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar ENUMERABLE = 'enumerable';\nvar CONFIGURABLE = 'configurable';\nvar WRITABLE = 'writable';\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\n var current = $getOwnPropertyDescriptor(O, P);\n if (current && current[WRITABLE]) {\n O[P] = Attributes.value;\n Attributes = {\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\n writable: false\n };\n }\n } return $defineProperty(O, P, Attributes);\n} : $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw new $TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar isCallable = require('../internals/is-callable');\n\nvar WeakMap = globalThis.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\n","'use strict';\nvar shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar NATIVE_WEAK_MAP = require('../internals/weak-map-basic-detection');\nvar globalThis = require('../internals/global-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = globalThis.TypeError;\nvar WeakMap = globalThis.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw new TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n /* eslint-disable no-self-assign -- prototype methods protection */\n store.get = store.get;\n store.has = store.has;\n store.set = store.set;\n /* eslint-enable no-self-assign -- prototype methods protection */\n set = function (it, metadata) {\n if (store.has(it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n store.set(it, metadata);\n return metadata;\n };\n get = function (it) {\n return store.get(it) || {};\n };\n has = function (it) {\n return store.has(it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\nvar $String = String;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\nvar stringSlice = uncurryThis(''.slice);\nvar replace = uncurryThis(''.replace);\nvar join = uncurryThis([].join);\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\n name = '[' + replace($String(name), /^Symbol\\(([^)]*)\\).*$/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n if (!options) options = {};\n var simple = options.enumerable;\n var name = options.name !== undefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (options.global) {\n if (simple) O[key] = value;\n else defineGlobalProperty(key, value);\n } else {\n try {\n if (!options.unsafe) delete O[key];\n else if (O[key]) simple = true;\n } catch (error) { /* empty */ }\n if (simple) O[key] = value;\n else definePropertyModule.f(O, key, {\n value: value,\n enumerable: false,\n configurable: !options.nonConfigurable,\n writable: !options.nonWritable\n });\n } return O;\n};\n","'use strict';\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n","'use strict';\nvar trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n var len = toIntegerOrInfinity(argument);\n return len > 0 ? min(len, 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","'use strict';\nvar toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n if (length === 0) return !IS_INCLUDES && -1;\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el !== el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value !== value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","'use strict';\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value === POLYFILL ? true\n : value === NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = globalThis;\n } else if (STATIC) {\n target = globalThis[TARGET] || defineGlobalProperty(TARGET, {});\n } else {\n target = globalThis[TARGET] && globalThis[TARGET].prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n defineBuiltIn(target, key, sourceProperty, options);\n }\n};\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","'use strict';\nvar classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nvar UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') !== null;\n});\n\n// UC Browser bug\n// https://github.com/zloirock/core-js/issues/1008\nvar MISSED_STICKY = UNSUPPORTED_Y || fails(function () {\n return !$RegExp('a', 'y').sticky;\n});\n\nvar BROKEN_CARET = UNSUPPORTED_Y || fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') !== null;\n});\n\nmodule.exports = {\n BROKEN_CARET: BROKEN_CARET,\n MISSED_STICKY: MISSED_STICKY,\n UNSUPPORTED_Y: UNSUPPORTED_Y\n};\n","'use strict';\nvar internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","'use strict';\n/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar definePropertiesModule = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n // eslint-disable-next-line no-useless-assignment -- avoid memory leak\n activeXDocument = null;\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\n// eslint-disable-next-line es/no-object-create -- safe\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.test('\\n') && re.flags === 's');\n});\n","'use strict';\nvar fails = require('../internals/fails');\nvar globalThis = require('../internals/global-this');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?<a>b)', 'g') -> /(?<a>b)/g and it causes SyntaxError\nvar $RegExp = globalThis.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?<a>b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$<a>c') !== 'bc';\n});\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n call(nativeExec, re1, 'a');\n call(nativeExec, re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = call(patchedExec, raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = call(regexpFlags, re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = replace(flags, 'y', '');\n if (indexOf(flags, 'g') === -1) {\n flags += 'g';\n }\n\n strCopy = stringSlice(str, re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = stringSlice(match.input, charsAdded);\n match[0] = stringSlice(match[0], charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/\n call(nativeReplace, match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\n// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","'use strict';\n// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","'use strict';\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] === undefined) {\n defineProperty(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nmodule.exports = {};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (target, TAG, STATIC) {\n if (target && !STATIC) target = target.prototype;\n if (target && !hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nmodule.exports = function (object, key, method) {\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\n } catch (error) { /* empty */ }\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\n\nmodule.exports = function (argument) {\n return isObject(argument) || argument === null;\n};\n","'use strict';\nvar isPossiblePrototype = require('../internals/is-possible-prototype');\n\nvar $String = String;\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument) {\n if (isPossiblePrototype(argument)) return argument;\n throw new $TypeError(\"Can't set \" + $String(argument) + ' as a prototype');\n};\n","'use strict';\n/* eslint-disable no-proto -- safe */\nvar uncurryThisAccessor = require('../internals/function-uncurry-this-accessor');\nvar isObject = require('../internals/is-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n requireObjectCoercible(O);\n aPossiblePrototype(proto);\n if (!isObject(O)) return O;\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/iterator-create-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND && KIND in IterablePrototype) return IterablePrototype[KIND];\n\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n }\n\n return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\n// `CreateIterResultObject` abstract operation\n// https://tc39.es/ecma262/#sec-createiterresultobject\nmodule.exports = function (value, done) {\n return { value: value, done: done };\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineProperty = require('../internals/object-define-property').f;\nvar defineIterator = require('../internals/iterator-define');\nvar createIterResultObject = require('../internals/create-iter-result-object');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = null;\n return createIterResultObject(undefined, true);\n }\n switch (state.kind) {\n case 'keys': return createIterResultObject(index, false);\n case 'values': return createIterResultObject(target[index], false);\n } return createIterResultObject([index, target[index]], false);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nvar values = Iterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n// V8 ~ Chrome 45- bug\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\n defineProperty(values, 'name', { value: 'values' });\n} catch (error) { /* empty */ }\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n setToStringTag(CollectionPrototype, COLLECTION_NAME, true);\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n handlePrototype(globalThis[COLLECTION_NAME] && globalThis[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n","const svg: Record<string, string> = {\n blockquote: `<svg height=\"18\" width=\"18\"><rect width=\"5\" height=\"5\" x=\"3\" y=\"4\" ry=\"1\"/><rect ry=\"1\" y=\"4\" x=\"10\" height=\"5\" width=\"5\"/><path d=\"M8 6.999v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3zm7 0v3c0 1-1 3-1 3s-.331 1-1.331 1h-1c-1 0-.669-1-.669-1s1-2 1-3v-3z\"/></svg>`,\n bold: `<svg height=\"18\" width=\"18\"><path d=\"M4 2a1 1 0 00-1 1v12a1 1 0 001 1h6c4 0 5-2 5-4 0-1.322-.434-2.636-1.885-3.381C13.772 7.885 14 6.945 14 6c0-2-1-4-5-4zm1 2h4c1.668 0 2.32.393 2.6.672.28.279.4.662.4 1.328s-.12 1.057-.4 1.338c-.275.274-1.014.646-2.6.662H5zm5 6c1.666.005 2.318.388 2.596.666.277.278.404.667.404 1.334s-.127 1.06-.404 1.338c-.278.278-.93.66-2.596.662l-4.992.004L5 10z\"/></svg>`,\n clear_formatting: `<svg height=\"18\" width=\"18\"><path d=\"M11.03 1a1 1 0 00-.74.3l-9 9a1 1 0 000 1.4l4 4A1 1 0 006 16h2a1 1 0 00.7-.3l8-8a1 1 0 000-1.4l-5-5a1 1 0 00-.67-.3zM8.7 5.7l3.58 3.6L7.6 14H6.4l-3-3 5.3-5.3z\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"16\" height=\"2\" width=\"2\"/><rect width=\"2\" height=\"2\" x=\"13\" y=\"14\" rx=\".8\" ry=\".8\"/><rect ry=\".8\" rx=\".8\" y=\"14\" x=\"10\" height=\"2\" width=\"2\"/></svg>`,\n code: `<svg height=\"18\" width=\"18\"><path d=\"M13.5 2.994a.5.5 0 00-.5.5.5.5 0 000 .034V4.53a5.993 5.993 0 00-7.451-.445A6 6 0 1012.45 13.9a5.99 5.99 0 001.346-1.334.5.5 0 00.096-.101.5.5 0 00-.12-.698.5.5 0 00-.697.12l-.004-.005a5 5 0 01-1.197 1.2 5 5 0 111.215-6.965.5.5 0 00.697.12.5.5 0 00.211-.44V4.745H14V3.493a.5.5 0 00-.5-.5z\"/></svg>`,\n h1: `<svg height=\"18\" width=\"18\"><path d=\"M3 2s0-1 1-1h1c1 0 1 1 1 1v6h6V2s0-1 1-1h1c1 0 1 1 1 1v14s0 1-1 1h-1c-1 0-1-1-1-1v-6H6v6s0 1-1 1H4c-1 0-1-1-1-1z\"/></svg>`,\n h2: `<svg height=\"18\" width=\"18\"><path d=\"M4 2s0-1 1-1 1 1 1 1v6c1-1 2-1 4-1 3 0 4 2 4 4v5s0 1-1 1-1-1-1-1v-5c0-1.094-1-2-2-2-2 0-3 0-4 2v5s0 1-1 1-1-1-1-1z\"/></svg>`,\n hr: `<svg height=\"18\" width=\"18\"><rect ry=\"1\" y=\"8\" height=\"2\" width=\"18\"/></svg>`,\n image: `<svg height=\"18\" width=\"18\"><path d=\"M1 2v14h16V2H1zm2 2h12v7l-3-3-4 4-2-2-3 3V4z\"/><circle r=\"1.5\" cy=\"6.5\" cx=\"5.5\"/></svg>`,\n italic: `<svg height=\"18\" width=\"18\"><path d=\"M9 2a1 1 0 000 2L7 14a1 1 0 100 2h2a1 1 0 000-2l2-10a1 1 0 100-2z\"/></svg>`,\n link: `<svg height=\"18\" width=\"18\"><path d=\"M9.07 5.18a3.9 3.9 0 00-1.52.43C6.31 6.22 5.3 7.29 4.3 8.29c-1 1-2.07 2.02-2.68 3.26-.31.62-.5 1.33-.41 2.07.09.75.48 1.47 1.1 2.09.61.61 1.33 1 2.08 1.1.74.09 1.45-.1 2.07-.42 1.24-.61 2.26-1.68 3.26-2.68.46-.47.94-.94 1.39-1.44l-.43.26c-.68.34-1.49.56-2.36.46-.2-.03-.4-.08-.6-.14-.79.76-1.55 1.45-2.16 1.76-.38.19-.67.24-.92.21-.26-.03-.54-.14-.92-.53-.39-.38-.5-.66-.53-.91-.03-.26.02-.55.21-.93.39-.76 1.32-1.74 2.32-2.74 1-1 1.98-1.93 2.74-2.32.38-.19.67-.24.93-.21.25.03.53.14.91.53.39.38.5.66.53.92v.06l1.12-1.06.44-.47c-.18-.3-.4-.6-.67-.87-.62-.61-1.34-1-2.09-1.1a3.08 3.08 0 00-.55-.01z\"/><path d=\"M13.07.86a3.9 3.9 0 00-1.52.43c-1.24.62-2.26 1.69-3.26 2.69-.46.47-.94.94-1.39 1.43.15-.08.28-.18.43-.25a4.4 4.4 0 012.36-.46c.2.02.4.07.6.14.79-.77 1.55-1.46 2.16-1.76.38-.19.67-.25.93-.21.25.03.53.14.91.52.39.38.5.66.53.92.03.26-.02.55-.21.93-.39.76-1.32 1.74-2.32 2.74-1 1-1.98 1.93-2.74 2.31-.38.2-.67.25-.93.22-.25-.04-.53-.15-.91-.53-.39-.38-.5-.66-.53-.92V9c-.36.33-.73.67-1.12 1.06l-.43.46c.17.3.4.6.66.87.62.62 1.34 1 2.08 1.1.75.1 1.46-.1 2.08-.41 1.24-.62 2.26-1.69 3.26-2.69s2.07-2.02 2.68-3.26c.31-.62.5-1.32.41-2.07a3.63 3.63 0 00-1.1-2.08c-.61-.62-1.33-1-2.07-1.1a3.08 3.08 0 00-.56-.02z\"/></svg>`,\n ol: `<svg height=\"18\" width=\"18\"><path d=\"M1.5 7a.5.5 0 100 1h1a.5.5 0 01.5.5c0 .164-.08.31-.14.355l-1.655 1.25A.492.492 0 001 10.5a.5.5 0 00.5.5h2a.5.5 0 000-1H3l.398-.299A1.5 1.5 0 002.5 7z\"/><path d=\"M1.5 12c-.667 0-.667 1 0 1h1.25c.333 0 .333.5 0 .5H2.5c-.667 0-.667 1 0 1h.25c.333 0 .333.5 0 .5H1.5c-.667 0-.667 1 0 1h1c.398 0 .78-.131 1.06-.365.282-.235.44-.554.44-.885a1.121 1.121 0 00-.303-.75c.191-.204.3-.47.303-.75 0-.332-.158-.651-.44-.885-.3-.241-.675-.37-1.06-.365z\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><path d=\"M1.5 2a.5.5 0 100 1H2v2h-.5a.5.5 0 100 1h2a.5.5 0 100-1H3V2.5c0-.277-.223-.5-.5-.5z\"/></svg>`,\n redo: `<svg height=\"18\" width=\"18\"><path d=\"M 7.2695308,2.7050781 C 8.1128755,2.7081581 8.9529895,2.8712156 9.730469,3.1347656 11.408874,3.7037121 12.90142,4.6847104 14,5.6367188 V 4 h 2 V 9 H 11 V 7 h 1.509765 C 11.59075,6.2485173 10.340208,5.453808 9.0878904,5.0292969 7.4309398,4.4676231 5.9453458,4.468717 4.7070308,5.7070312 c -1.225014,1.2250142 -1.409769,2.7206953 -0.779297,4.2968748 0.630472,1.57618 2.167475,3.158006 4.4433598,4.06836 l -0.7421878,1.855468 c -2.724115,-1.089646 -4.687112,-3.00782 -5.55664,-5.18164 -0.869528,-2.1738206 -0.554283,-4.6781393 1.220703,-6.4531252 0.923857,-0.9238568 2.015388,-1.388828 3.134765,-1.5351563 0.279845,-0.036582 0.560682,-0.053761 0.841797,-0.052734 z\" /></svg>`,\n strikethrough: `<svg width=\"18\" height=\"18\"><path d=\"M10 2C6 2 4 4 4 6c0 .338.08.672.193 1h2.34C6.113 6.629 6 6.295 6 6c0-.334.117-.725.691-1.154C7.265 4.416 8.331 4 10 4h3a1 1 0 000-2zm1.477 9c.413.368.523.706.523 1 0 .334-.127.712-.701 1.143-.575.43-1.632.85-3.299.857l-1.006.007V14H5a1 1 0 000 2h3c4 0 6-2 6-4 0-.338-.081-.672-.195-1z\"/><rect ry=\"1\" y=\"8\" x=\"1\" height=\"2\" width=\"16\"/></svg>`,\n tasklist: `<svg\n height=\"18\"\n width=\"18\"\n>\n <path\n d=\"M 2.3339844,1 C 1.6039663,1 1,1.6039663 1,2.3339844 V 5.6660156 C 1,6.3960337 1.6039663,7 2.3339844,7 H 5.6660156 C 6.3960337,7 7,6.3960337 7,5.6660156 V 2.3339844 C 7,1.6039663 6.3960337,1 5.6660156,1 Z m 0,1 H 5.6660156 C 5.8593309,2 6,2.1406691 6,2.3339844 V 5.6660156 C 6,5.8593309 5.8593309,6 5.6660156,6 H 2.3339844 C 2.1406691,6 2,5.8593309 2,5.6660156 V 2.3339844 C 2,2.1406691 2.1406691,2 2.3339844,2 Z\"\n />\n <path\n d=\"M 2.3339844,11 C 1.6039663,11 1,11.603966 1,12.333984 v 3.332032 C 1,16.396034 1.6039663,17 2.3339844,17 H 5.6660156 C 6.3960337,17 7,16.396034 7,15.666016 V 12.333984 C 7,11.603966 6.3960337,11 5.6660156,11 Z m 0,1 H 5.6660156 C 5.8593309,12 6,12.140669 6,12.333984 v 3.332032 C 6,15.859331 5.8593309,16 5.6660156,16 H 2.3339844 C 2.1406691,16 2,15.859331 2,15.666016 V 12.333984 C 2,12.140669 2.1406691,12 2.3339844,12 Z\"\n />\n <path\n d=\"m 10,3 h 7 c 0.554,0 1,0.446 1,1 0,0.554 -0.446,1 -1,1 H 10 C 9.446,5 9,4.554 9,4 9,3.446 9.446,3 10,3 Z\" />\n <path\n d=\"m 10,13 h 7 c 0.554,0 1,0.446 1,1 0,0.554 -0.446,1 -1,1 H 10 C 9.446,15 9,14.554 9,14 9,13.446 9.446,13 10,13 Z\" />\n <path\n d=\"M 4.8417969,2.5253906 A 0.5,0.5 0 0 0 4.5527344,2.7773438 L 3.8632813,4.15625 3.3535156,3.6464844 a 0.5,0.5 0 0 0 -0.7070312,0 0.5,0.5 0 0 0 0,0.7070312 l 1,1 A 0.50005,0.50005 0 0 0 4.4472656,5.2226562 l 1,-1.9999999 A 0.5,0.5 0 0 0 5.2226562,2.5527344 0.5,0.5 0 0 0 4.8417969,2.5253906 Z\"\n />\n</svg>`,\n ul: `<svg height=\"18\" width=\"18\"><circle cx=\"2\" cy=\"9\" r=\"2\"/><circle cy=\"4\" cx=\"2\" r=\"2\"/><rect y=\"3\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/><circle cx=\"2\" cy=\"14\" r=\"2\"/><rect ry=\"1\" width=\"12\" height=\"2\" x=\"6\" y=\"8\"/><rect y=\"13\" x=\"6\" height=\"2\" width=\"12\" ry=\"1\"/></svg>`,\n undo: `<svg height=\"18\" width=\"18\"><path d=\"M 10.730469 2.7050781 C 9.8871243 2.7081594 9.0470103 2.8712156 8.2695312 3.1347656 C 6.5911256 3.7037121 5.0985797 4.6847104 4 5.6367188 L 4 4 L 2 4 L 2 9 L 7 9 L 7 7 L 5.4902344 7 C 6.4092499 6.2485173 7.6597914 5.453808 8.9121094 5.0292969 C 10.56906 4.4676231 12.054654 4.468717 13.292969 5.7070312 C 14.517983 6.9320454 14.702738 8.4277265 14.072266 10.003906 C 13.441794 11.580086 11.904791 13.161912 9.6289062 14.072266 L 10.371094 15.927734 C 13.095209 14.838088 15.058206 12.919914 15.927734 10.746094 C 16.797262 8.5722734 16.482017 6.0679547 14.707031 4.2929688 C 13.783174 3.369112 12.691643 2.9041408 11.572266 2.7578125 C 11.292421 2.7212304 11.011584 2.704051 10.730469 2.7050781 z \" /></svg>\n`\n};\n\nexport default svg;","import svg from \"./svg/svg\";\nimport { Editor, Position, SelectionEvent } from \"./TinyMDE\";\n\nconst isMacLike = /(Mac|iPhone|iPod|iPad)/i.test(\n typeof navigator !== \"undefined\" ? navigator.platform : \"\"\n);\n\nexport interface CommandAction {\n (editor: Editor): void;\n}\n\nexport interface CommandEnabled {\n (editor: Editor, focus?: Position, anchor?: Position): boolean | null;\n}\n\nexport interface CommandDefinition {\n name: string;\n action?: string | CommandAction;\n innerHTML?: string;\n title?: string;\n hotkey?: string;\n enabled?: CommandEnabled;\n}\n\nexport interface CommandBarProps {\n element?: string | HTMLElement;\n editor?: Editor;\n commands?: (string | CommandDefinition)[];\n}\n\ninterface Hotkey {\n modifiers: string[];\n command: string;\n key?: string;\n code?: string;\n}\n\nconst DefaultCommands: Record<string, CommandDefinition> = {\n bold: {\n name: \"bold\",\n action: \"bold\",\n innerHTML: svg.bold,\n title: \"Bold\",\n hotkey: \"Mod-B\",\n },\n italic: {\n name: \"italic\",\n action: \"italic\",\n innerHTML: svg.italic,\n title: \"Italic\",\n hotkey: \"Mod-I\",\n },\n strikethrough: {\n name: \"strikethrough\",\n action: \"strikethrough\",\n innerHTML: svg.strikethrough,\n title: \"Strikethrough\",\n hotkey: \"Mod2-Shift-5\",\n },\n code: {\n name: \"code\",\n action: \"code\",\n innerHTML: svg.code,\n title: \"Format as code\",\n },\n h1: {\n name: \"h1\",\n action: \"h1\",\n innerHTML: svg.h1,\n title: \"Level 1 heading\",\n hotkey: \"Mod-Shift-1\",\n },\n h2: {\n name: \"h2\",\n action: \"h2\",\n innerHTML: svg.h2,\n title: \"Level 2 heading\",\n hotkey: \"Mod-Shift-2\",\n },\n ul: {\n name: \"ul\",\n action: \"ul\",\n innerHTML: svg.ul,\n title: \"Bulleted list\",\n },\n ol: {\n name: \"ol\",\n action: \"ol\",\n innerHTML: svg.ol,\n title: \"Numbered list\",\n },\n blockquote: {\n name: \"blockquote\",\n action: \"blockquote\",\n innerHTML: svg.blockquote,\n title: \"Quote\",\n hotkey: \"Mod2-Shift-Q\",\n },\n tasklist: {\n name: \"tasklist\",\n action: (editor: Editor) => editor.toggleTaskList(),\n enabled: (editor: Editor, focus?: Position) =>\n focus ? editor.isTaskListItem(focus.row) : null,\n innerHTML: svg.tasklist,\n title: \"Task list\",\n hotkey: \"Mod2-Shift-T\",\n },\n insertLink: {\n name: \"insertLink\",\n action: (editor: Editor) => {\n if (editor.isInlineFormattingAllowed()) editor.wrapSelection(\"[\", \"]()\");\n },\n enabled: (editor: Editor) =>\n editor.isInlineFormattingAllowed() ? false : null,\n innerHTML: svg.link,\n title: \"Insert link\",\n hotkey: \"Mod-K\",\n },\n insertImage: {\n name: \"insertImage\",\n action: (editor: Editor) => {\n if (editor.isInlineFormattingAllowed()) editor.wrapSelection(\"![\", \"]()\");\n },\n enabled: (editor: Editor) =>\n editor.isInlineFormattingAllowed() ? false : null,\n innerHTML: svg.image,\n title: \"Insert image\",\n hotkey: \"Mod2-Shift-I\",\n },\n hr: {\n name: \"hr\",\n action: (editor: Editor) => editor.paste(\"\\n***\\n\"),\n enabled: () => false,\n innerHTML: svg.hr,\n title: \"Insert horizontal line\",\n hotkey: \"Mod2-Shift-L\",\n },\n undo: {\n name: \"undo\",\n action: (editor: Editor) => editor.undo(),\n enabled: (editor: Editor) => (editor.canUndo ? false : null),\n innerHTML: svg.undo,\n title: \"Undo\",\n },\n redo: {\n name: \"redo\",\n action: (editor: Editor) => editor.redo(),\n enabled: (editor: Editor) => (editor.canRedo ? false : null),\n innerHTML: svg.redo,\n title: \"Redo\",\n },\n};\n\nexport class CommandBar {\n public e: HTMLDivElement | null = null;\n public editor: Editor | null = null;\n public commands: Record<string, CommandDefinition> = {};\n public buttons: Record<string, HTMLDivElement> = {};\n public state: Record<string, boolean | null> = {};\n private hotkeys: Hotkey[] = [];\n\n constructor(props: CommandBarProps) {\n this.e = null;\n this.editor = null;\n this.commands = {};\n this.buttons = {};\n this.state = {};\n this.hotkeys = [];\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n \n if (!element) {\n element = document.body;\n }\n\n this.createCommandBarElement(\n element,\n props.commands || [\n \"bold\",\n \"italic\",\n \"strikethrough\",\n \"|\",\n \"code\",\n \"|\",\n \"h1\",\n \"h2\",\n \"|\",\n \"ul\",\n \"ol\",\n \"tasklist\",\n \"|\",\n \"blockquote\",\n \"hr\",\n \"|\",\n \"undo\",\n \"redo\",\n \"|\",\n \"insertLink\",\n \"insertImage\",\n ]\n );\n document.addEventListener(\"keydown\", (e) => this.handleKeydown(e));\n if (props.editor) this.setEditor(props.editor);\n }\n\n private createCommandBarElement(parentElement: HTMLElement, commands: (string | CommandDefinition)[]): void {\n this.e = document.createElement(\"div\");\n this.e.className = \"TMCommandBar\";\n\n for (let command of commands) {\n if (command === \"|\") {\n let el = document.createElement(\"div\");\n el.className = \"TMCommandDivider\";\n this.e.appendChild(el);\n } else {\n let commandName: string;\n if (typeof command === \"string\") {\n if (DefaultCommands[command]) {\n commandName = command;\n this.commands[commandName] = DefaultCommands[commandName];\n } else {\n continue;\n }\n } else if (typeof command === \"object\" && command.name) {\n commandName = command.name;\n this.commands[commandName] = {} as CommandDefinition;\n if (DefaultCommands[commandName]) {\n Object.assign(this.commands[commandName], DefaultCommands[commandName]);\n }\n Object.assign(this.commands[commandName], command);\n } else {\n continue;\n }\n\n let title = this.commands[commandName].title || commandName;\n\n if (this.commands[commandName].hotkey) {\n const keys = this.commands[commandName].hotkey!.split(\"-\");\n let modifiers: string[] = [];\n let modifierexplanation: string[] = [];\n \n for (let i = 0; i < keys.length - 1; i++) {\n switch (keys[i]) {\n case \"Ctrl\":\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n break;\n case \"Cmd\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n break;\n case \"Alt\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"Alt\");\n break;\n case \"Option\":\n modifiers.push(\"altKey\");\n modifierexplanation.push(\"⌥\");\n break;\n case \"Win\":\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⊞ Win\");\n break;\n case \"Shift\":\n modifiers.push(\"shiftKey\");\n modifierexplanation.push(\"⇧\");\n break;\n case \"Mod\":\n if (isMacLike) {\n modifiers.push(\"metaKey\");\n modifierexplanation.push(\"⌘\");\n } else {\n modifiers.push(\"ctrlKey\");\n modifierexplanation.push(\"Ctrl\");\n }\n break;\n case \"Mod2\":\n modifiers.push(\"altKey\");\n if (isMacLike) modifierexplanation.push(\"⌥\");\n else modifierexplanation.push(\"Alt\");\n break;\n }\n }\n \n modifierexplanation.push(keys[keys.length - 1]);\n let hotkey: Hotkey = {\n modifiers: modifiers,\n command: commandName,\n };\n \n const lastKey = keys[keys.length - 1];\n if (lastKey.match(/^[0-9]$/)) {\n hotkey.code = `Digit${lastKey}`;\n } else if (lastKey.match(/^[a-zA-Z]$/)) {\n hotkey.code = `Key${lastKey.toUpperCase()}`;\n } else {\n hotkey.key = lastKey.toLowerCase();\n }\n this.hotkeys.push(hotkey);\n title = title.concat(` (${modifierexplanation.join(\"+\")})`);\n }\n\n this.buttons[commandName] = document.createElement(\"div\");\n this.buttons[commandName].className = \"TMCommandButton TMCommandButton_Disabled\";\n this.buttons[commandName].title = title;\n this.buttons[commandName].innerHTML = this.commands[commandName].innerHTML || \"?\";\n\n this.buttons[commandName].addEventListener(\"mousedown\", (e) =>\n this.handleClick(commandName, e)\n );\n this.e.appendChild(this.buttons[commandName]);\n }\n }\n parentElement.appendChild(this.e);\n }\n\n private handleClick(commandName: string, event: Event): void {\n if (!this.editor) return;\n event.preventDefault();\n\n // Focus the editor if it's not already focused\n if (this.editor.e) {\n const editorHadFocus = this.editor.e.contains(document.activeElement);\n this.editor.e.focus();\n // Only restore the last selection if the editor was not focused before\n if (!editorHadFocus) {\n this.editor.restoreLastSelection();\n }\n }\n\n if (typeof this.commands[commandName].action === \"string\") {\n if (this.state[commandName] === false)\n (this.editor as any).setCommandState(commandName, true);\n else (this.editor as any).setCommandState(commandName, false);\n } else if (typeof this.commands[commandName].action === \"function\") {\n (this.commands[commandName].action as CommandAction)(this.editor);\n }\n }\n\n public setEditor(editor: Editor): void {\n this.editor = editor;\n editor.addEventListener(\"selection\", (e) => this.handleSelection(e));\n }\n\n private handleSelection(event: SelectionEvent): void {\n if (event.commandState) {\n for (let command in this.commands) {\n if (event.commandState[command] === undefined) {\n if (this.commands[command].enabled) {\n this.state[command] = this.commands[command].enabled!(\n this.editor!,\n event.focus,\n event.anchor\n );\n } else {\n this.state[command] = event.focus ? false : null;\n }\n } else {\n this.state[command] = event.commandState[command];\n }\n\n if (this.state[command] === true) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Active\";\n } else if (this.state[command] === false) {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Inactive\";\n } else {\n this.buttons[command].className = \"TMCommandButton TMCommandButton_Disabled\";\n }\n }\n }\n }\n\n private handleKeydown(event: KeyboardEvent): void {\n // Only handle keyboard shortcuts if this editor is currently focused\n if (!this.editor || !this.editor.e) return;\n if (!this.editor.e.contains(document.activeElement)) return;\n\n outer: for (let hotkey of this.hotkeys) {\n if (\n (hotkey.key && event.key.toLowerCase() === hotkey.key) ||\n (hotkey.code && event.code === hotkey.code)\n ) {\n for (let modifier of hotkey.modifiers) {\n if (!(event as any)[modifier]) continue outer;\n }\n this.handleClick(hotkey.command, event);\n return;\n }\n }\n }\n}\n\nexport default CommandBar;","'use strict';\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-function-prototype-bind, es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar call = require('../internals/function-call');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegExp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) !== 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () {\n execCalled = true;\n return null;\n };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: call(nativeRegExpMethod, regexp, str, arg2) };\n }\n return { done: true, value: call(nativeMethod, str, regexp, arg2) };\n }\n return { done: false };\n });\n\n defineBuiltIn(String.prototype, KEY, methods[0]);\n defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n// eslint-disable-next-line redos/no-vulnerable -- safe\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar $TypeError = TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (isCallable(exec)) {\n var result = call(exec, R, S);\n if (result !== null) anObject(result);\n return result;\n }\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n throw new $TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = isObject(searchValue) ? getMethod(searchValue, REPLACE) : undefined;\n return replacer\n ? call(replacer, searchValue, O, replaceValue)\n : call(nativeReplace, toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue == 'string' &&\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n stringIndexOf(replaceValue, '$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n var fullUnicode;\n if (global) {\n fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n\n var results = [];\n var result;\n while (true) {\n result = regExpExec(rx, S);\n if (result === null) break;\n\n push(results, result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n var captures = [];\n var replacement;\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = concat([matched], captures, position, S);\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n replacement = toString(apply(replaceValue, undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n\n return accumulatedResult + stringSlice(S, nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","'use strict';\n// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar ltrim = RegExp('^[' + whitespaces + ']+');\nvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '$1');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","'use strict';\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","'use strict';\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","'use strict';\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) === 'RegExp');\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar hasOwn = require('../internals/has-own-property');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (R) {\n var flags = R.flags;\n return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R)\n ? call(regExpFlags, R) : flags;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (Target, Source, key) {\n key in Target || defineProperty(Target, key, {\n configurable: true,\n get: function () { return Source[key]; },\n set: function (it) { Source[key] = it; }\n });\n};\n","'use strict';\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineBuiltInAccessor(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar globalThis = require('../internals/global-this');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar create = require('../internals/object-create');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isRegExp = require('../internals/is-regexp');\nvar toString = require('../internals/to-string');\nvar getRegExpFlags = require('../internals/regexp-get-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar proxyAccessor = require('../internals/proxy-accessor');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar setSpecies = require('../internals/set-species');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar MATCH = wellKnownSymbol('match');\nvar NativeRegExp = globalThis.RegExp;\nvar RegExpPrototype = NativeRegExp.prototype;\nvar SyntaxError = globalThis.SyntaxError;\nvar exec = uncurryThis(RegExpPrototype.exec);\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n// TODO: Use only proper RegExpIdentifierName\nvar IS_NCG = /^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/;\nvar re1 = /a/g;\nvar re2 = /a/g;\n\n// \"new\" should create a new object, old webkit bug\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\n\nvar MISSED_STICKY = stickyHelpers.MISSED_STICKY;\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\n\nvar BASE_FORCED = DESCRIPTORS &&\n (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {\n re2[MATCH] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n // eslint-disable-next-line sonarjs/inconsistent-function-call -- required for testing\n return NativeRegExp(re1) !== re1 || NativeRegExp(re2) === re2 || String(NativeRegExp(re1, 'i')) !== '/a/i';\n }));\n\nvar handleDotAll = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var brackets = false;\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n result += chr + charAt(string, ++index);\n continue;\n }\n if (!brackets && chr === '.') {\n result += '[\\\\s\\\\S]';\n } else {\n if (chr === '[') {\n brackets = true;\n } else if (chr === ']') {\n brackets = false;\n } result += chr;\n }\n } return result;\n};\n\nvar handleNCG = function (string) {\n var length = string.length;\n var index = 0;\n var result = '';\n var named = [];\n var names = create(null);\n var brackets = false;\n var ncg = false;\n var groupid = 0;\n var groupname = '';\n var chr;\n for (; index <= length; index++) {\n chr = charAt(string, index);\n if (chr === '\\\\') {\n chr += charAt(string, ++index);\n } else if (chr === ']') {\n brackets = false;\n } else if (!brackets) switch (true) {\n case chr === '[':\n brackets = true;\n break;\n case chr === '(':\n result += chr;\n // ignore non-capturing groups\n if (stringSlice(string, index + 1, index + 3) === '?:') {\n continue;\n }\n if (exec(IS_NCG, stringSlice(string, index + 1))) {\n index += 2;\n ncg = true;\n }\n groupid++;\n continue;\n case chr === '>' && ncg:\n if (groupname === '' || hasOwn(names, groupname)) {\n throw new SyntaxError('Invalid capture group name');\n }\n names[groupname] = true;\n named[named.length] = [groupname, groupid];\n ncg = false;\n groupname = '';\n continue;\n }\n if (ncg) groupname += chr;\n else result += chr;\n } return [result, named];\n};\n\n// `RegExp` constructor\n// https://tc39.es/ecma262/#sec-regexp-constructor\nif (isForced('RegExp', BASE_FORCED)) {\n var RegExpWrapper = function RegExp(pattern, flags) {\n var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);\n var patternIsRegExp = isRegExp(pattern);\n var flagsAreUndefined = flags === undefined;\n var groups = [];\n var rawPattern = pattern;\n var rawFlags, dotAll, sticky, handled, result, state;\n\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\n return pattern;\n }\n\n if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {\n pattern = pattern.source;\n if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);\n }\n\n pattern = pattern === undefined ? '' : toString(pattern);\n flags = flags === undefined ? '' : toString(flags);\n rawPattern = pattern;\n\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\n dotAll = !!flags && stringIndexOf(flags, 's') > -1;\n if (dotAll) flags = replace(flags, /s/g, '');\n }\n\n rawFlags = flags;\n\n if (MISSED_STICKY && 'sticky' in re1) {\n sticky = !!flags && stringIndexOf(flags, 'y') > -1;\n if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');\n }\n\n if (UNSUPPORTED_NCG) {\n handled = handleNCG(pattern);\n pattern = handled[0];\n groups = handled[1];\n }\n\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\n\n if (dotAll || sticky || groups.length) {\n state = enforceInternalState(result);\n if (dotAll) {\n state.dotAll = true;\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\n }\n if (sticky) state.sticky = true;\n if (groups.length) state.groups = groups;\n }\n\n if (pattern !== rawPattern) try {\n // fails in old engines, but we have no alternatives for unsupported regex syntax\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\n } catch (error) { /* empty */ }\n\n return result;\n };\n\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\n proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]);\n }\n\n RegExpPrototype.constructor = RegExpWrapper;\n RegExpWrapper.prototype = RegExpPrototype;\n defineBuiltIn(globalThis, 'RegExp', RegExpWrapper, { constructor: true });\n}\n\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\nsetSpecies('RegExp');\n","'use strict';\nvar globalThis = require('../internals/global-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = globalThis.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","export interface GrammarRule {\n regexp: RegExp;\n replacement: string;\n labelPlaceholder?: number;\n}\n\nexport interface HTMLBlockRule {\n start: RegExp;\n end: RegExp | false;\n paraInterrupt: boolean;\n}\n\nexport interface InlineCommand {\n type: 'inline';\n className: string;\n set: {\n pre: string;\n post: string;\n };\n unset: {\n prePattern: RegExp;\n postPattern: RegExp;\n };\n}\n\nexport interface LineCommand {\n type: 'line';\n className: string;\n set: {\n pattern: RegExp;\n replacement: string;\n };\n unset: {\n pattern: RegExp;\n replacement: string;\n };\n}\n\nexport type Command = InlineCommand | LineCommand;\n\nconst replacements: Record<string, RegExp> = {\n ASCIIPunctuation: /[!\"#$%&'()*+,\\-./:;<=>?@[\\]^_`{|}~\\\\]/,\n // Newlines are excluded so that, when a paragraph spanning multiple source lines is parsed as\n // one joined string, a soft line break (\\n) terminates the current text run and can be handled\n // explicitly as a line break rather than being swallowed into a default token.\n NotTriggerChar: /[^`_*[\\]()<>!~\\n]/,\n Scheme: /[A-Za-z][A-Za-z0-9+.-]{1,31}/,\n 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])?)*/, // From CommonMark spec\n HTMLOpenTag: /<HTMLTagName(?:HTMLAttribute)*\\s*\\/?>/,\n HTMLCloseTag: /<\\/HTMLTagName\\s*>/,\n HTMLTagName: /[A-Za-z][A-Za-z0-9-]*/, \n HTMLComment: /<!--(?:[^>-]|(?:[^>-](?:[^-]|-[^-])*[^-]))-->/,\n HTMLPI: /<\\?(?:|.|(?:[^?]|\\?[^>])*)\\?>/,\n HTMLDeclaration: /<![A-Z]+\\s[^>]*>/,\n HTMLCDATA: /<!\\[CDATA\\[.*?\\]\\]>/,\n HTMLAttribute: /\\s+[A-Za-z_:][A-Za-z0-9_.:-]*(?:HTMLAttValue)?/,\n HTMLAttValue: /\\s*=\\s*(?:(?:'[^']*')|(?:\"[^\"]*\")|(?:[^\\s\"'=<>`]+))/,\n KnownTag: /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|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul/\n};\n\n// From CommonMark.js. \nexport const punctuationLeading = new RegExp(/^(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])/);\n\nexport const punctuationTrailing = new RegExp(/(?:[!\"#$%&'()*+,\\-./:;<=>?@[\\]\\\\^_`{|}~\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u0AF0\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166D\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E42\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]|\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC9\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDF3C-\\uDF3E]|\\uD809[\\uDC70-\\uDC74]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B])$/);\n\n/**\n * Standalone regular expressions used by the editor logic (TinyMDE.ts) that aren't part of the\n * block / inline grammar tables above. Centralized here so every pattern the editor relies on lives\n * in one place. Patterns flagged `g` are only ever used with String.prototype.replace(), which\n * resets lastIndex, so sharing a single instance across call sites is safe.\n */\nexport const editorRegExp: Record<string, RegExp> = {\n // Platform detection and line splitting.\n macPlatform: /Mac|iPod|iPhone|iPad/,\n lineSplit: /(?:\\r\\n|\\r|\\n)/,\n\n // Replacement-template placeholder substitution.\n replacementPlaceholder: /(\\${1,2})([0-9])/g, // $N (literal) or $$N (inline content)\n inlineContentPlaceholder: /\\$\\$([0-9])/, // locate the $$N inline-content placeholder\n inlineReplacementPlaceholder: /\\$([1-9])/g, // single-$ placeholder in merged inline grammar\n\n // Blank / whitespace helpers.\n blankContent: /^\\s*$/,\n leadingWhitespace: /^\\s/,\n trailingWhitespace: /\\s$/,\n leadingWhitespaceRun: /^\\s+/,\n surroundingWhitespace: /^(?<leading>\\s*).*\\S(?<trailing>\\s*)$/,\n\n // List / task list items.\n taskListItem: /^(\\[)([ xX])(\\])(\\s|$)([\\s\\S]*)$/,\n orderedListNumber: /\\d{1,9}/,\n\n // Opening tag name of an inline HTML element.\n inlineTagName: /^<\\s*([a-zA-Z][a-zA-Z0-9]*)/,\n\n // Event type matching (addEventListener).\n changeEvent: /^(?:change|input)$/i,\n selectionEvent: /^(?:selection|selectionchange)$/i,\n dropEvent: /^(?:drop)$/i,\n\n // Inline emphasis / strikethrough delimiters and the extended-autolink boundary.\n autolinkPrecedingChar: /[\\s*_~(]/,\n emphasisDelimiter: /(^\\*+)|(^_+)/,\n strikethroughDelimiter: /^~~/,\n\n // GFM extended (non-delimited) autolinks.\n autolinkScheme: /^(?:https?|ftp):\\/\\//i,\n autolinkWww: /^www\\./i,\n autolinkDomain: /^[a-zA-Z0-9_-]+(?:\\.[a-zA-Z0-9_-]+)+/,\n autolinkPath: /^[^\\s<]*/,\n autolinkProtocol: /^(?:mailto|xmpp):/i,\n autolinkXmpp: /^xmpp:/i,\n autolinkXmppResource: /^\\/[a-zA-Z0-9@.\\-_]+/,\n autolinkEmail: /^[a-zA-Z0-9.\\-_+]+@[a-zA-Z0-9_-]+(?:\\.[a-zA-Z0-9_-]+)+/,\n emailTrailingChar: /[-_]$/,\n emailTld: /\\.[a-zA-Z0-9]+$/,\n\n // Link / image destination parser (character-by-character scanning).\n linkClosingBracket: /^\\]/,\n openingAngle: /^</,\n closingAngle: /^>/,\n titleQuote: /^[\"']/,\n openingParen: /^\\(/,\n closingParen: /^\\)/,\n endsWithOpenAngle: /<$/,\n containsOpenAngle: /</,\n anyChar: /^./,\n};\n\n/**\n * This is CommonMark's block grammar, but we're ignoring nested blocks here.\n */\nexport const lineGrammar: Record<string, GrammarRule> = {\n TMH1: { \n regexp: /^( {0,3}#\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH1\">$1</span>$$2<span class=\"TMMark TMMark_TMH1\">$3</span>'\n },\n TMH2: { \n regexp: /^( {0,3}##\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH2\">$1</span>$$2<span class=\"TMMark TMMark_TMH2\">$3</span>'\n },\n TMH3: { \n regexp: /^( {0,3}###\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH3\">$1</span>$$2<span class=\"TMMark TMMark_TMH3\">$3</span>'\n },\n TMH4: { \n regexp: /^( {0,3}####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH4\">$1</span>$$2<span class=\"TMMark TMMark_TMH4\">$3</span>'\n },\n TMH5: { \n regexp: /^( {0,3}#####\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH5\">$1</span>$$2<span class=\"TMMark TMMark_TMH5\">$3</span>'\n },\n TMH6: { \n regexp: /^( {0,3}######\\s)(.*?)((?:\\s+#+\\s*)?)$/, \n replacement: '<span class=\"TMMark TMMark_TMH6\">$1</span>$$2<span class=\"TMMark TMMark_TMH6\">$3</span>'\n },\n TMBlockquote: { \n regexp: /^( {0,3}>[ ]?)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMBlockquote\">$1</span>$$2'\n },\n TMCodeFenceBacktickOpen: { \n regexp: /^( {0,3}(?<seq>````*)\\s*)([^`]*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceTildeOpen: { \n regexp: /^( {0,3}(?<seq>~~~~*)\\s*)(.*?)(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span><span class=\"TMInfoString\">$3</span>$4'\n },\n TMCodeFenceBacktickClose: { \n regexp: /^( {0,3}(?<seq>````*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceBacktick\">$1</span>$3'\n },\n TMCodeFenceTildeClose: { \n regexp: /^( {0,3}(?<seq>~~~~*))(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMCodeFenceTilde\">$1</span>$3'\n },\n TMBlankLine: { \n regexp: /^([ \\t]*)$/, \n replacement: '$0'\n },\n TMSetextH1Marker: { \n regexp: /^ {0,3}=+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMSetextH2Marker: { \n regexp: /^ {0,3}-+\\s*$/, \n replacement: '<span class=\"TMMark TMMark_TMSetextH1Marker\">$0</span>'\n },\n TMHR: { \n regexp: /^( {0,3}(\\*[ \\t]*\\*[ \\t]*\\*[ \\t*]*)|(-[ \\t]*-[ \\t]*-[ \\t-]*)|(_[ \\t]*_[ \\t]*_[ \\t_]*))$/, \n replacement: '<span class=\"TMMark TMMark_TMHR\">$0</span>'\n },\n TMUL: { \n regexp: /^( {0,3}[+*-] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMUL\">$1</span>$$2'\n },\n TMOL: { \n regexp: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMOL\">$1</span>$$2'\n },\n // TODO: This is currently preventing sublists (and any content within list items, really) from working\n TMIndentedCode: { \n regexp: /^( {4}|\\t)(.*)$/, \n replacement: '<span class=\"TMMark TMMark_TMIndentedCode\">$1</span>$2'\n },\n TMLinkReferenceDefinition: {\n // TODO: Link destination can't include unbalanced parantheses, but we just ignore that here \n regexp: /^( {0,3}\\[\\s*)([^\\s\\]](?:[^\\]]|\\\\\\])*?)(\\s*\\]:\\s*)((?:[^\\s<>]+)|(?:<(?:[^<>\\\\]|\\\\.)*>))?(\\s*)((?:\\((?:[^()\\\\]|\\\\.)*\\))|(?:\"(?:[^\"\\\\]|\\\\.)*\")|(?:'(?:[^'\\\\]|\\\\.)*'))?(\\s*)$/, \n replacement: '<span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$1</span><span class=\"TMLinkLabel TMLinkLabel_Definition\">$2</span><span class=\"TMMark TMMark_TMLinkReferenceDefinition\">$3</span><span class=\"TMLinkDestination\">$4</span>$5<span class=\"TMLinkTitle\">$6</span>$7',\n labelPlaceholder: 2, // this defines which placeholder in the above regex is the link \"label\"\n },\n};\n\n/**\n * HTML blocks have multiple different classes of opener and closer. This array defines all the cases\n */\nexport const htmlBlockGrammar: HTMLBlockRule[] = [\n { start: /^ {0,3}<(?:script|pre|style)(?:\\s|>|$)/i, end: /(?:<\\/script>|<\\/pre>|<\\/style>)/i, paraInterrupt: true },\n { start: /^ {0,3}<!--/, end: /-->/, paraInterrupt: true },\n { start: /^ {0,3}<\\?/, end: /\\?>/, paraInterrupt: true },\n { start: /^ {0,3}<![A-Z]/, end: />/, paraInterrupt : true},\n { start: /^ {0,3}<!\\[CDATA\\[/, end: /\\]\\]>/, paraInterrupt : true},\n { start: /^ {0,3}(?:<|<\\/)(?:KnownTag)(?:\\s|>|\\/>|$)/i, end: false, paraInterrupt: true},\n { start: /^ {0,3}(?:HTMLOpenTag|HTMLCloseTag)\\s*$/, end: false, paraInterrupt: false},\n];\n\n/**\n * Structure of the object:\n * Top level entries are rules, each consisting of a regular expressions (in string format) as well as a replacement.\n * In the regular expressions, replacements from the object 'replacements' will be processed before compiling into the property regexp.\n */\nexport const inlineGrammar: Record<string, GrammarRule> = {\n escape : {\n regexp: /^\\\\(ASCIIPunctuation)/,\n replacement : '<span class=\"TMMark TMMark_TMEscape\">\\\\</span>$1'\n },\n code : {\n regexp: /^(`+)((?:[^`])|(?:[^`].*?[^`]))(\\1)/,\n replacement : '<span class=\"TMMark TMMark_TMCode\">$1</span><code class=\"TMCode\">$2</code><span class=\"TMMark TMMark_TMCode\">$3</span>' \n },\n autolink : {\n regexp: /^<((?:Scheme:[^\\s<>]*)|(?:Email))>/,\n replacement: '<span class=\"TMMark TMMark_TMAutolink\"><</span><span class=\"TMAutolink\">$1</span><span class=\"TMMark TMMark_TMAutolink\">></span>'\n },\n html : {\n regexp: /^((?:HTMLOpenTag)|(?:HTMLCloseTag)|(?:HTMLComment)|(?:HTMLPI)|(?:HTMLDeclaration)|(?:HTMLCDATA))/,\n replacement: '<span class=\"TMHTML\">$1</span>',\n },\n linkOpen : {\n regexp: /^\\[/,\n replacement: ''\n },\n imageOpen : {\n regexp: /^!\\[/,\n replacement : ''\n },\n linkLabel : {\n regexp: /^(\\[\\s*)([^\\]]*?)(\\s*\\])/,\n replacement: '',\n labelPlaceholder: 2\n },\n default : {\n regexp: /^(.|(?:NotTriggerChar+))/,\n replacement: '$1'\n }\n};\n\n// Process replacements in regexps\nconst replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n\n// Inline\nconst inlineRules = [...Object.keys(inlineGrammar)];\nfor (let rule of inlineRules) {\n let re = inlineGrammar[rule].regexp.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n inlineGrammar[rule].regexp = new RegExp(re, inlineGrammar[rule].regexp.flags);\n}\n\n// HTML Block (only opening rule is processed currently)\nfor (let rule of htmlBlockGrammar) {\n let re = rule.start.source;\n // Replace while there is something to replace. This means it also works over multiple levels (replacements containing replacements)\n while (re.match(replacementRegexp)) {\n re = re.replace(replacementRegexp, (string) => { return replacements[string].source; });\n }\n rule.start = new RegExp(re, rule.start.flags);\n}\n\n/**\n * Creates a merged inline grammar by combining the default inline grammar with custom rules.\n * Custom rules are processed and their regexp patterns are expanded with replacements.\n * @param customRules - Object containing custom inline grammar rules\n * @returns Merged inline grammar object\n */\nexport function createMergedInlineGrammar(customRules: Record<string, GrammarRule> = {}): Record<string, GrammarRule> {\n const merged = { ...inlineGrammar };\n \n // Process custom rules\n for (const [ruleName, rule] of Object.entries(customRules)) {\n // Copy the rule to avoid modifying the original\n const processedRule = { ...rule };\n \n // Process replacements in the regexp\n let regexpSource = rule.regexp.source;\n const replacementRegexp = new RegExp(Object.keys(replacements).join('|'));\n \n // Replace while there is something to replace\n while (regexpSource.match(replacementRegexp)) {\n regexpSource = regexpSource.replace(replacementRegexp, (match) => {\n return replacements[match].source;\n });\n }\n \n processedRule.regexp = new RegExp(regexpSource, rule.regexp.flags);\n merged[ruleName] = processedRule;\n }\n \n return merged;\n}\n\n/**\n * Escapes HTML special characters (<, >, and &) in the string.\n * @param {string} string The raw string to be escaped\n * @returns {string} The string, ready to be used in HTML\n */\nexport function htmlescape(string: string): string {\n return (string ? string : '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n}\n\n/**\n * Contains the commands that can be sent to the editor. Contains objects with a name representing the name of the command.\n * Each of the objects contains the following keys:\n * \n * - type: Can be either inline (for inline formatting) or line (for block / line formatting).\n * - className: Used to determine whether the command is active at a given position. \n * For line formatting, this looks at the class of the line element. For inline elements, tries to find an enclosing element with that class.\n * - set / unset: Contain instructions how to set and unset the command. For line type commands, both consist of a pattern and replacement that \n * will be applied to each line (using String.replace). For inline type commands, the set object contains a pre and post string which will\n * be inserted before and after the selection. The unset object contains a prePattern and a postPattern. Both should be regular expressions and \n * they will be applied to the portion of the line before and after the selection (using String.replace, with an empty replacement string).\n */\nexport const commands: Record<string, Command> = {\n // Replacements for unset for inline commands are '' by default\n bold: {\n type: 'inline', \n className: 'TMStrong', \n set: {pre: '**', post: '**'}, \n unset: {prePattern: /(?:\\*\\*|__)$/, postPattern: /^(?:\\*\\*|__)/}\n }, \n italic: {\n type: 'inline', \n className: 'TMEm', \n set: {pre: '*', post: '*'}, \n unset: {prePattern: /(?:\\*|_)$/, postPattern: /^(?:\\*|_)/}\n },\n code: {\n type: 'inline', \n className: 'TMCode', \n set: {pre: '`', post: '`'}, \n unset: {prePattern: /`+$/, postPattern: /^`+/} // FIXME this doesn't ensure balanced backticks right now\n }, \n strikethrough: {\n type: 'inline', \n className: 'TMStrikethrough', \n set: {pre: '~~', post: '~~'}, \n unset: {prePattern:/~~$/, postPattern: /^~~/ }\n },\n h1: {\n type: 'line', \n className: 'TMH1', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '# $2'}, \n unset: {pattern: /^( {0,3}#\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h2: {\n type: 'line', \n className: 'TMH2', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '## $2'}, \n unset: {pattern: /^( {0,3}##\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h3: {\n type: 'line', \n className: 'TMH3', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '### $2'}, \n unset: {pattern: /^( {0,3}###\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h4: {\n type: 'line', \n className: 'TMH4', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '#### $2'}, \n unset: {pattern: /^( {0,3}####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h5: {\n type: 'line', \n className: 'TMH5', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '##### $2'}, \n unset: {pattern: /^( {0,3}#####\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n h6: {\n type: 'line', \n className: 'TMH6', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '###### $2'}, \n unset: {pattern: /^( {0,3}######\\s+)(.*?)((?:\\s+#+\\s*)?)$/, replacement: '$2'}\n },\n ul: {\n type: 'line', \n className: 'TMUL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '- $2'}, \n unset: {pattern: /^( {0,3}[+*-] {1,4})(.*)$/, replacement: '$2'}\n },\n ol: {\n type: 'line', \n className: 'TMOL', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '$#. $2'}, \n unset: {pattern: /^( {0,3}\\d{1,9}[.)] {1,4})(.*)$/, replacement: '$2'}\n }, \n blockquote: {\n type: 'line', \n className: 'TMBlockquote', \n set: {pattern: /^( {0,3}(?:(?:#+|[0-9]{1,9}[).]|[>\\-*+])\\s+)?)(.*)$/, replacement: '> $2'}, \n unset: {pattern: /^( {0,3}>[ ]?)(.*)$/, replacement: '$2'}\n },\n};","import {\n inlineGrammar,\n lineGrammar,\n punctuationLeading,\n punctuationTrailing,\n editorRegExp,\n htmlescape,\n htmlBlockGrammar,\n commands,\n HTMLBlockRule,\n Command,\n LineCommand,\n GrammarRule,\n createMergedInlineGrammar,\n} from \"./grammar\";\n\nexport interface EditorProps {\n element?: string | HTMLElement;\n editor?: string | HTMLElement;\n content?: string;\n textarea?: string | HTMLTextAreaElement;\n customInlineGrammar?: Record<string, GrammarRule>;\n placeholder?: string;\n}\n\nexport interface Position {\n row: number;\n col: number;\n}\n\nexport interface HistoryState {\n content: string;\n selection: Position | null;\n anchor: Position | null;\n}\n\nexport interface ChangeEvent {\n content: string;\n linesDirty: boolean[];\n}\n\nexport interface SelectionEvent {\n focus: Position;\n anchor: Position;\n commandState: Record<string, boolean | null>;\n}\n\nexport interface DropEvent {\n dataTransfer: DataTransfer;\n}\n\ntype EventType = 'change' | 'selection' | 'drop';\ntype EventHandler<T> = (event: T) => void;\n\nexport class Editor {\n public e: HTMLDivElement | null = null;\n public textarea: HTMLTextAreaElement | null = null;\n public lines: string[] = [];\n public lineElements: NodeListOf<ChildNode> | HTMLCollection | ChildNode[] = [];\n public lineTypes: string[] = [];\n public lineCaptures: RegExpExecArray[] = [];\n public lineReplacements: string[] = [];\n public linkLabels: string[] = [];\n public lineDirty: boolean[] = [];\n public lastCommandState: Record<string, boolean | null> | null = null;\n private customInlineGrammar: Record<string, GrammarRule> = {};\n private mergedInlineGrammar: Record<string, GrammarRule> = inlineGrammar;\n private hasFocus: boolean = true;\n private lastSelection: { focus: Position | null; anchor: Position | null } | null = null;\n private placeholder: string | undefined;\n\n public listeners: {\n change: EventHandler<ChangeEvent>[];\n selection: EventHandler<SelectionEvent>[];\n drop: EventHandler<DropEvent>[];\n } = {\n change: [],\n selection: [],\n drop: [],\n };\n\n private undoStack: HistoryState[] = [];\n private redoStack: HistoryState[] = [];\n private isRestoringHistory: boolean = false;\n private maxHistory: number = 100;\n\n constructor(props: EditorProps = {}) {\n this.e = null;\n this.textarea = null;\n this.lines = [];\n this.lineElements = [] as ChildNode[];\n this.lineTypes = [];\n this.lineCaptures = [];\n this.lineReplacements = [];\n this.linkLabels = [];\n this.lineDirty = [];\n this.lastCommandState = null;\n this.hasFocus = true;\n this.lastSelection = null;\n this.customInlineGrammar = props.customInlineGrammar || {};\n this.mergedInlineGrammar = createMergedInlineGrammar(this.customInlineGrammar);\n\n this.listeners = {\n change: [],\n selection: [],\n drop: [],\n };\n\n let element: HTMLElement | null = null;\n if (typeof props.element === 'string') {\n element = document.getElementById(props.element);\n } else if (props.element) {\n element = props.element;\n }\n\n if (typeof props.textarea === 'string') {\n this.textarea = document.getElementById(props.textarea) as HTMLTextAreaElement;\n } else if (props.textarea) {\n this.textarea = props.textarea;\n }\n\n if (this.textarea) {\n if (!element) element = this.textarea;\n }\n\n if (!element) {\n element = document.getElementsByTagName(\"body\")[0];\n }\n if (element && element.tagName === \"TEXTAREA\") {\n this.textarea = element as HTMLTextAreaElement;\n element = this.textarea.parentNode as HTMLElement;\n }\n\n if (this.textarea) {\n this.textarea.style.display = \"none\";\n }\n\n this.placeholder = props.placeholder !== undefined\n ? props.placeholder\n : this.textarea?.placeholder || undefined;\n\n this.undoStack = [];\n this.redoStack = [];\n this.isRestoringHistory = false;\n this.maxHistory = 100;\n\n this.createEditorElement(element, props);\n this.setContent(\n typeof props.content === \"string\"\n ? props.content\n : this.textarea\n ? this.textarea.value\n : \"# Hello TinyMDE!\\nEdit **here**\"\n );\n \n this.e!.addEventListener(\"keydown\", (e) => this.handleUndoRedoKey(e));\n }\n\n get canUndo(): boolean {\n return this.undoStack.length >= 2;\n }\n\n get canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n private pushHistory(): void {\n if (this.isRestoringHistory) return;\n this.pushCurrentState();\n this.redoStack = [];\n }\n\n private pushCurrentState(): void {\n this.undoStack.push({\n content: this.getContent(),\n selection: this.getSelection(),\n anchor: this.getSelection(true),\n });\n if (this.undoStack.length > this.maxHistory) this.undoStack.shift();\n }\n\n public undo(): void {\n if (this.undoStack.length < 2) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const current = this.undoStack.pop()!;\n this.redoStack.push(current);\n const prev = this.undoStack[this.undoStack.length - 1];\n this.setContent(prev.content);\n if (prev.selection) this.setSelection(prev.selection, prev.anchor);\n this.undoStack.pop();\n this.isRestoringHistory = false;\n }\n\n public redo(): void {\n if (!this.redoStack.length) return;\n this.isRestoringHistory = true;\n this.pushCurrentState();\n const next = this.redoStack.pop()!;\n this.setContent(next.content);\n if (next.selection) this.setSelection(next.selection, next.anchor);\n this.isRestoringHistory = false;\n }\n\n private handleUndoRedoKey(e: KeyboardEvent): void {\n const isMac = editorRegExp.macPlatform.test(navigator.platform);\n const ctrl = isMac ? e.metaKey : e.ctrlKey;\n if (ctrl && !e.altKey) {\n if (e.key === \"z\" || e.key === \"Z\") {\n if (e.shiftKey) {\n this.redo();\n } else {\n this.undo();\n }\n e.preventDefault();\n } else if (e.key === \"y\" || e.key === \"Y\") {\n this.redo();\n e.preventDefault();\n }\n }\n }\n\n private createEditorElement(element: HTMLElement, props: EditorProps): void {\n if (props && props.editor !== undefined) {\n if (typeof props.editor === 'string') {\n this.e = document.getElementById(props.editor) as HTMLDivElement;\n } else {\n this.e = props.editor as HTMLDivElement;\n }\n } else {\n this.e = document.createElement(\"div\");\n }\n\n this.e.classList.add(\"TinyMDE\");\n this.e.contentEditable = \"true\";\n this.e.style.whiteSpace = \"pre-wrap\";\n (this.e.style as any).webkitUserModify = \"read-write-plaintext-only\";\n\n if (this.placeholder) {\n this.e.setAttribute(\"data-placeholder\", this.placeholder);\n }\n\n if (props.editor === undefined) {\n if (\n this.textarea &&\n this.textarea.parentNode === element &&\n this.textarea.nextSibling\n ) {\n element.insertBefore(this.e, this.textarea.nextSibling);\n } else {\n element.appendChild(this.e);\n }\n }\n\n this.e.addEventListener(\"input\", (e) => this.handleInputEvent(e));\n this.e.addEventListener(\"beforeinput\", (e) => this.handleBeforeInputEvent(e));\n this.e.addEventListener(\"compositionend\", (e) => this.handleInputEvent(e));\n document.addEventListener(\"selectionchange\", (e) => {\n if (this.hasFocus) { this.handleSelectionChangeEvent(e); }\n }\n );\n this.e.addEventListener(\"blur\", () => this.hasFocus = false );\n this.e.addEventListener(\"focus\", () => this.hasFocus = true );\n this.e.addEventListener(\"paste\", (e) => this.handlePaste(e));\n this.e.addEventListener(\"drop\", (e) => this.handleDrop(e));\n this.e.addEventListener(\"click\", (e) => this.handleClick(e));\n this.lineElements = this.e.childNodes;\n }\n\n public setContent(content: string): void {\n while (this.e!.firstChild) {\n this.e!.removeChild(this.e!.firstChild);\n }\n this.lines = content.split(editorRegExp.lineSplit);\n this.lineDirty = [];\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let le = document.createElement(\"div\");\n this.e!.appendChild(le);\n this.lineDirty.push(true);\n }\n this.lineTypes = new Array(this.lines.length);\n this.updateFormatting();\n this.updatePlaceholder();\n this.fireChange();\n if (!this.isRestoringHistory) this.pushHistory();\n }\n\n public getContent(): string {\n return this.lines.join(\"\\n\");\n }\n\n private updatePlaceholder(): void {\n if (!this.placeholder || !this.e) return;\n if (this.getContent() === \"\") {\n this.e.classList.add(\"TinyMDE_empty\");\n } else {\n this.e.classList.remove(\"TinyMDE_empty\");\n }\n }\n\n private updateFormatting(): void {\n this.updateLineTypes();\n this.updateLinkLabels();\n this.applyLineTypes();\n }\n\n private updateLinkLabels(): void {\n this.linkLabels = [];\n for (let l = 0; l < this.lines.length; l++) {\n if (this.lineTypes[l] === \"TMLinkReferenceDefinition\") {\n this.linkLabels.push(\n this.lineCaptures[l][\n lineGrammar.TMLinkReferenceDefinition.labelPlaceholder!\n ]\n );\n }\n }\n }\n\n private replace(replacement: string, capture: RegExpExecArray): string {\n return replacement.replace(editorRegExp.replacementPlaceholder, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else\n return `<span class=\"TMInlineFormatted\">${this.processInlineStyles(\n capture[parseInt(p2)]\n )}</span>`;\n });\n }\n\n private applyLineTypes(): void {\n let lineNum = 0;\n while (lineNum < this.lines.length) {\n // A \"block\" whose text flows across several source lines (a paragraph, a multi-line\n // blockquote, or a list item with wrapped/lazy-continuation lines) is rendered as one\n // inline-parsing unit so that inline styles (bold, italic, ...) can span the soft line\n // breaks between its lines.\n if (this.isInlineGroupLeader(lineNum)) {\n const leaderType = this.lineTypes[lineNum];\n let end = lineNum;\n while (\n end + 1 < this.lines.length &&\n this.isInlineContinuation(end + 1, leaderType)\n ) {\n end++;\n }\n this.applyInlineGroup(lineNum, end);\n lineNum = end + 1;\n } else {\n this.applyLine(lineNum);\n lineNum++;\n }\n }\n }\n\n /** A line that can begin a multi-line inline group (a paragraph-bearing block). */\n private isInlineGroupLeader(lineNum: number): boolean {\n const t = this.lineTypes[lineNum];\n if (t === \"TMPara\" || t === \"TMUL\" || t === \"TMOL\") return true;\n // A blockquote line whose content is blank is a paragraph break inside the quote, so it\n // doesn't start (or join) a group.\n if (t === \"TMBlockquote\") return !this.isBlankBlockquoteContent(lineNum);\n return false;\n }\n\n /** Whether `lineNum` continues the inline group whose leader has type `leaderType`. */\n private isInlineContinuation(lineNum: number, leaderType: string): boolean {\n const t = this.lineTypes[lineNum];\n // A plain paragraph line is a lazy continuation of the preceding block (paragraph, list item,\n // or blockquote). Consecutive list markers (TMUL/TMOL), by contrast, each start a new item\n // and therefore do NOT continue the group.\n if (t === \"TMPara\") return true;\n if (t === \"TMBlockquote\" && leaderType === \"TMBlockquote\")\n return !this.isBlankBlockquoteContent(lineNum);\n return false;\n }\n\n /** True when a blockquote line carries no (non-whitespace) content, e.g. `>` or `> `. */\n private isBlankBlockquoteContent(lineNum: number): boolean {\n const cap = this.lineCaptures[lineNum];\n const content = cap && cap[2] !== undefined ? cap[2] : \"\";\n return editorRegExp.blankContent.test(content);\n }\n\n private applyLine(lineNum: number): void {\n const el = this.lineElements[lineNum] as HTMLElement;\n if (this.lineDirty[lineNum]) {\n let contentHTML = this.replace(\n this.lineReplacements[lineNum],\n this.lineCaptures[lineNum]\n );\n el.className = this.lineTypes[lineNum];\n el.removeAttribute(\"style\");\n el.innerHTML = contentHTML === \"\" ? \"<br />\" : contentHTML;\n // This line is no longer rendered as part of a multi-line inline group.\n delete el.dataset.mlSig;\n }\n el.dataset.lineNum = lineNum.toString();\n }\n\n /**\n * Renders a group of lines [start..end] that together form one inline-parsing unit. The inline\n * content of each line (the `$$N` portion of its replacement — the whole line for a paragraph,\n * the text after the marker for a list item or blockquote) is joined with newlines and parsed as\n * a single unit, so inline styles can span the soft line breaks. The resulting HTML is split back\n * into one fragment per line; any element still open at a line break is closed and re-opened so\n * each line keeps its own well-formed block element. Per-line markers (list bullets, blockquote\n * `>`) are preserved exactly. A single-line group (start === end) renders identically to before.\n */\n private applyInlineGroup(start: number, end: number): void {\n // Signature of every input that affects this group's rendering (line types, replacements and\n // captures — hence the marker prefixes and the inline content). Stored per line element so a\n // group is re-rendered whenever its content, a sibling line, or its boundaries change (e.g. on\n // a split/merge) even if the individual line wasn't separately marked dirty.\n const contents: string[] = [];\n let sigSource = `${end - start}`;\n for (let i = start; i <= end; i++) {\n const idx = this.inlineContentIndex(this.lineReplacements[i]);\n contents.push(this.lineCaptures[i][idx] !== undefined ? this.lineCaptures[i][idx] : \"\");\n sigSource += `\\x1f${this.lineTypes[i]}\\x1f${this.lineReplacements[i]}\\x1f${JSON.stringify(\n this.lineCaptures[i]\n )}`;\n }\n const sig = `${this.hashString(sigSource)}`;\n\n let needsRender = false;\n for (let i = start; i <= end; i++) {\n if (\n this.lineDirty[i] ||\n (this.lineElements[i] as HTMLElement).dataset.mlSig !== sig\n ) {\n needsRender = true;\n break;\n }\n }\n\n if (needsRender) {\n const fragments = this.splitInlineHTMLByLine(\n this.processInlineStyles(contents.join(\"\\n\"))\n );\n for (let i = start; i <= end; i++) {\n const el = this.lineElements[i] as HTMLElement;\n const frag = fragments[i - start] || \"\";\n const contentHTML = this.replaceWithInline(\n this.lineReplacements[i],\n this.lineCaptures[i],\n frag\n );\n el.className = this.lineTypes[i];\n el.removeAttribute(\"style\");\n el.innerHTML = contentHTML === \"\" ? \"<br />\" : contentHTML;\n el.dataset.mlSig = sig;\n }\n }\n\n for (let i = start; i <= end; i++) {\n (this.lineElements[i] as HTMLElement).dataset.lineNum = i.toString();\n }\n }\n\n /** Index of the inline-content placeholder (`$$N`) in a line replacement, or 0 if none. */\n private inlineContentIndex(replacement: string): number {\n const m = editorRegExp.inlineContentPlaceholder.exec(replacement);\n return m ? parseInt(m[1]) : 0;\n }\n\n /**\n * Like replace(), but uses a pre-computed inline fragment for the `$$N` (inline content)\n * placeholder instead of inline-parsing the capture itself. Used for multi-line groups where the\n * inline content was parsed jointly across all lines.\n */\n private replaceWithInline(\n replacement: string,\n capture: RegExpExecArray,\n inlineFragment: string\n ): string {\n return replacement.replace(editorRegExp.replacementPlaceholder, (str, p1, p2) => {\n if (p1 === \"$\") return htmlescape(capture[parseInt(p2)]);\n else return `<span class=\"TMInlineFormatted\">${inlineFragment}</span>`;\n });\n }\n\n /**\n * Splits inline HTML produced for a joined multi-line paragraph back into one fragment per\n * source line (fragments are separated by the `\\n` markers emitted by processInlineStyles).\n * Inline elements that are still open at a line break are closed at the end of the fragment and\n * re-opened at the start of the next one, so that every fragment is independently well-formed\n * while the formatting visually continues across the lines.\n */\n private splitInlineHTMLByLine(html: string): string[] {\n const fragments: string[] = [];\n const openTags: string[] = []; // full opening-tag strings of currently open elements\n let current = \"\";\n let i = 0;\n while (i < html.length) {\n const ch = html[i];\n if (ch === \"\\n\") {\n // Close currently open tags (in reverse) to finish this line's fragment ...\n for (let t = openTags.length - 1; t >= 0; t--) {\n current += `</${this.inlineTagName(openTags[t])}>`;\n }\n fragments.push(current);\n // ... and re-open them (in order) at the start of the next line's fragment.\n current = openTags.join(\"\");\n i++;\n } else if (ch === \"<\") {\n const close = html.indexOf(\">\", i);\n if (close < 0) {\n // Defensive: malformed output, emit the remainder verbatim.\n current += html.substr(i);\n break;\n }\n const tag = html.substring(i, close + 1);\n current += tag;\n if (tag[1] === \"/\") {\n openTags.pop();\n } else if (tag[tag.length - 2] !== \"/\") {\n // Opening tag that isn't self-closing.\n openTags.push(tag);\n }\n i = close + 1;\n } else {\n current += ch;\n i++;\n }\n }\n fragments.push(current);\n return fragments;\n }\n\n private inlineTagName(openTag: string): string {\n const m = editorRegExp.inlineTagName.exec(openTag);\n return m ? m[1] : \"span\";\n }\n\n private hashString(s: string): number {\n let h = 5381;\n for (let i = 0; i < s.length; i++) {\n h = (((h << 5) + h) ^ s.charCodeAt(i)) >>> 0;\n }\n return h;\n }\n\n private updateLineTypes(): void {\n let codeBlockType: string | false = false;\n let codeBlockSeqLength = 0;\n let htmlBlock: HTMLBlockRule | false = false;\n\n for (let lineNum = 0; lineNum < this.lines.length; lineNum++) {\n let lineType = \"TMPara\";\n let lineCapture: RegExpExecArray = [this.lines[lineNum]] as RegExpExecArray;\n let lineReplacement = \"$$0\";\n\n // Check ongoing code blocks\n if (codeBlockType === \"TMCodeFenceBacktickOpen\") {\n let capture = lineGrammar.TMCodeFenceBacktickClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceBacktickClose\";\n lineReplacement = lineGrammar.TMCodeFenceBacktickClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeBacktick\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n } else if (codeBlockType === \"TMCodeFenceTildeOpen\") {\n let capture = lineGrammar.TMCodeFenceTildeClose.regexp.exec(this.lines[lineNum]);\n if (capture && capture.groups![\"seq\"].length >= codeBlockSeqLength) {\n lineType = \"TMCodeFenceTildeClose\";\n lineReplacement = lineGrammar.TMCodeFenceTildeClose.replacement;\n lineCapture = capture;\n codeBlockType = false;\n } else {\n lineType = \"TMFencedCodeTilde\";\n lineReplacement = '<span class=\"TMFencedCode\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n }\n }\n\n // Check HTML block types\n if (lineType === \"TMPara\" && htmlBlock === false) {\n for (let htmlBlockType of htmlBlockGrammar) {\n if (this.lines[lineNum].match(htmlBlockType.start)) {\n if (\n htmlBlockType.paraInterrupt ||\n lineNum === 0 ||\n !(\n this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\"\n )\n ) {\n htmlBlock = htmlBlockType;\n break;\n }\n }\n }\n }\n\n if (htmlBlock !== false) {\n lineType = \"TMHTMLBlock\";\n lineReplacement = '<span class=\"TMHTMLContent\">$0<br /></span>';\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n\n if (htmlBlock.end) {\n if (this.lines[lineNum].match(htmlBlock.end)) {\n htmlBlock = false;\n }\n } else {\n if (\n lineNum === this.lines.length - 1 ||\n this.lines[lineNum + 1].match(lineGrammar.TMBlankLine.regexp)\n ) {\n htmlBlock = false;\n }\n }\n }\n\n // Check all regexps if we haven't applied one of the code block types\n if (lineType === \"TMPara\") {\n for (let type in lineGrammar) {\n if (lineGrammar[type].regexp) {\n let capture = lineGrammar[type].regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = type;\n lineReplacement = lineGrammar[type].replacement;\n lineCapture = capture;\n break;\n }\n }\n }\n }\n\n // If we've opened a code block, remember that\n if (lineType === \"TMCodeFenceBacktickOpen\" || lineType === \"TMCodeFenceTildeOpen\") {\n codeBlockType = lineType;\n codeBlockSeqLength = lineCapture.groups![\"seq\"].length;\n }\n\n // Link reference definition and indented code can't interrupt a paragraph\n if (\n (lineType === \"TMIndentedCode\" || lineType === \"TMLinkReferenceDefinition\") &&\n lineNum > 0 &&\n (this.lineTypes[lineNum - 1] === \"TMPara\" ||\n this.lineTypes[lineNum - 1] === \"TMUL\" ||\n this.lineTypes[lineNum - 1] === \"TMOL\" ||\n this.lineTypes[lineNum - 1] === \"TMBlockquote\")\n ) {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n\n // Setext H2 markers that can also be interpreted as an empty list item should be regarded as such\n if (lineType === \"TMSetextH2Marker\") {\n let capture = lineGrammar.TMUL.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMUL\";\n lineReplacement = lineGrammar.TMUL.replacement;\n lineCapture = capture;\n }\n }\n\n // Setext headings are only valid if preceded by a paragraph\n if (lineType === \"TMSetextH1Marker\" || lineType === \"TMSetextH2Marker\") {\n if (lineNum === 0 || this.lineTypes[lineNum - 1] !== \"TMPara\") {\n let capture = lineGrammar.TMHR.regexp.exec(this.lines[lineNum]);\n if (capture) {\n lineType = \"TMHR\";\n lineCapture = capture;\n lineReplacement = lineGrammar.TMHR.replacement;\n } else {\n lineType = \"TMPara\";\n lineCapture = [this.lines[lineNum]] as RegExpExecArray;\n lineReplacement = \"$$0\";\n }\n } else {\n let headingLine = lineNum - 1;\n const headingLineType = lineType === \"TMSetextH1Marker\" ? \"TMSetextH1\" : \"TMSetextH2\";\n do {\n if (this.lineTypes[headingLine] !== headingLineType) {\n this.lineTypes[headingLine] = headingLineType;\n this.lineDirty[headingLine] = true;\n }\n this.lineReplacements[headingLine] = \"$$0\";\n this.lineCaptures[headingLine] = [this.lines[headingLine]] as RegExpExecArray;\n headingLine--;\n } while (headingLine >= 0 && this.lineTypes[headingLine] === \"TMPara\");\n }\n }\n\n // GFM task list item: a list item whose content begins with a checkbox marker `[ ]`, `[x]`\n // or `[X]` followed by whitespace (or the end of the line). The brackets and separator stay\n // as ordinary TMMark text; only the inner character is rendered as a checkbox (via CSS), so\n // the line's text content still equals its source and the cursor navigates it normally.\n if (lineType === \"TMUL\" || lineType === \"TMOL\") {\n const content = lineCapture[2] !== undefined ? lineCapture[2] : \"\";\n const task = editorRegExp.taskListItem.exec(content);\n if (task) {\n const checked = task[2] !== \" \"; // [x] / [X] are checked, [ ] is not\n const bulletClass = lineType === \"TMUL\" ? \"TMMark_TMUL\" : \"TMMark_TMOL\";\n const boxClass = checked\n ? \"TMCheckbox TMCheckbox_checked\"\n : \"TMCheckbox TMCheckbox_unchecked\";\n // Synthetic capture: [full, bullet, \"[\", inner, \"]\", separator, inline content]. The\n // inline content stays the last `$$N` group so inlineContentIndex()/applyInlineGroup()\n // (and thus multi-line continuation) behave exactly as for a plain list item.\n lineCapture = [\n lineCapture[0],\n lineCapture[1],\n task[1],\n task[2],\n task[3],\n task[4],\n task[5],\n ] as unknown as RegExpExecArray;\n lineReplacement =\n `<span class=\"TMMark ${bulletClass}\">$1</span>` +\n `<span class=\"TMMark TMMark_TMTask\">$2</span>` +\n `<span class=\"${boxClass}\">$3</span>` +\n `<span class=\"TMMark TMMark_TMTask\">$4</span>` +\n `<span class=\"TMMark TMMark_TMTask\">$5</span>` +\n `$$6`;\n }\n }\n\n if (this.lineTypes[lineNum] !== lineType) {\n this.lineTypes[lineNum] = lineType;\n this.lineDirty[lineNum] = true;\n }\n this.lineReplacements[lineNum] = lineReplacement;\n this.lineCaptures[lineNum] = lineCapture;\n }\n }\n\n public getSelection(getAnchor: boolean = false): Position | null {\n const selection = window.getSelection();\n let startNode = getAnchor ? selection!.anchorNode : selection!.focusNode;\n if (!startNode) return null;\n let offset = getAnchor ? selection!.anchorOffset : selection!.focusOffset;\n if (startNode === this.e) {\n if (offset < this.lines.length)\n return {\n row: offset,\n col: 0,\n };\n return {\n row: offset - 1,\n col: this.lines[offset - 1].length,\n };\n }\n\n let col = this.computeColumn(startNode, offset);\n if (col === null) return null;\n\n let node = startNode;\n while (node.parentElement !== this.e) {\n node = node.parentElement!;\n }\n\n let row = 0;\n // If the node doesn't have a previous sibling, it must be the first line\n if (node.previousSibling) {\n const currentLineNumData = (node as HTMLElement).dataset?.lineNum;\n const previousLineNumData = (node.previousSibling as HTMLElement).dataset?.lineNum;\n\n if (currentLineNumData && previousLineNumData) {\n const currentLineNum = parseInt(currentLineNumData);\n const previousLineNum = parseInt(previousLineNumData);\n if (currentLineNum === previousLineNum + 1) {\n row = currentLineNum;\n } else {\n // If the current line is NOT the previous line + 1, then either \n // the current line got split in two or merged with the previous line\n // Either way, we need to recalculate the row number\n while (node.previousSibling) {\n row++;\n node = node.previousSibling;\n }\n }\n }\n }\n \n return { row: row, col: col };\n }\n\n public setSelection(focus: Position, anchor: Position | null = null): void {\n if (!focus) return;\n\n let { node: focusNode, offset: focusOffset } = this.computeNodeAndOffset(\n focus.row,\n focus.col,\n anchor ? anchor.row === focus.row && anchor.col > focus.col : false\n );\n let anchorNode = null,\n anchorOffset = null;\n if (anchor && (anchor.row !== focus.row || anchor.col !== focus.col)) {\n let { node, offset } = this.computeNodeAndOffset(\n anchor.row,\n anchor.col,\n focus.row === anchor.row && focus.col > anchor.col\n );\n anchorNode = node;\n anchorOffset = offset;\n }\n\n let windowSelection = window.getSelection();\n windowSelection!.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorNode || focusNode,\n anchorNode ? anchorOffset! : focusOffset\n );\n }\n\n public restoreLastSelection(): boolean {\n if (this.lastSelection && this.lastSelection.focus) {\n this.setSelection(this.lastSelection.focus, this.lastSelection.anchor);\n return true;\n }\n return false;\n }\n\n public paste(text: string, anchor: Position | null = null, focus: Position | null = null): void {\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) focus = this.getSelection(false);\n let beginning: Position, end: Position;\n if (!focus) {\n focus = {\n row: this.lines.length - 1,\n col: this.lines[this.lines.length - 1].length,\n };\n }\n if (!anchor) {\n anchor = focus;\n }\n if (\n anchor.row < focus.row ||\n (anchor.row === focus.row && anchor.col <= focus.col)\n ) {\n beginning = anchor;\n end = focus;\n } else {\n beginning = focus;\n end = anchor;\n }\n let insertedLines = text.split(editorRegExp.lineSplit);\n let lineBefore = this.lines[beginning.row].substr(0, beginning.col);\n let lineEnd = this.lines[end.row].substr(end.col);\n insertedLines[0] = lineBefore.concat(insertedLines[0]);\n let endColPos = insertedLines[insertedLines.length - 1].length;\n insertedLines[insertedLines.length - 1] = insertedLines[insertedLines.length - 1].concat(lineEnd);\n this.spliceLines(beginning.row, 1 + end.row - beginning.row, insertedLines);\n focus.row = beginning.row + insertedLines.length - 1;\n focus.col = endColPos;\n this.updateFormatting();\n this.setSelection(focus);\n this.fireChange();\n }\n\n public wrapSelection(pre: string, post: string, focus: Position | null = null, anchor: Position | null = null): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus || !anchor || focus.row !== anchor.row) return;\n this.lineDirty[focus.row] = true;\n\n const startCol = focus.col < anchor.col ? focus.col : anchor.col;\n const endCol = focus.col < anchor.col ? anchor.col : focus.col;\n const left = this.lines[focus.row].substr(0, startCol).concat(pre);\n const mid = endCol === startCol ? \"\" : this.lines[focus.row].substr(startCol, endCol - startCol);\n const right = post.concat(this.lines[focus.row].substr(endCol));\n this.lines[focus.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus.col = anchor.col + mid.length;\n\n this.updateFormatting();\n this.setSelection(focus, anchor);\n }\n\n public addEventListener<T extends EventType>(\n type: T,\n listener: T extends 'change' ? EventHandler<ChangeEvent> :\n T extends 'selection' ? EventHandler<SelectionEvent> :\n T extends 'drop' ? EventHandler<DropEvent> : never\n ): void {\n if (type.match(editorRegExp.changeEvent)) {\n this.listeners.change.push(listener as EventHandler<ChangeEvent>);\n }\n if (type.match(editorRegExp.selectionEvent)) {\n this.listeners.selection.push(listener as EventHandler<SelectionEvent>);\n }\n if (type.match(editorRegExp.dropEvent)) {\n this.listeners.drop.push(listener as EventHandler<DropEvent>);\n }\n }\n\n private fireChange(): void {\n this.updatePlaceholder();\n if (!this.textarea && !this.listeners.change.length) return;\n const content = this.getContent();\n if (this.textarea) this.textarea.value = content;\n for (let listener of this.listeners.change) {\n listener({\n content: content,\n linesDirty: [...this.lineDirty],\n });\n }\n }\n\n /**\n * beforeinput handler, exclusively to handle insertParagraph,\n * insertLineBreak, deleteContentBackward, and deleteContentForward events.\n * These used to be handled in the input event, but that caused issues with\n * Firefox where the input event would be sometimes not be fired for these\n * input types. deleteContentBackward/Forward are also handled here to fix a\n * Firefox-specific bug (#151) where backspacing on an empty line would not\n * remove it, because Firefox only removes the <br> inside the empty <div>\n * rather than merging the divs, and fixNodeHierarchy() would then re-add the\n * <br>, resulting in a no-op.\n * @param event The input event\n * @returns nothing\n */\n private handleBeforeInputEvent(event: Event): void {\n const beforeInputEvent = event as InputEvent;\n\n // Handle cross-line delete operations (backspace at col 0, delete at end of line)\n if (\n beforeInputEvent.inputType === \"deleteContentBackward\" ||\n beforeInputEvent.inputType === \"deleteContentForward\"\n ) {\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n if (!focus || !anchor) return;\n\n const isBackspace = beforeInputEvent.inputType === \"deleteContentBackward\";\n\n // Only intercept collapsed selections at line boundaries\n if (focus.row === anchor.row && focus.col === anchor.col) {\n if (isBackspace && focus.col === 0 && focus.row > 0) {\n // Backspace at start of line: merge current line into end of previous\n event.preventDefault();\n if (!this.isRestoringHistory) this.pushHistory();\n this.clearDirtyFlag();\n const prevLineLen = this.lines[focus.row - 1].length;\n this.lines[focus.row - 1] = this.lines[focus.row - 1] + this.lines[focus.row];\n this.lineDirty[focus.row - 1] = true;\n this.spliceLines(focus.row, 1);\n this.updateFormatting();\n this.setSelection({ row: focus.row - 1, col: prevLineLen });\n this.fireChange();\n return;\n }\n if (!isBackspace && focus.col === this.lines[focus.row].length && focus.row < this.lines.length - 1) {\n // Delete at end of line: merge next line into current\n event.preventDefault();\n if (!this.isRestoringHistory) this.pushHistory();\n this.clearDirtyFlag();\n const currentLineLen = this.lines[focus.row].length;\n this.lines[focus.row] = this.lines[focus.row] + this.lines[focus.row + 1];\n this.lineDirty[focus.row] = true;\n this.spliceLines(focus.row + 1, 1);\n this.updateFormatting();\n this.setSelection({ row: focus.row, col: currentLineLen });\n this.fireChange();\n return;\n }\n }\n // For within-line deletes or non-collapsed selections, let the browser handle it\n return;\n }\n\n if (\n beforeInputEvent.inputType !== \"insertParagraph\" &&\n beforeInputEvent.inputType !== \"insertLineBreak\"\n ) return;\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n this.clearDirtyFlag();\n\n const focus = this.getSelection();\n const anchor = this.getSelection(true);\n\n if (!focus || !anchor) return;\n \n // If focus and anchor are in different lines, simply remove everything \n // after the beginning of the selection and before the end of the selection\n // and remove any lines in between\n if (focus.row !== anchor.row) {\n const beginning = focus.row < anchor.row ? focus : anchor;\n const end = focus.row < anchor.row ? anchor : focus;\n this.lines[beginning.row] = this.lines[beginning.row].substring(0, beginning.col);\n this.lines[end.row] = this.lines[end.row].substring(end.col);\n this.spliceLines(beginning.row + 1, end.row - beginning.row - 1);\n focus.row = beginning.row + 1;\n focus.col = 0;\n } else {\n let continuableType: string | false = false;\n switch (this.lineTypes[focus.row]) {\n case \"TMUL\":\n continuableType = \"TMUL\";\n break;\n case \"TMOL\":\n continuableType = \"TMOL\";\n break;\n case \"TMIndentedCode\":\n continuableType = \"TMIndentedCode\";\n break;\n }\n \n const lineBeforeBreak = this.lines[focus.row].substring(0, focus.col <= anchor.col ? focus.col : anchor.col);\n const lineAfterBreak = this.lines[focus.row].substring(focus.col <= anchor.col ? anchor.col : focus.col);\n this.spliceLines(focus.row, 1, [lineBeforeBreak, lineAfterBreak]);\n\n focus.row += 1;\n focus.col = 0;\n\n if (continuableType) {\n let capture = lineGrammar[continuableType].regexp.exec(this.lines[focus.row - 1]);\n if (capture) {\n if (capture[2]) {\n if (continuableType === \"TMOL\") {\n capture[1] = capture[1].replace(editorRegExp.orderedListNumber, (result) => {\n return (parseInt(result) + 1).toString();\n });\n }\n this.lines[focus.row] = `${capture[1]}${this.lines[focus.row]}`;\n this.lineDirty[focus.row] = true;\n focus.col = capture[1].length;\n } else {\n this.lines[focus.row - 1] = \"\";\n this.lineDirty[focus.row - 1] = true;\n }\n }\n }\n }\n this.updateFormatting();\n this.setSelection(focus);\n\n // Scroll the element containing the selection into view\n if (focus && focus.row < this.lineElements.length) {\n (this.lineElements[focus.row] as HTMLElement).scrollIntoView({\n block: 'nearest',\n inline: 'nearest'\n });\n }\n\n this.fireChange();\n }\n\n private handleInputEvent(event: Event): void {\n const inputEvent = event as InputEvent;\n if (inputEvent.inputType === \"insertCompositionText\") return;\n if (!this.isRestoringHistory) this.pushHistory();\n\n let focus = this.getSelection();\n\n if ((inputEvent.inputType === \"insertParagraph\" || inputEvent.inputType === \"insertLineBreak\") && focus) {\n // This should never happen since these are handled by the beforeinput handler\n return;\n } else {\n if (!this.e!.firstChild) {\n this.e!.innerHTML = '<div class=\"TMBlankLine\"><br></div>';\n } else {\n this.fixNodeHierarchy();\n }\n this.updateLineContentsAndFormatting();\n }\n if (focus) {\n this.setSelection(focus);\n }\n\n this.fireChange();\n }\n\n private handleSelectionChangeEvent(_e: Event): void {\n this.fireSelection();\n }\n\n private handlePaste(event: ClipboardEvent): void {\n if (!this.isRestoringHistory) this.pushHistory();\n event.preventDefault();\n\n let text = (event as any).clipboardData.getData(\"text/plain\");\n this.paste(text);\n }\n\n private handleDrop(event: DragEvent): void {\n event.preventDefault();\n this.fireDrop(event.dataTransfer!);\n }\n\n /**\n * Toggles a task list checkbox when its rendered box is clicked. Only the single inner character\n * of the marker (`[ ]` -> `[x]` and back) is changed; the edit is length-preserving, recorded in\n * the undo history, and fires a `change` event, mirroring setCommandState's line-edit flow.\n */\n private handleClick(event: MouseEvent): void {\n const target = event.target as HTMLElement | null;\n const box = target && target.closest ? (target.closest(\".TMCheckbox\") as HTMLElement | null) : null;\n if (!box) return; // Not a checkbox click — let the default caret placement happen.\n\n // Walk up to the line element (a direct child of the editor) to find its source row.\n let lineEl: HTMLElement | null = box;\n while (lineEl && lineEl.parentNode !== this.e) {\n lineEl = lineEl.parentNode as HTMLElement | null;\n }\n if (!lineEl || lineEl.dataset.lineNum === undefined) return;\n const row = parseInt(lineEl.dataset.lineNum, 10);\n if (isNaN(row) || row < 0 || row >= this.lines.length) return;\n\n const col = this.computeColumn(box, 0);\n if (col === null) return;\n const ch = this.lines[row].charAt(col);\n if (ch !== \" \" && ch !== \"x\" && ch !== \"X\") return; // Defensive: not actually a checkbox char.\n\n event.preventDefault();\n\n if (!this.isRestoringHistory) this.pushHistory();\n this.clearDirtyFlag();\n const replacement = ch === \" \" ? \"x\" : \" \";\n this.lines[row] = this.lines[row].substr(0, col) + replacement + this.lines[row].substr(col + 1);\n this.lineDirty[row] = true;\n this.updateFormatting();\n this.fireChange();\n }\n\n public processInlineStyles(originalString: string): string {\n let processed = \"\";\n let stack: Array<{delimiter: string, delimString: string, count: number, output: string}> = [];\n let offset = 0;\n let string = originalString;\n\n outer: while (string) {\n // Soft line break: when a paragraph that spans several source lines is parsed as one\n // joined string, the lines are separated by \\n. Preserve it as a newline marker in the\n // output; splitInlineHTMLByLine() later splits the result back into per-line fragments.\n // No inline rule starts on a newline (NotTriggerChar and `.` both exclude it), so handling\n // it here keeps the tokenizer from stalling.\n if (string.charCodeAt(0) === 10) {\n processed += \"\\n\";\n string = string.substr(1);\n offset += 1;\n continue outer;\n }\n\n // Process simple rules (non-delimiter)\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n if (this.mergedInlineGrammar[rule]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(editorRegExp.inlineReplacementPlaceholder, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n \n // Process custom inline grammar rules\n for (let rule in this.customInlineGrammar) {\n if (rule !== \"escape\" && rule !== \"code\" && rule !== \"autolink\" && rule !== \"html\" && rule !== \"linkOpen\" && rule !== \"imageOpen\" && rule !== \"linkLabel\" && rule !== \"default\") {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar[rule].replacement.replace(editorRegExp.inlineReplacementPlaceholder, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n }\n }\n\n // Check for GFM extended (non-delimited) autolinks: bare URLs (www.…, http(s)://…, ftp://…),\n // email addresses, and mailto:/xmpp: links. These are only recognized at the start of the\n // string or immediately after whitespace or one of the delimiters `*`, `_`, `~`, `(`.\n const precedingChar = offset > 0 ? originalString[offset - 1] : \"\";\n if (precedingChar === \"\" || editorRegExp.autolinkPrecedingChar.test(precedingChar)) {\n let autolink = this.parseAutolinkExtension(string);\n if (autolink) {\n processed = `${processed}${autolink.output}`;\n string = string.substr(autolink.charCount);\n offset += autolink.charCount;\n continue outer;\n }\n }\n\n // Check for links / images\n let potentialLink = string.match(this.mergedInlineGrammar.linkOpen.regexp);\n let potentialImage = string.match(this.mergedInlineGrammar.imageOpen.regexp);\n if (potentialImage || potentialLink) {\n let result = this.parseLinkOrImage(string, !!potentialImage);\n if (result) {\n processed = `${processed}${result.output}`;\n string = string.substr(result.charCount);\n offset += result.charCount;\n continue outer;\n }\n }\n\n // Check for em / strong delimiters\n let cap = editorRegExp.emphasisDelimiter.exec(string);\n if (cap) {\n let delimCount = cap[0].length;\n const delimString = cap[0];\n const currentDelimiter = cap[0][0];\n\n string = string.substr(cap[0].length);\n\n const preceding = offset > 0 ? originalString.substr(0, offset) : \" \";\n const following = offset + cap[0].length < originalString.length ? string : \" \";\n\n const punctuationFollows = following.match(punctuationLeading);\n const punctuationPrecedes = preceding.match(punctuationTrailing);\n const whitespaceFollows = following.match(editorRegExp.leadingWhitespace);\n const whitespacePrecedes = preceding.match(editorRegExp.trailingWhitespace);\n\n let canOpen = !whitespaceFollows && (!punctuationFollows || !!whitespacePrecedes || !!punctuationPrecedes);\n let canClose = !whitespacePrecedes && (!punctuationPrecedes || !!whitespaceFollows || !!punctuationFollows);\n\n if (currentDelimiter === \"_\" && canOpen && canClose) {\n canOpen = !!punctuationPrecedes;\n canClose = !!punctuationFollows;\n }\n\n if (canClose) {\n let stackPointer = stack.length - 1;\n while (delimCount && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === currentDelimiter) {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n if (delimCount >= 2 && stack[stackPointer].count >= 2) {\n processed = `<span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span><strong class=\"TMStrong\">${processed}</strong><span class=\"TMMark\">${currentDelimiter}${currentDelimiter}</span>`;\n delimCount -= 2;\n stack[stackPointer].count -= 2;\n } else {\n processed = `<span class=\"TMMark\">${currentDelimiter}</span><em class=\"TMEm\">${processed}</em><span class=\"TMMark\">${currentDelimiter}</span>`;\n delimCount -= 1;\n stack[stackPointer].count -= 1;\n }\n\n if (stack[stackPointer].count === 0) {\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n stackPointer--;\n }\n } else {\n stackPointer--;\n }\n }\n }\n\n if (delimCount && canOpen) {\n stack.push({\n delimiter: currentDelimiter,\n delimString: delimString,\n count: delimCount,\n output: processed,\n });\n processed = \"\";\n delimCount = 0;\n }\n\n if (delimCount) {\n processed = `${processed}${delimString.substr(0, delimCount)}`;\n }\n\n offset += cap[0].length;\n continue outer;\n }\n\n // Check for strikethrough delimiter\n cap = editorRegExp.strikethroughDelimiter.exec(string);\n if (cap) {\n let consumed = false;\n let stackPointer = stack.length - 1;\n while (!consumed && stackPointer >= 0) {\n if (stack[stackPointer].delimiter === \"~\") {\n while (stackPointer < stack.length - 1) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n processed = `<span class=\"TMMark\">~~</span><del class=\"TMStrikethrough\">${processed}</del><span class=\"TMMark\">~~</span>`;\n let entry = stack.pop()!;\n processed = `${entry.output}${processed}`;\n consumed = true;\n } else {\n stackPointer--;\n }\n }\n\n if (!consumed) {\n stack.push({\n delimiter: \"~\",\n delimString: \"~~\",\n count: 2,\n output: processed,\n });\n processed = \"\";\n }\n\n offset += cap[0].length;\n string = string.substr(cap[0].length);\n continue outer;\n }\n\n // Process 'default' rule\n cap = this.mergedInlineGrammar.default.regexp.exec(string);\n if (cap) {\n string = string.substr(cap[0].length);\n offset += cap[0].length;\n processed += this.mergedInlineGrammar.default.replacement.replace(editorRegExp.inlineReplacementPlaceholder, (str, p1) => htmlescape(cap[p1]));\n continue outer;\n }\n throw \"Infinite loop!\";\n }\n\n while (stack.length) {\n const entry = stack.pop()!;\n processed = `${entry.output}${entry.delimString.substr(0, entry.count)}${processed}`;\n }\n\n return processed;\n }\n\n private computeColumn(startNode: Node, offset: number): number | null {\n let node = startNode;\n let col: number;\n while (node && node.parentNode !== this.e) {\n node = node.parentNode!;\n }\n if (node === null) return null;\n\n if (startNode.nodeType === Node.TEXT_NODE || offset === 0) {\n col = offset;\n node = startNode;\n } else if (offset > 0) {\n node = startNode.childNodes[offset - 1];\n col = node.textContent!.length;\n } else {\n col = 0;\n node = startNode;\n }\n while (node.parentNode !== this.e) {\n if (node.previousSibling) {\n node = node.previousSibling;\n col += node.textContent!.length;\n } else {\n node = node.parentNode as unknown as ChildNode;\n }\n }\n return col;\n }\n\n private computeNodeAndOffset(row: number, col: number, bindRight: boolean = false): {node: Node, offset: number} {\n if (row >= this.lineElements.length) {\n row = this.lineElements.length - 1;\n col = this.lines[row].length;\n }\n if (col > this.lines[row].length) {\n col = this.lines[row].length;\n }\n const parentNode = this.lineElements[row] as HTMLElement;\n let node = parentNode.firstChild;\n\n let childrenComplete = false;\n let rv = {\n node: parentNode.firstChild ? parentNode.firstChild : parentNode,\n offset: 0,\n };\n\n while (node !== parentNode) {\n if (!childrenComplete && node!.nodeType === Node.TEXT_NODE) {\n if (node!.nodeValue!.length >= col) {\n if (bindRight && node!.nodeValue!.length === col) {\n rv = { node: node!, offset: col };\n col = 0;\n } else {\n return { node: node!, offset: col };\n }\n } else {\n col -= node!.nodeValue!.length;\n }\n }\n if (!childrenComplete && node!.firstChild) {\n node = node!.firstChild;\n } else if (node!.nextSibling) {\n childrenComplete = false;\n node = node!.nextSibling;\n } else {\n childrenComplete = true;\n node = node!.parentNode as unknown as ChildNode;\n }\n }\n\n return rv;\n }\n\n private updateLineContentsAndFormatting(): void {\n this.clearDirtyFlag();\n this.updateLineContents();\n this.updateFormatting();\n }\n\n private clearDirtyFlag(): void {\n this.lineDirty = new Array(this.lines.length);\n for (let i = 0; i < this.lineDirty.length; i++) {\n this.lineDirty[i] = false;\n }\n }\n\n private updateLineContents(): void {\n let lineDelta = this.e!.childElementCount - this.lines.length;\n if (lineDelta) {\n let firstChangedLine = 0;\n while (\n firstChangedLine <= this.lines.length &&\n firstChangedLine <= this.lineElements.length &&\n this.lineElements[firstChangedLine] &&\n this.lines[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).textContent &&\n this.lineTypes[firstChangedLine] === (this.lineElements[firstChangedLine] as HTMLElement).className\n ) {\n firstChangedLine++;\n }\n\n let lastChangedLine = -1;\n while (\n -lastChangedLine < this.lines.length &&\n -lastChangedLine < this.lineElements.length &&\n this.lines[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).textContent &&\n this.lineTypes[this.lines.length + lastChangedLine] ===\n (this.lineElements[this.lineElements.length + lastChangedLine] as HTMLElement).className\n ) {\n lastChangedLine--;\n }\n\n let linesToDelete = this.lines.length + lastChangedLine + 1 - firstChangedLine;\n if (linesToDelete < -lineDelta) linesToDelete = -lineDelta;\n if (linesToDelete < 0) linesToDelete = 0;\n\n let linesToAdd = [];\n for (let l = 0; l < linesToDelete + lineDelta; l++) {\n linesToAdd.push((this.lineElements[firstChangedLine + l] as HTMLElement).textContent || \"\");\n }\n this.spliceLines(firstChangedLine, linesToDelete, linesToAdd, false);\n } else {\n for (let line = 0; line < this.lineElements.length; line++) {\n let e = this.lineElements[line] as HTMLElement;\n let ct = e.textContent || \"\";\n if (this.lines[line] !== ct || this.lineTypes[line] !== e.className) {\n this.lines[line] = ct;\n this.lineTypes[line] = e.className;\n this.lineDirty[line] = true;\n }\n }\n }\n }\n\n private spliceLines(\n startLine: number,\n linesToDelete: number = 0,\n linesToInsert: string[] = [],\n adjustLineElements: boolean = true\n ): void {\n if (adjustLineElements) {\n for (let i = 0; i < linesToDelete; i++) {\n this.e!.removeChild(this.e!.childNodes[startLine]);\n }\n }\n\n let insertedBlank = [];\n let insertedDirty = [];\n\n for (let i = 0; i < linesToInsert.length; i++) {\n insertedBlank.push(\"\");\n insertedDirty.push(true);\n if (adjustLineElements) {\n if (this.e!.childNodes[startLine])\n this.e!.insertBefore(document.createElement(\"div\"), this.e!.childNodes[startLine]);\n else this.e!.appendChild(document.createElement(\"div\"));\n }\n }\n\n this.lines.splice(startLine, linesToDelete, ...linesToInsert);\n this.lineTypes.splice(startLine, linesToDelete, ...insertedBlank);\n this.lineDirty.splice(startLine, linesToDelete, ...insertedDirty);\n }\n\n private fixNodeHierarchy(): void {\n const originalChildren = Array.from(this.e!.childNodes);\n\n const replaceChild = (child: Node, ...newChildren: Node[]) => {\n const parent = child.parentElement!;\n const nextSibling = child.nextSibling;\n parent.removeChild(child);\n newChildren.forEach((newChild) =>\n nextSibling ? parent.insertBefore(newChild, nextSibling) : parent.appendChild(newChild)\n );\n };\n\n originalChildren.forEach((child) => {\n if (child.nodeType !== Node.ELEMENT_NODE || (child as HTMLElement).tagName !== \"DIV\") {\n const divWrapper = document.createElement(\"div\");\n replaceChild(child, divWrapper);\n divWrapper.appendChild(child);\n } else if (child.childNodes.length === 0) {\n child.appendChild(document.createElement(\"br\"));\n } else {\n const grandChildren = Array.from(child.childNodes);\n if (\n grandChildren.some(\n (grandChild) =>\n grandChild.nodeType === Node.ELEMENT_NODE && (grandChild as HTMLElement).tagName === \"DIV\"\n )\n ) {\n return replaceChild(child, ...grandChildren);\n }\n }\n });\n }\n\n /**\n * Attempts to parse a GFM extended (non-delimited) autolink at the start of `string`: a bare URL\n * (`www.…`, `http://…`, `https://…`, `ftp://…`), an email address, or a `mailto:`/`xmpp:` link.\n * The caller is responsible for the preceding-character boundary check. On success, returns the\n * rendered HTML (the matched text wrapped in a `TMAutolink` span, exactly like the content of an\n * angle-bracketed autolink) and the number of source characters consumed; otherwise `false`.\n */\n public parseAutolinkExtension(string: string): {output: string, charCount: number} | false {\n const match = this.matchExtendedAutolink(string);\n if (!match) return false;\n return {\n output: `<span class=\"TMAutolink\">${htmlescape(match)}</span>`,\n charCount: match.length,\n };\n }\n\n /** Returns the longest extended-autolink substring at the start of `string`, or `false`. */\n private matchExtendedAutolink(string: string): string | false {\n // --- Bare URL / www autolink -----------------------------------------------------------------\n // www. is treated as part of the domain; an explicit scheme is stripped before the domain.\n const schemeCap = editorRegExp.autolinkScheme.exec(string);\n const isWww = editorRegExp.autolinkWww.test(string);\n if (schemeCap || isWww) {\n const prefixLen = schemeCap ? schemeCap[0].length : 0;\n const afterPrefix = string.substr(prefixLen);\n // A valid domain is dot-separated segments of alphanumerics, `_` and `-`, with at least one\n // dot and no underscore in the last two segments.\n const domainCap = editorRegExp.autolinkDomain.exec(afterPrefix);\n if (domainCap && this.isValidAutolinkDomain(domainCap[0])) {\n // After the domain, any run of non-space, non-`<` characters forms the path/query/fragment.\n const pathCap = editorRegExp.autolinkPath.exec(afterPrefix.substr(domainCap[0].length));\n const link = string.substr(0, prefixLen + domainCap[0].length + (pathCap ? pathCap[0].length : 0));\n const trimmed = this.trimAutolinkTrailing(link);\n // Guard against trailing punctuation trimming having eaten into the domain.\n if (trimmed.length >= prefixLen + domainCap[0].length) return trimmed;\n }\n }\n\n // --- mailto: / xmpp: autolink ----------------------------------------------------------------\n const protoCap = editorRegExp.autolinkProtocol.exec(string);\n if (protoCap) {\n const emailCap = this.matchAutolinkEmail(string.substr(protoCap[0].length));\n if (emailCap) {\n // xmpp addresses may carry a `/resource` suffix.\n let extra = \"\";\n if (editorRegExp.autolinkXmpp.test(string)) {\n const resCap = editorRegExp.autolinkXmppResource.exec(\n string.substr(protoCap[0].length + emailCap.length)\n );\n if (resCap) extra = resCap[0];\n }\n return protoCap[0] + emailCap + extra;\n }\n }\n\n // --- Bare email autolink ---------------------------------------------------------------------\n const email = this.matchAutolinkEmail(string);\n if (email) return email;\n\n return false;\n }\n\n /** GFM domain validity: at least one dot and no underscore in the last two segments. */\n private isValidAutolinkDomain(domain: string): boolean {\n const segments = domain.split(\".\");\n if (segments.length < 2) return false;\n return !segments.slice(-2).some((seg) => seg.indexOf(\"_\") >= 0);\n }\n\n /** Matches a bare email address at the start of `string` per the GFM extension, or `false`. */\n private matchAutolinkEmail(string: string): string | false {\n // Local part: alphanumerics plus `.`, `-`, `_`, `+`. Domain: dot-separated labels of\n // alphanumerics, `-` and `_`, with at least one dot and no `-`/`_` as the final character.\n const cap = editorRegExp.autolinkEmail.exec(string);\n if (!cap) return false;\n let email = cap[0];\n while (email.length && editorRegExp.emailTrailingChar.test(email)) email = email.substr(0, email.length - 1);\n // Must still end in a complete TLD (i.e. retain a dot after the trimming).\n if (!editorRegExp.emailTld.test(email)) return false;\n return email;\n }\n\n /**\n * Strips trailing characters that GFM excludes from an autolink: the punctuation `?!.,:*_~`, and\n * any unbalanced trailing `)` (more closing than opening parentheses in the link).\n */\n private trimAutolinkTrailing(link: string): string {\n let end = link.length;\n let changed = true;\n while (changed && end > 0) {\n changed = false;\n const c = link[end - 1];\n if (\"?!.,:*_~\".indexOf(c) >= 0) {\n end--;\n changed = true;\n } else if (c === \")\") {\n let open = 0;\n let close = 0;\n for (let i = 0; i < end; i++) {\n if (link[i] === \"(\") open++;\n else if (link[i] === \")\") close++;\n }\n if (close > open) {\n end--;\n changed = true;\n }\n }\n }\n return link.substr(0, end);\n }\n\n public parseLinkOrImage(originalString: string, isImage: boolean): {output: string, charCount: number} | false {\n // Skip the opening bracket\n let textOffset = isImage ? 2 : 1;\n let opener = originalString.substr(0, textOffset);\n let type = isImage ? \"TMImage\" : \"TMLink\";\n let currentOffset = textOffset;\n\n let bracketLevel = 1;\n let linkText: string | false = false;\n let linkRef: string | false = false;\n let linkLabel: string[] = [];\n let linkDetails: string[] = [];\n\n textOuter: while (\n currentOffset < originalString.length &&\n linkText === false\n ) {\n let string = originalString.substr(currentOffset);\n\n // Capture any escapes and code blocks at current position\n for (let rule of [\"escape\", \"code\", \"autolink\", \"html\"]) {\n let cap = this.mergedInlineGrammar[rule].regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n continue textOuter;\n }\n }\n\n // Check for image\n if (string.match(this.mergedInlineGrammar.imageOpen.regexp)) {\n bracketLevel++;\n currentOffset += 2;\n continue textOuter;\n }\n\n // Check for link\n if (string.match(this.mergedInlineGrammar.linkOpen.regexp)) {\n bracketLevel++;\n if (!isImage) {\n if (this.parseLinkOrImage(string, false)) {\n return false;\n }\n }\n currentOffset += 1;\n continue textOuter;\n }\n\n // Check for closing bracket\n if (string.match(editorRegExp.linkClosingBracket)) {\n bracketLevel--;\n if (bracketLevel === 0) {\n linkText = originalString.substr(textOffset, currentOffset - textOffset);\n currentOffset++;\n continue textOuter;\n }\n }\n\n // Nothing matches, proceed to next char\n currentOffset++;\n }\n\n // Did we find a link text?\n if (linkText === false) return false;\n\n // Check what type of link this is\n let nextChar = currentOffset < originalString.length ? originalString.substr(currentOffset, 1) : \"\";\n\n // REFERENCE LINKS\n if (nextChar === \"[\") {\n let string = originalString.substr(currentOffset);\n let cap = this.mergedInlineGrammar.linkLabel.regexp.exec(string);\n if (cap) {\n currentOffset += cap[0].length;\n linkLabel.push(cap[1], cap[2], cap[3]);\n if (cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!]) {\n linkRef = cap[this.mergedInlineGrammar.linkLabel.labelPlaceholder!];\n } else {\n linkRef = linkText.trim();\n }\n } else {\n return false;\n }\n } else if (nextChar !== \"(\") {\n // Shortcut ref link\n linkRef = linkText.trim();\n } else {\n // INLINE LINKS\n currentOffset++;\n let parenthesisLevel = 1;\n\n inlineOuter: while (currentOffset < originalString.length && parenthesisLevel > 0) {\n let string = originalString.substr(currentOffset);\n\n // Process whitespace\n let cap = editorRegExp.leadingWhitespaceRun.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(cap[0]);\n break;\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n if (linkDetails[0].match(editorRegExp.containsOpenAngle)) {\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n } else {\n if (parenthesisLevel !== 1) return false;\n linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n }\n break;\n case 3:\n linkDetails.push(cap[0]);\n break;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n case 7:\n linkDetails[6] = linkDetails[6].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process backslash escapes\n cap = this.mergedInlineGrammar.escape.regexp.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n\n // Process opening angle bracket\n if (linkDetails.length < 2 && string.match(editorRegExp.openingAngle)) {\n if (linkDetails.length === 0) linkDetails.push(\"\");\n linkDetails[0] = linkDetails[0].concat(\"<\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing angle bracket\n if ((linkDetails.length === 1 || linkDetails.length === 2) && string.match(editorRegExp.closingAngle)) {\n if (linkDetails.length === 1) linkDetails.push(\"\");\n linkDetails.push(\">\");\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process non-parenthesis delimiter for title\n cap = editorRegExp.titleQuote.exec(string);\n if (cap && (linkDetails.length === 0 || linkDetails.length === 1 || linkDetails.length === 4)) {\n while (linkDetails.length < 4) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n if (cap && (linkDetails.length === 5 || linkDetails.length === 6) && linkDetails[4] === cap[0]) {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(cap[0]);\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process opening parenthesis\n if (string.match(editorRegExp.openingParen)) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(\"\");\n case 2:\n linkDetails[1] = linkDetails[1].concat(\"(\");\n if (!linkDetails[0].match(editorRegExp.endsWithOpenAngle)) parenthesisLevel++;\n break;\n case 3:\n linkDetails.push(\"\");\n case 4:\n linkDetails.push(\"(\");\n break;\n case 5:\n linkDetails.push(\"\");\n case 6:\n if (linkDetails[4] === \"(\") return false;\n linkDetails[5] = linkDetails[5].concat(\"(\");\n break;\n default:\n return false;\n }\n currentOffset++;\n continue inlineOuter;\n }\n\n // Process closing parenthesis\n if (string.match(editorRegExp.closingParen)) {\n if (linkDetails.length <= 2) {\n while (linkDetails.length < 2) linkDetails.push(\"\");\n if (!linkDetails[0].match(editorRegExp.endsWithOpenAngle)) parenthesisLevel--;\n if (parenthesisLevel > 0) {\n linkDetails[1] = linkDetails[1].concat(\")\");\n }\n } else if (linkDetails.length === 5 || linkDetails.length === 6) {\n if (linkDetails[4] === \"(\") {\n if (linkDetails.length === 5) linkDetails.push(\"\");\n linkDetails.push(\")\");\n } else {\n if (linkDetails.length === 5) linkDetails.push(\")\");\n else linkDetails[5] = linkDetails[5].concat(\")\");\n }\n } else {\n parenthesisLevel--;\n }\n\n if (parenthesisLevel === 0) {\n while (linkDetails.length < 7) linkDetails.push(\"\");\n }\n\n currentOffset++;\n continue inlineOuter;\n }\n\n // Any old character\n cap = editorRegExp.anyChar.exec(string);\n if (cap) {\n switch (linkDetails.length) {\n case 0:\n linkDetails.push(\"\");\n case 1:\n linkDetails.push(cap[0]);\n break;\n case 2:\n linkDetails[1] = linkDetails[1].concat(cap[0]);\n break;\n case 3:\n return false;\n case 4:\n return false;\n case 5:\n linkDetails.push(\"\");\n case 6:\n linkDetails[5] = linkDetails[5].concat(cap[0]);\n break;\n default:\n return false;\n }\n currentOffset += cap[0].length;\n continue inlineOuter;\n }\n throw \"Infinite loop\";\n }\n if (parenthesisLevel > 0) return false;\n }\n\n if (linkRef !== false) {\n // Reference link; check that linkRef is valid\n let valid = false;\n for (let label of this.linkLabels) {\n if (label === linkRef) {\n valid = true;\n break;\n }\n }\n let labelClass = valid ? \"TMLinkLabel TMLinkLabel_Valid\" : \"TMLinkLabel TMLinkLabel_Invalid\";\n let output = `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type} ${\n linkLabel.length < 3 || !linkLabel[1] ? labelClass : \"\"\n }\">${this.processInlineStyles(linkText)}</span><span class=\"TMMark TMMark_${type}\">]</span>`;\n\n if (linkLabel.length >= 3) {\n output = output.concat(\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[0]}</span>`,\n `<span class=\"${labelClass}\">${linkLabel[1]}</span>`,\n `<span class=\"TMMark TMMark_${type}\">${linkLabel[2]}</span>`\n );\n }\n return {\n output: output,\n charCount: currentOffset,\n };\n } else if (linkDetails.length > 0) {\n // Inline link\n while (linkDetails.length < 7) {\n linkDetails.push(\"\");\n }\n\n // Every literal mark fragment is HTML-escaped: linkDetails[0]/[2] hold the angle brackets of\n // an `<...>` destination, so leaving them raw would inject a stray `<`/`>` into the output —\n // which splitInlineHTMLByLine then mistakes for an HTML tag.\n return {\n output: `<span class=\"TMMark TMMark_${type}\">${opener}</span><span class=\"${type}\">${this.processInlineStyles(\n linkText\n )}</span><span class=\"TMMark TMMark_${type}\">](${\n htmlescape(linkDetails[0])\n }</span><span class=\"${type}Destination\">${\n htmlescape(linkDetails[1])\n }</span><span class=\"TMMark TMMark_${type}\">${htmlescape(linkDetails[2])}${\n htmlescape(linkDetails[3])\n }${htmlescape(linkDetails[4])}</span><span class=\"${type}Title\">${\n htmlescape(linkDetails[5])\n }</span><span class=\"TMMark TMMark_${type}\">${htmlescape(linkDetails[6])})</span>`,\n charCount: currentOffset,\n };\n }\n\n return false;\n }\n\n private computeCommonAncestor(node1: Node | null, node2: Node | null): Node | null {\n if (!node1 || !node2) return null;\n if (node1 === node2) return node1;\n const ancestry = (node: Node) => {\n let ancestry = [];\n while (node) {\n ancestry.unshift(node);\n node = node.parentNode!;\n }\n return ancestry;\n };\n\n const ancestry1 = ancestry(node1);\n const ancestry2 = ancestry(node2);\n\n if (ancestry1[0] !== ancestry2[0]) return null;\n let i;\n for (i = 0; ancestry1[i] === ancestry2[i]; i++);\n return ancestry1[i - 1];\n }\n\n private computeEnclosingMarkupNode(focus: Position, anchor: Position | null, className: string): Node | null {\n let node = null;\n if (!focus) return null;\n if (!anchor) {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode) return null;\n node = sel.focusNode;\n } else {\n if (focus.row !== anchor.row) return null;\n const sel = window.getSelection();\n if (!sel) return null;\n node = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n }\n if (!node) return null;\n while (node !== this.e) {\n if ((node as HTMLElement).classList && (node as HTMLElement).classList.contains(className)) return node;\n node = node.parentNode!;\n }\n return null;\n }\n\n public getCommandState(focus: Position | null = null, anchor: Position | null = null): Record<string, boolean | null> {\n let commandState: Record<string, boolean | null> = {};\n if (!focus) focus = this.getSelection(false);\n if (!anchor) anchor = this.getSelection(true);\n if (!focus) {\n for (let cmd in commands) {\n commandState[cmd] = null;\n }\n return commandState;\n }\n if (!anchor) anchor = focus;\n\n let start: Position, end: Position;\n if (anchor.row < focus.row || (anchor.row === focus.row && anchor.col < focus.col)) {\n start = anchor;\n end = focus;\n } else {\n start = focus;\n end = anchor;\n }\n if (end.row > start.row && end.col === 0) {\n end.row--;\n end.col = this.lines[end.row].length;\n }\n\n for (let cmd in commands) {\n if (commands[cmd].type === \"inline\") {\n if (!focus || focus.row !== anchor!.row || !this.isInlineFormattingAllowed()) {\n commandState[cmd] = null;\n } else {\n commandState[cmd] =\n !!this.computeEnclosingMarkupNode(focus, anchor, commands[cmd].className) ||\n (focus.col === anchor!.col &&\n !!this.lines[focus.row].substr(0, focus.col).match(commands[cmd].unset.prePattern) &&\n !!this.lines[focus.row].substr(focus.col).match(commands[cmd].unset.postPattern));\n }\n }\n if (commands[cmd].type === \"line\") {\n if (!focus) {\n commandState[cmd] = null;\n } else {\n let state: boolean | null = this.lineTypes[start.row] === commands[cmd].className;\n for (let line = start.row; line <= end.row; line++) {\n if ((this.lineTypes[line] === commands[cmd].className) !== state) {\n state = null;\n break;\n }\n }\n commandState[cmd] = state;\n }\n }\n }\n return commandState;\n }\n\n public setCommandState(command: string, state: boolean): void {\n if (!this.isRestoringHistory) this.pushHistory();\n if (commands[command].type === \"inline\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!anchor) return;\n if (anchor.row !== focus!.row) return;\n if (!this.isInlineFormattingAllowed()) return;\n let markupNode = this.computeEnclosingMarkupNode(focus!, anchor, commands[command].className);\n this.clearDirtyFlag();\n\n if (markupNode) {\n this.lineDirty[focus!.row] = true;\n const startCol = this.computeColumn(markupNode, 0)!;\n const len = markupNode.textContent!.length;\n const left = this.lines[focus!.row]\n .substr(0, startCol)\n .replace(commands[command].unset.prePattern, \"\");\n const mid = this.lines[focus!.row].substr(startCol, len);\n const right = this.lines[focus!.row]\n .substr(startCol + len)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(mid, right);\n anchor.col = left.length;\n focus!.col = anchor.col + len;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else if (\n focus!.col === anchor.col &&\n !!this.lines[focus!.row].substr(0, focus!.col).match(commands[command].unset.prePattern) &&\n !!this.lines[focus!.row].substr(focus!.col).match(commands[command].unset.postPattern)\n ) {\n this.lineDirty[focus!.row] = true;\n const left = this.lines[focus!.row]\n .substr(0, focus!.col)\n .replace(commands[command].unset.prePattern, \"\");\n const right = this.lines[focus!.row]\n .substr(focus!.col)\n .replace(commands[command].unset.postPattern, \"\");\n this.lines[focus!.row] = left.concat(right);\n focus!.col = anchor.col = left.length;\n this.updateFormatting();\n this.setSelection(focus!, anchor);\n this.fireChange();\n } else {\n let { startCol, endCol } =\n focus!.col < anchor.col\n ? { startCol: focus!.col, endCol: anchor.col }\n : { startCol: anchor.col, endCol: focus!.col };\n\n let match = this.lines[focus!.row]\n .substr(startCol, endCol - startCol)\n .match(editorRegExp.surroundingWhitespace);\n if (match) {\n startCol += match.groups!.leading.length;\n endCol -= match.groups!.trailing.length;\n }\n\n focus!.col = startCol;\n anchor.col = endCol;\n\n this.wrapSelection(commands[command].set.pre, commands[command].set.post, focus, anchor);\n this.fireChange();\n }\n } else if (commands[command].type === \"line\") {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n this.clearDirtyFlag();\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n for (let line = start.row; line <= end.row; line++) {\n if (state && this.lineTypes[line] !== commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].set.pattern,\n commands[command].set.replacement.replace(\"$#\", (line - start.row + 1).toString())\n );\n this.lineDirty[line] = true;\n }\n if (!state && this.lineTypes[line] === commands[command].className) {\n this.lines[line] = this.lines[line].replace(\n commands[command].unset.pattern,\n commands[command].unset.replacement\n );\n this.lineDirty[line] = true;\n }\n }\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n }\n\n /**\n * Returns the list-item marker prefix (e.g. `- `, `* `, `1. `) of `line`, or null if the line\n * isn't a bulleted or ordered list item.\n */\n private listItemMarker(line: string): string | null {\n const ul = lineGrammar.TMUL.regexp.exec(line);\n if (ul) return ul[1];\n const ol = lineGrammar.TMOL.regexp.exec(line);\n if (ol) return ol[1];\n return null;\n }\n\n /** True when line `row` is a list item whose content begins with a task-list checkbox. */\n public isTaskListItem(row: number): boolean {\n if (row < 0 || row >= this.lines.length) return false;\n const type = this.lineTypes[row];\n if (type !== \"TMUL\" && type !== \"TMOL\") return false;\n const marker = this.listItemMarker(this.lines[row]);\n if (marker === null) return false;\n return editorRegExp.taskListItem.test(this.lines[row].substr(marker.length));\n }\n\n /** Adds an unchecked `[ ]` checkbox to a line, making it a bulleted list item if it wasn't one. */\n private addTaskCheckbox(line: string): string {\n const marker = this.listItemMarker(line);\n if (marker !== null) {\n const content = line.substr(marker.length);\n if (editorRegExp.taskListItem.test(content)) return line; // already a task item\n return `${marker}[ ] ${content}`;\n }\n // Not a list item yet: strip any existing block marker and make it a bulleted task item,\n // mirroring how the `ul` command normalizes a line.\n return line.replace((commands.ul as LineCommand).set.pattern, \"- [ ] $2\");\n }\n\n /** Removes a task-list checkbox from a line, leaving the surrounding list item intact. */\n private removeTaskCheckbox(line: string): string {\n const marker = this.listItemMarker(line);\n if (marker === null) return line;\n const task = editorRegExp.taskListItem.exec(line.substr(marker.length));\n if (!task) return line;\n return `${marker}${task[5]}`;\n }\n\n /**\n * Toggles GFM task-list checkboxes on the selected line(s). If every selected line is already a\n * task item, their checkboxes are removed (leaving plain list items); otherwise each line gets an\n * unchecked `[ ]` checkbox (becoming a bulleted list item if it wasn't a list item yet). Mirrors\n * setCommandState's line-edit flow: pushes undo history, reformats, and fires a `change` event.\n */\n public toggleTaskList(): void {\n let anchor = this.getSelection(true);\n let focus = this.getSelection(false);\n if (!anchor) anchor = focus;\n if (!focus) return;\n\n let start = anchor!.row > focus!.row ? focus! : anchor!;\n let end = anchor!.row > focus!.row ? anchor! : focus!;\n if (end.row > start.row && end.col === 0) {\n end.row--;\n }\n\n let allTasks = true;\n for (let line = start.row; line <= end.row; line++) {\n if (!this.isTaskListItem(line)) {\n allTasks = false;\n break;\n }\n }\n\n if (!this.isRestoringHistory) this.pushHistory();\n this.clearDirtyFlag();\n\n for (let line = start.row; line <= end.row; line++) {\n const updated = allTasks\n ? this.removeTaskCheckbox(this.lines[line])\n : this.addTaskCheckbox(this.lines[line]);\n if (updated !== this.lines[line]) {\n this.lines[line] = updated;\n this.lineDirty[line] = true;\n }\n }\n\n this.updateFormatting();\n this.setSelection(\n { row: end.row, col: this.lines[end.row].length },\n { row: start.row, col: 0 }\n );\n this.fireChange();\n }\n\n public isInlineFormattingAllowed(): boolean {\n const sel = window.getSelection();\n if (!sel || !sel.focusNode || !sel.anchorNode) return false;\n\n if (\n sel.isCollapsed &&\n sel.focusNode.nodeType === 3 &&\n sel.focusOffset === sel.focusNode.nodeValue!.length\n ) {\n let node;\n for (node = sel.focusNode; node && node.nextSibling === null; node = node.parentNode!);\n if (\n node &&\n node.nextSibling &&\n (node.nextSibling as HTMLElement).classList &&\n (node.nextSibling as HTMLElement).classList.contains(\"TMInlineFormatted\")\n )\n return true;\n }\n\n let ancestor = this.computeCommonAncestor(sel.focusNode, sel.anchorNode);\n if (!ancestor) return false;\n\n while (ancestor && ancestor !== this.e) {\n if (\n (ancestor as HTMLElement).classList &&\n ((ancestor as HTMLElement).classList.contains(\"TMInlineFormatted\") ||\n (ancestor as HTMLElement).classList.contains(\"TMBlankLine\"))\n )\n return true;\n ancestor = ancestor.parentNode!;\n }\n\n return false;\n }\n\n public toggleCommandState(command: string): void {\n if (!this.lastCommandState) this.lastCommandState = this.getCommandState();\n this.setCommandState(command, !this.lastCommandState[command]);\n }\n\n private fireDrop(dataTransfer: DataTransfer): void {\n for (let listener of this.listeners.drop) {\n listener({ dataTransfer });\n }\n }\n\n private fireSelection(): void {\n let focus = this.getSelection(false);\n let anchor = this.getSelection(true);\n\n // Save the current selection for restoration later\n this.lastSelection = {\n focus: focus,\n anchor: anchor\n };\n\n if (this.listeners.selection && this.listeners.selection.length) {\n let commandState = this.getCommandState(focus, anchor);\n if (this.lastCommandState) {\n Object.assign(this.lastCommandState, commandState);\n } else {\n this.lastCommandState = Object.assign({}, commandState);\n }\n for (let listener of this.listeners.selection) {\n listener({\n focus: focus!,\n anchor: anchor!,\n commandState: this.lastCommandState,\n });\n }\n }\n }\n}\n\nexport default Editor;\n"],"names":["global","this","require$$0","require$$1","require$$2","require$$3","sharedStoreModule","require$$4","require$$5","require$$6","require$$7","makeBuiltIn","makeBuiltInModule","ownKeys","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","svg","blockquote","bold","clear_formatting","code","h1","h2","hr","image","italic","link","ol","redo","strikethrough","tasklist","ul","undo","isMacLike","test","navigator","platform","DefaultCommands","name","action","innerHTML","title","hotkey","editor","toggleTaskList","enabled","focus","isTaskListItem","row","insertLink","isInlineFormattingAllowed","wrapSelection","insertImage","paste","canUndo","canRedo","CommandBar","constructor","props","e","commands","buttons","state","hotkeys","element","document","getElementById","body","createCommandBarElement","addEventListener","handleKeydown","setEditor","parentElement","createElement","className","command","el","appendChild","commandName","Object","assign","keys","split","modifiers","modifierexplanation","i","length","push","lastKey","match","concat","toUpperCase","key","toLowerCase","join","handleClick","event","preventDefault","editorHadFocus","contains","activeElement","restoreLastSelection","setCommandState","handleSelection","commandState","undefined","anchor","outer","modifier","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","replacements","ASCIIPunctuation","NotTriggerChar","Scheme","Email","HTMLOpenTag","HTMLCloseTag","HTMLTagName","HTMLComment","HTMLPI","HTMLDeclaration","HTMLCDATA","HTMLAttribute","HTMLAttValue","KnownTag","punctuationLeading","RegExp","punctuationTrailing","editorRegExp","macPlatform","lineSplit","replacementPlaceholder","inlineContentPlaceholder","inlineReplacementPlaceholder","blankContent","leadingWhitespace","trailingWhitespace","leadingWhitespaceRun","surroundingWhitespace","_wrapRegExp","leading","trailing","taskListItem","orderedListNumber","inlineTagName","changeEvent","selectionEvent","dropEvent","autolinkPrecedingChar","emphasisDelimiter","strikethroughDelimiter","autolinkScheme","autolinkWww","autolinkDomain","autolinkPath","autolinkProtocol","autolinkXmpp","autolinkXmppResource","autolinkEmail","emailTrailingChar","emailTld","linkClosingBracket","openingAngle","closingAngle","titleQuote","openingParen","closingParen","endsWithOpenAngle","containsOpenAngle","anyChar","lineGrammar","TMH1","regexp","replacement","TMH2","TMH3","TMH4","TMH5","TMH6","TMBlockquote","TMCodeFenceBacktickOpen","seq","TMCodeFenceTildeOpen","TMCodeFenceBacktickClose","TMCodeFenceTildeClose","TMBlankLine","TMSetextH1Marker","TMSetextH2Marker","TMHR","TMUL","TMOL","TMIndentedCode","TMLinkReferenceDefinition","labelPlaceholder","htmlBlockGrammar","start","end","paraInterrupt","inlineGrammar","escape","autolink","html","linkOpen","imageOpen","linkLabel","default","replacementRegexp","inlineRules","rule","re","source","replace","string","flags","createMergedInlineGrammar","customRules","arguments","merged","_objectSpread","ruleName","entries","processedRule","regexpSource","htmlescape","type","set","pre","post","unset","prePattern","postPattern","pattern","h3","h4","h5","h6","Editor","textarea","lines","lineElements","lineTypes","lineCaptures","lineReplacements","linkLabels","lineDirty","lastCommandState","customInlineGrammar","mergedInlineGrammar","hasFocus","lastSelection","listeners","change","selection","drop","undoStack","redoStack","isRestoringHistory","maxHistory","getElementsByTagName","tagName","parentNode","style","display","placeholder","_a","createEditorElement","setContent","content","value","handleUndoRedoKey","pushHistory","pushCurrentState","getContent","getSelection","shift","current","pop","prev","setSelection","next","isMac","ctrl","metaKey","ctrlKey","altKey","shiftKey","classList","add","contentEditable","whiteSpace","webkitUserModify","setAttribute","nextSibling","insertBefore","handleInputEvent","handleBeforeInputEvent","handleSelectionChangeEvent","handlePaste","handleDrop","childNodes","firstChild","removeChild","lineNum","le","Array","updateFormatting","updatePlaceholder","fireChange","remove","updateLineTypes","updateLinkLabels","applyLineTypes","l","capture","str","p1","p2","parseInt","processInlineStyles","isInlineGroupLeader","leaderType","isInlineContinuation","applyInlineGroup","applyLine","t","isBlankBlockquoteContent","cap","contentHTML","removeAttribute","dataset","mlSig","toString","contents","sigSource","idx","inlineContentIndex","JSON","stringify","sig","hashString","needsRender","fragments","splitInlineHTMLByLine","frag","replaceWithInline","m","exec","inlineFragment","openTags","ch","close","indexOf","substr","tag","substring","openTag","s","h","charCodeAt","codeBlockType","codeBlockSeqLength","htmlBlock","lineType","lineCapture","lineReplacement","groups","htmlBlockType","headingLine","headingLineType","task","checked","bulletClass","boxClass","getAnchor","window","startNode","anchorNode","focusNode","offset","anchorOffset","focusOffset","col","computeColumn","node","previousSibling","currentLineNumData","previousLineNumData","_b","currentLineNum","previousLineNum","computeNodeAndOffset","windowSelection","setBaseAndExtent","text","beginning","insertedLines","lineBefore","lineEnd","endColPos","spliceLines","startCol","endCol","left","mid","right","listener","linesDirty","beforeInputEvent","inputType","isBackspace","clearDirtyFlag","prevLineLen","currentLineLen","continuableType","lineBeforeBreak","lineAfterBreak","result","scrollIntoView","block","inline","inputEvent","fixNodeHierarchy","updateLineContentsAndFormatting","_e","fireSelection","clipboardData","getData","fireDrop","dataTransfer","target","box","closest","lineEl","isNaN","charAt","originalString","processed","stack","precedingChar","parseAutolinkExtension","output","charCount","potentialLink","potentialImage","parseLinkOrImage","delimCount","delimString","currentDelimiter","preceding","following","punctuationFollows","punctuationPrecedes","whitespaceFollows","whitespacePrecedes","canOpen","canClose","stackPointer","delimiter","entry","count","consumed","nodeType","Node","TEXT_NODE","textContent","bindRight","childrenComplete","rv","nodeValue","updateLineContents","lineDelta","childElementCount","firstChangedLine","lastChangedLine","linesToDelete","linesToAdd","line","ct","startLine","linesToInsert","adjustLineElements","insertedBlank","insertedDirty","splice","originalChildren","from","replaceChild","child","parent","_len","newChildren","_key","forEach","newChild","ELEMENT_NODE","divWrapper","grandChildren","some","grandChild","matchExtendedAutolink","schemeCap","isWww","prefixLen","afterPrefix","domainCap","isValidAutolinkDomain","pathCap","trimmed","trimAutolinkTrailing","protoCap","emailCap","matchAutolinkEmail","extra","resCap","email","domain","segments","slice","seg","changed","c","open","isImage","textOffset","opener","currentOffset","bracketLevel","linkText","linkRef","linkDetails","textOuter","nextChar","trim","parenthesisLevel","inlineOuter","valid","label","labelClass","computeCommonAncestor","node1","node2","ancestry","unshift","ancestry1","ancestry2","computeEnclosingMarkupNode","sel","getCommandState","cmd","markupNode","len","listItemMarker","marker","addTaskCheckbox","removeTaskCheckbox","allTasks","updated","isCollapsed","ancestor","toggleCommandState"],"mappings":"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","x_google_ignoreList":[0,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,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115]}
|